From 2a8cccf1e4aceb01671f82957c68278fc472da19 Mon Sep 17 00:00:00 2001 From: Woo Date: Mon, 9 Sep 2024 14:42:42 -0500 Subject: [PATCH 01/27] Initial working commit of 2048 demo --- Examples/MAX32655/Demo_2048/ARM/.cproject | 81 +++ Examples/MAX32655/Demo_2048/ARM/.project | 26 + .../ARM/.settings/language.settings.xml | 15 + .../org.eclipse.cdt.codan.core.prefs | 93 +++ .../ARM/.settings/org.eclipse.cdt.core.prefs | 15 + .../MAX32655/Demo_2048/ARM/.vscode/README.md | 47 ++ .../ARM/.vscode/c_cpp_properties.json | 53 ++ .../MAX32655/Demo_2048/ARM/.vscode/flash.gdb | 17 + .../Demo_2048/ARM/.vscode/launch.json | 133 ++++ .../Demo_2048/ARM/.vscode/settings.json | 86 +++ .../MAX32655/Demo_2048/ARM/.vscode/tasks.json | 115 ++++ Examples/MAX32655/Demo_2048/ARM/ARM.launch | 62 ++ Examples/MAX32655/Demo_2048/ARM/Makefile | 382 +++++++++++ Examples/MAX32655/Demo_2048/ARM/README.md | 25 + .../MAX32655/Demo_2048/ARM/inc/controller.h | 45 ++ .../MAX32655/Demo_2048/ARM/inc/game_2048.h | 44 ++ Examples/MAX32655/Demo_2048/ARM/main.c | 346 ++++++++++ Examples/MAX32655/Demo_2048/ARM/project.mk | 30 + .../MAX32655/Demo_2048/ARM/src/controller.c | 80 +++ .../MAX32655/Demo_2048/ARM/src/game_2048.c | 630 ++++++++++++++++++ Examples/MAX32655/Demo_2048/RISCV/.cproject | 81 +++ Examples/MAX32655/Demo_2048/RISCV/.project | 26 + .../RISCV/.settings/language.settings.xml | 15 + .../org.eclipse.cdt.codan.core.prefs | 93 +++ .../.settings/org.eclipse.cdt.core.prefs | 15 + .../Demo_2048/RISCV/.vscode/README.md | 47 ++ .../RISCV/.vscode/c_cpp_properties.json | 53 ++ .../Demo_2048/RISCV/.vscode/flash.gdb | 17 + .../Demo_2048/RISCV/.vscode/launch.json | 133 ++++ .../Demo_2048/RISCV/.vscode/settings.json | 82 +++ .../Demo_2048/RISCV/.vscode/tasks.json | 115 ++++ Examples/MAX32655/Demo_2048/RISCV/Makefile | 382 +++++++++++ Examples/MAX32655/Demo_2048/RISCV/README.md | 25 + .../MAX32655/Demo_2048/RISCV/RISCV.launch | 62 ++ .../MAX32655/Demo_2048/RISCV/inc/controller.h | 45 ++ .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 44 ++ Examples/MAX32655/Demo_2048/RISCV/main.c | 233 +++++++ Examples/MAX32655/Demo_2048/RISCV/project.mk | 29 + .../MAX32655/Demo_2048/RISCV/src/controller.c | 80 +++ .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 630 ++++++++++++++++++ 40 files changed, 4532 insertions(+) create mode 100644 Examples/MAX32655/Demo_2048/ARM/.cproject create mode 100644 Examples/MAX32655/Demo_2048/ARM/.project create mode 100644 Examples/MAX32655/Demo_2048/ARM/.settings/language.settings.xml create mode 100644 Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.core.prefs create mode 100644 Examples/MAX32655/Demo_2048/ARM/.vscode/README.md create mode 100644 Examples/MAX32655/Demo_2048/ARM/.vscode/c_cpp_properties.json create mode 100644 Examples/MAX32655/Demo_2048/ARM/.vscode/flash.gdb create mode 100644 Examples/MAX32655/Demo_2048/ARM/.vscode/launch.json create mode 100644 Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json create mode 100644 Examples/MAX32655/Demo_2048/ARM/.vscode/tasks.json create mode 100644 Examples/MAX32655/Demo_2048/ARM/ARM.launch create mode 100644 Examples/MAX32655/Demo_2048/ARM/Makefile create mode 100644 Examples/MAX32655/Demo_2048/ARM/README.md create mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/controller.h create mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/game_2048.h create mode 100644 Examples/MAX32655/Demo_2048/ARM/main.c create mode 100644 Examples/MAX32655/Demo_2048/ARM/project.mk create mode 100644 Examples/MAX32655/Demo_2048/ARM/src/controller.c create mode 100644 Examples/MAX32655/Demo_2048/ARM/src/game_2048.c create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.cproject create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.project create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.settings/language.settings.xml create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.core.prefs create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.vscode/README.md create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.vscode/c_cpp_properties.json create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.vscode/flash.gdb create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.vscode/launch.json create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json create mode 100644 Examples/MAX32655/Demo_2048/RISCV/.vscode/tasks.json create mode 100644 Examples/MAX32655/Demo_2048/RISCV/Makefile create mode 100644 Examples/MAX32655/Demo_2048/RISCV/README.md create mode 100644 Examples/MAX32655/Demo_2048/RISCV/RISCV.launch create mode 100644 Examples/MAX32655/Demo_2048/RISCV/inc/controller.h create mode 100644 Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h create mode 100644 Examples/MAX32655/Demo_2048/RISCV/main.c create mode 100644 Examples/MAX32655/Demo_2048/RISCV/project.mk create mode 100644 Examples/MAX32655/Demo_2048/RISCV/src/controller.c create mode 100644 Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c diff --git a/Examples/MAX32655/Demo_2048/ARM/.cproject b/Examples/MAX32655/Demo_2048/ARM/.cproject new file mode 100644 index 00000000000..b55b8320df6 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/ARM/.project b/Examples/MAX32655/Demo_2048/ARM/.project new file mode 100644 index 00000000000..e0ac7bea7d7 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.project @@ -0,0 +1,26 @@ + + + ARM + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32655/Demo_2048/ARM/.settings/language.settings.xml b/Examples/MAX32655/Demo_2048/ARM/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..bd472bd04f2 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=ARM +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32655 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/README.md b/Examples/MAX32655/Demo_2048/ARM/.vscode/README.md new file mode 100644 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/c_cpp_properties.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/flash.gdb b/Examples/MAX32655/Demo_2048/ARM/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/launch.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json new file mode 100644 index 00000000000..0a427c09f8a --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json @@ -0,0 +1,86 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32655", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"${config:target}.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ], + "files.associations": { + "mxc_device.h": "c", + "game_logic_2048.h": "c", + "mxc_delay.h": "c", + "ext_flash.h": "c", + "tft_ssd2119.h": "c" + } +} + diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/tasks.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/ARM/ARM.launch b/Examples/MAX32655/Demo_2048/ARM/ARM.launch new file mode 100644 index 00000000000..b1947ffa006 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/ARM.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/ARM/Makefile b/Examples/MAX32655/Demo_2048/ARM/Makefile new file mode 100644 index 00000000000..57c3504b256 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32655 +TARGET_UC := MAX32655 +TARGET_LC := max32655 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32655/Demo_2048/ARM/README.md b/Examples/MAX32655/Demo_2048/ARM/README.md new file mode 100644 index 00000000000..b95b1374ae3 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/README.md @@ -0,0 +1,25 @@ +## Description + +TODO + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +TODO + +## Expected Output + +TODO + +``` +TODO +``` diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/controller.h b/Examples/MAX32655/Demo_2048/ARM/inc/controller.h new file mode 100644 index 00000000000..50d81f60f08 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/controller.h @@ -0,0 +1,45 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +/* **** Function Prototypes **** */ + +/** + * @brief Initialize the user controller (PC Keyboard). + * - Use the system clock for UART which should be the IPO (fastest). + * + * @param uart Select which UART port the controller is connected to. + * @param baud Select the highest baud rate that the device can support. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud); + +/** + * @brief Start the Controller and listen for any keypresses. + * + * @param req UART request struct needed for transactions. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int Controller_Start(mxc_uart_req_t *req); diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/game_2048.h b/Examples/MAX32655/Demo_2048/ARM/inc/game_2048.h new file mode 100644 index 00000000000..22ac36b85f9 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/game_2048.h @@ -0,0 +1,44 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +/** + * This enum is used to keep track of which direction the blocks will slide to + * for the main logic to handle. + */ +typedef enum { + INPUT_UP = 0, + INPUT_DOWN = 1, + INPUT_LEFT = 2, + INPUT_RIGHT = 3, +} input_direction_t; + +/* **** Function Prototypes **** */ + +int Game_2048_Init(void); + +int Game_2048_UpdateGrid(input_direction_t direction); + +void Game_2048_PrintGrid(void); + +void Game_2048_GetGrid(uint32_t grid[4][4]); diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c new file mode 100644 index 00000000000..a72d2a84ed5 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -0,0 +1,346 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief ARM Core portion of the 2048 Game. + * @details + */ + +/* **** Includes **** */ +#include +#include +#include + +// MSDK-provided Drivers +#include "mxc_delay.h" +#include "mxc_device.h" +#include "mxc_sys.h" +#include "sema.h" +#include "led.h" +#include "uart.h" + +#include "trng.h" + +// Application Libraries +#include "controller.h" +#include "game_2048.h" + +/* **** Definitions **** */ + +#if DEV_MODE_TRACE +#define PRINT(...) printf(__VA_ARGS__) +#else +// Don't print anything +#define PRINT(...) +#endif + +/// Controller Settings. +// Set to its fastest supported speed (3Mbps when tested). +#define CONTROLLER_UART_BAUD (2000000) + +/// Semaphores +// Should never reach here +#if (MAILBOX_SIZE == 0) +#error "Mailbox sirrrze is 0." +#endif + +// Keep track for Semaphore peripheral. +#define SEMA_IDX_ARM (0) +#define SEMA_IDX_RISCV (1) + +#define MAILBOX_OVERHEAD (2 * sizeof(uint16_t)) +#define MAILBOX_PAYLOAD_LEN (MAILBOX_SIZE - MAILBOX_OVERHEAD) +typedef struct { + uint16_t readLocation; + uint16_t writeLocation; +#if (MAILBOX_SIZE == 0) + uint8_t payload[1]; +#else + uint8_t payload[MAILBOX_PAYLOAD_LEN]; +#endif +} mxcSemaBox_t; + + +/* **** Globals **** */ +// Defined in sema_reva.c +extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads +extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes + +// Rename boxes for readability. +// Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. +#define SEMA_ARM_MAILBOX mxcSemaBox0 +#define SEMA_RISCV_MAILBOX mxcSemaBox1 + +mxc_uart_req_t CONTROLLER_REQ; +uint8_t CONTROLLER_KEYPRESS; +volatile bool KEYPRESS_READY = false; +uint8_t KEYPRESS_INPUT_DIR; + +uint32_t ARM_GRID_COPY[4][4] = {0}; + +// Select Console UART instance. +mxc_uart_regs_t *CONTROLLER_UART = MXC_UART0; + +/* **** Functions **** */ + +void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) +{ + int error; + + // Assume no keypress if error detected. + if (cb_error != E_NO_ERROR) { + CONTROLLER_KEYPRESS = 0; // NULL character + } + + KEYPRESS_READY = true; + + // User can add additional directional key switches here. + switch (CONTROLLER_KEYPRESS) { + case 'a': + case 0x44: // Tera term sends Character 'D' for LEFT arrow key. + KEYPRESS_INPUT_DIR = INPUT_LEFT; + break; + + case 'd': + case 0x43: // Tera term sends Character 'C' for RIGHT arrow key. + KEYPRESS_INPUT_DIR = INPUT_RIGHT; + break; + + case 'w': + case 0x41: // Tera term sends Character 'A' for UP arrow key. + KEYPRESS_INPUT_DIR = INPUT_UP; + break; + + case 's': + case 0x42: // Tera term sends Character 'B' for DOWN arrow key. + KEYPRESS_INPUT_DIR = INPUT_DOWN; + break; + + default: + KEYPRESS_READY = false; + } + + // Due to request struct, CONTROLLER_KEYPRESS already contains the keypress character. + // Send keypress to RISCV through mailbox 1. + // The mailbox is 32 bits wide, but the keypress is an ASCII character (8 bits). + SEMA_ARM_MAILBOX->payload[0] = (CONTROLLER_KEYPRESS >> 8 * 0) & 0xFF; + SEMA_ARM_MAILBOX->payload[1] = 0; + SEMA_ARM_MAILBOX->payload[2] = 0; + SEMA_ARM_MAILBOX->payload[3] = 0; + + PRINT("Keypress: %c - 0x%02x\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS); + + // Listen for next keypress. + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("Error listening for next controller keypress: %d\n", error); + LED_On(LED_RED); + } +} + +void PRINT_GRID(void) +{ + Game_2048_GetGrid(ARM_GRID_COPY); + + // Imitate the grid is refreshing on terminal. + PRINT("\n\n\n\n\n\n\n\n\n\n"); + + for (int row = 0; row < 4; row++) { + PRINT(" | | | \n"); + + for (int col = 0; col < 4; col++) { + if (ARM_GRID_COPY[row][col] != 0) { + PRINT(" %04d ", ARM_GRID_COPY[row][col]); + } else { + PRINT(" "); + } + + // Only print border 3 times. + if (col < 3) { + PRINT("|"); + } + } + + PRINT("\n | | | \n"); + + // Only print the row border 3 times. + if (row < 3) { + PRINT("-----------------------------------\n"); + } + } +} + +// ***************************************************************************** +int main(void) +{ + int error; + // The mailbox names are pre-defined, Creating new pointers and pointing them to + // memory locations for easier readability. + // sema_arm_mailbox = mxcSemaBox0; + // sema_riscv_mailbox = mxcSemaBox1; + + // System Initialization: + // - Use IPO for System Clock for fastest speed. (Done in SystemInit) + // - Enable Internal Cache. (Done in SystemInit) + + // Set up Controller Request Struct. + CONTROLLER_REQ.uart = CONTROLLER_UART; + CONTROLLER_REQ.txData = NULL; + CONTROLLER_REQ.txLen = 0; + CONTROLLER_REQ.rxData = &CONTROLLER_KEYPRESS; + CONTROLLER_REQ.rxLen = 1; // Handle 1 keypress at a time + CONTROLLER_REQ.callback = CONTROLLER_KEYPRESS_Callback; + + // Set up player controller (PC Keyboard via Console UART). + error = Controller_Init(CONTROLLER_UART, CONTROLLER_UART_BAUD); + if (error != E_NO_ERROR) { + MXC_ASSERT_FAIL(); + return error; + } + + PRINT("\n\n*******************************************************************************\n"); + + // ARM Initialization. + PRINT("ARM: Starting ARM Initialization.\n\n"); + + // Enable ISO clock for RISC-V. + MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ISO); + + // Enable RISCV JTAG debugger. + MXC_GPIO_Config(&gpio_cfg_rv_jtag); + + // Prepare ARM semaphore. + MXC_SEMA_Init(); + + // Check status of ARM semaphore. + error = MXC_SEMA_CheckSema(SEMA_IDX_ARM); + if (error != E_NO_ERROR) { + PRINT("ARM: Semaphore for ARM core is busy: %d\n", error); + LED_On(LED_RED); + while(1); + } + + error = MXC_SEMA_GetSema(SEMA_IDX_ARM); + if (error != E_NO_ERROR) { + PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); + LED_On(LED_RED); + while(1); + } else { + PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); + } + + // Backup Delay for 1 second before starting RISCV core. + MXC_Delay(MXC_DELAY_SEC(1)); + + // Start the RISCV core. + MXC_SYS_RISCVRun(); + + // Wait the RISC-V core to finish startup (when it frees ARM semaphore). + PRINT("ARM: Waiting for RISC-V to finish startup process.\n\n"); + while (MXC_SEMA_CheckSema(SEMA_IDX_ARM) != E_NO_ERROR) {} + MXC_SEMA_GetSema(SEMA_IDX_ARM); + + // Initialize mailboxes between ARM and RISCV cores. + MXC_SEMA_InitBoxes(); + + PRINT("ARM: Starting Controller and Game\n"); + + // Start Controller. + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("ARM: Error starting the controller: %d\n", error); + LED_On(LED_RED); + while(1); + } + + error = Game_2048_Init(); + if (error != E_NO_ERROR) { + PRINT("ARM: Error starting game: %d\n", error); + LED_On(LED_RED); + while(1); + } + + // Game_2048_PrintGrid(); + PRINT_GRID(); + + while (1) { + // Wait for keypress. + + while (KEYPRESS_READY == false) {} + + input_direction_t dir = KEYPRESS_INPUT_DIR; + + error = Game_2048_UpdateGrid(dir); + if (error == E_NONE_AVAIL) { + PRINT("Game over!\n"); + LED_On(LED_GREEN); + while(1); + } else if (error != E_NO_ERROR) { + PRINT("ARM: Error updating next move: %d\n", error); + LED_On(LED_RED); + while(1); + } + + // Game_2048_PrintGrid(); + PRINT_GRID(); + + // MXC_Delay(MXC_DELAY_SEC(1)); + KEYPRESS_READY = false; + + + } + + +// /* Signal RISC-V core to run */ +// printf("ARM : Signal RISC-V.\n"); +// MXC_SEMA_FreeSema(NDX_RISCV); + +// uint32_t cnt; + +// /* Enter LPM */ +// while (1) { +// #if DUAL_CORE_SYNC +// /* Wait */ +// ret = MXC_SEMA_CheckSema(NDX_ARM); +// if (E_BUSY != ret) { +// MXC_SEMA_GetSema(NDX_ARM); + +// /* Do the job. */ +// // Retrieve the data from the mailbox1 +// cnt = mxcSemaBox1->payload[0] << (8 * 0); +// cnt += mxcSemaBox1->payload[1] << (8 * 1); +// cnt += mxcSemaBox1->payload[2] << (8 * 2); +// cnt += mxcSemaBox1->payload[3] << (8 * 3); + +// printf("ARM : cnt=%d\n", cnt++); + +// mxcSemaBox0->payload[0] = (cnt >> 8 * 0) & 0xFF; +// mxcSemaBox0->payload[1] = (cnt >> 8 * 1) & 0xFF; +// mxcSemaBox0->payload[2] = (cnt >> 8 * 2) & 0xFF; +// mxcSemaBox0->payload[3] = (cnt >> 8 * 3) & 0xFF; + +// /* Do other jobs here. */ +// MXC_Delay(MXC_DELAY_SEC(1)); + +// /* Signal */ +// MXC_SEMA_FreeSema(NDX_RISCV); +// } +// #endif +// } +} diff --git a/Examples/MAX32655/Demo_2048/ARM/project.mk b/Examples/MAX32655/Demo_2048/ARM/project.mk new file mode 100644 index 00000000000..29b5fb8de44 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/project.mk @@ -0,0 +1,30 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# Load and start the RISCV core +RISCV_LOAD=1 + +# Directory for RISCV code +RISCV_APP=../RISCV + +IPATH += ./inc +VPATH += ./src + + +DEV_MODE_TRACE = 1 +ifeq ($(DEV_MODE_TRACE), 1) +PROJ_CFLAGS += -DDEV_MODE_TRACE=1 +endif + +PROJ_CFLAGS += -UDEBUG + +# TODO: REMOVE ME +# MAXIM_PATH=../../../../ diff --git a/Examples/MAX32655/Demo_2048/ARM/src/controller.c b/Examples/MAX32655/Demo_2048/ARM/src/controller.c new file mode 100644 index 00000000000..cba7a2305ef --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/src/controller.c @@ -0,0 +1,80 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + + +/* **** Includes **** */ + +#include +#include "mxc_device.h" +#include "nvic_table.h" +#include "uart.h" + +/* **** Definitions **** */ + + +/* **** Globals **** */ + +static mxc_uart_regs_t *Controller_UART; + +/* **** Functions **** */ + +void Controller_Handler(void) +{ + MXC_UART_AsyncHandler(Controller_UART); +} + +int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud) +{ + int error; + + error = MXC_UART_Shutdown(uart); + if (error != E_NO_ERROR) { + return error; + } + + // Set up System UART interrupt for Controller. + // Clear if Console UART was previously set up in SystemInit. + NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + NVIC_DisableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + MXC_NVIC_SetVector(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart))), Controller_Handler); + NVIC_EnableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + + // Initialize UART to its highest speed. + error = MXC_UART_Init(uart, baud, MXC_UART_APB_CLK); + if (error != E_NO_ERROR) { + return error; + } + + Controller_UART = uart; + + return E_NO_ERROR; +} + +int Controller_Start(mxc_uart_req_t *req) +{ + int error; + + error = MXC_UART_TransactionAsync(req); + if (error != E_NO_ERROR) { + return error; + } + + return E_NO_ERROR; +} + + diff --git a/Examples/MAX32655/Demo_2048/ARM/src/game_2048.c b/Examples/MAX32655/Demo_2048/ARM/src/game_2048.c new file mode 100644 index 00000000000..f1386397bfa --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/src/game_2048.c @@ -0,0 +1,630 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include +#include +#include +#include "mxc_device.h" +#include "trng.h" + +#include "game_2048.h" + +/* **** Definitions **** */ + +#if DEV_MODE_TRACE +#define PRINT(...) printf(__VA_ARGS__) +#else +// Don't print anything +#define PRINT(...) +#endif + +#define COLUMN_SUM(col) ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + MAIN_2048_GRID[3][col])) +#define ROW_SUM(row) ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + MAIN_2048_GRID[row][3])) + +/* **** Globals **** */ + +// Main 4x4 2048 grid that is used to save current state of game. +// Did not choose to create defines for the size of the grid because +// 2048 is played on 4x4 grid. +// When using the grid as a single dimensional array, these are the +// the indexes assigned to each of the 16 squares. +// 0 | 1 | 2 | 3 +// ---|---|---|--- +// 4 | 5 | 6 | 7 +// ---|---|---|--- +// 8 | 9 | a | b +// ---|---|---|--- +// c | d | e | f +static uint32_t MAIN_2048_GRID[4][4]; + +/* **** Functions **** */ + +/** + * Must have TRNG initialized first before calling this function. + * + * @return If true (non-zero value), new block added. If false (zero), + * game over. + */ +static bool add_new_block(void) +{ + uint8_t block_2_or_4; + uint32_t open_space_idx; + uint32_t available_open_spaces = 0; + uint8_t open_space_count = 0; + + // Select whether a 2 or 4 block will be placed. + if (MXC_TRNG_RandomInt() & 0x01) { + block_2_or_4 = 4; + } else { + block_2_or_4 = 2; + } + + // Find available spaces in the grid by representing the grid (2-D array) + // as a 1-D array. + // Locations of main Locations of main + // grid represented grid represented as + // as indexes for coordinates (row,col) + // 1-D array: for 2-D array: + // 0 | 1 | 2 | 3 (0,0) | (0,1) | (0,2) | (0,3) + // ---|---|---|--- ------|-------|-------|------ + // 4 | 5 | 6 | 7 (1,0) | (1,1) | (1,2) | (1,3) + // ---|---|---|--- ======> ------|-------|-------|------ + // 8 | 9 | a | b (2,0) | (2,1) | (2,2) | (2,3) + // ---|---|---|--- ------|-------|-------|------ + // c | d | e | f (3,0) | (3,1) | (3,2) | (3,3) + for (int i = 0; i < 16; i++) { + if (MAIN_2048_GRID[i/4][i%4] == 0) { + available_open_spaces += 1; + } + } + + // No available space, game over. + if (available_open_spaces == 0) { + return false; + } + + open_space_idx = (MXC_TRNG_RandomInt() % available_open_spaces); + + // Fill the "-th" available open space where n is variable "open_space_idx". + // We have the 1-D array index and need to convert to 2-D array coordinate location. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (MAIN_2048_GRID[row][col] == 0) { + if (open_space_count == open_space_idx) { + // Found "n-th" available open space, update grid. + MAIN_2048_GRID[row][col] = block_2_or_4; + return true; + } + + open_space_count += 1; + } + } + } + + return false; +} + +int Game_2048_Init(void) +{ + int error; + + // Clear the grid. + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + MAIN_2048_GRID[i][j] = 0; + } + } + + // Initialize TRNG that is used to randomly select a 2 or 4 block in the grid. + error = MXC_TRNG_Init(); + if (error != E_NO_ERROR) { + return error; + } + + // Should never reach here since we cleared the grid earlier in the function. + if(add_new_block() == false) { + return E_BAD_STATE; + } + + return E_NO_ERROR; +} + +inline static bool row_logic_left_2(void) +{ + int prev_row[4] = {}; + bool blocks_moved = false; + + for (int row = 0; row < 4; row++) { + // Don't waste processing time if row is empty by checking if sum of all blocks in row is 0. + if (ROW_SUM(row) == 0) { + continue; + } + + int temp_row[4] = {0}; + int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. + + // Get all valid blocks to help with same-value pair logic. + for (int col = 0; col < 4; col++) { // Start at left of main row. + prev_row[col] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_row[temp_col_num] = MAIN_2048_GRID[row][col]; + + temp_col_num += 1; + + // Clear valid block on main grid for temp_row to write the updated + // row into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_col_num == 1) { + MAIN_2048_GRID[row][0] = temp_row[0]; + + // Check if the single block moved left. + if (prev_row[0] != MAIN_2048_GRID[row][0]) { + blocks_moved = true; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated row to main grid. + int main_grid_col = 0; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_col = 0; t_col < 4; t_col++) { + if (temp_row[t_col] == 0 || t_col >= temp_col_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[row][main_grid_col] = temp_row[t_col]; + + // Prevent illegal memory reads past main array size when at last column. + if (t_col < 3) { + // If same-value pair detected, combine then re-update the same block in main grid. + if (temp_row[t_col] == temp_row[t_col + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); + + // Because a same-value pair was combined at index "col" and "col + 1", + // increment the col so that the next iteration of the for loop + // will start at "col + 2" in the temp_row. + t_col += 1; + } + } + + main_grid_col += 1; + } + + // Check if any blocks moved. If not, then don't add new button. + for (int col = 0; col < 4; col++) { + if (prev_row[col] != MAIN_2048_GRID[row][col]) { + blocks_moved = true; + } + } + } + + return blocks_moved; +} + +inline static bool row_logic_right_2(void) +{ + int prev_row[4] = {}; + bool blocks_moved = false; + + for (int row = 0; row < 4; row++) { + // Don't waste processing time if row is empty by checking if sum of all blocks in row is 0. + if (ROW_SUM(row) == 0) { + continue; + } + + int temp_row[4] = {0}; + int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. + + // Get all valid blocks to help with same-value pair logic. + for (int col = 3; col >= 0; col--) { // Start at right of main row. + prev_row[col] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_row[temp_col_num] = MAIN_2048_GRID[row][col]; + + temp_col_num += 1; + + // Clear valid block on main grid for temp_row to write the updated + // row into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_col_num == 1) { + // Don't forget, starting at end of main row, but temp_row is still in order (left to right). + MAIN_2048_GRID[row][3] = temp_row[0]; + + // Check if the single block moved right. + if (prev_row[3] != MAIN_2048_GRID[row][3]) { + blocks_moved = true; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated row to main grid. + int main_grid_col = 3; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_col = 0; t_col < 4; t_col++) { + if (temp_row[t_col] == 0 || t_col >= temp_col_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[row][main_grid_col] = temp_row[t_col]; + + // Prevent illegal memory reads past main array size when at last column. + if (t_col < 3) { + // If same-value pair detected, combine then re-update the same block in main grid. + if (temp_row[t_col] == temp_row[t_col + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); + + // Because a same-value pair was combined at index "col" and "col + 1", + // increment the col so that the next iteration of the for loop + // will start at "col + 2" in the temp_row. + t_col += 1; + } + } + + main_grid_col -= 1; + } + + // Check if any blocks moved. If not, then don't add new button. + for (int col = 0; col < 4; col++) { + // Don't forget direction, start at end. + if (prev_row[3 - col] != MAIN_2048_GRID[row][3 - col]) { + blocks_moved = true; + } + } + } + + return blocks_moved; +} + +inline static void column_logic_up_1(void) +{ + // Iterate through each column and run the 2048 "same-value pair" logic. + for (int col = 0; col < 4; col++) { + bool same_value_pairs_detected = false; + + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. + if (COLUMN_SUM(col) == 0) { + continue; + } + + // Not a big difference in speeds... Using brute force for fastest times. + // O(n) where n is the number of rows vs O(1) brute-force. + // Move numbers up to clear empty spaces. + for (int row = 0; row < 3; row++) { + // If space is empty, move over next block. + if (MAIN_2048_GRID[row][col] == 0) { + // Find next available block. + for (int next_row = row + 1; next_row < 4; next_row++) { + if (MAIN_2048_GRID[next_row][col] != 0) { + MAIN_2048_GRID[row][col] = MAIN_2048_GRID[next_row][col]; + MAIN_2048_GRID[next_row][col] = 0; // Clear the block that was just moved. + + // Found next available block, end loop (save cycles). + break; + } + } + } + } + + // Add pairs together and remove the second block. In this case, thes econd block + // is going to be bottom block within the pair because the direction is UP. + for (int row = 0; row < 3; row++) { + // The second conditional doesn't really matter because 0*2 will be 0... + if ((MAIN_2048_GRID[row][col] == MAIN_2048_GRID[row+1][col]) && (MAIN_2048_GRID[row][col] != 0)) { + MAIN_2048_GRID[row][col] *= 2; + MAIN_2048_GRID[row+1][col] = 0; // Clear bottom block of the pair. + + same_value_pairs_detected = true; + } + } + + // If there are combined numbers, then the blocks will have to be moved up again because same value pairs have + // combined and cleared the bottom block. Else, save time by looping again. + if (same_value_pairs_detected) { + // Starting at 1 this time because the blocks moved up already. + for (int row = 1; row < 3; row++) { + // If space is empty, move over next block. + if (MAIN_2048_GRID[row][col] == 0) { + // Find next available block. + for (int next_row = row + 1; next_row < 4; next_row++) { + if (MAIN_2048_GRID[next_row][col] != 0) { + MAIN_2048_GRID[row][col] = MAIN_2048_GRID[next_row][col]; + MAIN_2048_GRID[next_row][col] = 0; // Clear the block that was just moved. + + // Found next available block, end loop (save cycles). + break; + } + } + } + } + } + } +} + +inline static bool column_logic_up_2(void) +{ + int prev_col[4] = {}; + bool blocks_moved = false; + + for (int col = 0; col < 4; col++) { + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. + if (COLUMN_SUM(col) == 0) { + continue; + } + + int temp_column[4] = {0}; + int temp_row_num = 0; // Also tracks how many valid blocks there are. + + // Get all valid blocks to help with same-value pair logic. + for (int row = 0; row < 4; row++) { // Start at top of main column. + prev_col[row] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_column[temp_row_num] = MAIN_2048_GRID[row][col]; + + temp_row_num += 1; + + // Clear valid block on main grid for temp_column to write the updated + // column into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_row_num == 1) { + MAIN_2048_GRID[0][col] = temp_column[0]; + + // Check if the single block moved up. + if (prev_col[0] != MAIN_2048_GRID[0][col]) { + blocks_moved = true; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated column to main grid. + int main_grid_row = 0; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_row = 0; t_row < 4; t_row++) { + if (temp_column[t_row] == 0 || t_row >= temp_row_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[main_grid_row][col] = temp_column[t_row]; + + // Prevent illegal memory reads past main array size when at last row. + if (t_row < 3) { + // If same-value pair detected, combine then re-update grid. + if (temp_column[t_row] == temp_column[t_row + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); + + // Because a same-value pair was combined at index "row" and "row + 1", + // increment the row so that the next iteration of the for loop + // will start at "row + 2" in the temp_column. + t_row += 1; + } + } + + main_grid_row += 1; + } + + // Check if any blocks moved. If not, then don't add new button. + for (int row = 0; row < 4; row++) { + if (prev_col[row] != MAIN_2048_GRID[row][col]) { + blocks_moved = true; + } + } + } + + return blocks_moved; +} + +static bool column_logic_down_2(void) +{ + int prev_col[4] = {}; + bool blocks_moved = false; + + for (int col = 0; col < 4; col++) { + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. + if (COLUMN_SUM(col) == 0) { + continue; + } + + int temp_column[4] = {0}; + int temp_row_num = 0; // Also tracks how many valid blocks there are in column. + + // Get all valid blocks to help with same-value pair logic. + for (int row = 3; row >= 0; row--) { // Start at bottom of main column. + prev_col[row] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_column[temp_row_num] = MAIN_2048_GRID[row][col]; + + temp_row_num += 1; + + // Clear valid block on main grid for temp_column to write the updated + // column into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_row_num == 1) { + // Confusing but temp column goes in order no matter the direction (up/down). + MAIN_2048_GRID[3][col] = temp_column[0]; + + // Check if the single block moved down. + if (prev_col[3] != MAIN_2048_GRID[3][col]) { + blocks_moved = true; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated column to main grid. + int main_grid_row = 3; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_row = 0; t_row < 4; t_row++) { + if (temp_column[t_row] == 0 || t_row >= temp_row_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[main_grid_row][col] = temp_column[t_row]; + + // Prevent illegal memory reads (-1) index of temp column. + if (t_row < 3) { + // If same-value pair detected, combine then re-update grid. + if (temp_column[t_row] == temp_column[t_row + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); + + // Because a same-value pair was combined at index "row" and "row + 1", + // increment the row so that the next iteration of the for loop + // will start at "row + 2" in the temp_column. + // Don't forget, temp column goes in order (top to bottom) even though + // we go backwards in main column due to down direction. + t_row += 1; + } + } + + main_grid_row -= 1; + } + + // Check if any blocks moved. If not, then don't add new button. + for (int row = 0; row < 4; row++) { + if (prev_col[3 - row] != MAIN_2048_GRID[3 - row][col]) { + blocks_moved = true; + } + } + } + + return blocks_moved; +} + + +int Game_2048_UpdateGrid(input_direction_t direction) +{ + bool blocks_moved; + + // Run main game logic. + switch(direction) { + case INPUT_UP: + printf("UP\n"); + blocks_moved = column_logic_up_2(); + break; + + case INPUT_DOWN: + printf("DOWN\n"); + blocks_moved = column_logic_down_2(); + break; + + case INPUT_LEFT: + printf("LEFT\n"); + blocks_moved = row_logic_left_2(); + break; + + case INPUT_RIGHT: + printf("RIGHT\n"); + blocks_moved = row_logic_right_2(); + break; + + // Should never reach here. + default: + return E_BAD_STATE; + } + + // Once the main game logic is done, insert a new block. + if (blocks_moved == true) { + if (add_new_block() == true) { + return E_NO_ERROR; + } else { + return E_NONE_AVAIL; // Game over. + } + } else { + // nothing happened + return E_NO_ERROR; + } +} + +void Game_2048_PrintGrid(void) +{ + // Imitate the grid is refreshing on terminal. + PRINT("\n\n\n\n\n\n\n\n\n\n"); + + for (int row = 0; row < 4; row++) { + PRINT(" | | | \n"); + + for (int col = 0; col < 4; col++) { + if (MAIN_2048_GRID[row][col] != 0) { + PRINT(" %04d ", MAIN_2048_GRID[row][col]); + } else { + PRINT(" "); + } + + // Only print border 3 times. + if (col < 3) { + PRINT("|"); + } + } + + PRINT("\n | | | \n"); + + // Only print the row border 3 times. + if (row < 3) { + PRINT("-----------------------------------\n"); + } + } +} + +void Game_2048_GetGrid(uint32_t grid[4][4]) +{ + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + grid[row][col] = MAIN_2048_GRID[row][col]; + } + } +} + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.cproject b/Examples/MAX32655/Demo_2048/RISCV/.cproject new file mode 100644 index 00000000000..8d841e30794 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.project b/Examples/MAX32655/Demo_2048/RISCV/.project new file mode 100644 index 00000000000..e36a7fd5918 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.project @@ -0,0 +1,26 @@ + + + RISCV + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.settings/language.settings.xml b/Examples/MAX32655/Demo_2048/RISCV/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..68775a2fce2 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=RISCV +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32655 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/README.md b/Examples/MAX32655/Demo_2048/RISCV/.vscode/README.md new file mode 100644 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/c_cpp_properties.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/flash.gdb b/Examples/MAX32655/Demo_2048/RISCV/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/launch.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json new file mode 100644 index 00000000000..740d4d06f25 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json @@ -0,0 +1,82 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32655", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"${config:target}.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ], + "files.associations": { + "stdint.h": "c" + } +} + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/tasks.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/RISCV/Makefile b/Examples/MAX32655/Demo_2048/RISCV/Makefile new file mode 100644 index 00000000000..57c3504b256 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32655 +TARGET_UC := MAX32655 +TARGET_LC := max32655 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32655/Demo_2048/RISCV/README.md b/Examples/MAX32655/Demo_2048/RISCV/README.md new file mode 100644 index 00000000000..b95b1374ae3 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/README.md @@ -0,0 +1,25 @@ +## Description + +TODO + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +TODO + +## Expected Output + +TODO + +``` +TODO +``` diff --git a/Examples/MAX32655/Demo_2048/RISCV/RISCV.launch b/Examples/MAX32655/Demo_2048/RISCV/RISCV.launch new file mode 100644 index 00000000000..66a72794ebc --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/RISCV.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h b/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h new file mode 100644 index 00000000000..50d81f60f08 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h @@ -0,0 +1,45 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +/* **** Function Prototypes **** */ + +/** + * @brief Initialize the user controller (PC Keyboard). + * - Use the system clock for UART which should be the IPO (fastest). + * + * @param uart Select which UART port the controller is connected to. + * @param baud Select the highest baud rate that the device can support. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud); + +/** + * @brief Start the Controller and listen for any keypresses. + * + * @param req UART request struct needed for transactions. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int Controller_Start(mxc_uart_req_t *req); diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h new file mode 100644 index 00000000000..22ac36b85f9 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -0,0 +1,44 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +/** + * This enum is used to keep track of which direction the blocks will slide to + * for the main logic to handle. + */ +typedef enum { + INPUT_UP = 0, + INPUT_DOWN = 1, + INPUT_LEFT = 2, + INPUT_RIGHT = 3, +} input_direction_t; + +/* **** Function Prototypes **** */ + +int Game_2048_Init(void); + +int Game_2048_UpdateGrid(input_direction_t direction); + +void Game_2048_PrintGrid(void); + +void Game_2048_GetGrid(uint32_t grid[4][4]); diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c new file mode 100644 index 00000000000..159699b11ce --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -0,0 +1,233 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief RISCV Portion of the 2048 Game. + * @details + */ + +/***** Includes *****/ +#include +#include +#include +#include + +// MSDK-provided Drivers +#include "mxc_delay.h" +#include "mxc_device.h" +#include "board.h" +#include "led.h" +#include "pb.h" +#include "sema.h" +#include "rtc.h" +#include "tft_ssd2119.h" +#include "tsc2046.h" + +// // Application Libraries +// #include "utils.h" +// #include "state.h" +// #include "bitmap.h" +// #include "keypad.h" + +/***** Definitions *****/ + +#if DEV_MODE_TRACE +#define PRINT(...) printf(__VA_ARGS__) +#else +// Don't print anything +#define PRINT(...) +#endif + + +/// Semaphores +// Should never reach here +#if (MAILBOX_SIZE == 0) +#error "Mailbox size is 0." +#endif + +// Keep track for Semaphore peripheral. +#define SEMA_IDX_ARM (0) +#define SEMA_IDX_RISCV (1) + +#define MAILBOX_OVERHEAD (2 * sizeof(uint16_t)) +#define MAILBOX_PAYLOAD_LEN (MAILBOX_SIZE - MAILBOX_OVERHEAD) +typedef struct { + uint16_t readLocation; + uint16_t writeLocation; +#if (MAILBOX_SIZE == 0) + uint8_t payload[1]; +#else + uint8_t payload[MAILBOX_PAYLOAD_LEN]; +#endif +} mxcSemaBox_t; + +/* **** Globals **** */ +// Defined in sema_reva.c +extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads +extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes + +// Rename boxes for readability. +#define SEMA_ARM_MAILBOX mxcSemaBox0 +#define SEMA_RISCV_MAILBOX mxcSemaBox1 + +/***** Functions *****/ + +// ***************************************************************************** +int main(void) +{ + int error; + + // NOTE: Printing to terminal is done on UART0 which both the ARM and RISC-V core must share. + // Must be mindful when to use PRINT (printf) for RISC-V side. + PRINT("RISC-V: Starting RISC-V Initialization.\n\n"); + + MXC_SEMA_Init(); + + error = MXC_SEMA_CheckSema(SEMA_IDX_RISCV); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Semaphore for RISC-V core is busy: %d\n", error); + LED_On(LED_GREEN); + while(1); + } + + error = MXC_SEMA_GetSema(SEMA_IDX_RISCV); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + LED_On(LED_RED); + while(1); + } else { + PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + } + + // Initialize mailboxes between ARM and RISCV cores. + MXC_SEMA_InitBoxes(); + + // RISC-V startup finish startup and initializing mailboxes. Signal ARM to continue. + PRINT("RISC-V: Finished startup. Handing off major UART0 control to ARM.\n\n"); + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + + // Initialize RTC + MXC_RTC_Init(0, 0); + MXC_RTC_Start(); + + // // TFT Pre-Init done during ARM startup in SystemInit(). + // MXC_TFT_Init(); + + // MXC_TFT_SetBackGroundColor(0); + // LED_On(1); + while(1) {} + // /* Initialize Touch Screen controller */ + // MXC_TS_Init(); + // MXC_TS_Start(); + + // /* Display Home page */ + // state_init(); + + // /* Get current time */ + // start_time = utils_get_time_ms(); + + // while (1) { + // /* Get current screen state */ + // state = state_get_current(); + + // /* Check pressed touch screen key */ + // key = MXC_TS_GetKey(); + + // if (key > 0) { + // state->prcss_key(key); + // start_time = utils_get_time_ms(); + // } + + // /* Check timer tick */ + // if (utils_get_time_ms() >= (start_time + state->timeout)) { + // if (state->tick) { + // state->tick(); + // start_time = utils_get_time_ms(); + // } + // } + // } + + +// printf("\nRISC-V: Start.\n"); + +// #if DUAL_CORE_SYNC +// MXC_SEMA_Init(); + +// int ret = MXC_SEMA_CheckSema(NDX_RISCV); +// printf("RISC-V: After init, CheckSema(%d) returned %s.\n", NDX_RISCV, +// ret == E_BUSY ? "BUSY" : "NOT BUSY"); + +// if ((MXC_SEMA_GetSema(NDX_RISCV)) == E_NO_ERROR) { +// printf("RISC-V: GetSema returned NOT BUSY with previous semaphore value %d.\n", +// MXC_SEMA->semaphores[NDX_RISCV]); +// } else { +// printf("RISC-V: GetSema returned - BUSY - with previous semaphore value %d.\n", +// MXC_SEMA->semaphores[NDX_RISCV]); +// } + +// /* Init code here. */ +// printf("RISC-V: Do initialization works here.\n"); +// MXC_SEMA_InitBoxes(); + +// /* Signal ARM core to run. */ +// printf("RISC-V: Signal ARM.\n"); +// MXC_SEMA_FreeSema(NDX_ARM); +// #endif + +// uint32_t cnt = 0; + +// /* Enter LPM */ +// while (1) { +// #if DUAL_CORE_SYNC +// /* Wait */ +// int ret = MXC_SEMA_CheckSema(NDX_RISCV); +// if (E_BUSY != ret) { +// MXC_SEMA_GetSema(NDX_RISCV); + +// /* Do the job */ +// // Retrieve the data from the mailbox0 +// cnt = mxcSemaBox0->payload[0] << (8 * 0); +// cnt += mxcSemaBox0->payload[1] << (8 * 1); +// cnt += mxcSemaBox0->payload[2] << (8 * 2); +// cnt += mxcSemaBox0->payload[3] << (8 * 3); + +// printf("RISC-V: cnt=%d\n", cnt++); +// #else +// printf("count = %d\n", cnt++); +// #endif + +// #if DUAL_CORE_SYNC +// mxcSemaBox1->payload[0] = (cnt >> 8 * 0) & 0xFF; +// mxcSemaBox1->payload[1] = (cnt >> 8 * 1) & 0xFF; +// mxcSemaBox1->payload[2] = (cnt >> 8 * 2) & 0xFF; +// mxcSemaBox1->payload[3] = (cnt >> 8 * 3) & 0xFF; + +// /* Do other jobs here */ +// #endif +// LED_On(LED_RED); +// MXC_Delay(500000); +// LED_Off(LED_RED); +// MXC_Delay(500000); +// #if DUAL_CORE_SYNC +// /* Signal */ +// MXC_SEMA_FreeSema(NDX_ARM); +// } +// #endif +// } +} diff --git a/Examples/MAX32655/Demo_2048/RISCV/project.mk b/Examples/MAX32655/Demo_2048/RISCV/project.mk new file mode 100644 index 00000000000..c942908eda7 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/project.mk @@ -0,0 +1,29 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# Build this project for the RISC-V core +# Note: The RISCV portion of the game is not built on its own. +# Check the ARM project's project.mk file. +RISCV_CORE=1 + +IPATH += ./inc +VPATH += ./src + + +DEV_MODE_TRACE = 1 +ifeq ($(DEV_MODE_TRACE), 1) +PROJ_CFLAGS += -DDEV_MODE_TRACE=1 +endif + +PROJ_CFLAGS += -UDEBUG + +# TODO: REMOVE ME +MAXIM_PATH=../../../../ diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c new file mode 100644 index 00000000000..cba7a2305ef --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c @@ -0,0 +1,80 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + + +/* **** Includes **** */ + +#include +#include "mxc_device.h" +#include "nvic_table.h" +#include "uart.h" + +/* **** Definitions **** */ + + +/* **** Globals **** */ + +static mxc_uart_regs_t *Controller_UART; + +/* **** Functions **** */ + +void Controller_Handler(void) +{ + MXC_UART_AsyncHandler(Controller_UART); +} + +int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud) +{ + int error; + + error = MXC_UART_Shutdown(uart); + if (error != E_NO_ERROR) { + return error; + } + + // Set up System UART interrupt for Controller. + // Clear if Console UART was previously set up in SystemInit. + NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + NVIC_DisableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + MXC_NVIC_SetVector(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart))), Controller_Handler); + NVIC_EnableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + + // Initialize UART to its highest speed. + error = MXC_UART_Init(uart, baud, MXC_UART_APB_CLK); + if (error != E_NO_ERROR) { + return error; + } + + Controller_UART = uart; + + return E_NO_ERROR; +} + +int Controller_Start(mxc_uart_req_t *req) +{ + int error; + + error = MXC_UART_TransactionAsync(req); + if (error != E_NO_ERROR) { + return error; + } + + return E_NO_ERROR; +} + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c new file mode 100644 index 00000000000..f1386397bfa --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -0,0 +1,630 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include +#include +#include +#include "mxc_device.h" +#include "trng.h" + +#include "game_2048.h" + +/* **** Definitions **** */ + +#if DEV_MODE_TRACE +#define PRINT(...) printf(__VA_ARGS__) +#else +// Don't print anything +#define PRINT(...) +#endif + +#define COLUMN_SUM(col) ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + MAIN_2048_GRID[3][col])) +#define ROW_SUM(row) ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + MAIN_2048_GRID[row][3])) + +/* **** Globals **** */ + +// Main 4x4 2048 grid that is used to save current state of game. +// Did not choose to create defines for the size of the grid because +// 2048 is played on 4x4 grid. +// When using the grid as a single dimensional array, these are the +// the indexes assigned to each of the 16 squares. +// 0 | 1 | 2 | 3 +// ---|---|---|--- +// 4 | 5 | 6 | 7 +// ---|---|---|--- +// 8 | 9 | a | b +// ---|---|---|--- +// c | d | e | f +static uint32_t MAIN_2048_GRID[4][4]; + +/* **** Functions **** */ + +/** + * Must have TRNG initialized first before calling this function. + * + * @return If true (non-zero value), new block added. If false (zero), + * game over. + */ +static bool add_new_block(void) +{ + uint8_t block_2_or_4; + uint32_t open_space_idx; + uint32_t available_open_spaces = 0; + uint8_t open_space_count = 0; + + // Select whether a 2 or 4 block will be placed. + if (MXC_TRNG_RandomInt() & 0x01) { + block_2_or_4 = 4; + } else { + block_2_or_4 = 2; + } + + // Find available spaces in the grid by representing the grid (2-D array) + // as a 1-D array. + // Locations of main Locations of main + // grid represented grid represented as + // as indexes for coordinates (row,col) + // 1-D array: for 2-D array: + // 0 | 1 | 2 | 3 (0,0) | (0,1) | (0,2) | (0,3) + // ---|---|---|--- ------|-------|-------|------ + // 4 | 5 | 6 | 7 (1,0) | (1,1) | (1,2) | (1,3) + // ---|---|---|--- ======> ------|-------|-------|------ + // 8 | 9 | a | b (2,0) | (2,1) | (2,2) | (2,3) + // ---|---|---|--- ------|-------|-------|------ + // c | d | e | f (3,0) | (3,1) | (3,2) | (3,3) + for (int i = 0; i < 16; i++) { + if (MAIN_2048_GRID[i/4][i%4] == 0) { + available_open_spaces += 1; + } + } + + // No available space, game over. + if (available_open_spaces == 0) { + return false; + } + + open_space_idx = (MXC_TRNG_RandomInt() % available_open_spaces); + + // Fill the "-th" available open space where n is variable "open_space_idx". + // We have the 1-D array index and need to convert to 2-D array coordinate location. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (MAIN_2048_GRID[row][col] == 0) { + if (open_space_count == open_space_idx) { + // Found "n-th" available open space, update grid. + MAIN_2048_GRID[row][col] = block_2_or_4; + return true; + } + + open_space_count += 1; + } + } + } + + return false; +} + +int Game_2048_Init(void) +{ + int error; + + // Clear the grid. + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + MAIN_2048_GRID[i][j] = 0; + } + } + + // Initialize TRNG that is used to randomly select a 2 or 4 block in the grid. + error = MXC_TRNG_Init(); + if (error != E_NO_ERROR) { + return error; + } + + // Should never reach here since we cleared the grid earlier in the function. + if(add_new_block() == false) { + return E_BAD_STATE; + } + + return E_NO_ERROR; +} + +inline static bool row_logic_left_2(void) +{ + int prev_row[4] = {}; + bool blocks_moved = false; + + for (int row = 0; row < 4; row++) { + // Don't waste processing time if row is empty by checking if sum of all blocks in row is 0. + if (ROW_SUM(row) == 0) { + continue; + } + + int temp_row[4] = {0}; + int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. + + // Get all valid blocks to help with same-value pair logic. + for (int col = 0; col < 4; col++) { // Start at left of main row. + prev_row[col] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_row[temp_col_num] = MAIN_2048_GRID[row][col]; + + temp_col_num += 1; + + // Clear valid block on main grid for temp_row to write the updated + // row into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_col_num == 1) { + MAIN_2048_GRID[row][0] = temp_row[0]; + + // Check if the single block moved left. + if (prev_row[0] != MAIN_2048_GRID[row][0]) { + blocks_moved = true; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated row to main grid. + int main_grid_col = 0; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_col = 0; t_col < 4; t_col++) { + if (temp_row[t_col] == 0 || t_col >= temp_col_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[row][main_grid_col] = temp_row[t_col]; + + // Prevent illegal memory reads past main array size when at last column. + if (t_col < 3) { + // If same-value pair detected, combine then re-update the same block in main grid. + if (temp_row[t_col] == temp_row[t_col + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); + + // Because a same-value pair was combined at index "col" and "col + 1", + // increment the col so that the next iteration of the for loop + // will start at "col + 2" in the temp_row. + t_col += 1; + } + } + + main_grid_col += 1; + } + + // Check if any blocks moved. If not, then don't add new button. + for (int col = 0; col < 4; col++) { + if (prev_row[col] != MAIN_2048_GRID[row][col]) { + blocks_moved = true; + } + } + } + + return blocks_moved; +} + +inline static bool row_logic_right_2(void) +{ + int prev_row[4] = {}; + bool blocks_moved = false; + + for (int row = 0; row < 4; row++) { + // Don't waste processing time if row is empty by checking if sum of all blocks in row is 0. + if (ROW_SUM(row) == 0) { + continue; + } + + int temp_row[4] = {0}; + int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. + + // Get all valid blocks to help with same-value pair logic. + for (int col = 3; col >= 0; col--) { // Start at right of main row. + prev_row[col] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_row[temp_col_num] = MAIN_2048_GRID[row][col]; + + temp_col_num += 1; + + // Clear valid block on main grid for temp_row to write the updated + // row into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_col_num == 1) { + // Don't forget, starting at end of main row, but temp_row is still in order (left to right). + MAIN_2048_GRID[row][3] = temp_row[0]; + + // Check if the single block moved right. + if (prev_row[3] != MAIN_2048_GRID[row][3]) { + blocks_moved = true; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated row to main grid. + int main_grid_col = 3; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_col = 0; t_col < 4; t_col++) { + if (temp_row[t_col] == 0 || t_col >= temp_col_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[row][main_grid_col] = temp_row[t_col]; + + // Prevent illegal memory reads past main array size when at last column. + if (t_col < 3) { + // If same-value pair detected, combine then re-update the same block in main grid. + if (temp_row[t_col] == temp_row[t_col + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); + + // Because a same-value pair was combined at index "col" and "col + 1", + // increment the col so that the next iteration of the for loop + // will start at "col + 2" in the temp_row. + t_col += 1; + } + } + + main_grid_col -= 1; + } + + // Check if any blocks moved. If not, then don't add new button. + for (int col = 0; col < 4; col++) { + // Don't forget direction, start at end. + if (prev_row[3 - col] != MAIN_2048_GRID[row][3 - col]) { + blocks_moved = true; + } + } + } + + return blocks_moved; +} + +inline static void column_logic_up_1(void) +{ + // Iterate through each column and run the 2048 "same-value pair" logic. + for (int col = 0; col < 4; col++) { + bool same_value_pairs_detected = false; + + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. + if (COLUMN_SUM(col) == 0) { + continue; + } + + // Not a big difference in speeds... Using brute force for fastest times. + // O(n) where n is the number of rows vs O(1) brute-force. + // Move numbers up to clear empty spaces. + for (int row = 0; row < 3; row++) { + // If space is empty, move over next block. + if (MAIN_2048_GRID[row][col] == 0) { + // Find next available block. + for (int next_row = row + 1; next_row < 4; next_row++) { + if (MAIN_2048_GRID[next_row][col] != 0) { + MAIN_2048_GRID[row][col] = MAIN_2048_GRID[next_row][col]; + MAIN_2048_GRID[next_row][col] = 0; // Clear the block that was just moved. + + // Found next available block, end loop (save cycles). + break; + } + } + } + } + + // Add pairs together and remove the second block. In this case, thes econd block + // is going to be bottom block within the pair because the direction is UP. + for (int row = 0; row < 3; row++) { + // The second conditional doesn't really matter because 0*2 will be 0... + if ((MAIN_2048_GRID[row][col] == MAIN_2048_GRID[row+1][col]) && (MAIN_2048_GRID[row][col] != 0)) { + MAIN_2048_GRID[row][col] *= 2; + MAIN_2048_GRID[row+1][col] = 0; // Clear bottom block of the pair. + + same_value_pairs_detected = true; + } + } + + // If there are combined numbers, then the blocks will have to be moved up again because same value pairs have + // combined and cleared the bottom block. Else, save time by looping again. + if (same_value_pairs_detected) { + // Starting at 1 this time because the blocks moved up already. + for (int row = 1; row < 3; row++) { + // If space is empty, move over next block. + if (MAIN_2048_GRID[row][col] == 0) { + // Find next available block. + for (int next_row = row + 1; next_row < 4; next_row++) { + if (MAIN_2048_GRID[next_row][col] != 0) { + MAIN_2048_GRID[row][col] = MAIN_2048_GRID[next_row][col]; + MAIN_2048_GRID[next_row][col] = 0; // Clear the block that was just moved. + + // Found next available block, end loop (save cycles). + break; + } + } + } + } + } + } +} + +inline static bool column_logic_up_2(void) +{ + int prev_col[4] = {}; + bool blocks_moved = false; + + for (int col = 0; col < 4; col++) { + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. + if (COLUMN_SUM(col) == 0) { + continue; + } + + int temp_column[4] = {0}; + int temp_row_num = 0; // Also tracks how many valid blocks there are. + + // Get all valid blocks to help with same-value pair logic. + for (int row = 0; row < 4; row++) { // Start at top of main column. + prev_col[row] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_column[temp_row_num] = MAIN_2048_GRID[row][col]; + + temp_row_num += 1; + + // Clear valid block on main grid for temp_column to write the updated + // column into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_row_num == 1) { + MAIN_2048_GRID[0][col] = temp_column[0]; + + // Check if the single block moved up. + if (prev_col[0] != MAIN_2048_GRID[0][col]) { + blocks_moved = true; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated column to main grid. + int main_grid_row = 0; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_row = 0; t_row < 4; t_row++) { + if (temp_column[t_row] == 0 || t_row >= temp_row_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[main_grid_row][col] = temp_column[t_row]; + + // Prevent illegal memory reads past main array size when at last row. + if (t_row < 3) { + // If same-value pair detected, combine then re-update grid. + if (temp_column[t_row] == temp_column[t_row + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); + + // Because a same-value pair was combined at index "row" and "row + 1", + // increment the row so that the next iteration of the for loop + // will start at "row + 2" in the temp_column. + t_row += 1; + } + } + + main_grid_row += 1; + } + + // Check if any blocks moved. If not, then don't add new button. + for (int row = 0; row < 4; row++) { + if (prev_col[row] != MAIN_2048_GRID[row][col]) { + blocks_moved = true; + } + } + } + + return blocks_moved; +} + +static bool column_logic_down_2(void) +{ + int prev_col[4] = {}; + bool blocks_moved = false; + + for (int col = 0; col < 4; col++) { + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. + if (COLUMN_SUM(col) == 0) { + continue; + } + + int temp_column[4] = {0}; + int temp_row_num = 0; // Also tracks how many valid blocks there are in column. + + // Get all valid blocks to help with same-value pair logic. + for (int row = 3; row >= 0; row--) { // Start at bottom of main column. + prev_col[row] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_column[temp_row_num] = MAIN_2048_GRID[row][col]; + + temp_row_num += 1; + + // Clear valid block on main grid for temp_column to write the updated + // column into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_row_num == 1) { + // Confusing but temp column goes in order no matter the direction (up/down). + MAIN_2048_GRID[3][col] = temp_column[0]; + + // Check if the single block moved down. + if (prev_col[3] != MAIN_2048_GRID[3][col]) { + blocks_moved = true; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated column to main grid. + int main_grid_row = 3; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_row = 0; t_row < 4; t_row++) { + if (temp_column[t_row] == 0 || t_row >= temp_row_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[main_grid_row][col] = temp_column[t_row]; + + // Prevent illegal memory reads (-1) index of temp column. + if (t_row < 3) { + // If same-value pair detected, combine then re-update grid. + if (temp_column[t_row] == temp_column[t_row + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); + + // Because a same-value pair was combined at index "row" and "row + 1", + // increment the row so that the next iteration of the for loop + // will start at "row + 2" in the temp_column. + // Don't forget, temp column goes in order (top to bottom) even though + // we go backwards in main column due to down direction. + t_row += 1; + } + } + + main_grid_row -= 1; + } + + // Check if any blocks moved. If not, then don't add new button. + for (int row = 0; row < 4; row++) { + if (prev_col[3 - row] != MAIN_2048_GRID[3 - row][col]) { + blocks_moved = true; + } + } + } + + return blocks_moved; +} + + +int Game_2048_UpdateGrid(input_direction_t direction) +{ + bool blocks_moved; + + // Run main game logic. + switch(direction) { + case INPUT_UP: + printf("UP\n"); + blocks_moved = column_logic_up_2(); + break; + + case INPUT_DOWN: + printf("DOWN\n"); + blocks_moved = column_logic_down_2(); + break; + + case INPUT_LEFT: + printf("LEFT\n"); + blocks_moved = row_logic_left_2(); + break; + + case INPUT_RIGHT: + printf("RIGHT\n"); + blocks_moved = row_logic_right_2(); + break; + + // Should never reach here. + default: + return E_BAD_STATE; + } + + // Once the main game logic is done, insert a new block. + if (blocks_moved == true) { + if (add_new_block() == true) { + return E_NO_ERROR; + } else { + return E_NONE_AVAIL; // Game over. + } + } else { + // nothing happened + return E_NO_ERROR; + } +} + +void Game_2048_PrintGrid(void) +{ + // Imitate the grid is refreshing on terminal. + PRINT("\n\n\n\n\n\n\n\n\n\n"); + + for (int row = 0; row < 4; row++) { + PRINT(" | | | \n"); + + for (int col = 0; col < 4; col++) { + if (MAIN_2048_GRID[row][col] != 0) { + PRINT(" %04d ", MAIN_2048_GRID[row][col]); + } else { + PRINT(" "); + } + + // Only print border 3 times. + if (col < 3) { + PRINT("|"); + } + } + + PRINT("\n | | | \n"); + + // Only print the row border 3 times. + if (row < 3) { + PRINT("-----------------------------------\n"); + } + } +} + +void Game_2048_GetGrid(uint32_t grid[4][4]) +{ + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + grid[row][col] = MAIN_2048_GRID[row][col]; + } + } +} + From b604784cd6b4dc99c30494b93a8ade3221d9bca7 Mon Sep 17 00:00:00 2001 From: Woo Date: Mon, 9 Sep 2024 15:08:10 -0500 Subject: [PATCH 02/27] Switch core tasks --- .../MAX32655/Demo_2048/ARM/inc/controller.h | 45 -- .../MAX32655/Demo_2048/ARM/inc/game_2048.h | 44 -- Examples/MAX32655/Demo_2048/ARM/main.c | 174 +---- .../MAX32655/Demo_2048/ARM/src/controller.c | 80 --- .../MAX32655/Demo_2048/ARM/src/game_2048.c | 630 ------------------ .../Demo_2048/RISCV/.vscode/settings.json | 4 +- .../MAX32655/Demo_2048/RISCV/inc/controller.h | 2 + Examples/MAX32655/Demo_2048/RISCV/main.c | 186 +++++- .../MAX32655/Demo_2048/RISCV/src/controller.c | 4 +- 9 files changed, 188 insertions(+), 981 deletions(-) delete mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/controller.h delete mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/game_2048.h delete mode 100644 Examples/MAX32655/Demo_2048/ARM/src/controller.c delete mode 100644 Examples/MAX32655/Demo_2048/ARM/src/game_2048.c diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/controller.h b/Examples/MAX32655/Demo_2048/ARM/inc/controller.h deleted file mode 100644 index 50d81f60f08..00000000000 --- a/Examples/MAX32655/Demo_2048/ARM/inc/controller.h +++ /dev/null @@ -1,45 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2024 Analog Devices, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/* **** Includes **** */ - -#include - -/* **** Definitions **** */ - -/* **** Function Prototypes **** */ - -/** - * @brief Initialize the user controller (PC Keyboard). - * - Use the system clock for UART which should be the IPO (fastest). - * - * @param uart Select which UART port the controller is connected to. - * @param baud Select the highest baud rate that the device can support. - * - * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. - */ -int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud); - -/** - * @brief Start the Controller and listen for any keypresses. - * - * @param req UART request struct needed for transactions. - * - * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. - */ -int Controller_Start(mxc_uart_req_t *req); diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/game_2048.h b/Examples/MAX32655/Demo_2048/ARM/inc/game_2048.h deleted file mode 100644 index 22ac36b85f9..00000000000 --- a/Examples/MAX32655/Demo_2048/ARM/inc/game_2048.h +++ /dev/null @@ -1,44 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2024 Analog Devices, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/* **** Includes **** */ - -#include - -/* **** Definitions **** */ - -/** - * This enum is used to keep track of which direction the blocks will slide to - * for the main logic to handle. - */ -typedef enum { - INPUT_UP = 0, - INPUT_DOWN = 1, - INPUT_LEFT = 2, - INPUT_RIGHT = 3, -} input_direction_t; - -/* **** Function Prototypes **** */ - -int Game_2048_Init(void); - -int Game_2048_UpdateGrid(input_direction_t direction); - -void Game_2048_PrintGrid(void); - -void Game_2048_GetGrid(uint32_t grid[4][4]); diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index a72d2a84ed5..243d4ffa7c9 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -38,8 +38,6 @@ #include "trng.h" // Application Libraries -#include "controller.h" -#include "game_2048.h" /* **** Definitions **** */ @@ -50,9 +48,9 @@ #define PRINT(...) #endif -/// Controller Settings. -// Set to its fastest supported speed (3Mbps when tested). -#define CONTROLLER_UART_BAUD (2000000) +// Match the Console's baud rate to what the controller will be set to +// for the RISC-V as they share the same port. +#define RISCV_CONTROLLER_BAUD (2000000) /// Semaphores // Should never reach here @@ -87,105 +85,8 @@ extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes #define SEMA_ARM_MAILBOX mxcSemaBox0 #define SEMA_RISCV_MAILBOX mxcSemaBox1 -mxc_uart_req_t CONTROLLER_REQ; -uint8_t CONTROLLER_KEYPRESS; -volatile bool KEYPRESS_READY = false; -uint8_t KEYPRESS_INPUT_DIR; - -uint32_t ARM_GRID_COPY[4][4] = {0}; - -// Select Console UART instance. -mxc_uart_regs_t *CONTROLLER_UART = MXC_UART0; - /* **** Functions **** */ -void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) -{ - int error; - - // Assume no keypress if error detected. - if (cb_error != E_NO_ERROR) { - CONTROLLER_KEYPRESS = 0; // NULL character - } - - KEYPRESS_READY = true; - - // User can add additional directional key switches here. - switch (CONTROLLER_KEYPRESS) { - case 'a': - case 0x44: // Tera term sends Character 'D' for LEFT arrow key. - KEYPRESS_INPUT_DIR = INPUT_LEFT; - break; - - case 'd': - case 0x43: // Tera term sends Character 'C' for RIGHT arrow key. - KEYPRESS_INPUT_DIR = INPUT_RIGHT; - break; - - case 'w': - case 0x41: // Tera term sends Character 'A' for UP arrow key. - KEYPRESS_INPUT_DIR = INPUT_UP; - break; - - case 's': - case 0x42: // Tera term sends Character 'B' for DOWN arrow key. - KEYPRESS_INPUT_DIR = INPUT_DOWN; - break; - - default: - KEYPRESS_READY = false; - } - - // Due to request struct, CONTROLLER_KEYPRESS already contains the keypress character. - // Send keypress to RISCV through mailbox 1. - // The mailbox is 32 bits wide, but the keypress is an ASCII character (8 bits). - SEMA_ARM_MAILBOX->payload[0] = (CONTROLLER_KEYPRESS >> 8 * 0) & 0xFF; - SEMA_ARM_MAILBOX->payload[1] = 0; - SEMA_ARM_MAILBOX->payload[2] = 0; - SEMA_ARM_MAILBOX->payload[3] = 0; - - PRINT("Keypress: %c - 0x%02x\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS); - - // Listen for next keypress. - error = Controller_Start(&CONTROLLER_REQ); - if (error != E_NO_ERROR) { - PRINT("Error listening for next controller keypress: %d\n", error); - LED_On(LED_RED); - } -} - -void PRINT_GRID(void) -{ - Game_2048_GetGrid(ARM_GRID_COPY); - - // Imitate the grid is refreshing on terminal. - PRINT("\n\n\n\n\n\n\n\n\n\n"); - - for (int row = 0; row < 4; row++) { - PRINT(" | | | \n"); - - for (int col = 0; col < 4; col++) { - if (ARM_GRID_COPY[row][col] != 0) { - PRINT(" %04d ", ARM_GRID_COPY[row][col]); - } else { - PRINT(" "); - } - - // Only print border 3 times. - if (col < 3) { - PRINT("|"); - } - } - - PRINT("\n | | | \n"); - - // Only print the row border 3 times. - if (row < 3) { - PRINT("-----------------------------------\n"); - } - } -} - // ***************************************************************************** int main(void) { @@ -199,19 +100,13 @@ int main(void) // - Use IPO for System Clock for fastest speed. (Done in SystemInit) // - Enable Internal Cache. (Done in SystemInit) - // Set up Controller Request Struct. - CONTROLLER_REQ.uart = CONTROLLER_UART; - CONTROLLER_REQ.txData = NULL; - CONTROLLER_REQ.txLen = 0; - CONTROLLER_REQ.rxData = &CONTROLLER_KEYPRESS; - CONTROLLER_REQ.rxLen = 1; // Handle 1 keypress at a time - CONTROLLER_REQ.callback = CONTROLLER_KEYPRESS_Callback; - - // Set up player controller (PC Keyboard via Console UART). - error = Controller_Init(CONTROLLER_UART, CONTROLLER_UART_BAUD); + // Speed up console UART to match player controller baud rate which have shared ports + // (PC Keyboard via Console UART). + error = MXC_UART_Init(MXC_UART_GET_UART(CONSOLE_UART), RISCV_CONTROLLER_BAUD, MXC_UART_APB_CLK); if (error != E_NO_ERROR) { - MXC_ASSERT_FAIL(); - return error; + PRINT("ARM: Error speeding up baud rate: %d\n", error); + LED_On(LED_RED); + while(1); } PRINT("\n\n*******************************************************************************\n"); @@ -248,65 +143,22 @@ int main(void) // Backup Delay for 1 second before starting RISCV core. MXC_Delay(MXC_DELAY_SEC(1)); + PRINT("ARM: Starting RISC-V core and handing off major UART0 Control to RISC-V.\n\n"); + // Start the RISCV core. MXC_SYS_RISCVRun(); // Wait the RISC-V core to finish startup (when it frees ARM semaphore). - PRINT("ARM: Waiting for RISC-V to finish startup process.\n\n"); while (MXC_SEMA_CheckSema(SEMA_IDX_ARM) != E_NO_ERROR) {} MXC_SEMA_GetSema(SEMA_IDX_ARM); // Initialize mailboxes between ARM and RISCV cores. MXC_SEMA_InitBoxes(); - PRINT("ARM: Starting Controller and Game\n"); - - // Start Controller. - error = Controller_Start(&CONTROLLER_REQ); - if (error != E_NO_ERROR) { - PRINT("ARM: Error starting the controller: %d\n", error); - LED_On(LED_RED); - while(1); - } - - error = Game_2048_Init(); - if (error != E_NO_ERROR) { - PRINT("ARM: Error starting game: %d\n", error); - LED_On(LED_RED); - while(1); - } - - // Game_2048_PrintGrid(); - PRINT_GRID(); - - while (1) { - // Wait for keypress. - - while (KEYPRESS_READY == false) {} - - input_direction_t dir = KEYPRESS_INPUT_DIR; - - error = Game_2048_UpdateGrid(dir); - if (error == E_NONE_AVAIL) { - PRINT("Game over!\n"); - LED_On(LED_GREEN); - while(1); - } else if (error != E_NO_ERROR) { - PRINT("ARM: Error updating next move: %d\n", error); - LED_On(LED_RED); - while(1); - } - - // Game_2048_PrintGrid(); - PRINT_GRID(); - - // MXC_Delay(MXC_DELAY_SEC(1)); - KEYPRESS_READY = false; - - + while(1) { + LED_Toggle(1); } - // /* Signal RISC-V core to run */ // printf("ARM : Signal RISC-V.\n"); // MXC_SEMA_FreeSema(NDX_RISCV); diff --git a/Examples/MAX32655/Demo_2048/ARM/src/controller.c b/Examples/MAX32655/Demo_2048/ARM/src/controller.c deleted file mode 100644 index cba7a2305ef..00000000000 --- a/Examples/MAX32655/Demo_2048/ARM/src/controller.c +++ /dev/null @@ -1,80 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2024 Analog Devices, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - - -/* **** Includes **** */ - -#include -#include "mxc_device.h" -#include "nvic_table.h" -#include "uart.h" - -/* **** Definitions **** */ - - -/* **** Globals **** */ - -static mxc_uart_regs_t *Controller_UART; - -/* **** Functions **** */ - -void Controller_Handler(void) -{ - MXC_UART_AsyncHandler(Controller_UART); -} - -int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud) -{ - int error; - - error = MXC_UART_Shutdown(uart); - if (error != E_NO_ERROR) { - return error; - } - - // Set up System UART interrupt for Controller. - // Clear if Console UART was previously set up in SystemInit. - NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); - NVIC_DisableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); - MXC_NVIC_SetVector(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart))), Controller_Handler); - NVIC_EnableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); - - // Initialize UART to its highest speed. - error = MXC_UART_Init(uart, baud, MXC_UART_APB_CLK); - if (error != E_NO_ERROR) { - return error; - } - - Controller_UART = uart; - - return E_NO_ERROR; -} - -int Controller_Start(mxc_uart_req_t *req) -{ - int error; - - error = MXC_UART_TransactionAsync(req); - if (error != E_NO_ERROR) { - return error; - } - - return E_NO_ERROR; -} - - diff --git a/Examples/MAX32655/Demo_2048/ARM/src/game_2048.c b/Examples/MAX32655/Demo_2048/ARM/src/game_2048.c deleted file mode 100644 index f1386397bfa..00000000000 --- a/Examples/MAX32655/Demo_2048/ARM/src/game_2048.c +++ /dev/null @@ -1,630 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2024 Analog Devices, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/* **** Includes **** */ - -#include -#include -#include -#include "mxc_device.h" -#include "trng.h" - -#include "game_2048.h" - -/* **** Definitions **** */ - -#if DEV_MODE_TRACE -#define PRINT(...) printf(__VA_ARGS__) -#else -// Don't print anything -#define PRINT(...) -#endif - -#define COLUMN_SUM(col) ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + MAIN_2048_GRID[3][col])) -#define ROW_SUM(row) ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + MAIN_2048_GRID[row][3])) - -/* **** Globals **** */ - -// Main 4x4 2048 grid that is used to save current state of game. -// Did not choose to create defines for the size of the grid because -// 2048 is played on 4x4 grid. -// When using the grid as a single dimensional array, these are the -// the indexes assigned to each of the 16 squares. -// 0 | 1 | 2 | 3 -// ---|---|---|--- -// 4 | 5 | 6 | 7 -// ---|---|---|--- -// 8 | 9 | a | b -// ---|---|---|--- -// c | d | e | f -static uint32_t MAIN_2048_GRID[4][4]; - -/* **** Functions **** */ - -/** - * Must have TRNG initialized first before calling this function. - * - * @return If true (non-zero value), new block added. If false (zero), - * game over. - */ -static bool add_new_block(void) -{ - uint8_t block_2_or_4; - uint32_t open_space_idx; - uint32_t available_open_spaces = 0; - uint8_t open_space_count = 0; - - // Select whether a 2 or 4 block will be placed. - if (MXC_TRNG_RandomInt() & 0x01) { - block_2_or_4 = 4; - } else { - block_2_or_4 = 2; - } - - // Find available spaces in the grid by representing the grid (2-D array) - // as a 1-D array. - // Locations of main Locations of main - // grid represented grid represented as - // as indexes for coordinates (row,col) - // 1-D array: for 2-D array: - // 0 | 1 | 2 | 3 (0,0) | (0,1) | (0,2) | (0,3) - // ---|---|---|--- ------|-------|-------|------ - // 4 | 5 | 6 | 7 (1,0) | (1,1) | (1,2) | (1,3) - // ---|---|---|--- ======> ------|-------|-------|------ - // 8 | 9 | a | b (2,0) | (2,1) | (2,2) | (2,3) - // ---|---|---|--- ------|-------|-------|------ - // c | d | e | f (3,0) | (3,1) | (3,2) | (3,3) - for (int i = 0; i < 16; i++) { - if (MAIN_2048_GRID[i/4][i%4] == 0) { - available_open_spaces += 1; - } - } - - // No available space, game over. - if (available_open_spaces == 0) { - return false; - } - - open_space_idx = (MXC_TRNG_RandomInt() % available_open_spaces); - - // Fill the "-th" available open space where n is variable "open_space_idx". - // We have the 1-D array index and need to convert to 2-D array coordinate location. - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - if (MAIN_2048_GRID[row][col] == 0) { - if (open_space_count == open_space_idx) { - // Found "n-th" available open space, update grid. - MAIN_2048_GRID[row][col] = block_2_or_4; - return true; - } - - open_space_count += 1; - } - } - } - - return false; -} - -int Game_2048_Init(void) -{ - int error; - - // Clear the grid. - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - MAIN_2048_GRID[i][j] = 0; - } - } - - // Initialize TRNG that is used to randomly select a 2 or 4 block in the grid. - error = MXC_TRNG_Init(); - if (error != E_NO_ERROR) { - return error; - } - - // Should never reach here since we cleared the grid earlier in the function. - if(add_new_block() == false) { - return E_BAD_STATE; - } - - return E_NO_ERROR; -} - -inline static bool row_logic_left_2(void) -{ - int prev_row[4] = {}; - bool blocks_moved = false; - - for (int row = 0; row < 4; row++) { - // Don't waste processing time if row is empty by checking if sum of all blocks in row is 0. - if (ROW_SUM(row) == 0) { - continue; - } - - int temp_row[4] = {0}; - int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. - - // Get all valid blocks to help with same-value pair logic. - for (int col = 0; col < 4; col++) { // Start at left of main row. - prev_row[col] = MAIN_2048_GRID[row][col]; - - if (MAIN_2048_GRID[row][col] != 0) { - temp_row[temp_col_num] = MAIN_2048_GRID[row][col]; - - temp_col_num += 1; - - // Clear valid block on main grid for temp_row to write the updated - // row into after logic is done. - MAIN_2048_GRID[row][col] = 0; - } - } - - // If there's only one valid block, don't bother with the same-value pair logic. - if (temp_col_num == 1) { - MAIN_2048_GRID[row][0] = temp_row[0]; - - // Check if the single block moved left. - if (prev_row[0] != MAIN_2048_GRID[row][0]) { - blocks_moved = true; - } - - continue; - } - - // Main logic: Combine the same-value pairs and write updated row to main grid. - int main_grid_col = 0; // index used to keep track of where to write next on main grid. - - // Start at top of temp column. - for (int t_col = 0; t_col < 4; t_col++) { - if (temp_row[t_col] == 0 || t_col >= temp_col_num) { - // Reached end of valid blocks. - break; - } - - // Write to main grid. - MAIN_2048_GRID[row][main_grid_col] = temp_row[t_col]; - - // Prevent illegal memory reads past main array size when at last column. - if (t_col < 3) { - // If same-value pair detected, combine then re-update the same block in main grid. - if (temp_row[t_col] == temp_row[t_col + 1]) { - // Combine then write to main grid. - MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); - - // Because a same-value pair was combined at index "col" and "col + 1", - // increment the col so that the next iteration of the for loop - // will start at "col + 2" in the temp_row. - t_col += 1; - } - } - - main_grid_col += 1; - } - - // Check if any blocks moved. If not, then don't add new button. - for (int col = 0; col < 4; col++) { - if (prev_row[col] != MAIN_2048_GRID[row][col]) { - blocks_moved = true; - } - } - } - - return blocks_moved; -} - -inline static bool row_logic_right_2(void) -{ - int prev_row[4] = {}; - bool blocks_moved = false; - - for (int row = 0; row < 4; row++) { - // Don't waste processing time if row is empty by checking if sum of all blocks in row is 0. - if (ROW_SUM(row) == 0) { - continue; - } - - int temp_row[4] = {0}; - int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. - - // Get all valid blocks to help with same-value pair logic. - for (int col = 3; col >= 0; col--) { // Start at right of main row. - prev_row[col] = MAIN_2048_GRID[row][col]; - - if (MAIN_2048_GRID[row][col] != 0) { - temp_row[temp_col_num] = MAIN_2048_GRID[row][col]; - - temp_col_num += 1; - - // Clear valid block on main grid for temp_row to write the updated - // row into after logic is done. - MAIN_2048_GRID[row][col] = 0; - } - } - - // If there's only one valid block, don't bother with the same-value pair logic. - if (temp_col_num == 1) { - // Don't forget, starting at end of main row, but temp_row is still in order (left to right). - MAIN_2048_GRID[row][3] = temp_row[0]; - - // Check if the single block moved right. - if (prev_row[3] != MAIN_2048_GRID[row][3]) { - blocks_moved = true; - } - - continue; - } - - // Main logic: Combine the same-value pairs and write updated row to main grid. - int main_grid_col = 3; // index used to keep track of where to write next on main grid. - - // Start at top of temp column. - for (int t_col = 0; t_col < 4; t_col++) { - if (temp_row[t_col] == 0 || t_col >= temp_col_num) { - // Reached end of valid blocks. - break; - } - - // Write to main grid. - MAIN_2048_GRID[row][main_grid_col] = temp_row[t_col]; - - // Prevent illegal memory reads past main array size when at last column. - if (t_col < 3) { - // If same-value pair detected, combine then re-update the same block in main grid. - if (temp_row[t_col] == temp_row[t_col + 1]) { - // Combine then write to main grid. - MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); - - // Because a same-value pair was combined at index "col" and "col + 1", - // increment the col so that the next iteration of the for loop - // will start at "col + 2" in the temp_row. - t_col += 1; - } - } - - main_grid_col -= 1; - } - - // Check if any blocks moved. If not, then don't add new button. - for (int col = 0; col < 4; col++) { - // Don't forget direction, start at end. - if (prev_row[3 - col] != MAIN_2048_GRID[row][3 - col]) { - blocks_moved = true; - } - } - } - - return blocks_moved; -} - -inline static void column_logic_up_1(void) -{ - // Iterate through each column and run the 2048 "same-value pair" logic. - for (int col = 0; col < 4; col++) { - bool same_value_pairs_detected = false; - - // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. - if (COLUMN_SUM(col) == 0) { - continue; - } - - // Not a big difference in speeds... Using brute force for fastest times. - // O(n) where n is the number of rows vs O(1) brute-force. - // Move numbers up to clear empty spaces. - for (int row = 0; row < 3; row++) { - // If space is empty, move over next block. - if (MAIN_2048_GRID[row][col] == 0) { - // Find next available block. - for (int next_row = row + 1; next_row < 4; next_row++) { - if (MAIN_2048_GRID[next_row][col] != 0) { - MAIN_2048_GRID[row][col] = MAIN_2048_GRID[next_row][col]; - MAIN_2048_GRID[next_row][col] = 0; // Clear the block that was just moved. - - // Found next available block, end loop (save cycles). - break; - } - } - } - } - - // Add pairs together and remove the second block. In this case, thes econd block - // is going to be bottom block within the pair because the direction is UP. - for (int row = 0; row < 3; row++) { - // The second conditional doesn't really matter because 0*2 will be 0... - if ((MAIN_2048_GRID[row][col] == MAIN_2048_GRID[row+1][col]) && (MAIN_2048_GRID[row][col] != 0)) { - MAIN_2048_GRID[row][col] *= 2; - MAIN_2048_GRID[row+1][col] = 0; // Clear bottom block of the pair. - - same_value_pairs_detected = true; - } - } - - // If there are combined numbers, then the blocks will have to be moved up again because same value pairs have - // combined and cleared the bottom block. Else, save time by looping again. - if (same_value_pairs_detected) { - // Starting at 1 this time because the blocks moved up already. - for (int row = 1; row < 3; row++) { - // If space is empty, move over next block. - if (MAIN_2048_GRID[row][col] == 0) { - // Find next available block. - for (int next_row = row + 1; next_row < 4; next_row++) { - if (MAIN_2048_GRID[next_row][col] != 0) { - MAIN_2048_GRID[row][col] = MAIN_2048_GRID[next_row][col]; - MAIN_2048_GRID[next_row][col] = 0; // Clear the block that was just moved. - - // Found next available block, end loop (save cycles). - break; - } - } - } - } - } - } -} - -inline static bool column_logic_up_2(void) -{ - int prev_col[4] = {}; - bool blocks_moved = false; - - for (int col = 0; col < 4; col++) { - // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. - if (COLUMN_SUM(col) == 0) { - continue; - } - - int temp_column[4] = {0}; - int temp_row_num = 0; // Also tracks how many valid blocks there are. - - // Get all valid blocks to help with same-value pair logic. - for (int row = 0; row < 4; row++) { // Start at top of main column. - prev_col[row] = MAIN_2048_GRID[row][col]; - - if (MAIN_2048_GRID[row][col] != 0) { - temp_column[temp_row_num] = MAIN_2048_GRID[row][col]; - - temp_row_num += 1; - - // Clear valid block on main grid for temp_column to write the updated - // column into after logic is done. - MAIN_2048_GRID[row][col] = 0; - } - } - - // If there's only one valid block, don't bother with the same-value pair logic. - if (temp_row_num == 1) { - MAIN_2048_GRID[0][col] = temp_column[0]; - - // Check if the single block moved up. - if (prev_col[0] != MAIN_2048_GRID[0][col]) { - blocks_moved = true; - } - - continue; - } - - // Main logic: Combine the same-value pairs and write updated column to main grid. - int main_grid_row = 0; // index used to keep track of where to write next on main grid. - - // Start at top of temp column. - for (int t_row = 0; t_row < 4; t_row++) { - if (temp_column[t_row] == 0 || t_row >= temp_row_num) { - // Reached end of valid blocks. - break; - } - - // Write to main grid. - MAIN_2048_GRID[main_grid_row][col] = temp_column[t_row]; - - // Prevent illegal memory reads past main array size when at last row. - if (t_row < 3) { - // If same-value pair detected, combine then re-update grid. - if (temp_column[t_row] == temp_column[t_row + 1]) { - // Combine then write to main grid. - MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); - - // Because a same-value pair was combined at index "row" and "row + 1", - // increment the row so that the next iteration of the for loop - // will start at "row + 2" in the temp_column. - t_row += 1; - } - } - - main_grid_row += 1; - } - - // Check if any blocks moved. If not, then don't add new button. - for (int row = 0; row < 4; row++) { - if (prev_col[row] != MAIN_2048_GRID[row][col]) { - blocks_moved = true; - } - } - } - - return blocks_moved; -} - -static bool column_logic_down_2(void) -{ - int prev_col[4] = {}; - bool blocks_moved = false; - - for (int col = 0; col < 4; col++) { - // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. - if (COLUMN_SUM(col) == 0) { - continue; - } - - int temp_column[4] = {0}; - int temp_row_num = 0; // Also tracks how many valid blocks there are in column. - - // Get all valid blocks to help with same-value pair logic. - for (int row = 3; row >= 0; row--) { // Start at bottom of main column. - prev_col[row] = MAIN_2048_GRID[row][col]; - - if (MAIN_2048_GRID[row][col] != 0) { - temp_column[temp_row_num] = MAIN_2048_GRID[row][col]; - - temp_row_num += 1; - - // Clear valid block on main grid for temp_column to write the updated - // column into after logic is done. - MAIN_2048_GRID[row][col] = 0; - } - } - - // If there's only one valid block, don't bother with the same-value pair logic. - if (temp_row_num == 1) { - // Confusing but temp column goes in order no matter the direction (up/down). - MAIN_2048_GRID[3][col] = temp_column[0]; - - // Check if the single block moved down. - if (prev_col[3] != MAIN_2048_GRID[3][col]) { - blocks_moved = true; - } - - continue; - } - - // Main logic: Combine the same-value pairs and write updated column to main grid. - int main_grid_row = 3; // index used to keep track of where to write next on main grid. - - // Start at top of temp column. - for (int t_row = 0; t_row < 4; t_row++) { - if (temp_column[t_row] == 0 || t_row >= temp_row_num) { - // Reached end of valid blocks. - break; - } - - // Write to main grid. - MAIN_2048_GRID[main_grid_row][col] = temp_column[t_row]; - - // Prevent illegal memory reads (-1) index of temp column. - if (t_row < 3) { - // If same-value pair detected, combine then re-update grid. - if (temp_column[t_row] == temp_column[t_row + 1]) { - // Combine then write to main grid. - MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); - - // Because a same-value pair was combined at index "row" and "row + 1", - // increment the row so that the next iteration of the for loop - // will start at "row + 2" in the temp_column. - // Don't forget, temp column goes in order (top to bottom) even though - // we go backwards in main column due to down direction. - t_row += 1; - } - } - - main_grid_row -= 1; - } - - // Check if any blocks moved. If not, then don't add new button. - for (int row = 0; row < 4; row++) { - if (prev_col[3 - row] != MAIN_2048_GRID[3 - row][col]) { - blocks_moved = true; - } - } - } - - return blocks_moved; -} - - -int Game_2048_UpdateGrid(input_direction_t direction) -{ - bool blocks_moved; - - // Run main game logic. - switch(direction) { - case INPUT_UP: - printf("UP\n"); - blocks_moved = column_logic_up_2(); - break; - - case INPUT_DOWN: - printf("DOWN\n"); - blocks_moved = column_logic_down_2(); - break; - - case INPUT_LEFT: - printf("LEFT\n"); - blocks_moved = row_logic_left_2(); - break; - - case INPUT_RIGHT: - printf("RIGHT\n"); - blocks_moved = row_logic_right_2(); - break; - - // Should never reach here. - default: - return E_BAD_STATE; - } - - // Once the main game logic is done, insert a new block. - if (blocks_moved == true) { - if (add_new_block() == true) { - return E_NO_ERROR; - } else { - return E_NONE_AVAIL; // Game over. - } - } else { - // nothing happened - return E_NO_ERROR; - } -} - -void Game_2048_PrintGrid(void) -{ - // Imitate the grid is refreshing on terminal. - PRINT("\n\n\n\n\n\n\n\n\n\n"); - - for (int row = 0; row < 4; row++) { - PRINT(" | | | \n"); - - for (int col = 0; col < 4; col++) { - if (MAIN_2048_GRID[row][col] != 0) { - PRINT(" %04d ", MAIN_2048_GRID[row][col]); - } else { - PRINT(" "); - } - - // Only print border 3 times. - if (col < 3) { - PRINT("|"); - } - } - - PRINT("\n | | | \n"); - - // Only print the row border 3 times. - if (row < 3) { - PRINT("-----------------------------------\n"); - } - } -} - -void Game_2048_GetGrid(uint32_t grid[4][4]) -{ - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - grid[row][col] = MAIN_2048_GRID[row][col]; - } - } -} - diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json index 740d4d06f25..11a28841a55 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json @@ -76,7 +76,9 @@ "${workspaceFolder}/build/project_defines.h" ], "files.associations": { - "stdint.h": "c" + "stdint.h": "c", + "mxc_device.h": "c", + "uart.h": "c" } } diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h b/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h index 50d81f60f08..5e7c1930b40 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h @@ -19,6 +19,8 @@ /* **** Includes **** */ #include +#include "mxc_device.h" +#include "uart.h" /* **** Definitions **** */ diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 159699b11ce..4fb8a82c429 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -35,15 +35,10 @@ #include "led.h" #include "pb.h" #include "sema.h" -#include "rtc.h" -#include "tft_ssd2119.h" -#include "tsc2046.h" -// // Application Libraries -// #include "utils.h" -// #include "state.h" -// #include "bitmap.h" -// #include "keypad.h" +// Application Libraries +#include "controller.h" +#include "game_2048.h" /***** Definitions *****/ @@ -54,6 +49,12 @@ #define PRINT(...) #endif +/// Controller Settings. +// Set to its fastest supported speed (3Mbps when tested). +// UART speed up is set at the beginning of BOTH ARM and RISC-V main code +// because SystemInit for both cores default the UART baud rate to +// 115200. +#define CONTROLLER_UART_BAUD (2000000) /// Semaphores // Should never reach here @@ -86,13 +87,128 @@ extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes #define SEMA_ARM_MAILBOX mxcSemaBox0 #define SEMA_RISCV_MAILBOX mxcSemaBox1 +mxc_uart_req_t CONTROLLER_REQ; +uint8_t CONTROLLER_KEYPRESS; +volatile bool KEYPRESS_READY = false; +uint8_t KEYPRESS_INPUT_DIR; + +uint32_t RISCV_GRID_COPY[4][4] = {0}; + +// Select Console UART instance. +mxc_uart_regs_t *CONTROLLER_UART = MXC_UART0; + /***** Functions *****/ +void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) +{ + int error; + + // Assume no keypress if error detected. + if (cb_error != E_NO_ERROR) { + CONTROLLER_KEYPRESS = 0; // NULL character + } + + KEYPRESS_READY = true; + + // User can add additional directional key switches here. + switch (CONTROLLER_KEYPRESS) { + case 'a': + case 0x44: // Tera term sends Character 'D' for LEFT arrow key. + KEYPRESS_INPUT_DIR = INPUT_LEFT; + break; + + case 'd': + case 0x43: // Tera term sends Character 'C' for RIGHT arrow key. + KEYPRESS_INPUT_DIR = INPUT_RIGHT; + break; + + case 'w': + case 0x41: // Tera term sends Character 'A' for UP arrow key. + KEYPRESS_INPUT_DIR = INPUT_UP; + break; + + case 's': + case 0x42: // Tera term sends Character 'B' for DOWN arrow key. + KEYPRESS_INPUT_DIR = INPUT_DOWN; + break; + + default: + KEYPRESS_READY = false; + } + + // Due to request struct, CONTROLLER_KEYPRESS already contains the keypress character. + // Send keypress to RISCV through mailbox 1. + // The mailbox is 32 bits wide, but the keypress is an ASCII character (8 bits). + SEMA_ARM_MAILBOX->payload[0] = (CONTROLLER_KEYPRESS >> 8 * 0) & 0xFF; + SEMA_ARM_MAILBOX->payload[1] = 0; + SEMA_ARM_MAILBOX->payload[2] = 0; + SEMA_ARM_MAILBOX->payload[3] = 0; + + PRINT("RISC-V: Keypress: %c - 0x%02x\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS); + + // Listen for next keypress. + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); + LED_On(LED_RED); + } +} + +void PRINT_GRID(void) +{ + Game_2048_GetGrid(RISCV_GRID_COPY); + + // Imitate the grid is refreshing on terminal. + PRINT("\n\n\n\n\n\n\n\n\n\n"); + + for (int row = 0; row < 4; row++) { + PRINT(" | | | \n"); + + for (int col = 0; col < 4; col++) { + if (RISCV_GRID_COPY[row][col] != 0) { + PRINT(" %04d ", RISCV_GRID_COPY[row][col]); + } else { + PRINT(" "); + } + + // Only print border 3 times. + if (col < 3) { + PRINT("|"); + } + } + + PRINT("\n | | | \n"); + + // Only print the row border 3 times. + if (row < 3) { + PRINT("-----------------------------------\n"); + } + } +} + // ***************************************************************************** int main(void) { int error; + // Speed up UART0 (Console) baud rate as the controller and console share the same port. + // Plus, Console UART gets reverted to default speed (115200) during SystemInit() during both + // ARM and RISC-V SystemInit(). + error = Controller_Init(CONTROLLER_UART, CONTROLLER_UART_BAUD); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error speeding up baud rate: %d\n", error); + LED_On(LED_RED); + while(1); + } + + // Set up Controller Request Struct. + CONTROLLER_REQ.uart = CONTROLLER_UART; + CONTROLLER_REQ.txData = NULL; + CONTROLLER_REQ.txLen = 0; + CONTROLLER_REQ.rxData = &CONTROLLER_KEYPRESS; + CONTROLLER_REQ.rxLen = 1; // Handle 1 keypress at a time + CONTROLLER_REQ.callback = CONTROLLER_KEYPRESS_Callback; + // NOTE: Printing to terminal is done on UART0 which both the ARM and RISC-V core must share. // Must be mindful when to use PRINT (printf) for RISC-V side. PRINT("RISC-V: Starting RISC-V Initialization.\n\n"); @@ -119,19 +235,55 @@ int main(void) MXC_SEMA_InitBoxes(); // RISC-V startup finish startup and initializing mailboxes. Signal ARM to continue. - PRINT("RISC-V: Finished startup. Handing off major UART0 control to ARM.\n\n"); + PRINT("RISC-V: Finished startup. Main UART0 control is handled by RISC-V now.\n\n"); MXC_SEMA_FreeSema(SEMA_IDX_ARM); - // Initialize RTC - MXC_RTC_Init(0, 0); - MXC_RTC_Start(); + PRINT("RISC-V: Starting Controller and Game\n"); - // // TFT Pre-Init done during ARM startup in SystemInit(). - // MXC_TFT_Init(); + // Start Controller. + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error starting the controller: %d\n", error); + LED_On(LED_RED); + while(1); + } - // MXC_TFT_SetBackGroundColor(0); - // LED_On(1); - while(1) {} + error = Game_2048_Init(); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error starting game: %d\n", error); + LED_On(LED_RED); + while(1); + } + + // Game_2048_PrintGrid(); + PRINT_GRID(); + + while (1) { + // Wait for keypress. + + while (KEYPRESS_READY == false) {} + + input_direction_t dir = KEYPRESS_INPUT_DIR; + + error = Game_2048_UpdateGrid(dir); + if (error == E_NONE_AVAIL) { + PRINT("Game over!\n"); + LED_On(LED_GREEN); + while(1); + } else if (error != E_NO_ERROR) { + PRINT("RISC-V: Error updating next move: %d\n", error); + LED_On(LED_RED); + while(1); + } + + // Game_2048_PrintGrid(); + PRINT_GRID(); + + // MXC_Delay(MXC_DELAY_SEC(1)); + KEYPRESS_READY = false; + + + } // /* Initialize Touch Screen controller */ // MXC_TS_Init(); // MXC_TS_Start(); diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c index cba7a2305ef..dc5dd747d30 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c @@ -21,7 +21,6 @@ #include #include "mxc_device.h" -#include "nvic_table.h" #include "uart.h" /* **** Definitions **** */ @@ -33,7 +32,7 @@ static mxc_uart_regs_t *Controller_UART; /* **** Functions **** */ -void Controller_Handler(void) +void UART0_IRQHandler(void) { MXC_UART_AsyncHandler(Controller_UART); } @@ -51,7 +50,6 @@ int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud) // Clear if Console UART was previously set up in SystemInit. NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); NVIC_DisableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); - MXC_NVIC_SetVector(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart))), Controller_Handler); NVIC_EnableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); // Initialize UART to its highest speed. From 3df999ef6dac340054bd2d037fd496c01795f168 Mon Sep 17 00:00:00 2001 From: Woo Date: Thu, 12 Sep 2024 22:15:18 -0500 Subject: [PATCH 03/27] Added starting animations and core sync --- .../Demo_2048/ARM/.vscode/settings.json | 4 +- .../Demo_2048/ARM/inc/clear_sans_bold_num.h | 374 + .../MAX32655/Demo_2048/ARM/inc/graphics.h | 115 + Examples/MAX32655/Demo_2048/ARM/main.c | 126 +- Examples/MAX32655/Demo_2048/ARM/project.mk | 9 + .../Demo_2048/ARM/resources/all_imgs.c | 7449 +++++++++++++++++ .../MAX32655/Demo_2048/ARM/resources/bitmap.h | 50 + .../fonts/urw_gothic_12-grey_bg-white.bmp | Bin 0 -> 28016 bytes .../fonts/urw_gothic_12-grey_bg-white.mff | Bin 0 -> 382 bytes .../fonts/urw_gothic_12-white_bg-grey.bmp | Bin 0 -> 28016 bytes .../fonts/urw_gothic_12-white_bg-grey.mff | Bin 0 -> 382 bytes .../fonts/urw_gothic_13-grey_bg-white.bmp | Bin 0 -> 30780 bytes .../fonts/urw_gothic_13-grey_bg-white.mff | Bin 0 -> 382 bytes .../fonts/urw_gothic_13-white_bg-grey.bmp | Bin 0 -> 30780 bytes .../fonts/urw_gothic_13-white_bg-grey.mff | Bin 0 -> 382 bytes .../MAX32655/Demo_2048/ARM/src/graphics.c | 343 + .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 2 + Examples/MAX32655/Demo_2048/RISCV/main.c | 146 +- Examples/MAX32655/Demo_2048/RISCV/project.mk | 7 +- .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 13 + 20 files changed, 8479 insertions(+), 159 deletions(-) create mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_num.h create mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/graphics.h create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.mff create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-white_bg-grey.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-white_bg-grey.mff create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.mff create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.mff create mode 100644 Examples/MAX32655/Demo_2048/ARM/src/graphics.c diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json index 0a427c09f8a..10f490c632a 100644 --- a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json @@ -80,7 +80,9 @@ "game_logic_2048.h": "c", "mxc_delay.h": "c", "ext_flash.h": "c", - "tft_ssd2119.h": "c" + "tft_ssd2119.h": "c", + "graphics.h": "c", + "led.h": "c" } } diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_num.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_num.h new file mode 100644 index 00000000000..21fc4e95c15 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_num.h @@ -0,0 +1,374 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +// clang-format off + +/* **** Includes **** */ + +#include +#include "mxc_device.h" +#include "uart.h" + +/* **** Definitions **** */ + +// NOTE: This definition is used instead of 'const' to place these files into Flash to remove +// the "discard 'const' qualifer from pointer target type" build warning. +#define __flash __attribute__((section(".flash_code_section"))) + +/* **** Function Prototypes **** */ + +// NOTE: '__attribute__() + +// 16x19 +#define ZERO_WITDH (16) +#define ZERO_HEIGHT (19) +__flash uint16_t zero[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 14x22 +#define BLOCK_2_DIGIT_PX_WIDTH (14) +#define BLOCK_2_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_2[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +// 17x22 +#define BLOCK_4_DIGIT_PX_WIDTH (17) +#define BLOCK_4_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_4[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 + +}; + +// 14x22 +#define BLOCK_8_DIGIT_PX_WIDTH (14) +#define BLOCK_8_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_8[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 26x22 +#define BLOCK_16_DIGIT_PX_WIDTH (26) +#define BLOCK_16_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_16[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 30x22 +#define BLOCK_32_DIGIT_PX_WIDTH (30) +#define BLOCK_32_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_32[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +// 34x22 +#define BLOCK_64_DIGIT_PX_WIDTH (34) +#define BLOCK_64_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_64[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +// 40x19 +#define BLOCK_128_DIGIT_PX_WIDTH (40) +#define BLOCK_128_DIGIT_PX_HEIGHT (19) +__flash uint16_t block_128[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbef7, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6210, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 45x19 +#define BLOCK_256_DIGIT_PX_WIDTH (45) +#define BLOCK_256_DIGIT_PX_HEIGHT (19) +__flash uint16_t block_256[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, +}; + +// 39x19 +#define BLOCK_512_DIGIT_PX_WIDTH (39) +#define BLOCK_512_DIGIT_PX_HEIGHT (19) +__flash uint16_t block_512[] = { + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +// 41x13 +#define BLOCK_1024_DIGIT_PX_WIDTH (41) +#define BLOCK_1024_DIGIT_PX_HEIGHT (13) +__flash uint16_t block_1024[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, +}; + +// 44x13 +#define BLOCK_2048_DIGIT_PX_WIDTH (44) +#define BLOCK_2048_DIGIT_PX_HEIGHT (13) +__flash uint16_t block_2048[] = { + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, +}; + + +// Easier way to get these measurements. +// Default is 2. +#define BLOCK_DIGIT_PX_WIDTH(block) ((block) == 2 ? BLOCK_2_DIGIT_PX_WIDTH \ + : (block) == 4 ? BLOCK_4_DIGIT_PX_WIDTH \ + : (block) == 8 ? BLOCK_8_DIGIT_PX_WIDTH \ + : (block) == 16 ? BLOCK_16_DIGIT_PX_WIDTH \ + : (block) == 32 ? BLOCK_32_DIGIT_PX_WIDTH \ + : (block) == 64 ? BLOCK_64_DIGIT_PX_WIDTH \ + : (block) == 128 ? BLOCK_128_DIGIT_PX_WIDTH \ + : (block) == 256 ? BLOCK_256_DIGIT_PX_WIDTH \ + : (block) == 512 ? BLOCK_512_DIGIT_PX_WIDTH \ + : (block) == 1024 ? BLOCK_1024_DIGIT_PX_WIDTH \ + : (block) == 2048 ? BLOCK_2048_DIGIT_PX_WIDTH \ + : BLOCK_2_DIGIT_PX_WIDTH) + +#define BLOCK_DIGIT_PX_HEIGHT(block) ((block) == 2 ? BLOCK_2_DIGIT_PX_HEIGHT \ + : (block) == 4 ? BLOCK_4_DIGIT_PX_HEIGHT \ + : (block) == 8 ? BLOCK_8_DIGIT_PX_HEIGHT \ + : (block) == 16 ? BLOCK_16_DIGIT_PX_HEIGHT \ + : (block) == 32 ? BLOCK_32_DIGIT_PX_HEIGHT \ + : (block) == 64 ? BLOCK_64_DIGIT_PX_HEIGHT \ + : (block) == 128 ? BLOCK_128_DIGIT_PX_HEIGHT \ + : (block) == 256 ? BLOCK_256_DIGIT_PX_HEIGHT \ + : (block) == 512 ? BLOCK_512_DIGIT_PX_HEIGHT \ + : (block) == 1024 ? BLOCK_1024_DIGIT_PX_HEIGHT \ + : (block) == 2048 ? BLOCK_2048_DIGIT_PX_HEIGHT \ + : BLOCK_2_DIGIT_PX_HEIGHT) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h new file mode 100644 index 00000000000..9ec61791d4a --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -0,0 +1,115 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +#define SCREEN_ORIENTATION (SCREEN_ROTATE) + +// Will be different from actual screen dimensions depending on screen orientation +#define SCREEN_WIDTH (320) +#define SCREEN_HEIGHT (240) + +// TODO(SW): Automatically calculate these sizes based on screen dimensions. +#define GRID_OFFSET_X (80) +#define GRID_OFFSET_Y (0) +#define GRID_LENGTH (224) +#define GRID_SPACING (8) // spacing between edge of "screen to grid". + +#define BLOCK_LENGTH (51) +#define BLOCK_SPACING (4) // spacing between edge of "grid to block" and "block to block". + +#define RADIUS_FOR_CORNERS (3) + +// Colors + +#define RGB565_WHITE (0xFFFF) +#define RGB565_BLACK (0x0000) +#define RGB565_DARK_GRAY (0x3084) +#define RGB565_LIGHT_GRAY (0x5AEB) + +// Block colors (2-2048) are taken from original game: https://github.com/gabrielecirulli/2048?tab=readme-ov-file +// Open-source under MIT License. +#define RGB565_BLOCK_2 (0xEF3B) +#define RGB565_BLOCK_4 (0xEF19) +#define RGB565_BLOCK_8 (0xF58F) +#define RGB565_BLOCK_16 (0xF4AC) +#define RGB565_BLOCK_32 (0xF3EB) +#define RGB565_BLOCK_64 (0xF2E7) +#define RGB565_BLOCK_128 (0xEE6E) +#define RGB565_BLOCK_256 (0xEE6C) +#define RGB565_BLOCK_512 (0xEE4A) +#define RGB565_BLOCK_1024 (0xEE27) +#define RGB565_BLOCK_2048 (0xEE05) + +#define RGB565_BLOCK_4096 (0xFDF7) +#define RGB565_BLOCK_8192 (0xF38E) +#define RGB565_BLOCK_16384 (0xFC58) +#define RGB565_BLOCK_32768 (0xB43C) +#define RGB565_BLOCK_65536 (0x8BF9) +#define RGB565_BLOCK_131072 (0x6C3C) + +// For my non-American English Speakers :) +#define RGB565_DARK_GREY RGB565_DARK_GRAY +#define RGB565_LIGHT_GREY RGB565_LIGHT_GRAY + +// Formatted Colors +#define FORMAT_RGB565_TO_PACKET(RGB) (0x01000100 | ((RGB & 0x00FF) << 16) | ((RGB & 0xFF00) >> 8)) + +// 'F_' prefix stands for "formatted into packets". +#define F_BACKGROUND_COLOR FORMAT_RGB565_TO_PACKET(RGB565_WHITE) +#define F_GRID_COLOR FORMAT_RGB565_TO_PACKET(RGB565_DARK_GRAY) +#define F_EMPTY_BLOCK_COLOR FORMAT_RGB565_TO_PACKET(RGB565_LIGHT_GRAY) + +#define RGB_BLOCK_COLOR(block) ((block) == 2 ? RGB565_BLOCK_2 \ + : (block) == 4 ? RGB565_BLOCK_4 \ + : (block) == 8 ? RGB565_BLOCK_8 \ + : (block) == 16 ? RGB565_BLOCK_16 \ + : (block) == 32 ? RGB565_BLOCK_32 \ + : (block) == 64 ? RGB565_BLOCK_64 \ + : (block) == 128 ? RGB565_BLOCK_128 \ + : (block) == 256 ? RGB565_BLOCK_256 \ + : (block) == 512 ? RGB565_BLOCK_512 \ + : (block) == 1024 ? RGB565_BLOCK_1024 \ + : (block) == 2048 ? RGB565_BLOCK_2048 \ + : BLOCK_2_DIGIT_PX_HEIGHT) + +#define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) + + +typedef enum { + GRAPHICS_SLIDE_DIR_LEFT, + GRAPHICS_SLIDE_DIR_RIGHT, + GRAPHICS_SLIDE_DIR_UP, + GRAPHICS_SLIDE_DIR_DOWN +} graphics_slide_direction_t; + +/* **** Function Prototypes **** */ + +int Graphics_Init(void); + +void Graphics_AddNewBlock(int row, int col, int block_2_4); + +void Graphics_AddBlock(int row, int col, int value); + +void Graphics_CombineBlocks(int row, int col, int new_value); + +void Graphics_EraseSingleBlock(int row, int col, graphics_slide_direction_t direction); diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 243d4ffa7c9..99f760aaffe 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -34,10 +34,10 @@ #include "sema.h" #include "led.h" #include "uart.h" - -#include "trng.h" +#include "rtc.h" // Application Libraries +#include "graphics.h" /* **** Definitions **** */ @@ -82,19 +82,30 @@ extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes // Rename boxes for readability. // Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. -#define SEMA_ARM_MAILBOX mxcSemaBox0 -#define SEMA_RISCV_MAILBOX mxcSemaBox1 +#define SEMA_RISCV_MAILBOX mxcSemaBox0 +#define SEMA_ARM_MAILBOX mxcSemaBox1 + +static uint32_t ARM_GRID_COPY[4][4] = {0}; /* **** Functions **** */ +// void SEMA_GetGrid(void) +// { +// uint32_t *grid = (uint32_t *)(SEMA_RISCV_MAILBOX->payload); + +// for (int i = 0; i < 16; i++) { +// ARM_MAIN_GRID[i/4][i%4] = grid[i]; +// } +// } + // ***************************************************************************** int main(void) { int error; // The mailbox names are pre-defined, Creating new pointers and pointing them to // memory locations for easier readability. - // sema_arm_mailbox = mxcSemaBox0; - // sema_riscv_mailbox = mxcSemaBox1; + // SEMA_RISCV_MAILBOX = mxcSemaBox0; + // SEMA_ARM_MAILBOX = mxcSemaBox1; // System Initialization: // - Use IPO for System Clock for fastest speed. (Done in SystemInit) @@ -155,44 +166,71 @@ int main(void) // Initialize mailboxes between ARM and RISCV cores. MXC_SEMA_InitBoxes(); - while(1) { - LED_Toggle(1); + // Signal RISCV core to run. + MXC_SEMA_FreeSema(SEMA_IDX_RISCV); + + // Initialize RTC. + MXC_RTC_Init(0, 0); + + error = Graphics_Init(); + if (error != E_NO_ERROR) { + PRINT("ARM: Error initializing graphics: %d\n", error); + LED_On(LED_RED); + while(1); } -// /* Signal RISC-V core to run */ -// printf("ARM : Signal RISC-V.\n"); -// MXC_SEMA_FreeSema(NDX_RISCV); - -// uint32_t cnt; - -// /* Enter LPM */ -// while (1) { -// #if DUAL_CORE_SYNC -// /* Wait */ -// ret = MXC_SEMA_CheckSema(NDX_ARM); -// if (E_BUSY != ret) { -// MXC_SEMA_GetSema(NDX_ARM); - -// /* Do the job. */ -// // Retrieve the data from the mailbox1 -// cnt = mxcSemaBox1->payload[0] << (8 * 0); -// cnt += mxcSemaBox1->payload[1] << (8 * 1); -// cnt += mxcSemaBox1->payload[2] << (8 * 2); -// cnt += mxcSemaBox1->payload[3] << (8 * 3); - -// printf("ARM : cnt=%d\n", cnt++); - -// mxcSemaBox0->payload[0] = (cnt >> 8 * 0) & 0xFF; -// mxcSemaBox0->payload[1] = (cnt >> 8 * 1) & 0xFF; -// mxcSemaBox0->payload[2] = (cnt >> 8 * 2) & 0xFF; -// mxcSemaBox0->payload[3] = (cnt >> 8 * 3) & 0xFF; - -// /* Do other jobs here. */ -// MXC_Delay(MXC_DELAY_SEC(1)); - -// /* Signal */ -// MXC_SEMA_FreeSema(NDX_RISCV); -// } -// #endif -// } + + // for (int r = 1; r < 4; r++) { + // for (int c = 0; c < 4; c++) { + // Graphics_AddBlock(r, c, 2); + // } + // } + + // Graphics_AddNewBlock(0, 1, 2); + + while (1) { + // Ready to receive game input. + + // Wait for game to finish game logic. + while (MXC_SEMA_CheckSema(SEMA_IDX_ARM) != E_NO_ERROR) {} + + MXC_SEMA_GetSema(SEMA_IDX_ARM); + + // for (int i = 0; i < 16*4; i++) { + // PRINT("%d - ", SEMA_RISCV_MAILBOX->payload[i]); + // } + + PRINT("\n======\n"); + + // for (int x = 0; x < MAILBOX_PAYLOAD_LEN; x++) { + // PRINT("ARM: %02x\n", SEMA_ARM_MAILBOX->payload[x]); + // } + int i = 0; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + ARM_GRID_COPY[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+1] << (8 * 1); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+2] << (8 * 2); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+3] << (8 * 3); + + PRINT("ARM: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, ARM_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); + + // ARM_GRID_COPY[row][col] = SEMA_RISCV_MAILBOX->payload[i] << (8 * 0); + // ARM_GRID_COPY[row][col] += SEMA_RISCV_MAILBOX->payload[i+1] << (8 * 1); + // ARM_GRID_COPY[row][col] += SEMA_RISCV_MAILBOX->payload[i+2] << (8 * 2); + // ARM_GRID_COPY[row][col] += SEMA_RISCV_MAILBOX->payload[i+3] << (8 * 3); + + // PRINT("ARM: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, ARM_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); + + i+=4; + } + } + + PRINT("ARM: Direction Keypress: %c - 0x%02x\n", SEMA_ARM_MAILBOX->payload[4 * 16], SEMA_ARM_MAILBOX->payload[4 * 16]); + + MXC_SEMA_FreeSema(SEMA_IDX_RISCV); + // Graphics_EraseSingleBlock(0, 1, GRAPHICS_SLIDE_DIR_LEFT); + + // Graphics_AddBlock(0, 0, 2); + } } diff --git a/Examples/MAX32655/Demo_2048/ARM/project.mk b/Examples/MAX32655/Demo_2048/ARM/project.mk index 29b5fb8de44..1f486ca072b 100644 --- a/Examples/MAX32655/Demo_2048/ARM/project.mk +++ b/Examples/MAX32655/Demo_2048/ARM/project.mk @@ -18,6 +18,9 @@ RISCV_APP=../RISCV IPATH += ./inc VPATH += ./src +# IPATH += resources +# VPATH += resources + DEV_MODE_TRACE = 1 ifeq ($(DEV_MODE_TRACE), 1) @@ -26,5 +29,11 @@ endif PROJ_CFLAGS += -UDEBUG +# RISC-V ICC1 will not be used. +# ARM_SRAM_SIZE = 0x18000 +# RISCV_SRAM_SIZE = 0x8000 # 32KB +# DUAL_CORE_RAM_SIZE = 0x20000 + + # TODO: REMOVE ME # MAXIM_PATH=../../../../ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c new file mode 100644 index 00000000000..afa363ed547 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c @@ -0,0 +1,7449 @@ + +/******************************************************************************* +* Copyright (C) 2022 Maxim Integrated Products, Inc., All rights Reserved. +* +* This software is protected by copyright laws of the United States and +* of foreign countries. This material may also be protected by patent laws +* and technology transfer regulations of the United States and of foreign +* countries. This software is furnished under a license agreement and/or a +* nondisclosure agreement and may only be used or reproduced in accordance +* with the terms of those agreements. Dissemination of this information to +* any party or parties not specified in the license agreement and/or +* nondisclosure agreement is expressly prohibited. +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES +* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +* +* Except as contained in this notice, the name of Maxim Integrated +* Products, Inc. shall not be used except as stated in the Maxim Integrated +* Products, Inc. Branding Policy. +* +* The mere transfer of this software does not imply any licenses +* of trade secrets, proprietary technology, copyrights, patents, +* trademarks, maskwork rights, or any other form of intellectual +* property whatsoever. Maxim Integrated Products, Inc. retains all +* ownership rights. +******************************************************************************* +*/ + + + +__attribute__ ((section(".bin_storage_img"))) __attribute__ ((__used__)) +const unsigned char imgs_arr[ ] = { + +/* + Header + */ +0x18,0x00,0x00,0x00,0x1D,0x04,0x00,0x00,0x16,0x0A,0x00,0x00,0x01,0x00,0x00, +0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00, + +/* + Palette + */ +0x01, +0x1D,0x00,0x00,0x00, +0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9B,0xA5,0x18,0x00,0x70,0x73,0x71, +0x00,0x33,0x35,0x3B,0x00,0x20,0xE8,0xD9,0x00,0x03,0x02,0xD5,0x00,0x00,0xA9,0x00, +0x00,0x6F,0x6E,0x7A,0x00,0xFF,0xFD,0xFF,0x00,0x76,0x75,0x76,0x00,0x95,0x94,0x95, +0x00,0x6A,0x66,0x69,0x00,0x7A,0x76,0x78,0x00,0x76,0x72,0x74,0x00,0x75,0x71,0x73, +0x00,0x71,0x6F,0x6F,0x00,0x76,0x75,0x75,0x00,0x75,0x74,0x74,0x00,0x74,0x73,0x73, +0x00,0x73,0x72,0x72,0x00,0x72,0x71,0x71,0x00,0x91,0x90,0x90,0x00,0x86,0x85,0x85, +0x00,0x67,0x65,0x64,0x00,0x63,0x61,0x60,0x00,0x70,0x6E,0x6D,0x00,0x6A,0x68,0x66, +0x00,0x77,0x76,0x75,0x00,0x71,0x70,0x6F,0x00,0x6E,0x6D,0x6C,0x00,0x6D,0x6C,0x6B, +0x00,0x6C,0x6B,0x6A,0x00,0x90,0x8F,0x8E,0x00,0x88,0x87,0x86,0x00,0x77,0x74,0x70, +0x00,0x76,0x73,0x6F,0x00,0x75,0x72,0x6E,0x00,0x4F,0x4D,0x4A,0x00,0x5A,0x58,0x55, +0x00,0x58,0x56,0x53,0x00,0x56,0x54,0x51,0x00,0x3F,0x3D,0x39,0x00,0x44,0x42,0x3E, +0x00,0x47,0x45,0x41,0x00,0x4C,0x4A,0x46,0x00,0x4B,0x49,0x45,0x00,0x4A,0x48,0x44, +0x00,0x4E,0x4C,0x48,0x00,0x4D,0x4B,0x47,0x00,0x6B,0x6A,0x68,0x00,0x68,0x67,0x65, +0x00,0x66,0x65,0x63,0x00,0x64,0x63,0x61,0x00,0x74,0x73,0x71,0x00,0x73,0x72,0x70, +0x00,0x42,0x40,0x3B,0x00,0x41,0x3F,0x3A,0x00,0x43,0x41,0x3C,0x00,0x46,0x44,0x3F, +0x00,0x5D,0x5C,0x59,0x00,0x5B,0x5A,0x57,0x00,0x61,0x60,0x5D,0x00,0x5F,0x5E,0x5B, +0x00,0x76,0x75,0x72,0x00,0x72,0x71,0x6E,0x00,0x53,0x52,0x4E,0x00,0x51,0x50,0x4C, +0x00,0x79,0x78,0x74,0x00,0x48,0x47,0x42,0x00,0xFD,0xFC,0xF7,0x00,0x77,0x76,0x6B, +0x00,0x80,0x7F,0x71,0x00,0x9D,0xA0,0x19,0x00,0x93,0x95,0x1E,0x00,0xA3,0xA6,0x25, +0x00,0xF9,0xF9,0xED,0x00,0x76,0x76,0x73,0x00,0x79,0x79,0x77,0x00,0x89,0x89,0x87, +0x00,0x81,0x81,0x7F,0x00,0x4C,0x4C,0x4B,0x00,0x4A,0x4A,0x49,0x00,0xFE,0xFE,0xFC, +0x00,0xFF,0xFF,0xFE,0x00,0xE2,0xE2,0xE1,0x00,0xC2,0xC2,0xC1,0x00,0xB7,0xB7,0xB6, +0x00,0xAE,0xAE,0xAD,0x00,0xA7,0xA7,0xA6,0x00,0xA1,0xA1,0xA0,0x00,0x9C,0x9C,0x9B, +0x00,0x9A,0x9A,0x99,0x00,0x97,0x97,0x96,0x00,0x8E,0x8E,0x8D,0x00,0x8D,0x8D,0x8C, +0x00,0x8A,0x8A,0x89,0x00,0x83,0x83,0x82,0x00,0xA6,0xAE,0x00,0x00,0xA5,0xAB,0x00, +0x00,0xA2,0xA6,0x00,0x00,0xA0,0xA4,0x00,0x00,0x95,0x9C,0x01,0x00,0xA6,0xAA,0x0A, +0x00,0x9F,0xA6,0x0B,0x00,0x89,0x8F,0x0E,0x00,0xA9,0xAD,0x13,0x00,0xAD,0xB1,0x1D, +0x00,0x9C,0xA2,0x1F,0x00,0xB1,0xB5,0x25,0x00,0xBD,0xC3,0x41,0x00,0xB5,0xB9,0x44, +0x00,0xC3,0xC8,0x59,0x00,0x83,0x85,0x4B,0x00,0xCB,0xCF,0x79,0x00,0x8B,0x8D,0x56, +0x00,0x7D,0x7E,0x59,0x00,0xDB,0xDE,0x9D,0x00,0xE4,0xE6,0xB7,0x00,0xA9,0xB2,0x00, +0x00,0xAF,0xB8,0x14,0x00,0x9D,0xA6,0x13,0x00,0x9C,0xA5,0x15,0x00,0x9B,0xA5,0x16, +0x00,0x99,0xA2,0x17,0x00,0x9A,0xA3,0x19,0x00,0x9E,0xA7,0x1D,0x00,0xA0,0xA9,0x20, +0x00,0x74,0x7A,0x1A,0x00,0xB5,0xBC,0x2B,0x00,0xAE,0xB4,0x36,0x00,0x9A,0xA0,0x31, +0x00,0x93,0x97,0x46,0x00,0x97,0x9A,0x67,0x00,0xA8,0xAB,0x77,0x00,0x84,0x86,0x65, +0x00,0xEC,0xEE,0xCC,0x00,0xF4,0xF5,0xE0,0x00,0x9C,0xA6,0x18,0x00,0x91,0x99,0x2C, +0x00,0x60,0x65,0x24,0x00,0x6A,0x6C,0x56,0x00,0x77,0x79,0x62,0x00,0x9C,0xAB,0x15, +0x00,0xA5,0xB5,0x2B,0x00,0x9E,0xAD,0x2C,0x00,0x8A,0x93,0x37,0x00,0x7C,0x84,0x3D, +0x00,0x51,0x55,0x2F,0x00,0x4C,0x4F,0x2F,0x00,0x9C,0x9F,0x81,0x00,0x8F,0xA2,0x15, +0x00,0xAF,0xC1,0x29,0x00,0xAA,0xBC,0x2A,0x00,0xA7,0xB8,0x2B,0x00,0xA4,0xB5,0x2B, +0x00,0xA3,0xB3,0x2C,0x00,0x99,0xA9,0x35,0x00,0x45,0x48,0x32,0x00,0xA6,0xBA,0x32, +0x00,0xA2,0xB5,0x33,0x00,0x9D,0xAF,0x34,0x00,0x6A,0x72,0x40,0x00,0x65,0x6B,0x42, +0x00,0x5F,0x65,0x40,0x00,0x48,0x4C,0x31,0x00,0x58,0x5C,0x40,0x00,0x59,0x5C,0x47, +0x00,0x53,0x56,0x44,0x00,0x4F,0x51,0x45,0x00,0x53,0x55,0x49,0x00,0x41,0x44,0x34, +0x00,0x76,0x7A,0x66,0x00,0x48,0x4D,0x38,0x00,0x73,0x76,0x6B,0x00,0x4B,0x4D,0x46, +0x00,0x41,0x45,0x39,0x00,0x73,0x76,0x6D,0x00,0x7C,0x7D,0x7B,0x00,0xFC,0xFD,0xFB, +0x00,0x3A,0x3D,0x39,0x00,0x6D,0x71,0x6C,0x00,0x56,0x59,0x56,0x00,0x75,0x78,0x75, +0x00,0xCC,0xCD,0xCC,0x00,0x50,0xCD,0x59,0x00,0x32,0xC6,0x3E,0x00,0x81,0xDC,0x89, +0x00,0xA8,0xE8,0xAE,0x00,0xC3,0xEF,0xC7,0x00,0x02,0xC0,0x19,0x00,0xE9,0xF9,0xEB, +0x00,0x02,0xD4,0x2E,0x00,0x6A,0x6D,0x6B,0x00,0x74,0x77,0x75,0x00,0x73,0x76,0x74, +0x00,0x71,0x74,0x72,0x00,0x6C,0x6F,0x6D,0x00,0xFC,0xFF,0xFE,0x00,0x26,0xE2,0xD3, +0x00,0x2E,0xD8,0xC9,0x00,0x34,0xD0,0xC1,0x00,0x57,0xE1,0xD5,0x00,0x88,0xE9,0xE1, +0x00,0xBC,0xF3,0xEE,0x00,0xE0,0xF9,0xF7,0x00,0xF1,0xFD,0xFC,0x00,0x1F,0xE9,0xDA, +0x00,0x63,0x65,0x65,0x00,0x51,0x52,0x52,0x00,0x55,0x56,0x56,0x00,0x4B,0x4D,0x4E, +0x00,0x36,0x38,0x3A,0x00,0x42,0x44,0x47,0x00,0x6F,0x71,0x75,0x00,0x4E,0x4F,0x51, +0x00,0x37,0x39,0x3E,0x00,0x3A,0x3C,0x41,0x00,0x34,0x36,0x3C,0x00,0x3F,0x40,0x44, +0x00,0x46,0x47,0x4B,0x00,0x44,0x45,0x49,0x00,0x5A,0x5B,0x5F,0x00,0x79,0x7A,0x7F, +0x00,0xF9,0xFA,0xFF,0x00,0x69,0x6A,0x70,0x00,0x12,0x25,0xF6,0x00,0x0D,0x1A,0xEB, +0x00,0xEE,0xEF,0xFD,0x00,0x09,0x0F,0xE1,0x00,0x27,0x2A,0xE1,0x00,0x38,0x3A,0xE3, +0x00,0x48,0x4A,0xE4,0x00,0x72,0x73,0xEA,0x00,0x7F,0x80,0xEC,0x00,0xA6,0xA6,0xF1, +0x00,0xBD,0xBD,0xF5,0x00,0xD8,0xD8,0xF9,0x00,0x79,0x79,0x84,0x00,0x75,0x75,0x7E, +0x00,0x97,0x97,0x9E,0x00,0x49,0x49,0x4C,0x00,0x58,0x58,0x59,0x00,0xFA,0xFA,0xFA, +0x00,0xF7,0xF7,0xF7,0x00,0xF3,0xF3,0xF3,0x00,0xEA,0xEA,0xEA,0x00,0xD8,0xD8,0xD8, +0x00,0x98,0x98,0x98,0x00,0x92,0x92,0x92,0x00,0x91,0x91,0x91,0x00,0x76,0x76,0x76, +0x00,0x4D,0x4D,0x4D,0x00,0x4B,0x4B,0x4B,0x00,0x4A,0x4A,0x4A,0x00,0x49,0x49,0x49, +0x00, + +/* + Fonts + */ +0x04, +0x2E,0x04,0x00,0x00,0xA8,0x05,0x00,0x00,0x22,0x07,0x00,0x00,0x9C,0x08,0x00, +0x00, +0x5E, +0x00, +0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0B,0x23,0x15,0x00,0x09, +0x24,0x1F,0x00,0x10,0x25,0x30,0x00,0x0F,0x26,0x40,0x00,0x02,0x27,0x43,0x00,0x06, +0x28,0x4A,0x00,0x07,0x29,0x52,0x00,0x06,0x2A,0x59,0x00,0x0B,0x2B,0x65,0x00,0x05, +0x2C,0x6B,0x00,0x06,0x2D,0x72,0x00,0x02,0x2E,0x75,0x00,0x09,0x2F,0x7F,0x00,0x0B, +0x30,0x8B,0x00,0x05,0x31,0x91,0x00,0x0A,0x32,0x9C,0x00,0x0B,0x33,0xA8,0x00,0x0B, +0x34,0xB4,0x00,0x0C,0x35,0xC1,0x00,0x0B,0x36,0xCD,0x00,0x09,0x37,0xD7,0x00,0x0A, +0x38,0xE2,0x00,0x0B,0x39,0xEE,0x00,0x02,0x3A,0xF1,0x00,0x04,0x3B,0xF6,0x00,0x0B, +0x3C,0x02,0x01,0x0B,0x3D,0x0E,0x01,0x0B,0x3E,0x1A,0x01,0x0A,0x3F,0x25,0x01,0x10, +0x40,0x36,0x01,0x10,0x41,0x47,0x01,0x0A,0x42,0x52,0x01,0x10,0x43,0x63,0x01,0x0D, +0x44,0x71,0x01,0x09,0x45,0x7B,0x01,0x09,0x46,0x85,0x01,0x11,0x47,0x97,0x01,0x0C, +0x48,0xA4,0x01,0x02,0x49,0xA7,0x01,0x09,0x4A,0xB1,0x01,0x0B,0x4B,0xBD,0x01,0x09, +0x4C,0xC7,0x01,0x11,0x4D,0xD9,0x01,0x0D,0x4E,0xE7,0x01,0x11,0x4F,0xF9,0x01,0x0B, +0x50,0x05,0x02,0x11,0x51,0x17,0x02,0x0B,0x52,0x23,0x02,0x0A,0x53,0x2E,0x02,0x09, +0x54,0x38,0x02,0x0B,0x55,0x44,0x02,0x0F,0x56,0x54,0x02,0x15,0x57,0x6A,0x02,0x0D, +0x58,0x78,0x02,0x0E,0x59,0x87,0x02,0x0A,0x5A,0x92,0x02,0x04,0x5B,0x97,0x02,0x09, +0x5C,0xA1,0x02,0x05,0x5D,0xA7,0x02,0x0D,0x5E,0xB5,0x02,0x0B,0x5F,0xC1,0x02,0x06, +0x60,0xC8,0x02,0x0D,0x61,0xD6,0x02,0x0C,0x62,0xE3,0x02,0x0D,0x63,0xF1,0x02,0x0D, +0x64,0xFF,0x02,0x0C,0x65,0x0C,0x03,0x06,0x66,0x13,0x03,0x0C,0x67,0x20,0x03,0x0B, +0x68,0x2C,0x03,0x02,0x69,0x2F,0x03,0x05,0x6A,0x35,0x03,0x0A,0x6B,0x40,0x03,0x02, +0x6C,0x43,0x03,0x12,0x6D,0x56,0x03,0x0A,0x6E,0x61,0x03,0x0C,0x6F,0x6E,0x03,0x0C, +0x70,0x7B,0x03,0x0D,0x71,0x89,0x03,0x05,0x72,0x8F,0x03,0x07,0x73,0x97,0x03,0x07, +0x74,0x9F,0x03,0x0A,0x75,0xAA,0x03,0x0C,0x76,0xB7,0x03,0x12,0x77,0xCA,0x03,0x0B, +0x78,0xD6,0x03,0x0C,0x79,0xE3,0x03,0x09,0x7A,0xED,0x03,0x06,0x7B,0xF4,0x03,0x02, +0x7C,0xF7,0x03,0x06,0x7D,0xFE,0x03,0x0B,0x7E, +0x5E, +0x01, +0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0B,0x23,0x15,0x00,0x09, +0x24,0x1F,0x00,0x10,0x25,0x30,0x00,0x0F,0x26,0x40,0x00,0x02,0x27,0x43,0x00,0x06, +0x28,0x4A,0x00,0x07,0x29,0x52,0x00,0x06,0x2A,0x59,0x00,0x0B,0x2B,0x65,0x00,0x05, +0x2C,0x6B,0x00,0x06,0x2D,0x72,0x00,0x02,0x2E,0x75,0x00,0x09,0x2F,0x7F,0x00,0x0B, +0x30,0x8B,0x00,0x05,0x31,0x91,0x00,0x0A,0x32,0x9C,0x00,0x0B,0x33,0xA8,0x00,0x0B, +0x34,0xB4,0x00,0x0C,0x35,0xC1,0x00,0x0B,0x36,0xCD,0x00,0x09,0x37,0xD7,0x00,0x0A, +0x38,0xE2,0x00,0x0B,0x39,0xEE,0x00,0x02,0x3A,0xF1,0x00,0x04,0x3B,0xF6,0x00,0x0B, +0x3C,0x02,0x01,0x0B,0x3D,0x0E,0x01,0x0B,0x3E,0x1A,0x01,0x0A,0x3F,0x25,0x01,0x10, +0x40,0x36,0x01,0x10,0x41,0x47,0x01,0x0A,0x42,0x52,0x01,0x10,0x43,0x63,0x01,0x0D, +0x44,0x71,0x01,0x09,0x45,0x7B,0x01,0x09,0x46,0x85,0x01,0x11,0x47,0x97,0x01,0x0C, +0x48,0xA4,0x01,0x02,0x49,0xA7,0x01,0x09,0x4A,0xB1,0x01,0x0B,0x4B,0xBD,0x01,0x09, +0x4C,0xC7,0x01,0x11,0x4D,0xD9,0x01,0x0D,0x4E,0xE7,0x01,0x11,0x4F,0xF9,0x01,0x0B, +0x50,0x05,0x02,0x11,0x51,0x17,0x02,0x0B,0x52,0x23,0x02,0x0A,0x53,0x2E,0x02,0x09, +0x54,0x38,0x02,0x0B,0x55,0x44,0x02,0x0F,0x56,0x54,0x02,0x15,0x57,0x6A,0x02,0x0D, +0x58,0x78,0x02,0x0E,0x59,0x87,0x02,0x0A,0x5A,0x92,0x02,0x04,0x5B,0x97,0x02,0x09, +0x5C,0xA1,0x02,0x05,0x5D,0xA7,0x02,0x0D,0x5E,0xB5,0x02,0x0B,0x5F,0xC1,0x02,0x06, +0x60,0xC8,0x02,0x0D,0x61,0xD6,0x02,0x0C,0x62,0xE3,0x02,0x0D,0x63,0xF1,0x02,0x0D, +0x64,0xFF,0x02,0x0C,0x65,0x0C,0x03,0x06,0x66,0x13,0x03,0x0C,0x67,0x20,0x03,0x0B, +0x68,0x2C,0x03,0x02,0x69,0x2F,0x03,0x05,0x6A,0x35,0x03,0x0A,0x6B,0x40,0x03,0x02, +0x6C,0x43,0x03,0x12,0x6D,0x56,0x03,0x0A,0x6E,0x61,0x03,0x0C,0x6F,0x6E,0x03,0x0C, +0x70,0x7B,0x03,0x0D,0x71,0x89,0x03,0x05,0x72,0x8F,0x03,0x07,0x73,0x97,0x03,0x07, +0x74,0x9F,0x03,0x0A,0x75,0xAA,0x03,0x0C,0x76,0xB7,0x03,0x12,0x77,0xCA,0x03,0x0B, +0x78,0xD6,0x03,0x0C,0x79,0xE3,0x03,0x09,0x7A,0xED,0x03,0x06,0x7B,0xF4,0x03,0x02, +0x7C,0xF7,0x03,0x06,0x7D,0xFE,0x03,0x0B,0x7E, +0x5E, +0x02, +0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0C,0x23,0x16,0x00,0x09, +0x24,0x20,0x00,0x11,0x25,0x32,0x00,0x10,0x26,0x43,0x00,0x02,0x27,0x46,0x00,0x07, +0x28,0x4E,0x00,0x07,0x29,0x56,0x00,0x07,0x2A,0x5E,0x00,0x0C,0x2B,0x6B,0x00,0x04, +0x2C,0x70,0x00,0x06,0x2D,0x77,0x00,0x02,0x2E,0x7A,0x00,0x0A,0x2F,0x85,0x00,0x0C, +0x30,0x92,0x00,0x05,0x31,0x98,0x00,0x0B,0x32,0xA4,0x00,0x0B,0x33,0xB0,0x00,0x0C, +0x34,0xBD,0x00,0x0C,0x35,0xCA,0x00,0x0C,0x36,0xD7,0x00,0x0A,0x37,0xE2,0x00,0x0B, +0x38,0xEE,0x00,0x0C,0x39,0xFB,0x00,0x02,0x3A,0xFE,0x00,0x04,0x3B,0x03,0x01,0x0C, +0x3C,0x10,0x01,0x0C,0x3D,0x1D,0x01,0x0C,0x3E,0x2A,0x01,0x0B,0x3F,0x36,0x01,0x11, +0x40,0x48,0x01,0x11,0x41,0x5A,0x01,0x0B,0x42,0x66,0x01,0x11,0x43,0x78,0x01,0x0E, +0x44,0x87,0x01,0x0A,0x45,0x92,0x01,0x09,0x46,0x9C,0x01,0x12,0x47,0xAF,0x01,0x0C, +0x48,0xBC,0x01,0x02,0x49,0xBF,0x01,0x09,0x4A,0xC9,0x01,0x0C,0x4B,0xD6,0x01,0x09, +0x4C,0xE0,0x01,0x12,0x4D,0xF3,0x01,0x0E,0x4E,0x02,0x02,0x12,0x4F,0x15,0x02,0x0B, +0x50,0x21,0x02,0x12,0x51,0x34,0x02,0x0C,0x52,0x41,0x02,0x0B,0x53,0x4D,0x02,0x0A, +0x54,0x58,0x02,0x0C,0x55,0x65,0x02,0x10,0x56,0x76,0x02,0x16,0x57,0x8D,0x02,0x0E, +0x58,0x9C,0x02,0x0E,0x59,0xAB,0x02,0x0B,0x5A,0xB7,0x02,0x05,0x5B,0xBD,0x02,0x0A, +0x5C,0xC8,0x02,0x05,0x5D,0xCE,0x02,0x0E,0x5E,0xDD,0x02,0x0C,0x5F,0xEA,0x02,0x07, +0x60,0xF2,0x02,0x0E,0x61,0x01,0x03,0x0D,0x62,0x0F,0x03,0x0E,0x63,0x1E,0x03,0x0E, +0x64,0x2D,0x03,0x0D,0x65,0x3B,0x03,0x07,0x66,0x43,0x03,0x0D,0x67,0x51,0x03,0x0B, +0x68,0x5D,0x03,0x02,0x69,0x60,0x03,0x05,0x6A,0x66,0x03,0x0B,0x6B,0x72,0x03,0x02, +0x6C,0x75,0x03,0x13,0x6D,0x89,0x03,0x0B,0x6E,0x95,0x03,0x0D,0x6F,0xA3,0x03,0x0D, +0x70,0xB1,0x03,0x0D,0x71,0xBF,0x03,0x06,0x72,0xC6,0x03,0x08,0x73,0xCF,0x03,0x07, +0x74,0xD7,0x03,0x0B,0x75,0xE3,0x03,0x0D,0x76,0xF1,0x03,0x14,0x77,0x06,0x04,0x0B, +0x78,0x12,0x04,0x0D,0x79,0x20,0x04,0x09,0x7A,0x2A,0x04,0x06,0x7B,0x31,0x04,0x02, +0x7C,0x34,0x04,0x06,0x7D,0x3B,0x04,0x0C,0x7E, +0x5E, +0x03, +0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0C,0x23,0x16,0x00,0x09, +0x24,0x20,0x00,0x11,0x25,0x32,0x00,0x10,0x26,0x43,0x00,0x02,0x27,0x46,0x00,0x07, +0x28,0x4E,0x00,0x07,0x29,0x56,0x00,0x07,0x2A,0x5E,0x00,0x0C,0x2B,0x6B,0x00,0x04, +0x2C,0x70,0x00,0x06,0x2D,0x77,0x00,0x02,0x2E,0x7A,0x00,0x0A,0x2F,0x85,0x00,0x0C, +0x30,0x92,0x00,0x05,0x31,0x98,0x00,0x0B,0x32,0xA4,0x00,0x0B,0x33,0xB0,0x00,0x0C, +0x34,0xBD,0x00,0x0C,0x35,0xCA,0x00,0x0C,0x36,0xD7,0x00,0x0A,0x37,0xE2,0x00,0x0B, +0x38,0xEE,0x00,0x0C,0x39,0xFB,0x00,0x02,0x3A,0xFE,0x00,0x04,0x3B,0x03,0x01,0x0C, +0x3C,0x10,0x01,0x0C,0x3D,0x1D,0x01,0x0C,0x3E,0x2A,0x01,0x0B,0x3F,0x36,0x01,0x11, +0x40,0x48,0x01,0x11,0x41,0x5A,0x01,0x0B,0x42,0x66,0x01,0x11,0x43,0x78,0x01,0x0E, +0x44,0x87,0x01,0x0A,0x45,0x92,0x01,0x09,0x46,0x9C,0x01,0x12,0x47,0xAF,0x01,0x0C, +0x48,0xBC,0x01,0x02,0x49,0xBF,0x01,0x09,0x4A,0xC9,0x01,0x0C,0x4B,0xD6,0x01,0x09, +0x4C,0xE0,0x01,0x12,0x4D,0xF3,0x01,0x0E,0x4E,0x02,0x02,0x12,0x4F,0x15,0x02,0x0B, +0x50,0x21,0x02,0x12,0x51,0x34,0x02,0x0C,0x52,0x41,0x02,0x0B,0x53,0x4D,0x02,0x0A, +0x54,0x58,0x02,0x0C,0x55,0x65,0x02,0x10,0x56,0x76,0x02,0x16,0x57,0x8D,0x02,0x0E, +0x58,0x9C,0x02,0x0E,0x59,0xAB,0x02,0x0B,0x5A,0xB7,0x02,0x05,0x5B,0xBD,0x02,0x0A, +0x5C,0xC8,0x02,0x05,0x5D,0xCE,0x02,0x0E,0x5E,0xDD,0x02,0x0C,0x5F,0xEA,0x02,0x07, +0x60,0xF2,0x02,0x0E,0x61,0x01,0x03,0x0D,0x62,0x0F,0x03,0x0E,0x63,0x1E,0x03,0x0E, +0x64,0x2D,0x03,0x0D,0x65,0x3B,0x03,0x07,0x66,0x43,0x03,0x0D,0x67,0x51,0x03,0x0B, +0x68,0x5D,0x03,0x02,0x69,0x60,0x03,0x05,0x6A,0x66,0x03,0x0B,0x6B,0x72,0x03,0x02, +0x6C,0x75,0x03,0x13,0x6D,0x89,0x03,0x0B,0x6E,0x95,0x03,0x0D,0x6F,0xA3,0x03,0x0D, +0x70,0xB1,0x03,0x0D,0x71,0xBF,0x03,0x06,0x72,0xC6,0x03,0x08,0x73,0xCF,0x03,0x07, +0x74,0xD7,0x03,0x0B,0x75,0xE3,0x03,0x0D,0x76,0xF1,0x03,0x14,0x77,0x06,0x04,0x0B, +0x78,0x12,0x04,0x0D,0x79,0x20,0x04,0x09,0x7A,0x2A,0x04,0x06,0x7B,0x31,0x04,0x02, +0x7C,0x34,0x04,0x06,0x7D,0x3B,0x04,0x0C,0x7E, + +/* + Bitmaps + */ +0x04, +0x27,0x0A,0x00,0x00,0x6F,0x73,0x00,0x00,0xB7,0xDC,0x00,0x00,0xCB,0x50,0x01, +0x00, +0x0B,0x04,0x00,0x00, +0x1A,0x00,0x00,0x00, +0x00, +0x00, +0x3A,0x69,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0xDF,0x56,0xF7,0x56,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0x00,0x00, +0x00,0x53,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF7,0x00,0x55,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF3, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0x04,0xDF,0xD6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x54,0xDF,0xDA,0x04,0xDD,0xF7,0x00,0x00,0xD8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD0,0xF6,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD7,0x53,0x00,0xD6,0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x00,0x00,0x04,0x57,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x56, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD0,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0xC6,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, +0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0xDC, +0x04,0x04,0x04,0x04,0xE1,0xF3,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0x53,0xD5,0x04,0x04,0x5A,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, +0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0xD0,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x53,0x00,0x58,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xDC, +0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD2,0x04, +0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, +0x17,0x04,0x04,0xDD,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF4, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x5B,0x04,0x04,0x04,0xDE,0xF3,0x00, +0x00,0xF3,0xDE,0x04,0x04,0x04,0x04,0x57,0x53,0x00,0x00,0x53,0x5E,0x04,0x04,0x04, +0x04,0xD5,0xB3,0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0xD8,0x04,0x04,0x04, +0x04,0x60,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xDE,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xDC,0x00,0xDF,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDA,0xFA,0xB3,0x00,0x54,0x00,0xF5,0xD7,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x04,0x04,0xDB,0x55,0x54,0x54,0x00,0xF6,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00,0x54, +0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00,0x54,0x54,0xF7,0xD9,0x04, +0x04,0x04,0x04,0x09,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E,0xB3, +0x00,0x00,0x53,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0xF4, +0x00,0x00,0x54,0x54,0x55,0xD7,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x5E,0x04,0x00,0x00,0x00,0x00, +0x54,0x00,0xB3,0x56,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0xF6,0x54,0x00,0x54, +0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x54,0x00,0x09,0xF6, +0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xF7, +0x53,0x00,0x54,0x00,0x54,0xF6,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDE,0xF3,0x00, +0x54,0x53,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00, +0xF7,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0xDC,0x55,0x54,0x00,0x54,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xB8, +0xB3,0x00,0x54,0x00,0x53,0xF7,0xDB,0xDA,0x56,0x54,0x54,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xD9,0x00,0x00,0xDB,0x04,0x04,0x04,0xD0,0xF3,0x00,0x54,0x53,0xB8, +0xD8,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, +0xF3,0x00,0x54,0x54,0xF7,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x54,0xB8,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF6,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0xF4,0x04,0x04,0xDA,0x53,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x58,0xB3,0x00,0x54,0x00,0xF6,0xDC,0x04,0x00,0xF6,0x04,0x00,0xF6,0xDA,0x57,0x53, +0x00,0x00,0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xB3,0x00,0x54,0x00, +0xF6,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0xF3,0x00,0x54,0x00,0xF6,0xDC, +0x04,0x00,0xF6,0x04,0x04,0x04,0xDA,0x56,0x53,0x00,0x00,0xC6,0x56,0xD8,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0xC6,0x00,0x00,0x53, +0x58,0xDA,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xF1,0x00,0x54,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xD8,0x56,0x53,0x00,0x54,0x54,0xF7,0xD9, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x56,0xC6,0x00,0x00,0x53,0xB8,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0x59,0xB3,0x00,0x54,0x00,0xF5,0xD2,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x57,0xC6,0x54,0x00,0x57,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0xDA,0xB8,0x54,0x00,0x00,0xB3,0xD2,0xF6,0x00,0x04,0x04, +0x04, +0x04,0x04,0xDD,0x00,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x55,0x54,0xB8,0x04,0x04,0x04,0x04,0x53,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xDF,0x04,0x04,0x04,0x04,0xD5,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x59, +0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF7,0x04,0x04,0x04, +0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0x00,0x00,0x00,0x59,0x04,0x04, +0x04,0x04,0x04,0x04,0xF5,0xC6,0x04,0x04,0xE1,0x00,0x00,0xF7,0xF7,0x00,0x00,0xD6, +0x04,0x04,0xF4,0x00,0x53,0xF7,0xF7,0x00,0x00,0xF7,0x04,0x04,0xDD,0x00,0x00,0xD6, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, +0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF6,0x00,0x54,0x55,0xB8,0xF6,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0xC6,0x00,0x00,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x04,0x04,0xF1,0x00, +0x00,0xF5,0xB8,0xF6,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x5A,0x00,0x00,0x55,0xB8,0xF3,0x00,0xC6,0xD9, +0x04,0x04,0x04,0x59,0x00,0x00,0x55,0xB8,0xF5,0x00,0x00,0xDB,0x04,0x04,0x04,0x5A, +0x54,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xC6,0xF7,0xF7,0x53,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0xDA,0x53,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x57,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, +0xF7,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x53,0x00,0x00,0xF4,0xF7,0xB8,0x55, +0x00,0x00,0x55,0xD4,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x53,0x54,0xDA,0x04,0x00,0x53,0x56,0x56,0xB8,0x55,0x53,0x00, +0x00,0xDB,0x04,0x04,0x04,0xD8,0xF5,0x00,0x00,0xF4,0xF7,0xB8,0x55,0x54,0x00,0x54, +0xD2,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0xF7,0xF4,0x00,0x00,0xB3,0xDB,0x04, +0x04,0x04,0x00,0x53,0x56,0x56,0x56,0x56,0x56,0x56,0xDF,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xB3,0x55,0xB8,0xF7, +0xF4,0x00,0x00,0xF3,0xDB,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xDE,0x00,0x00,0x55,0xB8,0xB3,0x54,0xF6, +0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0xF3,0x04,0x04,0x00,0xB3, +0x56,0x56,0x56,0x56,0x56,0x56,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9,0x00, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDB,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF3,0xF7, +0xB8,0x55,0x54,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x53,0x55,0xB8,0x55, +0x53,0x00,0x00,0x00,0x00,0xF3,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0xD6,0x04,0x04,0x04,0x5D,0x54,0x00,0x55,0xB8,0xF4,0x54,0xB3,0xD8,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x55,0xB8,0xF5, +0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xD3,0x04,0x04,0x04, +0x04,0x04,0xF4,0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xDB,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0xC6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xF7,0x56,0x56,0x56,0x56,0x56, +0x56,0x56,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0xD6,0x04,0x04,0x04,0xDF,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x53,0x00,0x54,0xF7,0xB8, +0xF6,0x00,0x00,0xEF,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0xB3,0xF7,0xF7,0xF3,0x00, +0x54,0xDC,0x04,0x04,0x04,0xD9,0xB3,0x00,0x53,0xF7,0xB8,0xF5,0x00,0x00,0x56,0x04, +0x04,0x04,0x04,0xD9,0xB3,0x00,0x54,0x55,0xB8,0xF6,0x00,0x00,0xD6,0x00,0xF6,0x04, +0x04,0xDB,0xC6,0x00,0xB3,0xF7,0xF7,0xF3,0x00,0x53,0xDB,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xDD,0x54,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0xF6,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x54,0x00,0xDD,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x04,0xDD,0x54,0x00,0xB3,0xF7,0xB8,0xF4,0x00,0x00,0xD2,0x04,0x04,0x00, +0x00,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x54,0xDD,0x04,0x04,0x04,0xD9,0xB3,0x00, +0x53,0xF7,0xB8,0xF6,0x00,0x00,0x5D,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x59,0x00,0xB3,0xB8,0xF3,0x00,0x57,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0xDA, +0xB3,0x00,0xB3,0xF7,0xF7,0x54,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x53,0x04, +0x04,0x04,0xD5,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD8,0x04, +0x04,0x04,0xF3,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xC6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x00,0xB8,0x56,0x56,0x56,0x56,0x56,0x56,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x54,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04, +0x04,0x04,0xDA,0x54,0x00,0xDF,0xDA,0xDD,0xF3,0x00,0xD6,0x04,0x04,0x04,0x04,0x04, +0xD0,0x00,0xE1,0x04,0x53,0x00,0xD9,0x04,0x04,0xD9,0x54,0x53,0x04,0x57,0x00,0xF7, +0x04,0x04,0x04,0xD8,0xF3,0x00,0x17,0xD3,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x04, +0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x57,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xF7,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF5,0xDA, +0x04,0x04,0x04,0xD5,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDB,0x54, +0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0xD2,0x04,0x04,0x04, +0xDD,0x00,0x54,0xDA,0x04,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x00,0xF3,0x17, +0x04,0x04,0xDE,0x00,0xF3,0xD8,0x04,0x04,0x04,0x17,0x00,0xF3,0x04,0x04,0xF2,0x00, +0x53,0xD9,0x04,0x04,0x04,0xD0,0x54,0xB3,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x60,0x00,0x55,0x04,0x04,0x04,0x04,0x55,0x00,0x5C,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x54,0xF7,0x04,0x04,0xD8, +0x55,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xF5,0x00,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xF6,0xD7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0xF1,0x00,0x00,0x00,0x00,0xD9,0x04,0x04,0xD8,0x00,0x00,0x00,0xD6, +0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, +0x00,0xB8,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x17,0x00,0x55,0x04,0x04, +0xD9,0x54,0x00,0xF6,0xD9,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDE,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0x00,0xDD,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0x53,0x00,0xF4,0xDC,0x04,0x04,0x04,0x04,0x04,0xD8,0xF7,0x00, +0x00,0xD5,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0xF3,0x00,0xD5,0x04,0x04,0x04,0xF5,0x54,0xDC,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0xDB,0x00,0x00,0xD9,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0xD9,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0x00,0xF6,0xDA,0x04,0xD4,0xF4,0x00,0xF5,0xDB,0x04,0x04,0x04,0x04,0x04,0xD6, +0x54,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0x00, +0xF3,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x58,0x00,0xF7,0x04,0x04,0x04, +0xD9,0x00,0x00,0xD5,0x04,0x04,0x04,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF4,0xDA,0x04,0x04,0x04,0xD2,0x00,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, +0xF4,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04, +0xD9,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x59,0x04,0x04,0x04,0x04,0xD8,0xF5,0x00, +0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xD8,0x04, +0xDA,0x53,0x00,0x5D,0x04,0x04,0x04,0x04,0xDB,0xB3,0x00,0x21,0x04,0x04,0xDA,0x53, +0x00,0x5A,0x04,0x04,0x04,0x04,0xD8,0xF4,0x00,0x00,0xF6,0xDA,0xDA,0xC6,0x00,0xD6, +0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0xD4,0x54,0x00,0xE1,0x04,0x04,0x04,0x04,0xD6,0x00,0x00,0x00,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF3,0x04,0x04,0x04,0xF3,0x00,0xE1,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD4,0x54, +0x00,0xE1,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xD9,0x04,0x00,0x00,0x00,0xE1,0x04, +0x04,0x04,0x04,0xD0,0x00,0x54,0xD8,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04, +0xD8,0xF5,0x00,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0x09,0xDA,0x04, +0x04, +0x54,0x54,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04, +0x04,0x04,0x04,0xF5,0x00,0x00,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x54,0xB3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xDB,0x04,0x04,0x57,0x00, +0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF6,0x04,0x04,0x59,0x54,0x58, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xB8,0x00,0x04,0x04,0xDA,0x55,0x00,0x04,0x04,0x04,0x04,0xFA,0x00, +0xFA,0x04,0x04,0x04,0xD8,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04, +0xD8,0x00,0x00,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF1,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0x5A,0x00,0x17,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD9,0xC6,0x00,0xE1,0x04, +0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0x60, +0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xF3,0x00, +0xD8,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04, +0x04,0x04,0xB8,0x00,0xD0,0x04,0x04,0x04,0xB8,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, +0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0xDA,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04, +0x58,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xEF,0xF3,0x00,0x00,0xF6,0xD3,0x04,0x04,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0xD3,0xF6,0x00,0x00,0xF3,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, +0x00,0x00,0x00,0x00,0x00,0xF4,0xDF,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDB,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0xF4,0x00,0x56,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x53,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xB3,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x54,0xDE,0x54,0xB8,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x00,0xF6,0x04, +0xDA,0x55,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xC6,0x00,0xD7, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0x00,0xF3,0xD8,0x04,0x04,0x04,0x04,0xDA,0xD0,0x00,0x00,0x00,0x54,0xB8,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0xD3,0x00,0x53,0xDA,0x04,0x04,0x04,0x5A,0x00,0x57,0x04, +0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0xF3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD0,0x04,0x04,0x04,0x04, +0x04,0x04,0xF3,0x54,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD6,0x00,0x00,0x00,0xF4,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x17,0x04,0x04,0x04,0x60,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x56,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00, +0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x54,0xB8,0x04,0x57,0x00,0x5A,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0xF6,0x55,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x53,0x00,0xF6,0x04,0x56,0x00,0xD6,0x04,0x04,0x04,0x04,0x04, +0x04,0x17,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x00,0x17,0x04, +0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00, +0x58,0xDA,0xF7,0x00,0x56,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xB8,0x00,0xDF,0x04,0x04,0x04, +0x04,0x04,0x04,0xE1,0x00,0xF7,0x04,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x54,0xB8,0x04,0x57,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00, +0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x16,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0xD8, +0x00,0x00,0x04,0x04,0x04,0x04,0x5C,0x00,0xDE,0xB8,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF4,0x54,0xDB,0x00,0x57,0x04,0x04,0xB3,0xB3,0xD7,0x00,0x5A,0x04, +0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD6,0xDB,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x56,0x00,0xDF,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF2, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xFB,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0xF7, +0x54,0x59,0x17,0x17,0x55,0x00,0xFA,0x17,0x17,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04, +0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xDC,0x54,0x54,0xDA,0x04, +0x04,0xDA,0x54,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, +0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xEF,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04, +0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF7,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD9,0x53,0x00,0xEF,0x04,0x04,0x04,0x04, +0x04,0x56,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0xB3,0x00,0xD0, +0xDD,0xDD,0xDD,0xDD,0xDD,0x00,0xF5,0xDD,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0xDC,0x54,0xB8,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x54, +0xB8,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0xD9,0xD6,0xD0,0x00,0x54,0xD8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0x54,0x00, +0x00,0xF7,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x54,0x54,0x5B,0xD4,0x04,0x04,0x04, +0x04,0x04,0x04,0xF6,0x5D,0x04,0x04,0x04,0x04,0xDA,0x58,0x00,0x00,0x00,0x00,0xDE, +0xDA,0xF7,0x00,0x00,0x04,0xDF,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD0,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDC,0x5D,0xDD,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x5E,0x00,0x5E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xDA,0x04,0x04,0x04, +0x04,0x04,0xD8,0x00,0x55,0x04,0x00,0xB3,0x04,0x04,0x04,0xF7,0x00,0x56,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x50,0x00,0x58,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x53,0xDA,0x00,0xF6,0x04,0xD7,0x00,0xF4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xB3,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0xD8,0x04,0x04, +0x04,0x04,0xD9,0x55,0x00,0x00,0xD2,0xD8,0xC6,0x00,0xD3,0x04,0x00,0xF6,0x04,0x04, +0xD4,0x54,0x00,0xD5,0x04,0x04,0x04,0x04,0xDF,0xF6,0xDD,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xB3,0x04, +0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0xDD,0x54,0xB8, +0x04,0xF7,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD8,0xF6, +0x00,0x04,0x04,0x04,0x04,0xB8,0x00,0xDB,0x55,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0x54,0x00,0xD9,0x04,0xD9,0x00,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x54,0xB3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x56,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x58,0x00,0x60,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x5E,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0xF6,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xD5, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF7,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x54,0x54,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04, +0x53, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04, +0x04,0x04,0xB3,0x53,0x04,0xDB,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF7,0x04,0xB3,0xF3,0x04,0xD9,0x00,0x57,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0x54,0x00,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53, +0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x54,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, +0x04,0x04,0x04,0xD7,0xD9,0x04,0x04,0x04,0x04,0xDA,0xE1,0xD7,0x04,0x04,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xD9,0xDD,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x00,0xB3,0x5A,0x59,0x53,0x00,0x17, +0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0xF3,0x00, +0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xD8,0x53,0x00,0x17,0x04,0x04,0x04,0x04,0xDC,0xDF,0xDA, +0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0xDC,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0xD8,0xDF,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00, +0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04, +0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF5,0x00,0x04,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0x56,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04, +0x04,0x04,0x04,0x04,0xD8,0xB8,0x54,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xC6, +0xE0,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDB,0x00,0xF5,0x04,0x04,0x04,0xF4,0x00, +0xDA,0x04,0xD0,0x00,0xF7,0x04,0x04,0x04,0x04,0x56,0x00,0x5B,0x17,0x17,0x17,0x17, +0x17,0x17,0x55,0x00,0xDE,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xB3,0x00,0x04,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD5,0x04,0x04,0x04,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x5E,0x00,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0x00,0xF7,0x04,0xDF,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF3,0x00,0xD8, +0x04,0x5B,0x54,0x17,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0xF4,0x54,0xD7,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF7,0x5C,0x5E,0x56,0xF5,0x00,0x00, +0xF6,0xD9,0x04,0x04,0xDE,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x55,0x00,0x5E,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0xF7,0x00,0xDB,0x04,0xDD,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB3,0x04,0x5C,0x54,0xDE,0x04,0x04, +0x04,0xB3,0x54,0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00, +0xF6,0xDA,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00, +0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x58,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04, +0x00,0xB3,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00, +0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x56,0x00,0x00,0xFA,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xD7,0x00,0x58, +0x04,0x04,0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0xC6,0xDD,0x04,0x57,0x00, +0xD9,0x59,0x00,0xDB,0x04,0x57,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xB8,0x04,0xD7,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xF1,0xF4, +0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x55,0x00,0xF7,0xDC,0x04,0xB3, +0xF6,0x04,0x04,0x04,0x5D,0x54,0x00,0x00,0xF7,0xDA,0x04,0x04,0x87,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0xDD,0xDD,0x00,0x55,0xDD,0xDD,0xDC,0x00,0xF7,0xDC, +0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xC6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0xD9,0xDF,0x54,0x00,0x00,0x54,0x50,0x04,0x04,0x55,0x00,0xFA, +0xDA,0x04,0x04,0x5E,0x00,0x54,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0xD8,0xB3,0xC6,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x50,0x00,0x57,0x04,0x04,0xB8,0x54,0xFA,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x00,0xF4, +0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8, +0x04,0x04,0x04,0x04,0xC6,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x53,0x04,0x04, +0xF4,0x00,0xF6,0xDE,0xF1,0x5C,0x54,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x57,0x04,0x04, +0x04,0x04,0x00,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0xDF,0x04,0x04,0xF6, +0x00,0xD9,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x00, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, +0x00,0x57,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xDC,0x00,0x55,0x04,0x04,0xDA,0x00,0xF3, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x5D,0x00,0xB8,0x04, +0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF2,0x00,0x56,0x04,0x00,0xF3,0x17,0x17,0x17,0x50,0xD0,0xD9,0x04,0x04, +0x04,0x04,0x53,0x00,0xB3,0x00,0x00,0x00,0x00,0x54,0x55,0xD7,0x04,0x04,0x04,0x04, +0x04,0x54,0x54,0x04,0x00,0xF6,0xDA,0xDF,0x00,0x54,0x00,0xF3,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0xD4,0x00,0xF3,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD5,0x00,0xB8,0x04,0xDB,0x00,0xB8,0x04,0x04,0xD8,0x00,0x55,0x04, +0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x55,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0xD2,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF2,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0x00,0xF6,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF6,0xDC,0x00,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00, +0xF3,0xD0,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x55,0x00,0xD8,0x04,0x04,0xD0,0x00, +0x58,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xD5,0x00,0x00,0x00,0x53,0x04, +0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDB,0x04,0x04,0xB3,0x00,0xD4,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0x04,0x04,0x04,0xF7,0x00,0x5D,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0xD4,0x00,0x00,0xF7,0x04,0xD6,0x00,0xF7,0x58,0x54, +0x00,0x00,0xB3,0x00,0x00,0xFA,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD0,0x53,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, +0xB8,0x04,0x04,0xD8,0xD9,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0x55,0xD8,0x59,0x00, +0xC6,0xD9,0x04,0xF3,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xF5,0x00,0xDD,0xDD,0xDD,0xDD,0xDD,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0xB3,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xD9, +0x04,0x04,0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x04,0xF5,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0x58,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDA,0x04,0x04,0x04, +0x59,0x00,0x56,0x04,0x04,0x04,0x04,0x57,0x54,0xB8,0x04,0x5D,0x00,0xF7,0x04,0x04, +0x04,0x04,0xD9,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B, +0x54,0x00,0x00,0x55,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x00,0x00, +0x53,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xC6,0x5E,0x04,0x04,0x04,0x00,0xF5, +0x04,0x54,0xB3,0x04,0x04,0x04,0x04,0xB3,0xF6,0x04,0x04,0xDE,0x00,0x59,0x04,0x04, +0x04,0x04,0xF6,0x00,0xD3,0xDD,0xDD,0xDD,0xDD,0x5C,0x00,0x5A,0x04,0x04,0x04,0x04, +0x00,0xF3,0x17,0x60,0x5D,0x57,0xF6,0x00,0x53,0xD9,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF3,0x17,0x17,0x17,0x17, +0x17,0x17,0xD5,0x04,0x00,0xF3,0x17,0x17,0x17,0x17,0x17,0xE1,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xD5,0x04, +0x00,0xF3,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xF2, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0xF7,0x00,0xF1,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0x00,0x53,0xDA,0x04,0x04,0x00,0xF6,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, +0x55,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0x04,0x04,0x00,0xF5, +0x04,0x04,0xDB,0xDB,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x00,0xF6,0x04,0xD2,0xEF,0x5D,0xF7,0x00,0xC6,0x56,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x57,0x53,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xFA,0x00,0xDF,0x04,0x04,0x04,0x5E,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x58, +0x00,0xF2,0x04,0x04,0x54,0xB3,0x04,0x04,0xDF,0x00,0xDF,0x04,0x04,0xF3,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x54,0xD8,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xE1,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD9,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF6,0x04,0x00, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD6,0x00,0xF6,0x04,0x53,0x00,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, +0xDD,0xDD,0x00,0xC6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB3,0xC6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0x04,0xDB,0x00,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x5E,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0xD8,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x00, +0xF4, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00, +0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xDF,0x00,0xB3,0xD7,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0x04,0xE0,0x53,0x04,0x04,0x04, +0x04,0xD7,0x00,0x58,0x04,0x04,0x04,0x53,0x00,0x00,0x56,0x04,0x04,0x04,0xF4,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0xF4,0x04,0x04,0x04,0x60,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0xC6,0x54,0xD8,0x04,0x04,0x04,0xD2,0xF3,0x00,0xF2,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x55,0x00,0x55,0xD3,0x04,0x04,0x58,0x00,0x00,0xC6,0x56,0xD9,0x04,0xD8, +0xB3,0xF5,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x55,0x54,0x04,0x04,0x04,0xF4,0xB3,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0x54,0x00, +0x00,0xF7,0x04,0x04,0x04,0x04,0xDB,0xDF,0xD0,0xDA,0x04,0xF6,0x00,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0xD7, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xE1,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, +0xDA,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x53,0x00,0xDD, +0x04,0x04,0x04,0x04,0x04,0xD3,0xFA,0xF7,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0xD2, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04, +0x04,0xD2,0x00,0xC6,0x04,0x04,0xD2,0x00,0xF4,0xDA,0x04,0x04,0x04,0xDD,0x00,0x54, +0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0x00,0x5D,0x04,0x04,0x04,0x04,0xF6,0x00,0xF4, +0x5A,0x5B,0xF5,0x00,0xF5,0xDA,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x5C, +0x00,0xD0,0x04,0x54,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0xF3,0x00, +0x00,0xF5,0xD2,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00,0x00,0xF3,0xEF,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0x5D,0x04,0x04,0x00,0xF5,0x04,0xF5,0x00,0xD9, +0x04,0x04,0x04,0xB8,0x00,0xDA,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0xD7,0x00, +0x58,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xDD,0x00,0x00,0xD8,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDA, +0x00,0xF4,0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0xF4,0x54,0xD7,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0x00,0xF5, +0xDD,0xDD,0xDD,0xD3,0xDF,0xF6,0x54,0x54,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xD8,0xB3,0x00,0xDD,0x04,0x04,0x04,0xDE,0xF3,0x54,0x00,0x54,0x57, +0xDA,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, +0x04,0x04,0xDA,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04, +0xF7,0x00,0xD8,0x04,0x55,0x54,0xD8,0x04,0x04,0x56,0x00,0xDC,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF4,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0xF6,0x00,0xDB,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0xE1,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD5, +0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00, +0xD9,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5C, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00,0x00,0x60,0x04,0x04, +0x04,0x04,0x04,0x04,0xEF,0x54,0xB8,0x04,0x56,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0xF3,0xF5,0x04,0x04,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x53,0x00,0xF6,0x04,0xB8,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF7, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0xEF,0x00,0x00,0x04,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0x60, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x55,0x00, +0xFA,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0xE1, +0x00, +0x54,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x00,0x00,0xDA,0x04,0x04, +0x04,0x04,0xD4,0x00,0x53,0x04,0xB8,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, +0x54,0xB8,0x04,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x54,0xB8,0x04, +0x56,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00,0x54, +0x04,0x04,0x04,0xDA,0x55,0x00,0xD9,0x04,0x04,0xDB,0xD9,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04, +0x58,0x00,0xD2,0x04,0x04,0x04,0x04,0x57,0x00,0xDE,0x04,0x04,0x04,0xF7,0x00,0xD8, +0x04,0x04,0x04,0xB8,0x00,0x00,0xDD,0x04,0x04,0x04,0xDF,0x54,0xE1,0x04,0x04,0x04, +0x04,0x57,0x00,0x5C,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xDF,0x04, +0x04,0x04,0x04,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x55,0x04, +0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, +0x04,0x04,0x04,0x04,0x04,0xD8,0xD9,0x04,0x04,0x04,0x04,0x04,0xD8,0xDA,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xD0,0x55,0x00,0xD0,0xD0, +0xD0,0xF5,0x00,0xD0,0xD0,0x04,0x04,0xDB,0x54,0x00,0x00,0x55,0xDC,0x04,0x04,0x04, +0x04,0x55,0x00,0x00,0x00,0x00,0xE1,0xD2,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xF6,0xD8,0x04,0x04,0xF6,0x00,0xDC,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xDF,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD6,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0x00,0x53,0x57,0x5D,0x55,0x54,0x00,0xDC, +0x04,0x04,0x04,0xF6,0x00,0xC6,0x57,0xFA,0xF7,0x00,0x00,0xD2,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB8,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00,0x00,0xF3, +0xE1,0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0x04,0x04, +0xE1,0xF3,0x00,0x00,0xF5,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0x53,0x00,0xDB,0x04,0x54,0x53,0x04,0xD6,0x00,0xF7,0x04,0x04,0x04,0xDF, +0x00,0x17,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04, +0xD5,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0xDD,0xDD,0xD7,0x60,0xB3,0x00, +0xDF,0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, +0x00,0x04,0x00,0xF5,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xD8,0x04,0x00,0xF5,0xDD,0xDD, +0xDD,0xDD,0xDD,0xDB,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, +0xDD,0xDD,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x0A,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x57,0x00,0xD6,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x5D,0x00, +0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xB8,0x54,0x60,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xDE,0x00,0x56,0x04,0x04,0xE1,0x00,0x00,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF1,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xD5,0x04,0x04,0x04,0x04,0xDA,0x00,0xF5,0x04,0x04,0x04,0x0A,0x00,0xD6,0x04, +0x54,0xB3,0x04,0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60, +0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04, +0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xDA, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD0,0x00,0x56,0x04,0x04,0x04, +0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x5C,0x04,0x04,0x04, +0x04,0xD8,0xF5,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0xD0, +0x00,0x54,0xD8,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04,0xD9,0xB3,0x00,0x5E, +0x04,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04,0xD9,0xF3,0x00,0x00,0xF6,0x04, +0xD8,0x54,0x00,0xD7,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xD9,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0xD8,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xE1,0x54,0x00,0x00, +0x04,0x00,0x00,0xF5,0xD4,0x04,0x04,0x04,0xD5,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDA,0xC6,0x00,0xDC,0x04,0x04, +0x04, +0x00,0xF6,0x04,0x00,0x00,0x56,0x04,0x04,0x04,0xD8,0x53,0x00,0x00,0x57,0x04, +0x04,0x04,0xDA,0xB3,0x00,0xDD,0x04,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x55,0x00, +0xB8,0x04,0xD8,0x54,0x00,0xD0,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD8,0x04,0x00, +0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xD8,0x04,0xDA,0x54,0x00,0x60, +0x04,0x04,0x04,0x04,0xD8,0xF5,0x54,0x00,0xF6,0x04,0x00,0x00,0x58,0x04,0x04,0x04, +0xF7,0x00,0xDC,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xC6,0x53,0x04,0x04, +0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xDC, +0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDC,0x00,0xF4,0x04, +0x04,0x56,0x00,0x5E,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x04,0x04,0x04,0x04,0xB8, +0x54,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD0,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0xF6,0x00,0x56,0xDA,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xF6,0xD7, +0xD6,0x54,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1, +0x00,0xF3,0xDB,0xF7,0x00,0x54,0xD8,0x04,0xD9,0x17,0xDC,0x04,0x04,0x04,0x04,0x04, +0xDE,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x53,0x04,0x04,0x04, +0xF7,0xDC,0xDB,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x5A,0xDE, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0xD9,0xDC,0x5E, +0x54,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD8,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x00,0x54,0xB3,0x00,0x00,0x00,0xF5,0xD5,0x04,0x04,0x04,0x04,0xD9, +0x00,0x00,0x00,0x00,0x00,0xF3,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58, +0x00,0xDE,0x04,0x04,0x04,0x58,0x00,0xF6,0xDE,0xD7,0xF6,0x00,0x57,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04, +0x54,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x00,0x00,0x53,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF1,0xD9,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0x56,0x04,0x55,0x00,0xD5,0x04,0xF3,0x00,0xDE,0x04,0x04,0x5C,0x00,0xF5,0x04,0xDE, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0xD6,0x04,0x04,0xF7,0x00,0xD5,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xDA,0x54,0x53,0x04,0x04,0xF5, +0x54,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF4,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0xB8,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0xE0,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0x00,0x57,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xDB,0x00,0x53,0xDA,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0xD3,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF7,0xDA,0xF3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0xF5,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA, +0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x55,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04, +0x04,0x04,0xD0,0x00,0x5B,0x04,0x04,0x04,0xD8,0x00,0xF7,0xDB,0x00,0xB8,0x04,0x04, +0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0xD9,0x00,0x00, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDB,0x04,0x04,0x56,0x00,0xE1, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xF7,0x04,0x04,0x04,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0xDA,0x00,0xB3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6,0x00,0x00,0xDF, +0x00,0xF6,0xDA,0x00,0x00,0x00,0x09,0xF3,0xF7,0xF7,0xF3,0x54,0x54,0xDD,0x04,0x04, +0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0xD9, +0xB3,0x54,0x53,0xF7,0xB8,0xF6,0x00,0x00,0x59,0x00,0xF6,0xDA,0x04,0xDD,0x54,0x54, +0xF4,0xF7,0xF7,0xF3,0x54,0x54,0xD7,0x04,0x04,0x56,0x56,0x00,0x53,0x56,0x56,0x04, +0x04,0xF1,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0xF5,0xF6,0x00,0x04,0x00,0x00,0x00, +0x54,0xF7,0xB8,0xF6,0x00,0x00,0xEF,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0xDC,0x00,0xC6,0xD4,0x04,0x04,0x00,0xF6,0xDA, +0x00,0x00,0x00,0xF3,0xF7,0x55,0x00,0x00,0xD6,0xF6,0x00,0xF3,0xB8,0xF7,0x54,0x00, +0x56,0x04,0x04,0x00,0x00,0x00,0x53,0xF7,0xF7,0x53,0x54,0xB3,0xD8,0x04,0x04,0xDD, +0x54,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x00,0xD3,0x04,0x04,0x00,0x00,0x00,0x09,0xF4, +0xF7,0xF7,0xB3,0x54,0x54,0xDD,0x04,0x04,0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6, +0x00,0x00,0x5C,0x00,0xF6,0xDA,0x00,0x00,0x09,0xF4,0x58,0x04,0xD3,0x00,0x54,0xB8, +0xB3,0x00,0xD0,0x04,0x56,0x56,0x53,0x00,0x56,0x56,0x56,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDE,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x55,0x00,0xD9,0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xB8,0x50,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0xB3,0x00, +0xDB,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04, +0x56,0x56,0x56,0x56,0x56,0xB8,0x54,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, +0xF6,0x04,0xD8,0xD8,0xD9,0x00,0x58,0xD8,0xD8,0xD7,0x00,0x60,0xD8,0x04,0x04,0x00, +0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x53,0x04,0x04,0x04,0xDE,0x00,0x00, +0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0xD8,0x04,0x04, +0x5B,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x04,0xDA,0xF6,0x00,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x54,0xB8,0x04, +0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4, +0x54,0x04,0xD8,0xDB,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDB, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF4,0x04,0x04, +0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0x00,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x56,0xD8,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0xF1,0x00, +0xF5,0x04,0xDB,0x54,0x54,0xB8,0x5A,0x00,0x53,0x00,0xD8,0xF6,0x00,0xD7,0x04,0x04, +0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xE1,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xDF,0xDB,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF7,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4, +0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xE1,0x09,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0xF4,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x5E,0x00, +0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0xE1,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x04,0x00,0xF5,0x04, +0x04,0x04,0x04,0x04,0xDE,0xDD,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0x00, +0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0xF7,0x00, +0xDB,0x04,0x04,0x04,0x04,0xB3,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xF6,0x00, +0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD6,0x04,0xD6,0x00,0x55,0x04,0x04,0x04, +0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0x04,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDC,0x04,0x04,0x54,0x53,0x04,0x04,0x04, +0x04,0x04,0x5D,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0x54,0xB8,0x04, +0x04,0x04,0x04,0x59,0x00,0xDF,0x04,0xFA,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x58,0xB3,0x00,0x00,0x00,0xF6,0xDD,0x04,0x00,0xF6,0x04,0x00, +0xF6,0x04,0x57,0x53,0x00,0x00,0xC6,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0xDA,0x58, +0xB3,0x00,0x00,0x00,0xF6,0xF1,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0xB3,0x00, +0x00,0x00,0xF6,0xD7,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x00,0xC6, +0xB8,0xD8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD8,0xF7, +0x54,0x00,0x00,0xB3,0x5C,0x04,0xF6,0x00,0x04,0x00,0xF6,0xD7,0xF5,0x00,0x00,0x00, +0xF5, +0xD3,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xE1,0xB3, +0x00,0x00,0xF3,0xDE,0x04,0x04,0x57,0x54,0x00,0x00,0xB3,0x17,0x04,0x04,0x04,0x00, +0xF6,0xDD,0xF5,0x00,0x00,0x53,0xB8,0xDA,0x04,0x04,0x04,0x04,0xD8,0x56,0x53,0x00, +0x00,0x54,0xF7,0xD8,0x04,0x04,0x04,0x00,0xF6,0x04,0x57,0x53,0x00,0x00,0xC6,0xB8, +0xD8,0x04,0x04,0x04,0x04,0x04,0xDA,0x59,0xB3,0x00,0x00,0x00,0xF5,0xD2,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x57,0x00,0x00,0x04,0x04,0xD6,0xC6,0x00,0x54,0x5C,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0xF6,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x56,0x04, +0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3, +0x00,0x59,0x04,0xB8,0x00,0x17,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3,0x04,0x04,0xF6, +0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD9,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04, +0x04,0x54,0x55,0x04,0x04,0x04,0x00,0x56,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x16,0xF7,0x04,0x00,0xF5,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x00,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD7,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0xDE,0x00,0xF4,0x04,0x04,0x04,0x17,0x59,0x00,0x09,0x57,0x17,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, +0x00,0xDF,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x59,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54, +0x04,0x04,0x5E,0x00,0xD3,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0x00,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDD,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD5,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xB3,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0xF7,0x00,0x58,0x04,0xDB, +0xF4,0x00,0x00,0xF3,0xD8,0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xB8,0x00,0xDC,0x5A,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0xF4,0x00,0x58,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDB,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xE1,0x00,0x53,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x54,0x00,0xDD,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD6,0x00,0xF6,0x04,0x00,0xF6, +0x5C,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF7,0x54,0x56, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xF1,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF7,0x04,0x04,0xB3,0x00,0x59,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF5,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x17,0x00,0x5A,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0xDB, +0x00,0xF7,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x5B,0x00,0x60,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x5D,0x00,0xFA,0x04,0x04,0x04,0x53,0xC6,0x04,0x04,0x04,0x04, +0x04,0xB8,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x0A,0x04,0x04,0x04, +0x04,0xD6,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xF5, +0x00,0xDB,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD3,0x00,0xF3,0x04,0x04,0x55,0x00,0xD7,0x04,0x04,0x04,0x04,0xB3,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0xDA, +0x00,0xF3,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0xF3,0x04, +0x04,0x04,0x53,0xF5,0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x53,0x54,0x04, +0x53,0x00,0xD9,0x04,0x04,0x5B,0x00,0x5A,0x04,0x56,0x00,0xD3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x54,0x54,0xDA,0x04,0x04,0xDF,0x00,0x57,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x58,0x09,0xF5,0xDA,0x04,0x04,0xE1,0x00,0x54,0xD9, +0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04, +0x60,0x00,0xF6,0xD4,0x04,0x04,0x04,0xDC,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x5A,0x54,0xF7,0x04,0x04,0x04,0x04,0xF7,0x00,0x57,0x04,0x04,0xD7,0x00, +0xF7,0x04,0x04,0x04,0x5C,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, +0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x17,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x53,0x00,0xD8,0x04,0x04,0xD8,0x00, +0x53,0x04,0x04,0xD3,0x00,0xB3,0xD8,0x04,0x04,0x04,0x50,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x59,0x04,0x04, +0x04,0xD8,0xB3,0x00,0xDD,0x04,0x04,0x04,0xF4,0x00,0x55,0xD8,0x04,0xD8,0xD9,0x04, +0xDA,0xB8,0x54,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD5,0x00, +0xF3,0x04,0x04,0x04,0xD9,0x54,0x00,0x55,0xD8,0x04,0x04,0x04,0x04,0x04,0xD6,0x00, +0x00,0xDE,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0x00,0x00,0xD5, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF4,0xDD,0x04,0x04,0x04,0x04, +0x04,0xDB,0xF6,0x00,0xF3,0xDA,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDC,0x00,0x54,0xD8,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x53,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF5,0x54,0xF6,0xDB,0x04,0x04, +0x04,0x04,0x04,0x50,0x00,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0xD8,0xF3,0x00,0xE1,0x04,0x04,0xD9,0x54,0x00,0xF6,0xDB,0x04,0x04,0x04,0x04, +0x04,0xDB,0xF6,0x00,0x53,0xD8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD7, +0x00,0x00,0xD8,0x04,0x04,0xF4,0x00,0xD2,0x04,0x04,0x04,0xF7,0x00,0xD6,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x00,0xB3,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0xD8,0x00,0x00,0xD8, +0x04,0x04,0x04,0xD8,0x00,0x54,0xD8,0x04,0x04,0x04,0xD2,0x00,0x55,0x04,0x04,0x04, +0x04,0x04,0xDA,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x5D,0x04,0xD5,0x00,0x54,0xD5,0x04,0x04,0xD7,0x00,0x17,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0xF6,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x5E,0x00, +0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDE,0xF3,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0x54, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF7,0x04, +0x04,0x04,0x04,0x54,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6, +0xDA,0x00,0x00,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0xF6,0xC6, +0x04,0x04,0x04,0x56,0x00,0xF7,0xD9,0xD8,0xF7,0x00,0x58,0x04,0xD6,0x00,0x54,0xF7, +0xF6,0x00,0x53,0xDA,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, +0x00,0xC6,0xB8,0xF6,0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x57,0x09,0x54,0x04,0x5C,0x54,0xB3,0xD9,0x04,0x04,0x04,0x04,0xDC, +0xD6,0x00,0x00,0xDF,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0xF6,0x00,0xC6, +0xF7,0xB8,0xF5,0x00,0x00,0xD6,0x04,0x04,0x17,0x56,0x56,0x00,0xF6,0xDA,0x04,0xF5, +0x54,0x53,0xF7,0xF7,0x53,0x00,0xF4,0x04,0x04,0x04,0x04,0xF4,0x00,0xF4,0xB8,0xF6, +0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xF6,0xDA, +0x04,0x04,0x04,0xDD,0x00,0xF5,0x56,0x56,0x56,0x56,0x56,0xD5,0x04,0x04,0x04,0x04, +0x04,0x04,0x17,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x56,0x56,0x56,0x56,0x56,0x56, +0x56,0x00,0x00,0x04,0x04,0xD6,0x00,0x54,0xF7,0xF7,0x00,0x00,0xD6,0x04,0x04,0x04, +0x5A,0x00,0x00,0x55,0xB8,0xF3,0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0xF3,0xB8,0xF7,0x00,0x54,0x59, +0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF4,0xF7,0xB8,0xF6,0x00,0x00,0xF3,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x00,0x58,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xF7,0xF5,0x00,0x00,0xD2,0x04,0x04,0x04, +0x04,0xD9,0xF4,0x00,0x00,0xF4,0xF7,0xB8,0x55,0x54,0x53,0x54,0xDE,0x04,0x04,0x04, +0x00,0x53,0x56,0x56,0xB8,0x55,0xF3,0x00,0x00,0xF3,0xDB,0x04,0x04,0x04,0x00,0x53, +0x56,0x56,0x56,0x56,0x56,0x56,0xDF,0x04,0x00,0x53,0x56,0x56,0x56,0x56,0x56,0x56, +0x04,0x04,0x04,0x04,0xD8,0xF5,0x00,0x00,0xB3,0x55,0xB8,0xF7,0xF3,0x00,0x00,0xF7, +0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x50,0x00,0xF4,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x00,0xF6,0xDA,0x00,0x00,0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x00,0xF3,0xF7,0xB8,0x55,0x54,0x54, +0x54,0xD0,0x04,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0xF7,0xF5,0x00,0x00,0xF6, +0x04,0x04,0x04,0x04,0xD9,0xF5,0x00,0x00,0xF3,0x55,0xB8,0xF7,0xF3,0x00,0x00,0xF6, +0xD8,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0x55,0xB3,0x00,0x00,0xD0,0x04,0x04, +0x04,0xDD,0x00,0x54,0xF6,0xB8,0xB3,0x54,0xF4,0x04,0x04,0x56,0x56,0x56,0x53,0x00, +0x56,0x56,0x56,0x56,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0xD7,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xF1, +0x04,0x5B,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x58,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x55,0x00,0x50,0x04,0x04,0x04,0x04,0x04, +0x17,0x00,0xF7,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x58, +0x00,0x60,0x04,0x04,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xB8,0x54,0x00,0x04,0x04, +0xDF,0x00,0x00,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0xF4,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, +0xF4,0x00,0x54,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x53,0xF7,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF7,0xD5, +0x04,0x00,0xF6,0xDA,0xD0,0xF3,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, +0xF6,0x04,0x04,0x04,0x04,0xDF,0x00,0xD9,0x04,0x04,0x56,0x00,0xDA,0x04,0x04,0x04, +0x55,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0xD0,0xB3,0x00,0x00,0xF6,0xD8,0x04, +0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0x00, +0xF6,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0xD3,0xF5,0x04,0x5A,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF2,0x00,0x50,0x04,0x04,0x04,0xFA,0xB3,0x00,0x00,0x00,0xF6, +0xDC,0x04,0x04,0x04,0xF4,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x5A,0xB3,0x00,0x00, +0x53,0x58,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x55,0xD9,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5, +0x00,0xDC,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0x04,0x04,0xD0,0xF3,0x00,0x00,0xB3,0xE1,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00, +0x00,0x54,0xF7,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0xF3,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDC,0x55,0xC6,0x00,0x00,0x00,0xF5,0xEF,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x54,0xF6,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0xF6,0x54,0x00,0x00,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x53,0x55,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x04, +0x04,0x04,0xD0,0xF5,0x00,0x00,0x00,0x00,0xB3,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x54,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x00, +0xF6,0x04,0x00,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0xD5,0xF7,0x53,0x00,0x00,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF4,0x5E,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDE,0xF6,0x54,0x00,0x00,0x00,0x54,0x55,0xD7,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0xD5,0xF5, +0x00,0x00,0x53,0xB8,0xDA,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF1,0x00,0x55,0x04,0xF5,0x00,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xD5,0x04,0xDE,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD2, +0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x54,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD3,0xF5,0x04, +0xD8,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xD6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x59,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xC6,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x54,0x00,0xD6,0x04,0x00,0xF6,0x04, +0xF7,0x00,0xF4,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF4, +0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xD5,0xD9,0x57,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xEC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x00,0x00, +0x0B,0x04,0x00,0x00, +0x1A,0x00,0x00,0x00, +0x00, +0x00, +0x3A,0x69,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5, +0x59,0xF7,0xF7,0xB8,0xF9,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x54,0x00,0x00,0x00, +0x00,0x53,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF7,0x00,0x55,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF3, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x04,0x59,0x5B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xB8,0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD7,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58, +0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x54,0x59,0xDB,0x04,0xE1,0x55,0x00,0x00,0xD3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF9,0xF5,0x53,0xB3,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x0D,0x53,0x54,0x5B,0x04,0x04,0x04,0x04,0xF7,0x00,0xF5,0xD9,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5E,0x00,0x00,0x04,0xB8,0x54,0xF4,0xDC,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF9,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD7,0x00,0xC6,0xDC,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, +0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF5,0xE1, +0x04,0x04,0x04,0x04,0x5D,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00, +0x53,0xD0,0x04,0x04,0x56,0x00,0x53,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x5D,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xF9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x54,0xB8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD6, +0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x17,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF3,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0x58,0x04,0x04,0xE1,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF3, +0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0x04,0x60,0xF3,0x00, +0x00,0xF3,0x60,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x00,0xB3,0x57,0x04,0x04,0x04, +0x04,0xD0,0xB3,0xD6,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0xDC,0x04,0x04,0x04, +0x04,0x58,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x16,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD6,0x53,0x59,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xB3,0x00,0x00,0x00,0xF4,0xDF,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x04,0x04,0xDE,0xF6,0x00,0x00,0x00,0xF6,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x60,0xF3,0x00,0x00, +0x54,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0x60,0xF4,0x00,0x00,0x54,0x55,0xD7,0x04, +0x04,0x04,0x04,0xC6,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xB3, +0x00,0x00,0x53,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5D,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0xD8,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x58,0xF3, +0x00,0x00,0x00,0x00,0xF6,0x0D,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDE,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x09,0x57,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0xB3,0xF7,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0xF6,0x54,0x00,0x00, +0x00,0xF3,0x56,0xD9,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xF6, +0x5C,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x55, +0x53,0x00,0x00,0x00,0x54,0xF5,0x5D,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x60,0xF3,0x00, +0x00,0x54,0xF7,0xD8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, +0xF7,0x04,0x00,0x00,0x53,0x53,0x53,0x53,0x53,0x00,0xD0,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0xE1,0x55,0x54,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0xF7, +0xB3,0x00,0x00,0x00,0x53,0xF7,0xDE,0xDB,0xF7,0x54,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xD7,0x00,0x00,0xDE,0x04,0x04,0x04,0x5E,0xF3,0x00,0x00,0x54,0xF7, +0xD5,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x59, +0xF3,0x00,0x00,0x54,0x55,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF6,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0xDB,0x53,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0x56,0xB3,0x00,0x00,0x00,0xF5,0xD6,0x04,0x00,0xF6,0x04,0x00,0xF6,0xD9,0xB8,0x53, +0x00,0x00,0x54,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0xB3,0x00,0x00,0x54, +0xF5,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xF3,0x00,0x00,0x00,0xF5,0xD6, +0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0xB8,0x53,0x00,0x00,0xC6,0xF7,0xD5,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0xC6,0x00,0x00,0x53, +0xB8,0x04,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xD6,0x00,0x54,0xDD,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xD5,0xF7,0x53,0x00,0x00,0x54,0x55,0xD2, +0x04,0x04,0x04,0x00,0xF6,0xD9,0xB8,0xC6,0x00,0x00,0x53,0xF7,0xDC,0x04,0x04,0x04, +0x04,0x04,0xD8,0x56,0xB3,0x00,0x00,0x54,0xF5,0xDF,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x54,0xB8,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x54,0x00,0x00,0xB3,0x17,0xF6,0x00,0x04,0x04, +0x04, +0x04,0x04,0xE1,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0xF7,0x04,0x04,0x04,0x04,0x53,0x54,0xF9,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x59,0x04,0x04,0x04,0x04,0xD0,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x04,0x04, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD0,0xB3,0x00,0x00,0x54,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0x04,0xF4,0xC6,0x04,0x04,0x5D,0x00,0x00,0x55,0x55,0x00,0x00,0x5B, +0x04,0xD8,0xF3,0x00,0x53,0xF7,0x55,0x00,0x00,0x55,0x04,0x04,0xE1,0x00,0x00,0x5B, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF6,0x00,0x54,0x55,0xF7,0xF5,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x54,0x00,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x04,0x04,0xD6,0x00, +0x00,0xF5,0xF7,0xF6,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0x55,0xF7,0xF3,0x00,0xC6,0xD7, +0x04,0x04,0x04,0x56,0x00,0x00,0xF6,0xF7,0xF4,0x00,0x00,0xDE,0x04,0x04,0x04,0x56, +0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xC6,0x55,0x55,0x53,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0xD9,0x53,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0xB8,0x00,0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, +0x55,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0x55,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0x00,0xF4,0x55,0xF7,0x55, +0x00,0x00,0xF6,0xD9,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x53,0x00,0xD9,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF6,0x53,0x00, +0x00,0xDE,0x04,0x04,0x04,0xD3,0xF4,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00,0x54, +0x17,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF3,0x00,0x00,0xB3,0xDE,0x04, +0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x59,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x00,0xB3,0x55,0xF7,0x55, +0xF3,0x00,0x00,0xF3,0xDE,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x60,0x00,0x00,0xF6,0xF7,0xB3,0x00,0xF6, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xF3,0xD8,0x04,0x00,0xB3, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xDC,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD2,0x00, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x00,0x00,0xF6,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xF3,0x55, +0xF7,0xF6,0x54,0x00,0x00,0xF9,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x53,0x55,0xF7,0x55, +0x53,0x00,0x00,0x00,0x00,0xF3,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0x5B,0x04,0x04,0x04,0x57,0x00,0x00,0xF6,0xF7,0xF4,0x00,0xB3,0xDC,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x55,0xF7,0xF5, +0x00,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x54,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x11,0x04,0x04,0x04, +0x04,0x04,0xF3,0x00,0x00,0x11,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xDE,0x04, +0x04,0x04,0x04,0x04,0xDE,0x00,0xC6,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, +0xF7,0xF7,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00, +0x5A,0x04,0x04,0x04,0x59,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x53,0x00,0x54,0x55,0xF7, +0xF6,0x00,0x00,0x5A,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0xB3,0x55,0x55,0xF3,0x00, +0x54,0xD6,0x04,0x04,0x04,0xF2,0xB3,0x00,0x53,0x55,0xF7,0xF5,0x00,0x00,0xF7,0x04, +0x04,0x04,0x04,0xD2,0xB3,0x00,0x54,0x55,0xF7,0xF6,0x00,0x00,0x5B,0x00,0xF6,0x04, +0x04,0xDE,0xC6,0x00,0xB3,0xF7,0x55,0xF3,0x00,0x53,0xDE,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0xF3,0xF7,0x55,0xF3,0x00,0xF5,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD3,0x54,0x00,0xE1,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x04,0xE1,0x53,0x00,0xB3,0x55,0xF7,0xF3,0x00,0x00,0x17,0x04,0x04,0x00, +0x00,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x54,0xE1,0x04,0x04,0x04,0xF2,0xB3,0x00, +0x53,0x55,0xF7,0xF5,0x00,0x00,0x57,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x56,0x00,0xB3,0xF7,0xF3,0x00,0xB8,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0xDB, +0xB3,0x00,0xB3,0x55,0x55,0x54,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x53,0x04, +0x04,0x04,0xD0,0x00,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xD3,0x04, +0x04,0x04,0xF3,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xC6,0x04,0x04, +0x04,0x04,0x04,0x04,0x54,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x54,0x55, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04, +0x04,0x04,0xD9,0x09,0xC6,0x59,0xDB,0xE1,0xF3,0x00,0x5B,0x04,0x04,0x04,0x04,0x04, +0x5E,0x00,0x5C,0x04,0x53,0x00,0xD2,0x04,0x04,0xF2,0x00,0x53,0x04,0xB8,0x54,0x55, +0x04,0x04,0x04,0xDC,0xF3,0x00,0x58,0x0A,0x00,0x00,0x5E,0x04,0x04,0x04,0x04,0x04, +0xD6,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB8,0x54,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0x55,0x04,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF4,0xDB, +0x04,0x04,0x04,0xD0,0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDE,0x54, +0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x17,0x04,0x04,0x04, +0xE1,0x00,0x54,0xDB,0x04,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x00,0xF3,0x58, +0x04,0x04,0x60,0x00,0xF3,0xDC,0x04,0x04,0x04,0x58,0x00,0xF3,0x04,0x04,0x17,0x00, +0x53,0xD7,0x04,0x04,0x04,0xF9,0x00,0xB3,0x04,0x04,0x04,0xDB,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x58,0x00,0xF6,0x04,0x04,0x04,0x04,0xF6,0x00,0x57,0x04,0x04, +0x04,0x04,0x04,0xD6,0x54,0xF6,0xDA,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0xD5, +0xF6,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xF5,0x54,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xF5,0xDF, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04, +0x04,0x04,0x04,0xD6,0x00,0x00,0x00,0x00,0xD7,0x04,0x04,0xD5,0x00,0x00,0x00,0x5B, +0x04,0x04,0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, +0x00,0xF7,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x58,0x00,0xF6,0x04,0x04, +0xD7,0x54,0x00,0xF6,0xF2,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x60,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0xD8,0x57,0x00,0x00,0xE1,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF2,0x53,0x00,0xF3,0xD6,0x04,0x04,0x04,0x04,0x04,0xDC,0x55,0x00, +0x00,0xD0,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0xF3,0x00,0xD0,0x04,0x04,0x04,0xF4,0x00,0xD6,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0xDE,0x00,0x00,0xF2,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xD2,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0x00,0xF6,0xDA,0x04,0xD9,0xF3,0x00,0xF4,0xDE,0x04,0x04,0x04,0x04,0x04,0x5B, +0x54,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0x54,0x60,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00, +0xF3,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04, +0xD2,0x00,0x54,0xD0,0x04,0x04,0x04,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x59,0x53,0xF4,0xDB,0x04,0x04,0x04,0x17,0x00,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0xD8,0x00,0x00, +0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0xF4,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x57,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0x04, +0xD7,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0x56,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00, +0x00,0xF6,0xDA,0x00,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x5D,0x00,0x54,0xDC,0x04, +0xD9,0x53,0x00,0x57,0x04,0x04,0x04,0x04,0xDE,0xB3,0x00,0x57,0x04,0x04,0xD9,0x53, +0x00,0x56,0x04,0x04,0x04,0x04,0xD3,0xF3,0x00,0x00,0xF6,0xDA,0xDB,0xC6,0x00,0x5A, +0x04,0x04,0x04,0x04,0x5B,0x00,0x53,0xD9,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0xDC,0x54,0x00,0x5D,0x04,0x04,0x04,0x04,0x5B,0x09,0xC6,0x00,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF3,0x04,0x04,0xD8,0xF3,0x54,0x5C,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDC,0x54, +0x00,0x5C,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xD7,0x04,0x00,0x00,0x00,0x5C,0x04, +0x04,0x04,0x04,0xF9,0x00,0x54,0xDC,0x04,0xDB,0x53,0x54,0x58,0x04,0x04,0x04,0x04, +0xD3,0xF4,0x00,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0x54,0xD9,0x04, +0xD8, +0x54,0x54,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB8,0x54,0xF7,0x04, +0x04,0x04,0xD8,0xF5,0x00,0x00,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xB3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0xDE,0x04,0x04,0xB8,0x53, +0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF5,0x04,0x04,0x56,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0x00,0xF9,0x04,0x04,0x04,0x04,0x04, +0x59,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0x04,0x04,0x04,0x55,0x00,0x04,0x04,0x04,0x04,0x57,0x09, +0x57,0x04,0x04,0x04,0xDC,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, +0x54,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04, +0xD3,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x0A,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, +0x56,0x00,0x58,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF2,0xC6,0x00,0x5D,0x04, +0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x58, +0x04,0x00,0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x00,0x04,0x04,0xF3,0x00, +0xD3,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x60,0x04,0xF4,0x00,0xD0,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0x5E,0x04,0x04,0x04,0xF7,0x00,0x0A,0x04,0x04,0x04,0x04,0x04, +0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0xDB,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04, +0xB8,0x54,0xF9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5A,0xF3,0x00,0x00,0xF5,0x0A,0x04,0x04,0x58,0x58,0x58,0x58,0x58, +0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x0A,0xF5,0x00,0x00,0xF3,0x5B,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54, +0x00,0x00,0x00,0x00,0x00,0xF4,0x59,0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04, +0x59,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0xDE,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0xF4,0x00,0xF7,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0xD3,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xE1,0x09,0xB3,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xB3, +0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x53,0x53,0xD8,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x00,0xF4,0x04,0x04,0x04,0x04,0x60,0x54,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8, +0xB3,0x00,0x5E,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0x54,0x60,0x00,0xF7,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xF6,0x04, +0x04,0xF6,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xC6,0x00,0x0D, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, +0x00,0xF3,0xDC,0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x00,0x00,0x00,0xF7,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x0A,0x00,0x53,0xD9,0x04,0x04,0x04,0x56,0x54,0xB8,0x04, +0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0xF3,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF9,0x04,0x04,0x04,0x04, +0x04,0x04,0xF3,0x00,0xDB,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x5B,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x58,0x04,0x04,0x04,0x58,0x00,0x55,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD2,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00, +0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF7,0x04,0xB8,0x00,0x56,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0xF5,0xF6,0x04,0x04,0xB8,0x00,0x56,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0x53,0x00,0xF6,0x04,0xB8,0x00,0x5B,0x04,0x04,0x04,0x04,0x04, +0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0x58,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00, +0x56,0xDA,0x55,0x54,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xF7,0x00,0x59,0x04,0x04,0x04, +0x04,0x04,0x04,0x5C,0x00,0x55,0x04,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04, +0x59,0x00,0xF7,0x04,0xB8,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00, +0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x57,0x04,0x04,0x04,0xF5,0x00,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0xDC, +0x00,0x00,0x04,0x04,0x04,0x04,0x57,0x00,0x60,0xF7,0x00,0x0D,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF3,0x54,0xDE,0x54,0xB8,0x04,0x04,0xB3,0xB3,0x0D,0x00,0x56,0x04, +0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5A,0xDE,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0x59,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x17, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xFB,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x55, +0x00,0x56,0x58,0x58,0xF6,0x09,0x57,0x58,0x58,0x04,0x55,0x00,0xD2,0x04,0x04,0x04, +0x04,0xF4,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x54,0xC6,0xDB,0x04, +0x04,0xDB,0x54,0x54,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, +0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5A,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04, +0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF7,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD7,0x53,0x00,0x5A,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x0D,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0xB3,0x54,0x16, +0xE1,0xE1,0xE1,0xE1,0xE1,0x00,0xF4,0xE1,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xD6,0x00,0xF7,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00, +0xF7,0x04,0x04,0x04,0xF2,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04, +0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0x04,0xF2,0x5B,0xF9,0x00,0x54,0xDC, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x56,0x54,0x54, +0x00,0x55,0xDE,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x00,0x54,0x57,0xD9,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x56,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x00,0x00,0x60, +0xDB,0x55,0x00,0x00,0xD8,0x59,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0xF9,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD6,0x57,0xE1,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x57,0x09,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF4,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xC6,0x56,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD9,0xD8,0x04,0x04, +0x04,0x04,0xDC,0x00,0xF6,0x04,0x00,0xB3,0x04,0x04,0xDA,0x55,0x00,0xF7,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x59,0x54,0xB8,0x04,0x53,0x00,0xD8,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x53,0xD9,0x00,0xF6,0x04,0x0D,0x00,0xF4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xB3,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD3,0x04,0x04, +0x04,0x04,0xD7,0x55,0x00,0x00,0xDF,0xD5,0xE0,0x00,0x0A,0x04,0x00,0xF6,0x04,0x04, +0xDB,0xC6,0x09,0xD0,0x04,0x04,0x04,0x04,0x59,0xF6,0xE1,0x04,0x04,0x04,0x04,0x04, +0xF5,0x00,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xB3,0x04, +0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF7, +0x04,0x55,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD3,0xF5, +0x00,0xD8,0x04,0x04,0x04,0xF7,0x00,0xDE,0xF6,0x00,0xDC,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0x54,0x00,0xD7,0x04,0xD7,0x00,0x54,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xB3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x56,0xC6,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xC6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x59,0x00,0xF6,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xD0, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x55,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x54,0x54,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04, +0x53, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xE0,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04, +0x04,0x04,0xB3,0x53,0x04,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, +0xF7,0x04,0xB3,0xF3,0x04,0xF2,0x54,0xB8,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0xDB,0x54,0x00,0x00,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54, +0x04,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0xDC,0x09,0x54,0xDB,0x04,0x04,0x04, +0x04,0x04,0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, +0x04,0x04,0x04,0x60,0xD0,0x04,0x04,0x04,0x04,0xD9,0x5D,0x0D,0x04,0x04,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x00,0x00,0x54,0x54, +0x00,0x00,0x00,0x54,0x00,0x04,0xD7,0xE1,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0x54,0xB3,0x56,0x56,0x53,0x00,0x58, +0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x00,0x00,0xD3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, +0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0xF3,0x00, +0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xD3,0x53,0x00,0x58,0x04,0x04,0x04,0x04,0xD6,0x59,0xD9, +0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0x04,0xD6,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0xD5,0x59,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04, +0x04,0xF6,0x00,0xD2,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0xF5,0x00,0x04,0x04,0xDB,0xF6,0x00,0x09,0x00,0x00,0x00,0x55,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xB8,0xDC,0x04,0x04,0x04, +0x04,0x04,0x04,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0xD3,0xF7,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x53, +0xC6,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDE,0x00,0xF4,0x04,0x04,0x04,0xF4,0x00, +0xD8,0x04,0x5E,0x00,0x55,0x04,0x04,0x04,0x04,0xB8,0x54,0x57,0x58,0x58,0x58,0x58, +0x58,0x58,0x55,0x00,0x60,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xB3,0x00,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, +0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD0,0x04,0x04,0x04,0x58,0x58,0x58,0x58, +0x58,0x58,0x58,0x58,0x57,0x09,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0x00,0xF7,0x04,0x59,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF3,0x00,0xDC, +0x04,0x57,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0xF4,0x00,0xDF,0x04,0x00,0xF6,0x04,0xF6,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x55,0x57,0x57,0xB8,0xF4,0x00,0x00, +0xF5,0xD7,0x04,0x04,0x16,0x09,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6,0x00,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDE,0x04,0xE1,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB3,0x04,0x57,0x00,0x60,0x04,0x04, +0x04,0xB3,0x54,0x04,0x59,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF9,0x00, +0xF5,0xDA,0xF5,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00, +0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x56,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD5,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0x04, +0x00,0xB3,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00, +0xF4, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xD7,0xF7,0x00,0x00,0x57,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0xDF,0x00,0xB8, +0x04,0x04,0xF4,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xE1,0x04,0xB8,0x54, +0xD7,0x56,0x00,0xDE,0x04,0xB8,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00, +0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x54,0xF7,0x04,0x0D,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0xD6,0xF4, +0x00,0x5E,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0x55,0x13,0x04,0xB3, +0xF5,0xDA,0x04,0x04,0x57,0x54,0x00,0x00,0x55,0x04,0x04,0x04,0xAD,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0xE1,0xE1,0x00,0xF6,0xE1,0xE1,0xD6,0x00,0x55,0xE1, +0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xC6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0xD2,0x59,0x53,0x00,0x00,0x54,0x59,0x04,0x04,0xF6,0x00,0x57, +0x04,0x04,0x04,0x57,0x09,0x54,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54,0x54,0x54,0x00,0x00,0x00,0x54,0x54,0x54, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x0D,0x00,0x59,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0xDC,0xB3,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x59,0x00,0xB8,0x04,0x04,0xF7,0x00,0x57,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x55,0x04,0x00,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x04,0x04,0x0D,0x00,0xF7, +0x04,0x04,0x04,0x04,0xC6,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04, +0xF3,0x00,0xF5,0x16,0xD6,0x57,0x54,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD2,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xB8,0x04,0x04, +0x04,0x04,0x00,0xB3,0x04,0x00,0xF5,0x04,0x04,0x04,0xD6,0x00,0x59,0x04,0x04,0xF6, +0x00,0xF2,0x04,0x04,0x04,0xD7,0x00,0x00,0x00,0x00,0x54,0x54,0x54,0x00,0x00,0x53, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x00, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x00,0x54,0x54,0x54,0x54,0x54,0x54,0x54, +0x54,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, +0x00,0xB8,0x54,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD6,0x00,0x55,0x04,0x04,0xDB,0x00,0xF3, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x57,0x00,0xF7,0x04, +0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x17,0x00,0xB8,0x04,0x00,0xF3,0x58,0x58,0x58,0x59,0xF9,0xD7,0x04,0x04, +0x04,0x04,0x53,0x00,0xB3,0x00,0x00,0x00,0x00,0x54,0xF6,0x0D,0x04,0x04,0x04,0x04, +0x04,0x54,0x54,0x04,0x00,0xF6,0xDA,0x59,0x54,0x00,0x00,0xF3,0x5C,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0xD9,0x54,0xF3,0x04,0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0xD0,0x00,0xF7,0x04,0xDE,0x00,0xF7,0x04,0x04,0xDC,0x00,0xF6,0x04, +0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x55,0x00,0x55, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x17,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x53,0x17,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x55,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF9,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, +0x00,0xF6,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0xDA,0x00,0x00,0x00,0x54, +0x54,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF6,0xE1,0x09,0xC6,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x00,0xF5, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD3,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, +0xF3,0xF9,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0xF9,0x00, +0x56,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xD0,0x00,0x00,0x00,0x53,0x04, +0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x5B,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDE,0x04,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0x55,0x00,0x60,0x04,0x04,0x04,0x04,0x55,0x00,0x57,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0xD9,0x00,0x00,0x55,0x04,0x5B,0x53,0x55,0xB8,0x53, +0x54,0x00,0xB3,0x00,0x00,0x57,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5E,0x53,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54, +0xF7,0x04,0x04,0xD3,0xD7,0x04,0x04,0x04,0x04,0xD7,0x54,0x00,0x55,0xDC,0x56,0x00, +0xC6,0xF2,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xF4,0x00,0xE1,0xE1,0xE1,0xE1,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, +0xB3,0x09,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x00,0xF2, +0x04,0x04,0xD8,0x53,0x00,0xD2,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5A,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04, +0x04,0x04,0x56,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD9,0x04,0x04,0x04, +0x56,0x00,0xF7,0x04,0x04,0x04,0x04,0xB8,0x00,0xF7,0x04,0x57,0x00,0x55,0x04,0x04, +0x04,0x04,0xF2,0x00,0x53,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0x54,0x00,0x00,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0x58, +0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x54, +0x54,0x56,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0xC6,0x57,0x04,0x04,0x04,0x00,0xF5, +0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0xB3,0xF5,0x04,0x04,0x60,0x00,0x56,0x04,0x04, +0x04,0x04,0xF6,0x00,0x0A,0xE1,0xE1,0xE1,0xE1,0x57,0x00,0x56,0x04,0x04,0x04,0x04, +0x00,0xF3,0x58,0x58,0x57,0xB8,0xF5,0x00,0x53,0xD7,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF3,0x58,0x58,0x58,0x58, +0x58,0x58,0xD0,0x04,0x00,0xF3,0x58,0x58,0x58,0x58,0x58,0x5D,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xD0,0x04, +0x00,0xF3,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x17, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0xF6,0x00,0xE1,0x04,0x04,0x04,0x55,0x00,0xD6,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDE,0x00,0x53,0xD9,0x04,0x04,0x00,0xF6,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00, +0xF6,0x04,0x00,0x00,0x00,0x54,0x54,0x00,0x54,0x00,0xF3,0xDE,0x04,0x04,0x00,0xF4, +0x04,0xD8,0xDE,0xDE,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x00,0xF6,0x04,0x17,0x5A,0x57,0x55,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04, +0xDE,0xB8,0x53,0x54,0x53,0xDC,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x57,0x00,0x59,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0x17,0x04,0x04,0x54,0xB3,0x04,0x04,0x59,0x00,0x59,0x04,0x04,0xF3,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0x54,0xD5,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5D,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0xD0,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD2,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x00, +0xC6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0x04,0x54,0x00,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1, +0xE1,0xE1,0x00,0x09,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0xC6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0x04,0xDE,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x57,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF4,0x04,0x04, +0x04,0x04,0x04,0xDC,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x00, +0xF4, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x09,0xC6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, +0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x59,0x00,0xB3,0x0D,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0x04,0xDC,0x00,0xF6,0x04,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04, +0x04,0xDF,0x00,0x56,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0x04,0x04,0x04,0xF4,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, +0xD7,0x00,0xF3,0x04,0x04,0x04,0x58,0xC6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0xC6,0x54,0xD5,0x04,0x04,0x04,0xDF,0xF3,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0xF6,0x00,0xF6,0x0A,0x04,0x04,0xB8,0x00,0x00,0x53,0xB8,0xD7,0x04,0xD5, +0xB3,0xF5,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0xF6,0x54,0x04,0x04,0x04,0xF4,0xB3,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x54,0x00, +0x00,0x55,0x04,0x04,0x04,0x04,0xDE,0x59,0x5E,0xD9,0x04,0xF5,0x00,0xDB,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF5,0x00,0x00,0x00,0x00,0xD3,0x04,0x04,0xDF, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5D,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, +0xDB,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x53,0x54,0xE1, +0x04,0x04,0x04,0x04,0x04,0x0A,0x57,0xF7,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0xDF, +0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0x00,0x55,0xD8,0x04,0x04, +0xDA,0xDF,0x00,0xC6,0x04,0x04,0x17,0x00,0xF4,0xD9,0x04,0x04,0x04,0xE1,0x00,0x54, +0xD8,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x57,0x04,0x04,0x04,0x04,0xF6,0x00,0xF4, +0x56,0x57,0xF5,0x00,0xF4,0xD9,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x57, +0x00,0x5E,0x04,0x54,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x5A,0xF3,0x00, +0x54,0xF5,0xDF,0x04,0x04,0x04,0x04,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54, +0x54,0x00,0x04,0x04,0x04,0x04,0x0D,0xF5,0x00,0x00,0xF3,0x5A,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDC,0xB3,0x00,0x57,0x04,0x04,0x00,0xF5,0x04,0xF4,0x00,0xD7, +0x04,0x04,0x04,0xF7,0x00,0xDB,0x04,0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0xDF,0x00, +0x56,0x04,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0xDB,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x00,0x56,0x04, +0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x53,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x54, +0x54,0x54,0x54,0x54,0x54,0x00,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xE1,0x00,0x00,0xDC,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDC, +0x00,0xF3,0x04,0x04,0x04,0x04,0xDE,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x00,0xF4, +0xE1,0xE1,0xE1,0x0A,0x59,0xF6,0x00,0x54,0xD9,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xDC,0xF3,0x00,0xE1,0x04,0x04,0x04,0x16,0xF3,0x00,0x00,0x53,0xB8, +0xDB,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB3,0x00,0xD8,0x04, +0x04,0x04,0xD9,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04, +0x55,0x00,0xD5,0x04,0x55,0x00,0xDC,0x04,0x04,0xF7,0x00,0x03,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF3,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0xDE,0xF7,0xC6,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF5,0x00,0x5C,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00, +0xD7,0x04,0x04,0x04,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x57, +0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00,0x09,0x57,0x04,0x04, +0x04,0x04,0x04,0x04,0x5A,0x00,0xF7,0x04,0xB8,0x00,0x57,0x04,0x04,0x04,0x04,0x04, +0x04,0xDC,0xF4,0xF5,0x04,0x04,0xB8,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0x53,0x00,0xF6,0x04,0xF7,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x55, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, +0x04,0x5A,0x00,0x00,0x04,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x57, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6,0x09, +0x57,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x5D, +0x00, +0x53,0x04,0x04,0x04,0x04,0x04,0xF9,0x54,0xB8,0x04,0x00,0x00,0xD9,0x04,0x04, +0x04,0x04,0xDB,0x00,0x54,0x04,0xF7,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x59, +0x00,0xF7,0x04,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xF7,0x04, +0xF7,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00,0x53, +0x04,0x04,0x04,0xDA,0x55,0x00,0xF2,0x04,0x04,0xDE,0xD2,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04, +0xB8,0x00,0xDF,0x04,0x04,0x04,0x04,0xB8,0x00,0x60,0x04,0x04,0x04,0x55,0x00,0xD3, +0x04,0x04,0x04,0xF7,0x00,0x00,0xE1,0x04,0x04,0x04,0x59,0x54,0x5C,0x04,0x04,0x04, +0x04,0xB8,0x00,0x57,0xD6,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x59,0x04, +0x04,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x55,0x04, +0x04,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF3, +0x04,0x04,0x04,0x04,0x04,0xDC,0xD2,0x04,0x04,0x04,0x04,0x04,0xF2,0xDD,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF9,0xF9,0x55,0x00,0xF9,0xF9, +0xF9,0xF5,0x00,0xF9,0xF9,0x04,0x04,0xDE,0x54,0x00,0x00,0x55,0xD6,0x04,0x04,0x04, +0x04,0x55,0x00,0x00,0x00,0x00,0x5D,0x17,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x00,0xF6,0xD3,0x04,0x04,0xF5,0x54,0xD6,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x59,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x55,0x00,0x09,0xC6,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5B,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0xD3,0x00,0x00,0x53,0xB8,0x57,0x55,0x00,0x00,0xD6, +0x04,0x04,0x04,0xF6,0x00,0xC6,0xB8,0x57,0x55,0x00,0x00,0x17,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0xF7,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDF,0xF5,0x00,0x00,0xF3, +0x5C,0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0x04,0x04, +0x5C,0xF3,0x00,0x00,0xF5,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDC,0x53,0x00,0xDE,0x04,0x54,0x53,0x04,0x5A,0x00,0xF7,0x04,0x04,0x04,0x59, +0x00,0x58,0x04,0xDC,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF3,0xC6,0x04,0x04,0x04, +0xD0,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0xE1,0xE1,0x0D,0x58,0xB3,0x00, +0x59,0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, +0x00,0x04,0x00,0xF4,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xDC,0x04,0x00,0xF4,0xE1,0xE1, +0xE1,0xE1,0xE1,0xDE,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1, +0xE1,0xE1,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x5A,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xB8,0x54,0x5B,0x04,0x04, +0x04,0x04,0x04,0xF4,0x00,0xDC,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x57,0x00, +0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0x58,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x16,0x00,0xF7,0x04,0x04,0x5D,0x00,0x00,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0xD0,0x04,0x04,0x04,0x04,0xD9,0x00,0xF5,0x04,0x04,0x04,0x5A,0x00,0x5B,0x04, +0x54,0xB3,0x04,0x04,0x04,0x0D,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0xC6,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04, +0xDC,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x54,0xDB, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, +0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0xF9,0x54,0xB8,0x04,0x04,0x04, +0x55,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0x57,0x04,0xDA,0xDA, +0x04,0xDC,0xF4,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x5A,0x04,0xDA,0x04,0x04,0x5E, +0x00,0x54,0xDC,0x04,0xDB,0x53,0x00,0x58,0x04,0xDA,0x04,0x04,0xD2,0xB3,0x54,0x57, +0x04,0x04,0xDB,0x53,0x00,0x58,0x04,0xDA,0x04,0x04,0xD2,0xF3,0x00,0x00,0xF6,0x04, +0xDC,0x54,0x00,0x0D,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0xD2,0x04,0x04,0x04,0x00, +0xF6,0xD4,0x04,0x04,0xDC,0x00,0x00,0x60,0x04,0xDA,0xDA,0x04,0x5D,0x54,0x00,0x00, +0x04,0x00,0x00,0xF5,0xD9,0xDA,0xDA,0x04,0xD0,0x00,0x00,0xDC,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDB,0xC6,0x00,0xD6,0x04,0x04, +0x04, +0x00,0xF6,0x04,0x00,0x00,0xB8,0x04,0x04,0x04,0xDC,0x53,0x00,0x00,0xB8,0x04, +0x04,0x04,0xDB,0xB3,0x00,0xE1,0x04,0x00,0x00,0x55,0xDA,0xDA,0xDA,0x04,0x55,0x00, +0xF7,0x04,0xDC,0x54,0x00,0xF9,0x04,0xDA,0x04,0x04,0x60,0x00,0x00,0xD3,0x04,0x00, +0x00,0x00,0x5B,0x04,0xDA,0x04,0x04,0x5C,0x54,0x54,0xDC,0x04,0xDB,0x54,0x00,0x58, +0x04,0xDA,0xDA,0x04,0xDC,0xF4,0x00,0x00,0xF6,0x04,0x00,0x00,0xB8,0x04,0x04,0x04, +0x55,0x00,0xD6,0x04,0xDC,0x00,0xF6,0xDA,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xC6,0x53,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0xD8,0x00,0xF4,0x04,0x04,0x04,0x04,0xD6, +0x00,0x54,0x04,0x04,0x04,0x04,0xD8,0x00,0xF5,0x04,0x04,0x04,0xD6,0x00,0xF4,0x04, +0x04,0xB8,0x54,0x57,0x04,0x04,0x04,0x04,0x54,0x00,0xD8,0x04,0x04,0x04,0x04,0xF7, +0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF9,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09, +0xC6,0x04,0x04,0xF5,0x00,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0xDF, +0x5B,0x54,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D, +0x00,0xF3,0xDE,0x55,0x00,0x54,0xDC,0x04,0xF2,0x58,0xD6,0x04,0x04,0x04,0x04,0x04, +0x60,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x53,0x04,0x04,0x04, +0x55,0xE1,0xDE,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x56,0x5E, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0xD7,0xD6,0x57, +0x09,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0xDB,0xC6,0x00,0xDC,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x00,0x54,0xB3,0x00,0x00,0x00,0xF5,0xD0,0x04,0x04,0x04,0x04,0xD7, +0x00,0x00,0x00,0x00,0x00,0xF3,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0x16,0x04,0x04,0x04,0xB8,0x54,0xF5,0x60,0xDF,0xF6,0x00,0xB8,0x04,0x04,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04, +0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x54,0x53,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x00,0x55,0xDE, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD7,0x04,0x04,0x04,0x04,0x04,0x60,0x00, +0xF7,0xDA,0xF6,0x00,0xD0,0x04,0xF3,0x00,0x60,0x04,0x04,0x57,0x00,0xF4,0x04,0x5E, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x5B,0x04,0x04,0x55,0x00,0xD0,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD9,0x54,0x53,0x04,0x04,0xF5, +0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF4,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0xF7,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, +0x00,0xB8,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xDE,0x00,0x53,0xD9,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0x00,0x0A,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, +0x55,0xDA,0xF4,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD2,0x00,0xF5,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA, +0x04,0x53,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0x04, +0x04,0x04,0xF9,0x00,0x57,0x04,0x04,0x04,0xD5,0x00,0x55,0xDE,0x00,0xF7,0x04,0x04, +0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x54,0xF2,0x00,0x00, +0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDE,0x04,0x04,0xB8,0x54,0x5C, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF7,0x04,0x04,0x04,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF2,0x00,0xF6,0x04,0x04,0x04,0x04,0xC6,0x09,0xD8,0x04,0xD9,0x00,0xB3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x53,0x54,0x53,0x55,0xF7,0xF6,0x00,0x00,0x59, +0x00,0xF6,0xDA,0x00,0x00,0x00,0x54,0xB3,0x55,0xF7,0xF3,0x00,0x54,0xE1,0x04,0x04, +0x04,0xDE,0x53,0x00,0x53,0x55,0xF7,0xF5,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0xF2, +0xB3,0xC6,0x53,0x55,0xF7,0xF5,0x54,0x00,0x56,0x00,0xF6,0xDA,0x04,0xE1,0x54,0x00, +0xF3,0xF7,0x55,0xF3,0x00,0x54,0x0D,0x04,0x04,0xF7,0xF7,0x00,0x53,0xF7,0xF7,0x04, +0x04,0xD6,0x00,0x00,0xF3,0x55,0x55,0xF3,0x00,0xF5,0xF6,0x00,0x04,0x00,0x00,0x00, +0x54,0x55,0xF7,0xF6,0x00,0x00,0x5A,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0xD6,0x00,0xC6,0xDB,0x04,0x04,0x00,0xF6,0xDA, +0x00,0x00,0x00,0xF3,0xF7,0x55,0x00,0x00,0x5B,0xF6,0x54,0xF3,0xF7,0x55,0x54,0x00, +0xF7,0x04,0x04,0x00,0x00,0x00,0x53,0x55,0x55,0x53,0x00,0xB3,0xD5,0x04,0x04,0xE1, +0x54,0x00,0xF3,0x55,0xF7,0xF3,0x00,0x00,0x0A,0x04,0x04,0x00,0x00,0x00,0x54,0xF3, +0x55,0xF7,0xB3,0x00,0x54,0xE1,0x04,0x04,0x04,0xDE,0x53,0x00,0x53,0x55,0xF7,0xF6, +0x00,0x00,0x57,0x00,0xF6,0xDA,0x00,0x00,0x54,0xF3,0x56,0x04,0x0A,0x00,0x09,0xF7, +0xB3,0x00,0xF9,0x04,0xF7,0xF7,0x53,0x00,0xF7,0xF7,0xF7,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x60,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0xD7,0x04,0x59,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0xF7,0x59,0x04,0x04, +0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0xD8,0x53,0x00,0xF2,0x04,0x04,0x04,0xB3,0x00, +0xDE,0x04,0x04,0x16,0x09,0x55,0xDA,0x04,0x04,0x04,0x04,0xDE,0x00,0xF6,0xDA,0x04, +0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, +0xF6,0x04,0xDC,0xDC,0xF2,0x00,0x56,0xDC,0xDC,0xDF,0xC6,0x57,0xDC,0x04,0x04,0x00, +0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x53,0x04,0x04,0x04,0x60,0x00,0x00, +0x00,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0xD3,0x04,0x04, +0x57,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDE, +0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x59,0x04,0x04,0x04,0xF5,0x00,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0xD0,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF4,0x04,0x04,0x04,0x04, +0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF7,0x04, +0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF3, +0x54,0x04,0xDC,0xDE,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0xDE, +0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF4,0x04,0x04, +0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x0A,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xB8,0x00,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0xD6,0x00, +0xF5,0x04,0xDE,0x54,0x00,0xF7,0x56,0x00,0x53,0x00,0xD5,0xF5,0x00,0xDF,0x04,0x04, +0x04,0x04,0x04,0xD9,0x00,0xF3,0x04,0xDB,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x5C,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x59,0xDE,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x09,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xF7,0x55,0xD8,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4, +0x54,0x59,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x5C,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x54,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x0D,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x57,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x5D,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0x04,0x00,0xF5,0x04, +0x04,0x04,0x04,0xDA,0x5E,0xE1,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD5,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x55,0x00, +0xDE,0x04,0x04,0x04,0x04,0xB3,0x00,0x00,0x00,0x60,0x04,0x04,0x04,0x04,0xF5,0x54, +0xDB,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x5B,0x04,0x5B,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x0A,0x00,0x55,0x04,0x04,0x04,0xD5,0x54,0xB3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD6,0x04,0x04,0x54,0x53,0x04,0x04,0x04, +0x04,0x04,0x57,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF7,0x04, +0x04,0x04,0x04,0x56,0x00,0x59,0xDA,0x58,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0xB8,0xB3,0x00,0x00,0x00,0xF6,0xE1,0x04,0x00,0xF6,0x04,0x00, +0xF6,0xD8,0xB8,0x53,0x00,0x00,0xC6,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x56, +0xB3,0x00,0x00,0x00,0xF6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x56,0xB3,0x00, +0x00,0x00,0xF5,0x0D,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0xF7,0x53,0x00,0x00,0xC6, +0xF7,0xDC,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD3,0xF7, +0x54,0x00,0x00,0xB3,0x57,0x04,0xF6,0x00,0x04,0x00,0xF6,0x0D,0xF4,0x00,0x00,0x00, +0xF5, +0x0A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x57,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x5C,0xB3, +0x00,0x00,0xF3,0x60,0x04,0x04,0xB8,0x54,0x00,0x00,0xB3,0x58,0x04,0x04,0x04,0x00, +0xF6,0xE1,0xF4,0x00,0x00,0x54,0xF7,0xDB,0x04,0x04,0x04,0x04,0xDC,0xF7,0x53,0x00, +0x00,0x54,0x55,0xD3,0x04,0x04,0x04,0x00,0xF6,0xD8,0xB8,0x53,0x00,0x00,0xC6,0xF7, +0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x56,0xB3,0x00,0x00,0x00,0xF5,0xDF,0x04,0x00, +0xF6,0x04,0x00,0xF6,0xB8,0x00,0x09,0x04,0x04,0x5B,0xC6,0x00,0x54,0x57,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x0D,0x54,0xB8,0x04, +0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A, +0x00,0x56,0x04,0xF7,0x00,0x58,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3,0x04,0x04,0xF5, +0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD7,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04, +0x04,0x54,0x55,0x04,0x04,0xD8,0x00,0xF7,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x57,0x55,0x04,0x00,0xF5,0x04,0x04,0x04,0xD5,0x00,0xF6,0xD8,0x00,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x0D,0x00,0xF3,0xD8,0x04,0x04,0x04, +0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x58,0x56,0x00,0x54,0xB8,0x58,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, +0x00,0x59,0x04,0x04,0xF4,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x54,0x53, +0x04,0x04,0x57,0x00,0x0A,0x04,0x04,0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x60,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xE1,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD0,0x04,0x04,0x00,0xF5,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0xDA,0x55, +0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xB3,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF7,0x04,0x04,0x55,0x54,0xB8,0x04,0xDE, +0xF4,0x00,0x00,0xF3,0xDC,0x04,0x58,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF7,0x00,0xD6,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0xC6,0x09,0xDC,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x5D,0x00,0x53,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x55,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x54,0x00,0xE1,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x5B,0x00,0xF6,0x04,0x00,0xF6, +0x57,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x55,0x54,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x00,0xD6,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x55,0x04,0x04,0xB3,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF4,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x58,0x00,0x56,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0xDE, +0x00,0x55,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x57,0x09,0x57,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x57,0x54,0x57,0x04,0x04,0x04,0x53,0x09,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x57,0x00,0x5A,0x04,0x04,0x04, +0x04,0x5B,0x00,0xF6,0x04,0x04,0x04,0xF5,0x00,0xF9,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0xDE,0x04,0x04,0x04,0x04,0xB8,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x0A,0x00,0xF3,0x04,0xDA,0x55,0x00,0x0D,0x04,0x04,0x04,0x04,0xB3,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x16,0x04,0x04,0x04,0x04,0xDB, +0x00,0xF4,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04, +0x04,0x04,0x53,0xF5,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x53,0x54,0x04, +0x53,0x00,0xD2,0xDA,0x04,0x57,0x00,0x56,0x04,0xF7,0x00,0x0A,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xE0,0x54,0xDB,0x04,0x04,0x59,0x00,0xB8,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x56,0x54,0xF5,0xDB,0x04,0x04,0x5D,0x00,0x54,0xD7, +0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04, +0x57,0x00,0xF5,0xD9,0xDA,0x04,0x04,0xD6,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x56,0x00,0x55,0xDA,0xDA,0xDA,0x04,0xF7,0x00,0xB8,0x04,0x04,0xDF,0x00, +0x55,0xDA,0x04,0x04,0x57,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00, +0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x58,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x53,0x00,0xD3,0xDA,0xDA,0xD3,0x00, +0x53,0x04,0x04,0x0A,0x00,0xB3,0xDC,0xDA,0x04,0x04,0x59,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x56,0x04,0x04, +0x04,0xDC,0xB3,0x00,0xE1,0x04,0x04,0xD8,0xF4,0x00,0x55,0xD3,0x04,0xF1,0xF2,0x04, +0xDB,0xF7,0x00,0x54,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0x00, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0xD0,0x00, +0xF3,0x04,0x04,0x04,0xD7,0x00,0x00,0x55,0xD3,0x04,0xDA,0xDA,0x04,0x04,0x5B,0x00, +0x00,0x16,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0xD5,0xF7,0x00,0x00,0xD0, +0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0xF4,0xE1,0x04,0xDA,0xDA,0xDA, +0x04,0xDE,0xF5,0x00,0xF3,0xD9,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD6,0x00,0x54,0xDC,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD5,0x00,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x53,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0xF5,0x00,0xF6,0xDE,0x04,0xDA, +0xDA,0x04,0x04,0x59,0x00,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04, +0x04,0xDC,0xF3,0x00,0x5C,0x04,0x04,0xF2,0x54,0x00,0xF6,0xDE,0x04,0xDA,0xDA,0xDA, +0x04,0xDE,0xF5,0x54,0x53,0xDC,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0x0D, +0x00,0x00,0xDC,0x04,0x04,0xF4,0x00,0x17,0xDA,0x04,0x04,0x55,0x00,0x5B,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x00,0xB3,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0x00,0xD3, +0x04,0x04,0x04,0xD3,0x00,0x54,0xD5,0x04,0x04,0x04,0xDF,0x00,0x55,0x04,0x04,0x04, +0x04,0x04,0xDB,0xC6,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0x57,0x04,0xD0,0x00,0x54,0xD0,0x04,0x04,0xDF,0x00,0x58,0x04,0x04,0x04,0x04, +0x04,0x04,0xD7,0xF5,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x57,0xC6, +0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x16,0xF3,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0x54, +0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0xDA, +0x04,0x04,0x04,0x54,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF4,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6, +0xDA,0x00,0x00,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x04,0x04,0x04,0xF5,0x09, +0x04,0x04,0x04,0xB8,0x00,0x55,0xD2,0xDC,0xF7,0x00,0x56,0x04,0x5B,0x54,0x54,0x55, +0xF6,0x00,0x53,0xDB,0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0x09,0xC6,0xF7,0xF6,0x00,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0xB8,0x54,0x54,0x04,0x57,0x00,0xB3,0xF2,0x04,0x04,0x04,0x04,0xD6, +0x5B,0x00,0x00,0x59,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0xF6,0x54,0x53, +0x55,0xF7,0xF5,0x54,0x00,0x5B,0x04,0x04,0x58,0xF7,0xF7,0x00,0xF6,0xDA,0x04,0xF4, +0x00,0x53,0x55,0x55,0x53,0x54,0xF4,0xD8,0x04,0x04,0x04,0xF4,0x00,0xF4,0xF7,0xF5, +0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x54,0x00,0xF6,0xDA, +0x04,0x04,0x04,0xE1,0x00,0xF4,0xF7,0xF7,0xF7,0xF7,0xF7,0xD0,0x04,0x04,0x04,0x04, +0x04,0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, +0xF7,0x00,0x00,0x04,0x04,0x5B,0x00,0x54,0x55,0x55,0x00,0x00,0x5A,0x04,0x04,0x04, +0x56,0xC6,0x09,0x55,0xF7,0xF3,0x00,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x00,0xF3,0xF7,0x55,0x00,0x54,0x56, +0x04,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xF4,0x55,0xF7,0xF5,0x00,0x00,0xF3,0xDE, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x00,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0x55,0xF4,0x00,0x00,0x17,0x04,0x04,0x04, +0x04,0xD7,0xF4,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00,0xC6,0x60,0x04,0x04,0x04, +0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF3,0x00,0x00,0xF3,0xDE,0x04,0x04,0x04,0x00,0x53, +0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x59,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, +0x04,0x04,0x04,0x04,0xDC,0xF5,0x54,0x54,0xB3,0x55,0xF7,0x55,0xF3,0x00,0x00,0xF7, +0xD9,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x59,0x00,0xF4,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x55,0x00,0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00, +0xC6,0x5E,0x04,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF5,0x00,0x09,0xF5, +0x04,0x04,0x04,0x04,0xD7,0xF4,0x00,0x00,0xF3,0x55,0xF7,0x55,0xF3,0x00,0x00,0xF5, +0xDC,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xB3,0x00,0x00,0xF9,0x04,0x04, +0x04,0xE1,0x00,0x00,0xF6,0xF7,0xB3,0x00,0xF4,0x04,0x04,0xF7,0xF7,0xF7,0x53,0x00, +0xF7,0xF7,0xF7,0xF7,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0xDF,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD6, +0x04,0x57,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x56,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0xF6,0x00,0x59,0x04,0x04,0x04,0x04,0x04, +0x58,0x00,0x55,0xDA,0x04,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0x58,0x04,0x04,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0x00,0x04,0x04, +0x59,0x00,0x00,0x04,0x04,0xF6,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54, +0xF4,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x00,0xD7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6, +0xF4,0x00,0x54,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x53,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x55,0x0C, +0x04,0x00,0xF6,0xDA,0xF9,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, +0xF6,0x04,0x04,0x04,0x04,0x59,0x00,0xF2,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0xD8, +0x55,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0xF9,0xB3,0x00,0x00,0xF6,0xD3,0x04, +0x04,0x04,0xF6,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x53,0x00,0x00, +0xF5,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x0A,0xF5,0x04,0x56,0x56,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x17,0x00,0x59,0x04,0x04,0x04,0x57,0xB3,0x00,0x00,0x00,0xF5, +0xD6,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x56,0xB3,0x00,0x00, +0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0xF6,0xD2,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0xD6,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0x04,0x04,0x5E,0xF3,0x00,0x00,0xB3,0x5D,0x04,0x04,0x04,0x04,0x04,0x16,0xF3,0x00, +0x00,0x54,0x55,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD2,0xF6,0x00,0x00,0x00,0xF3,0x5C,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD6,0x55,0xC6,0x00,0x00,0x00,0xF4,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x54,0xF6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, +0xF5,0x54,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x53,0xF6,0x5D,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF5,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0xF9,0xF5,0x00,0x00,0x00,0x00,0xB3,0xF7,0xDE,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0x00,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00, +0xF6,0x04,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF4,0x57,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x60,0xF6,0x54,0x00,0x00,0x00,0x54,0xF6,0xDF,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x55,0xDE,0x04,0x04,0x04,0x04,0x04,0xD0,0xF5, +0x00,0x00,0x54,0xF7,0xD9,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xF6,0x00,0xE1, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0xF5,0x00,0xD9, +0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0xD0,0x04,0x16,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x17, +0x04,0x17,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xD8,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x0A,0xF4,0x04, +0xDC,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x5A,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x54,0x00,0x56,0xD8,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0xC6,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x54,0x00,0x5B,0x04,0x00,0xF6,0x04, +0xF7,0x00,0xF4,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3, +0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0xD0,0xD7,0xB8,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xEC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x00,0x00, +0x49,0x04,0x00,0x00, +0x1B,0x00,0x00,0x00, +0x00, +0x00, +0x06,0x74,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, +0xB8,0x5D,0x17,0x17,0x5D,0xF7,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x54, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xB8,0xF2,0x04,0x04,0x04,0x04, +0x04,0x04,0xE1,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x17,0xDC,0xEF,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x55,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x60,0x5D,0x54,0x5D, +0x60,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDC,0xD6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5,0xDF,0xFA,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x57,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0xB8,0xD9,0xD9,0xDF,0xB8,0x55,0xF7,0x5A,0xD2,0x04,0xDE, +0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x58,0xDE,0x04,0xF2,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDE,0xD9, +0x17,0x00,0x00,0x00,0x00,0xDA,0xDC,0xEF,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD2,0x04,0x5B,0x00,0x5B,0xDA,0xD2,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x5E,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xB8,0xDC,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD8,0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0xD7,0xDB,0xB8,0x54,0x00,0x00,0x00,0x00,0xF3,0xDE,0x04,0x59,0x54,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF, +0x04,0x5A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x53,0xD3,0xD5,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xDE,0x57,0x54,0x00,0x00, +0x00,0xD6,0xD3,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0xDC,0xD9,0x58,0x00,0x00,0x00,0x59,0xD9,0xD7,0xF5,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xB8,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x56,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, +0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xC6,0x00,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF6,0xDC,0xDA,0x60,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xDE,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0xDD,0x5A,0x53, +0x00,0x00,0x00,0x00,0x54,0x54,0xF7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60, +0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDB,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, +0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xFF,0xFF,0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xD8, +0x17,0x00,0x00,0x00,0xD6,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, +0xF2,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD3,0xD6,0x00,0x00,0x00,0x00,0xF7, +0xD0,0xDB,0xDB,0xD0,0xF7,0x00,0x00,0x00,0x00,0x58,0xDE,0xDB,0xD8,0xD7,0x60,0xF3, +0x00,0x00,0x00,0x00,0x57,0xD0,0xF3,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xD9,0x56, +0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0xD0,0x53,0x54,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDE,0xDD,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x53,0xDC,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF7,0xD6,0xD7,0xD8, +0xD8,0xD7,0x12,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x53,0xB8,0xE1,0xDD,0xD8,0xD3, +0xDF,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, +0x00,0x00,0x00,0x00,0xB3,0x16,0xF2,0xD9,0xD9,0xDE,0x5D,0x53,0x00,0x00,0x00,0x00, +0x54,0xF5,0xDF,0xD2,0xD9,0xD9,0xDE,0xFA,0xB3,0x54,0x00,0x00,0x00,0xD0,0xDA,0xF7, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xE1,0xDD,0xD8,0xDC,0xD6,0x55, +0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDA,0xDE,0x53,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0xF6,0xD9,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3, +0x5B,0xD0,0xDC,0xD8,0xD9,0xD7,0xD6,0x56,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0x03,0x00,0x04, +0x04,0x04,0x04,0xDA,0xDB,0xD2,0xD6,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5, +0xFA,0xD0,0xDC,0xDA,0xD9,0xD3,0xE1,0x59,0x53,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0x04,0xD9,0xD3,0xD0,0x5E,0xF6,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x17,0x54,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xB3,0x59,0xE1,0xD7,0xD9,0xDA,0xD5,0xDE,0x60,0xF6,0x09, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x04,0xDE,0x00,0x00,0xF7,0xE1,0xD5,0xDA,0xDD,0xD6,0xF6,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0x04,0x5D,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xD2,0x00, +0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x59,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0x59,0xD0,0xDC,0xD8, +0xD8,0xD3,0xE1,0x5A,0xF3,0xC6,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x53,0x59,0xE1,0xF1,0xD8,0xD9, +0xF1,0xE1,0x59,0x53,0xF5,0xDF,0xD7,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0xD5,0xDB,0xF7,0x00,0x00,0x00,0x55,0xEF,0xD7,0xD9,0xDB,0xDE,0x59,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF7, +0xD6,0xD7,0xD9,0xDB,0xDE,0x5E,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0xD5,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, +0xD8,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x04,0xB8,0x00,0x00,0x00, +0x00,0x00,0x17,0x04,0xDF,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x0D, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xDF,0x04,0xDF,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0xDF,0x00,0x00,0xF3,0xD2, +0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD3,0xD8,0xD9,0xD7, +0xDF,0xF5,0x00,0x04,0xDE,0x00,0x04,0xDE,0x09,0xB8,0xE1,0xDC,0xD8,0xD5,0xD0,0x58, +0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD6,0xF1,0xD8,0xD9,0xF2,0x17,0xF5,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x0A,0xD7,0xD9,0xD8,0xD2,0x17,0xF5,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x57,0xD0,0xDD,0xDA,0xD5,0xD0,0x57,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x57,0xD0,0xDD,0xD8,0xD5, +0xE1,0xB8,0x00,0xF1,0xD7,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x17,0x04,0xD6,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x54,0x58,0xD0,0xDD, +0xDA,0xDB,0xDE,0x5A,0x00,0x54,0x00,0x00,0x04,0xDE,0x00,0x56,0xD0,0xD5,0xDA,0xDD, +0xD0,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x58,0xD0,0xD5,0xDA,0xD5,0xD0,0x56, +0xC6,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xC6,0x56,0xD0,0xDB,0xD9, +0xDE,0x56,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x54,0x59,0xDE, +0xDB,0x04,0xD5,0xD6,0xF5,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x17, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0xD9,0xF4,0x00,0x00, +0x00,0x00,0xD7,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x60,0x00,0x00, +0x00,0x00,0x00,0x5B,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0xF5,0x04,0xF2,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xD0,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD0,0x00,0x00,0x00, +0xFA,0x04,0x55,0x00,0x00,0x00,0x00,0xC6,0x56,0xF2,0x04,0x04,0x04,0xD9,0x5B,0x00, +0x00,0x00,0x00,0x00,0x00,0xFA,0xD9,0x55,0x00,0x00,0xF7,0xDB,0xD8,0xD0,0xE1,0xD9, +0xDB,0xF7,0x00,0x00,0xEF,0x04,0xDB,0xE1,0xD6,0xF1,0x04,0xDE,0xF3,0x00,0x54,0x58, +0xD9,0xD5,0xF7,0x00,0x00,0x00,0x00,0x00,0x5E,0x04,0x60,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xE1,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x5D, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x0A,0xDB,0xF3, +0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xDB, +0x56,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xDC,0x04,0x04,0x0A,0x0A,0x0A,0x0A, +0x0A,0x0A,0x0A,0x0A,0x00,0x53,0x59,0xD8,0xD9,0xD0,0xD6,0xDE,0x04,0xDC,0xF7,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xF6, +0xDE,0x04,0xD7,0xD6,0xE1,0xDC,0x04,0xDE,0xF4,0x00,0x00,0x00,0xB8,0xDC,0x04,0xD7, +0xD6,0xD6,0xDC,0x04,0xDE,0xF5,0x00,0x00,0x00,0x56,0x04,0xD6,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x5D,0xDA,0xD9,0xD0,0xD6,0xDE,0x04,0xDB,0x56,0x00,0x00,0x00, +0x00,0x00,0x00,0xDF,0x04,0x60,0x54,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0xD6,0xDA,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0x60,0xDC, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x60, +0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xDC,0x04,0xDC,0xD0,0xD6, +0xD6,0xD0,0xDB,0x04,0xDE,0x55,0x00,0x00,0x00,0x55,0xDA,0xD0,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0xB8,0x00,0x04,0xDC,0x0A,0x0A,0x0A, +0xE1,0xD2,0x04,0x04,0x17,0x54,0x00,0x00,0x00,0x00,0x5D,0xDB,0x04,0xDB,0xD0,0xD6, +0xD6,0xDE,0xD9,0x04,0xD2,0xF7,0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0xD6,0xD6,0xDE, +0xD5,0x04,0xD9,0x17,0x53,0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x57, +0xD7,0x04,0xD9,0xDE,0xD6,0xD6,0xD0,0xDB,0x04,0xDB,0x16,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, +0xF7,0xD5,0x04,0xDE,0xD6,0xDE,0x04,0xD7,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0xDF,0x04,0xD6,0x00,0x00,0x04,0xDC,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x56,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5, +0x04,0xDE,0x00,0x00,0x00,0xC6,0x56,0xD7,0x04,0xD9,0xD0,0xD6,0xD6,0xD0,0xDB,0x04, +0xD7,0x56,0x54,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0xB8,0xD2,0x04,0xD9,0xDE,0xD6,0xD6,0xDE,0xD8,0x04,0x04, +0x04,0x04,0xDE,0x16,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xB3,0xDE,0x04,0x59, +0x00,0x00,0x54,0xB8,0xD5,0x04,0xD2,0xD6,0xE1,0xD5,0x04,0xD6,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0x04,0xF2,0xD6,0xD6, +0xD3,0x04,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x5A,0x04,0x04,0xDF, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x04,0xD0,0x00, +0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2, +0xD4,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x04,0x0A,0x0A, +0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0xD2,0xD8,0xF6,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDF,0xD8,0x55,0x00,0x00,0x00,0x59,0x04,0x60,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x53,0xEF,0x04,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04, +0xDE,0x00,0x04,0xDE,0x16,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00, +0x00,0x53,0xDF,0x04,0xDA,0xDE,0xD6,0xE1,0xF1,0x04,0xDC,0x57,0x00,0x00,0x00,0x00, +0x00,0xDF,0xDA,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04,0xDE,0x00,0x00,0x53, +0xD6,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x54,0xF3,0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xD9,0xD8,0x59,0xDE, +0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0x04,0xF2, +0xF3,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x00,0x00,0x00,0x00,0x09,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0x54,0xF3,0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04, +0xDE,0xF5,0x00,0x00,0x04,0xDE,0x60,0x04,0xDB,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3, +0x00,0x00,0x54,0xF3,0xE1,0x04,0xDB,0xD0,0xD6,0xD0,0xD9,0x04,0x16,0xDE,0x04,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0xC6,0x56,0xD8,0xD9,0xE1,0xD6,0xDB,0xD8,0x57,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x54,0x54,0xEF,0x04,0xD9,0xD0,0xD6,0xDE,0xD4, +0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0x04,0xDC,0xB3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x04,0x58,0x00,0x00,0x00,0xF7,0x04,0x04, +0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2,0xD9,0xF7,0x00,0x00,0x00,0x55,0xDB, +0xD7,0xF4,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0xDB,0x04,0xE1,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x3E,0x54,0x00,0xD5,0xD0, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xDC,0x00,0x00,0x00,0x56,0x04,0x58,0x00, +0x00,0x00,0x00,0x56,0xD9,0xF2,0xB8,0xF3,0xB8,0xD7,0xDA,0x56,0x00,0x00,0x00,0x00, +0x00,0xF4,0xD5,0xDF,0x00,0x00,0xD0,0x04,0x57,0x00,0x00,0x57,0x04,0xD0,0x00,0x58, +0x04,0xDE,0xF6,0x00,0x00,0xF3,0xD6,0x04,0xD6,0x00,0x59,0xD8,0xDC,0xF7,0x00,0x00, +0x00,0x00,0x00,0xF4,0xD5,0xD7,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD8, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x17,0x5A,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x56,0x04,0x58,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0xD9,0xD5,0x56,0x00,0x00,0x00,0x00,0x59,0xD8,0xDC,0xF4,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0xF7,0xFC,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xB8,0xD4,0xD3,0xF7,0x00,0x00,0x00,0x59,0xD8,0xD7,0xB3,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xDE,0x04,0x60,0x00,0x00, +0x00,0xF3,0x12,0x04,0xE1,0x54,0x00,0xF6,0xDC,0xD8,0x5B,0x00,0x00,0x00,0x53,0xDF, +0x04,0xD0,0x00,0x00,0x00,0x00,0xDE,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x56, +0xDA,0xD2,0x55,0x00,0x00,0x00,0x56,0xD9,0xD5,0xF5,0x00,0x00,0x00,0x00,0x00,0xF3, +0xD2,0xD8,0xB8,0x54,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0xF7,0x04,0x0A,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x0A,0xD9,0x04,0xF1,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0x04,0xDB,0xEF,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xD0,0x56,0x00,0x00,0x00,0x00,0x00,0xB3,0x04, +0x04,0xDC,0xF7,0x00,0x00,0x00,0xD0,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0xF6,0xD9,0xDE,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF7,0xD7, +0x04,0xB8,0x54,0x00,0x00,0xEF,0x04,0xD5,0xFA,0xF3,0x00,0x00,0x00,0x00,0xF5,0x17, +0xD9,0xDB,0x56,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD0,0x04, +0xD0,0xB3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0xDB,0x60,0xF4, +0x00,0x00,0x00,0x00,0xB3,0x5A,0xDC,0x04,0xD6,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xD6,0x04,0x59,0x54, +0x00,0x00,0xDF,0x04,0x60,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xD2, +0xF3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0xF4,0xDD,0x04,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0xDE,0x00,0x00, +0x00,0x59,0xD8,0xDB,0x5E,0xF4,0x00,0x00,0x00,0x00,0xF3,0xFA,0xDB,0xD8,0x59,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, +0x58,0xD9,0xDA,0xDF,0xF6,0x00,0x00,0x00,0x54,0xF6,0x04,0x04,0x04,0xDF,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x0D,0x04,0xEF,0x00,0x00,0x00,0xF3,0xD3, +0xDA,0x5D,0x00,0x00,0x00,0xF4,0xD0,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0xF7,0xD8,0xD5,0x56,0x00,0x00,0x00,0x53,0x60,0x04,0xF2, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xDE,0x04,0x04,0xD5,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x04,0xD9,0xF3,0x00,0x00,0x00,0x00, +0x00,0xD2,0x04,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00, +0x00,0x00,0x00,0x53,0xDE,0xDA,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD9,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0xD5,0xE1,0x00,0x00,0x00,0x00,0x55,0xDA,0xE1,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x0A,0x04,0xDE,0xF7,0x00,0x00,0x00,0x00,0x56,0xDC,0x04,0x04,0xDE,0x00,0x04,0x04, +0x04,0xD0,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xD0,0x00,0x00,0x00,0x0D,0x04,0xDE, +0xF7,0x00,0x00,0x00,0x00,0x5B,0xD9,0xD9,0xF7,0x00,0x00,0x00,0xDF,0x04,0xDE,0xF7, +0x00,0x00,0x00,0x00,0x57,0xDC,0x04,0x04,0xDE,0x00,0x00,0xEF,0x04,0xD6,0xF5,0x00, +0x00,0x00,0xF5,0xD6,0x04,0xD6,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0xE1,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7,0xDB,0xDC,0x55,0x00,0x00,0x00,0x04, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x54,0x54,0xE1,0x04,0xE1,0xF6,0x00,0x00,0x00,0xF3,0x0A,0x04,0xDE,0x53,0x00, +0x04,0x04,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xD6,0x04,0xD0,0x00,0x54,0x54,0xE1, +0x04,0xE1,0xF5,0x00,0x00,0x00,0xF6,0xE1,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0xDE,0xD8,0xF7,0x00,0x00,0xB8,0xD8,0xDE,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x57,0x04,0xF2,0xF6,0x00,0x00,0x00,0xB8,0xD5,0x04,0x04,0x00, +0x00,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF3,0xD5,0x04,0x04,0xD6,0x00,0x00,0x00,0x17,0x04,0x04,0xDA,0x55,0x00,0x00, +0x00,0x00,0x00,0x00,0xB8,0xD8,0xDE,0x00,0x00,0x54,0xD0,0x04,0x56,0x00,0x00,0x00, +0x00,0x00,0x00,0xEF,0x04,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0xD0, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0x3B,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x16,0x04,0xF6,0x54,0x00,0xF5,0x04,0x17,0x00,0x00,0x00,0x00,0xD0, +0xDA,0x55,0x00,0x00,0x00,0xF7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDB, +0xF5,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0xDE,0xD9,0xF6,0x00,0x00, +0x00,0x00,0x53,0xDE,0x04,0xEF,0xDA,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x5A, +0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x53,0xDD,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04, +0x58,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x5A,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x55,0xD2,0xD8,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0xB8, +0x54,0x00,0x00,0x00,0x00,0x17,0x04,0x5A,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x59,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, +0x04,0xB8,0x54,0xDF,0x04,0x16,0x09,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x56,0x00, +0x00,0x00,0x58,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00, +0x00,0x00,0x00,0x5E,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD9,0xD2,0xF3, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xF3,0x00,0x00,0x00,0x00,0x54, +0x00, +0x56,0xD0,0xDA,0x04,0xD2,0x5A,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x59,0xD2,0x04,0xDA,0xE1,0x56,0x54,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x5A,0xDA,0xFA,0x00,0xF4,0xF7,0xF5,0x54,0x54,0xF3,0xF7,0x04,0x04,0x0A,0xF7,0x00, +0x00,0x00,0x56,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, +0x59,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDF,0x00,0x00, +0xFA,0x04,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDB,0xD5,0x55, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xEF,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x04,0xD7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0xD2,0x04,0x60,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0xF4,0xD9, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x55,0xDB,0xDB,0xF7,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x59, +0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0x04,0x04,0xDE,0x00,0x00,0x57,0xDA,0xD3,0xF7, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD7,0xD8,0x57,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD9,0xD9,0x57,0x00, +0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x04,0x04,0xD9,0x56,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x59,0x04,0xDE,0xB3,0x00,0x00,0x00,0x58,0x04,0xE1,0x00,0x00,0x00, +0x00,0x00,0xF5,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0xD6,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x57,0x00,0x00,0x00, +0x00,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0xDC,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0x00,0x55,0x04,0x04,0x04, +0xDA,0xF6,0x54,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xDF,0x00,0x00,0x00,0x00,0x60, +0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF3,0xD7,0xD2,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x56,0x00, +0x00,0x00,0x00,0x53,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDE,0xF4,0x00, +0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0x04,0xDE,0x00,0x04,0x04,0xDE,0x53,0x00,0x00, +0x00,0x00,0x00,0x53,0xD0,0x04,0x58,0x00,0x56,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00, +0x00,0x00,0x57,0xD9,0xDE,0x00,0x00,0x56,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xDB,0x04,0xDE,0x00,0x56,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xD6,0x04,0x57,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0x04,0xD0,0x53, +0x00,0x00,0x00,0x00,0x00,0x53,0xD0,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, +0x04,0x5B,0x53,0xF5,0xD7,0xD9,0x56,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, +0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x57,0x04, +0xD0,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x5A,0x54,0x04,0x04,0xD0,0x53, +0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x58,0x00,0x57,0x04,0xD0,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xDB, +0xDE,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x04,0x00,0x00,0x00,0x00,0xB3, +0xDD,0xDE,0xF6,0xD9,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x04, +0x04,0xD5,0xB3,0x00,0x00,0xD2,0xD2,0xB8,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x17,0x04,0xFA,0x54,0x59,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xDB, +0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x5B,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x69,0xFF,0xAD,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56, +0x04,0x57,0x00,0x00,0x00,0xF1,0xD0,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00, +0x00,0x00,0xD2,0xDD,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0x60,0x00,0xDB,0xD2, +0x00,0x00,0x00,0xC6,0xF2,0xDB,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0xB8, +0x04,0x04,0xD2,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x55,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xC3,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00,0xD7,0xDB,0x53,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0x04,0x0A,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF6, +0xDE,0xDA,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0xD7,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0x04,0xD6,0x00,0xDB,0x04,0xD6,0x0A,0x0A,0x0A,0x0A,0x0A,0xDC,0x04,0x0A, +0x0A, +0x00,0xE1,0xD4,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0xD7, +0xDB,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x00,0x00,0xD2, +0xD5,0xF4,0x00,0x00,0x00,0x00,0x00,0xD5,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x55, +0x04,0xE1,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x60,0x04,0xDF,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x59,0xF2,0x04,0x04,0xD0, +0x57,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0x00,0x00,0x00,0x57,0xD0,0x04,0x04,0xDE,0x59,0x53,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xEF,0xFA,0x00,0x00,0x00,0x00,0x00,0xF6,0xDB,0xFA,0x00,0x60, +0xD9,0x04,0xDA,0xD6,0xB8,0xDD,0x04,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0xD2, +0xDC,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xF1,0xDC,0x53,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0xF6,0xDB,0xDB,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD6,0x5A,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xDA,0xF7,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0xD9,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, +0xDC,0xD9,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x04,0xDE,0x00,0x58,0x56,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0x04,0xDE, +0x09,0x00,0x00,0xF3,0xD2,0x04,0x58,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0xDE,0xD9,0xF5,0x57,0x04, +0x17,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0xF7,0xD9,0xD7,0xF4,0x04,0xDE,0x00,0xF3,0xDC,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0xDC,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xD7,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0xF4, +0x0D,0x04,0xFD,0xF7,0x57,0xDA,0xF1,0xF3,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7,0xDB, +0xD5,0x55,0x00,0x00,0x00,0x00,0xFA,0xDD,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0xD9,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xD7,0xDB,0xB3, +0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xD6, +0x04,0xF7,0xB3,0xDC,0xF2,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04, +0xDF,0xF7,0x04,0xDF,0x00,0x00,0x00,0x00,0x5A,0x04,0x04,0xDA,0x04,0x59,0x00,0x00, +0x00,0x00,0x00,0x00,0xB3,0xF2,0xD4,0xB8,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x54,0x57,0xDA,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF2,0xD2,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x54,0x5A,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, +0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x16,0x04,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF7,0x04,0xD0,0x54,0xE1,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xE1,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, +0xDE,0x54,0xE1,0xD9,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x5E,0x57,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0xD9,0xB8,0xD0, +0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xD0,0xDA,0x55,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x55,0xDA,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0xD0,0x00,0xD0,0x04,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x55,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0xDC,0xD5,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF1,0xF1,0x00,0x00, +0x00,0x00,0x00,0x00,0x53,0xDB,0x04,0x00,0x00,0x00,0x54,0x59,0x04,0x5A,0x00,0xD6, +0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0xF4,0x59,0x04,0x57,0x00, +0x55,0x04,0x17,0x00,0xD2,0xD7,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xD2,0xD9, +0xB8,0xD5,0xD7,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x60,0x57,0x04,0xDF, +0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xD7,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0x04,0xD0,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00, +0xF3,0x55,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0x56,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xD6,0x04,0xDE,0x0A,0x0A, +0x0A,0xDC,0xD5,0x0A,0x0A,0x0A,0x54,0x59,0x57,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDC,0xF3,0xD0,0x04,0x56,0x00,0x00,0x56, +0xDA,0xD0,0x00,0xDB,0xD2,0x54,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x04,0x59,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD3,0xF1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04, +0x58,0x00,0x00,0x00,0x00,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, +0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xF4,0xDE,0x04,0x17, +0x00,0x00,0x00,0x00,0x00,0xDE,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xD0, +0x00,0xFA,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x0A,0xD6, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0xD9,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0x5B,0x04,0x16,0x00,0x00, +0x00,0x00,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00, +0x00,0x54,0xB8,0x60,0x0D,0x5E,0x04,0xDA,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF5,0x60,0xF1,0x04,0xD9,0xD6,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0xE1,0xD8,0x04,0xD7,0xFA,0xF4,0x00,0x00,0x00,0x00,0x00,0x00, +0xF1,0xD7,0x00,0x00,0x00,0x00,0x00,0x17,0xDE,0x00,0x58,0x04,0xF1,0x60,0x17,0xF1, +0x04,0x04,0x56,0x55,0xEF,0xDC,0xF7,0x00,0x00,0x00,0x54,0x5B,0x04,0x59,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x60,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0xF5,0x04,0xD0,0x00,0x17,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x54,0xB8,0x04,0x0D,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xFA, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x5D,0x04,0xDF,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0x16,0x00,0x00,0xD6, +0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x54,0xB8,0x04,0xD6,0x00,0xC6,0xD7,0xDC,0xB3,0x00,0x00, +0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xDA,0x56,0x00, +0x04,0xDE,0x00,0xFA,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x60,0x04,0xFA,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x59,0x04,0x04,0x56,0xF5,0x53,0xF5,0x56,0xDF,0xD5,0x04,0xD0,0xF6,0x00, +0x00,0xEF,0x04,0xFA,0x00,0x04,0xDE,0x00,0x00,0xF3,0xD2,0x04,0x57,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD5,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF5,0x04,0xD0,0x00,0x00,0x00,0x00,0x09,0xF5,0xD9,0xDE,0x00,0x00,0xDF, +0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x56,0x00,0xDC,0xF2, +0x00,0x00,0x00,0x00,0xE1,0x04,0xF6,0xF6,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xD9,0xD7,0xF3,0x53,0xDE,0xDA,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF3,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xDB, +0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF3, +0xDC,0xDC,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDC,0xD5,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, +0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xD5,0x00, +0xDC,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC, +0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xDE,0x00,0xDC,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7, +0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xD2,0xDB,0x00,0x04,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7, +0xD5,0x00,0xDD,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x04,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDE,0x04,0x0D,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF2,0x04,0x00,0x00,0x00,0x00,0xDE,0xD5,0xF3,0x00,0x56,0x04,0xDF,0x00,0x00, +0x00,0x00,0x00,0x00,0xF6,0xD8,0xD6,0x00,0xF4,0xD9,0xEF,0x00,0x5E,0x04,0xF7,0x00, +0x60,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD8,0x04,0x04,0x56,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0xF6,0x00,0xD7,0xD5,0xF3,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0xD8,0xDE,0x53,0x00,0x00,0x00,0x00,0x00,0x5B,0x04,0xDF,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xDE,0xDB,0xF7,0xC6,0x00,0x0A,0xE1,0x00,0x54, +0x53,0x53,0x57,0xDE,0xD9,0xDE,0xF7,0x00,0x00,0x00,0x56,0xFF,0xFF,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xDC,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0xF7,0xD4,0x04,0x04,0x04,0xD9,0xD6,0xD6,0xD9,0xD5,0xF7,0x00,0xD0, +0xDA,0xB8,0x53,0x00,0x00,0x53,0xD6,0x04,0x04,0x04,0xD2,0x53,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, +0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A, +0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDD,0xE1,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xD0,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xD0,0x04,0x0A,0x53,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00,0x00,0xDE,0xD9, +0xF7,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0xDB,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0xF3,0xDC,0xF1,0xB3,0x00,0x00,0x00,0x00,0xD7, +0xDC,0x53,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xE1,0x00,0x00,0xF3,0xE1,0x04,0x04, +0x04,0x04,0x04,0x04,0xF1,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xDB,0x04,0x04,0x04,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x5A,0x00, +0x00,0x00,0x00,0xF2,0x58,0x00,0xE1,0x04,0xF7,0x00,0x00,0xF5,0xD2,0x04,0x59,0x54, +0x00,0xFA,0xD7,0xE0,0x00,0x00,0x00,0xF3,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x58, +0x04,0xDF,0x00,0xDE,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDC,0xD2,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD9,0xF4,0x00,0x00,0x00,0x0A, +0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6,0x04,0xD2,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0xDA,0x57,0x5B,0x04,0xD0,0x53,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0xD6,0x04,0xF7,0x00,0x00,0x16,0x04,0x59,0x54,0x00,0x00,0x04,0xDE,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xDF,0x00,0x00,0x04,0xDE,0x00,0xD0, +0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xD8, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x59,0x54,0x00,0x00,0x00,0x55,0x04,0xDE, +0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x04,0xDF,0x56,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04, +0xD0,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0x59,0x54,0x00,0x55,0xDA,0xD6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x54,0xDE,0xDB,0xB3,0x00,0x03,0xDA,0xF6,0x00,0x00,0x54, +0xDD,0xF2,0x00,0x00,0xF2,0xD5,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, +0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04, +0xDA,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD6,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6, +0xDB,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x17,0x04,0x59,0x54, +0x00,0x00,0x00,0x00,0x00,0x59,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xDE,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00,0xD8,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xDE,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0xDA,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x04,0xDE,0x56,0xDA,0x04,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00,0xDA,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0xF3,0xFA,0xD2,0x04,0xD8,0xEF,0xF3,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, +0x00,0x00,0xF7,0x04,0x0D,0x00,0x00,0x00,0xF2,0xD5,0xF3,0x00,0x00,0x00,0x00,0x00, +0x16,0x04,0x57,0x00,0x00,0xD0,0xDC,0x00,0xDE,0xD7,0x00,0x00,0x55,0xD8,0x0A,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0x04,0xE1,0x00,0x00,0xFA,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x17, +0x04,0x17,0x00,0x00,0x00,0x00,0xDC,0xDA,0x04,0xF5,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0xF7,0x04,0xDA,0xFA,0x00,0x5A,0x04,0xFA,0xF3,0x57,0xDE,0x04,0x04, +0x04,0x04,0xD5,0x55,0x00,0x00,0x4D,0xF9,0x69,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD0,0xD7,0x00,0x00,0x00,0x59,0x04,0xB8,0x54,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF5,0xD0,0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xE1,0x04,0x53,0xF7,0xD0,0xDB,0xDB,0xD0,0xF7,0x00,0x00,0x56,0xD4,0xDC,0xB8,0x54, +0xB3,0xE1,0x04,0xD0,0xF3,0x17,0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A, +0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDB,0xF3,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD6,0x04,0xE1,0x53,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xFA,0x00,0x00,0xF7,0xD9,0xD0,0x00,0x00,0x00, +0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56, +0x04,0xDF,0x00,0xDE,0xDB,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xEF,0x00, +0x00,0x00,0x00,0x00,0x16,0x04,0x5A,0x00,0x00,0x00,0x00,0xDF,0x04,0x5D,0x00,0x00, +0x00,0x00,0x00,0xE1,0x04,0x5A,0x00,0x53,0xD0,0x04,0xD0,0xB8,0xF3,0xF5,0x59,0xD3, +0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x04,0x04,0x04, +0xF7,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x55,0x04,0x04, +0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xDC,0xD9,0x56,0xC6,0x00,0x00,0xDB, +0xF6,0x00,0xD0,0x04,0xF3,0x00,0x00,0x00,0xF7,0xD9,0xD0,0x00,0x00,0x00,0xD0,0x16, +0xC6,0x00,0x00,0x00,0xDF,0x04,0xD0,0xEF,0xEF,0xEF,0xEF,0xEF,0xD0,0x04,0xD6,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0x00,0xF7,0xF1,0xD9,0xF7,0x00,0xDB, +0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDB,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xF6,0xD9,0xDE, +0x00,0x00,0x00,0xF4,0xDB,0xDE,0x54,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0xF7,0xD9,0xD2,0xF3,0x00,0x00,0x04,0xDE,0x00,0xDD,0xD2,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD5,0x00,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0xF2,0x17,0xF4,0x00,0x00,0xDC,0xF1,0x55,0x5A,0x17,0xEF, +0xDF,0x5D,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xD5,0x00,0x04,0xDE,0x00, +0xF7,0xD0,0xDE,0xD7,0xD8,0x04,0xDE,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x55,0xDF,0xD9,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0xD7,0xDC,0xB3,0x00,0x00,0x00,0xD0,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00, +0x00,0xF5,0xD8,0xD0,0x00,0x00,0x59,0x04,0x59,0x54,0x00,0xB8,0x04,0xDF,0x00,0x00, +0x17,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2,0x04,0x04,0xD2,0xF3, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDD,0x04,0x04,0xD0,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0x0D,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x55,0xD9,0xDE,0x54,0x00,0x00,0x00,0x00, +0x00,0xDE,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0xD5,0xD7,0x54,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0xDE,0x00,0xD5,0x04,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x04,0xDC,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD5,0xD2,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, +0xDE,0x00,0x17,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x53,0x00,0x00,0x00,0x00,0x00,0x17,0x04, +0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xDB,0xD2, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0x04,0xD7,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD7,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF6, +0xD2,0x04,0xD3,0x60,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0xEF,0x04, +0xF7,0x00,0x00,0x00,0x5D,0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0xF2,0xDC,0x53,0x00, +0x00,0x5B,0x04,0x57,0xD4,0xDF,0x00,0x00,0x00,0xD0,0xDB,0xF4,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0xD5,0x04,0xD9,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x57, +0x00,0x00,0xF4,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xD8,0xB8, +0x54,0x00,0x00,0xDB,0x04,0x04,0xF4,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7, +0x04,0xDA,0x16,0x00,0x00,0xD6,0x04,0x04,0x04,0xD9,0xD6,0x56,0xF4,0x5A,0xD8,0xD6, +0x00,0x00,0xFF,0xFF,0xD8,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x17,0xDA,0xF4,0x00,0x00,0xF7,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x0A, +0xDB,0x04,0xFC,0xF6,0x00,0x00,0x00,0x54,0x00,0x00,0x54,0x53,0xB8,0x04,0x58,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0xD8,0xEF,0xD0,0x04,0xD6,0x53, +0x00,0xF4,0xDC,0xDC,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x57,0x04,0x59,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD6,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, +0x5A,0xDA,0xF1,0xF4,0x00,0x00,0x00,0x17,0x04,0x5A,0x00,0x00,0x00,0xDE,0x04,0x00, +0x00,0x00,0x00,0xF7,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x56,0x00,0x5A, +0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0xF4,0xDB,0xD2,0x00,0x00,0x00,0x00,0xF4,0xD2,0xD8,0x17,0x55,0xB3,0xF7,0xE1,0x04, +0xDE,0xB3,0x00,0x5B,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0xF6,0xD3,0xD8,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xFA,0xD7,0x04,0xDA,0xD0,0xB8,0x00, +0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD6,0xD8,0x04,0xD7,0xFA,0xF4,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0xB8,0xDB,0xDB,0x56,0x00,0x00,0x04,0x53,0x00,0x0A,0x04, +0xF7,0x00,0x00,0x00,0x00,0xD6,0xDA,0x55,0x00,0x00,0x56,0xF2,0x00,0x00,0x00,0x00, +0x55,0xD8,0xD6,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0xF7,0x00,0x00,0x00,0x00,0x04, +0xDC,0x0A,0x0A,0xD6,0xE1,0xF2,0xDA,0xDB,0x57,0x00,0x00,0xDA,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, +0x54,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x56,0xD8,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x60,0x04,0x58,0x00,0x00,0x00,0x00, +0xEF,0x04,0xB8,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xF3,0xD2,0xD8, +0xB8,0x00,0x00,0x00,0x04,0xDE,0x00,0xDA,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0xD6, +0xD0,0xDB,0x04,0xD2,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0xF5,0x17,0xDA,0xD7,0xF3,0x00,0x00,0x00,0x00,0x55,0x60,0xDE,0xDA,0x04,0xB6,0xB8, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x57,0x04,0xDF, +0x00,0x00,0x00,0x00,0x58,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x5C, +0x00,0x00,0xF6,0xDA,0xD6,0x00,0x00,0x60,0x04,0x56,0x00,0x00,0x56,0x04,0x17,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x58,0xD6,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF4,0xDC,0xD2,0x53,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x03,0x04,0xB8,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xFA,0x04,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x55,0x04,0xD0,0x00,0xD0,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, +0xF5,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, +0xDE,0x00,0xD0,0x04,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0x04,0xD0,0x54, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0xD4,0x55,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0x04,0x00,0x04,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC, +0xD7,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x53,0xD0, +0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00, +0x00,0x00,0xD2,0x04,0xF6,0x00,0x00,0x00,0x00,0x00,0x0D,0x04,0xB8,0x00,0x04,0xF1, +0x54, +0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD5,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF7,0x04,0xD0,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0x04,0xD0,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF7,0x04,0x04,0x00,0x04,0xD2,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xDF,0x53,0x00, +0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0xF4,0xDB,0xDE,0x00,0x00,0x00,0x00, +0xF4,0xDB,0xDE,0x54,0x00,0x00,0x00,0xF7,0x04,0xDF,0x00,0x00,0x00,0xF6,0xD8,0x04, +0x04,0xB8,0x00,0x00,0x00,0x59,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD8, +0x5A,0xD8,0xDE,0x53,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0x00,0x00,0x00,0xEF, +0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDB,0xD7,0xF4,0x00,0x00,0x53, +0x16,0x04,0x17,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD2,0xD9,0xF7,0x00,0x00, +0x00,0x00,0x5A,0xDF,0x5D,0xF6,0x00,0x00,0x00,0x00,0xFA,0x56,0x00,0x00,0xFF,0xFF, +0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xB8,0x00, +0x00,0xB3,0x04,0xEF,0x00,0x00,0x00,0x00,0xF7,0xDE,0x04,0xDA,0xD9,0xD6,0xF6,0x00, +0x00,0x00,0x00,0x57,0xDF,0xDF,0x57,0x00,0x54,0xDE,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xF7,0xD0,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x5D,0x04, +0x17,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0xF4,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x58,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53, +0xD5,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xD0,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0xFA,0xD6,0xD2,0x04,0xF1,0xF7,0x00, +0x00,0x00,0x00,0xB3,0xD2,0xD5,0xF6,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xD7, +0xDA,0x5E,0x00,0x00,0x00,0xF3,0x0A,0x04,0xD0,0x00,0x00,0x53,0xD2,0xD8,0x5A,0x00, +0x00,0x00,0x53,0xDF,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57, +0x00,0x00,0x00,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xDE, +0xD8,0xF6,0x00,0x00,0x00,0x00,0x00,0x53,0x59,0x04,0x17,0x00,0x04,0xDE,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0xDE,0x04,0x04,0xDE,0x58,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, +0x00,0x57,0xD0,0x04,0x04,0xDE,0x58,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x54,0xB8,0xDB,0xD9,0xF7,0x00,0xD9,0xF6,0x00,0x58,0x04,0x17,0x00,0x00,0x00, +0x00,0x56,0x04,0x17,0x00,0x00,0xF4,0xD9,0x00,0x00,0x00,0x00,0x54,0xE1,0xD9,0xF6, +0x00,0x00,0x09,0xF5,0xDB,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xC6,0xF2,0xD9,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x00,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x57,0x00,0xD9,0xD2,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xDC,0x04,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xFA,0x04,0xE1, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x53,0xF1,0xD3,0x53,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00, +0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xDF,0x04,0x17,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xD2,0xD5,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xE1,0x04, +0xDF,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF2,0xDB,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04, +0x5D,0x00,0x00,0x00,0xDF,0xD8,0x04,0xD2,0xDF,0xB8,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00, +0x53,0xDC,0xD7,0x54,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x55,0x00,0x00,0x00,0xF2, +0xD3,0x00,0x00,0xD0,0xDB,0xB3,0x00,0x00,0x53,0xD5,0xF2,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDF,0x04,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF5,0xDB,0xF2,0x00,0x55,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x5A,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x53,0xDC,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x54,0xB8,0x04,0xD6,0x00,0x00,0x00,0x00,0xD6,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x57,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5,0x04, +0xDE,0x00,0x04,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x54,0x00,0xD0,0x04,0x57,0x00, +0x57,0x04,0xDE,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDE,0x00,0x00,0x57, +0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0x04,0xDE,0x00,0x58,0x04, +0xD6,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x12,0x04,0x57,0x00,0x00,0x00,0x04,0xDE, +0x00, +0x00,0x00,0x00,0x59,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04, +0x04,0x00,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xE1,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0xF6,0xDC,0xDB,0xF7,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x55,0xDA,0x04, +0x5A,0x00,0x00,0x00,0x00,0x00,0xD2,0xD8,0xF4,0x00,0x04,0x04,0xB8,0x00,0x00,0x00, +0x00,0x00,0x56,0x04,0xD0,0x00,0x59,0x04,0xD0,0x54,0x00,0x00,0x00,0x00,0x54,0x53, +0xD0,0x04,0x58,0x00,0x04,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x54,0x53,0xD0,0x04, +0x57,0x00,0x58,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x00,0x53,0xD0,0x04,0x04,0x00, +0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0xD0,0x04,0xF4,0x00,0x00,0xF4,0x5B,0x56,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDE,0x04,0x00,0x00,0x5B,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0xB8, +0x00,0x00,0x00,0xDF,0x04,0xF7,0x00,0x00,0x00,0x00,0xDE,0x04,0xDC,0x00,0x00,0x00, +0x00,0xF3,0xD5,0xD0,0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0xDF,0x00,0x16,0x04,0x17, +0x54,0x00,0x00,0x00,0x5B,0x04,0x60,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x0A,0x54,0x00,0x00,0xF3,0x04,0xD0,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0xFF,0xFF,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x58,0xFA,0x04,0xDF,0x58,0x58,0x58,0x04,0xF2, +0x58,0x58,0x00,0xF5,0xDC,0x04,0xD2,0xFA,0xF6,0x00,0x00,0x00,0x00,0xF3,0xD0,0x04, +0xDA,0x04,0x04,0xD0,0xF3,0x57,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xD6,0x04,0xDE,0xDB,0xDA,0xDF,0x53,0x00,0x53,0xD2,0xDC,0xF6,0x00,0x00, +0x00,0x00,0x00,0x17,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3, +0x04,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD9,0xF3,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xDE, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00, +0x56,0xDA,0xD6,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xE1,0x04,0x04,0xD3,0xD6, +0xE1,0xDC,0x04,0xDE,0xF5,0x00,0x00,0x00,0xB8,0xD8,0x04,0xD2,0xD6,0xD6,0xF1,0x04, +0xF2,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x54,0x00,0x00,0x00, +0xF6,0x04,0x04,0xDE,0xD6,0xD0,0x04,0x04,0x55,0x00,0x00,0xDB,0xF2,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF5,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0xB8,0xE1,0xD8,0x04,0xD2,0x5C,0xF3,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x5A,0xD2,0x04,0xD4,0xE1, +0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x57, +0x04,0xE1,0x00,0xD2,0x59,0x54,0x53,0xD7,0xDB,0xF7,0x00,0x00,0x00,0x53,0x04,0xD3, +0x00,0x00,0xF4,0xD8,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0x17,0x00,0x00,0x00,0x16, +0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xB3,0x55,0x5A,0xDC,0xDB, +0xF7,0x00,0x00,0xDE,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xB3,0xD9,0xD2,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xDA,0xF5,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x17,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x58,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x54,0xD0,0xD9,0xF6,0x00,0x04,0xDE,0x00, +0x04,0xDE,0x00,0x00,0x56,0xDA,0xDE,0x53,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xDE, +0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xDA, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0xD7,0xD9, +0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xD9,0xDE, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0xE1,0x00,0x00,0xFA, +0x04,0xD0,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x55,0xD8,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDA,0x57, +0x54,0x00,0x00,0x00,0x54,0xDC,0xD2,0x00,0x00,0x00,0x00,0xDF,0x04,0xF7,0xF3,0xD9, +0xD0,0x00,0x00,0x00,0x00,0xE1,0x04,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD4, +0x04,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57,0x54, +0x00,0xEF,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDB,0x55, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x58, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xDE,0x00,0x00,0x00,0x00,0xDE,0xD9, +0xF6,0x00,0x00,0xF5,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xD6, +0x04,0xDE,0xF7,0x00,0x00,0x00,0x00,0x57,0xF1,0x04,0x04,0xDE,0x00,0x04,0x04, +0x04,0xD0,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xE1,0x00,0x00,0x00,0x0A,0x04,0xD0, +0x55,0x00,0x00,0x00,0x00,0x59,0xDB,0xDB,0xF7,0x00,0x00,0x00,0x0A,0x04,0xDE,0x55, +0x00,0x00,0x00,0x00,0x59,0xD5,0x04,0x04,0xDE,0x00,0x00,0xD0,0x04,0xEF,0xF4,0x00, +0x00,0x00,0xF5,0x12,0x04,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0xD0,0x04,0xD6,0xF4,0x00,0x00,0x00,0xF6,0xE1,0xD4,0x04,0x04,0x00,0x04,0x04, +0xD7,0xF7,0x00,0x00,0x00,0x55,0xD7,0x04,0x56,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x56,0xDA,0xD2,0xF3,0x00,0x00,0x00,0x04, +0xDE,0x00,0x04,0x04,0xD0,0xF3,0x00,0x00,0xF4,0xD0,0x04,0x04,0xDC,0xF7,0x00,0x00, +0x00,0x5E,0x04,0xE1,0x00,0x00,0x04,0x04,0xD7,0xF7,0x00,0x00,0x00,0xF7,0xD7,0x04, +0x59,0x00,0x00,0xD0,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xE1,0x04,0xD0,0x00,0x00, +0x04,0x04,0x04,0xE1,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xE1,0x00,0x00,0x00,0xD0, +0x04,0xE1,0xF5,0x00,0x00,0x00,0xF6,0xE1,0x04,0x04,0x04,0x00,0x04,0x04,0xDE,0xF6, +0x00,0x00,0x00,0x0A,0x04,0x57,0x53,0x00,0x5A,0x04,0xDF,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, +0x54,0xF2,0xDD,0xB3,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x54,0x53,0xDC, +0xF2,0x00,0x00,0x00,0x00,0x00,0xFA,0xDA,0xEF,0x00,0x00,0x00,0x00,0x00,0xEF,0xDA, +0x55,0x00,0x00,0x00,0xF7,0xD9,0xD2,0xB3,0x00,0x00,0xDE,0xD8,0xB8,0x54,0x00,0x54, +0xF2,0xD8,0xF6,0x00,0x00,0x00,0x00,0x54,0xD0,0xD8,0x55,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xD6,0x04,0x57,0x54,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x74,0xEC,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0xDA,0x04,0x04,0xDA,0xDA,0xDA,0x04,0x04,0x04,0x04,0x00,0x60, +0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xD6,0xF6,0xF6,0xD6,0x04, +0xDF,0x00,0xD2,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0xD6, +0x00,0xF6,0xD0,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55, +0xD4,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0x00,0x00, +0x56,0x58,0x00,0x57,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x59,0x54,0x00,0x00,0xD9,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0xD0,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xD9,0x00,0x00,0x00,0x00, +0x00,0x00,0xF3,0x56,0xD2,0xD8,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x57, +0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x60,0x04,0xDF,0xDE,0xDB,0xD9,0xF2,0x16,0xF3, +0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0xDC,0xD9,0xD2,0x17,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0xB8,0x54,0x00,0x00,0xE1,0x04,0x5A,0x00, +0x00,0x00,0x59,0x04,0xD0,0x00,0x00,0xD9,0xDE,0x54,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0x04,0xD0,0x00,0xD5,0xD0,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x55,0xDF,0xDB,0x04,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x04,0xDB,0x0D,0x55,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x57,0xEE,0xF5,0x54,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0xDF, +0xDE,0x00,0x00,0xB8,0xD8,0xD3,0xF7,0x00,0x00,0xF7,0x04,0x04,0x57,0x00,0x57,0xD7, +0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDD,0xF3,0x54,0x53,0xD3,0xD7,0x53,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x17, +0x04,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x0D,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0xDE,0x00,0x00,0xF3,0xDE,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD0,0xD9,0xF5,0x00, +0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x60,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0xF4, +0xD7,0xD9,0xF7,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xFA,0x04,0x60,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xFA,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x0A,0x04,0x5B,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x17,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xD0,0x00,0x00,0xD7,0xD5,0xF4,0x00,0x00, +0x00,0x00,0x00,0x00,0x53,0x54,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x17,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xD0,0x00,0x00,0x00,0x00, +0xB8,0x04,0xDF,0x00,0x00,0x00,0x00,0x56,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x00, +0x00,0x5A,0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0xF3,0xD2,0xD8,0xB8,0x55,0xD9,0xD7, +0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x00,0x00,0x00,0xF6,0xD9,0xF2, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xE1,0x00,0x00,0x00,0x00, +0xDB,0xB6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD7,0x53,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x55,0x04,0xD0,0x00,0x00,0x00,0x00,0x59,0x04,0x60,0x00,0x00,0x16, +0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDF,0x04,0xDA, +0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04,0xDE,0x00,0x04,0xDE,0xFA,0xD4,0xD9,0xD0, +0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00,0x00,0x53,0xDF,0x04,0xD8,0xDE,0xD6,0xD6, +0xD7,0x04,0xDC,0xB8,0x54,0x00,0x00,0x00,0x00,0xDF,0xDA,0xD8,0xDE,0xD6,0xE1,0xD7, +0x04,0xD5,0x56,0x04,0xDE,0x00,0x00,0xF3,0xE1,0x04,0xDB,0xD0,0xD6,0xD0,0xDB,0xDA, +0xD6,0xF3,0x00,0x00,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x0A,0x00,0x00,0xF4,0xD0,0x04, +0xDB,0xD0,0xD6,0xD0,0xD9,0xD9,0x59,0xDE,0x04,0x00,0x04,0x04,0x04,0xD9,0xD0,0xD6, +0xD0,0xD9,0x04,0x17,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x17,0x04,0x12,0x54,0x00,0x00,0x04,0xDE,0x00,0x04,0x04, +0x04,0xDC,0xD6,0xD6,0xDC,0x04,0x60,0xB8,0xDB,0xD9,0xD0,0xD6,0xF2,0x04,0xD7,0x55, +0x00,0x00,0x04,0x04,0x04,0xD9,0xD0,0xD6,0xD0,0xD9,0x04,0xDF,0x00,0x00,0x00,0xF3, +0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xD0,0xF4,0x00,0x00,0x04,0xDE,0xFA,0xD4, +0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00,0x00,0xF3,0xE1,0x04,0xD9,0xD0, +0xD6,0xD0,0xDB,0x04,0x60,0xDE,0x04,0x00,0x04,0x04,0x04,0xDB,0xD6,0x56,0x00,0xF7, +0xDB,0xD9,0xE1,0xE1,0xD9,0xD5,0x55,0x00,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xB8,0x04,0xDF,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0xF5,0x00,0x57,0x04,0xF9,0x00,0x00,0x00, +0x00,0x00,0xF6,0xF9,0xF7,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0x17,0x00,0x00,0x53, +0xDE,0xD9,0xF7,0x00,0x00,0x00,0x55,0xDB,0xD7,0xF3,0x00,0xB8,0x04,0xD0,0x00,0x00, +0x00,0x00,0x00,0x00,0x57,0x04,0xDF,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6, +0x04,0xDD,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x3B,0x56,0x94,0x00,0x04,0xDE,0x00,0x04,0xDE,0xDE,0x04,0x53,0xF6,0x55, +0x55,0xDE,0xDE,0x55,0x55,0x55,0x17,0x04,0xB8,0x55,0x00,0xD0,0xDA,0xF6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDD,0xD3,0x53,0x00,0x00,0x53,0xF1,0xDC,0x00,0x5A,0x04, +0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0xD5,0xF4,0x00,0x00,0xF3,0xDC, +0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x58,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x5A,0x00,0x00,0x00,0x17,0xDD,0x55,0xDC, +0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x53,0xD5,0xE1,0x00,0x00,0x00,0xD7,0xD5,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0x04,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD5,0xD7,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDB,0x00,0x00,0xF4,0xF3,0x00,0x00,0x00,0x00, +0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xF1,0xD7,0xF4,0xDE,0x04,0x00, +0x00,0x00,0x00,0x57,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xB3,0xF2,0xDA,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0xDA,0xE1,0x00,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0xD2, +0xD9,0x00,0x00,0xD7,0xD5,0x53,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0xEF,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF5,0x16,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDC,0x16,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16, +0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x55,0xD9,0x60,0x00,0x00, +0x58,0xD9,0xD8,0xD0,0xD6,0xDD,0xDE,0xD7,0xE1,0x53,0xDE,0xDF,0x00,0x00,0x00,0x00, +0x00,0x00,0x5A,0x04,0x5B,0x00,0x58,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x00,0xF6,0xDB,0xD5,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x56,0xD6,0x58,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xD2,0xDA,0xF7,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xD8,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7, +0xE1,0x0D,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x55,0xDC,0xDB,0xF7,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xD7,0xD3,0x53,0x04,0xDE,0x00,0x04,0xDE,0x00,0x0A,0x04,0xFA,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF4,0xF1,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xDC,0xF3,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF2,0xD8,0x00,0xF7,0xDA,0xDC,0xF6,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF6,0xDC,0xD9,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0xE1,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0x17, +0x59,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xB3,0xDC,0xDC,0xB3,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD4,0x55,0x00,0x00,0x00,0x17,0x04,0x57,0x00, +0x00,0x00,0x00,0xB3,0xDB,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0xF6,0x04,0xE1, +0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xDF,0x00,0x00,0xFA,0x04,0xEF,0x00,0x00,0x00, +0x00,0x00,0x00,0xEF,0x04,0x57,0x00,0x00,0x00,0x00,0xDF,0x04,0x59,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xDA,0x56,0x00,0x00,0x00,0xD2,0xDB,0xB3,0x00, +0x00,0x00,0x00,0x00,0xF7,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x57, +0x04,0xD6,0x00,0x00,0x00,0x00,0xB3,0xDC,0xF1,0x53,0x00,0xD7,0xDD,0xF3,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD7,0xD9,0xD9,0xF2, +0x17,0xF4,0x00,0x04,0xDE,0x00,0x04,0xDE,0x54,0xB8,0xE1,0xDD,0xDA,0xD5,0xD0,0x58, +0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD3,0xD9,0xD9,0xF2,0x17,0xF5,0x00, +0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD7,0xD9,0xD9,0xD2,0xDF,0xF6,0x00,0x04, +0xDE,0x00,0x00,0x00,0x54,0x57,0xD0,0xDD,0xD8,0xDC,0xD0,0x57,0x00,0x00,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x59,0xD0,0xD5,0xD8,0xDC, +0xD6,0xF7,0x00,0xDE,0x04,0x00,0x04,0xDE,0xF5,0xDF,0xD3,0xD9,0xD5,0xD0,0x57,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x53,0xDE,0x04,0x59,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x55,0xD0,0xDB,0xD9, +0xDE,0x59,0x00,0x00,0xF7,0xD0,0xDB,0xD8,0xF1,0xEF,0xF6,0x00,0x00,0x00,0x04,0xDE, +0xF3,0x60,0xD2,0xD9,0xD5,0xD0,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0xD0,0xDC, +0xD8,0xD5,0xD0,0x59,0x00,0x00,0x00,0x00,0x04,0xDE,0x54,0xB8,0xE1,0xDD,0xDA,0xD5, +0xD0,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xD0,0xDD,0xD8,0xD5,0xD0,0x56, +0x00,0xDE,0x04,0x00,0x04,0xDE,0xB8,0xD7,0x04,0x17,0x00,0x00,0xF7,0xD0,0xD9,0xDB, +0xD0,0xF7,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xD6,0x04,0x55,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x58,0x04,0xFA,0x00,0xE1,0xD8,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD7,0x00,0x00,0x60,0x04,0x60,0x00,0x00, +0x00,0x00,0x00,0x5D,0x04,0x0D,0x00,0xD6,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xD7,0xD5,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x8C, +0x3B,0x00,0x04,0xDE,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0xEF,0xDB,0x00, +0x00,0x00,0x56,0x04,0x58,0x00,0x00,0xD0,0x04,0xF3,0x00,0x00,0x00,0x00,0xD0,0xD7, +0x00,0xD9,0xDE,0x00,0x00,0x00,0x54,0xDE,0xD9,0x00,0xF3,0xDC,0xD6,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x53,0xDE,0xD9,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xF6,0xD5,0xDD,0x55,0x00,0x00,0x00,0x00, +0x54,0xB8,0xD9,0xDE,0x53,0x00,0x00,0x00,0xB3,0x04,0x04,0x04,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xD6,0xD9,0xF4,0x00,0x00,0xD6,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0xDF, +0x04,0x5E,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00, +0x00,0x55,0xDA,0xDE,0x00,0x00,0xDE,0xD3,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00, +0x00,0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xF6, +0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9, +0xD0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, +0xD4,0x55,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0x00,0xDF, +0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x57,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00, +0x00,0x00,0x00,0xF6,0xD9,0xF2,0x00,0x00,0x5B,0xDA,0x5E,0x00,0x00,0xF7,0xE1,0xD5, +0xD9,0xD0,0x55,0x00,0xF3,0x04,0xD5,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xDD, +0xD2,0x00,0xDE,0xDB,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0xE1,0x00,0x00,0x00,0xFA,0x04,0xD2,0x55,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x09,0xB8,0xD5,0xDB,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF3,0xE1,0x04,0xEF,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04, +0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD2,0x04,0x59,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x54, +0xB8,0xD9,0xD7,0xF5,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x16,0x04, +0x04,0x04,0xDE,0x00,0x04,0xDE,0x57,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x56,0xD8,0xD7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF7, +0xDC,0xDA,0x57,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xD9, +0xF1,0x00,0x00,0xDF,0x04,0xF2,0xF6,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55, +0xF2,0x04,0x16,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, +0xFA,0x00,0x00,0xDC,0xDC,0xB3,0x00,0x00,0x00,0x54,0xF7,0x04,0xD6,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x59,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x57,0x04,0xDF,0x00,0x00,0x54,0xDE,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00, +0xD0,0x04,0x04,0xD3,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDB,0x53,0x00,0x00,0xC6, +0xB8,0xD8,0xD2,0xB3,0x00,0x00,0x00,0xDE,0x04,0x56,0x00,0x00,0x00,0x00,0x55,0xD9, +0xDE,0x00,0x00,0x00,0x00,0x00,0xF5,0xDB,0xD7,0x53,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF6,0xD9,0xD2,0xB3,0x00,0x00,0x17,0x04,0x59,0x00,0x00,0x00,0x00,0x00, +0xC3,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x5A,0x00,0x00, +0x00,0x00,0x00,0x17,0x04,0x59,0x57,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0xC8,0xE3,0x00,0x04,0xDE, +0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x5A,0x04,0xF7,0x00,0x00,0xF5,0x04, +0x17,0x00,0x00,0x17,0x04,0x57,0x00,0x00,0x00,0xF4,0xDB,0xDE,0x00,0xDE,0xDA,0x56, +0x54,0x00,0xB8,0xD4,0xDE,0x00,0x00,0x16,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDE,0xD9,0xF7,0x54,0x00,0xB8,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x57,0x04,0xD2,0x55,0x00,0x00,0x00,0xF7,0xDC,0xD5,0xF7, +0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x59, +0x00,0x00,0xF7,0xD9,0xDD,0x56,0x00,0x00,0x00,0x00,0x5C,0xD4,0xDC,0xF5,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x56,0x04,0xD7,0x55,0x00,0x00,0x00,0x55,0xD2,0x04,0x57, +0x00,0x00,0xEF,0x04,0x59,0x00,0x00,0x00,0x17,0x04,0x17,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xDC,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04,0x16,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xEF,0x00,0x00, +0xD0,0x04,0x59,0x00,0x00,0x00,0x59,0xDA,0xD0,0x00,0x00,0xF6,0xD5,0xDB,0x57,0x00, +0x00,0x00,0xF3,0xDF,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD7,0xD8,0x5A,0x54,0x00,0x54,0xF5,0xD0, +0x04,0x5A,0x00,0x00,0x00,0x17,0x04,0xDE,0x56,0x00,0x00,0x00,0x00,0x00,0xB3,0x59, +0xD7,0xDB,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x60,0x04,0x0A, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xB3,0xD6,0x04, +0x5D,0x00,0x00,0x00,0x00,0xDF,0x04,0xDD,0x5A,0xF3,0x00,0x00,0x00,0x00,0xF4,0x60, +0xD9,0xD9,0x56,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0x00,0xB3,0x58,0xD2,0x04, +0xD0,0xB3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x53,0xD0,0x04,0xDB,0xFA,0xF3, +0x00,0x00,0x00,0x00,0xB3,0x5A,0xDC,0x04,0x60,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x5B,0x04,0xD0, +0x53,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xDB,0x04,0x04,0xDE,0x00, +0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x59,0xD9,0xDB,0x5E,0xF4,0x00,0x00,0x00,0x00,0xF5,0x17,0xD9,0xD8,0x59,0x54, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF4,0xD0,0x04,0xEF,0x00,0x00,0x53, +0xD6,0x04,0xDC,0x5A,0xF3,0x00,0x00,0x00,0x00,0xF3,0x5C,0xDD,0x04,0xEF,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xFA,0xD8,0xDC,0xF5,0x00,0x00,0xDF, +0x04,0x0D,0x53,0x00,0x54,0xF5,0xDE,0x04,0x57,0x54,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0xDE,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD3, +0xD5,0xF3,0x00,0xF5,0xD4,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04,0x04,0xD6, +0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x56,0x00,0x00,0xB3,0xD2,0xD8,0xB8,0x54, +0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00,0x00,0xD6,0x04,0x56,0x00,0x00,0x00, +0x00,0x00,0x00,0x17,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16, +0x04,0x5E,0x00,0x00,0xF6,0xDB,0xDB,0x56,0x00,0x00,0x00,0xF5,0xDB,0xD6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x53,0x17,0x04,0xD7,0xF3,0x00,0x00,0x00,0x00,0x00,0xF6, +0xD9,0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xFA,0x5D,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xD2,0xD8,0xF7,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x00, +0xD5,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x55,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x04,0xDE,0x00,0x04,0x04,0x04, +0x04,0x00,0x00,0x00,0x00,0xF7,0x04,0x59,0x54,0x00,0x00,0xD3,0xD0,0x00,0x00,0xF6, +0xF1,0xD3,0x56,0xF3,0x55,0xD0,0x04,0x5A,0x00,0xB8,0xDB,0xD9,0xE1,0xE1,0xD9,0xDB, +0xB8,0x54,0x00,0xF4,0xDB,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD9,0xDB, +0xE1,0xE1,0xD9,0xD9,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x59,0xD9,0xDC,0x56,0x00,0x57,0xDB,0xD5,0xB8,0x54,0x00,0x00,0x00,0x0A, +0x0A,0x04,0x04,0x04,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD5,0xE1,0x00,0x00,0x00,0x59, +0xD8,0x04,0xDE,0xD6,0xD6,0xD7,0x04,0xD5,0xB8,0x54,0x00,0x0A,0x0A,0x0A,0x04,0xDE, +0x00,0x00,0x5E,0xD4,0xD9,0xD0,0xD6,0xD0,0xD9,0x04,0x60,0x00,0x00,0x00,0x55,0xDC, +0xD4,0xD0,0xD6,0xDE,0x04,0xD7,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, +0xD5,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0xF7,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0xB8,0x54,0x00,0x00,0x00,0x00, +0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x04,0xD9,0x00,0x00,0x55,0xF1,0x04,0xDE, +0xD6,0xDE,0x04,0xDC,0x55,0x00,0x00,0x00,0xB8,0xD5,0x04,0xDE,0xD6,0xE1,0xDC,0x04, +0xDE,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x56,0xDB,0x04,0xD2,0xD6,0xE1,0xD5,0x04,0xD6,0x00,0x00,0x00, +0x00,0x00,0x58,0xDC,0x04,0xDD,0xD0,0xD6,0xD6,0xD0,0xDB,0x04,0xDE,0xF7,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD9,0x04,0x04,0xF7,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0xD6,0xD0,0xDD,0x04,0xDE,0xB3,0x00,0x00,0x00, +0x00,0x00,0x5D,0xDB,0x04,0xDB,0xD0,0xD6,0xD6,0xDE,0xD9,0x04,0xD2,0xF7,0x00,0x00, +0x00, +0x04,0xDC,0x0A,0x0A,0xD6,0xE1,0xDE,0xDB,0x04,0xD9,0x17,0x53,0x00,0x00,0x00, +0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x57,0x54,0x04,0xDC,0x0A,0x0A,0x0A, +0x0A,0x0A,0x0A,0x57,0x54,0x00,0x00,0xB3,0xEF,0x04,0x04,0xD9,0xDE,0xD6,0xD6,0xD0, +0xDB,0x04,0xD7,0x57,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x0D,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x58,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x04,0xDE,0x00,0x04,0x04,0x04,0x5A, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xB8,0xD2, +0x04,0xD9,0xDE,0xD6,0xD6,0xDE,0xD9,0x04,0xD7,0x56,0x00,0x00,0x00,0x00,0x04,0xDC, +0x0A,0x0A,0x12,0xD6,0xDE,0xDB,0x04,0xD2,0xF5,0x00,0x00,0x00,0x00,0x5E,0xDB,0x04, +0xDB,0xD0,0xD6,0xD6,0xD0,0xDB,0xDA,0xDB,0x5C,0x00,0x00,0x00,0x00,0x04,0xDC,0x0A, +0x0A,0x12,0xD6,0xDE,0xDB,0x04,0xDC,0xB8,0x54,0x00,0x00,0xF4,0xDE,0x04,0xD7,0xD6, +0xE1,0xD5,0x04,0xD6,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x0A,0x0A, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF7,0x04, +0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x5A,0x54,0x59, +0x04,0xF9,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x58,0x00,0x00,0x00,0x00, +0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x17,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00, +0x16,0x04,0xDF,0x00,0x00,0xF7,0xDA,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, +0xDD,0xF1,0xF3,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6,0x04,0xDB,0x00,0x00, +0x00,0x57,0xD9,0xDA,0x5A,0x00,0x00,0x16,0x04,0xB8,0x54,0x00,0x00,0x00,0x00,0x00, +0x00,0xD2,0x04,0xD3,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x04,0xC1, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x58,0xD7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x57,0xD4,0xD8,0xD0,0xD6,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xD0,0x57,0x00,0x04,0xDE,0x00,0x0A,0xD7,0x04, +0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x9D,0x3B,0xD8,0x00,0x04,0xDE,0x00,0x04,0xDE,0xDE,0x04,0x00,0x00,0x00, +0x00,0x53,0xDB,0xDF,0x00,0x00,0x00,0xD0,0xDC,0x00,0x00,0x00,0x55,0xDE,0x04,0x04, +0x04,0xD8,0x17,0x00,0x00,0x00,0xF7,0xD0,0xDB,0xDB,0xD0,0xB8,0x00,0x00,0x00,0x00, +0xDF,0xDB,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD0,0xD9,0xDB,0xD0,0xB8, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF7, +0xD0,0x17,0x00,0x17,0xD0,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04, +0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD9,0xF4,0x00,0x00,0x00,0xF7,0xD6,0xD7,0xD9, +0xD9,0xD2,0xDF,0xF6,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x54,0xB8, +0xE1,0xDC,0xD8,0xDC,0xD0,0x56,0x00,0x00,0x00,0x00,0x00,0x55,0xD6,0xD5,0xD8,0xF1, +0xEF,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x04,0x00, +0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x55,0xD5,0xD7,0xF4,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x12,0xDC,0xD8,0xDC,0xD6,0x55, +0x00,0x00,0x00,0x00,0x00,0xF6,0xDF,0xD7,0xD9,0xDB,0xDE,0x5D,0x53,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0xF7,0xE1,0xDD,0x04,0xDB,0xDE,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3, +0x5B,0xD0,0xF1,0xD8,0xD9,0xD7,0xD6,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD6,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0x04,0x04,0x04,0xD9,0xDC,0xDE,0xFA,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, +0x16,0xD0,0xDD,0xD8,0xD9,0xD7,0xE1,0x58,0x53,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0xD8,0xDB,0xD7,0xD0,0x5E,0xF6,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, +0x00,0x00,0x00,0x00,0x54,0xB8,0x0A,0xD7,0xD9,0x04,0xD9,0xD7,0xD6,0x59,0x53,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDE,0x04,0x5A,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xD3,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF7,0x04,0x04,0xDE,0x00,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0x58,0xE1,0xD3,0xD8, +0xD8,0xF1,0xE1,0x59,0x53,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xD9, +0xDC,0xD0,0xFA,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x60,0xDE,0xDD,0xDA,0xD8, +0xDC,0xD0,0xFA,0xF5,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDA,0xD9,0xD3, +0xD0,0xFA,0xF4,0x00,0x00,0x00,0x00,0x00,0xF3,0x60,0xD2,0xD9,0xDB,0xDE,0x5A,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x0D,0x04,0x58,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x00,0xD6,0x04,0x55,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD7,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD5, +0xD2,0x00,0xF7,0xD8,0xD2,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x56, +0x00,0xE1,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0x5E,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0xB8,0xDE, +0x17,0x00,0x00,0xD7,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0xEF,0xF5, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0xB8,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, +0xDE,0x04,0xD7,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0xE1,0xF1,0xD9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xF2,0xD8,0x17,0x00,0x04,0xDE,0x00,0xD8,0xDC,0xD6,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xF2,0xF6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0xF3, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD2,0x53,0xD0,0xE1,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0x16,0xB3,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x3B,0xFF,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF3,0x55,0x00,0xF6,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0xFF,0xFF,0xFF,0x00,0x00, +0x49,0x04,0x00,0x00, +0x1B,0x00,0x00,0x00, +0x00, +0x00, +0x06,0x74,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDC,0x60,0x58,0x58,0x60,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x58,0x53,0xB8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, +0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x60,0x04,0x60, +0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x57,0x16,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53, +0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x00,0x56,0xD7,0xD9,0xDB,0xDF,0xF3,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD0,0xF6,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF6,0x00, +0x58,0x04,0x04,0x04,0x04,0x54,0x53,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF4,0x00,0x17,0x04,0x17,0x00,0xF4,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x5C,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0x53,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x54,0xD3,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x0A,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xB3,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xF6,0xD0,0x04,0x04,0x04, +0x04,0xB8,0xB3,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x53,0x00,0xE1,0x04,0x04,0x04,0xD6,0x00,0xF3,0xD4,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD7,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD2,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD8,0x53,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0xF5,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x53,0xDF,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A, +0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x3B,0x3B,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0x57,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xF7,0x04,0x04,0x04,0x04,0xDB, +0x55,0x54,0x54,0x55,0xDB,0x04,0x04,0x04,0x04,0xE1,0xF6,0x54,0x00,0xF3,0x59,0x04, +0x04,0x04,0x04,0x04,0xDE,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xF2, +0x04,0x04,0x04,0x04,0x04,0xEF,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0xB8,0xF3,0x00, +0x00,0xF3,0xB8,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00, +0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x04,0x04,0x04,0xDD,0xF7,0x53,0x54,0xB3, +0x56,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0x5D,0xF5,0x00,0x00,0xF5,0x60,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0x57,0xF3,0x00,0x00,0xF5,0x16,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0x53,0x54,0x53,0xB8,0xD9, +0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0xDA,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x17,0x55,0x53,0x54,0x53,0xF3,0xB8,0xD2,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDE, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF7,0x04,0x00, +0x00,0x54,0x53,0x53,0x54,0xF4,0xB8,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0xFA,0xF6,0x53,0x54,0x00,0x53,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54, +0x53,0x53,0x00,0x53,0x55,0x5C,0xD8,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x53, +0x53,0x53,0x53,0x53,0x53,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xF7,0xF3,0x00,0x54,0x53,0xF6,0x5A,0xDA,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0xDB,0xF7,0x53,0x00,0x46,0xB8,0xD8,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x17,0x04,0x00,0x00,0x54,0x53,0x53, +0x53,0x53,0x53,0x53,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF4,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x0A,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x55,0x53,0x54, +0x53,0xB3,0xF7,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0xF7,0xB3,0x00,0x54, +0xB3,0xF7,0xD6,0x04,0xDA,0x57,0xF3,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x54,0x54,0xDB,0x04,0x04,0x04,0xD9,0xB8,0xF3,0x54,0x54,0xF6,0xE1,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, +0xB8,0xF3,0x54,0x53,0xF5,0x5C,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x54,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4, +0x00,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD3,0x04,0x04,0x04, +0x04,0x04,0x59,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x56, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x04,0x57,0x00,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x57,0x04,0x04,0xDA,0xF4, +0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF7,0xB3,0x54,0x54,0xF3, +0x57,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD7,0xF7,0x53,0x54,0x53,0x55,0xD0, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0xB3,0x54,0x00,0xF4,0x59,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x54,0x54,0xF3,0x57,0xDA,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xDE,0x55,0x53,0x54,0x53,0x55,0xDE,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C,0x55,0x53,0x54,0x53, +0xF7,0xDC,0x04,0xB3,0xF3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x59,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDE,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x0C,0x55,0x53, +0x54,0x54,0xF6,0xEF,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD2,0x55,0x54,0x54,0x53, +0x55,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C,0x55,0x54,0x54,0x53,0x55,0xD2, +0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x54,0x00, +0xF5,0xF2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD6,0xF5, +0x54,0x54,0x53,0xB8,0xD4,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0x57, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x51,0x00,0x00,0xDA,0x04,0x04, +0x04,0x04,0xF3,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x5A,0x04,0x04, +0x04,0x04,0x04,0x17,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF4,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x55,0x04,0x04,0x04, +0xFA,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0xD7,0xF4,0x00,0x00,0x00,0x00,0x17,0x04, +0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xD9,0x04,0x04,0xDB,0x54,0x00,0x55,0xF7,0x00, +0x54,0xD5,0x04,0x04,0xB8,0x00,0x54,0xF7,0xF7,0xB3,0x00,0xF6,0xD4,0x04,0x04,0xE1, +0x00,0x54,0xDD,0x04,0x04,0x04,0x04,0x04,0x5C,0x54,0x59,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x17, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x54,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xF5,0xF7,0xF7,0xF4,0x00,0x54, +0xD2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x53,0x00,0x54,0xB8,0xB8,0xB8,0xB8, +0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x0A,0x00,0x00,0x55,0xB8,0xF5,0x00,0x53,0xDB,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0xD4, +0xF5,0x00,0xF3,0xF7,0xF7,0x53,0x00,0xF6,0xDA,0x04,0x04,0x04,0xDC,0x53,0x00,0xF3, +0xF7,0xF7,0x53,0x00,0xF5,0xD4,0x04,0x04,0x04,0xD7,0x54,0xB8,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x55,0xB8,0xF6,0x00,0x54,0xD2,0x04,0x04,0x04, +0x04,0x04,0x04,0x57,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0xB8,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0x53, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x5A, +0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x53,0x00,0x53,0x55,0xB8, +0xB8,0xF6,0x54,0x00,0xF6,0xD9,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x00,0x53,0xB8,0xB8,0xB8, +0xF7,0xF4,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x17,0xC6,0x09,0x54,0xF6,0xB8, +0xF7,0xF6,0x00,0x00,0xF4,0xDD,0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xF7,0xF6, +0x53,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0xD0,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDE, +0xF3,0x00,0x00,0xF6,0xF7,0xB8,0x55,0x54,0x00,0x54,0x5D,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, +0xD9,0x54,0x00,0xF6,0xB8,0xF5,0x00,0xF3,0xD4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54, +0x00,0xF6,0x04,0x04,0x04,0x04,0xD7,0xF3,0x00,0x00,0xF6,0xB8,0xB8,0xF6,0x09,0x09, +0xF3,0xD2,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00,0x00,0xF5,0xF7,0xB8,0xF6,0x00,0x00,0x00, +0x54,0x54,0xF5,0x5B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xD6, +0x04,0x04,0x04,0xDD,0x54,0x00,0xF4,0xB8,0xF7,0x53,0x00,0xB8,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x00,0xF4,0xB8,0xF7, +0xB3,0x54,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x56, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF3,0xDA,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0xB8,0xB8, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD9,0x04,0x04,0x04,0xD6,0x00,0x5A,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0xF5,0xB8,0xF7,0xF4,0x00,0xB3,0xD5,0x00, +0xF6,0x04,0x00,0xF6,0x5D,0x00,0x00,0x55,0xB8,0x55,0x54,0x00,0xF7,0xD4,0x04,0x04, +0x04,0x04,0x56,0x00,0x00,0xF6,0xB8,0xF7,0xB3,0x00,0x53,0xDE,0x04,0x04,0x04,0x04, +0x04,0x57,0x54,0x00,0xF5,0xB8,0xF7,0xF4,0x00,0xB3,0xDB,0x00,0xF6,0x04,0x04,0x04, +0xB8,0x00,0x00,0x55,0xB8,0x55,0x54,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xD4,0xF7,0x00,0x00,0x55,0xB8,0x55,0x00,0x00,0xE1,0xF5, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD0,0x00,0xF5, +0xDA,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0xD4,0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00, +0xF6,0xD4,0x04,0x04,0x00,0xF6,0x5A,0x00,0x54,0x55,0xB8,0x55,0x54,0x00,0xF7,0xD4, +0x04,0x04,0x04,0xDA,0xF7,0x00,0x54,0x55,0xB8,0x55,0x00,0x00,0x5B,0xF6,0x00,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xF7,0xF7,0x54,0x00,0xDE,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x55,0xB8,0xF6,0x00, +0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x53,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0xE1,0x04,0x04,0x04,0xD5,0x00,0x00, +0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0xD9,0x54, +0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x00,0xD2,0x04,0x04,0x04,0x04,0x04, +0x04,0x54,0x00,0xF7,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFE,0xFF,0xF9,0x04,0x54,0x55, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x53,0x04,0x04,0x04,0xD2,0x00,0xD0,0x04, +0x04,0x04,0x04,0xD7,0x00,0xF5,0xDC,0x04,0xD7,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0xD4,0x53,0x56,0x04,0x04,0x55,0x00,0xDE,0x04,0x04,0xDE,0x00,0x55,0xDA,0xE1, +0x00,0xF6,0xD4,0x04,0x04,0x04,0xF7,0x00,0xB8,0x04,0xEF,0x00,0x53,0xD5,0x04,0x04, +0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xDF,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04,0xF2,0x54,0xD0,0x04,0x04,0x04,0x04, +0x04,0x04,0xD5,0x00,0x54,0xD7,0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0xDA,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0xDB,0xB3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDC,0x00,0xB3,0xDB,0x04,0x04,0x04,0xD6,0x53,0xF3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xF6,0x54,0x5A,0x04,0x04, +0x04,0x04,0xB8,0x00,0xF7,0x04,0x04,0xDA,0x53,0x00,0x17,0x04,0x04,0x04,0x04,0x56, +0x00,0x55,0xDA,0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, +0x00,0xF4,0xD9,0x04,0x04,0x04,0xF2,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0xF4,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0xDB,0x00,0xB8,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xB8,0x54,0x00,0xB3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x54,0xB8,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x55,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0x00,0x53,0xD9,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0xD8,0x00,0xF5,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD5,0xF3, +0x00,0xDD,0x04,0x04,0x04,0xB8,0xC6,0x54,0x16,0x04,0x04,0x04,0x04,0x04,0xDA,0x58, +0x00,0x54,0xD7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00, +0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0x54,0x5A,0xDA, +0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0xF7,0x00,0xEF,0x04, +0x04,0x04,0x57,0x00,0x59,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF4, +0xDA,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0xF6,0x04,0x04, +0x04,0xEF,0x00,0x54,0x5C,0xDA,0x04,0x04,0x04,0x04,0xDA,0x16,0xC6,0x00,0xEF,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD0,0x00,0x00,0x56,0xDA,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x57,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xB8,0x04,0x04,0x04,0x04,0xB3, +0x00,0x17,0x04,0x04,0x04,0xDA,0x55,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x54,0xD2,0x04,0x04,0x04,0x04,0x5A,0x54,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x00,0x54,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0xDA,0x04,0x04,0x04,0x04, +0x04,0xF4,0x00,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xB8,0x54,0xF5,0xD5,0x04,0x04,0x04,0x04,0xD2,0x53,0x00,0x00,0xF6,0x04,0x00,0x00, +0x00,0x55,0xD8,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04,0x04,0x56,0x00,0xF5, +0xDB,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDD,0x04,0x04,0x04,0x56,0x00,0xF5,0xD5, +0x04,0x04,0x04,0x04,0xDE,0x53,0x00,0x00,0xF6,0x04,0x04,0xB8,0x53,0xF7,0xDA,0x04, +0x04,0x04,0xDA,0xF7,0x00,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0xD5,0x54,0x53,0xD9,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x59,0x54,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x04,0xF7,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xB8,0x54,0xF6,0xDA,0x04, +0x00,0x00,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04,0x04,0xF7, +0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0xDD,0x04,0x04,0xDD,0x00,0xF5,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0xD0,0x00,0xF4,0xD8,0x04,0x04,0x04,0xD3,0x53,0x00,0x00,0x04, +0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x00,0x00,0xF7,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0x04,0xDD,0x00,0xF5,0x04,0x04,0x04,0x55,0x54,0xD2,0x04,0x04,0x04, +0x04,0x04,0x04,0xB8,0x54,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xC8,0xFF,0xFE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5D,0x00,0xD8,0x04,0x04,0xD4,0x00,0x58,0x04,0x04,0x04,0x04,0xF6, +0x00,0xD9,0x04,0x04,0x04,0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x53, +0xD4,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0xF6,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0xB8,0x54,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, +0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, +0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0xD9,0xF3,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD7, +0x04,0x04,0x04,0x04,0x04,0x57,0x54,0xEF,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53, +0x53,0x00,0x00,0x54,0x53,0x04,0xD6,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0xD7,0x04,0x57,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD7,0x04, +0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, +0x04,0x04,0x04,0x5C,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x53,0xF4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0xD2,0x55,0x00,0x00,0xF4,0xEF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0xF4,0x00,0x00,0xF7,0xD7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0xFA,0x04,0xDA,0xD5,0xDA,0x04,0x04,0xDA,0xD5,0x00,0x00,0xB8,0xDB,0x04, +0x04,0x04,0xD2,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54, +0xD6,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x04, +0x16,0x09,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x54,0x53,0xD9, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xB8,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD8,0xF4,0x00,0x59,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x53,0xF3,0x04,0x04,0x04,0x04,0xDA,0x00, +0xF5,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xD9,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xEF, +0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xF6,0xDA,0x04,0xDE,0x00,0xB3,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF3,0x00,0xDE,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x00,0xDE,0x04, +0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0xD7,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0xE1,0x00,0xF5,0x04,0x04,0x04,0x04,0xD0,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0xB8,0x54,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, +0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x57,0x04,0x04,0x04,0x04,0x5A, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF3,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xD2,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF5,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xF6,0xDA,0x00,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0xD2,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04, +0x04,0x04,0xDE,0x00,0xF5,0x04,0x04,0xD2,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0x54,0x00,0xF6,0xDA,0xD2,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF7,0x00,0xDE,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD0,0x00,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, +0x00,0x17,0x04,0xD4,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, +0xDE,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD0,0x00, +0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x00,0x00,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0xD0,0x00,0x55,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x54, +0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0x53,0xF5,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00, +0x00,0x54,0x04,0x04,0x04,0xF4,0xF4,0xD7,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x58,0x00,0xFA,0x04,0x0A,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54, +0x00,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x17,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xE3,0x3B,0x6E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, +0x00,0xD0,0x04,0x04,0x04,0xB3,0x55,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04, +0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x59,0x04,0x54,0xF4, +0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, +0x00,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xB8,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x54,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xDA, +0xF5,0x00,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0xF7,0x04,0x09,0x00,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x53,0x54,0xB8, +0xB8, +0x04,0xF7,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x56,0x04,0xF3, +0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0x04,0x04,0xF3, +0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x56,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0xF5,0x00,0x00,0xF6, +0xDE,0x04,0x04,0x04,0x04,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, +0x53,0x04,0x04,0x04,0x04,0xDE,0xF6,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB8,0x16,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xFA,0x04,0x59, +0x00,0x00,0x00,0xF7,0xDC,0x53,0x00,0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0xF4, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x53,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0xDA,0x54,0x54,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xF7,0xDF,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0x53,0x00,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x00,0xF6,0x04,0xD0,0xD2,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF5, +0x04,0x04,0x04,0xDA,0xF4,0x00,0xD0,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x54,0xDA,0xD0,0x00, +0x58,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x00,0xF3,0xDA,0x00,0xF6,0x04,0xDA,0x53,0x54,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x53,0xD4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0xDA, +0x56,0x00,0xB3,0xDD,0xDE,0x54,0xB3,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0x54, +0x54,0xD9,0x04,0x04,0x04,0x04,0xFA,0x53,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0xF5, +0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, +0x00,0xDB,0x04,0x53,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00, +0x57,0xDD,0x00,0x57,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0x00,0xEF,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD7,0x04,0x04,0xDB,0x00,0xF3,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD0,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0xDF,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00, +0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x5B,0x00,0xF6,0x04,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x00,0x55,0x04,0xF7,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, +0xF6,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x5C,0xDE,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD5,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xD3,0x55, +0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDE,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x55,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0xF6,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB3,0xB3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x04,0x04,0x04,0xD6,0x00,0xDF,0x04,0xF7, +0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x0A,0x00,0xDE,0x04, +0xD9,0x00,0x58,0x04,0xF3,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00, +0xD3,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x54,0x5A,0xDE,0x00,0x57, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF3,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0xD4,0xD9,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, +0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF7,0x00,0xF6,0xB8,0xB8, +0xB8,0x53,0x53,0xB8,0xB8,0xB8,0x04,0xEF,0xDE,0x04,0x04,0x04,0x04,0x04,0xF5,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x53,0x04,0x55,0x00,0xD7,0x04,0x04,0xD2, +0x00,0x55,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0xD6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x53,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, +0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x00,0x55,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD4,0xF6,0x54,0x57, +0x04,0x04,0x04,0x04,0x04,0xF6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x16,0x54,0x5A,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xB8,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x54,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x17,0x00,0x5D,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0xDC,0x59,0x56,0x5C,0x00,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x5A,0xB3,0x00,0x00,0xF7,0xDD,0x04,0x04,0x04,0x04,0x04, +0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0xF7,0x00,0x00,0xF3,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0xB3,0xF3,0x04,0x04,0x04,0x04,0x04,0x58,0xF6,0x04,0xD0,0x00,0xB3,0x5A,0x58,0xB3, +0x00,0x00,0xD7,0xD9,0xB8,0xC6,0xDB,0x04,0x04,0x04,0x04,0x17,0x00,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x5A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x59,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDC,0x00,0x56,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xFA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x56,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0x00,0x5D,0x04,0x04,0xF7, +0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x54,0xB8,0x04,0x04,0xF3,0x53,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD7,0x04, +0x00,0xF6,0x04,0x16,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x5A,0x00,0xF9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x0A,0x00,0x00,0xD2,0xDA,0x04,0xDA,0xD7,0x57,0x53,0x00,0xF6,0xDA,0x04, +0x04,0xB8,0x00,0x16,0x04,0x00,0xF6,0x04,0x04,0xD4,0xF4,0x00,0xDE,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x04,0x57, +0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD2,0x04,0x53,0xF4, +0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0xDA,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDD,0x00,0xF3,0x04,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD7,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF6,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04, +0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, +0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x53,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x54,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3, +0x54,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x54,0x56,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0xF6,0x54,0xDA,0x04,0xD7,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0xF7,0x04,0xDA,0x00,0xB8,0x04,0x5C,0x00,0xDD,0x04, +0x5A,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x00,0x00,0xF2,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0xF4,0x53,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x56,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF5,0x54,0xD9,0x04,0x04,0xB8,0xF7,0x04,0x04, +0x04,0x04,0xD0,0xF6,0x00,0xF5,0xD5,0x04,0x04,0x04,0xF7,0x3B,0x3B,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x54,0x53,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0xF7,0xF7,0x00,0x54,0xDB,0x04,0xF6, +0x00,0xDC,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53,0x53,0x53,0x54, +0x00,0x00,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8, +0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xC6,0xF7,0x04,0x04,0xF5,0x00, +0xD9,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04,0xF3, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04,0x04,0xD4,0xF7,0x00,0x00, +0x00,0x00,0x00,0x00,0xB3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x54,0x00,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDF,0x04, +0x04,0x04,0x04,0xF5,0xE1,0x04,0xF7,0x00,0xDD,0x04,0x04,0xDA,0xF4,0x00,0x0A,0x04, +0x04,0xFA,0xF3,0xD4,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0x53,0x53,0x53,0x53,0x54, +0x00,0x00,0x54,0xDA,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0x00,0x57,0x04,0xF5,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x53,0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0xB8, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xF7,0x00,0xF3,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x00,0x00,0xDE,0x17,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0xF7,0x00,0xDD,0x04,0x04,0x5D,0x54,0xD6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x57,0x04,0x04,0x00,0xF6,0x04,0xF6, +0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, +0x00,0x00,0x53,0x54,0x00,0x00,0x00,0xF4,0xD6,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0xB8,0x54,0x00,0x57,0xD2,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xD6,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04, +0x53,0xF4,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00, +0x00,0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00, +0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x57,0x53,0xD6,0x04, +0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x53,0x53,0x53,0x53, +0x53,0x53,0x53,0x53,0x54,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x00,0xF6,0xD2,0x00,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x59,0x54,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x16,0xF5,0x54,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0x04,0xD5,0x00,0x56,0x04,0x04,0x04,0xF4,0x54,0xDA,0x04,0x04,0x04,0x04,0x04, +0x5D,0x00,0xDE,0x04,0x04,0x55,0x53,0x04,0xF5,0xF3,0x04,0x04,0xD8,0x00,0xB8,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDD,0x54,0xF7,0x04,0x04,0x16,0x09,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x59, +0x00,0x59,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xDA,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0xDD,0x00,0x00,0x16,0x04,0xDF,0x00,0x16,0xDA,0xD0,0xF5,0x00,0x00, +0x00,0x00,0x53,0xD9,0x04,0x04,0xFC,0x3B,0xE3,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF6,0xF4,0x04,0x04,0x04,0x0A,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF7,0x00,0x04,0xDB,0x55,0x54,0x54,0x55,0xD5,0x04,0x04,0xD2,0x00,0x53,0xDC,0x04, +0x04,0xF7,0x00,0x55,0x04,0x58,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8, +0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x53,0xD4,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x54,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x16,0x04,0x04,0xD5,0x00,0xF6,0xDA,0x04,0x04, +0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, +0x00,0x56,0x04,0xF6,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8,0x04, +0x04,0x04,0x04,0x04,0x5B,0x00,0xEF,0x04,0x04,0x04,0x04,0x57,0x00,0x60,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x04,0xF6,0x00,0x55,0xD7,0x04,0xDA,0xD6,0xB3, +0xC6,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0x00, +0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00, +0x00,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0xD7,0x04,0x04,0x04,0x54, +0xDA,0x04,0x55,0x00,0x04,0x04,0x04,0x04,0xDB,0x54,0xF6,0x04,0x04,0x04,0x55,0x5B, +0x04,0x04,0x04,0x04,0x57,0x00,0x55,0xB8,0xB8,0xB8,0xB8,0xB8,0x55,0x00,0xB8,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0xD9,0x04,0x54, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xDA,0x00,0xF6, +0x04,0x04,0x04,0xDA,0x53,0xF5,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04, +0x04,0x04,0xDD,0x00,0xF4,0x04,0x04,0x04,0x00,0xF6,0xDA,0x53,0xF4,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0x00, +0x54,0x53,0x53,0x53,0x54,0xF4,0x59,0xDA,0x04,0x04,0x53,0xB3,0xD9,0xDF,0x57,0xB8, +0x57,0x17,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x00,0xF6,0xDA, +0xD5,0x55,0xF6,0xF3,0x00,0x00,0xF5,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x57,0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0xF3,0x53,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0x00,0x55,0x04,0x04,0x0A,0x00,0x03,0x04,0x04,0xDD,0x00,0x57,0x04,0x04, +0x57,0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x53,0x00,0x00,0x55,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x56,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD8,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0xF6,0xDA,0x54,0x00,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0x54,0x53,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0xF4,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, +0xF6,0xDA,0x59,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00, +0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x54,0xF3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA, +0xF3,0x00,0xB3,0x59,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xB8,0x00, +0xDB,0x04,0x04,0x04,0x17,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF4,0x53,0x04,0x04, +0x04,0x17,0x00,0xD0,0x00,0x57,0x04,0x04,0x04,0x55,0x54,0xDA,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x54,0x54,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE, +0x04,0x04,0xDA,0x53,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDC, +0x04,0x04,0x04,0x54,0x00,0x00,0xD4,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0xD5, +0x00,0x00,0x5D,0x04,0x04,0xB8,0x54,0x00,0x00,0x00,0xF7,0xF2,0xDA,0xDF,0x09,0xF7, +0x04,0x04,0x3B,0x3B,0x45,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x58,0x00,0xDA,0x04,0x04,0xD5,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xB8, +0x54,0x00,0xB3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0xE1,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xB8,0x55,0x00,0xF7,0x04, +0x04,0xDA,0x53,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x54,0xE1,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB8,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0xB3,0xDA,0x04,0x04,0x04,0x58,0x00,0xDF,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0x04,0x04,0xD5,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD7,0x04,0xDF, +0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04,0x04,0x04, +0xDA,0x54,0xF4,0x04,0x04,0x04,0x04,0xDA,0xF4,0x00,0x58,0xD9,0x04,0xD5,0xF7,0x00, +0xF5,0x04,0x04,0x17,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x16,0xF3,0x00,0x00,0x55,0xD7,0x04, +0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x00,0x00,0xF4,0x16,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x54,0xF2,0x04,0x04,0x00,0x04,0x04,0xB8,0x00, +0xDB,0x04,0x04,0x04,0x04,0xB8,0x00,0xD9,0x04,0x04,0xD2,0xF5,0x04,0x04,0x04,0x04, +0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDD,0x04,0x04,0x04,0x04,0x00, +0x53,0xB8,0xB8,0xB8,0xF7,0xF4,0x00,0x54,0xD0,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x00,0x54,0x53, +0x53,0x53,0x53,0x53,0x53,0x04,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x57, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x00,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0xD2,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x5A,0x00,0xE1,0x04,0x04,0x04,0x04, +0xB8,0x00,0xDC,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4,0x00, +0xDC,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8, +0x55,0x54,0x00,0xF4,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0xDA,0x59,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0xD9,0x5A,0xF5,0x00,0x00,0xF5,0xD7, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDE,0x00,0x57, +0x04,0x04,0x04,0x04,0xD0,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x17, +0x04,0x04,0xDA,0x54,0xB8,0x04,0x04,0x5A,0x00,0xD2,0x04,0x04,0xD7,0x54,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xE1,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x53,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x16,0x00,0xF6,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0x55,0xDA,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0xDA,0x04,0x04,0x55,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, +0xF6,0xDA,0xF6,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0x55,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0x00,0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, +0xF3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6, +0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xDC,0x04,0x00,0xB3, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0xDA,0xF6,0x00,0xDB,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDB,0x00,0x55,0xDA,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x00,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xDA,0x54,0xF6,0x04,0x04,0x04,0x04, +0xDA,0x53,0xF5,0x04,0x04,0x04,0x04,0xDD,0x00,0x57,0x04,0x04,0x04,0xDA,0x00,0x00, +0x00,0xD7,0x04,0x04,0x04,0xD6,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x54, +0xEF,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0xB8, +0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0xD4,0x04,0x04,0x04, +0x5B,0x54,0x57,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04, +0x04,0x04,0xEF,0x56,0x17,0xDA,0x04,0x04,0x04,0x04,0x16,0xD7,0x04,0x04,0x3B,0x3B, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xDC,0x04, +0x04,0x04,0x54,0xB8,0x04,0x04,0x04,0x04,0xDB,0xF5,0x00,0x00,0x00,0xF7,0xD8,0x04, +0x04,0x04,0xDA,0xD0,0x57,0x57,0xD0,0x04,0xDA,0xF6,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0xD5,0x04,0x04,0x04,0x60,0x00, +0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD0,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x53,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x55,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x0B,0xF7,0xF4,0x00,0xB3,0xD5,0x04, +0x04,0x04,0x04,0x04,0xF4,0x53,0xDA,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0xF3, +0x00,0x5C,0x04,0x04,0x04,0x04,0xB8,0x00,0x55,0x04,0x04,0x04,0xF4,0x00,0xEF,0x04, +0x04,0x04,0x04,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDE, +0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0xDA,0x04,0x04,0xF5, +0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x59,0x04,0x00,0xF6,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD0,0xF6,0x00,0x00,0xF6,0xD0,0x04,0x04,0x04, +0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0xDE,0xF6,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDC,0x54,0x00,0xDB,0x04,0x00,0xD8,0x04,0xD0,0x00,0x58,0x04,0x04,0x04, +0x04,0xD7,0x00,0x58,0x04,0x04,0xDA,0x00,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD4, +0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xD0,0x04,0x00,0xF4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x53,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0xFA,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0xB3,0xB3,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00, +0x57,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF4,0x53,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, +0x60,0x04,0x04,0xDA,0x57,0x00,0x00,0xF3,0x57,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04, +0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04,0xF5, +0xB3,0x04,0x04,0xF6,0x54,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x56,0x00,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x54,0xF4,0x04,0xD9,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x54,0x5C,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x53,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04,0xB8,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x54,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x53,0x00, +0xF6,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xD0,0x04, +0xDE,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xF5,0x04,0x04,0xDE, +0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0xF6,0x04,0xE1,0x00, +0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6, +0x04, +0x04,0x04,0x04,0xD6,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00, +0x00,0x04,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF7,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xD8,0x53,0xC6,0xDB,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0xD8,0x00,0x00, +0xDF,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x00,0x00,0xD3,0x04,0x04,0x04, +0x04,0x04,0xD2,0x00,0xF6,0x04,0xD6,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x55,0x00,0xE1,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00, +0xD0,0x04,0xD0,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x00,0x04, +0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x04,0x04,0xDA,0x17,0xD2,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0xF6,0x00,0x04,0x04,0x17,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDC, +0x04,0x04,0x04,0x56,0x00,0xD5,0x04,0x04,0x04,0xDA,0xF6,0x54,0x53,0x04,0x04,0x04, +0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x60,0x54,0x57,0x04,0x5D,0x00,0x58, +0x04,0x04,0x04,0x04,0x17,0x54,0x59,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x54,0xB8,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3C,0x3B,0x3B,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xD0,0x16,0x00,0x56,0xD0,0xD0,0xD0,0x00,0xF4, +0xD0,0xD0,0x04,0xDA,0x53,0x54,0xF3,0xFA,0xD4,0x04,0x04,0x04,0x04,0xDA,0xF6,0x54, +0x00,0x00,0x54,0x55,0xDA,0xD0,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x54,0xF6,0x54,0x00,0x57,0x04,0x04,0x04,0xF4,0x53,0xDA,0x04,0x04, +0x04,0x04,0x04,0x58,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, +0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDA,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0xEF,0x04,0x04,0x04,0x04,0x04,0x04, +0xD7,0x00,0xF7,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xB3,0xF7, +0xF7,0x53,0x00,0xF5,0xDA,0x04,0x04,0x04,0xDC,0x54,0x00,0xF4,0xB8,0xF7,0xB3,0x00, +0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0xF6,0xDA,0x04,0x04,0x04, +0xD8,0x00,0x00,0xF5,0xB8,0xF6,0x00,0x00,0xD9,0x04,0x04,0x54,0xF4,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0x00,0x00,0xF3,0x17,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xF4,0x00,0x00,0xF7, +0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, +0x00,0xF7,0x04,0xF4,0xD6,0x04,0x04,0xF3,0x54,0xDB,0x04,0x04,0x04,0x04,0x00,0xB3, +0x04,0x04,0xDA,0x00,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x04,0x5B, +0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD9,0xEF,0x53,0x54, +0xD9,0x04,0x04,0xF5,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0xF7,0x00,0x59,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0xD0,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0x00,0xF6,0x04, +0x00,0xF6,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xF5, +0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0xF4,0x00, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF5, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0xFA, +0x00,0xF6,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xD0, +0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x57,0x00,0xDB,0xDA,0x00, +0x55,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00, +0x00,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD0,0x04, +0x04,0xB8,0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xD8, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xD0, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x54, +0xD4,0x04,0x04,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xB8, +0x54,0xF5,0xDB,0x04,0x04,0x04,0x04,0xDE,0xB3,0x00,0x00,0xF6,0x04,0x00,0x00, +0xC6,0x55,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x04,0xB8,0x54,0xF6, +0xD9,0x04,0x04,0x04,0x04,0x0A,0x54,0x54,0xD5,0x04,0x04,0x04,0xB8,0x00,0xF6,0xD9, +0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0x00,0xF6,0x04,0x04,0x55,0x00,0xB8,0xD4,0x04, +0x04,0x04,0xDA,0xB8,0x54,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x55,0x00,0xB8,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0x00, +0xF3,0xDB,0x04,0x04,0x04,0xD9,0xF3,0x00,0xD2,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF2,0x00,0xF4,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0x00,0x55,0xD4,0x04,0x04,0xDA,0x55,0x00,0x00,0x53,0xDB,0x04,0x04, +0x04,0x5C,0x00,0xF7,0x04,0x04,0x00,0x00,0xF3,0xD9,0x04,0x04,0x04,0xDB,0xF3,0x00, +0xE1,0x04,0x04,0x55,0x00,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04, +0x00,0x00,0xC6,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x04,0x55, +0x00,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x54,0x00,0x00,0x04,0x00,0x00,0xF5,0xD4, +0x04,0x04,0x04,0xB8,0x54,0xD0,0x04,0x04,0xDF,0x00,0x57,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04,0x04,0x04,0x53, +0xF5,0x04,0x04,0x04,0x04,0x04,0x5E,0x09,0xB8,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, +0xD9,0x04,0x04,0x04,0xDB,0x00,0xF4,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0x04, +0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xD8,0x3E,0x04,0x00,0xF6,0xDA,0x04,0x04,0xDA, +0x04,0x04,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x5A, +0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xB8,0xD8,0xDA,0xB8,0x54, +0x56,0x04,0xF4,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xB8, +0x04,0xD8,0xF6,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04, +0xB6,0xD0,0x04,0xDE,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xD6,0x04,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6, +0xDA,0xF6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0xD2,0xF4,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE, +0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x5A,0x54,0x57,0xF6,0x54,0x00,0xF4,0x5D,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x00,0x53,0x00,0xF3,0x59,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDC,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04, +0x04,0x04,0xD6,0x00,0x55,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x00,0x55,0x04,0x54,0x55,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0x56,0x54,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x54,0x56,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x57,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x57, +0xF5,0x04,0x04,0xD7,0x00,0xB3,0xD5,0x04,0x04,0xDB,0x00,0x00,0xDE,0x04,0xDE,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0xB3,0xF3,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0x58, +0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x56,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xF6,0x00,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x5A,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xD4, +0xF3,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xFA,0x00,0x5A,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0x16,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0xB8,0x54,0x17,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x57,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xF3,0x54,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x58,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, +0xDC,0x00,0x56,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0x00,0x00,0x16,0x04,0x04,0x04, +0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0xDC,0xD9,0x00,0xF3, +0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF5,0x04,0x04,0x04,0xD8,0x00,0xF5, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04, +0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0xF3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x04,0x04,0x04,0x0A,0x00,0x59,0x04,0x04,0x5D, +0x54,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00, +0xF5,0xF7,0xF7,0xF3,0x00,0xB3,0xD5,0x00,0xF6,0xDA,0x00,0xF6,0x0B,0x00,0x00,0x55, +0xB8,0x55,0x54,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0xF6,0xB8,0xF7, +0xF3,0x00,0x53,0xD7,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x54,0xF6,0xB8,0xF7,0xF3, +0x00,0x53,0xD2,0x00,0xF6,0xDA,0x04,0xDA,0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00, +0xF7,0x04,0x04,0x04,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0xB8,0x04,0x04,0xDA,0x55,0x00, +0x54,0x55,0xB8,0x55,0x00,0x00,0x0A,0xF6,0x00,0x04,0x00,0x00,0x00,0x00,0xF6,0xB8, +0x55,0x00,0x00,0x58,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, +0x00,0x53,0xF7,0xF7,0x53,0x00,0x5A,0xDC,0x54,0x00,0x55,0xB8,0xF5,0x53,0xF3,0xD9, +0x04,0x04,0x00,0x00,0x00,0x54,0xF6,0xB8,0xF6,0x00,0x00,0x56,0x04,0x04,0x04,0xDA, +0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00,0xF6,0xD4,0x04,0x04,0x00,0xF6,0x0B,0x00, +0x00,0x55,0xB8,0x55,0x54,0x00,0xF7,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x55, +0xB8,0x55,0x54,0x00,0x59,0xF6,0x00,0x04,0x00,0x00,0x00,0x54,0xF7,0xD7,0x04,0xDB, +0x54,0x00,0xF7,0xF7,0x00,0x54,0xD9,0x04,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDC,0x00,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0xD0,0x00,0xFA,0x04,0x04,0x04, +0x04,0x04,0xDA,0x16,0xDB,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x59,0x04,0x04,0x04, +0xF5,0x54,0xDD,0x04,0x04,0x04,0xD9,0x54,0xF3,0xDA,0x04,0xDC,0x00,0x55,0x04,0x04, +0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xF7, +0x00,0x53,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xFF,0xF9,0x94,0x04,0x00,0xF6,0x04,0x00,0xF6,0xF6,0x00,0x04,0xD9,0xD9, +0xD9,0xF5,0xF5,0xD9,0xD9,0xD9,0x58,0x00,0xD7,0xD9,0xDA,0x55,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0xB3,0x53,0x04,0xDF,0x00, +0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0xDA,0x04,0x04,0xDA,0x53, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF7,0x00,0xE1,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x57,0x53,0xD9,0x53, +0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x53,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x04,0xD4,0xDA,0x04,0x04,0x04,0x04, +0xD5,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xB3,0xF3,0xD4,0xF6,0x00,0x04, +0x04,0x04,0x04,0xDE,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF5,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0x04,0x04,0xF3,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x54,0xB8,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0x5B,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x53,0x5B,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D, +0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0xD9,0x00,0x5A,0x04,0x04, +0xE1,0x00,0x00,0x55,0xB8,0x53,0xF5,0xF3,0xF7,0x04,0xF5,0x56,0x04,0x04,0x04,0x04, +0x04,0x04,0xDF,0x00,0x17,0x04,0xE1,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x04,0xD8,0x09,0x53,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0xB8,0xD0,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0xD5,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDB,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, +0xF7,0x56,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0xD9,0x53,0x54,0xD5,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD5,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF3,0xB3,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xB8,0x00,0xFA,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDA,0xB3,0xC6,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x53,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0xD5,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0xEF,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x53,0x53,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x59,0x00,0xDE,0x04, +0x04,0x04,0x04,0x04,0x54,0x00,0x00,0xC6,0xDB,0x04,0x04,0x04,0x04,0xD8,0x54,0xF7, +0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x57,0x04,0x04,0xFA,0x00,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04,0xF4,0x53,0x04,0x04, +0x04,0x04,0x04,0x04,0xD5,0x54,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xF3,0x53,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0xF3,0x00,0x00,0xF4, +0x59,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD3,0xF7,0x53,0x00,0x54,0x55,0xD0, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0xB3,0x00,0x00,0xF4,0x59,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x00,0x00,0xF4,0x57,0xDA,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x53,0x55,0xDE,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xE1,0xF6,0x53,0x00,0x53, +0xF7,0xD5,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x56,0xB3,0x00,0x54,0x55,0xDE,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x0A,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xD9,0x55,0x54,0x00, +0xF5,0xD6,0x04,0x04,0xDB,0x55,0x54,0x00,0xB3,0xB8,0xDA,0x04,0x04,0x04,0x00,0xF6, +0x04,0x59,0xF3,0x00,0x54,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x53, +0x00,0x54,0xF6,0x0A,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD3,0xF7,0x53,0x00,0x54, +0xF6,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x53,0x55,0xD2, +0x04,0xF6,0x00,0x04,0x00,0xF6,0xD7,0xF3,0x54,0x57,0x04,0x04,0xDC,0xF6,0x00,0x54, +0xF6,0xDD,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xB8,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xE1,0x00,0x16,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x59,0x00,0x5A,0x04,0x04, +0x04,0x04,0x04,0x60,0x00,0x56,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x54,0xDA,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x9E, +0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xB8,0x54,0x04, +0x04,0x04,0xF2,0x00,0xD0,0x04,0xDA,0x55,0x00,0xDA,0x04,0x04,0x04,0x04,0x55,0xF3, +0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x53,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0x54,0x53,0xD9,0x04,0x04,0x04,0x04, +0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xB8,0x00,0xDA,0x04,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0x00,0x5C,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0xF6,0x04,0x04,0xF5,0xB3,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDA, +0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, +0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x54,0xD9,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x04,0x57, +0x00,0xEF,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0xD4,0x00,0xF5,0x04,0x04,0x17,0x00,0x5C,0x04,0x04,0xD5,0xF7,0x54, +0x00,0xF6,0xD9,0x04,0x04,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, +0xF4,0x04,0xF6,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x16,0x00,0xF4,0xD9,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDD,0x54,0x54,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xB8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, +0xF4,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xF3,0x00,0x0A,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xD7,0x00,0xF3,0xD4,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0x00,0x00,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00, +0x00,0x00,0xF6,0x04,0x00,0xF6,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0xD2,0x00,0xF3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDD, +0x53,0x00,0xDE,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x54, +0xB3,0x04,0x04,0x57,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0xF4,0x53,0x5D,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00, +0xFA,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD6,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDE,0x00,0x57,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x55,0x00,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04, +0xDC,0x00,0xF4,0x04,0x04,0x04,0x04,0xF6,0x00,0xD2,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD8,0x53,0xF4,0x04,0x04,0x04,0x57,0x00,0xEF,0x04,0x04,0x04,0x04,0x04, +0xB8,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDF,0x04,0x04, +0x04,0x04,0x04,0x59,0x00,0xE1,0xDE,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD5,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x54,0x41,0x04,0x00,0xF6, +0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDF,0x00,0xDB,0x04,0x04,0xDA,0x00, +0x57,0x04,0x04,0x59,0x00,0xDE,0x04,0x04,0x04,0xD4,0x54,0xF5,0x04,0xF6,0x00,0xD7, +0x04,0x04,0xD7,0x00,0xF6,0x04,0x04,0x5B,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0xD5,0x04,0x04,0xDD,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0xD0,0x00,0xF4,0xD9,0x04,0x04,0x04,0xDB,0x53,0x54,0xDB, +0x04,0x04,0x04,0x53,0x54,0x00,0x00,0x00,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xD6, +0x04,0x04,0xDD,0x00,0x53,0xD7,0x04,0x04,0x04,0x04,0x17,0x00,0x53,0xDA,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0xD2,0x00,0xF3,0xD9,0x04,0x04,0x04,0xD9,0xF4,0x00,0xDE, +0x04,0x04,0xB8,0x54,0xE1,0x04,0x04,0x04,0x58,0x00,0x58,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x53,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x5D,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8,0x04,0x04, +0x55,0x00,0xD6,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x04,0xDA,0x53,0x54,0xDE,0x04, +0x04,0x04,0x04,0x56,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0xDA,0xF6, +0x54,0xDF,0x04,0x04,0x04,0x59,0x00,0xF6,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0xE1, +0xF3,0x54,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x5A,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, +0x60,0x04,0x04,0x04,0x04,0x56,0x00,0x53,0xDF,0x04,0x04,0x04,0x04,0x04,0xDA,0x5A, +0x00,0x00,0xD7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xF4,0x00, +0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x54,0x16,0xDA, +0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0x5A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0x00,0xF6,0x04, +0x00,0x00,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0xE1,0x00,0x54,0x5B,0xD4,0xDA,0x04,0x04,0x04,0xDA,0x58,0x00,0x00,0x0A,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xB8,0x04,0x04,0x04, +0xF7,0x00,0x53,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x53,0x00,0xB8,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x53,0xDA,0x04,0x04,0x56, +0x00,0x56,0x04,0x04,0x04,0xDA,0xF6,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, +0x53,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x54,0xD7,0x04,0x04,0x04,0xF4,0x54,0xDC,0x04, +0x04,0x04,0x04,0xDB,0x00,0xF3,0xDA,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04, +0x04,0x04,0x04,0x59,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B, +0x54,0x5B,0x04,0x04,0xD8,0x54,0x54,0xD7,0x04,0x04,0x04,0xD4,0x54,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xC6,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x60,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDD,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0xDA,0x04,0x04,0x04, +0x54,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x59,0x04,0x00,0xF6,0xDA,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x04,0xD5,0x00,0xD6,0x04,0x04,0x04,0xB3,0x55,0x04,0x04,0xDA, +0x53,0xB3,0xD2,0x04,0xD9,0x55,0x00,0xEF,0x04,0xDC,0x54,0x00,0xF7,0xF7,0x00,0x54, +0xDC,0x04,0x04,0xDA,0x54,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x54, +0xF7,0xF7,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x0A,0x00,0x53,0xD7,0x04,0xDE,0x54,0x54,0xD7,0x04,0x04,0x04,0x04,0xB8, +0xB8,0x54,0x00,0x00,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0x0A, +0x00,0x54,0xF5,0xF7,0xF7,0xF3,0x00,0x53,0xD3,0x04,0x04,0xB8,0xB8,0xB8,0x54,0xF6, +0xDA,0x04,0x5C,0x00,0x00,0x55,0xB8,0x55,0x00,0x00,0x5A,0x04,0x04,0x04,0xD9,0x53, +0x00,0xF6,0xB8,0xF5,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x54,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0x04,0x04,0x04, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x00,0x04,0x04,0xD9,0x53,0x54,0xF6, +0xB8,0xF6,0x54,0x53,0xD9,0x04,0x04,0x04,0xD3,0x53,0x00,0xF5,0xB8,0xF7,0x53,0x00, +0xF6,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD7,0x54,0x00,0xF4,0xB8,0xF7,0x54,0x00,0xB8,0x04,0x04,0x04, +0x04,0x04,0xE1,0x53,0x00,0x53,0x55,0xB8,0xF7,0xF6,0x54,0x00,0xF5,0xDD,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0x55,0x53,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x17,0x54,0x00,0x54,0x55,0xB8,0xF7,0xF6,0x00,0x00,0xF4,0xDD,0x04,0x04, +0x04, +0x00,0x53,0xB8,0xB8,0xB8,0xF7,0xF5,0x54,0x00,0x00,0x58,0x04,0x04,0x04,0x04, +0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xD0,0x04,0x00,0x53,0xB8,0xB8,0xB8, +0xB8,0xB8,0xB8,0xD0,0x04,0x04,0x04,0x04,0xB8,0x54,0x54,0x00,0xF6,0xB8,0xB8,0x55, +0x54,0x00,0xF3,0xDE,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x56,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD3,0xF4, +0x00,0x00,0xF6,0xF7,0xF7,0xF6,0x00,0x00,0xF3,0xD7,0x04,0x04,0x04,0x04,0x00,0x53, +0xB8,0xB8,0xB8,0xF7,0xF6,0x00,0x00,0xF4,0xDA,0x04,0x04,0x04,0x04,0x5C,0x54,0x00, +0x54,0xF6,0xB8,0xF7,0xF6,0x00,0x00,0x54,0x17,0x04,0x04,0x04,0x04,0x00,0x53,0xB8, +0xB8,0xB8,0xF7,0xF6,0x00,0x00,0x53,0xDC,0x04,0x04,0x04,0xDA,0xF5,0x53,0xF3,0xF7, +0xF7,0x54,0x00,0xB8,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0xB8,0xB8, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDB,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xDF,0x04,0xD6, +0x00,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0xE1,0x04,0x04,0x04,0x04, +0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x58,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04, +0x5D,0x54,0x56,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x53,0xB3,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x54,0x04,0x04, +0x04,0xDE,0x00,0x00,0xDF,0x04,0x04,0x5D,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF4,0x54,0xB3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xE1,0xF3,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0xF6,0xB8,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x55,0xDE,0x04,0x00,0xF6,0xDA,0xB8,0xF3,0x00, +0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x81,0xFF,0x45,0x04,0x00,0xF6,0x04,0x00,0xF6,0xF6,0x00,0x04,0x04,0x04, +0x04,0x04,0x54,0x56,0x04,0x04,0x04,0x55,0x53,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00, +0x00,0x00,0x58,0x04,0x04,0x04,0xD5,0x55,0x54,0x54,0xF6,0xDD,0x04,0x04,0x04,0x04, +0x57,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x54,0xF6,0xD3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDC, +0xF6,0x58,0x04,0x58,0x55,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, +0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDA,0x04,0x04,0x04,0xD5,0xB8,0xF3,0x00, +0x00,0xF3,0x57,0xD8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0xD7, +0xF7,0x53,0x00,0x53,0x55,0xD7,0x04,0x04,0x04,0x04,0x04,0xD9,0xF7,0x53,0x00,0xB3, +0xB8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x04, +0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x53,0xB8,0xD9, +0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0xF3,0x00,0x54,0xF5,0x17,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0xDB,0xF7,0x53,0x00,0x54,0xF6,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x17,0x55,0xB3,0x00,0x00,0xF3,0xF7,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0x00,0x00,0x00,0x00,0x53,0xF6,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x5D,0xF6,0x53,0x00,0x00,0xF3,0xF7,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, +0x00,0x00,0x54,0xF3,0x55,0x5C,0xD8,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x57, +0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x00,0x00,0x00,0xF3,0xF7,0xE1,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDF,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD5,0x00,0x00,0xF6,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0xF7,0xB3,0x00, +0x00,0xB3,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x53,0xF6,0x16,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x5A,0xF6,0x53,0x00,0x00, +0x53,0xF6,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xB3, +0x55,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0xF4,0x00,0x54,0xF5,0xDF,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x56,0x00,0xD0,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF5,0x04,0xF7,0x00,0xD9,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xF4,0x04,0xDD,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD7, +0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0x5C,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDC,0xF5, +0x58,0x04,0x04,0xF3,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xB8,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0xF5,0x54,0xF3,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD3,0xF7,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0xF4,0x54,0x57,0x04,0x00,0xF6,0x04,0x00,0x53,0xF7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, +0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF4,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF4,0x04,0x55,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x5D,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEC,0xFF,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x04,0xD8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x3B,0x3B,0x3B,0x00,0x00, + +}; \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h new file mode 100644 index 00000000000..e154825b3b4 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h @@ -0,0 +1,50 @@ + +/******************************************************************************* +* Copyright (C) 2022 Maxim Integrated Products, Inc., All rights Reserved. +* +* This software is protected by copyright laws of the United States and +* of foreign countries. This material may also be protected by patent laws +* and technology transfer regulations of the United States and of foreign +* countries. This software is furnished under a license agreement and/or a +* nondisclosure agreement and may only be used or reproduced in accordance +* with the terms of those agreements. Dissemination of this information to +* any party or parties not specified in the license agreement and/or +* nondisclosure agreement is expressly prohibited. +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES +* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +* +* Except as contained in this notice, the name of Maxim Integrated +* Products, Inc. shall not be used except as stated in the Maxim Integrated +* Products, Inc. Branding Policy. +* +* The mere transfer of this software does not imply any licenses +* of trade secrets, proprietary technology, copyrights, patents, +* trademarks, maskwork rights, or any other form of intellectual +* property whatsoever. Maxim Integrated Products, Inc. retains all +* ownership rights. +******************************************************************************* +*/ + + +#ifndef _BITMAP_H_ +#define _BITMAP_H_ + +// bitmaps id + +// fonts id +#define urw_gothic_12_grey_bg_white 0 +#define urw_gothic_12_white_bg_grey 1 +#define urw_gothic_13_grey_bg_white 2 +#define urw_gothic_13_white_bg_grey 3 + + +#endif //_BITMAP_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cd2cf93446c52ee0f5a800aa6d4332a21e693610 GIT binary patch literal 28016 zcmeHPYm8+_aW2UDku?gDLf`@tfk+__Kp?;v@B;QaYkQyentRTD%!?sr4XnN1_ZmBZ zad?`^-ngUi-TB@{%9d<#(PrC33IGo~y5ulaHU2!-o#bEq{ND?7HIJ za^2zg$l?75<?7r$sx$4SY@~KaLLO%A7hfQcKNf@5E9C>%?~^<3e1UxCmOqj&9et@h`sn}4;ll^y+H0?o z8*lum+;GG7vTfT|*|KG`{PLHNfuFyWAO3JbzWd$p$Tz?F&vO6$_sKo?9F;GA@lH8% zY6T>0GH&y(Bk%E|3tdVzfYo)^iT_r639 zUiU(I;9D=3`~T@2x&6*p%V%!ANN&CTo${5hT_Yd*$WHm$&%ZC7?n83q==0^~+g>4~ zJO4y>T~&~4uKg=H^0nv6-4DE6K7ZdUv)tmR8|5oMzF!_Z{_pb4e|v%a z#mna7f;H&ckPuwcxg|5?}a~=pC5l**8Tp1 z{MpMETNhQmHJ9 zi;EJ+v9#N5dHCUn0augHe)hBS=}&)JZoc_u$n9a-zJ0rF-AZ}gf_9rFSW9ahSmVGN z2ZCTt7pzIa8VA-mKn|>5W5XH;);O?~1GQEmE{rcN{VjiA(*?if6TCLOUx5Ro7D3C; zE^8Z0R9jYf`UTQk8Fsbum7!0kv?lG-0n5TXRl1;74O-J##7~?rE$8wRH(0Cvf5d@$ zoEdC9m3eX5T$+|wo_WcLgsny}7mF-g_v1aOoIwYxt@+i;&!DSFR$5~-dC_GWOYhiH ze$IjOL5PpX=&9{@LrY)!_rvE253sw zYI%~~t+uFED}R#c`@q}Fts0yabR0~5xvE$ncru!j3xc^s=}jfO{8TuI_VaC#_B;_4 z^CI~X=B6rUhSVigB`_*o7O#*7MVo33JDg4WX)IPGl^ zN5Xv7R1foETqn@FFaaH@fJ~?RV!!^`I_z_#`n6a88(0T;mqt5+ZXzQzk_=5{8BwZ3 zsT7n7aH|($RPC~AJdP-obv@HTetZ~diX45+#d$!59xAB=6am413>a{}RTVPnaZUNs zo;;%Dx<*F&qH8i6Wr*@E36|41mh;AbZ4KO0I==p;2SEYPC|mRRyiRH zhC#Ul1bSRrk+Fi!yrZX99fRtj4Mi#wj_Y%h*+e5_W8SIG*w)mP4-}NW4yD|xqyVkbm_Cef z_e^y`p!!a1mZq?fM9K!#9Sed5!OaEXEOj6+$i-9~Zq|C@xEy7sk!=&XX(al{krR4Z z?@1U{d*XBhs06DDmV)4fNSBp<5`ogJsR5Cw+Lkd2NtyYs3GG1W4Y)|gVyrH+$r^c6 zR?3QE23<4ul1*}fJxC%Bv7D$((4$;)n z1(JsWZ%xWlfm~A=7@r#zk{6;GNe{sEVa?#tz>MK%%Fj9Y%L!_W3$Szr>y}BRYP@Bh z@{vARouu_ah*hnr)5cE)iWuF5(rV1L-O3)vuBy7Z9_HaL5x&-z+@!bVQqQEm#HjLe z17pGo1lnqcvD0rk=~6B*AQd#M-Da5D5TROYbJV{+S|sfpHc4p{JjeC$h~%je#?=jJ z_)UM*OrXe#5lB?=W8bxC6!1(F5DyMIO_1Q;O!}HI2TDn}JJs+r&3fz@K21=6I;E3i zw{>hfB#8uaEUqpX5)+0e-oVKJx>L-$wi?Mp^ z3*``0m1tl}9R7J{Hg>!X?z>5mBbS=7LC{t0QkOVk6aiLDSea#3P!D79ZgW|n#R|hh z7f`bze+AN9TQn#8D_MIA6+|`3oP_*(|GKQ5$NIAN6&=q~Tv*U%H(Db_xCokioYLOr9 zN)6`{CB-R6Geuxl)w{zB7`J%TEv1XAj7dpWQ=X8p2k~b}=Bo*xI$@I& zQ>o1O@x?OTOm^dfwETQ{&k-1O2!a=W>xO=5kowy1QWMYZ{c<5L+|M zg~XAhwE}_Clvf$i?D0^Qv#Usb1TC;N=jxo3;N@h>1VpLCCV5<;3a*P9Dk1!HOwyf$ zdc>SE&4QyI!yH8z+E7{Q){bf~mQJf8W)qi=m9d4ILjYm*iIq)kk>TJmgX`&r(trVt z9Ujv!Py#CAY1E+>a+$hrIpT3Gu=c_1@LW{CW;F1l7s8b^5yw=W?6`Z~SR0-RG zr4o3!LK<_j8U$wnJh4`Sa4g8kCmI@qh@l0*JoK)m3653i8B63jTvZnc4&}5RJ99Id z`E^+`EA5@DCqM2N(RJQf(50Nl3;cS(Z&0_%_qu>4msAGId1y5!1Kc6q3}=nHOpui; zAD#pgsX!tY({FfjPJ-tjmNzBDUTf?KX%?rvOk4u9Zp{;-)>0Y8;JG&3OgIJ6Gx_nQ z90K-4CdWg?NMqWCi-I&JZB}|vV=Wa+5R5&fKNV@Jj_ttO7*}>;LmAYuL3`4;_WePR z_ne`kE&1?u%yu$wX?aDP7`|L?1Uydbkn4Xz|6U>WRhYRn7?O2qqfR)(w|;{yhLxVS zRW~#q8Y$4chH%U~u0~5%9ma-aOFU_gxzS0Y9+-1n0~A*Fka`_3CR%=H1n+u~adSq9 zD~WR!@B3waSgp)}`b63~d*Dj-+ENjLpHuspIQ2{5WeI zMp)4ed;xPYW1`9#jkWkhCp9NwD9#2Ib~?;$5u^Di255uAmK)8@%>u$9h7xhX2Q1ur z3k|{@RQQX4$88MfJ_47g7g@KY*|GA=9(+ZzMQ3@?sZl=PyCcKB)+%E@=1lM%9APzF zWIk!Y7pfkwIh`7sF?k$Y$9gPg=>3lL=1&Y|!VpTFInM^Q^a)?f6nMdS>lddUf0(wR zJ7!6D7RQ4HE~8|tacDCncQV42;hPD%M~L5So%d6T4X98H7g6DrJ znCw6nyF?~Eg3TO(mt1bgxFX6+g`N9T5;gxCEd<-!ne$hR6s5Yr#KzHZOjWh*Ug&5F z-8R`Z)j0pV6iLQcp@gTQ18izb2G#OTD2Ea|8*$v`*CR}R(jCUM)2F-B1{LEQU&K2sVjVX-QuWpKh{ygDa-iRS|zawF+!6P zJ6bXbCx=B0z3W7%ltds{SvJ$P2+P$et$KEi4uS#Elu?py4BSzXaJV4(vgIpdv`8^R zGhwMm=gr~l$t1@%WX>8^*647t$2ew&9frdX3U8DRu0ffzdgB|>Ls0bnL~(U09y~gXc3`_|HXT#du>yjL(QVG6sXyNe z$}#N^?n=f-$kIhh3`1B}efpTu075eX)f%k ztuUXkVv^*2%cLNiF(<*}aI%%W!c8z0GP#JAsV0PmNevFx3sFsQ{w6G-jl%}Re%y3l zPdWpGU7k|7Fd_mk<905folJvoIM_wva9rZ+493^Ccm>{|l!kS!m<;lcl-uTPGGKHl zXFLY3Jg~JdC4;h6=0HonV@&O`CcciaOLaj{1CrW9iWxa~ZmSNZZ$u9P=)I(QvKW9t z;AL)Zvelz6nc`6hYAlm<44>05-^TH1Q3vYhG-+ZP^B>G8K?4=e7;+g=1`FwRSe#~f zBIpt~s~L}>XE9@sc`Dh8w4|dtzv*ieEG|>^(LxKv`K{zQHiLq%s%`L7$#;-HFfCe(VMwyd5oLML>+HXY}nsxj|0HxF9z*Z zSIy_JFFTTb1N`brRmwnZ$`yM#E9@9(Uj>aMCOVX^k$MQ^*%BWiJ&&O81tGT$z>vbU zOhd%;+;?!fq?*j@igv*XQ_c{LDIzf&{VWiq!Z?$7v7?wx6;eXcr%B@gFm)}&ZK53l({*_OdW7QUgx_&dms~eo5{mE~4uWHtt@JI;5r2P5>yTUa zQpFa-)K?KcWGHlB(njVXC|G|$GuD#=n_+AfxV>OwH3W4G(qq;Dka=fT3DMAu2QWxK z0B5j`%OHSYeW-H@0@@yPh}q(X#-uK7!EeGSDC^9alykZiite!HsC!qu6>MO*YlI6$ z*a2`nz%al%-suVTPES(B)rK2Bp#hdThPg28DBuj%OMw@`^opBa25f_A#c>pEzem|z|;N!7Xgz%75Z`w2=&YcDe)r``MMpe@qN_qOw#{Qvpf%LFO zYPGtQYPA^|#atyDg)VNM5xY$X?ed(=L9gn$y0m*@)N7EiZu|;&a^pMe|5Yc!OUabY zHyS!o@G^%s6Hf9GhK8Gq{$PWKK`rrbbGUQi0P95DUWB+a#&j${^9p|sQ5G&kc1t?jDN zq-h;;%U?RSyJjmE)%J}ZRwYfR< z01BCYAZrepJ6xo`R?Y5ROkOXZ_I*uiCTkc#kg&TrBWYN-U6MpQAE}HnFM1o11xpg| zAVc!>3>Vb#4)U10>+7oAHJD?#kqkgRUxBz(6F`(A0d0*p{VGG0LBMrU*yUDZW5&}m zye-JA^cH}S7xas4mQzT?%5c?K)h+KJL!nSa0o_NJQsVC*7uompn1nEJloFaHPL@DP z&nwXxXd8qcvuP4BEO#wJCpS_3bZs3jZK3$mM;3?q2msbDL+W2Oc}4Og}Jh|nxc!Ke&aiO-pZFlolXhbX23GpC+_StYHQ9UCaCB0 zX*7E>AWClf=xeI6L$3?EWPhGZ-E?z4#KsEiaS#Gg&}GTC>eaQfc0o{DhZr41J*24# zY)FJWMdAgUQTvV>5oNVfLFIs%@G(2EfX+}NsPN>B_c_~dTn9_8K5O($t(O`X-=ye8 z`W=a_a|*J2b*$aG=vjw9tzlQ8#qocj9nVma82U(C0#S)!?Rql6*9&&8=P2AqX4$;2~Ln8_}|eul5k z{yIY}OPlM2&_`I|J4NaOdRKIS5NW`pN1a}fxQ?6gC8+W+hIFtkbvn}sOfP&<E`+8N)2p0A?K)gnpZp*XuU=ZBo>BO*7vnxv!Lnf*~({n*=Dmd~d^K4RR~J>>z_O z6&6rt1Fk4G59OkpP5-|$S|5(b2MeN2$n~YUlC44Om>3-kDRtN(VZ$i zqO!4w4(tyspq*kHKuO*f8L$0Hq$>J>6&v1U`r^%Xr*HH^T2HW+NntD ztJl-hK?z~1CDeDY zOC;?QM))F~1TT1LVak}aY#6vj_oAA zkHGbPZ<&`l>138*rsCAu@>Cu6{aRY%z^{b^MQ1krS~~k}?&N2y4(@4Fc&qlfR-lkta0Esz=8E5{|DEvPg4K@ literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.mff b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.mff new file mode 100644 index 0000000000000000000000000000000000000000..b4fc0b62d287061a27ed63dbf78755964569a666 GIT binary patch literal 382 zcmW;3OGs2v7y#h^;l0B-|G7G2h|neZFxpnx-{1sVfn2 z5w)33AcCN{6N*+XW|atS4Y$prRe>Oh8x{OM=z~+3jX*gHBsT-p`E%gTD}%HPexQp1 zu=9i9DhPpH*bP!N1Xghb>`RkCCDWiv=RnGqz`Fbq^p(#byep6GC?&j85$Ysyi`Mb@S+{kE6M} ziga%cRd5rf;XA6vALwb?MW^`>dRh)qS}pRlWs-z)N#8Fa)m}-`QA=r^?UeCggq*G@ zrFJin?)gM1y>U_xSIBy_Mo!;XlE(?M`?ts$*da5RBqzK_&XZ#@Lx%0)Gi;t_u{>-%x;x#ymH?z!ijdxz6^T)sy%ofwGx8FEj@?{o3{6!{&kKj|GJ_ddh^ z(+YeZe)wU{e){%j%jNs`$}3-Wvb^Aji}JLm&WqeBa@nO<$-@slEQbyrk{kZ+2HAbl zJLIZE@03IP4#>g1`(^KCm!a*T96WG94(#7A`}ggWeS7!H^&kJZeDDJwkhkr6t6cb& z8M*w@J+k}l7s(Ze4$9ukFOy66Tq1iexmYf_c(;7~V;_|df9Qj9#evJ^(EiKh;J!=c z{2k}YM7bd4VkpJv0y*XNua&K*zd_DA<22cR?wPXfoHOLyv$x85+s~FA+s=}UcfVcU z{StrxxpwCn{fm&@s=o-C)Ga+3VTX|Izrx1J(XJ1a6dQIfaJOv#(4CqX;u zy;QH0cFJHaqh4PJiPm_E8d8^#}?-hC92e!$7{@0cA zH`f*A-S4T$a{Ctf!T)?s?)(RluhjlfZaMNyIeh!Go1nO|M5h*`PP@qCvQAcZoK(z^2IM-A@Bd-F8Rq%zb(D~eRBB7v*r4m zULrHQ{#bTjQj{yM{7X6fbJt7cBcFV=yzBk1mkSCnlkMlfOb&nc8u{35 z&yufv^Uvi=Uw@I@QG2m`0kEI1zC>=i^Hp-j*{_fz|MCjC?VeZ4Enhi7cJDh?c3phB zym{BDa`yI@OL^z1QrUTygvG6L{sm`9SU5*c+j@c=y6Pf1d&g^JKh|d3jx*)7GhU1Q z9(mWh|4JTw=ofMl6gzGcO?pqzL91@h|G zzCliU-Dz^diLaAWPTeYJp0!Q3o^g&$OukvJyy|KhJn*o*WB29q2QQ3e%X5D$KmFN5 zGV*&J`O_D5JS&N*kh zl*<));DHAuNfPOHyK?{i_XDmepZe6NAPdr2Qx^nV!brDiBK^f&}uY_5k2#1HX?PWKi3{>RwOu$#gJ!O}3l zhD*3+0j-vrWsC?~%(;mrM^ka6gvT39)kLWPc`+T%Zc#O!Hpxi5Q!!adU>Rk|+0ZG3 zXo~u#sj@cYSg;8rn&n$~Xkms-GV5#mPK;eABfaFhbP7h)veA)F&7f8jFigUvy_`hi z@hyl>bQ*Jyl6e9y#qQ8vs<5)KYQ6C-4DH#PKitzyLFI_xrF1*_$vFOzH$f~DDNe4{ zawv|gY4y69#UdxrZ;*D07b&J*LYi!f`cBA#5-4|oKu^HBP0mldmDItCTF^}yp?p_r zn~I(kG$i_-4QBNC$)o^|S@Q`=DI5h9=^|<;xhY*)ms%vsN6%-jhE&HL*E=G%dK@t} zHik}hCZc-^8`sDw`jekr)uaRreGJllGhGl!fnbR?%#wE=SFaufQz8ZUPm@8jicEM90mi~1x`HX z{_ZHVtWOZa$N^K5BnA-s&w-k5A%Q-K#!=L^LKjQQMlAuj;-+FqT9{=O_yN^bsC1`- zWc-`qB&#H!{~=9Ew;4#arm5v>kAh#?YMnHTgG{?LLAwzp12#B31_Q1{c*2vYK9Vl9 zjE&OM1uYqetI9*arj!9L+^ECQgv5Ac_{BtiUyEsGF>(sDEp^qAXikYp7ac=qXl7I` zRH9N2@kZHpNJ#=4CxDcqUoC)}Q3LR+Rn85xLZpJ=Xw?Bua`bi`8XSP3F1*o$#qP4M zkGW

N=o5(UUuK5j}EWvIcyIs>m#0!^(mUkOk7!O;Ctvsi$;NTPscoa}}*LgpAM2 zRn7x@!sHZ8PkFHnodUR7zvkfY9Ln9u1z385eajSO8_Gt}p=>;Zu0i)<94m8 z4Y4>nK7fKOcgjT;R4_XI`pzvie;lIcC2eerW8p0 zd<+blR{D{LcQshC^z>krXHJ8Qh+*dOqx!EWIHE1BP{f?l(P0-NiS4*73+Lk6n%Gh* zJl>6S^~ACY>7&#JK?}=`#mw4}!@n*ogPt^83pO~07=l830`hqLupw=OV#4GXyV6r} z4<;j8fVsZxP>{&D4k9TB*4q~QsHk|AO#itxt%SO8)Qx`b8kg+^7U{SLhak^=>=h;vdm<4RgmT?M@=h1+4Er*dx zB99J_JcDl<%EI98NqjqV-n1RMlK&utj%ru2hK?%>iX zWFN!izNti0kWgpmWC>O;#L|xoOU=&lz644qIEj&*J&Hai#^@5OzH_+!e9~erGwPg? zt_#%`RX)L4?2Ed$=qH_(QbHq!i zp5VrZhVohlzdctWc95OtS?XliHX z9CtoE2`1NwE=aCWu!GyH7Pq}^qH`PwsZp^l$t}=uqYz@gqEmpqhmyy@JW}k8WSC1# zRI$skj9}o@2t_qCnbe$wW-;l8b_wR#O4AI2V=h-!+R8e52Ge$|L8$R2qVX|p$yJsh6Xtrl~qe4zpgrBba2Lunxh#zst-y@Tb!?2K~y-Lrk(5l1~>>R7>XafCw*Sr`+QG$1{Y z{!(A74QCqXLNPtqv)THf5^CmCRS}tCW(cyc-!wc!Goerc@T3~>F@ROibrn+`JA=Rm zNU0%KWhpaErqR;sY&~;TU{*FdWHCd{f|F6Yo*p?g0i=(5&-jc6O_bwcg|?uUS>|lQg~)i?ZX2qVe3;x+=U66LxdwY?sRY~ z*>Q-WpIq<(>vXgNw}fkI0)p2V&V2-qY);&qsoQ4;J?(lUG_XzQ3R}#fOW`f!iY@i* z9Ap5|2M-c6`_c|Z{Lt?mOV0VBZswv;!}PQPTMqOk8CtV)HoQ5zzhDKZJ>w{-O}l}TM`~%@lpjM(p6Vi z#{w^u!Cn{mp=}%s4yRERnt6Kp#*OLK1<*hMZJ7)uB7NhQ(?iXIEQS!(mC!Y^hU$xH z;N@FO*(Vc147rq*hV~r6vnB=9MO2=1#dYiqf}P!FwCe*3H_^wP5gN+Aq`4GS0j#Q@ z8PeRvxxt4Db6FQ?g6@Ewy)Ll*q$M@52F~=RF@P`|rOi%z^nrahX#?X#f`C`O-n0V? zOf0ckXSqlPFc}tVVZ_x(!^7ze(6a})$jvz$Z*Eg;7-)yW=}M7}OY1FCmJG3fQcwMGEP#?ON?KaH(yvjB;)z zD{*I)YJJ8rGf}d!avbIY>mJ0IxCi8JESGVKXkCcTQrd=Qu*7qPt7vD^xS<|u0CI9# zqc^@2Jp}6o!n34DCwBoZi+F8;6>PTKsp)Q8V0@wkdjVRQsSS~_*CVMeum(q5Nx5%d zH0TvQAC**C-}R>f{oZKab<}8z*W{?1@@}J-z%CbziPM~QbM3h}g|%eg%&=E|>`$=( zN-(q12@XTWB{~zh3vfwzdgvhatTUF2n*xbPjgf#a{`reqmJFoj=x-6y^@8qCkHTQ2 zp7#;*bdeI1fr?b!Etl5?HatsQHKb74vZ8W_0~$M%T1HbBx?xUp3(DBC_oo)?%J!A6 z>R!bYON?L{yx*|45X@7sbGl$DCYO3xK%`dU42PgynO?+(O9f@2&m#mQt{7=hAM9so z$|)@?dEe5v4*eDsrN@!+*??N1vwKEM(3HB%SCm`Y0ViM+`+9|j%eeF)?yyfIR3S~6 z?u(^YEcMyu!iZSCX}cFt6o?$U3uhh*mXxDgFu(4EqQb{46pY+cm6L#It~HV^2I`eF zka4nw1zS{)0Ke%R&0@9VAB=KG5|(yN7vDywO-0Y4(*gpL&b`SnBj;YAt3&BKSwxPd zV{`$<6`NqRf;(N@hz_-4wLQ(PuIiUD2w7OuiTX87hqjEJK#P8Bt8f-%9-0ZHCh|1T z4%}w=EVSJlSZvl6Yc{Y_Lt+542-Q~2G%Q&+UXNJZO{ZTT3y;3uYz+(0=&$Ohm z!^9gVE4r#WQsVDJCKx-!B$%>L4`2v}$QtWe!U`fyx!(b7N%5iU2$NUorCLOAD<3;N zhGb$vAPC1^`)C#~(Cu#z6>4T0)zrX6KnC#G8`S?5z0%;+8creAbkt_*S=sd5S*^2l zOVz?yNUPuD-zjPXN`pZG|8tH(A0JRdP0%0^js}sb@pN5WRSZh{dU;E0CbhS7R|@Rx z&JbqTq!p#skM77wi!gXiJ_|BZcjtA129QF`Q8amKk;GW)ns;X`pBg|4^%U(SPT^=8^rWkZ*Z7EkdrqXlDew(u{f)XCuxUIp+ zZvi)M+0eMVq`L7#QH-Xm#I2(VrVKQ8qNe~*#4EUv#t~-l_)fvB z#C3ElSS_1?%;+{@`?9LWLZ@9Y=tt58c1`I|B*YF$2EN5<>kIRWX`xXXak>WFr<5yP zR0U0awer<-mu~ugp(tbMSBv^HD=}9mKZG*CKN{eb!SEh|IhnmSYAh%Lm>tf-S@<3^ z++01#7qtRU3aBP0{EnY*WU0C3oL#Cky zKb2`r8V&eo9)f}mk5JH?0;2jZV|k~wy6y_TJp<+B!SJ-jI$X(Aq#sSe-E{kGx6=vyOP4=|__ z=>s3NF7XV>-WsV&TCLVu!g~ag-hr3IcSR9QbNp|B@MMfT46m~MTO(kyCrqB*M9(#B z2tx)o7*JrB#}R(Hoa5zA6)GY?1GJ@6t zND28uC|w8aBf7 zb>uG>P;#=!8x9&NFqIPg#f8lKSC%x0(<^l&ONrj;@`|uiX)BAg5F{JiDX#cQ6RerQ z0m^V7x3Els^UkkP8RLD2Z{>Ba)22()lwZH5 z9zY?Dp(6?4pk9M;3Aw`qE=cqDxK4%!9H%=F)({PbZ97tx8F(9;5#!0$S zTCDMW!2Kr%kXWC}*WFuRd!8ISgzmBO7Mo;?FN6({Vy;2sIeN%=XOA6-SLd)a^dXAD z^J`O3u4!o}M&<*31a+lK3PA>XMRuU-2vGsM2KDRE1v^x+)EKgutm8%-fR@}y%Jsgt zleS=`(|t5Ch!@oxFPU}2cbtl&=O*YLPXn8eeNrS!`f@0XL&q{><0k3h zLUes~no`7iR@)4yP#j;NsMhfKq*3%Z9Xr%d z&ix5kyFTLI2cru-%42r9A2{~vP8BM*pJT7)))ruRa%1Kiu;Bi@EeiLW#Lh!7u-sn@ zK&xR__`c)ZlGU6KsE-|dYnctU_I6RTZoI(Wrg1VQeLoZ0Ee^a{3uKpMf{msI;Dxe) zrB{WK|GU3YjD&U4=o#+LUFxc#r+U{5hi}^G*OR|dyVb9SGO5Y;8iFxPD*s+AWn;e2 zubZDA%X)e~XEl#YPN$Q7hHz@^5KE?_r>~Gh?*0%PQ7_~WykEkWq}K69_ zX;bTz0tQV=XSAlspC&TD2hzhvxd8bl2mm`8rT7qhP6K8SDl2I zULKscNxZdzzXm#b>S{&$yssxc{7p%A4K)FoC8c9X@l7Fpo*NdGO&T z09>q(&|gbmWIZBLStHI~x`B4P$iM8t-zLHR(LWtBD3qYEG||y4z;GC6X@M4m{%uly z21T~z{_2P&B>ZiX%dtzVAJM^ulPU?t(Wc231$l_?7-yINs{A&YpR| z;;v``kC3s3>6NrTKUbFELlYg!iYmw1Xp;VKF>rhC?vE9X|KI^l_Qx)+GGmN~TJLu) zR1MNN44H?qJifWgTz0tQV=X-~x&V*ef0s)($QiGmQnL#fFF>j=_@I9^MA3&-qHX|r z;H3c;$1C4T2!T=i4%JRYjP`?K(XAeL0$P4$QYS(GwwQlFO6kB*_~jp%hBZaTXTK63 z%~0WV(*nsu!jYzlf3$;SmG~k*4RlrW3V0!yj3kXyIF7YBcq3XyHTSX;FLAp zwy`uQ0y_g9qTh6j5pIK1#9X@39xOm_0c7{PKxd2Z`LDk-2m(66%j(wy%vybJ9jIdV zmf4{4FqX$RSDDLtw2#m46Qc{pdFq1Z#Qr95h}4sZO1T0;5DU5DqsbO$7iy0NeiL?+ z1CN0Nxp41ez_Qsj_{oMmc)}Fkh9hn^Y;s_e15X|YHna<#Jd!p?-sHe02c85DoGkKx DNF{ZFxpnx-{1sVfn2 z5w)33AcCN{6N*+XW|atS4Y$prRe>Oh8x{OM=z~+3jX*gHBsT-p`E%gTD}%HPexQp1 zu=9i9DhPpH*bP!N1Xghb>`RkCCDWiv=RnGqz`Fbq^p(#byep6GC?&j85$Ysyi`Mb@S+{kE6M} ziga%cRd5rf;XA6vALwb?MW^`>dRh)qS}pRlWs-z)N#8Fa)m}-`QA=r^?UeCggq*G@ zrFJin?)gM1y>U_xSIBy_Mo!;XlE(?M`?ts$*da5RBqzK_&XZ#@Lx%0)Gi;t_u{>A^`rLs4*PL&+)7^fWjkC2C<>@vm}Bn*ci$`bzwX^6;njxd-ywD#e*YzYe}w+2 zbH=jvk|<&6{*X{JC{nyh{wM5l&k;=hM^oC!4E$zGV^>ocuSI~{uUrje$cNJZK?LKSZhj}d^BqU%?ML25zxuYf0+*w}Dp_qr01TU0@qvUH{N@c9(wqt^vO^C zEBeBzm(kg?|A$VVJVy82b2r_0-*3|U-uGU*@x~kI`s=Tw?|tuC(DQrrt#1wK&;R@> z`s!D|LQg#LIDPSpr|9>8|6zLY!OzhH4}6wB{ptTgAN}Y@=p!Hb9s2Nx@1ys>|3A~I zCx{;X644{4h#vj}qE9{eBXsJI7U=g*{WH4nV?RodJ^o|#_#giyJ^08^(H}qgGWz<{ zSJ0FHbss(b7d3kS2XCPN`M>U=-~LFM-t+49Ic{`f~GM&_kzwj2?XS zCG@#R7wNN)6zG93yp%rw#h;{yANy%Ke(z7vlV5u|J@KcnrUxGWdHUq1ucl8w@DBRJ zFWpTa_|Osh?la$@jqx|>!Bam@_kZ>kR6p{s>E>I@boV{~kskcgOX$%jUrwKY{1x=! zPyQ19+6R7_ZYup8-T0=TqX&QQee|(MUP51f>fh5JeeGxHi_MqQAE53R8n2+wKK6@r z)wQprQ~&Li^vILHKo5QSRdn-Rm(!73uB5jdxty-O@#m>}@N%jhyoQS9ee|ZAuA*Y; zI=W)ttLWstZ>MYbzlM%sZf@9rHC=JlYZ1SVe(gQ~iJpD#|I(%4liQBoO66LaPQ3dB zed8~`LBH~sHG1Xg*VFrw`{)n<<_UUw^}o}L{_Lgn?X!PNFFNzHbn|Vu(DA!Z0M2nb zdi*ZB^^V)2tHP(KGHlateS1h>8$CncJUgYe=bojX`gWh*cH{`% z^yW8Hsays=Z=_eh=2E(H-!*i{(G&E>H{C?P^xD_crLVh!UiIqN(Hkz`M^|5S1MR!& zI$ApL7P{x&_tM$fIeOR4chV&d{T?+jDQXu&I z?f!?LcW0FR5TLS)!Y&2=!BQZg=AlC2&@|Xqq->k{4|c3OA-*e1cB0H~{tr6^Hm}g) z=8PZQ0E*3ZBVjn+(rF=C-I}?j)_F5bx(E$*6uPI8+~9FcQV2 zbHR0YEACQYo&v#mFw5tpm3+#^b%pD9o8pU<6*Qx0&@4@tS|%-ShFML``h~BF&8;Q< zgO?>$GuRH3QW_OFzn`pb9n!^=C8d@*KnMD*oh8~+(PR$8g?KAQa}{3r#O&}3-^Xqb zF9Zdei4nebuzRMnWgXK(F1U&p|98}lo1zqrQd8Ti9SzLV->uIdyeug$x3^oGp-C$| zzRt2)+%lx|$`X@qrOOrwKBJUGRU~RrcSn`3IY0YUHr(QZ!uEzJH{Ej@pXWhz=hg*N zzM%duVx{N7bxTh>Bfq8U_n+aB@sabvxS&es1F&=1_X~QG^y_o7W14Qimu}nTrrzdB zys2lg^kJO8QtYz7snTC9`g&LUCD$F%9E5oN{qBjeA|SW-6fyuwokNs$4SR zj+Se>;-ww;T1#-up9N;X?-FLmlc8loR|*V{gn=Y zxRPRO4rSDH*`;1f(L*&?6B#udAJs6H-tus1#G*N0gOfqAHeBmPYe0QG=!U+y)Q*|R zrPXc}r!}sL;GpxABKz=2v+*6Zjh_=F$30WmvWhWHi51Miv3cF>)j|(28VbW`dRoiv5gR!m`+?F_9=tjL3k~*+TxYBQjcCOu6 zi^%P@hfP}RX6V`pq7fFJtyo~OB7N%EoG_?^c^oX|?4XK%;&h3(NtBdB%(CkhWo_V4 zKJ9uSI$aLqC{<2WKtU~yO}jI8U4*%fJZPF|gE8nDJ8K0y6$i|!U^X`EieW}{qy@5m z=9dlE&C3#Marw;1k~>{yZ&GB1(=0;fH137Nh?!^A#KX>-NkW33>9kDj$&nc26jUnKdQsR(O_F0prO_lc-OeyEDU$|jZ@1Gy zg4v*)?FNVX(%QlX8`hO;7>7^cD%5bue z)byXLULR1~t$_|NBx`q+qxI&f+3hR9jW*QYyc^q}XJhh%(-W%<%!*tqX z_RI(AoimCBZ#hb@-pH9oZRrW{WGrYgeKwOx%`?k9(pt}V;`EYK_-Ay983r^-dMx|E z3^JnBd1uP%!zo8?6%5$G)VyUJre=XL<1k%_%$i2scg@7BZYgMnh>OON%WG7(xQp$LXpN&B8xRER7UEEg%0uP znpI5;-DK4?wy|Q2DuGC6g&`IddaU*0!_v!W7Wa6k%4#5i4WlnAVK4z_vQy3$@0Cq# zwA|+%Vk5L_u`QhTWJ-&5zrzKoF?ln*gUw1PLXfwXXPgKrrk3@x-iYdszmXYr@v&jl zmZ6pUUd?qS+y5?@l-Y^O*snkhEGY0ZjfcWFdu`!?NLJUtCM!}Gv)ExK8Z+}FShR;m z4sZYgE7uK$^$U%2Cp^AsoG^>HB%)T9U}U*1BsD<*h>X(+s1_MRh2H^&QpPw;^1Y=! zjHszAPx`8ubp`-Aud)Qq&KVQVX|fK5te-4aT(Jmu+&HbD zicu}Kgsr(Yc6qEuqJmipKocLZwW&%5LDvihW>M`+a+Jh zqrxCuWdO=W51OuUJ$DY@c0FIHth&CZB~lK?8snf3_5^O698#ncnGa!`U#juZ z-gWMAKQ7RXS!PWzjnukst!TwbR99JYdOaqlF#?P(({fvJsHTw=sZiQ zBo}x#&#BUURD(&U<|xSQ1D92J?^YKFCs!4vNj#%^Wcr;ZHhe4FTV9DQt|b_c8#dd^ zlQ?#y0+4cN$(JI@t{qny$t+rm@~tKbOwFuNS+$C#jQ|l3yPur~DwVTp5)0C3Tv1tv zv@3)Xuz~m}5%D8%Wb@4ICC+QWsFroUvDZ8|t@PJM3Si0-5n;AsJ?P5G4th5RvvT06 zkI(UnZB-lU06&aaBj7MO%!@@)bL$qw+gX-G&Cpu-+~@Pil1#@f z_463A&of(Ukii}j<1|Xz{3F2EtcG2TSucTzI%k*@71tFp~Lq?%i|e${w4Aj!CgflQupra%Q@pkTV*znH zE8{$n16B`lHkZN3j1dJ^aXTQ)CE(L|dYTr7@X8k}X(T3NId_hui(J0~1dB3uzQ`#%aiUI# zU9DliiCq_7DCi}KNbsm5W#xh7Zv~oLr2t}$97kI$Bw;+8hWuJ^JutW_b6hHRtT#2K z8|hQ^JftlGqhzhYrCnAM5SrW?jw=akRyJ?}6uO*R#W|Y-E8(%`t?Ffg^(wZkDa25V zH|<&XnDDp%dY)Aog2Auu=(mzO{xV*Rz*$}KiqO7;wM8k-m^U=;s<{qC$uDJ&fOkz8ioL8_)6wF_{0a^62 zAMErlu$;<4!q(|F9$RBmT`V^r*q+d~xk~v-@p0*-+&3ATu1{2vuvwPmumDc3HmV}E zeQ%>#%k=aHnN;^}q>HIYnRP227I_y46G|bYNcY z=9wByB>CUuvwhI;O>BXCrfW6Ru#^`7jzz6M=w^TUA9(kzcpm;4VZVJhHtOl z2s;dHrPzgYb?c}b%FfInVYy*lC>G%vuz&o$-N3P3v5o&k;533d?%teXi|ILnX;bSxe! z#5tE?sJ$g?%xuJh-l`|N9u*fCML!Y9EfqUUgF`Za8D?$JQ2Ef~8^4#d0J^KgG3W!CxF%NK4lPMIZ6axUpWMlMRD#K;H3T z(SY~e7Bhj_RWaz9)`0m^f-UrQY;C&)iizF$J7QL@FZ0gWz=X6#95VzQUtXf1@EynN z1YN_Ym#pK-gD)mtYvDX`4WV{U{`j^wf^(daM&)`9)E=Qu09LC&UUNnm1L5%9oWG=6otZ(kiu*LxDvcAbUNo~d{#g?4b$ z#(hY_V#_Mk-b_W|)0vgTeVkX8P$%NK@*~fvFD>yYS+v!ejRUXKG-N;2hD}!`eD%8OK(l2A*r38R~(w6Z>GY zA;EW0?8@;+(JW&Yd(uKT*F`J+7<{9&Bph^Je@O!}Bcnhr+UoPL=0a8v1lW@3IN6?+ zAm)U7zy=1=TgYcTcY-BRqU<-X6tzBZ1 zhC`uW;mQGgLoNvrwSf?%~G3pLBU$CEVu(| z*J|z;+$*c80?#=H1McRoaXW-1F}5YqGHQCbjtd@|gdq&@p;_JFy13B9AT1V9(m8iB z1nPh%=lG>A2BGEL38RLKPL|nuL4ms9NpagBW@xq@t|LKF2>p!}kPR3Pa~Rq(d%r|3 zd$Cnggkml(BI!$eMyFttV11>57~32jh$nS;)2y%eDON=q!Qw?7F=m2w-Ef02)7^0d zj#JqhRo>q@c}{V{-qSIQBEd&JRsL%wdo*yuJ%)GBC# zGdd#H*ipjD9Hzxt(;{OkTotA<$U zPBQs?32FS>=vvzt@$;SIz~*0YMz3PPr>H^p|7L0vDs)PD^$cu z0ybf86VfbMW1elV5)P}iwt9LdIo(J+=-3p#BA5Na{+8N&V?e}}Tz`eDOy^3$%zyQ2 zYj*E-c4q$GYY&%Vy9Q1{ZZ_y6IqaHtnMY*roW}hQm~3G|v_ugKauYSG@uc98LawD2 z?BcT|2dsj*1TX;ybrQazU5AnzcGl(Yk#ENW0sSaWAqZj8IShSSU3-i1N@E&F!(jv$ zC^TC}N{P<+qmHFDC%_36bC&aIau(c+Ag|=`1cp;EW=6;mITza>4H~*-S1Am?bXsAx!dk+kBYT6L-;18QO*19+^<`$JXMsKWpv=!b| zu0mQRz6GJwwZ{eM$lh|(iuxTdx*^%zWO1C8FS^|l3#=5?Va!Fnu(OhOheda2y##cs z?)cXZTQtLoy^JByf^r9nt6Pt>(ZWGRmdr(`J$JOv?WRLG8MAuKNFIhulrlY9y5a_& zY#9D>5pD2q!O1qnH`eCvmqdxZK*9jldo=Akhc0K#UviNvJ9Z-|7F1eTr0frxaIE3a zYDv8d>}^D7@EMx$l{*!dhc+`eJ60nZI7x&i9XZc$v0;QT^*b6);yawvNY;wf&0cD?xvNMFycV|c;%mw) z7uVhg%aK0WQ6k{05nS&CjU-v(_cKV~K%=*|%8Lz_SG{H1Az8r#sdgwN-HajOtq#h{ z+FP^B%IGwVvBekQku3MJ+qKiA z4^DE;#}V!g4R9SB+o^=oI;%>q7#l5g3KbK0Bdh#j3w<4_ojakG-3}+hvOQp$*+%5B z9vAVjq}gL#8{;W+p7WH9W3PR{aOE0K&v}|%R2o9-d_a-Cm*+~(`1)q|HZ=y z9NV!8v#4$!)Pq8VJa3o?^olN)X(EsP7$QQhtDT}1ULn(HMR@1nnM4*MAeMC*VFiJ= zS7l$a=iCfQ-Xd_s-5#>cKHFp!i29)p^cp|Do3!~7sbn@ zf-)ZRcKKvS1KwMD=_X{MMn{jN2WDky#FaMcQH1(Z8c?I!ntP9fTZGyU4=UjtE8gb2Ge8w{4OkakenjH5w>{}^& z@zr}!^Osl`dB4F$VkY`H?%1If3q}u>AZ)S=;I`2HG-mc%o6Ep&hG;HxyXe-6L5rWk zYzp~mYCz+g&&vlMnbF7ArQA z6;w*j@H=7Ias|u;t}uy&ks5RmZZ@r0X)Yi^c`D&eGg`~TDm-?A`D@=2Ym*E9mT^X! zJ&46S;T8K%IAf?1_}Hb`Zta9C?qFcMcfv!w3*Y=sIB-Wb?Comck(GTX++`t{W6B+5 z3FPjaDTH~j$~!m5w8(U`G?buo=NFz&|(xs@*#p90KH zyw#R>!c28VKZhu~;Im90>hNXMtkKTyCX1f+D;2cfBHQXy|Mq%g1y}d&oOa~iU?u8f z5R2Z=&#!)M7q~|Elt*b=2czS<7)Z7NpIz{=fJJzq`Z_-@VI)aoK8^L<@J zumFY2Srs12Lf2cCSqBeYCihDW{3V=OjM>G38*x~Fd~PCt(L}DOHMw};wD+LN)|upS zzD0f-7O0?3aIgWIySe2$I|ngxi2v9{#8xT5AwZVEicMgd3U5=X)3#=%1+-*kNr7u4 z$U;L|$-XJjT>f(AC4glAe#vCOe^o>O;E9EG!9UaCipl;^2mXEu{?J9Yk{?)CT&lxQ#9f0Tp{_enin>0>fxB3cAP{3VvqJ}h86pa0Z` zP8~M|)iXp9+v@}dLuY?#X2N&ft=l55d`){T(cMss9}2sRLP)YQqL2kT6D9?Lx?mIy zvH!EGd_l$YrYpwp1TxRctz2#n(R}VU@oYrC5Inku&1x>>t7#nHt(kLeE@~p**F^

!x$$am3c6+>~OK7Xs-8oLzu|Du3rHf}wa*cMzd zU2JSyu$y@?C~)|)b323iJIS|Ei6$F6!`>~~rNAx){!vlje0s@0s)6nfW|soH6nH@? IAhP8D0Zu_~DF6Tf literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.mff b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.mff new file mode 100644 index 0000000000000000000000000000000000000000..4a003574091b5ff0df7f62eb7fb7958c8d6f168a GIT binary patch literal 382 zcmW;3IZPB$7y#h^css+)do%2gLWkiNmqU&fl;vJI1VK53WswyXRu1L9uZ|E38WIu; zI_NBfiUvYwz(P8xNCB}nRB54l?>DYk8u?BFKZ?cYg; z_Q=(7K<4`+a&`VDJA6*+!(Y<7Zpi+KY<-Gm`|~5VyEED9@v|NYu=S;pWp5`_Ul+Uj zBP<6-nZ8c&gKsM=2iMse+G1;Xm#vXQ)<%DF)Yu8@<7X@<{;)N9%@3zEA*UT-&BP01 S)+@BR96|Fwp)L4@TD%7$YE8@l literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6ddcefbb74b6c0220c599643e874ed3cbfbc640f GIT binary patch literal 30780 zcmeHPeT-yBaWCL0${mDAA?yGVfj>e%0D%Bwz-MfqbN;w58}r`G?Cjpc5_1O5pZDpH z0LI}fCNW^ZF*avo3_fF!jmX6C5`h%3bRh~TtG%6_ows|tET9Ms;l$0y(`{^DepS`g z{boOm9p4cwZR_sM>+b66>gwvM>gs-b_SVy{AxWo3M1PLAjrjc|{62$zSIU29579%< z)&Ej}$MNIG<@Iy-ynwFSy^~(|`gQcupSI{(&ukFgM|9;C*U|AukJG-r`{+(J7p zc@JH;?;6^-YY*++xtn%gc_r%h(%wCLXwUB5w0qYs+O=~h-TcW<(nmi0VS3m0chbf0 z7^SPOxSV#p`x3f(-(K2z)s=L`<(JXrmt9JiUAlul`H7Fy-+uHXboHLAXy5KDY45Hp z=)$d=XlSrZgO!*n$whSLo8Lqm&OU?AJ7+y@*>o;#-gpjeI)4LQu;qN(y7@f1bjQ2t z-S65?mu$b7-g)smK+8_hauuC@);d~$=4teo>rbb1H=Ic$+iEmCRHb)}j?mlRHVoRC z-YY16>jiYtTei@(*X*J5&pVqQeIy61m(mBW-${4e^+NjeEq_d3Jn%9)cI>}t-@e^+ z?X_3ajW>RjZn)uk+OlOcZQ8Vv9((K&@bfYH(U0coyWjl|ee;{&pa&kfpYFZ)0Da*L zchUa+pQGDvzm0Ca^&jZtAHRuiy6NxfV;{SbKKQ}Ep#u*P-SbtVyAKfE^(CTP_CJFT zd}S?t{=l>8#!oz#?z{habpO|1O#APC34Q&+m(jN$T2BxD^9Fk8do}vthd0xI{O7gw zcQ;k&eebW)^z0q|~UrYax?l|x~+JDdU>2voC&~0~@==LwZknX(q#dOzw zFQq-#y@($C)+^|Ne>#08gGTW^0Cefg_b(}zB?oqqAl?^CDyL)w4f1$6Um zucXoKe?mJhtI*Zg{uS;2>htNI2VX&V-v3Ja*r(q>@BPr5>7w$hY0HJLrv0D4fj)8f z^XY5f`3w5Ww_Z;7rmvtc0rrdaSJG|wy`IiF|Fv}BUtUXhKlnPj<7=nTj$LQb_Dj#E zw{Jg-&foGH8r*gk)wZ2Sab*Ktc+oi&mp9V-4X4n)>n@@5x4w~fV{SHYJ(t#>^CrAs zPVar+U(+Lx{tul7Ik|l2WmKtEXzw+9>H9zUKE34!HG1vAGw6ny8|lkGeSjW1@^AFa ze|;hS?AXugnG>&~9hYB9d#>IKJbP&8o?Ud=m6y{an8!c;(II-()W6dyW8b0be1rb> zXY=%}_Alv&$8!4BqmR%_ewNY2+qct2Z+$D3D;3al0iF8B)9CCC=h2lr_tFIyUPNzr z(;0Ny>Feo~Q%|Qe&)Puep0}AcoU@UJhTl%tUUxkmTR2Yd*>M&9!OME|doTJq{qo48 zwC4Bc>Caw1Pj5W!$8`RtpU|$|57YG@_yrv}@GJWEx4Seobqw@ zIk3usRSrB=4#10eswh_5uX13O1FIZ})~#E&%7s-9ta9Kfb6{q4aBy_`DWiEBBUsfX zPvgm3CH=RC12Y{B8Rpp%k_O{+Y2gy6$1R}V3e~-nwX5h+YlSXXE<+Z16g&T2-zDe=G=Q6QnF0-i7ILmRhq5oxi)o|pd9N_XG!6cD_BXF zWG79R%u{ta5?ehQ~bXo+m!iz zb6_f_eiyjaUEY@VH#;f0$=H-dgUU;Lm|jlHEd^V-gnBDT$;s0tL+}fhrljr4T2x*_ z66+GLG7|P{g0Ik`uEE!H#xY$^lCp%C=6eaX)hf&y(r$88Iy$l(JEbOyxbH^QFl~3$f`inRoAynArf{7tz*O8^o}Tc z$&zIzUy&{U^xTS~tW*Ztb~-MQRhlid7^fT~zyOj?YT7DW=*0=e`J})}Ep9q&n+jPT zZ#7Ja;+xFdK-3%3!H53A0M1P3F`b(NiPgY3mb7n1XT`0=dD;LoNZ?;1dhX1s zl_~{z&gXSX>L48~4hULF!c1{TUOY@ni-VWrt2?9sTR#<~rxITq26XF_#$K%pM#+dYuFc@mavGxLm&yn0X z?{TbE6HBtIE6^29cF`oAurA87yrtJDx`=d(&?XhesOF}kl&E(%;WuV}9V#Jieyv-F zkAM1fNr#u!f}4=0M3YJiD}~bum2*lO&^MIikgXmZkaHBwr)I#^*44gr$sfxUE-<+(t zO3niVm_hO))b}R$g0ZYw)0PPc5JCip7P~oE$g8=ASm7RAF@c`4?=?J=zFBnFyd zS+<>hh@v@!6$GC?=Fz9VRU8wdsAGO&gW4t=1{EbFZVfg@ubD3-qgK4T$toovAu+u_Es<2MD9BC7|loHK%!|DzzT{>Y(#>71P zY~+MEiiQfhL<${7Ob=+H-Vh~$!VIerIilg9OU4No%MvwbN|X@FGp6y`7EwXAQOT+w zH%LurJF*U1iQ_tIbR|Y$i<6|H8gT1mQ;ks!2~t}AC4%?#C9 zi%iDtfK>HuFB#&Zl-ExdtE#G~1BNSo3f)kj^}o|T=UaBUlj+J&LSivv7JZ#>W(>~;Y(R#l7;dWqZ=cTK4j#xfMjB7>7w z>fcVe5lYeHJ<_Dx;QDbe1-b+aiX{b0w2Yq$b;V+pNTv;0ft?lDD2?T)2C$+z-B@$7 zQmkChJHOJo6CPh95kcXsQ=%%wQB+G7`6Y%iO<*NKq2Xr=tquyz_ts-#4=Wc1ImCbm zbqHkRhb2VShh(52gja(obc;mWmYprLhm(>@KwbE~Vb+%oTz$WfJZO#4GOiBHQGorc|mLr{Wf^whv_GPKc_> z5%0b89svVQwVNIwsx+*bvVf177i{!wGa3)aoj{zujYH9Q#HF+n{yhRQ&z;UFmczy_ zL|FqXEQ1P9S^CDUKfKr2VB4@~xnf{Vu+L4FDXZma#vnqr_*$a22sU>;)nNxGz=^14 zs$MflkxnnR9jw>_n7$o>)abM!?<+@92u{zcs^(6Z>o6G}f{U7DS{+J7+#9W)SJ54F zQkOZm*tJc?XF>B6>qOEFw=U^BKOyFd7&gVW@+|T5qbb;T0hX^0Kp+aQ?U~io57k-ta&nCHU=h zn%p~BbD?V(K)8>(Jno;LbXv(@Yprz)Iv>>)?NL{WN4sVpls@9^TkiE7U zy>S&p%bUv->{hKHsoKL@*vy{DyzR&(*nrAe$Vb;=0azJIQU=b~!0#OUDoT_HV-^}o z7~B|}LDVu`;@Vj>oIE=; z>n7Ql+e`(kIE{S-ssdeiRB6QN3=DcN2W8P^;N7R-$@xT&_F@`4V>9SKQC?kv9VDT8~ z=zQATBc_Ct^&lBuqdI0}k2*0m^%U{C^DQQNE?(3Vk<;=4-PPz;6O?M=cHWtGNJ`ER z@!jjoOs%rb?*^rHHdKdJ(0xy&no6IFdj`&Ad%){d{^AMaztZF=qvSwAIQYjQXBbexzx57Z2oc3_oeellB2BsFRsxHV1@EW`c zbr7*aGcPl;%PH(|KylDNWv90LWU5J{(!Y>}XtPV<%}T67r;u~9QbQIaFtfEhY(W(Y zfR44$rX5yym>@v0wzL2qXLZe~5ChZVcu5f>ti(zb7J35`gkLL6l_2*_(FNX6&40*-Ek`jk2fl!I1o?>`lGl?p-F`t<1HF1mmRO6zf4&$ z;%NFHz`N>vnR_S|(&u7b62*0?)HTH0Nwnsm7AII&p9&70FY9|@C){~XX(AyXcq(GD z;0NI7V?ocs!9O=%@sMl~yxHn5x>{oc)o!q)3>XFBwIi*(cEd-Tg-Z2H9G#rOj-h02 z?bl%wT1RBpff`pi#Ciwsy?)ww%{vG|4o{kJ{sbp(*j!q~!lGRt{0jI_Bk`*u(d>v`#d%&U_=q7Hl zNMnydx@d?N=r~4=uoWoBQ5QODDy*>7M@|nXn5BU=CFz8}A-#Ag`5&1v}o=Ik4X0?1CCT&c=B* zAB@KJ)?78MmN4^@pqkOBQSP;|`BN_!<*lk5@!?Ie+fOJ^l@9k>u(0-LVS5(q_$qj( z!FR6f6l@ffKQwf(O%*#{aJ>LLGjl6lO4OUNtb7f;VDzVeCK$vBB-)0UQ6LqvP@)JU z$OQ94%&byTnA}eAOJF}76S$LJRbOfzgFMd-+h#Ta8Lamqw;N$Nc)eIJXr9F;yM_5F+8&1H-t~8x=WHUI?Es-~ zA)nd|pz)m2Gbk+4X=vzPOg3OXPLn%<%XE_AI}Em>M$Y=KdF`WSXdIp1873NJ>S48RA!j+GT(vFG=xReGv5Md6i|h3XhChk=-{y5 zHNcusD!CKzpy&3$oORlvwqhP>38T40Y&@?LVJBRa~!*DD4?# zyiPJPc+Qxp?uH81TLP2rgd^)EN1SKx4rNo*+qgO)j`y(4kzm#%$_mO7%5U1GFxK3Zo+yDHSTT*Zkni| zXajv(B?4Q1O=FI9f#a{&IM{%l-|BTKmh*4qrIL@4k?_8lHug(o`SUR;6xt#pVAWhT zGk6r8SK&xhWd%Eog&*w#Pg??Jb#hVWT~Ma}q~D=pU07rR&Db8abSW^_XfD|%zn+9B zR$5UiWrvgpX>hLvzVMh$>}&>iwON-qaltAbi%{u6i``=VJWHZ)d8b8nzN;qEfmP18qx>;mG{vX$yeGufB(w+D{kmbkC|8^) z9s;U%sX&>$&UK(s7Y%0?-E-`qt;Zj1Pn<4k3QvZe_7n82BQb}mybkjngdt<%A2(j& zoA66$7W@MgyG*VMq6h|7YA9Hs#LZwF7Er@G&UhHJr3n;SFKnSSXk)cl+;;qoA_;#i zP|qt8l)1Ks!WD3sMbe<-j_Q;uO{;`rCfRTyHCYA2_0v>kaDS|fvaW_-4IP%Z99%K9 zmUR=zEgzDvm~g*DO#5t|&x45$mRZuFI3ZT(ORgS9YZGxvQoV^7&BG7G2(Wz>*fe2S z8>^K2m>Iquch zVPT@K%YbsJVotz>c!t8j}DVRNa z?n2Y?sWZ?uL<#@E2eIBfmGC=F0pmi_RF)z_EZ1VS*(hqKdM3AAR=A+19@00U;)BE8 zC#;IYJ!dr_Xfw|nOVr@$&u%mj4HC!wrAU@7_TAtgCsk;*4)$)Ga7PhWUu&A-XPU5- zOQ1w`y%#Z-V2L&PfK$|}pm}J^Z@7G0;R%*BTXn;L;jV(DNvpez z4h7+*3U41592Wa=wVWLTL?IhqD|REs8VP4yM%0Hf)-qkUvH}jgd8d(;3i9}eyAJ9p z<9(t39H)jmbtu(d5XniCQs|yHn!NY2e)-ML-W`;y?1upZ+{v-KAIxW0NZ6Kf6c1_6 znP{M!Y59-3CS<~V5Cm|}@9^$J&vBbghLE+E<#I$rgcDK^c02$z#U&e)Qg}r;thVbv5lRfw9A-bUqkqae$JE3R47_8Pzdp z%93CQ>)C)xz>KWpuH0Xjd#^L*6iGmZePvwVmX*OAP|Whi#DsMG*k@3Of9SE*YIVDK z;B&VYnB%O3I}EAEm~3}y3ZI!R8Gy)=C}8URYpOnG+msJOE zZzqI!)*46*Hjj@X;=G~$VOGI?X#vqD+6jZncf^uyAsE%2gek&rUH-xeife7C6GsNV z`$0y&k3x-5=s$T<8pgG^W}7)SgKtE7SfEN$K{OyH64K-DA)5o>UqPn1u+!%0fIK6O zLX$b3Bga<4A(UZ)5I3Fj#tlMRcjs|tk#R&m>^ln623;Z@mJvP@mw}xFS@qIZje2}BZz+R$@~gTKL6Zf+#5v||HI}+5Oo$DV6oqxdS&mfor7}Bk zrc0ods=CKin1IsY+v#xUA#%gKE+ut2dUIHia$a5# zXW{B;y+kP&5@IJW(q^THY;q1ekFpfL$AN$|zLs2xO69m`&?3DOClOszyhzDCEG*g; z$nkJltlB*58N`9aq*N9wot4Ndmbb;@LI85mG!e3o8`>SZV_*kN6&E2n7LdS-*r&s=V=#4n%usS3G>tCGe(gDg_!} zXby|(hi`=>@a1}eN#U(799&(cQK|o{_l?H zsc=Vjr7#L@9=4sxf!ie;1LSZRj$R^Bxe4dZpt5?ftsuOE@NTtlr7r`ciwcSyT~gIw z5Ju$7^;0XKm6swI;*2Q6vshSs?{9iyawiYJ=y^up{~@cAy>49%(kaa6f`%+QzD1wK z_3@}xh84$-j(1{+J7jvT4shfAp|HiPc{Z41Ygr%6>J;-<5<+4z7skC}5_e}UC9;E! z5AilszG%YbRQVc`R}cr>d0WZ-Na7C$++SqUt!|V<&tf z3Um{$!ISuDN^IAz1R)xS?}T%NYr5XxG3eG2H3LtB1>9nM>StGiZV0OxKgwQ zZp2}ZAt@^64g9eL-ifi%HGz=b8J4{!w_0X;gVA8w89ct;W$WAEmj6{RRsViTbqX-t zF|R-TRSB$Ck?p93cimPxB>09y-l`0ZWSd?4YFbPA39u;~pxWOrnW|t@+La~YP(AS< z{#zk#4~s_l`z6>|w{z=S@ZduP!zU!fy#dQ-Bm5Tz+PN-msZHA9@0Umc!8z9#e&ZzD zb>9jzY3Nq)OL)eMU;E&o%Ua;Kp?*nNQHGEIKnae-CKXmm0PSwVvmquu?zt}sw7On) z*@+tdSVWiAlOr8J1wzq9#m^6bIFhO-!rWQgZ-ucH)%$Z?jFYb>pmg?;9l@TmfE^_> zT`1vpmti>-{;Vo4W%_nnDbJ~H(k`e~t1%8(e#PJA06Dg@s6i1--|<{pxTw_$%oh7P zfoOrM(P8n#XhOInbntk8R}H5`raD4{C;XOnqH_L(p;rM{Iq>8;&?laKndNcy5b9Y? zCyN8WIKFOW)K5*nwW6sfFug1HzFM=&fmIGXjX3ale#z5l7^|eNa$uDM|IZwNE+P6~ D^b|tY literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.mff b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.mff new file mode 100644 index 0000000000000000000000000000000000000000..4a003574091b5ff0df7f62eb7fb7958c8d6f168a GIT binary patch literal 382 zcmW;3IZPB$7y#h^css+)do%2gLWkiNmqU&fl;vJI1VK53WswyXRu1L9uZ|E38WIu; zI_NBfiUvYwz(P8xNCB}nRB54l?>DYk8u?BFKZ?cYg; z_Q=(7K<4`+a&`VDJA6*+!(Y<7Zpi+KY<-Gm`|~5VyEED9@v|NYu=S;pWp5`_Ul+Uj zBP<6-nZ8c&gKsM=2iMse+G1;Xm#vXQ)<%DF)Yu8@<7X@<{;)N9%@3zEA*UT-&BP01 S)+@BR96|Fwp)L4@TD%7$YE8@l literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c new file mode 100644 index 00000000000..9053d54d06d --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -0,0 +1,343 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + + +/* **** Includes **** */ + +#include +#include "mxc_device.h" +#include "mxc_delay.h" +#include "tft_ssd2119.h" + +#include "graphics.h" + +#include "clear_sans_bold_num.h" + +#include "led.h" + + +/* **** Definitions **** */ + +// #define ANIMATION_DELAY(block_num) () + + +/* **** Globals **** */ + +// Keep copy of grid. +// static uint32_t MAIN_GRID[4][4] = {0}; + +/* **** Functions **** */ + +int Graphics_Init(void) +{ + int error; + + // Initialize TFT Display. + error = MXC_TFT_Init(); + if (error != E_NO_ERROR) { + return error; + } + + // Clear display. + MXC_TFT_DrawFastRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, F_BACKGROUND_COLOR); + + // Draw grid. + MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, GRID_LENGTH, F_GRID_COLOR, RADIUS_FOR_CORNERS, F_BACKGROUND_COLOR); + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row), GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col), BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); + } + } + + return E_NO_ERROR; +} + +void Graphics_AddNewBlock(int row, int col, int block_2_4) +{ + // 6 is chosen based on animation/display refresh rate speed to the naked eye. + for (int i = 0; i < 6; i++) { + // Forgive the unreadability. + // The math calculates where each block needs to be drawn as its animated to grow from small to big. + + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = ((BLOCK_LENGTH / 2) - (i * 5)) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = ((BLOCK_LENGTH / 2) - (i * 5)) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + MXC_TFT_DrawRoundedRect(x, y, ((i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((i * 10) + 1), ((i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((i * 10) + 1), FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, ((i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); + + // Don't delay when empty space is fully filled. + if (i < 5) { + // Minimum speed visual for human eye while also being fast and not laggy. + MXC_Delay(MXC_DELAY_MSEC(15)); + } + } + + // Calculate the starting coordinate to write the digit at the center of the tile. + int x = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(block_2_4) / 2) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(block_2_4) / 2) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + // Draw a 2 or 4 digit. + // Blocks 2 and 4 are lighter color, so white text won't fit. Use black text instead (Inverted). + if (block_2_4 == 2) { + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_2_DIGIT_PX_WIDTH, BLOCK_2_DIGIT_PX_HEIGHT, block_2, RGB565_BLACK, RGB565_BLOCK_2); + } else { + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_4_DIGIT_PX_WIDTH, BLOCK_4_DIGIT_PX_HEIGHT, block_4, RGB565_BLACK, RGB565_BLOCK_4); + } +} + +// Mainly used for sliding blocks to a new location. +inline void Graphics_AddBlock(int row, int col, int value) +{ + // Forgive me for all the math who ever tries to read through the code. + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + // Math is to center the digits printed to the newly created block. + int dx = x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2); + int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2); + + switch (value) { + case 2: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_2, RGB565_BLACK, RGB565_BLOCK_2); + break; + + case 4: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_4), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_4, RGB565_BLACK, RGB565_BLOCK_4); + break; + + case 8: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_8), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_8, RGB565_BLACK, RGB565_BLOCK_8); + break; + + case 16: + // Draw text. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_16), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_16, RGB565_BLACK, RGB565_BLOCK_16); + break; + + case 32: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_32), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_32, RGB565_BLACK, RGB565_BLOCK_32); + break; + + case 64: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_64), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_64, RGB565_BLACK, RGB565_BLOCK_64); + break; + + case 128: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_128), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_128, RGB565_BLACK, RGB565_BLOCK_128); + break; + + case 256: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_256, RGB565_BLACK, RGB565_BLOCK_256); + break; + + case 512: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_512, RGB565_BLACK, RGB565_BLOCK_512); + break; + + case 1024: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_1024, RGB565_BLACK, RGB565_BLOCK_1024); + break; + + case 2048: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + break; + + default: + break; + } +} + +void Graphics_CombineBlocks(int row, int col, int new_value) +{ + // Forgive me for all the math who ever tries to read through the code. + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + MXC_Delay(MXC_DELAY_MSEC(2)); + + // Animate the blow up. + // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. + for (int i = 0; i < BLOCK_SPACING + 1; i++) { + MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2*i), BLOCK_LENGTH + (2*i), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Delay for animation. + MXC_Delay(MXC_DELAY_MSEC(6)); + } + + // Animate the shrink down. + for (int i = 0; i < BLOCK_SPACING; i++) { + // Redraw block to remove corners. + MXC_TFT_DrawRoundedRect(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Remove outer borders again. + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Top line. + + MXC_TFT_DrawVerticalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Left line. + + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + 1 + i, BLOCK_LENGTH + y + BLOCK_SPACING - 1 - i, BLOCK_LENGTH + ((BLOCK_SPACING - 1 - i)*2), F_GRID_COLOR); // Bottom line. + + MXC_TFT_DrawVerticalLine(BLOCK_LENGTH + x + BLOCK_SPACING - 1 - i, y - BLOCK_SPACING + i, BLOCK_LENGTH - 1 + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Right line. + + // Delay for animation. + MXC_Delay(MXC_DELAY_MSEC(6)); + } + + Graphics_AddBlock(row, col, new_value); +} + + +void Graphics_EraseSingleBlock(int row, int col, graphics_slide_direction_t direction) +{ + // Forgive me for all the math who ever tries to read through the code. + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + switch (direction) { + case GRAPHICS_SLIDE_DIR_UP: + break; + + case GRAPHICS_SLIDE_DIR_DOWN: + break; + + case GRAPHICS_SLIDE_DIR_LEFT: + for (int c = 0; c < 4; c++) { + for (int r = 0; r < 4; r++) { + // Remove each column (x) of block left to right, pixel by pixel. + for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. + int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + int dy = 0; + + while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + } + } + } + break; + + case GRAPHICS_SLIDE_DIR_RIGHT: + for (int c = 0; c < 4; c++) { + for (int r = 0; r < 4; r++) { + // Remove each column (x) of block left to right, pixel by pixel. + for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. + int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + int dy = 0; + + while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + } + } + } + break; + + default: + return; + } +} + diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h index 22ac36b85f9..202c453b476 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -42,3 +42,5 @@ int Game_2048_UpdateGrid(input_direction_t direction); void Game_2048_PrintGrid(void); void Game_2048_GetGrid(uint32_t grid[4][4]); + +void Game_2048_GetGridMailBox(uint8_t *grid_1D_size_64B); diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 4fb8a82c429..d4a2b4c9bbc 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -84,8 +84,8 @@ extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes // Rename boxes for readability. -#define SEMA_ARM_MAILBOX mxcSemaBox0 -#define SEMA_RISCV_MAILBOX mxcSemaBox1 +#define SEMA_RISCV_MAILBOX mxcSemaBox0 +#define SEMA_ARM_MAILBOX mxcSemaBox1 mxc_uart_req_t CONTROLLER_REQ; uint8_t CONTROLLER_KEYPRESS; @@ -113,22 +113,18 @@ void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) // User can add additional directional key switches here. switch (CONTROLLER_KEYPRESS) { case 'a': - case 0x44: // Tera term sends Character 'D' for LEFT arrow key. KEYPRESS_INPUT_DIR = INPUT_LEFT; break; case 'd': - case 0x43: // Tera term sends Character 'C' for RIGHT arrow key. KEYPRESS_INPUT_DIR = INPUT_RIGHT; break; case 'w': - case 0x41: // Tera term sends Character 'A' for UP arrow key. KEYPRESS_INPUT_DIR = INPUT_UP; break; case 's': - case 0x42: // Tera term sends Character 'B' for DOWN arrow key. KEYPRESS_INPUT_DIR = INPUT_DOWN; break; @@ -136,15 +132,9 @@ void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) KEYPRESS_READY = false; } - // Due to request struct, CONTROLLER_KEYPRESS already contains the keypress character. - // Send keypress to RISCV through mailbox 1. - // The mailbox is 32 bits wide, but the keypress is an ASCII character (8 bits). - SEMA_ARM_MAILBOX->payload[0] = (CONTROLLER_KEYPRESS >> 8 * 0) & 0xFF; - SEMA_ARM_MAILBOX->payload[1] = 0; - SEMA_ARM_MAILBOX->payload[2] = 0; - SEMA_ARM_MAILBOX->payload[3] = 0; + PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, cb_error); - PRINT("RISC-V: Keypress: %c - 0x%02x\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS); + MXC_UART_ClearRXFIFO(MXC_UART0); // Listen for next keypress. error = Controller_Start(&CONTROLLER_REQ); @@ -263,6 +253,8 @@ int main(void) while (KEYPRESS_READY == false) {} + MXC_SEMA_GetSema(SEMA_IDX_RISCV); + input_direction_t dir = KEYPRESS_INPUT_DIR; error = Game_2048_UpdateGrid(dir); @@ -279,107 +271,35 @@ int main(void) // Game_2048_PrintGrid(); PRINT_GRID(); + // Game_2048_GetGrid(RISCV_GRID_COPY); + + // Send updated grid and keypress to RISCV through mailbox 1. + // Game_2048_GetGridMailBox(SEMA_ARM_WR_MAILBOX->payload); + + // for (int x = 0; x < MAILBOX_PAYLOAD_LEN; x++) { + // PRINT("RISCV: %02x\n", SEMA_ARM_MAILBOX->payload[x]); + // } + + int i = 0; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; + + PRINT("RISCV: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, RISCV_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); + i+=4; + } + } + + SEMA_ARM_MAILBOX->payload[4 * 16] = (CONTROLLER_KEYPRESS >> (8 * 0)) & 0xFF; + + MXC_Delay(500000); + // MXC_Delay(MXC_DELAY_SEC(1)); KEYPRESS_READY = false; - + MXC_SEMA_FreeSema(SEMA_IDX_ARM); } - // /* Initialize Touch Screen controller */ - // MXC_TS_Init(); - // MXC_TS_Start(); - - // /* Display Home page */ - // state_init(); - - // /* Get current time */ - // start_time = utils_get_time_ms(); - - // while (1) { - // /* Get current screen state */ - // state = state_get_current(); - - // /* Check pressed touch screen key */ - // key = MXC_TS_GetKey(); - - // if (key > 0) { - // state->prcss_key(key); - // start_time = utils_get_time_ms(); - // } - - // /* Check timer tick */ - // if (utils_get_time_ms() >= (start_time + state->timeout)) { - // if (state->tick) { - // state->tick(); - // start_time = utils_get_time_ms(); - // } - // } - // } - - -// printf("\nRISC-V: Start.\n"); - -// #if DUAL_CORE_SYNC -// MXC_SEMA_Init(); - -// int ret = MXC_SEMA_CheckSema(NDX_RISCV); -// printf("RISC-V: After init, CheckSema(%d) returned %s.\n", NDX_RISCV, -// ret == E_BUSY ? "BUSY" : "NOT BUSY"); - -// if ((MXC_SEMA_GetSema(NDX_RISCV)) == E_NO_ERROR) { -// printf("RISC-V: GetSema returned NOT BUSY with previous semaphore value %d.\n", -// MXC_SEMA->semaphores[NDX_RISCV]); -// } else { -// printf("RISC-V: GetSema returned - BUSY - with previous semaphore value %d.\n", -// MXC_SEMA->semaphores[NDX_RISCV]); -// } - -// /* Init code here. */ -// printf("RISC-V: Do initialization works here.\n"); -// MXC_SEMA_InitBoxes(); - -// /* Signal ARM core to run. */ -// printf("RISC-V: Signal ARM.\n"); -// MXC_SEMA_FreeSema(NDX_ARM); -// #endif - -// uint32_t cnt = 0; - -// /* Enter LPM */ -// while (1) { -// #if DUAL_CORE_SYNC -// /* Wait */ -// int ret = MXC_SEMA_CheckSema(NDX_RISCV); -// if (E_BUSY != ret) { -// MXC_SEMA_GetSema(NDX_RISCV); - -// /* Do the job */ -// // Retrieve the data from the mailbox0 -// cnt = mxcSemaBox0->payload[0] << (8 * 0); -// cnt += mxcSemaBox0->payload[1] << (8 * 1); -// cnt += mxcSemaBox0->payload[2] << (8 * 2); -// cnt += mxcSemaBox0->payload[3] << (8 * 3); - -// printf("RISC-V: cnt=%d\n", cnt++); -// #else -// printf("count = %d\n", cnt++); -// #endif - -// #if DUAL_CORE_SYNC -// mxcSemaBox1->payload[0] = (cnt >> 8 * 0) & 0xFF; -// mxcSemaBox1->payload[1] = (cnt >> 8 * 1) & 0xFF; -// mxcSemaBox1->payload[2] = (cnt >> 8 * 2) & 0xFF; -// mxcSemaBox1->payload[3] = (cnt >> 8 * 3) & 0xFF; - -// /* Do other jobs here */ -// #endif -// LED_On(LED_RED); -// MXC_Delay(500000); -// LED_Off(LED_RED); -// MXC_Delay(500000); -// #if DUAL_CORE_SYNC -// /* Signal */ -// MXC_SEMA_FreeSema(NDX_ARM); -// } -// #endif -// } } diff --git a/Examples/MAX32655/Demo_2048/RISCV/project.mk b/Examples/MAX32655/Demo_2048/RISCV/project.mk index c942908eda7..10f11a6fc87 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/project.mk +++ b/Examples/MAX32655/Demo_2048/RISCV/project.mk @@ -25,5 +25,10 @@ endif PROJ_CFLAGS += -UDEBUG +# RISC-V ICC1 will not be used. +# ARM_SRAM_SIZE = 0x18000 +# RISCV_SRAM_SIZE = 0x8000 # 32KB +# DUAL_CORE_RAM_SIZE = 0x20000 + # TODO: REMOVE ME -MAXIM_PATH=../../../../ +# MAXIM_PATH=../../../../ diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index f1386397bfa..04d78f51884 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -628,3 +628,16 @@ void Game_2048_GetGrid(uint32_t grid[4][4]) } } +void Game_2048_GetGridMailBox(uint8_t *grid_1D_size_64B) +{ + int i = 0; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + grid_1D_size_64B[i++] = (MAIN_2048_GRID[row][col] >> 8 * 0) & 0xFF; + grid_1D_size_64B[i++] = (MAIN_2048_GRID[row][col] >> 8 * 1) & 0xFF; + grid_1D_size_64B[i++] = (MAIN_2048_GRID[row][col] >> 8 * 2) & 0xFF; + grid_1D_size_64B[i++] = (MAIN_2048_GRID[row][col] >> 8 * 3) & 0xFF; + } + } +} + From 6f853308687ebd6c67bd9afcc055d4add6fcb43a Mon Sep 17 00:00:00 2001 From: Woo Date: Fri, 13 Sep 2024 17:42:55 -0500 Subject: [PATCH 04/27] Integrate game logic with display --- .../MAX32655/Demo_2048/ARM/inc/graphics.h | 17 +- Examples/MAX32655/Demo_2048/ARM/main.c | 164 ++++++++---- .../MAX32655/Demo_2048/ARM/src/graphics.c | 71 +++++- .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 18 +- Examples/MAX32655/Demo_2048/RISCV/main.c | 167 +++++++++--- .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 237 +++++++++++------- 6 files changed, 485 insertions(+), 189 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index 9ec61791d4a..31b114c9518 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -95,11 +95,16 @@ #define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) +/** + * This enum is used to keep track of which direction the blocks will slide to + * for the graphics. + * IMPORTANT: Sync these directions with the RISCV core. + */ typedef enum { - GRAPHICS_SLIDE_DIR_LEFT, - GRAPHICS_SLIDE_DIR_RIGHT, - GRAPHICS_SLIDE_DIR_UP, - GRAPHICS_SLIDE_DIR_DOWN + GRAPHICS_SLIDE_DIR_UP = 0, + GRAPHICS_SLIDE_DIR_DOWN = 1, + GRAPHICS_SLIDE_DIR_LEFT = 2, + GRAPHICS_SLIDE_DIR_RIGHT = 3, } graphics_slide_direction_t; /* **** Function Prototypes **** */ @@ -112,4 +117,6 @@ void Graphics_AddBlock(int row, int col, int value); void Graphics_CombineBlocks(int row, int col, int new_value); -void Graphics_EraseSingleBlock(int row, int col, graphics_slide_direction_t direction); +void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_direction_t direction); + +void Graphics_EraseSingleBlock(int row, int col); diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 99f760aaffe..901f2387dd3 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -55,7 +55,7 @@ /// Semaphores // Should never reach here #if (MAILBOX_SIZE == 0) -#error "Mailbox sirrrze is 0." +#error "Mailbox size is 0." #endif // Keep track for Semaphore peripheral. @@ -74,6 +74,10 @@ typedef struct { #endif } mxcSemaBox_t; +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexs are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_KEYPRESS_IDX + 1) /* **** Globals **** */ // Defined in sema_reva.c @@ -86,26 +90,86 @@ extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes #define SEMA_ARM_MAILBOX mxcSemaBox1 static uint32_t ARM_GRID_COPY[4][4] = {0}; +static uint8_t ARM_GRID_COPY_STATE[4][4] = {0}; + +/** + * These enums help keep track of what blocks are del + * IMPORTANT: Sync these commands with the RISCV core. + */ +typedef enum { + ERASE = 1, + COMBINE = 2, + UNMOVED = 3 +} block_state_t; /* **** Functions **** */ -// void SEMA_GetGrid(void) -// { -// uint32_t *grid = (uint32_t *)(SEMA_RISCV_MAILBOX->payload); +void ReceiveGridFromRISCVCore(void) +{ + int i = MAILBOX_MAIN_GRID_IDX; + + // Grid state. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + ARM_GRID_COPY[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+1] << (8 * 1); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+2] << (8 * 2); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+3] << (8 * 3); + + i+=4; + } + } + + // Grid status (unmoved/delete/combine). + i = MAILBOX_MAIN_GRID_STATE_IDX; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + ARM_GRID_COPY_STATE[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); + + i++; + } + } +} + +graphics_slide_direction_t ReceiveDirectionFromRISCVCore(void) +{ + // Add more direction keys here. + switch (SEMA_ARM_MAILBOX->payload[MAILBOX_KEYPRESS_IDX]) { + // UP + case 'w': + return GRAPHICS_SLIDE_DIR_UP; + + // DOWN + case 's': + return GRAPHICS_SLIDE_DIR_DOWN; + + // LEFT + case 'a': + return GRAPHICS_SLIDE_DIR_LEFT; + + // RIGHT + case 'd': + return GRAPHICS_SLIDE_DIR_RIGHT; + + default: + return -1; + } +} + +bool ReceiveNewBlockLocationFromRISCVCore(uint8_t *row, uint8_t *col) +{ + *row = (SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] / 4); + *col = (SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] % 4); -// for (int i = 0; i < 16; i++) { -// ARM_MAIN_GRID[i/4][i%4] = grid[i]; -// } -// } + return SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX + 1]; +} // ***************************************************************************** int main(void) { int error; - // The mailbox names are pre-defined, Creating new pointers and pointing them to - // memory locations for easier readability. - // SEMA_RISCV_MAILBOX = mxcSemaBox0; - // SEMA_ARM_MAILBOX = mxcSemaBox1; + uint8_t row, col; + graphics_slide_direction_t direction; // System Initialization: // - Use IPO for System Clock for fastest speed. (Done in SystemInit) @@ -179,58 +243,64 @@ int main(void) while(1); } + // Wait for Game logic to finish initializing on RISCV. + while (MXC_SEMA_CheckSema(SEMA_IDX_ARM) != E_NO_ERROR) {} + MXC_SEMA_GetSema(SEMA_IDX_ARM); - // for (int r = 1; r < 4; r++) { - // for (int c = 0; c < 4; c++) { - // Graphics_AddBlock(r, c, 2); - // } - // } + // Get starting grid to keep ARM and RISCV grid copies in sync. + ReceiveGridFromRISCVCore(); - // Graphics_AddNewBlock(0, 1, 2); + ReceiveNewBlockLocationFromRISCVCore(&row, &col); - while (1) { - // Ready to receive game input. + Graphics_AddNewBlock(row, col, ARM_GRID_COPY[row][col]); - // Wait for game to finish game logic. + // Signal RISC-V to start waiting for keypresses. + MXC_SEMA_FreeSema(SEMA_IDX_RISCV); + + while (1) { + // Wait for RISCV to finish updating the grid. while (MXC_SEMA_CheckSema(SEMA_IDX_ARM) != E_NO_ERROR) {} - MXC_SEMA_GetSema(SEMA_IDX_ARM); - // for (int i = 0; i < 16*4; i++) { - // PRINT("%d - ", SEMA_RISCV_MAILBOX->payload[i]); - // } + // Get the updated grid then display. + ReceiveGridFromRISCVCore(); - PRINT("\n======\n"); + direction = ReceiveDirectionFromRISCVCore(); - // for (int x = 0; x < MAILBOX_PAYLOAD_LEN; x++) { - // PRINT("ARM: %02x\n", SEMA_ARM_MAILBOX->payload[x]); - // } - int i = 0; + // Erase blocks that are moving. for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { - ARM_GRID_COPY[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+1] << (8 * 1); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+2] << (8 * 2); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+3] << (8 * 3); - - PRINT("ARM: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, ARM_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); + if (ARM_GRID_COPY_STATE[row][col] == 1) { + Graphics_EraseSingleBlock(row, col); + } + } + } - // ARM_GRID_COPY[row][col] = SEMA_RISCV_MAILBOX->payload[i] << (8 * 0); - // ARM_GRID_COPY[row][col] += SEMA_RISCV_MAILBOX->payload[i+1] << (8 * 1); - // ARM_GRID_COPY[row][col] += SEMA_RISCV_MAILBOX->payload[i+2] << (8 * 2); - // ARM_GRID_COPY[row][col] += SEMA_RISCV_MAILBOX->payload[i+3] << (8 * 3); + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + PRINT("ARM: r:%d c:%d state:%d\n", row, col, ARM_GRID_COPY_STATE[row][col]); + } + } - // PRINT("ARM: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, ARM_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); - - i+=4; + // Add new blocks. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (ARM_GRID_COPY_STATE[row][col] == COMBINE) { + Graphics_CombineBlocks(row, col, ARM_GRID_COPY[row][col]); + } else if (ARM_GRID_COPY[row][col] != 0 && ARM_GRID_COPY_STATE[row][col] != UNMOVED) { + Graphics_AddBlock(row, col, ARM_GRID_COPY[row][col]); + PRINT("Redraw?\n"); + } } } - PRINT("ARM: Direction Keypress: %c - 0x%02x\n", SEMA_ARM_MAILBOX->payload[4 * 16], SEMA_ARM_MAILBOX->payload[4 * 16]); + // If blocks moved, Add new block after all the grid updated. + if (ReceiveNewBlockLocationFromRISCVCore(&row, &col)) { + LED_Toggle(1); + Graphics_AddNewBlock(row, col, ARM_GRID_COPY[row][col]); + } + // Signal RISC-V Core that it's ready for the next grid state. MXC_SEMA_FreeSema(SEMA_IDX_RISCV); - // Graphics_EraseSingleBlock(0, 1, GRAPHICS_SLIDE_DIR_LEFT); - - // Graphics_AddBlock(0, 0, 2); } } diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index 9053d54d06d..cf8ee28368c 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -261,8 +261,7 @@ void Graphics_CombineBlocks(int row, int col, int new_value) Graphics_AddBlock(row, col, new_value); } - -void Graphics_EraseSingleBlock(int row, int col, graphics_slide_direction_t direction) +void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_direction_t direction) { // Forgive me for all the math who ever tries to read through the code. // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. @@ -271,9 +270,67 @@ void Graphics_EraseSingleBlock(int row, int col, graphics_slide_direction_t dire switch (direction) { case GRAPHICS_SLIDE_DIR_UP: + for (int r = 0; r < 4; r++) { + for (int c = 0; c < 4; c++) { + // Remove each column (x) of block left to right, pixel by pixel. + for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. + + // With y and the radius, get the integral to calculate the y position. + int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + int dx = 0; + + while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative vertical distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawVerticalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + } + } + } break; case GRAPHICS_SLIDE_DIR_DOWN: + for (int r = 0; r < 4; r++) { + for (int c = 0; c < 4; c++) { + // Remove each column (x) of block left to right, pixel by pixel. + for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. + + // With y and the radius, get the integral to calculate the y position. + int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + int dx = 0; + + while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative vertical distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawVerticalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + } + } + } break; case GRAPHICS_SLIDE_DIR_LEFT: @@ -284,6 +341,8 @@ void Graphics_EraseSingleBlock(int row, int col, graphics_slide_direction_t dire // Account for rounded corners. if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. + + // With x and the radius, get the integral to calculate the y position. int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; int dy = 0; @@ -341,3 +400,11 @@ void Graphics_EraseSingleBlock(int row, int col, graphics_slide_direction_t dire } } +void Graphics_EraseSingleBlock(int row, int col) { + // Forgive me for all the math who ever tries to read through the code. + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); +} diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h index 202c453b476..4c1eb28adf9 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -25,6 +25,7 @@ /** * This enum is used to keep track of which direction the blocks will slide to * for the main logic to handle. + * IMPORTANT: Sync these directions with the ARM core. */ typedef enum { INPUT_UP = 0, @@ -33,14 +34,27 @@ typedef enum { INPUT_RIGHT = 3, } input_direction_t; +/** + * These enums help keep track what blocks were deleted from previous grid, and + * combined at new grid. + * IMPORTANT: Sync these commands with the ARM core. + */ +typedef enum { + ERASE = 1, + COMBINE = 2, + UNMOVED = 3 +} block_state_t; + /* **** Function Prototypes **** */ -int Game_2048_Init(void); +int Game_2048_Init(uint8_t *new_block_location_idx); -int Game_2048_UpdateGrid(input_direction_t direction); +int Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx); void Game_2048_PrintGrid(void); void Game_2048_GetGrid(uint32_t grid[4][4]); +void Game_2048_GetGridState(uint8_t grid_state[4][4]); + void Game_2048_GetGridMailBox(uint8_t *grid_1D_size_64B); diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index d4a2b4c9bbc..204c76a2a29 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -78,6 +78,11 @@ typedef struct { #endif } mxcSemaBox_t; +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexs are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_KEYPRESS_IDX + 1) + /* **** Globals **** */ // Defined in sema_reva.c extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads @@ -93,12 +98,39 @@ volatile bool KEYPRESS_READY = false; uint8_t KEYPRESS_INPUT_DIR; uint32_t RISCV_GRID_COPY[4][4] = {0}; +uint8_t RISCV_GRID_COPY_STATE[4][4] = {0}; // Select Console UART instance. mxc_uart_regs_t *CONTROLLER_UART = MXC_UART0; /***** Functions *****/ +// Must grab grid space before calling this function to have the latest +// grid state. +void SendGridToARMCore(void) +{ + int i = MAILBOX_MAIN_GRID_IDX; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; + + // PRINT("RISCV: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, RISCV_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); + i+=4; + } + } + + i = MAILBOX_MAIN_GRID_STATE_IDX; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY_STATE[row][col] >> (8 * 0)) & 0xFF; + i++; + } + } +} + void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) { int error; @@ -136,18 +168,18 @@ void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) MXC_UART_ClearRXFIFO(MXC_UART0); - // Listen for next keypress. - error = Controller_Start(&CONTROLLER_REQ); - if (error != E_NO_ERROR) { - PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); - LED_On(LED_RED); - } + // // Listen for next keypress. + // error = Controller_Start(&CONTROLLER_REQ); + // if (error != E_NO_ERROR) { + // PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); + // LED_On(LED_RED); + // } } +// Must grab grid space before calling this function to have the latest +// grid state. void PRINT_GRID(void) { - Game_2048_GetGrid(RISCV_GRID_COPY); - // Imitate the grid is refreshing on terminal. PRINT("\n\n\n\n\n\n\n\n\n\n"); @@ -176,10 +208,59 @@ void PRINT_GRID(void) } } +void PRINT_GRID_STATE(void) +{ + Game_2048_GetGridState(RISCV_GRID_COPY_STATE); + + // Imitate the grid is refreshing on terminal. + PRINT("\n\n\n\n\n\n\n\n\n\n"); + + for (int row = 0; row < 4; row++) { + PRINT(" | | | \n"); + + for (int col = 0; col < 4; col++) { + if (RISCV_GRID_COPY_STATE[row][col] != 0) { + PRINT(" %02d ", RISCV_GRID_COPY_STATE[row][col]); + } else { + PRINT(" "); + } + + // Only print border 3 times. + if (col < 3) { + PRINT("|"); + } + } + + PRINT("\n | | | \n"); + + // Only print the row border 3 times. + if (row < 3) { + PRINT("-----------------------------------\n"); + } + } +} + +inline void SendKeypressToARMCore(void) +{ + SEMA_ARM_MAILBOX->payload[MAILBOX_KEYPRESS_IDX] = (CONTROLLER_KEYPRESS >> (8 * 0)) & 0xFF; +} + +inline void SendNewBlockIndexARMCore(uint8_t *new_block_idx, uint8_t did_block_move) +{ + SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] = (*new_block_idx >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX + 1] = (did_block_move >> (8 * 1)) & 0xFF; +} + // ***************************************************************************** int main(void) { int error; + int state; + + // Location of new block represented as an index for a 1-D array. + // (0-15) instead of represented as a coordinate (row, col) for + // easier and quicker transfer into mailbox. + uint8_t new_block_idx_location = 0; // Speed up UART0 (Console) baud rate as the controller and console share the same port. // Plus, Console UART gets reverted to default speed (115200) during SystemInit() during both @@ -224,7 +305,7 @@ int main(void) // Initialize mailboxes between ARM and RISCV cores. MXC_SEMA_InitBoxes(); - // RISC-V startup finish startup and initializing mailboxes. Signal ARM to continue. + // RISCV startup and mailbox initialization is finished. Signal ARM core to continue. PRINT("RISC-V: Finished startup. Main UART0 control is handled by RISC-V now.\n\n"); MXC_SEMA_FreeSema(SEMA_IDX_ARM); @@ -238,68 +319,78 @@ int main(void) while(1); } - error = Game_2048_Init(); + error = Game_2048_Init(&new_block_idx_location); if (error != E_NO_ERROR) { PRINT("RISC-V: Error starting game: %d\n", error); LED_On(LED_RED); while(1); } - // Game_2048_PrintGrid(); + // Send starting grid to ARM core. + // This function must be called before PRINT_GRID() and SendGridToARMCore() + // functions to grab the latest grid state. + Game_2048_GetGrid(RISCV_GRID_COPY); + PRINT_GRID(); + SendGridToARMCore(); + + SendNewBlockIndexARMCore(&new_block_idx_location, false); + + // Signal ARM core to + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + + // Wait for ARM core to finish displaying the starting grid. + while (MXC_SEMA_CheckSema(SEMA_IDX_RISCV) != E_NO_ERROR) {} + while (1) { // Wait for keypress. - while (KEYPRESS_READY == false) {} + // Make sure the ARM core is finished displaying. + while (MXC_SEMA_CheckSema(SEMA_IDX_RISCV) != E_NO_ERROR) {} MXC_SEMA_GetSema(SEMA_IDX_RISCV); input_direction_t dir = KEYPRESS_INPUT_DIR; - error = Game_2048_UpdateGrid(dir); - if (error == E_NONE_AVAIL) { + state = Game_2048_UpdateGrid(dir, &new_block_idx_location); + if (state == E_NONE_AVAIL) { PRINT("Game over!\n"); LED_On(LED_GREEN); while(1); - } else if (error != E_NO_ERROR) { + } else if (state != E_NO_ERROR && state != true) { PRINT("RISC-V: Error updating next move: %d\n", error); LED_On(LED_RED); while(1); } - // Game_2048_PrintGrid(); - PRINT_GRID(); - - // Game_2048_GetGrid(RISCV_GRID_COPY); + // This function must be called before PRINT_GRID() and SendGridToARMCore() + // functions to grab the latest grid state. + Game_2048_GetGrid(RISCV_GRID_COPY); - // Send updated grid and keypress to RISCV through mailbox 1. - // Game_2048_GetGridMailBox(SEMA_ARM_WR_MAILBOX->payload); + PRINT_GRID(); - // for (int x = 0; x < MAILBOX_PAYLOAD_LEN; x++) { - // PRINT("RISCV: %02x\n", SEMA_ARM_MAILBOX->payload[x]); - // } + PRINT_GRID_STATE(); - int i = 0; - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; + SendGridToARMCore(); - PRINT("RISCV: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, RISCV_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); - i+=4; - } - } + SendKeypressToARMCore(); - SEMA_ARM_MAILBOX->payload[4 * 16] = (CONTROLLER_KEYPRESS >> (8 * 0)) & 0xFF; + PRINT("RISCV: State: %d\n", state); - MXC_Delay(500000); + SendNewBlockIndexARMCore(&new_block_idx_location, state); - // MXC_Delay(MXC_DELAY_SEC(1)); KEYPRESS_READY = false; + // Listen for next keypress. + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); + LED_On(LED_RED); + while(1); + } + + // Get ARM to update the display. MXC_SEMA_FreeSema(SEMA_IDX_ARM); } } diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index 04d78f51884..ebc96e030ce 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -53,27 +53,37 @@ // ---|---|---|--- // c | d | e | f static uint32_t MAIN_2048_GRID[4][4]; +static uint8_t PREV_2048_GRID_STATE[4][4]; /* **** Functions **** */ /** * Must have TRNG initialized first before calling this function. * + * @param new_block_1D_idx_location Pointer to hold the index (0-15) of the new + * block location. + * * @return If true (non-zero value), new block added. If false (zero), * game over. */ -static bool add_new_block(void) +static bool add_new_block(bool isInit, uint8_t *new_block_1D_idx_location) { uint8_t block_2_or_4; uint32_t open_space_idx; uint32_t available_open_spaces = 0; uint8_t open_space_count = 0; - // Select whether a 2 or 4 block will be placed. - if (MXC_TRNG_RandomInt() & 0x01) { - block_2_or_4 = 4; - } else { + // If at the start of the new program, start with the 2 block. + if (isInit == true) { block_2_or_4 = 2; + } else { + // Select whether a 2 or 4 block will be placed. + // Add more weight to 2. + if (MXC_TRNG_RandomInt() % 3) { // 1 or 2 + block_2_or_4 = 2; + } else { // 0 + block_2_or_4 = 4; + } } // Find available spaces in the grid by representing the grid (2-D array) @@ -104,16 +114,19 @@ static bool add_new_block(void) // Fill the "-th" available open space where n is variable "open_space_idx". // We have the 1-D array index and need to convert to 2-D array coordinate location. + int idx = 0; for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { if (MAIN_2048_GRID[row][col] == 0) { if (open_space_count == open_space_idx) { // Found "n-th" available open space, update grid. MAIN_2048_GRID[row][col] = block_2_or_4; + *new_block_1D_idx_location = idx; return true; } - open_space_count += 1; + open_space_count++; + idx++; } } } @@ -121,7 +134,7 @@ static bool add_new_block(void) return false; } -int Game_2048_Init(void) +int Game_2048_Init(uint8_t *new_block_location_idx) { int error; @@ -139,14 +152,14 @@ int Game_2048_Init(void) } // Should never reach here since we cleared the grid earlier in the function. - if(add_new_block() == false) { + if(add_new_block(true, new_block_location_idx) == false) { return E_BAD_STATE; } return E_NO_ERROR; } -inline static bool row_logic_left_2(void) +inline static bool row_logic_left(void) { int prev_row[4] = {}; bool blocks_moved = false; @@ -160,7 +173,7 @@ inline static bool row_logic_left_2(void) int temp_row[4] = {0}; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. - // Get all valid blocks to help with same-value pair logic. + // Get all valid blocks in column to help with same-value pair logic. for (int col = 0; col < 4; col++) { // Start at left of main row. prev_row[col] = MAIN_2048_GRID[row][col]; @@ -182,6 +195,16 @@ inline static bool row_logic_left_2(void) // Check if the single block moved left. if (prev_row[0] != MAIN_2048_GRID[row][0]) { blocks_moved = true; + + // Represent the state of the original block location as deleted. + for (int col = 3; col >= 0; col--) { + if (prev_row[col] != 0) { + PREV_2048_GRID_STATE[row][col] = ERASE; + break; + } + } + } else { + PREV_2048_GRID_STATE[row][0] = UNMOVED; } continue; @@ -193,7 +216,7 @@ inline static bool row_logic_left_2(void) // Start at top of temp column. for (int t_col = 0; t_col < 4; t_col++) { if (temp_row[t_col] == 0 || t_col >= temp_col_num) { - // Reached end of valid blocks. + // Reached end of valid blocks in row. break; } @@ -207,6 +230,8 @@ inline static bool row_logic_left_2(void) // Combine then write to main grid. MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); + PREV_2048_GRID_STATE[row][main_grid_col] = COMBINE; + // Because a same-value pair was combined at index "col" and "col + 1", // increment the col so that the next iteration of the for loop // will start at "col + 2" in the temp_row. @@ -217,10 +242,19 @@ inline static bool row_logic_left_2(void) main_grid_col += 1; } - // Check if any blocks moved. If not, then don't add new button. - for (int col = 0; col < 4; col++) { + // Check if any blocks moved starting from right to left, and keep track of what blocks were moved + // to delete on the display. + for (int col = 3; col >= 0; col--) { if (prev_row[col] != MAIN_2048_GRID[row][col]) { blocks_moved = true; + + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = ERASE; + } + } else if ((prev_row[col] != 0) && (prev_row[col] == MAIN_2048_GRID[row][col])) { + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = UNMOVED; + } } } } @@ -228,7 +262,7 @@ inline static bool row_logic_left_2(void) return blocks_moved; } -inline static bool row_logic_right_2(void) +inline static bool row_logic_right(void) { int prev_row[4] = {}; bool blocks_moved = false; @@ -265,6 +299,16 @@ inline static bool row_logic_right_2(void) // Check if the single block moved right. if (prev_row[3] != MAIN_2048_GRID[row][3]) { blocks_moved = true; + + // Represent the state of the original block location as deleted. + for (int col = 0; col < 4; col++) { + if (prev_row[col] != 0) { + PREV_2048_GRID_STATE[row][col] = ERASE; + break; + } + } + } else { + PREV_2048_GRID_STATE[row][3] = UNMOVED; } continue; @@ -290,6 +334,8 @@ inline static bool row_logic_right_2(void) // Combine then write to main grid. MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); + PREV_2048_GRID_STATE[row][main_grid_col] = COMBINE; + // Because a same-value pair was combined at index "col" and "col + 1", // increment the col so that the next iteration of the for loop // will start at "col + 2" in the temp_row. @@ -300,84 +346,28 @@ inline static bool row_logic_right_2(void) main_grid_col -= 1; } - // Check if any blocks moved. If not, then don't add new button. + // Check if any blocks moved starting from left to right, and keep track of what blocks were moved + // to delete on the display. for (int col = 0; col < 4; col++) { // Don't forget direction, start at end. - if (prev_row[3 - col] != MAIN_2048_GRID[row][3 - col]) { + if (prev_row[col] != MAIN_2048_GRID[row][col]) { blocks_moved = true; - } - } - } - return blocks_moved; -} - -inline static void column_logic_up_1(void) -{ - // Iterate through each column and run the 2048 "same-value pair" logic. - for (int col = 0; col < 4; col++) { - bool same_value_pairs_detected = false; - - // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. - if (COLUMN_SUM(col) == 0) { - continue; - } - - // Not a big difference in speeds... Using brute force for fastest times. - // O(n) where n is the number of rows vs O(1) brute-force. - // Move numbers up to clear empty spaces. - for (int row = 0; row < 3; row++) { - // If space is empty, move over next block. - if (MAIN_2048_GRID[row][col] == 0) { - // Find next available block. - for (int next_row = row + 1; next_row < 4; next_row++) { - if (MAIN_2048_GRID[next_row][col] != 0) { - MAIN_2048_GRID[row][col] = MAIN_2048_GRID[next_row][col]; - MAIN_2048_GRID[next_row][col] = 0; // Clear the block that was just moved. - - // Found next available block, end loop (save cycles). - break; - } + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = ERASE; } - } - } - - // Add pairs together and remove the second block. In this case, thes econd block - // is going to be bottom block within the pair because the direction is UP. - for (int row = 0; row < 3; row++) { - // The second conditional doesn't really matter because 0*2 will be 0... - if ((MAIN_2048_GRID[row][col] == MAIN_2048_GRID[row+1][col]) && (MAIN_2048_GRID[row][col] != 0)) { - MAIN_2048_GRID[row][col] *= 2; - MAIN_2048_GRID[row+1][col] = 0; // Clear bottom block of the pair. - - same_value_pairs_detected = true; - } - } - - // If there are combined numbers, then the blocks will have to be moved up again because same value pairs have - // combined and cleared the bottom block. Else, save time by looping again. - if (same_value_pairs_detected) { - // Starting at 1 this time because the blocks moved up already. - for (int row = 1; row < 3; row++) { - // If space is empty, move over next block. - if (MAIN_2048_GRID[row][col] == 0) { - // Find next available block. - for (int next_row = row + 1; next_row < 4; next_row++) { - if (MAIN_2048_GRID[next_row][col] != 0) { - MAIN_2048_GRID[row][col] = MAIN_2048_GRID[next_row][col]; - MAIN_2048_GRID[next_row][col] = 0; // Clear the block that was just moved. - - // Found next available block, end loop (save cycles). - break; - } - } + } else if ((prev_row[col] != 0) && (prev_row[col] == MAIN_2048_GRID[row][col])) { + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = UNMOVED; } } } } + + return blocks_moved; } -inline static bool column_logic_up_2(void) +inline static bool column_logic_up(void) { int prev_col[4] = {}; bool blocks_moved = false; @@ -413,6 +403,15 @@ inline static bool column_logic_up_2(void) // Check if the single block moved up. if (prev_col[0] != MAIN_2048_GRID[0][col]) { blocks_moved = true; + + for (int row = 3; row >= 0; row++) { + if (prev_col[row] != 0) { + PREV_2048_GRID_STATE[row][col] = ERASE; + break; + } + } + } else { + PREV_2048_GRID_STATE[0][col] = UNMOVED; } continue; @@ -438,6 +437,8 @@ inline static bool column_logic_up_2(void) // Combine then write to main grid. MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); + PREV_2048_GRID_STATE[main_grid_row][col] = COMBINE; + // Because a same-value pair was combined at index "row" and "row + 1", // increment the row so that the next iteration of the for loop // will start at "row + 2" in the temp_column. @@ -448,10 +449,19 @@ inline static bool column_logic_up_2(void) main_grid_row += 1; } - // Check if any blocks moved. If not, then don't add new button. - for (int row = 0; row < 4; row++) { + // Check if any blocks moved starting from bottom to top, and keep track of what blocks were moved + // to delete on the display. + for (int row = 3; row >= 0; row--) { if (prev_col[row] != MAIN_2048_GRID[row][col]) { blocks_moved = true; + + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = ERASE; + } + } else if ((prev_col[row] != 0) && (prev_col[row] == MAIN_2048_GRID[row][col])) { + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = UNMOVED; + } } } } @@ -459,7 +469,7 @@ inline static bool column_logic_up_2(void) return blocks_moved; } -static bool column_logic_down_2(void) +static bool column_logic_down(void) { int prev_col[4] = {}; bool blocks_moved = false; @@ -496,6 +506,16 @@ static bool column_logic_down_2(void) // Check if the single block moved down. if (prev_col[3] != MAIN_2048_GRID[3][col]) { blocks_moved = true; + + // Represent the state of the original block location as deleted. + for (int row = 0; row < 4; row++) { + if (prev_col[row] != 0) { + PREV_2048_GRID_STATE[row][col] = ERASE; + break; + } + } + } else { + PREV_2048_GRID_STATE[3][col] = UNMOVED; } continue; @@ -521,6 +541,8 @@ static bool column_logic_down_2(void) // Combine then write to main grid. MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); + PREV_2048_GRID_STATE[main_grid_row][col] = COMBINE; + // Because a same-value pair was combined at index "row" and "row + 1", // increment the row so that the next iteration of the for loop // will start at "row + 2" in the temp_column. @@ -533,10 +555,19 @@ static bool column_logic_down_2(void) main_grid_row -= 1; } - // Check if any blocks moved. If not, then don't add new button. + // Check if any blocks moved starting from bottom to top, and keep track of what blocks were moved + // to delete on the display. for (int row = 0; row < 4; row++) { - if (prev_col[3 - row] != MAIN_2048_GRID[3 - row][col]) { + if (prev_col[row] != MAIN_2048_GRID[row][col]) { blocks_moved = true; + + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = ERASE; + } + } else if ((prev_col[row] != 0) && (prev_col[row] == MAIN_2048_GRID[row][col])) { + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = UNMOVED; + } } } } @@ -545,47 +576,54 @@ static bool column_logic_down_2(void) } -int Game_2048_UpdateGrid(input_direction_t direction) +int Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx) { bool blocks_moved; + // Clear grid state. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + PREV_2048_GRID_STATE[row][col] = 0; + } + } + // Run main game logic. switch(direction) { case INPUT_UP: printf("UP\n"); - blocks_moved = column_logic_up_2(); + blocks_moved = column_logic_up(); break; case INPUT_DOWN: printf("DOWN\n"); - blocks_moved = column_logic_down_2(); + blocks_moved = column_logic_down(); break; case INPUT_LEFT: printf("LEFT\n"); - blocks_moved = row_logic_left_2(); + blocks_moved = row_logic_left(); break; case INPUT_RIGHT: printf("RIGHT\n"); - blocks_moved = row_logic_right_2(); + blocks_moved = row_logic_right(); break; // Should never reach here. default: - return E_BAD_STATE; + return E_INVALID; } // Once the main game logic is done, insert a new block. if (blocks_moved == true) { - if (add_new_block() == true) { - return E_NO_ERROR; + if (add_new_block(false, new_block_1D_idx) == true) { + return true; } else { return E_NONE_AVAIL; // Game over. } } else { // nothing happened - return E_NO_ERROR; + return false; } } @@ -628,6 +666,15 @@ void Game_2048_GetGrid(uint32_t grid[4][4]) } } +void Game_2048_GetGridState(uint8_t grid_state[4][4]) +{ + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + grid_state[row][col] = PREV_2048_GRID_STATE[row][col]; + } + } +} + void Game_2048_GetGridMailBox(uint8_t *grid_1D_size_64B) { int i = 0; From a8c104559b0a5c4e60adbf8c5d442cdc17f53072 Mon Sep 17 00:00:00 2001 From: Woo Date: Sat, 14 Sep 2024 18:30:33 -0500 Subject: [PATCH 05/27] Finish game functioanilty --- Examples/MAX32655/Demo_2048/ARM/main.c | 111 ++++++++++---- .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 15 +- Examples/MAX32655/Demo_2048/RISCV/main.c | 145 +++++++++++------- .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 100 +++++++++--- 4 files changed, 265 insertions(+), 106 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 901f2387dd3..2ae88352313 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -77,7 +77,32 @@ typedef struct { #define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexs are from 0 to (16 blocks * 4 bytes) - 1. #define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) #define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) + +/** + * These enums help keep track of what blocks were erased, + * combined, or didn't move to help optimize and select + * the animation of for the display. + * IMPORTANT: Sync these commands with the RISCV core. + */ +typedef enum { + EMPTY = 0, + ERASE = 1, + COMBINE = 2, + UNMOVED = 3 +} block_state_t; + +/** + * These enums help keep track of the game state. + * IMPORTANT: Sync these commands with the RISCV core. + */ +typedef enum { + IN_PROGRESS = 0, + GAME_OVER = 1, + WINNER = 2, +} game_state_t; /* **** Globals **** */ // Defined in sema_reva.c @@ -89,18 +114,8 @@ extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes #define SEMA_RISCV_MAILBOX mxcSemaBox0 #define SEMA_ARM_MAILBOX mxcSemaBox1 -static uint32_t ARM_GRID_COPY[4][4] = {0}; -static uint8_t ARM_GRID_COPY_STATE[4][4] = {0}; - -/** - * These enums help keep track of what blocks are del - * IMPORTANT: Sync these commands with the RISCV core. - */ -typedef enum { - ERASE = 1, - COMBINE = 2, - UNMOVED = 3 -} block_state_t; +uint32_t ARM_GRID_COPY[4][4] = {0}; +block_state_t ARM_GRID_COPY_STATE[4][4] = {0}; /* **** Functions **** */ @@ -156,20 +171,32 @@ graphics_slide_direction_t ReceiveDirectionFromRISCVCore(void) } } -bool ReceiveNewBlockLocationFromRISCVCore(uint8_t *row, uint8_t *col) +bool ReceiveNewBlockLocationFromRISCVCore(uint16_t *row, uint16_t *col) { - *row = (SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] / 4); - *col = (SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] % 4); + uint8_t new_block_added = SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX]; + if (new_block_added) { // true + *row = (uint16_t)(SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] / 4); + *col = (uint16_t)(SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] % 4); + } else { + *row = 0xFFFF; + *col = 0xFFFF; + } - return SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX + 1]; + return new_block_added; +} + +game_state_t ReceiveGameStateFromRISCVCore(void) +{ + return SEMA_ARM_MAILBOX->payload[MAILBOX_GAME_STATE_IDX]; } // ***************************************************************************** int main(void) { int error; - uint8_t row, col; + uint16_t new_block_row = 0xFFFF, new_block_col = 0xFFFF; graphics_slide_direction_t direction; + game_state_t game_state; // System Initialization: // - Use IPO for System Clock for fastest speed. (Done in SystemInit) @@ -250,9 +277,16 @@ int main(void) // Get starting grid to keep ARM and RISCV grid copies in sync. ReceiveGridFromRISCVCore(); - ReceiveNewBlockLocationFromRISCVCore(&row, &col); + ReceiveNewBlockLocationFromRISCVCore(&new_block_row, &new_block_col); + + game_state = ReceiveGameStateFromRISCVCore(); + if (game_state != IN_PROGRESS) { + PRINT("ARM: Error starting game.\n"); + LED_On(LED_RED); + while(1); + } - Graphics_AddNewBlock(row, col, ARM_GRID_COPY[row][col]); + Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); // Signal RISC-V to start waiting for keypresses. MXC_SEMA_FreeSema(SEMA_IDX_RISCV); @@ -276,11 +310,11 @@ int main(void) } } - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - PRINT("ARM: r:%d c:%d state:%d\n", row, col, ARM_GRID_COPY_STATE[row][col]); - } - } + // Pre-set these values as invalid locations. + new_block_row = 0xFFFF, new_block_col = 0xFFFF; + bool new_block_added; + // If blocks moved, Add new block after all the grid updated. + new_block_added = ReceiveNewBlockLocationFromRISCVCore(&new_block_row, &new_block_col); // Add new blocks. for (int row = 0; row < 4; row++) { @@ -288,16 +322,31 @@ int main(void) if (ARM_GRID_COPY_STATE[row][col] == COMBINE) { Graphics_CombineBlocks(row, col, ARM_GRID_COPY[row][col]); } else if (ARM_GRID_COPY[row][col] != 0 && ARM_GRID_COPY_STATE[row][col] != UNMOVED) { - Graphics_AddBlock(row, col, ARM_GRID_COPY[row][col]); - PRINT("Redraw?\n"); + // Don't draw newly spawned block. + // new_block_row and new_block_col will be set to 0xFFFF for invalid + // location if new block was not added. + if ((row != new_block_row) || (col != new_block_col)) { + Graphics_AddBlock(row, col, ARM_GRID_COPY[row][col]); + } } } } + + // Add new block with spawn animation. + if (new_block_added == true) { + Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); + } - // If blocks moved, Add new block after all the grid updated. - if (ReceiveNewBlockLocationFromRISCVCore(&row, &col)) { - LED_Toggle(1); - Graphics_AddNewBlock(row, col, ARM_GRID_COPY[row][col]); + game_state = ReceiveGameStateFromRISCVCore(); + // Check if game is finished. + if (game_state == WINNER) { + PRINT("ARM: Congratulations, you win!\n"); + PRINT("ARM: Ending game.\n"); + while(1); + } else if (game_state == GAME_OVER) { + PRINT("ARM: Game Over. Nice try! Better luck next time.\n"); + PRINT("ARM: Ending game.\n"); + while(1); } // Signal RISC-V Core that it's ready for the next grid state. diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h index 4c1eb28adf9..eea71c96af1 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -40,16 +40,29 @@ typedef enum { * IMPORTANT: Sync these commands with the ARM core. */ typedef enum { + EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; +/** + * These enums help track the state of the end game.. + * IMPORTANT: Sync these commands with the ARM core. + */ +typedef enum { + IN_PROGRESS = 0, + GAME_OVER = 1, + WINNER = 2, +} game_state_t; + /* **** Function Prototypes **** */ int Game_2048_Init(uint8_t *new_block_location_idx); -int Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx); +game_state_t Game_2048_CheckState(void); + +bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx); void Game_2048_PrintGrid(void); diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 204c76a2a29..6430f41c429 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -81,7 +81,9 @@ typedef struct { #define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexs are from 0 to (16 blocks * 4 bytes) - 1. #define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) #define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) /* **** Globals **** */ // Defined in sema_reva.c @@ -105,59 +107,50 @@ mxc_uart_regs_t *CONTROLLER_UART = MXC_UART0; /***** Functions *****/ -// Must grab grid space before calling this function to have the latest -// grid state. -void SendGridToARMCore(void) -{ - int i = MAILBOX_MAIN_GRID_IDX; - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; - - // PRINT("RISCV: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, RISCV_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); - i+=4; - } - } - - i = MAILBOX_MAIN_GRID_STATE_IDX; - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY_STATE[row][col] >> (8 * 0)) & 0xFF; - i++; - } - } -} - void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) { int error; - // Assume no keypress if error detected. + // No keypress if error detected. if (cb_error != E_NO_ERROR) { + PRINT("RISCV: Error listening to keypress: %d\n", cb_error); + PRINT("RISCV: Try again.\n"); + CONTROLLER_KEYPRESS = 0; // NULL character - } + KEYPRESS_READY = false; - KEYPRESS_READY = true; + MXC_UART_ClearRXFIFO(MXC_UART0); + + // Listen for next keypress. + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); + LED_On(LED_RED); + } + + return; + } // User can add additional directional key switches here. switch (CONTROLLER_KEYPRESS) { case 'a': KEYPRESS_INPUT_DIR = INPUT_LEFT; + KEYPRESS_READY = true; break; case 'd': KEYPRESS_INPUT_DIR = INPUT_RIGHT; + KEYPRESS_READY = true; break; case 'w': KEYPRESS_INPUT_DIR = INPUT_UP; + KEYPRESS_READY = true; break; case 's': KEYPRESS_INPUT_DIR = INPUT_DOWN; + KEYPRESS_READY = true; break; default: @@ -165,15 +158,6 @@ void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) } PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, cb_error); - - MXC_UART_ClearRXFIFO(MXC_UART0); - - // // Listen for next keypress. - // error = Controller_Start(&CONTROLLER_REQ); - // if (error != E_NO_ERROR) { - // PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); - // LED_On(LED_RED); - // } } // Must grab grid space before calling this function to have the latest @@ -240,15 +224,46 @@ void PRINT_GRID_STATE(void) } } +// Must grab grid space before calling this function to have the latest +// grid state. +void SendGridToARMCore(void) +{ + int i = MAILBOX_MAIN_GRID_IDX; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; + + // PRINT("RISCV: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, RISCV_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); + i+=4; + } + } + + i = MAILBOX_MAIN_GRID_STATE_IDX; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY_STATE[row][col] >> (8 * 0)) & 0xFF; + i++; + } + } +} + inline void SendKeypressToARMCore(void) { SEMA_ARM_MAILBOX->payload[MAILBOX_KEYPRESS_IDX] = (CONTROLLER_KEYPRESS >> (8 * 0)) & 0xFF; } -inline void SendNewBlockIndexARMCore(uint8_t *new_block_idx, uint8_t did_block_move) +void SendNewBlockIndexToARMCore(uint8_t *new_block_idx, uint8_t did_block_move_or_is_init) { + SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX] = (did_block_move_or_is_init >> (8 * 0)) & 0xFF; SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] = (*new_block_idx >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX + 1] = (did_block_move >> (8 * 1)) & 0xFF; +} + +void SendGameStateToARMCore(game_state_t state) +{ + SEMA_ARM_MAILBOX->payload[MAILBOX_GAME_STATE_IDX] = (state >> (8 * 0)) & 0xFF; } // ***************************************************************************** @@ -335,7 +350,9 @@ int main(void) SendGridToARMCore(); - SendNewBlockIndexARMCore(&new_block_idx_location, false); + SendNewBlockIndexToARMCore(&new_block_idx_location, true); + + SendGameStateToARMCore(Game_2048_CheckState()); // Signal ARM core to MXC_SEMA_FreeSema(SEMA_IDX_ARM); @@ -354,16 +371,15 @@ int main(void) input_direction_t dir = KEYPRESS_INPUT_DIR; state = Game_2048_UpdateGrid(dir, &new_block_idx_location); - if (state == E_NONE_AVAIL) { - PRINT("Game over!\n"); - LED_On(LED_GREEN); - while(1); - } else if (state != E_NO_ERROR && state != true) { - PRINT("RISC-V: Error updating next move: %d\n", error); - LED_On(LED_RED); - while(1); + if (state == true) { + PRINT("RISC-V: Blocks moved.\n"); + } else { + PRINT("RISC-V: Blocks did not move.\n"); } + // Check state of game. + game_state_t game_state = Game_2048_CheckState(); + // This function must be called before PRINT_GRID() and SendGridToARMCore() // functions to grab the latest grid state. Game_2048_GetGrid(RISCV_GRID_COPY); @@ -376,21 +392,40 @@ int main(void) SendKeypressToARMCore(); - PRINT("RISCV: State: %d\n", state); + SendGameStateToARMCore(game_state); - SendNewBlockIndexARMCore(&new_block_idx_location, state); + SendNewBlockIndexToARMCore(&new_block_idx_location, state); KEYPRESS_READY = false; + // Check if game is finished. + if (game_state == WINNER) { + // Signal ARM to finish final display update. + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + + PRINT("RISCV: Congratulations, you win!\n"); + PRINT("RISCV: Ending game.\n"); + + while(1); + } else if (game_state == GAME_OVER) { + // Signal ARM to finish final display update. + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + + PRINT("RISCV: Game Over. Nice try! Better luck next time.\n"); + PRINT("RISCV: Ending game.\n"); + while(1); + } + + PRINT("GAME STATE: %d\n", game_state); + // Listen for next keypress. + MXC_UART_ClearRXFIFO(MXC_UART0); + error = Controller_Start(&CONTROLLER_REQ); if (error != E_NO_ERROR) { PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); LED_On(LED_RED); while(1); } - - // Get ARM to update the display. - MXC_SEMA_FreeSema(SEMA_IDX_ARM); } } diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index ebc96e030ce..82df71bfd4f 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -53,20 +53,26 @@ // ---|---|---|--- // c | d | e | f static uint32_t MAIN_2048_GRID[4][4]; -static uint8_t PREV_2048_GRID_STATE[4][4]; +static block_state_t PREV_2048_GRID_STATE[4][4]; + +static game_state_t GAME_STATE; + +static uint16_t AVAILABLE_EMPTY_BLOCKS_NUM; /* **** Functions **** */ /** * Must have TRNG initialized first before calling this function. * + * @param is_init True/False if a new block is added during + * initialization when grid is first created. * @param new_block_1D_idx_location Pointer to hold the index (0-15) of the new * block location. * * @return If true (non-zero value), new block added. If false (zero), * game over. */ -static bool add_new_block(bool isInit, uint8_t *new_block_1D_idx_location) +static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) { uint8_t block_2_or_4; uint32_t open_space_idx; @@ -74,7 +80,7 @@ static bool add_new_block(bool isInit, uint8_t *new_block_1D_idx_location) uint8_t open_space_count = 0; // If at the start of the new program, start with the 2 block. - if (isInit == true) { + if (is_init == true) { block_2_or_4 = 2; } else { // Select whether a 2 or 4 block will be placed. @@ -105,6 +111,9 @@ static bool add_new_block(bool isInit, uint8_t *new_block_1D_idx_location) } } + // This should be the only place that this variable is written to. + AVAILABLE_EMPTY_BLOCKS_NUM = available_open_spaces; + // No available space, game over. if (available_open_spaces == 0) { return false; @@ -112,7 +121,7 @@ static bool add_new_block(bool isInit, uint8_t *new_block_1D_idx_location) open_space_idx = (MXC_TRNG_RandomInt() % available_open_spaces); - // Fill the "-th" available open space where n is variable "open_space_idx". + // Fill the "n-th" available open space where n is variable "open_space_idx". // We have the 1-D array index and need to convert to 2-D array coordinate location. int idx = 0; for (int row = 0; row < 4; row++) { @@ -122,15 +131,21 @@ static bool add_new_block(bool isInit, uint8_t *new_block_1D_idx_location) // Found "n-th" available open space, update grid. MAIN_2048_GRID[row][col] = block_2_or_4; *new_block_1D_idx_location = idx; + + // Decrement as a new block was just filled into the function. + AVAILABLE_EMPTY_BLOCKS_NUM--; return true; } open_space_count++; - idx++; } + idx++; } } + // Added for build warning. + // Shouldn't reach here as there's a check earlier in the function that checks if there + // are any available spaces to save time from iterating through the for loop. return false; } @@ -156,12 +171,13 @@ int Game_2048_Init(uint8_t *new_block_location_idx) return E_BAD_STATE; } + GAME_STATE = IN_PROGRESS; + return E_NO_ERROR; } inline static bool row_logic_left(void) { - int prev_row[4] = {}; bool blocks_moved = false; for (int row = 0; row < 4; row++) { @@ -170,7 +186,8 @@ inline static bool row_logic_left(void) continue; } - int temp_row[4] = {0}; + uint32_t prev_row[4] = {0}; + uint32_t temp_row[4] = {0}; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. // Get all valid blocks in column to help with same-value pair logic. @@ -196,7 +213,8 @@ inline static bool row_logic_left(void) if (prev_row[0] != MAIN_2048_GRID[row][0]) { blocks_moved = true; - // Represent the state of the original block location as deleted. + // Represent the state of the original block location as deleted for + // display. for (int col = 3; col >= 0; col--) { if (prev_row[col] != 0) { PREV_2048_GRID_STATE[row][col] = ERASE; @@ -264,7 +282,6 @@ inline static bool row_logic_left(void) inline static bool row_logic_right(void) { - int prev_row[4] = {}; bool blocks_moved = false; for (int row = 0; row < 4; row++) { @@ -273,7 +290,8 @@ inline static bool row_logic_right(void) continue; } - int temp_row[4] = {0}; + uint32_t prev_row[4] = {0}; + uint32_t temp_row[4] = {0}; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. // Get all valid blocks to help with same-value pair logic. @@ -369,7 +387,6 @@ inline static bool row_logic_right(void) inline static bool column_logic_up(void) { - int prev_col[4] = {}; bool blocks_moved = false; for (int col = 0; col < 4; col++) { @@ -378,7 +395,8 @@ inline static bool column_logic_up(void) continue; } - int temp_column[4] = {0}; + uint32_t prev_col[4] = {0}; + uint32_t temp_column[4] = {0}; int temp_row_num = 0; // Also tracks how many valid blocks there are. // Get all valid blocks to help with same-value pair logic. @@ -404,12 +422,13 @@ inline static bool column_logic_up(void) if (prev_col[0] != MAIN_2048_GRID[0][col]) { blocks_moved = true; - for (int row = 3; row >= 0; row++) { + for (int row = 3; row >= 0; row--) { if (prev_col[row] != 0) { PREV_2048_GRID_STATE[row][col] = ERASE; break; } } + } else { PREV_2048_GRID_STATE[0][col] = UNMOVED; } @@ -471,16 +490,17 @@ inline static bool column_logic_up(void) static bool column_logic_down(void) { - int prev_col[4] = {}; bool blocks_moved = false; for (int col = 0; col < 4; col++) { + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. if (COLUMN_SUM(col) == 0) { continue; } - int temp_column[4] = {0}; + uint32_t prev_col[4] = {0}; + uint32_t temp_column[4] = {0}; int temp_row_num = 0; // Also tracks how many valid blocks there are in column. // Get all valid blocks to help with same-value pair logic. @@ -575,8 +595,48 @@ static bool column_logic_down(void) return blocks_moved; } +game_state_t Game_2048_CheckState(void) +{ + // Check if there's a 2048 block. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (MAIN_2048_GRID[row][col] == 2048) { + return WINNER; + } + } + } + + // Check if the new block that was just added filled in the + // last available empty block. + if (AVAILABLE_EMPTY_BLOCKS_NUM == 0) { + // If so, check if there are any swipes that can still be made before calling game over. + // This can be done by checking if there are any same-value pairs next to each other. + // Check if a row has same value pair. + for (int r = 0; r < 4; r++) { + for (int c = 0; c < 3; c++) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r][c+1]) { + return IN_PROGRESS; + } + } + } + + // Check if a column has a same-value pair. + for (int c = 0; c < 4; c++) { + for (int r = 0; r < 3; r++) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r+1][c]) { + return IN_PROGRESS; + } + } + } + + // If it reaches here, then there were no same-value pairs and no more moves can be made + return GAME_OVER; + } else { + return IN_PROGRESS; + } +} -int Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx) +bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx) { bool blocks_moved; @@ -611,18 +671,20 @@ int Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx) // Should never reach here. default: - return E_INVALID; + return false; } // Once the main game logic is done, insert a new block. if (blocks_moved == true) { if (add_new_block(false, new_block_1D_idx) == true) { + // Successfully added new block. return true; } else { - return E_NONE_AVAIL; // Game over. + // New block could not be added, nothing happened. + return false; } } else { - // nothing happened + // Blocks didn't move. return false; } } From f3fe548cbf4b2ddb42ab56454a5d6c14b85d62e1 Mon Sep 17 00:00:00 2001 From: Woo Date: Sun, 15 Sep 2024 03:20:42 -0500 Subject: [PATCH 06/27] Added logos and timer --- .../Demo_2048/ARM/.vscode/settings.json | 5 +- .../MAX32655/Demo_2048/ARM/inc/cfs_logo.h | 117 +++++ .../ARM/inc/clear_sans_bold_game_text.h | 313 ++++++++++++ ... => clear_sans_bold_scaled_block_digits.h} | 447 ++++++++---------- .../MAX32655/Demo_2048/ARM/inc/graphics.h | 18 + Examples/MAX32655/Demo_2048/ARM/main.c | 120 +++-- ...usion-Studio-FG-Icon_Digital-FullColor.bmp | Bin 0 -> 19254 bytes .../bmp_rle/clear_sans_bold_1024.bmp | Bin 0 -> 430 bytes .../resources/bmp_rle/clear_sans_bold_128.bmp | Bin 0 -> 403 bytes .../resources/bmp_rle/clear_sans_bold_16.bmp | Bin 0 -> 470 bytes .../resources/bmp_rle/clear_sans_bold_2.bmp | Bin 0 -> 294 bytes .../bmp_rle/clear_sans_bold_2048.bmp | Bin 0 -> 430 bytes .../resources/bmp_rle/clear_sans_bold_256.bmp | Bin 0 -> 574 bytes .../resources/bmp_rle/clear_sans_bold_32.bmp | Bin 0 -> 470 bytes .../resources/bmp_rle/clear_sans_bold_4.bmp | Bin 0 -> 382 bytes .../resources/bmp_rle/clear_sans_bold_512.bmp | Bin 0 -> 498 bytes .../resources/bmp_rle/clear_sans_bold_64.bmp | Bin 0 -> 558 bytes .../resources/bmp_rle/clear_sans_bold_8.bmp | Bin 0 -> 294 bytes .../MAX32655/Demo_2048/ARM/src/graphics.c | 94 +++- Examples/MAX32655/Demo_2048/RISCV/main.c | 9 + 20 files changed, 828 insertions(+), 295 deletions(-) create mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h create mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h rename Examples/MAX32655/Demo_2048/ARM/inc/{clear_sans_bold_num.h => clear_sans_bold_scaled_block_digits.h} (83%) create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/CodeFusion-Studio-FG-Icon_Digital-FullColor.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_1024.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_128.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_16.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2048.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_256.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_32.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_4.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_512.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_64.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_8.bmp diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json index 10f490c632a..79fb6f2896f 100644 --- a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json @@ -82,7 +82,10 @@ "ext_flash.h": "c", "tft_ssd2119.h": "c", "graphics.h": "c", - "led.h": "c" + "led.h": "c", + "clear_sans_bold_game_text.h": "c", + "cfs_logo.h": "c", + "clear_sans_bold_scaled_block_digits.h": "c" } } diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h b/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h new file mode 100644 index 00000000000..6687fa61583 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h @@ -0,0 +1,117 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +// clang-format off + +/* **** Includes **** */ + +#include +#include "mxc_device.h" + +/* **** Definitions **** */ + +// NOTE: This definition is used instead of 'const' to place these files into Flash to remove +// the "discard 'const' qualifer from pointer target type" build warning. +#define __flash __attribute__((section(".flash_code_section"))) + +/* **** Function Prototypes **** */ + +#define CFS_LOGO_WIDTH (80) +#define CFS_LOGO_HEIGHT (80) +__flash uint16_t cfs_logo[] = { + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9db6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7944, 0x7602, 0x1c96, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3faf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x593c, 0xf602, 0x5703, 0xb602, 0xfc95, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0xff9e, 0x7fcf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x593c, 0xf602, 0x5703, 0x5703, 0x5703, 0xb602, 0xfc95, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0xff9e, 0xff9e, 0xbfdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3934, 0xf602, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0xb602, 0xfc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1faf, 0xdff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x593c, 0xf602, 0x5703, 0x5703, 0x1703, 0x1703, 0x3703, 0x5703, 0x5703, 0xb602, 0xdc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5934, 0xf602, 0x5703, 0x5703, 0xf602, 0x7944, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xd602, 0xdc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x7fcf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3934, 0xf602, 0x5703, 0x5703, 0xf602, 0x7944, 0xffff, 0xffff, 0xffff, 0x770b, 0x1703, 0x5703, 0x5703, 0xd602, 0xbc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0x192c, 0xf702, 0x5703, 0x5703, 0xf602, 0x7944, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x770b, 0x1703, 0x5703, 0x5703, 0xb602, 0xbc85, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1faf, 0xfff7, 0xffff, 0x192c, 0xf702, 0x5703, 0x5703, 0xf602, 0x7944, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xb602, 0xbb85, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0xf923, 0xf702, 0x5703, 0x5703, 0xf602, 0x9a4c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb813, 0x1703, 0x5703, 0x5703, 0xd602, 0x9b85, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xf81b, 0x1703, 0x5703, 0x5703, 0xf602, 0xba54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb813, 0x1703, 0x5703, 0x5703, 0xd602, 0x9b7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5fb7, 0xd81b, 0x1703, 0x5703, 0x5703, 0xf602, 0x592c, 0xfff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xd602, 0x9b7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x7fb7, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0x5934, 0x7fb7, 0xff9e, 0x3faf, 0xdff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xb602, 0x7b7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0x7a34, 0x9fb7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xb602, 0x7b75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xd81b, 0x1703, 0x5703, 0x5703, 0xf602, 0x7a34, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fcf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd81b, 0x1703, 0x5703, 0x5703, 0xd602, 0x7b75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xd81b, 0x1703, 0x5703, 0x5703, 0xf602, 0x9a34, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd823, 0x1703, 0x5703, 0x5703, 0xd602, 0x5b75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0x9a34, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3faf, 0xfff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xd602, 0x5b75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0x9a3c, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd81b, 0x1703, 0x5703, 0x5703, 0xd602, 0x3b6d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0x9a3c, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x3faf, 0x3faf, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0xd602, 0x3b6d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x3faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0xba3c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xbc6d, 0xfd75, 0xfd75, 0xfd75, 0xdd6d, 0xbf96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0xd602, 0x3b6d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x3faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0xba3c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0xdd6d, 0x9502, 0xf602, 0xf602, 0xf602, 0xf702, 0xbf96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3faf, 0xfff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0x5703, 0xd602, 0x3b65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f9f, 0x5faf, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0xba3c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x3d7e, 0xd602, 0x3703, 0x5703, 0x3703, 0x1703, 0xdf96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0xd602, 0x1a65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3fa7, 0x780b, 0x1703, 0x5703, 0x5703, 0xf602, 0xba44, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x3d7e, 0xf602, 0x3703, 0x5703, 0x3703, 0xf602, 0xbe96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x9fd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7703, 0x1703, 0x5703, 0x5703, 0xf602, 0xda44, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x3d7e, 0xf602, 0x3703, 0x5703, 0x3703, 0x1703, 0x9e8e, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xbfe7, 0xffff, 0xffff, 0xffff, 0x192c, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa64, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0xda44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x3d7e, 0xf602, 0x3703, 0x5703, 0x3703, 0x1703, 0x9e8e, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3faf, 0xfff7, 0xffff, 0xffff, 0x1934, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0xdb44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x5e86, 0xd602, 0x3703, 0x5703, 0x3703, 0xf602, 0x9e96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x5fbf, 0xffff, 0xffff, 0x3934, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x980b, 0x1703, 0x5703, 0x5703, 0xf602, 0xdb44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x5e86, 0xd602, 0x3703, 0x5703, 0x3703, 0xf602, 0x9e96, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0xffff, 0x3934, 0xf702, 0x5703, 0x5703, 0xd602, 0xda5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x770b, 0x1703, 0x5703, 0x5703, 0xf602, 0xfb4c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x5e86, 0xf602, 0x3703, 0x5703, 0x3703, 0xf602, 0x9e8e, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xffff, 0x593c, 0xf702, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x5703, 0x1703, 0x5703, 0x5703, 0x1703, 0x3b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e86, 0x3703, 0x5703, 0x5703, 0x3703, 0xf602, 0x3d7e, 0x3fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xbfcf, 0x5934, 0x3703, 0x5703, 0x5703, 0xd602, 0xba4c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xbfef, 0x1703, 0x3703, 0x5703, 0x5703, 0x1703, 0x9c65, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0xbf96, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0xbc6d, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xbfc7, 0xba44, 0x1703, 0x5703, 0x5703, 0xf702, 0xb81b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3703, 0x1703, 0x5703, 0x5703, 0xd602, 0x5b5d, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0x9e8e, 0x1703, 0x3703, 0x5703, 0x5703, 0xd602, 0xfd75, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0xfff7, 0xba54, 0xf602, 0x5703, 0x5703, 0xf702, 0xf823, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5703, 0x1703, 0x5703, 0x5703, 0xd602, 0x3b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9e8e, 0xf602, 0x3703, 0x5703, 0x5703, 0xd602, 0x1d76, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x7fc7, 0xffff, 0x994c, 0xf602, 0x5703, 0x5703, 0xf702, 0x192c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5703, 0x1703, 0x5703, 0x5703, 0xd602, 0x3b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9e8e, 0xf602, 0x3703, 0x5703, 0x3703, 0xd602, 0x1d76, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff9e, 0x3fb7, 0xffff, 0xffff, 0x994c, 0xf602, 0x5703, 0x5703, 0xf702, 0x3934, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0x3b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e8e, 0xf602, 0x3703, 0x5703, 0x3703, 0xf602, 0x1d76, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xdfe7, 0xffff, 0xffff, 0x593c, 0xb602, 0x1703, 0x1703, 0xf602, 0x3934, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3703, 0x3703, 0x5703, 0x5703, 0xd602, 0x1b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e8e, 0xf702, 0x3703, 0x5703, 0x3703, 0xd602, 0x1d76, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0xffff, 0xffff, 0xffff, 0xdc8d, 0x3934, 0x994c, 0x994c, 0x9944, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff9e, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0x1b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e8e, 0xf602, 0x3703, 0x5703, 0x3703, 0xd602, 0x1d7e, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x5fc7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f9f, 0x3fa7, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0x1b4d, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e8e, 0xd602, 0x3703, 0x5703, 0x3703, 0xd602, 0x3d7e, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3fb7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x3fa7, 0x1fa7, 0x770b, 0x1703, 0x5703, 0x5703, 0xd602, 0x1b4d, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3d7e, 0x9602, 0xf602, 0x1703, 0xf602, 0xd602, 0x3d7e, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x3fa7, 0x1fa7, 0x770b, 0x3703, 0x5703, 0x5703, 0xf602, 0xfb4c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5c5d, 0x7c65, 0x9c65, 0x9c65, 0x7c5d, 0x5e86, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x1fa7, 0xba44, 0xba54, 0xba54, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xda5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x3fa7, 0x3fa7, 0x5703, 0x3703, 0x5703, 0x5703, 0xf602, 0xfb4c, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0x3faf, 0x3faf, 0x3faf, 0x3faf, 0x3fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0x5fb7, 0x3b55, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xf702, 0x5703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x5703, 0x1703, 0x5703, 0x5703, 0xf602, 0xfb4c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x7fb7, 0xfd75, 0x5703, 0xf602, 0x3703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x3703, 0x770b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x780b, 0x1703, 0x5703, 0x5703, 0xf602, 0xdb44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0x5e7e, 0x7703, 0x7602, 0xd602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xd602, 0x3703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3fa7, 0x980b, 0x1703, 0x5703, 0x5703, 0xf602, 0xdb44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0x5edf, 0x7fe7, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x980b, 0x1703, 0x5703, 0x5703, 0xf602, 0xda44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x5fc7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x780b, 0x1703, 0x5703, 0x5703, 0xf602, 0xba44, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff96, 0x3faf, 0xfff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x780b, 0x1703, 0x5703, 0x5703, 0xf602, 0xba44, 0x9fb7, 0xff9e, 0x1fa7, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7fe7, 0x7fe7, 0x7fe7, 0x7fe7, 0x3ed7, 0xdfff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0xba3c, 0xffef, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xb602, 0xd602, 0xd602, 0x7502, 0x3934, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xd602, 0x1a6d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0x5703, 0xd602, 0xba54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x9813, 0x1703, 0x5703, 0x5703, 0xd602, 0xfa64, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1f9f, 0xdfef, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd823, 0xf702, 0x5703, 0x5703, 0xd602, 0xba54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff9e, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd823, 0x1703, 0x5703, 0x5703, 0xd602, 0xda5c, 0xffff, 0xffff, 0xffff, 0xd81b, 0x1703, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3faf, 0xdff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xd823, 0x1703, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1f9f, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0x1703, 0x5703, 0x5703, 0x1703, 0x5703, 0x1703, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0xff9e, 0xff96, 0x7fcf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd823, 0xf702, 0x5703, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0x5703, 0xd602, 0x1a65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fa7, 0xdff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0xd602, 0x1a65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x192c, 0x9602, 0x3b65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h new file mode 100644 index 00000000000..f623fecbda2 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h @@ -0,0 +1,313 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +// clang-format off + +/* **** Includes **** */ + +#include +#include "mxc_device.h" + +/* **** Definitions **** */ + +// NOTE: This definition is used instead of 'const' to place these files into Flash to remove +// the "discard 'const' qualifer from pointer target type" build warning. +#define __flash __attribute__((section(".flash_code_section"))) + +/* **** Function Prototypes **** */ + +// 199x15 +#define GAME_TEXT_DIGITS_WIDTH (131) +#define GAME_TEXT_DIGITS_HEIGHT (15) + +// These digits were edited in Microsoft Paint. Dimensions taken from there. + +// 11x15 +#define GAME_TEXT_DIGIT_0_WIDTH (11) +#define GAME_TEXT_DIGIT_0_HEIGHT (15) +__flash uint16_t game_text_digit_0[] = { + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 7x15 +#define GAME_TEXT_DIGIT_1_WIDTH (7) +#define GAME_TEXT_DIGIT_1_HEIGHT (15) +__flash uint16_t game_text_digit_1[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff +}; + +// 10x15 +#define GAME_TEXT_DIGIT_2_WIDTH (10) +#define GAME_TEXT_DIGIT_2_HEIGHT (15) +__flash uint16_t game_text_digit_2[] = { + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +// 10x15 +#define GAME_TEXT_DIGIT_3_WIDTH (10) +#define GAME_TEXT_DIGIT_3_HEIGHT (15) +__flash uint16_t game_text_digit_3[] = { + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 13x15 +#define GAME_TEXT_DIGIT_4_WIDTH (13) +#define GAME_TEXT_DIGIT_4_HEIGHT (15) +__flash uint16_t game_text_digit_4[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +// 12x15 +#define GAME_TEXT_DIGIT_5_WIDTH (12) +#define GAME_TEXT_DIGIT_5_HEIGHT (15) +__flash uint16_t game_text_digit_5[] = { + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 12x15 +#define GAME_TEXT_DIGIT_6_WIDTH (12) +#define GAME_TEXT_DIGIT_6_HEIGHT (15) +__flash uint16_t game_text_digit_6[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 11x15 +#define GAME_TEXT_DIGIT_7_WIDTH (11) +#define GAME_TEXT_DIGIT_7_HEIGHT (15) +__flash uint16_t game_text_digit_7[] = { + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 10x15 +#define GAME_TEXT_DIGIT_8_WIDTH (10) +#define GAME_TEXT_DIGIT_8_HEIGHT (15) +__flash uint16_t game_text_digit_8[] = { + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +// 12x15 +#define GAME_TEXT_DIGIT_9_WIDTH (12) +#define GAME_TEXT_DIGIT_9_HEIGHT (15) +__flash uint16_t game_text_digit_9[] = { + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +#define GAME_TEXT_DIGIT_PTR(digit) ((digit) == 0 ? game_text_digit_0 \ + : (digit) == 1 ? game_text_digit_1 \ + : (digit) == 2 ? game_text_digit_2 \ + : (digit) == 3 ? game_text_digit_3 \ + : (digit) == 4 ? game_text_digit_4 \ + : (digit) == 5 ? game_text_digit_5 \ + : (digit) == 6 ? game_text_digit_6 \ + : (digit) == 7 ? game_text_digit_7 \ + : (digit) == 8 ? game_text_digit_8 \ + : (digit) == 9 ? game_text_digit_9 \ + : NULL) + +#define GAME_TEXT_DIGIT_WIDTH(digit) ((digit) == 0 ? GAME_TEXT_DIGIT_0_WIDTH \ + : (digit) == 1 ? GAME_TEXT_DIGIT_1_WIDTH \ + : (digit) == 2 ? GAME_TEXT_DIGIT_2_WIDTH \ + : (digit) == 3 ? GAME_TEXT_DIGIT_3_WIDTH \ + : (digit) == 4 ? GAME_TEXT_DIGIT_4_WIDTH \ + : (digit) == 5 ? GAME_TEXT_DIGIT_5_WIDTH \ + : (digit) == 6 ? GAME_TEXT_DIGIT_6_WIDTH \ + : (digit) == 7 ? GAME_TEXT_DIGIT_7_WIDTH \ + : (digit) == 8 ? GAME_TEXT_DIGIT_8_WIDTH \ + : (digit) == 9 ? GAME_TEXT_DIGIT_9_WIDTH \ + : GAME_TEXT_DIGIT_0_WIDTH) + +// All the same. +#define GAME_TEXT_DIGITS_HEIGHT (15) + +// 4x15 +#define GAME_TEXT_DIGIT_COLON_WIDTH (4) +#define GAME_TEXT_DIGIT_COLON_HEIGHT (15) +__flash uint16_t game_text_colon[] = { + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 67x11 +#define GAME_TEXT_MOVES_WIDTH (67) +#define GAME_TEXT_MOVES_HEIGHT (11) +__flash uint16_t game_text_moves[] = { + 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_num.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h similarity index 83% rename from Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_num.h rename to Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h index 21fc4e95c15..1fb4f32d0b2 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_num.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h @@ -22,7 +22,6 @@ #include #include "mxc_device.h" -#include "uart.h" /* **** Definitions **** */ @@ -32,61 +31,34 @@ /* **** Function Prototypes **** */ -// NOTE: '__attribute__() - -// 16x19 -#define ZERO_WITDH (16) -#define ZERO_HEIGHT (19) -__flash uint16_t zero[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -}; +// These digits were custom made in Microsoft Paint and scaled down to fit the blocks. +// Dimensions are taken from bitmaps. // 14x22 #define BLOCK_2_DIGIT_PX_WIDTH (14) #define BLOCK_2_DIGIT_PX_HEIGHT (22) __flash uint16_t block_2[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }; @@ -94,56 +66,55 @@ __flash uint16_t block_2[] = { #define BLOCK_4_DIGIT_PX_WIDTH (17) #define BLOCK_4_DIGIT_PX_HEIGHT (22) __flash uint16_t block_4[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 - }; // 14x22 #define BLOCK_8_DIGIT_PX_WIDTH (14) #define BLOCK_8_DIGIT_PX_HEIGHT (22) __flash uint16_t block_8[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 }; @@ -151,27 +122,27 @@ __flash uint16_t block_8[] = { #define BLOCK_16_DIGIT_PX_WIDTH (26) #define BLOCK_16_DIGIT_PX_HEIGHT (22) __flash uint16_t block_16[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 }; @@ -179,27 +150,27 @@ __flash uint16_t block_16[] = { #define BLOCK_32_DIGIT_PX_WIDTH (30) #define BLOCK_32_DIGIT_PX_HEIGHT (22) __flash uint16_t block_32[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }; @@ -207,27 +178,27 @@ __flash uint16_t block_32[] = { #define BLOCK_64_DIGIT_PX_WIDTH (34) #define BLOCK_64_DIGIT_PX_HEIGHT (22) __flash uint16_t block_64[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 }; @@ -235,24 +206,24 @@ __flash uint16_t block_64[] = { #define BLOCK_128_DIGIT_PX_WIDTH (40) #define BLOCK_128_DIGIT_PX_HEIGHT (19) __flash uint16_t block_128[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbef7, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6210, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbef7, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6210, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 }; @@ -260,49 +231,49 @@ __flash uint16_t block_128[] = { #define BLOCK_256_DIGIT_PX_WIDTH (45) #define BLOCK_256_DIGIT_PX_HEIGHT (19) __flash uint16_t block_256[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 }; // 39x19 #define BLOCK_512_DIGIT_PX_WIDTH (39) #define BLOCK_512_DIGIT_PX_HEIGHT (19) __flash uint16_t block_512[] = { - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }; @@ -310,38 +281,38 @@ __flash uint16_t block_512[] = { #define BLOCK_1024_DIGIT_PX_WIDTH (41) #define BLOCK_1024_DIGIT_PX_HEIGHT (13) __flash uint16_t block_1024[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000 }; // 44x13 #define BLOCK_2048_DIGIT_PX_WIDTH (44) #define BLOCK_2048_DIGIT_PX_HEIGHT (13) __flash uint16_t block_2048[] = { - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 }; diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index 31b114c9518..7aa25971732 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -29,6 +29,7 @@ #define SCREEN_HEIGHT (240) // TODO(SW): Automatically calculate these sizes based on screen dimensions. +// Set the dimensions of all the models. #define GRID_OFFSET_X (80) #define GRID_OFFSET_Y (0) #define GRID_LENGTH (224) @@ -39,6 +40,20 @@ #define RADIUS_FOR_CORNERS (3) +#define CFS_LOGO_OFFSET_X (4) +#define CFS_LOGO_OFFSET_Y (0) + +#define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) +#define GAME_LOGO_OFFSET_Y (80) + +#define TIME_OFFSET_Y (215) +#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels +#define TIME_DIGIT3_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT2_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT1_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) +#define TIME_DIGIT0_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) + // Colors #define RGB565_WHITE (0xFFFF) @@ -60,6 +75,7 @@ #define RGB565_BLOCK_1024 (0xEE27) #define RGB565_BLOCK_2048 (0xEE05) +// Unused, but left here if anyone wants to expand features. #define RGB565_BLOCK_4096 (0xFDF7) #define RGB565_BLOCK_8192 (0xF38E) #define RGB565_BLOCK_16384 (0xFC58) @@ -120,3 +136,5 @@ void Graphics_CombineBlocks(int row, int col, int new_value); void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_direction_t direction); void Graphics_EraseSingleBlock(int row, int col); + +void Graphics_SetTime(uint32_t total_seconds); diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 2ae88352313..75849993f3c 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -80,6 +80,7 @@ typedef struct { #define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) #define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) #define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVE_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) /** * These enums help keep track of what blocks were erased, @@ -261,7 +262,11 @@ int main(void) MXC_SEMA_FreeSema(SEMA_IDX_RISCV); // Initialize RTC. - MXC_RTC_Init(0, 0); + if (MXC_RTC_Init(0, 0) != E_NO_ERROR) { + PRINT("ARM: Error initializing RTC: %d\n", error); + LED_On(LED_RED); + while(1); + } error = Graphics_Init(); if (error != E_NO_ERROR) { @@ -290,66 +295,83 @@ int main(void) // Signal RISC-V to start waiting for keypresses. MXC_SEMA_FreeSema(SEMA_IDX_RISCV); - + + // Start timer. + if (MXC_RTC_Start() != E_NO_ERROR) { + PRINT("ARM: Error starting timer: %d\n", error); + LED_On(LED_RED); + while(1); + } + + int prev_seconds = 0; + int seconds = 0; while (1) { + // Update timer. + MXC_RTC_GetSeconds(&seconds); + if (prev_seconds != seconds) { + Graphics_SetTime(seconds); + prev_seconds = seconds; + } + // Wait for RISCV to finish updating the grid. - while (MXC_SEMA_CheckSema(SEMA_IDX_ARM) != E_NO_ERROR) {} - MXC_SEMA_GetSema(SEMA_IDX_ARM); + if (MXC_SEMA_CheckSema(SEMA_IDX_ARM) == E_NO_ERROR) { + MXC_SEMA_GetSema(SEMA_IDX_ARM); - // Get the updated grid then display. - ReceiveGridFromRISCVCore(); + // Get the updated grid then display. + ReceiveGridFromRISCVCore(); - direction = ReceiveDirectionFromRISCVCore(); + direction = ReceiveDirectionFromRISCVCore(); - // Erase blocks that are moving. - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - if (ARM_GRID_COPY_STATE[row][col] == 1) { - Graphics_EraseSingleBlock(row, col); + // Erase blocks that are moving. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (ARM_GRID_COPY_STATE[row][col] == 1) { + Graphics_EraseSingleBlock(row, col); + } } } - } - // Pre-set these values as invalid locations. - new_block_row = 0xFFFF, new_block_col = 0xFFFF; - bool new_block_added; - // If blocks moved, Add new block after all the grid updated. - new_block_added = ReceiveNewBlockLocationFromRISCVCore(&new_block_row, &new_block_col); - - // Add new blocks. - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - if (ARM_GRID_COPY_STATE[row][col] == COMBINE) { - Graphics_CombineBlocks(row, col, ARM_GRID_COPY[row][col]); - } else if (ARM_GRID_COPY[row][col] != 0 && ARM_GRID_COPY_STATE[row][col] != UNMOVED) { - // Don't draw newly spawned block. - // new_block_row and new_block_col will be set to 0xFFFF for invalid - // location if new block was not added. - if ((row != new_block_row) || (col != new_block_col)) { - Graphics_AddBlock(row, col, ARM_GRID_COPY[row][col]); + // Pre-set these values as invalid locations. + new_block_row = 0xFFFF, new_block_col = 0xFFFF; + bool new_block_added; + // If blocks moved, Add new block after all the grid updated. + new_block_added = ReceiveNewBlockLocationFromRISCVCore(&new_block_row, &new_block_col); + + // Add new blocks. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (ARM_GRID_COPY_STATE[row][col] == COMBINE) { + Graphics_CombineBlocks(row, col, ARM_GRID_COPY[row][col]); + } else if (ARM_GRID_COPY[row][col] != 0 && ARM_GRID_COPY_STATE[row][col] != UNMOVED) { + // Don't draw newly spawned block. + // new_block_row and new_block_col will be set to 0xFFFF for invalid + // location if new block was not added. + if ((row != new_block_row) || (col != new_block_col)) { + Graphics_AddBlock(row, col, ARM_GRID_COPY[row][col]); + } } } } - } - - // Add new block with spawn animation. - if (new_block_added == true) { - Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); - } + + // Add new block with spawn animation. + if (new_block_added == true) { + Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); + } - game_state = ReceiveGameStateFromRISCVCore(); - // Check if game is finished. - if (game_state == WINNER) { - PRINT("ARM: Congratulations, you win!\n"); - PRINT("ARM: Ending game.\n"); - while(1); - } else if (game_state == GAME_OVER) { - PRINT("ARM: Game Over. Nice try! Better luck next time.\n"); - PRINT("ARM: Ending game.\n"); - while(1); - } + game_state = ReceiveGameStateFromRISCVCore(); + // Check if game is finished. + if (game_state == WINNER) { + PRINT("ARM: Congratulations, you win!\n"); + PRINT("ARM: Ending game.\n"); + while(1); + } else if (game_state == GAME_OVER) { + PRINT("ARM: Game Over. Nice try! Better luck next time.\n"); + PRINT("ARM: Ending game.\n"); + while(1); + } - // Signal RISC-V Core that it's ready for the next grid state. - MXC_SEMA_FreeSema(SEMA_IDX_RISCV); + // Signal RISC-V Core that it's ready for the next grid state. + MXC_SEMA_FreeSema(SEMA_IDX_RISCV); + } } } diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/CodeFusion-Studio-FG-Icon_Digital-FullColor.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/CodeFusion-Studio-FG-Icon_Digital-FullColor.bmp new file mode 100644 index 0000000000000000000000000000000000000000..48bf5769146ca097929c0e63e2da0f7d4e7380e4 GIT binary patch literal 19254 zcmeI32~d$0fd?#!L%%r=bm03$`WlFz{qa4*^4*6#Bi$!>p4*pwvm1nn-Y@SAcxS*n1Kt_% z&VY9YyffgPf&Yscs5IVQM+sr9Yaz@K;Q;AWiYNB99{_+s1ck9FKKoyoTy%T$H*pT(8|~Zm)Jn z0IJzZRHwL-Cj++6v42^RlO9xLIj@y^o4z8#>>TIhS12)Nr6mJ=WDau~>%j8Ki z2cpb?XXG74I3oh zNYqzF7_{5W9knjS>$qNZr=^x%ZFQw4eTU0e)a#(YYt-$88K=*DSPomd={51@5$l?T zl{(aLB~CE3sV8CYj@%h9U`#U>^=SzHR*O@^-25m`y4iDJh>S4 zjyyo2L*>3P)$tQ+4o}9VjrVQITP`&0bBb)J-Yz!o*K4;GhYmUyHllFTh;w1@yS_r+ zEsh+mHZOxc0a(7y`jBs;|7jPXOjlyB45z!tjGe(UBIH`F`ClgbSgRTS40(|PvY{HgOKDGi<)C1? zpUH+aErOvc9Fc^ZF<36`7$UYLcBV3ld~P*VeB4iRbAOUBjx=QkC?ZS66Rgzb!Nw+y z`|9ZZp5{9#Q|(}f%6--;HAOD?60wCNWA$m&%vDCFL(xJRR_bt5Ybj^ZrUst=;^q9H zx9PQEaB-xHC4$uH56LxqdFODKur|YnmVwO5bp8bKjUqQ4a5_cun^K`{lc8pZ`P(au zI&aM@38O4A9OIl?`4XRv-f9SfkUHH~VS^c8jvXOhKO`4Sxs5<{t0*wZ*M^Mn)u@^0 z4l+hYVUQNe>f%K+4Q2To-#Rj$uF+Vyk51_Aos=L@pS4C~z?SbGX%~%^VcAo2{ob~c zbrhNT@-&h#)?F>r5vX}1{SGlT=TPL}_ZTu{19I;2{=K4H!EA(ha@dMJqr_(WjetA6 z=wrT0k+D44kjIhwv{`Oy86&Xt+fcPx6x+^)4nr2oN(6`xIZK}FA+o;h8g}l?XE7|2 zpXx)Cx(&rYQ<}o#}##H<4rp^y>+-@oqbf zQBq|F1A_f>th+I)GvQGaxS79-rOFr+ibfo}p1Z`Pi|y9Zc=#YXH4q#a+EU6{h=tw30|!1@t@x0U=CaZCY_KaxB* zQePQnzEuWAoLcoKgemG5tk^3nyV+woK z4OmNL4mCEOU@WIrzG#E>AtmaZ#bnI+vD~oBBL41XzJXNg+R4Q>GxnpQudR5kJFwPt z`hZ}#Wr6+A3xMTjToR??@nYI1L|(Tk4SyZwM{aUX8x%HY;XSaE0K3j5EOS+Tb(FcI zhMQ>aisu?o+QG&I( zYO0(RZB*kCjd_47i&6cv5UhTM!Uaq*bME6dUv`F!{Gsmn#|MVd6$d(nJww{|3&9Go zGFNT2hm{VPIIL$r>%w?pcvfWDA(1aB4*9D*e4$uTo8))(#7v}%xav|qZ9gA`QkC3p zdE4TuID=@nxhhA_S^6AbXJN({VqKp`@ppUD;JgeO>!}8Zfc#v{mlOpJl>0JDI?yt| zFiRYeH>|E|e{js@%wB9eElnIlF6{bh|$f)sZ(V!1iee znDNEEGaUP^p7@y%01e3COnE^kw!Hy=E4$M>TuijGyUW!~30~^i`cnY~Oi!fMu z^8;U?o5!kfgKm$Yw_jBqMV0SL5=WEE@d1u~Ja$K!ms%{4n-1nI`q@3mU;RN8Evde; zs2Ovf;O2p7Tz+VQa(}g-y5^;+NDLOKlZ*SYb%Y-L`I3ULp)O_9%zH`>TamED*8a+FhcN8gTCN=Xo9o z#A4RAusm^-m3s zyix*8KkhD=4V=QUk+*sPD~z-7mB0Q?^huv>+iL(;dwh-Ki}&}AjhCkS(kX52EjC*_C%yq_gV=#SbC1nvkx(_}%T_SQ!7^72YekcLuyO;GF^Q40vb2I|JSs@Xi3A Gf&T$#-A32| literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_1024.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_1024.bmp new file mode 100644 index 0000000000000000000000000000000000000000..241a318cc7f1e50f1f08d55fe14e86b603eb9d71 GIT binary patch literal 430 zcmZvYu@S={3`OO;v_9%=kZh3Jeb!0MM45ppG6x%wr~ioy$Fe2CLwp3=^Sy-ZMZDp6 ze8rcz5F;L}f39|cJ=6&PsMU$c5U-|SCCX5G4tf-3xhUY2=!{c6dLhbE z03%sVJjGnF^OEW(94$Bv9CSDtRT?<*x#6FCgL$5=ewfaat&`mSoB!^iy7?-qq)JB8 KRd@}}t^WnH8i$zx literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_128.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_128.bmp new file mode 100644 index 0000000000000000000000000000000000000000..12d129a51a6b5126944822b14934be3d667d7adc GIT binary patch literal 403 zcmV;E0c`$>P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGt)&Kw*)&UsN%IyFE0VqjCK~zXfy_DMu zgD?<8qlh5*|3B)3g12^TQYYz}WKG)x!CYo{Co5VRWA^8Gv+w7!s&Fjhbjz}srfH6O zOdrB^98$d6pp-Zy=VCE9zP8VURB%pmFin%4`Q*m4?%hEtm~Wyz54)H;2a=}7rc^ux z;(4C!>a#$~5F?ob(!TeKQ?zY+Jg*A;f*Qqmq_}GiU%TU~yTdTp*$Jw7Y7W+#2@8ku zvGc1l)hmv%ZJV9FkS-?~cEd4_qo*q}*!TVML;+4Jnaic?Iy-xTOkQvKHaUe@4`MMf z?bTUP2RSKz&Uej$aP9Qi^&&Y@NkOJWd#i(*f~BYp{?i;#8Dw+oy52U&KW#?ZM+L7X xY=RAhoy*}H@kL*;25q;U{%;0BuE|qp%mc`2tII%79|iyb002ovPDHLkV1h8)tMdQ= literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_16.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3947c8cc7c3ed12951a9c18f3202b9de461a99fc GIT binary patch literal 470 zcmbu5!3_d23$S7?-R|oWT2K5H zyI?15i32|30l%JY3T&=Lu%k5}c&=EB-aABUM`qnHz6zC#W4_8|9kqmkA_p#dCKUgT zE0@@;*AtR({r_0+yFnha{AhT`l2`v9?G9{CGgCKb`-R=G^w840q;C2y+voNF8@%&W GhUgp4S*+^- literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..75316025cf33bb9054df8506fed81acb4e7ac816 GIT binary patch literal 294 zcmbV`u?>Vk3N4Pnmy_7w}2NabTh8?9zP-!bQ@#PSbl9SF~Fyia?Z4-l+z|~9(8YKJ-9d9LY4aD zo@+c-t{I$MEC1^`tAVWZz63JDksa4-Go-vlD&Mg@^+zft`t)zaMA{PJ*&7v zqa&JFnulojKBb2Tze&qiG7yp$(LKC>o)}_o$=z+0QK`U)VSF1${ub zxWPsoz|W^ug)%JyH(IlUMF?%tdj~LeV@^g;9F}PAvWzK86H~709ECgQdkOkQ!FOPW z45$ehS(sM?O6r|pwHR6rC*oIzJ0(a literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_4.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cafc2e49df7e30b814b77d2fb6cdd924515baf65 GIT binary patch literal 382 zcma)%!3~2j3`IXu58M!!N^H7NDyp?&SS*=2As!!j^IGg|@SE8a^-{hoZi=g7 ztBZ2gd+xhArCy~~z2~88iPuq8$@bj9AfGYfUZMm!aoBcKkJx*TdBFI zQk#-K4qPc=KjF$2p)HH~3EC1f_<cZ5di}k zIEia+aO0%}FpyFcGE*WU=gfoZK&{FMZnZ=YOH@W{VOf+@edSl9?-$$ojf_}+zVegr NpI`g8&(YuaId3qTci;d3 literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index cf8ee28368c..7feabf4353e 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -25,21 +25,20 @@ #include "tft_ssd2119.h" #include "graphics.h" - -#include "clear_sans_bold_num.h" +#include "clear_sans_bold_scaled_block_digits.h" +#include "clear_sans_bold_game_text.h" +#include "cfs_logo.h" #include "led.h" /* **** Definitions **** */ -// #define ANIMATION_DELAY(block_num) () - - /* **** Globals **** */ -// Keep copy of grid. -// static uint32_t MAIN_GRID[4][4] = {0}; +static int prev_digit1 = 0; +static int prev_digit2 = 0; +static int prev_digit3 = 0; /* **** Functions **** */ @@ -56,6 +55,36 @@ int Graphics_Init(void) // Clear display. MXC_TFT_DrawFastRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, F_BACKGROUND_COLOR); + // Draw CFS Logo. + MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, cfs_logo); + + // Draw Game Logo. + // Forgive me for all the math who ever tries to read through the code. + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = GAME_LOGO_OFFSET_X; + int y = GAME_LOGO_OFFSET_Y; + + // Math is to center the digits printed to the newly created block. + int dx = x + (BLOCK_LENGTH / 2) - (BLOCK_2048_DIGIT_PX_WIDTH / 2); + int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_2048_DIGIT_PX_HEIGHT / 2); + + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_BACKGROUND_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + + // Draw move counter. + + + // Draw timer. + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_COLON_OFFSET_X, TIME_OFFSET_Y, GAME_TEXT_DIGIT_COLON_WIDTH, GAME_TEXT_DIGITS_HEIGHT, game_text_colon, RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + // Draw grid. MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, GRID_LENGTH, F_GRID_COLOR, RADIUS_FOR_CORNERS, F_BACKGROUND_COLOR); for (int row = 0; row < 4; row++) { @@ -408,3 +437,54 @@ void Graphics_EraseSingleBlock(int row, int col) { MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); } + +void Graphics_SetTime(uint32_t total_seconds) +{ + // Convert total time to minutes:seconds (mm:ss) + int digit0, digit1, digit2, digit3; + + // The max possible seconds is 5999, which yields 99m:59s. + if (total_seconds >= 5999) { + digit0 = 9; + digit1 = 5; + digit2 = 9; + digit3 = 9; + } else { + digit0 = (total_seconds % 10); + digit1 = ((total_seconds - digit0) % 60) / 10; + + digit2 = ((total_seconds - (digit1 * 10) - digit0) / 60) % 10; + digit3 = ((total_seconds - (digit1 * 10) - digit0) / 60) / 10; + } + + // Update timer on display. + MXC_TFT_DrawFastRect(TIME_DIGIT0_OFFSET_X(16), TIME_OFFSET_Y, 16, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); + + // Don't waste time on re-writing the same digits. + // Changes every 10 seconds. + if (prev_digit1 != digit1) { + MXC_TFT_DrawFastRect(TIME_DIGIT1_OFFSET_X(16), TIME_OFFSET_Y, 16, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); + prev_digit1 = digit1; + } + + // Changes every 60 seconds. + if (prev_digit2 != digit2) { + MXC_TFT_DrawFastRect(TIME_DIGIT2_OFFSET_X(16), TIME_OFFSET_Y, 16, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); + prev_digit2 = digit2; + } + + // Changes every 600 seoncds. + if (prev_digit3 != digit3) { + MXC_TFT_DrawFastRect(TIME_DIGIT2_OFFSET_X(16), TIME_OFFSET_Y, 16, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); + prev_digit3 = digit3; + } +} + +void Graphics_UpdateMovesCount(uint32_t moves_count) +{ + +} diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 6430f41c429..09cc69490d9 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -84,6 +84,7 @@ typedef struct { #define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) #define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) #define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVE_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) /* **** Globals **** */ // Defined in sema_reva.c @@ -266,6 +267,11 @@ void SendGameStateToARMCore(game_state_t state) SEMA_ARM_MAILBOX->payload[MAILBOX_GAME_STATE_IDX] = (state >> (8 * 0)) & 0xFF; } +void SendMoveCountToARMCore(uint32_t move_count) +{ + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVE_COUNT_IDX] = (move_count >> (8 * 0)) & 0xFF; +} + // ***************************************************************************** int main(void) { @@ -427,5 +433,8 @@ int main(void) LED_On(LED_RED); while(1); } + + // Signal ARM to update display. + MXC_SEMA_FreeSema(SEMA_IDX_ARM); } } From 08ad9f9f25b0a2ed554ffe5b90610e26dc380786 Mon Sep 17 00:00:00 2001 From: Woo Date: Sun, 15 Sep 2024 04:55:11 -0500 Subject: [PATCH 07/27] Add moves counter --- .../ARM/inc/clear_sans_bold_game_text.h | 6 +- .../MAX32655/Demo_2048/ARM/inc/graphics.h | 18 ++++- Examples/MAX32655/Demo_2048/ARM/main.c | 23 +++++- .../MAX32655/Demo_2048/ARM/src/graphics.c | 75 +++++++++++++++---- Examples/MAX32655/Demo_2048/RISCV/main.c | 9 ++- 5 files changed, 105 insertions(+), 26 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h index f623fecbda2..08cad6f5790 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h @@ -300,9 +300,9 @@ __flash uint16_t game_text_colon[] = { #define GAME_TEXT_MOVES_HEIGHT (11) __flash uint16_t game_text_moves[] = { 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index 7aa25971732..f49ea1fa80b 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -46,16 +46,28 @@ #define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) #define GAME_LOGO_OFFSET_Y (80) +// Position settings for timer. #define TIME_OFFSET_Y (215) -#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - 1) #define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels #define TIME_DIGIT3_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) #define TIME_DIGIT2_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) #define TIME_DIGIT1_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) #define TIME_DIGIT0_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) -// Colors +// Position settings for moves counter. +#define MOVES_DIGITS_OFFSET_Y (160) +#define MOVES_TEXT_OFFSET_Y (MOVES_DIGITS_OFFSET_Y + GAME_TEXT_DIGITS_HEIGHT + 4) // 4 seemed to be appropriate number of pxiels for spacing. +#define MOVES_DIGIT_WIDTH (15) // Max width of digit is 15 pixels. +#define MOVES_DIGITS_OFFSET_X ((GRID_OFFSET_X / 2) - MOVES_DIGIT_WIDTH - (MOVES_DIGIT_WIDTH / 2)) +#define MOVES_TEXT_OFFSET_X ((GRID_OFFSET_X / 2) - (GAME_TEXT_MOVES_WIDTH / 2) + 4) +#define MOVES_DIGIT3_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 0) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT2_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 1) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT1_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT0_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) + +// Colors 16-bit RGB565. #define RGB565_WHITE (0xFFFF) #define RGB565_BLACK (0x0000) #define RGB565_DARK_GRAY (0x3084) @@ -138,3 +150,5 @@ void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_directio void Graphics_EraseSingleBlock(int row, int col); void Graphics_SetTime(uint32_t total_seconds); + +void Graphics_UpdateMovesCount(uint32_t moves_count); diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 75849993f3c..a9b0999bffe 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -80,7 +80,7 @@ typedef struct { #define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) #define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) #define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVE_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) /** * These enums help keep track of what blocks were erased, @@ -118,6 +118,8 @@ extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes uint32_t ARM_GRID_COPY[4][4] = {0}; block_state_t ARM_GRID_COPY_STATE[4][4] = {0}; +uint32_t MOVES_COUNT = 0; + /* **** Functions **** */ void ReceiveGridFromRISCVCore(void) @@ -191,6 +193,11 @@ game_state_t ReceiveGameStateFromRISCVCore(void) return SEMA_ARM_MAILBOX->payload[MAILBOX_GAME_STATE_IDX]; } +uint32_t ReceiveMovesCountFromRISCVCore(void) +{ + return SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX]; +} + // ***************************************************************************** int main(void) { @@ -303,8 +310,9 @@ int main(void) while(1); } - int prev_seconds = 0; - int seconds = 0; + uint32_t prev_seconds = 0; + uint32_t seconds = 0; + int prev_moves_count = MOVES_COUNT; // Should start as 0. while (1) { // Update timer. MXC_RTC_GetSeconds(&seconds); @@ -313,7 +321,7 @@ int main(void) prev_seconds = seconds; } - // Wait for RISCV to finish updating the grid. + // Update grid when RISCV signals ARM it's ready. if (MXC_SEMA_CheckSema(SEMA_IDX_ARM) == E_NO_ERROR) { MXC_SEMA_GetSema(SEMA_IDX_ARM); @@ -337,6 +345,13 @@ int main(void) // If blocks moved, Add new block after all the grid updated. new_block_added = ReceiveNewBlockLocationFromRISCVCore(&new_block_row, &new_block_col); + // Increment moves counter if blocks moved. + MOVES_COUNT = ReceiveMovesCountFromRISCVCore(); + if (prev_moves_count != MOVES_COUNT) { + Graphics_UpdateMovesCount(MOVES_COUNT); + prev_moves_count = MOVES_COUNT; + } + // Add new blocks. for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index 7feabf4353e..ac59b4c5bbb 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -36,9 +36,12 @@ /* **** Globals **** */ -static int prev_digit1 = 0; -static int prev_digit2 = 0; -static int prev_digit3 = 0; +static int prev_timer_digit1 = 0; +static int prev_timer_digit2 = 0; +static int prev_timer_digit3 = 0; +static int prev_moves_digit1 = 0; +static int prev_moves_digit2 = 0; +static int prev_moves_digit3 = 0; /* **** Functions **** */ @@ -76,7 +79,11 @@ int Graphics_Init(void) MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, block_2048, RGB565_BLACK, RGB565_BLOCK_2048); // Draw move counter. - + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_TEXT_OFFSET_X, MOVES_TEXT_OFFSET_Y, GAME_TEXT_MOVES_WIDTH, GAME_TEXT_MOVES_HEIGHT, game_text_moves, RGB565_BLACK, RGB565_WHITE); // Draw timer. MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); @@ -458,33 +465,73 @@ void Graphics_SetTime(uint32_t total_seconds) } // Update timer on display. - MXC_TFT_DrawFastRect(TIME_DIGIT0_OFFSET_X(16), TIME_OFFSET_Y, 16, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawFastRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. - if (prev_digit1 != digit1) { - MXC_TFT_DrawFastRect(TIME_DIGIT1_OFFSET_X(16), TIME_OFFSET_Y, 16, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + if (prev_timer_digit1 != digit1) { + MXC_TFT_DrawFastRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); - prev_digit1 = digit1; + prev_timer_digit1 = digit1; } // Changes every 60 seconds. - if (prev_digit2 != digit2) { - MXC_TFT_DrawFastRect(TIME_DIGIT2_OFFSET_X(16), TIME_OFFSET_Y, 16, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + if (prev_timer_digit2 != digit2) { + MXC_TFT_DrawFastRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); - prev_digit2 = digit2; + prev_timer_digit2 = digit2; } // Changes every 600 seoncds. - if (prev_digit3 != digit3) { - MXC_TFT_DrawFastRect(TIME_DIGIT2_OFFSET_X(16), TIME_OFFSET_Y, 16, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + if (prev_timer_digit3 != digit3) { + MXC_TFT_DrawFastRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); - prev_digit3 = digit3; + prev_timer_digit3 = digit3; } } void Graphics_UpdateMovesCount(uint32_t moves_count) { + // Convert total time to minutes:seconds (mm:ss) + int digit0, digit1, digit2, digit3; + // The max possible seconds is 5999, which yields 99m:59s. + if (moves_count >= 9999) { + digit0 = 9; + digit1 = 9; + digit2 = 9; + digit3 = 9; + } else { + digit0 = (moves_count % 10); + digit1 = ((moves_count / 10) % 10); + digit2 = ((moves_count / 100) % 10); + digit3 = ((moves_count / 1000) % 10); + } + + // Update timer on display. + MXC_TFT_DrawFastRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); + + // Don't waste time on re-writing the same digits. + // Changes every 10 seconds. + if (prev_moves_digit1 != digit1) { + MXC_TFT_DrawFastRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); + prev_moves_digit1 = digit1; + } + + // Changes every 60 seconds. + if (prev_moves_digit2 != digit2) { + MXC_TFT_DrawFastRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); + prev_moves_digit2 = digit2; + } + + // Changes every 600 seoncds. + if (prev_moves_digit3 != digit3) { + MXC_TFT_DrawFastRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); + prev_moves_digit3 = digit3; + } } diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 09cc69490d9..6f632ec43ec 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -84,7 +84,7 @@ typedef struct { #define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) #define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) #define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVE_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) /* **** Globals **** */ // Defined in sema_reva.c @@ -103,6 +103,8 @@ uint8_t KEYPRESS_INPUT_DIR; uint32_t RISCV_GRID_COPY[4][4] = {0}; uint8_t RISCV_GRID_COPY_STATE[4][4] = {0}; +uint32_t MOVES_COUNT = 0; + // Select Console UART instance. mxc_uart_regs_t *CONTROLLER_UART = MXC_UART0; @@ -267,9 +269,9 @@ void SendGameStateToARMCore(game_state_t state) SEMA_ARM_MAILBOX->payload[MAILBOX_GAME_STATE_IDX] = (state >> (8 * 0)) & 0xFF; } -void SendMoveCountToARMCore(uint32_t move_count) +void SendMovesCountToARMCore(uint32_t moves_count) { - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVE_COUNT_IDX] = (move_count >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] = (moves_count >> (8 * 0)) & 0xFF; } // ***************************************************************************** @@ -379,6 +381,7 @@ int main(void) state = Game_2048_UpdateGrid(dir, &new_block_idx_location); if (state == true) { PRINT("RISC-V: Blocks moved.\n"); + SendMovesCountToARMCore(++MOVES_COUNT); } else { PRINT("RISC-V: Blocks did not move.\n"); } From 68826b797752aaada01466c84044470d459b6622 Mon Sep 17 00:00:00 2001 From: Woo Date: Sun, 15 Sep 2024 16:09:43 -0500 Subject: [PATCH 08/27] Finished game --- Examples/MAX32655/Demo_2048/ARM/README.md | 57 +++- .../Demo_2048/ARM/inc/end_game_text.h | 295 ++++++++++++++++++ .../MAX32655/Demo_2048/ARM/inc/graphics.h | 9 + Examples/MAX32655/Demo_2048/ARM/main.c | 18 +- Examples/MAX32655/Demo_2048/ARM/project.mk | 9 - .../ARM/resources/bmp_rle/game_over.bmp | Bin 0 -> 102314 bytes .../ARM/resources/bmp_rle/game_over.png | Bin 0 -> 3628 bytes .../ARM/resources/bmp_rle/you_win.bmp | Bin 0 -> 102314 bytes .../ARM/resources/bmp_rle/you_win.png | Bin 0 -> 3348 bytes .../MAX32655/Demo_2048/ARM/src/graphics.c | 11 + Examples/MAX32655/Demo_2048/RISCV/main.c | 8 + 11 files changed, 391 insertions(+), 16 deletions(-) create mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.png create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/you_win.bmp create mode 100644 Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/you_win.png diff --git a/Examples/MAX32655/Demo_2048/ARM/README.md b/Examples/MAX32655/Demo_2048/ARM/README.md index b95b1374ae3..9a4da153f4d 100644 --- a/Examples/MAX32655/Demo_2048/ARM/README.md +++ b/Examples/MAX32655/Demo_2048/ARM/README.md @@ -1,6 +1,10 @@ ## Description -TODO +This example demonstrates running the 2048 game on both ARM and RISC-V cores on the MAX32655. + +The RISC-V core, running at 60MHz (ISO), handles the controller (keyboard) user inputs and the main 2048 game logic. + +The ARM core, running at 100MHz (IPO), keeps track of the timer (RTC) and handles the display graphics after the RISC-V core finishes handling the main game logic. ## Software @@ -10,16 +14,57 @@ Universal instructions on building, flashing, and debugging this project can be ### Project-Specific Build Notes -(None - this project builds as a standard example) +This project only supports the MAX32655EVKIT as it has the 320x240 TFT Display. ## Required Connections -TODO +If using the MAX32655EVKIT (EvKit\_V1): +- Connect a USB cable between the PC and the CN1 (USB/PWR) connector. +- Connect pins JP4(RX_SEL) and JP5(TX_SEL) to RX0 and TX0 header. +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Close jumper JP2 (LED0 EN). +- Close jumper JP3 (LED1 EN). ## Expected Output -TODO - ``` -TODO +******************************************************************************* +ARM: Starting ARM Initialization. + +ARM: Semaphore is not busy - with previous value: 1 + +ARM: Starting RISC-V core and handing off major UART0 Control to RISC-V. + +RISC-V: Starting RISC-V Initialization. + +RISC-V: Semaphore is not busy - with previous value: 1 + +RISC-V: Finished startup. Main UART0 control is handled by RISC-V now. + +RISC-V: Starting Controller and Game + + + + + + + + + + + | | | + | | | + | | | +----------------------------------- + | | | + | | | + | | | +----------------------------------- + | | | + | | 0002 | + | | | +----------------------------------- + | | | + | | | + | | | ``` diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h b/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h new file mode 100644 index 00000000000..ae26bd1ec48 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h @@ -0,0 +1,295 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +// clang-format off + +/* **** Includes **** */ + +#include +#include "mxc_device.h" + +/* **** Definitions **** */ + +// NOTE: This definition is used instead of 'const' to place these files into Flash to remove +// the "discard 'const' qualifer from pointer target type" build warning. +#define __flash __attribute__((section(".flash_code_section"))) + +/* **** Function Prototypes **** */ + +// These digits were custom made in Microsoft Paint and scaled down to fit the blocks. +// Dimensions are taken from bitmaps. + +// 206x124 +#define YOU_WIN_BOX_WIDTH (206) +#define YOU_WIN_BOX_HEIGHT (124) +__flash uint16_t you_win[] = { + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x18c6, 0x18c6, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x18c6, 0x18c6, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0x18c6, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703 +}; + +// 206x124 +#define GAME_OVER_BOX_WIDTH (206) +#define GAME_OVER_BOX_HEIGHT (124) +__flash uint16_t game_over[] = { + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x1084, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703 +}; diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index f49ea1fa80b..f65e1921111 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -66,6 +66,11 @@ #define MOVES_DIGIT1_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) #define MOVES_DIGIT0_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +// Position settings for Game Over and You Win boxes, +#define GAME_OVER_BOX_OFFSET_X (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (GAME_OVER_BOX_WIDTH / 2)) +#define GAME_OVER_BOX_OFFSET_Y (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (GAME_OVER_BOX_HEIGHT / 2)) +#define YOU_WIN_BOX_OFFSET_X (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (YOU_WIN_BOX_WIDTH / 2)) +#define YOU_WIN_BOX_OFFSET_Y (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (YOU_WIN_BOX_HEIGHT / 2)) // Colors 16-bit RGB565. #define RGB565_WHITE (0xFFFF) @@ -152,3 +157,7 @@ void Graphics_EraseSingleBlock(int row, int col); void Graphics_SetTime(uint32_t total_seconds); void Graphics_UpdateMovesCount(uint32_t moves_count); + +void Graphics_DisplayGameOver(void); + +void Graphics_DisplayYouWin(void); diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index a9b0999bffe..f64ee421b61 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -195,7 +195,12 @@ game_state_t ReceiveGameStateFromRISCVCore(void) uint32_t ReceiveMovesCountFromRISCVCore(void) { - return SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX]; + uint32_t moves_count = 0; + moves_count = SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] << (8 * 0); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+1] << (8 * 1); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+2] << (8 * 2); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+3] << (8 * 3); + return moves_count; } // ***************************************************************************** @@ -347,6 +352,7 @@ int main(void) // Increment moves counter if blocks moved. MOVES_COUNT = ReceiveMovesCountFromRISCVCore(); + PRINT("Moves: %d\n", MOVES_COUNT); if (prev_moves_count != MOVES_COUNT) { Graphics_UpdateMovesCount(MOVES_COUNT); prev_moves_count = MOVES_COUNT; @@ -378,10 +384,20 @@ int main(void) if (game_state == WINNER) { PRINT("ARM: Congratulations, you win!\n"); PRINT("ARM: Ending game.\n"); + + // Give some time for user to look at grid before drawing the popup. + MXC_Delay(MXC_DELAY_MSEC(750)); + Graphics_DisplayYouWin(); + while(1); } else if (game_state == GAME_OVER) { PRINT("ARM: Game Over. Nice try! Better luck next time.\n"); PRINT("ARM: Ending game.\n"); + + // Give some time for user to look at grid before drawing the popup. + MXC_Delay(MXC_DELAY_MSEC(750)); + Graphics_DisplayGameOver(); + while(1); } diff --git a/Examples/MAX32655/Demo_2048/ARM/project.mk b/Examples/MAX32655/Demo_2048/ARM/project.mk index 1f486ca072b..1082bb73c36 100644 --- a/Examples/MAX32655/Demo_2048/ARM/project.mk +++ b/Examples/MAX32655/Demo_2048/ARM/project.mk @@ -18,10 +18,6 @@ RISCV_APP=../RISCV IPATH += ./inc VPATH += ./src -# IPATH += resources -# VPATH += resources - - DEV_MODE_TRACE = 1 ifeq ($(DEV_MODE_TRACE), 1) PROJ_CFLAGS += -DDEV_MODE_TRACE=1 @@ -29,11 +25,6 @@ endif PROJ_CFLAGS += -UDEBUG -# RISC-V ICC1 will not be used. -# ARM_SRAM_SIZE = 0x18000 -# RISCV_SRAM_SIZE = 0x8000 # 32KB -# DUAL_CORE_RAM_SIZE = 0x20000 - # TODO: REMOVE ME # MAXIM_PATH=../../../../ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.bmp new file mode 100644 index 0000000000000000000000000000000000000000..be134db754c721800880b0d6580cb3a4eb67aafd GIT binary patch literal 102314 zcmeI5yRM~4QiZE$5E2+T2p6@15H{l?^=KR{9Bd45`UP;2dK?^_vB$&a3Gk4>$K@fg zv5T`#*P8S7Qe;N%f8T3oYW@?EaapkF{_UIpzy9dc`}el}vOa(M^yB}u|NN`J{@Z{2^?&}~U;O>Q|LLE6`_KRT%`boP zi$DJL_uv2dFTel(_y6^`zx{*1`osVE`JesWZ~oHRlE25zoBkjF@UzeR+cVgAVBdj# z2lgGmjAwa zk7`d~PvBz$-LEtDe`IWJPhd~L@1m1?QhNe>0v{9T-i!So8C%;E*c0%(=;WT%`4jlz zhaWzF_uY4I|5cR!%cze}HhuE%^&AuE-i!Uu(aqzs0EPAtZk#b#QECy zeixnm+UKy^AMcg#(n$K=8GDwSKIW!xR8My2F~)bjvYDGDYgJgn*lYj!=9D|YfA0DY z@}Ajd>3gRdvpC07I`?QzV(oWx$|Si0}Be3>V| zbC1?!J=dyis?WuG6$jgx^NPCPMJHczHraD^r&eO}UHBenF7LJP=h2$Pa=pry97gqo zVVul)#eMf)?0?1CWY4@)x`Wj{VvKYx+LSk1yw{`L)tba|PGw6jchK z-aYHOU;1=EZIhHuOOp0?WATGA&Q%!g*5%hXs_8gM#Uzex?+*MBrgNq5RZqabo^-O# zem$%18}F9ySS5Y$GJZ5QVmMc^M`{wwZ=|v%7jh+sjC=Kc_g?IO^*L4j>puEU^S=3h z`rawVHp$UqjB_(~wI;EYqgC179r(dMMjR0SvZ~)jCtr3zCpKQ)yL>mk#|h1QeafA! zY7)!!Xp?R`c`)V_4#ao`y?ZbAzrrk5d(?fa?woAAcZ{Ju@2ui@_vOz!s~F;$t8Bz} zOlPxSb)1t}$-yK*WXv((+v=RGB{^G-6Z(s^gozfzMqeiyW@=+0vwTmNwa z{`I7jdtN_IVDv`v9#(g5HCI@Q^;*qiP4cllZL-rwo%PLQ%Z~|k@5TO)jIHUu>0ar} zyC$3OX*DV5W}b6w7Y>*6R%;qZGO=k>4f(5h*5CS1C*XI{$)9HJ-JZZ}PoR4*_P_R& zcK3S%Kb?TzMJIonwRev`0sY>~-=lMVMt(|)8Z&N3V51XZ0(ec#xO$Ypm|Q*nf@M8}qp*!29_q??w~N zw{s0{eixlQa>AVJNbmj(r=I!iaK;l?zG~$hl~cu@5~qB9S-(0X##DZBCYJP5*R{CM zcvO9{kI|fkS>?KxdLfQL`c^nPcg9tij+4Cf z^1JBdk-Fr)s&f{n%ux8u72lj4Iqa?d=~87*>zbt?{bd`5`~i}}i{7Gs#J zSncgkAF)>ARNq*VqeU#oF>lld^JZML?n>S{+_N6{D}7~c_rIE}c=gCWohutx*0OJ8 zxBrOj-i!T5u-)IP%sDX6^G+U&$$ZW_eZ*Ob%h{j8ha9C>xr~`{C2#51=AQMqC+DiC zV6lUWX`Hit}|WzR&!@g_a;#qH|tB%(!uJWl)w{FFK#-rjsv#~G6jqHl? zc`@EPxe3E|$!gKhnpJFP^SkI|hg12_bY8YcA z&BHm2Q_Wf3%r!>J8HVd+&Jpg3!M*FO$n1+b>cwk?qjH&}+!3B}C5fGU7`LK#@5TNV ztc+nV(yNu{&v`JPcH%I`vq((FSQo}>9P2qxwe%TJQhQ<*%_9DGnm+U3+ zId|!!wHi0dzo-3Kx$|zEbARtO`|iEie}o@rBVF_1$1``V{Fhq9mp)pnaijcu+MkuX z&)fIno-;gB+wY>2N3c1YRsBevQO@d}T8$gkxu^YEx${0;@}HHrI*abT*nfl%XS1ST zdVZ^SYBlc246dE?tlW7YE`9FTp1JV-E;@OH3uiOZb?(nNwPhd~rV*=fKvHv4uYkLBF0)7{r%t`U@L!_Uwn7jIS_lncM>(R%2?PnOyV~+G$ z-jSS@{)JodP%iDGe%QP8T;|QVuGhryo_wT_R#l6!M>#n!d8nRzqvgDc*DTL?im7Va zZ`r*U`yFqY*tV}o=C1UTGhjY-VpaV!*1E90j^sGEldhN2oN2c$F*yhFRvdlAN_~W# zwK6aL+6!wIcZ5@gnKiT*cCI7!h*8y%O`LN1U34<@vPSx6d*)W0n7cYhVRDwI=)8lg{Ey^_3-hE` zYh@-C&b4MlKGl5E&$GD}C(VsBFt1D0Bd+vrb??Rg#Hr>c{`@k>d*&*BwAhPhG>Yx) zs*`x;F`CnnoQenQj%t~U8nlU34;Y zbFQPkIOIKGZ2DM-y(mYq-N$_CiNV^|FOicN+>?X!YMG1stYRu0+MIjpjH+7XBi&2b zBcEd~!6`AaCOKtn*T4L^h#|dO-FvY=ajHIMHgaVg?OB7pFlVL{ughnwYahvR?nn|- zdbQY7#Y;IA4sFDk=_7pd%6#SMtL)56o*6&dlT+6dV=qxJF;u@>eixlgoKgQXyD=D( zGjNQge2iVujaTJr9F&cAl8h0i)+%S_R@m=g_`&!UotWovTFnL3&#O7?LpfY4XT*5Fi%v2}Iyp$MR`%nw z&Rp%~Q@lUpG1mF^Ny^3;`-D^3=}){PImVkwa?F~}BUkH+6(_CaX1jcjm#pw*V~ldT z#rReI5}dNn>La!+h#1^&L-MqnS9S z>haEnuI@)*d#s19Yys91)pPW2b<|@Xq?%Q$i zjxRqHC%Zo8Yi|t3Q$Lb-B!@Mnix;_8x^w7bKiMyR&b5^961;^+KGH|4i#vzYkzP)% zr}*q4_f_wH7oE)973@57?O$2%#pq_OL2Mjd1l|&+H;92gg-FvbBTK8q+{x|{N%}01Q`&{M| z@Vn^b9A$gYoxpxK=T7jp`Q3Z5|F*1lwLO8yo`By)Cm*|u&2CTNwiD>yi~YA{wX5w3 zJoW_qE;{+xU2JxH0=Jz&_g?J3EvsE^PvEg9;CIoDc~zLJHr3N7taGq4zpL+>nWw#cxyY^ZGhTkjcd^X7 zwBEfJ`!8MhR6NehbDPPWX`bOMSFu`*Nj&+JlWe(W7^|GB+F2*}m&9fd(r0{*)Fu85 zTRk#X`n{IlMJMmYPjy$%B4_F|kWAkUQ$8)`80+2f z@1m3U;>S5@zOz~7o$whDW0YUTbmy7%su@)nnP;9={;4+BlRm;`zq7c+^FDF4w{M15 z^>Z|@!n&2MdoT9iici+zOr_7(=Uv7N**^KWk5LY} zRXi#@=Op$yJsDF{HJ@SmU3Bsuy;SFxJQU+E&rWtPo{e?I>rIcd^F5hV0&p{nx17VRA;A zRW&Eiu#$|Io@ZO-$fh_g`ib@KeET6AV{E6S-x#Yrs$62Hp17`;ao*43vo~XnI3*V2 zMtX;7o|NR}eEM&t`(1SMR(x0|&!U>s=uBj<;)O4}KH+B#<;kW+Y{lo2jWOxho_=Fw z9%DwjbE_J*WiPgmWb$B*5f*biC*jjR>LKl}N4sq+oV(Z&#wG0Cd$Io#wNAyzv#aLB znWtXGk2tWF??ZHBd_KdOp*0Osq_TQS9>TyPzmG(!MXKkr-;rZJx z=|$Tmbn?&Mgg@fMJaemL_S5B!;%S$jE4kaB_SK$NX6qUqH^*ID`dxJL+B_=!JcsHG ztGvp_dC$&?ca3qfC!bUN755cRRbJJfY{^gi*~9K|Fi-wo8h0h2h%t zC5~fmA-nft|1G#wH8@l0-O?;a_r+(z*$Y#9eVNDF_8G&zDzAze@pi0mjA>4;Im%7D z;u9ldxM!?%FWPNONxss#PVI^H+_N#{BmS%|Ib2)!yXfS#d5rKmr<`HtFxK-S5xrzZbt^rdUz}IjG F{vS=kZsGs{ literal 0 HcmV?d00001 diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.png b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.png new file mode 100644 index 0000000000000000000000000000000000000000..9f21dc00a6fdb2c95ea1dcad1b96b6850a0b66cf GIT binary patch literal 3628 zcmZ8kc{CK>+aJat`w|&3L;6N9Lrf$wgM_~JZ+-0{VlWulvae;GM#_@RAd2=Ynu0RRBO>!wEk z95eYC(Y)Npqr7b9hhySG8CVzq0JWL?2e(1T_K84KhhP9esOt|na+HNmA3Kw;8yVaT zcUdC{=1%^X(1R-&$y`5AFNNz`8cz8iA2dIqhgJT_b?k`WaQ%Krrlj$o6>-~`3kpRX zGS`0}MvEJUY>aN!h?D?9I1!*y;C(6m1cfdDy)z;1Xy3C@%Y3l2@){qFV#J5Y2e}E{?7ajLXB%{ zOSFi*_R-P)`uq*@6g!>D+}m0pL6HcABqGsC7x(LgG+@e32tQKHQ8R4^ZyZj40uuB( zJt=4WVk=$QYSs0Ga-}9)qK&Xj%^pi?c-G7{K1;G4cW;zT4A6D^o4d(kr0lz}TY`C{b zIJG=_m8joGD^qw$XEc99SiB#9*Aivu^7PNUr%}W&Y)aSrZ6YlFC0vQH6BU+_E#w?@ z)VAkx=1`!Te>A=?ad(rEztxYUN7wCyfh&gwC1+gG;mG$m71_YT+A<6LrzKHmD+>&! zL@I)97jQwGN*7NAE>7$~JRjMj0t?fkXr1bP`Pp*L)et+LU%-(KqqT%e%HV+AyhZ{% z*nz0uPNN&g%h```dI=i?EAwCpzxJnlXXV@pr4u2Zs!g*-NlD<|7g|8a;tStW+F0iA z1@r5_b~q_YS1Y_3DE}UvK0zxhvml+BXeC^`yI|m(-5&m}8)coSV2-lq8FlObG>tjfk>a&N0~E^NN!6i>6dJ@qELo zKWq8-Do<-9L-z{Bj8OB*nnq*tNdEo+N;K(X$85~;Z_q*u>|QSAoL2D>m_}~8<}FkgT>fvB0f zqY$Q`1zGICDGECW=cB`+zDxy7@(g@@b}020CdTyYQLZ|>zY`-MxpA_A=ZhOb>^UP}fJQJmV8mWnJ-q!x_yuV3A=c?^6#S6iI-b1d*;k4VdDlu| z)N^qVVyJrV!CEGI(>=S_Jf!rhbRs8l%SoEaEj?fK6?e&=)CoV(m00sJvFH{RS7RfG zh`b6{?AS1E^Ba_+PujkIlZ-{AGv?514`2aqURA$Y5Yjl))1yn^w_WnJHG}jz=-E!H zXEwL)VgLtochme4MBQDy-SbYEbJ&QY&1F1yJ}7Ugj~U9=>fe6tDd08S<7wZhSt13V zcq5<6j?)Rmc!xl5k+kIfsrY(}oB((g*`r+i&4wLS2|w$LIoAtX3k&OHxK=4}DK zy~gm_#p3#ODsoW_w|LP4TQ45`PVkFNVQ5AbOq+Uvi1dl1?Y6LS zVwXN*W%NbJ5BKjV6aqU|Z>>Dqn>MKHU9^NH=B)XKH}SG~I$|@~!ycDP5v5)OOsQir zdv$X>mH+!{o>l0D((S}|PG0gaM_-Z-Tv)$K1zdAoLvb>sDy9XvROy-SaV8?&nv|X? z6x-?i>{Lk^XwdkI^B-9?_H&H)zj=;UUn#`;vMRMzz%(a~Vu&esj6&5*5&5#z?J?#E zNxg)F>e1tJ5#>d-2tM@_|L-BLy%K(ke5bdR#$Vhf>K^Zt&{_BQxm}HA2QQh8 z37HSGv}U>JIjr0>S$*EWg}z~Jo0Wr5Ger-Fh`tBC$s+eWNNsy;=7yRoZFK6Cc^RpR22ysd#;Lb)n{DZd=jcX zvz)m(a)H_$Q`63B>;1W%6@*3@&(q;6p5e_dt+pGO7(-*FYkH~Wm0H4kN3fgZqyVm! zr_E}Y9z*oFLyaO;&}*;0ulU1po6W{|ioQ4&Nx=|?W8A}=0;)~r1W_C8DseWj{_5^+ zeV@-MMLz;K<|7_?xz{gqe6`l?MCtRuJ-8;Eqj))~Bl!&P8Pc~2)pd_yN!tEfuD+lg zntmb4A zU5kU&zbRwPB5w&+3X zFTe9_Y6df7xR8Y~swVJ*NH#}1tL5jZ(eB6=G6Wi_y?XZ|*McC&T!eLiZb9hf}QQ+(A4HQ9H#{!vv@NgyDM*LFqIz6T-}7!fs%&f9~S=t3K& z?zg@c<(k*tXmQtfYa+VuZpP#{ut`DTG;F|MIOo@nJn<-!9tos}Uy5RRhYJoPBcIf* zPrl5RK=Y>*-Yo$_2lb=?W&^9f^~+w7(~2yfr&eFH5(LTHvYs8Edb?X&u!U~ei9`*j zPwHC)>PLP`DN*!qo2h?v?$sXcDg|4NNoIr34JXMBJbk|KAch{Inn@?J!-mJGJJMPH z7E+d%kP6U7*N?*os}x!J^sFJWcG+EFDzU+#CS*HEVo0ZRd$GMoGx`eahiXgBLy6RA zzp3-#(J?02p63ZkI70<9kvMM|9kGbX{K}c2A$>LJi>`JR5JZ7h?4y2?0(V+t;`-YM zP@Bdo573wiaP%j%*EfMmkD1^<{L6~MRg@8UgT&o4-6kBXRGWffn-$K!W*7i*eBL13 zdkJlR4`$MCal3EuNj{mo%I|o1wW%_VF*j+cP9DNy#?TOKNea-gvN#23#kannIa&Qt zgAcD5zjJ7Uad43Uk)PDExRakIk+rP=n1T9#3#>vu+0b}v6Cpyp$8sj~jj?HyZC2HC zxwcg4{3;Usw53Pn${kr(t#S@$R76SA&WxnCXzQ-?UJP%a9UF$F`0^)ItN(+_{xu|r z|J1?E$TU(fktk1$Yc8F1qoY?S8Of!sFmP2JcLV~ovln>A6`7R=k08B(jn{d{K zBx61<&R-pSdg~ohn(P)2LFB zIiyXXA3&fk50#ATXD=p>%XXx&a@WRkVc)z7kV@4o=wJ4^%9ISw^2Dk7_qW&Z@ux{) zTLDv>*x~aylY|@X0gl{t7rE+oA$XheMU#Xl@eW1p7EZ*bR^b(Uuootj{OShwd7BU5 z5<0{2&g9xtA*TW;a!!*iExfdVR32<;;oLxB&s`lR(j$y^B-lrr)}DpDy> z?7$+aK-On>ROlBt_6lf9vI!PSP6P(8%QeIK@LXSiApnk;vv?Cd< zpk2Jxk42}-PQo>uUdXF?m=WOmvfQp2CfiZ?Cv78rZGycEa(7|JR+7F5%})%JG@lk# zDuLn&*K`0ny`31bz-QXxGoBYWs`24v+c>773_--AviGkHqVMr}sCp*yeE-B zyx~86qyNW`UcG(ZT;HG9uU@_TpYE@J_3PjL@#}y5=jXru+fRS;(?9?Fqt8D3?8jex z@x{;HJm3H3n{R&b%OC#hlb`?o>tEPg^n1L#;s5@Jk6-uGJ?I(e8R!}48R!}48R!}4 z8R!}48R!}48R!}48So6e?$aIU4*ahJ-isOipF=aHaI_^(pckT)w3!V33MjxvyFH>#r&CB%tNY>fDSbrq;hw77`5Bj-Ek3S4y0DwbmO>ECbm%mBaddImXXmYI6)lw-@z_N4Ybnv=15 zZ}z<9HQU+ejP+~LK5VO;{j4@;+_Nt`&arsUvUKSuy?u}7WIpGrWXjLOd=&=E=<|rY z_hLpLu{T+BHB&1#xfh<}^yOT8K9A;PEa$6aiD8saF&rm-9`Qcg7waFfH(4`hN;6o^ z5pBflP$s|8;arb=S93C!eJWXEAy#8Zo4)t&H+yG*vu9rOrAPB=nW$tsqLjZC7GG#% zUzt&EUV1&FoVF8{O~$e8tpZ;Z)4t;S)E)5W$&A+Ck0;f`p9;}Q7TzF7YV zy;!YL^H$BAWSl$NP@Xd@JI=oJIkU21JY$uNv28PxS+6|y$ykZOIh*$11@_K>=gm~J zrN?(t#?G0fUBz=|Q@@gvKHdw;R(Sidj^^KWz@H~G+WmUhfzgiS99A>8>Z@3?^;z{} zPU5jVWs*}yp81WV=~D-0`(pi*M{}At&6S>bnEq?SS`UM!)OTx3hOZKYRH(JJx%| zH`^EM@3FQ=#@xTJ-1hBzFJ|<%C_4JJJHWlkzcE}p*CWQ8?Tht~*qeKn#rj+1?wI%80nX=H_C_7e-MIxe@5PKBdBg1Mh@brqr<(aWoc4?>U3IdL z@~Le1*vVf{=C9rnZ7RJmGnV+h=T_Laa8z}%j!~Z#v+{K=)xtR9^|*KTm27mRTd^DY z&*Zaxv3?e((i`_G%|2AKz*wnIe_^6MdA|eWrjC5t@qN&aeBz)k<2gU$roU}Ql<~=D zF6N*e`8~PmH{%lv?WtSAXx}ZYifKF1Yaj2$j2_8L+^al$v8RWMPha89-Vp=e)ivxG zJF!s5yzD7!%{pk8{H?KPKHgc^3P197PpVqjm&~!%r#-gBwaU--#roBFv`g&jOFn6% zyHD!mt0S5^-LsF`^S92$msPvWX*?rL*3-|jgh32hN80jEKjj%6Vh~Rp;J``_Sf6-g_~lNAei2=_p3_%YC$;sAY_ie%VLrQ#Xn; zvdec-;ZaOtb}Y(9eydoCTl|XOCD=0`?<;lDM!XN@?#W6mdu^&b#&8Lp?ThtCau73n zma#_fmHzH+`qD-{{sk)vsFuFM~tI7=qG;ltoYGpFZL}QD|O|&b-cVeTlb6pmSry5WFOhH)G^MA9c{L1sqBbxR0sXU zubve@+U&)?g=3|zz3-MW%?rPtj3rr~w2|I%M5VvRneB`9M{*Ib_|Z}Qv~_KjEMw3n z`^dPdW1JN`+U%)Cd5F=qF~4}m7r%N|{AjZm`xcIsx>RpvSILx1_KBCa~ zDxZw8a`#@$=t``#VGZI{M?S1cHmr;O@~aMQ=qp>@txp|et=K8QV~LIqW7&>=qdMrf zg*Ef8_+5fM^YOk?SLSy8tG=>VjjYqYlJR6N>qc_xkI>n^Sbrq8>szJS2l~0+iGw!j z&t9jFaaQcI_j~XVqxi~~Hd|PUTl}rDXFlGExvDAg$=+wh*S4fv^=|2o=3{R1-isNf z&ni!>TfFM6`c9upFC4T{9GI~BE9Y@vwX{MOQ(3$8^=*P+ZXGP#3#-fuO8>2Pt`}+)5bAmo9|3^lKGME zs-0|gWY2tCyz=;L*;P8_nVsjtzJ;U0z9nN_v>VA~!Ocp@mawrU;4;*6wh%*89VXNZiS!ii}fq9(uTE&uTH*y_JjVEGY)Os zi;PJd^NO)*$9(ovE8#ZqK2={2ZI| zQC!+&UdO30R`F!dc%vH9F7uB3D!KP!Ml0W$jJ1fb&NXYv`0Ts*(OI<{`M;$6Ua@mF zE}7q#>iukAtUrQ}y%Dee@ZmeRt@PJAj4yt4R_#XqFDbuQ?0(;#iiD9=mE?-e`e;hNtopX*)B_Qm=mc-Wg2{@VRpovBs3BR#ma&%I*j zJY4&|-@50D@4cAOBUsp*5wG`tk9|ARkM?=$0O#Qz-~Vi1tbeMwx$eN_9q7HeyoVj( z@jB3Z^LX#PEA9^X=dc;=PIU*m15X{8?ThtK9?f+Jx&z*e8SPGW2f71K9hmKl^-mtn zbqBfw-isN{PVw&{;`bc-uKw*_cKWv-J@nUoD~A2(BYw;8h|fy>id*53FXf|pSiAT< z#!b6ftr^32;t@YORW8~d#bm$4p?uPfj{PcJTYiown<}UErn7yq-u9*$+wv7k-<4Xj z2lOY;SXKSBHLut{M||u%qt2Jqm?^g`W3ms#Ej#KMEBR6E%$0tr*Ilu;?2cfnVrCBA z6+6$7e2h`$kxZEKcrRu&{W3@Dx9;?7e$;?rJt z^*!Z|G15uy*y4GP_|QLj=2Fh;7)w>7?HPxd>09~FdgS<|8IwBkin(Qzx_mz~OncwK zHS#e=)|+?l#f+vObBNz_=$rjyoP0N1w)9)!IfJYCkN5}+{lr&ir6*OKTlI)|s{W*& z@8(vR)Hn9PxUP|pamCNhY+tO;I91<-pHKSuPG8xN4r_6bMz%A#@?<>Y81?ChPlbbd zN4bnebkvh74rQ12h}elI<7UpRDfNuImtT1Y*T}~hSx<%8doiQwn|&SKg(2sFwy9$t z)*>I-&K~-U<>Y{u(|RgLh&OUmas{os~@$hcf%_?NODBc*OfC_DE-&YhcP4nUk2( zc2>Xic^E_d?9BGX`ixW6u_Yr`+EJc4SPOl&c*dLg)7H6<_}F(u8B=_9SW|^dK2;pb z7-Nec#V4-xmye!GPQS#N_M6@5XDvtb$uH|rPRabZ zCQ|RkjM7JZ){}bQX(t>yl#Ot|HGKa?e)Oq$$EIJ^%gXmsANrGD$!~k&8ui3BRjo&R z)!C)n)iD(9o6<6J-#%@$~$5X@5PMLN4$HrO7FR+S^M7m$~$2n z&+z?)cvkr{;NJUgY`^l3Y%4n37whRGezljfd*q!_uU6g(`+0`>Bc2uh44BpHqi5wE zF}C+&M(HDdrI*5T@BPfWZ*^xs&(JgC8S#(&erNk){jKJuk*MGJz);}+*&ek0`cL%%|GkWeS8eMnbc{?!M7wexFRcGrCoVx?w ziy1w46^*Vt@Vp(E?Thu#i>kAA2hQCA@5PLsyNYAz_%|%^v-9n@-@g9ptFQj=->xLn zGdl9iT(qZ-@=?5$(_j23hUByz*(rWyN7?9a<)eQ;l)e2&zFF6q@3Vce{>(KT#pd^D zx)mp9&OS-CBRtj4&?og%0{z4+8g?A1MkJv0*rJhm7*y3~VoTu`!jx_h&ezY+r%6e};Uixp;+|Lh*at_2-rq|d4rj5_Nk7^}&uE3El8xdJgZy+)EV_^K(bhJU?cJNv=TKGCJ;-LCGuGcjEqgI? z4#Za{=h8Do+nh<-FbC!KUx{zqiZVX=%$0d;n|97&y{K&{+q*Z8`=LFJ%8!%{Gub9 z^wB+Y=H2yFIA%F3J!PZWAN?NFdsDr^`;+C2c_y-wv`fA3_BWNhnpfMC+DBCRRuBEe z>rm!cRSmSWFY{9GIF$9?Jm$}7oB{Iw9_<;*nez-;FFM+fk(|EbnZJsk_P*0kybfiK zMValgF2^*b&nQl{JM`0Mk57NzxD)qFb7uIiJy)zQ_43zF_({FwI=9@LQS7WuIEc?X zkaor_d!5RMGV|IE?+5uo6cq^_4XT4XCBSA^`?yD zxwdXZ6O-q@%E|a!cFaW|W1?(@_dY4EcEvuuH|+F%@HuaznaFC=&ohvee$@<9Z=NxX z$GQ=vk9eNc@xEm@(is!uXeaXXh5Fo$-WzuJ{&>Dy@jkg1{=RIzsAOrU7?OFm(w_M$ z8`-beFmC#=j!MV)jFYucM<3&+jGraBKh!y9?~OZge>CUB^Po!dvms~kOw}e<)*+l( zr{{fUSADOzR^7cf*Xrc+$MO7_CW4%|Th3AD-gBSf%)N5GSx?&KUhTm&v+cc^b?BV> zoV993a*i}_XFT2m(+ZqN^pV)@})$c2|Tcy1>tDQQJUCu`JS!1;MnX_eUpXa2j_*QF9JAXgn-e~48J&ZTn z;Y)Kor~mBVZLEJzOr7iHJHXF}Ykc0kd_~tq;Juj9>t^j}-GTe=z-(Wvzwas=eRtrx z9q?Yv=ykJpwC=!tcVMPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T*(K~#8N?VJsA z+&T_~leY(RuCjX(Cl}ePY;v$yS+zaLYqvp)q$p`d(_aA-6WB&D@pSP=j@QP#101g~u25{gQ zGk^ofm;oF(=F7Kl-@bhP`t?n|fB$|;_%jF~_*~-GuV2l&XVB_jYn@dO z`Gfcie*XOY1gRG;19C+!7dWr4ueYmrFoW{IU@+4%`uS{LUS4ij@03;pO>bQ_G=DIo z4LIMdj4N=-t(p#;Y!=Oe>8hO^lmZHqO-O6dJv)~SoNU!mG?->=QT9N6*MKjrrfYhf zFRnvO8<%}Jpo4(-{TM`g|6W%c-8!`f{F>gqZA%}G%LYzu)oB@g2rfNLLy(pozM-#r z87(@D2DAozX_Y9Y2b^!_6Q^-rxGvp$CN3K|Ksz-Cg{JG^gdS$(Y)~K#fa4*YZS`ziI&iX8M>}3u8{BUlWJd*$`V;4s+PMX^>aBq`(RO2ye{Y_T&ZPqfXou?O zmaPziD@4&jxd)|lj{2h$MM-aTg+N=OjNiY17s~?AumW8^aI}LN9Z))}B4}Wb0TZG& z`gspZ!OcOg0S~e?p!v0cc0gUTvTIy5h%O&EU~~XwL01~Y_d@2+Rv*z0Sso(+com)^ zaIyf{vQnH8ELx_njxn?A44WsGe;mQn2F@1Fn6+zx z-s8^^69)Xj0|dw!ZFK|=oC?_^*wUljmH}CNq&t(+V7=-fJ_831k!^=C*byuts#Dtf zz&31<$Bb{;OZKfk9R?~L{CuGg531sz)8?A`xvA_aPZA$`Ybp~`g@|jXLZ>N ze*B+(6>tUo4+)J~!T*rZm`ONrj2XazW6S^!9AgG>;G95wIXL4>QF9Is9AgG(3LKsx zOEU8ta&s(Mf2z2DKQe8_iFdM&dadJLLH&8KU4@zN+?~ygKAOH&Ljym1@LU}P(6g^T zLxF?WC|LAW5(JNz^~Xi~7ou!^@9xoQdgTU78iV()6s$7*CT!`wt*gWBP-+8iPYlYl zCz+Q11+9AbPD>v#yS{Q$+Mc1YLt=p7FZ7X?*~R_P3Bl*JK{jGHVxvG8c076Dn)6&k zeW;a>do%o=$rhhR?0U;X8t!lDqd#E9QBfAP4^o14mPr1Tw#=??>6`{(vimBLH-o%0 zT@_};rbJ6#0jHJPBqXcrXd9JK+Y+p!`H%WE+6N=$_4E;w#mJ$7Q<5O781l&)3A&8l zFA3Xa_cPJ5GN6|@EE%VphY3-vA10jFpAbNP@KSiecA)*3Njoye=zmKm{Wp`}x}Tu9a?d_VHp z(nd8{zePCDEk3o{GF!?EW(3aA!vQ`_LGWB($qr{r1*(TVM#~6k0eW#j>?yC;W(K7; zSvvG~RfgMzWiQ~D%rRo3lCU z@jm)5>%;76)zSTSR2!@@^gT`qG=erR+ty|)*zse+mf+L8G>?pB<-J|KGh$PN^Fw=N z9o^CI+*8U}mlT_U^aY<(2w~$-c)KI^!(Pev%SuS7NEa2i+~89L+BT z=@}z78JtJSj`J?HNtO?%L1w{uYQ9>g)@i0sEqySfJkBHXt&zpZ&{ho*tg;o%0?d{? zVT)O0sq>pGjdQ#6z7@zAu{oNVZPbd+#%K#J_vn5*qYW~4Ipd6=4S+3zrr|RhuGCny zdjWR_7_n((cEG8hBW*OovJ%{`-r?=r44-=XU`Bb&a35vMkg}+KkRI5sv@Hp6pY?09 zG~~^y&n|ozv1y@}Z{(AuDX3rQjMkOyYN%ZX`vYOWM}6wCn^9g+v*&VxEJp5T#Q~Th zmWtj!)xnI?3-WH6g_vHO-u!#nyNya{Ub^ZW*>79Ro6<*FG%1VP2kC+BvS`kL-qJ9i zW;uMWvlvt~D9(*kU>JOQVb%3zszRN54stw6ZV>KCOvu#%E`bq8?R zx&Up%C0K4(<%dk1_a1fJZN(|c(lF^P!8)Z`gmsV)gU_XVOsih#gs@MzF5TC32+E23 zYFqO`+1vLTYQuE`>|5LqI9~A=>eLFKbA^I%>}yr}vl^ zy|qpYSSRx0G)QL4_iMf?d;4C4^-FoOe~^IFO12rb`qu76I;5w(5?PEK_Ba}{RPc6p zziq-El(rpO9|d*JY}syaMtvVa`?F=c7C;w*JRsQK*ZktLSWnCB@u7#q9!EoPuF(!d z`n@sp{B<;sor&>9ujbV zdycic`5wnykJ@fR2Q`9VIZnK-7!cU5tr(iW=2iuYvMM2RZxBb!u6$ws7bfCp+*VT|oy#ddaRvt8Ph8ePVw=_{1C;*x*dxktb{- zU;NcPdV(>l3-WB~$CB?{=UvDiwT-Z3)h$co-mE`A%3Kq+1OpWXn4zb_zHmC{ z$8cS>9yRv%y+&qR6Nb~n&&)?|7nPcyJ-Q=gF>=}&XQ|wWZQI(cw>0$aDyMaZ>CuCa zYiK?8no7?*t%0tw7etwek@c8~DKwCHC;m z|H;!_3Jn@?R6sj$%tL{*FjhZ^1`Sr5qj2DuhobZV0cV>dw~r1S^U%bDgwY2bqxj)~ zF)R4tz(wJG|B>63XU2hZ0eIhk^p@pWao}8xwKp)#9DK&P0K7f(R&74n8OMQR%nE)u zV9X>OI4fZ5gL4Bvxq?JmZEF;^Y8N(~#`KoSI+{190bG~vnGW85TOeZId8zz9gyoff z3lp^3LZBOrl$oV#8idnWxP0@OEJnQIRM6KumI0Q&ww}FcIQrX?(K2g5x2BIWz4G+o zz^SlIHgB(UKyZ!kNFb5U@W9JnK7>u!Wq}Zkme~TzjeIpPfB(}-whWmzmVx+byR!_) z58EJo&S0IeZ6Pa@^NR8~jnf&v-{Zrxk;RBtoJKIaL-^3%vK`y91sW|=!RnIvu>{NQ z%JkyEsStw}12)bH7`U~;yLHPmQl>c`2Tp|;vOcG>R! zIjm!4n7!3Gqf9e~1E&ED*6fUsp@YBGPU$IgHYoS3vL6KpP6OHb0t2g*&S2}sX}HGu zWsROPXM(_wvz1N)<{un51$5A0uph{%=vi5xicIzkBb9m2XKJb1Af2< zeFx3s;;ou7D|oAB%p@E*#th)VF=hYpayload[MAILBOX_MOVES_COUNT_IDX] = (moves_count >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+1] = (moves_count >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+2] = (moves_count >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+3] = (moves_count >> (8 * 3)) & 0xFF; } // ***************************************************************************** From 71591b5290ab001d30b39c5d5b35e05e4d28beb2 Mon Sep 17 00:00:00 2001 From: Woo Date: Sun, 15 Sep 2024 19:50:38 -0500 Subject: [PATCH 09/27] update comments of a[[ libraries --- .../MAX32655/Demo_2048/ARM/inc/graphics.h | 53 +++++++++++++++++++ .../MAX32655/Demo_2048/ARM/src/graphics.c | 21 ++++---- .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 38 ++++++++++++- .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 14 ----- 4 files changed, 99 insertions(+), 27 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index f65e1921111..1a23d656acc 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -142,22 +142,75 @@ typedef enum { /* **** Function Prototypes **** */ +/** + * @brief Initializes the Graphics of the 2048 Game Demo. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ int Graphics_Init(void); +/** + * @brief Draw the new block (2 or 4) spawn animation on the grid. This + * function runs when the existing grid has finished updating and + * a new block needs to be drawn. + * + * @param row Row number (indexed 0). + * @param col Column number (indexed 0). + * @param block_2_4 Pass in 2 for Block 2 spawn, 4 for Block 4 spawn. + */ void Graphics_AddNewBlock(int row, int col, int block_2_4); +/** + * @brief Draws a block on the grid (no animation). This function is + * is mainly used for re-drawing existing blocks when they're moved. + * + * @param row Row number (indexed 0). + * @param col Column number (indexed 0). + * @param value Value of block to draw on grid. + */ void Graphics_AddBlock(int row, int col, int value); +/** + * @brief Draws the new combined block (including blow-up animation). This + * function is used when a same-value pair is combined. + * + * @param row Row number (indexed 0). + * @param col Column number (indexed 0). + * @param new_value Value of combined block to draw on grid. + */ void Graphics_CombineBlocks(int row, int col, int new_value); void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_direction_t direction); +/** + * @brief Erases the the block from the grid. This function is mainly used + * when blocks are moving which need to be erased, then redrawned. + * + * @param row Row number (indexed 0). + * @param col Column number (indexed 0). + */ void Graphics_EraseSingleBlock(int row, int col); +/** + * @brief Update the timer on the display. + * + * @param total_seconds The current total second value of RTC. + */ void Graphics_SetTime(uint32_t total_seconds); +/** + * @brief Update the moves counter on the display. + * + * @param moves_count The number of moves that have been executed. + */ void Graphics_UpdateMovesCount(uint32_t moves_count); +/** + * @brief Draws the "game over" box popup when game is finished. + */ void Graphics_DisplayGameOver(void); +/** + * @brief Draws the "you win" box popup when game is finished. + */ void Graphics_DisplayYouWin(void); diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index 312997d6a7f..9d8d3d447ee 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -24,14 +24,13 @@ #include "mxc_delay.h" #include "tft_ssd2119.h" +// Application Libraries. #include "graphics.h" #include "clear_sans_bold_scaled_block_digits.h" #include "clear_sans_bold_game_text.h" #include "cfs_logo.h" #include "end_game_text.h" -#include "led.h" - /* **** Definitions **** */ @@ -57,7 +56,7 @@ int Graphics_Init(void) } // Clear display. - MXC_TFT_DrawFastRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, F_BACKGROUND_COLOR); // Draw CFS Logo. MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, cfs_logo); @@ -466,27 +465,27 @@ void Graphics_SetTime(uint32_t total_seconds) } // Update timer on display. - MXC_TFT_DrawFastRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. if (prev_timer_digit1 != digit1) { - MXC_TFT_DrawFastRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); prev_timer_digit1 = digit1; } // Changes every 60 seconds. if (prev_timer_digit2 != digit2) { - MXC_TFT_DrawFastRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); prev_timer_digit2 = digit2; } // Changes every 600 seoncds. if (prev_timer_digit3 != digit3) { - MXC_TFT_DrawFastRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); prev_timer_digit3 = digit3; } @@ -511,27 +510,27 @@ void Graphics_UpdateMovesCount(uint32_t moves_count) } // Update timer on display. - MXC_TFT_DrawFastRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. if (prev_moves_digit1 != digit1) { - MXC_TFT_DrawFastRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); prev_moves_digit1 = digit1; } // Changes every 60 seconds. if (prev_moves_digit2 != digit2) { - MXC_TFT_DrawFastRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); prev_moves_digit2 = digit2; } // Changes every 600 seoncds. if (prev_moves_digit3 != digit3) { - MXC_TFT_DrawFastRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); prev_moves_digit3 = digit3; } diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h index eea71c96af1..5c30c22ac23 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -58,16 +58,50 @@ typedef enum { /* **** Function Prototypes **** */ +/** + * @brief Initializes the game logic for 2048. + * + * @param new_block_location_idx Pointer which holds 1-D index location of where + * the starting blcok would spawn. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ int Game_2048_Init(uint8_t *new_block_location_idx); +/** + * @brief Get the state of the game (in progress, game over, or win). + * + * @return State of game.. + */ game_state_t Game_2048_CheckState(void); +/** + * @brief Update the grid. + * + * @param direction The direction that all the blocks slide to. + * @param new_block_1D_idx Pointer which holds 1-D index location of where + * the new blcok would spawn. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx); +/** + * @brief Prints the grid to the terminal. + */ void Game_2048_PrintGrid(void); +/** + * @brief Gets the current grid. + * + * @param grid Pointer to 2-D array to hold the current grid. + */ void Game_2048_GetGrid(uint32_t grid[4][4]); +/** + * @brief Gets the current grid state which tells you what blocks + * were deleted, unmoved, or combined. + * + * @param grid Pointer to 2-D array to hold the current grid state. + */ void Game_2048_GetGridState(uint8_t grid_state[4][4]); - -void Game_2048_GetGridMailBox(uint8_t *grid_1D_size_64B); diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index 82df71bfd4f..be8a1ef35fe 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -736,17 +736,3 @@ void Game_2048_GetGridState(uint8_t grid_state[4][4]) } } } - -void Game_2048_GetGridMailBox(uint8_t *grid_1D_size_64B) -{ - int i = 0; - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - grid_1D_size_64B[i++] = (MAIN_2048_GRID[row][col] >> 8 * 0) & 0xFF; - grid_1D_size_64B[i++] = (MAIN_2048_GRID[row][col] >> 8 * 1) & 0xFF; - grid_1D_size_64B[i++] = (MAIN_2048_GRID[row][col] >> 8 * 2) & 0xFF; - grid_1D_size_64B[i++] = (MAIN_2048_GRID[row][col] >> 8 * 3) & 0xFF; - } - } -} - From 6d8427d9e6d9cc8d862a12b987d2d1b37bd02a0f Mon Sep 17 00:00:00 2001 From: Woo Date: Mon, 16 Sep 2024 04:36:57 -0500 Subject: [PATCH 10/27] Completed animation optimizations --- .../Demo_2048/ARM/.vscode/settings.json | 3 +- .../inc/clear_sans_bold_scaled_block_digits.h | 13 + .../MAX32655/Demo_2048/ARM/inc/graphics.h | 52 +- Examples/MAX32655/Demo_2048/ARM/main.c | 41 +- .../MAX32655/Demo_2048/ARM/src/graphics.c | 470 +++++++++++++----- Examples/MAX32655/Demo_2048/RISCV/main.c | 8 +- 6 files changed, 425 insertions(+), 162 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json index 79fb6f2896f..26a0c10968d 100644 --- a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json @@ -85,7 +85,8 @@ "led.h": "c", "clear_sans_bold_game_text.h": "c", "cfs_logo.h": "c", - "clear_sans_bold_scaled_block_digits.h": "c" + "clear_sans_bold_scaled_block_digits.h": "c", + "type_traits": "c" } } diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h index 1fb4f32d0b2..feab1246061 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h @@ -343,3 +343,16 @@ __flash uint16_t block_2048[] = { : (block) == 1024 ? BLOCK_1024_DIGIT_PX_HEIGHT \ : (block) == 2048 ? BLOCK_2048_DIGIT_PX_HEIGHT \ : BLOCK_2_DIGIT_PX_HEIGHT) + +#define BLOCK_DIGIT_PTR(block) ((block) == 2 ? block_2 \ + : (block) == 4 ? block_4 \ + : (block) == 8 ? block_8 \ + : (block) == 16 ? block_16 \ + : (block) == 32 ? block_32 \ + : (block) == 64 ? block_64 \ + : (block) == 128 ? block_128 \ + : (block) == 256 ? block_256 \ + : (block) == 512 ? block_512 \ + : (block) == 1024 ? block_1024 \ + : (block) == 2048 ? block_2048 \ + : NULL) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index 1a23d656acc..e948a6aecd8 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -127,6 +127,30 @@ #define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) +/** + * These enums help keep track of what blocks were erased, + * combined, or didn't move to help optimize and select + * the animation of for the display. + * IMPORTANT: Sync these commands with the RISCV core. + */ +typedef enum { + EMPTY = 0, + ERASE = 1, + COMBINE = 2, + UNMOVED = 3 +} block_state_t; + +/** + * These enums help keep track of the game state. + * IMPORTANT: Sync these commands with the RISCV core. + */ +typedef enum { + IN_PROGRESS = 0, + GAME_OVER = 1, + WINNER = 2, +} game_state_t; + +/* **** Function Prototypes **** */ /** * This enum is used to keep track of which direction the blocks will slide to @@ -171,16 +195,36 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4); void Graphics_AddBlock(int row, int col, int value); /** - * @brief Draws the new combined block (including blow-up animation). This - * function is used when a same-value pair is combined. + * @brief Draws a new combined block (including blow-up/shrink-down animation). * * @param row Row number (indexed 0). * @param col Column number (indexed 0). * @param new_value Value of combined block to draw on grid. */ -void Graphics_CombineBlocks(int row, int col, int new_value); +void Graphics_CombineSingleBlock(int row, int col, int new_value); + +/** + * @brief Draws all blocks that were combined. This function not only draws the combined blocks, + * but also draws the blow-up/shrink-down animation. This function should be called + * after all the blocks that moved to their final locations (Graphics_AddBlock()) + * have been drawn to display. + * + * @param grid Pointer to main 2048 grid (2-D array) which holds the current positions + * of all valid blocks. + * @param grid_state Pointer to grid state (2-D array) which holds the state of the blocks that + * needs to combined. + */ +void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]); -void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_direction_t direction); +/** + * @brief Erases all moving blocks from the grid. This function is used before + * drawing the blocks that moved to their final location. + * + * @param grid_state Pointer to grid (2-D array) which holds the state of the blocks that + * needs to be erased because they're moving. + * @param direction Direction that the blocks are moving to. + */ +void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_direction_t direction); /** * @brief Erases the the block from the grid. This function is mainly used diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index f64ee421b61..9376457494d 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -82,29 +82,6 @@ typedef struct { #define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) #define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) -/** - * These enums help keep track of what blocks were erased, - * combined, or didn't move to help optimize and select - * the animation of for the display. - * IMPORTANT: Sync these commands with the RISCV core. - */ -typedef enum { - EMPTY = 0, - ERASE = 1, - COMBINE = 2, - UNMOVED = 3 -} block_state_t; - -/** - * These enums help keep track of the game state. - * IMPORTANT: Sync these commands with the RISCV core. - */ -typedef enum { - IN_PROGRESS = 0, - GAME_OVER = 1, - WINNER = 2, -} game_state_t; - /* **** Globals **** */ // Defined in sema_reva.c extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads @@ -335,14 +312,8 @@ int main(void) direction = ReceiveDirectionFromRISCVCore(); - // Erase blocks that are moving. - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - if (ARM_GRID_COPY_STATE[row][col] == 1) { - Graphics_EraseSingleBlock(row, col); - } - } - } + // Erase blocks that are moving before drawing theem at their final location. + Graphics_EraseBlocks(ARM_GRID_COPY_STATE, direction); // Pre-set these values as invalid locations. new_block_row = 0xFFFF, new_block_col = 0xFFFF; @@ -352,7 +323,6 @@ int main(void) // Increment moves counter if blocks moved. MOVES_COUNT = ReceiveMovesCountFromRISCVCore(); - PRINT("Moves: %d\n", MOVES_COUNT); if (prev_moves_count != MOVES_COUNT) { Graphics_UpdateMovesCount(MOVES_COUNT); prev_moves_count = MOVES_COUNT; @@ -361,9 +331,7 @@ int main(void) // Add new blocks. for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { - if (ARM_GRID_COPY_STATE[row][col] == COMBINE) { - Graphics_CombineBlocks(row, col, ARM_GRID_COPY[row][col]); - } else if (ARM_GRID_COPY[row][col] != 0 && ARM_GRID_COPY_STATE[row][col] != UNMOVED) { + if ((ARM_GRID_COPY[row][col]) != 0 && (ARM_GRID_COPY_STATE[row][col] != UNMOVED) && (ARM_GRID_COPY_STATE[row][col] != COMBINE)) { // Don't draw newly spawned block. // new_block_row and new_block_col will be set to 0xFFFF for invalid // location if new block was not added. @@ -373,6 +341,9 @@ int main(void) } } } + + // Add combined blocks. + Graphics_CombineBlocks(ARM_GRID_COPY, ARM_GRID_COPY_STATE); // Add new block with spawn animation. if (new_block_added == true) { diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index 9d8d3d447ee..426bbf5acdd 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -34,6 +34,16 @@ /* **** Definitions **** */ +// Focus on top left corner of the top left block in the grid to help with visualize calculating the coordinates. +#define BLOCK_X_POSITION(col) (GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (col))) +#define BLOCK_Y_POSITION(row) (GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (row))) +// Math is to center the digits printed to the newly created block. +#define DIGIT_CENTER_X_POSITION(x, value) (x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2)) +#define DIGIT_CENTER_Y_POSITION(y, value) (y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2)) + +// Test out delays so that it's not too slow and not too fast for human eye. +#define COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS (15) + /* **** Globals **** */ static int prev_timer_digit1 = 0; @@ -107,20 +117,21 @@ int Graphics_Init(void) void Graphics_AddNewBlock(int row, int col, int block_2_4) { // 6 is chosen based on animation/display refresh rate speed to the naked eye. - for (int i = 0; i < 6; i++) { + for (int frame_i = 0; frame_i < 6; frame_i++) { // Forgive the unreadability. // The math calculates where each block needs to be drawn as its animated to grow from small to big. // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - int x = ((BLOCK_LENGTH / 2) - (i * 5)) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = ((BLOCK_LENGTH / 2) - (i * 5)) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); - MXC_TFT_DrawRoundedRect(x, y, ((i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((i * 10) + 1), ((i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((i * 10) + 1), FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, ((i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); + // Increase the block size by 10 pixels + MXC_TFT_DrawRoundedRect(x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); // Don't delay when empty space is fully filled. - if (i < 5) { + if (frame_i < 5) { // Minimum speed visual for human eye while also being fast and not laggy. - MXC_Delay(MXC_DELAY_MSEC(15)); + MXC_Delay(MXC_DELAY_MSEC(20)); } } @@ -142,10 +153,8 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4) // Mainly used for sliding blocks to a new location. inline void Graphics_AddBlock(int row, int col, int value) { - // Forgive me for all the math who ever tries to read through the code. - // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); // Math is to center the digits printed to the newly created block. int dx = x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2); @@ -256,17 +265,13 @@ inline void Graphics_AddBlock(int row, int col, int value) } } -void Graphics_CombineBlocks(int row, int col, int new_value) +void Graphics_CombineSingleBlock(int row, int col, int new_value) { - // Forgive me for all the math who ever tries to read through the code. - // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); - MXC_Delay(MXC_DELAY_MSEC(2)); - // Animate the blow up. // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. for (int i = 0; i < BLOCK_SPACING + 1; i++) { @@ -297,40 +302,243 @@ void Graphics_CombineBlocks(int row, int col, int new_value) Graphics_AddBlock(row, col, new_value); } -void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_direction_t direction) +// TODO(SW): Definitely could be optimized and more readable. Not enough time and wrote this late at night. +// Helper function for "_CombineBlocks function which draws the outer borders of the block with width matching the 'radius' +// @param x X coordinate of the block. +// @param y Y coordinate of the block. +// @param frame_i Current frame of the animation. +// @param current_length Length of block at current frame. +// @param f_color Formatted color code of outer border. +// @param radius Radius ofrounded cornewrs and width of block. +static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) { - // Forgive me for all the math who ever tries to read through the code. - // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + // Draw top horizontal lines. + for (int p_y = 0; p_y < radius; p_y++) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = radius - p_y; + + while ((dx * dx) < ((radius * radius) - (dy * dy))) { + dx++; + } - switch (direction) { - case GRAPHICS_SLIDE_DIR_UP: - for (int r = 0; r < 4; r++) { - for (int c = 0; c < 4; c++) { - // Remove each column (x) of block left to right, pixel by pixel. - for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { - // Account for rounded corners. - if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. - - // With y and the radius, get the integral to calculate the y position. - int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - int dx = 0; - - while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { - dx++; - } + // No negative horizontal distance. + if (dx > 0) { + dx--; + } - // No negative vertical distance. - if (dx > 0) { - dx--; - } + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, current_length - (2 * (radius - dx)), f_color); + } + + // Draw bottom horizontal lines. + for (int p_y = (current_length - radius); p_y < current_length; p_y++) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = p_y - (current_length - radius - 1); + + while ((dx * dx) < ((radius * radius) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, current_length - (2 * (radius - dx)), f_color); + } + + // Draw left vertical lines. + for (int p_x = 0; p_x < radius; p_x++) { + // Find the starting x position using pythagorean theorem. + int dx = radius - p_x; + int dy = 0; + + while ((dy * dy) < ((radius * radius) - (dx * dx))) { + dy++; + } + + // No negative horizontal distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, current_length - (2 * (radius - dy)), f_color); + } + + // Draw right vertical lines. + for (int p_x = (current_length - radius); p_x < current_length; p_x++) { + // Find the starting x position using pythagorean theorem. + int dx = p_x - (current_length - radius - 1); + int dy = 0; + + while ((dy * dy) < ((radius * radius) - (dx * dx))) { + dy++; + } + + // No negative horizontal distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, current_length - (2 * (radius - dy)), f_color); + } +} + +// Helper function for "_CombineBlocks function which removes the corners of the blocks outside of 'radius' boundary. +// @param x X coordinate of the block. +// @param y Y coordinate of the block. +// @param frame_i Current frame of the animation. +// @param current_length Length of block at current frame. +// @param f_color Formatted color code of outer border. +// @param radius Radius ofrounded cornewrs and width of block. +static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) +{ + for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { + for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { + // Calculate distance from the corner. + int dx = (p_x < radius) ? radius - p_x : (p_x >= current_length - radius) ? p_x - (current_length - radius - 1) : 0; + int dy = (p_y < radius) ? radius - p_y : (p_y >= current_length - radius) ? p_y - (current_length - radius - 1) : 0; + + // Use pythagorean theorem to map coordinates, square not necessary when comparing with r. + if (((dx * dx) + (dy * dy)) > (radius * radius)) { + MXC_TFT_WritePixel(x + p_x, y + p_y, 1, 1, f_color); + } + + // Skip x points that aren't within corners. + if (p_x >= radius && p_x < (current_length - radius)) { + p_x = current_length - radius - 1; + } + } - MXC_TFT_DrawVerticalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); - + // Skip x points that aren't within corners. + if (p_y >= radius && p_y < (current_length - radius)) { + p_y = current_length - radius - 1; + } + } +} + +void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) +{ + // Animate the blow up. + // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. + for (int frame_i = 0; frame_i < BLOCK_SPACING + 1; frame_i++) { + int combine_count = 0; + + // Go through each block that is going to be combined and draw a single blow up frame. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == COMBINE) { + // Only draw out edges when expanding to save time. + combine_count++; + + uint32_t x = BLOCK_X_POSITION(col); + uint32_t y = BLOCK_Y_POSITION(row); + + if (frame_i == 0) { + // Draw entire block for first frame. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS, F_GRID_COLOR); + } else { + graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS); + } + } + } + } + + // If no blocks combined, don't waste computation time and exit. + if (combine_count == 0) { + return; + } + + MXC_Delay(MXC_DELAY_MSEC(COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS)); + } + + // Animate the shrink down. + for (int frame_i = BLOCK_SPACING - 1; frame_i >= 0; frame_i--) { + int combine_count = 0; + + // Go through each block that is going to be combined and shrink the block + // one pixel at a time. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == COMBINE) { + combine_count++; + + uint32_t x = BLOCK_X_POSITION(col); + uint32_t y = BLOCK_Y_POSITION(row); + + // Erase outer edges. + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine(x - (frame_i + 1), y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine(x + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + + // Erase corners. + graphics_helper_eraseCorners(x - frame_i, y - frame_i, frame_i, BLOCK_LENGTH + (2 * (frame_i)), F_GRID_COLOR, RADIUS_FOR_CORNERS); + + // Draw digit in last frame. + if ((frame_i) == 0) { + // graphics_helper_CombineBlocks(x, y, 0, BLOCK_LENGTH, FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS); + + // Blocks 2 and 4 are the only ones with inverted digit colors because of their block color. + // However, Block 2 will nevber be a combined block. + if (grid[row][col] == 4) { + MXC_TFT_DrawBitmapInvertedMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), DIGIT_CENTER_Y_POSITION(y, grid[row][col]), BLOCK_DIGIT_PX_WIDTH(grid[row][col]), BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, RGB_BLOCK_COLOR(grid[row][col])); } else { - MXC_TFT_DrawVerticalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + MXC_TFT_DrawBitmapMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), DIGIT_CENTER_Y_POSITION(y, grid[row][col]), BLOCK_DIGIT_PX_WIDTH(grid[row][col]), BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, RGB_BLOCK_COLOR(grid[row][col])); + } + } + } + } + } + + // Add delay so the shrink down is visual to human eye, + // except for the last frame. + if (frame_i != 0) { + MXC_Delay(MXC_DELAY_MSEC(COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS)); + } + } +} + +void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_direction_t direction) +{ + switch (direction) { + case GRAPHICS_SLIDE_DIR_UP: + // Start from bottom row to top row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { + // These two for-loops iterate through each block in the + // grid (bottom row to top row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 3; row >= 0; row--) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + + while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } } } } @@ -338,31 +546,40 @@ void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_directio break; case GRAPHICS_SLIDE_DIR_DOWN: - for (int r = 0; r < 4; r++) { - for (int c = 0; c < 4; c++) { - // Remove each column (x) of block left to right, pixel by pixel. - for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { - // Account for rounded corners. - if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. - - // With y and the radius, get the integral to calculate the y position. - int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - int dx = 0; - - while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { - dx++; + // Start from top row to bottom row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { + // These two for-loops iterate through each block in the + // grid (top row to bottom row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + + while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } - - // No negative vertical distance. - if (dx > 0) { - dx--; - } - - MXC_TFT_DrawVerticalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } @@ -370,31 +587,40 @@ void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_directio break; case GRAPHICS_SLIDE_DIR_LEFT: - for (int c = 0; c < 4; c++) { - for (int r = 0; r < 4; r++) { - // Remove each column (x) of block left to right, pixel by pixel. - for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { - // Account for rounded corners. - if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. - - // With x and the radius, get the integral to calculate the y position. - int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - int dy = 0; - - while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { - dy++; + // Start from right column to left column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 3; col >= 0; col--) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + int dy = 0; + + while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } - - // No negative vertical distance. - if (dy > 0) { - dy--; - } - - MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } @@ -402,33 +628,45 @@ void Graphics_EraseSingleBlockAnimated(int row, int col, graphics_slide_directio break; case GRAPHICS_SLIDE_DIR_RIGHT: - for (int c = 0; c < 4; c++) { - for (int r = 0; r < 4; r++) { - // Remove each column (x) of block left to right, pixel by pixel. - for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { - // Account for rounded corners. - if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem and knowing the max y distance is the radius of the rounded corner. - int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - int dy = 0; - - while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { - dy++; - } - - // No negative vertical distance. - if (dy > 0) { - dy--; + // Start from left column to right column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 0; col < 4; col++) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + int dy = 0; + + while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } - - MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } } + break; default: diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 1e244dcde60..d7160fab9dc 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -244,7 +244,6 @@ void SendGridToARMCore(void) SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; - // PRINT("RISCV: r:%d c:%d i:%d := %d - %02x %02x %02x %02x\n", row, col, i, RISCV_GRID_COPY[row][col], SEMA_ARM_MAILBOX->payload[i], SEMA_ARM_MAILBOX->payload[i+1], SEMA_ARM_MAILBOX->payload[i+2], SEMA_ARM_MAILBOX->payload[i+3]); i+=4; } } @@ -397,14 +396,13 @@ int main(void) // Check state of game. game_state_t game_state = Game_2048_CheckState(); - // This function must be called before PRINT_GRID() and SendGridToARMCore() + // These functions must be called before PRINT_GRID() and SendGridToARMCore() // functions to grab the latest grid state. Game_2048_GetGrid(RISCV_GRID_COPY); + Game_2048_GetGridState(RISCV_GRID_COPY_STATE); PRINT_GRID(); - PRINT_GRID_STATE(); - SendGridToARMCore(); SendKeypressToARMCore(); @@ -433,8 +431,6 @@ int main(void) while(1); } - PRINT("GAME STATE: %d\n", game_state); - // Listen for next keypress. MXC_UART_ClearRXFIFO(MXC_UART0); From b9313e2a217730a6237b7267ff7bb124f0e1a659 Mon Sep 17 00:00:00 2001 From: Woo Date: Mon, 16 Sep 2024 10:36:21 -0500 Subject: [PATCH 11/27] Add newly added TFT functions --- Examples/MAX32655/Demo_2048/ARM/project.mk | 6 +- Examples/MAX32655/Demo_2048/RISCV/project.mk | 10 +- Libraries/MiscDrivers/Display/tft_ssd2119.c | 385 +++++++++++++++++++ Libraries/MiscDrivers/Display/tft_ssd2119.h | 132 +++++++ 4 files changed, 519 insertions(+), 14 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/project.mk b/Examples/MAX32655/Demo_2048/ARM/project.mk index 1082bb73c36..4ae9229f410 100644 --- a/Examples/MAX32655/Demo_2048/ARM/project.mk +++ b/Examples/MAX32655/Demo_2048/ARM/project.mk @@ -23,8 +23,4 @@ ifeq ($(DEV_MODE_TRACE), 1) PROJ_CFLAGS += -DDEV_MODE_TRACE=1 endif -PROJ_CFLAGS += -UDEBUG - - -# TODO: REMOVE ME -# MAXIM_PATH=../../../../ +MAILBOX_SIZE = 226; diff --git a/Examples/MAX32655/Demo_2048/RISCV/project.mk b/Examples/MAX32655/Demo_2048/RISCV/project.mk index 10f11a6fc87..cd7b6ebdce4 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/project.mk +++ b/Examples/MAX32655/Demo_2048/RISCV/project.mk @@ -23,12 +23,4 @@ ifeq ($(DEV_MODE_TRACE), 1) PROJ_CFLAGS += -DDEV_MODE_TRACE=1 endif -PROJ_CFLAGS += -UDEBUG - -# RISC-V ICC1 will not be used. -# ARM_SRAM_SIZE = 0x18000 -# RISCV_SRAM_SIZE = 0x8000 # 32KB -# DUAL_CORE_RAM_SIZE = 0x20000 - -# TODO: REMOVE ME -# MAXIM_PATH=../../../../ +MAILBOX_SIZE = 226; diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.c b/Libraries/MiscDrivers/Display/tft_ssd2119.c index 46b77ef447a..b5ffab47f75 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.c +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.c @@ -1197,6 +1197,343 @@ void MXC_TFT_FillRect(area_t *area, int color) __enable_irq(); } +void MXC_TFT_DrawImage(int px_x, int px_y, int width, int height, uint32_t **image_2D) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = image_2D[y][x]; + spi_transmit((uint16_t *)g_fifo, 2); + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawBitmap(int px_x, int px_y, int width, int height, uint16_t *image) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + int i = 0; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + // g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | (uint32_t)((image[i] & 0xFF00) << 8)); + spi_transmit((uint16_t *)g_fifo, 2); + i += 1; + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint16_t *image) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + int i = 0; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | (uint32_t)((~image[i] & 0xFF00) >> 8)); + spi_transmit((uint16_t *)g_fifo, 2); + i += 1; + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + int i = 0; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + if (image[i] == original_color) { + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | (uint32_t)((mask & 0xFF00) >> 8)); + } else { + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); + } + spi_transmit((uint16_t *)g_fifo, 2); + i += 1; + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + int i = 0; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + if (image[i] == original_color) { + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | (uint32_t)((mask & 0xFF00) >> 8)); + } else { + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | (uint32_t)((~image[i] & 0xFF00) >> 8)); + } + spi_transmit((uint16_t *)g_fifo, 2); + i += 1; + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawVerticalLine(int px_x, int px_y, int height, uint32_t color) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = 1; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = color; + + spi_transmit((uint16_t *)g_fifo, 2); + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawHorizontalLine(int px_x, int px_y, int width, uint32_t color) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = 1; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = color; + + spi_transmit((uint16_t *)g_fifo, 2); + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawRect(int pixelX, int pixelY, int width, int height, uint32_t color) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = pixelX; + area->y = pixelY; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, i, h, w; + + w = area->w; + h = area->h; + + if (tft_rotation == SCREEN_NORMAL || tft_rotation == SCREEN_FLIP) { + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + } else if (tft_rotation == SCREEN_ROTATE) { + if ((area->x + w) > DISPLAY_HEIGHT) { + w = DISPLAY_HEIGHT - area->x; + } + + if ((area->y + h) > DISPLAY_WIDTH) { + h = DISPLAY_WIDTH - area->y; + } + + displaySub_Rotated(area->x, area->y, w, h); + } + + for (y = 0; y < h; y++) { + for (x = 0; x < (w >> 2); x++) { + for (i = 0; i < 4; i++) { + g_fifo[i] = color; + } + + spi_transmit((uint16_t *)g_fifo, 8); + } + + x <<= 2; + + for (; x < w; x++) { + write_color(color); + } + } + + __enable_irq(); +} + void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t color) { area_t _area; @@ -1259,6 +1596,54 @@ void MXC_TFT_PrintPalette(void) } } +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, int radius, uint32_t background_color) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = pixelX; + area->y = pixelY; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + // Calculate distance from the corner. + int dx = (x < radius) ? radius - x : (x >= w - radius) ? x - (w - radius - 1) : 0; + int dy = (y < radius) ? radius - y : (y >= h - radius) ? y - (h - radius - 1) : 0; + + // Use pythagorean theorem to map coordinates, square not necessary when comparing with r. + if (((dx * dx) + (dy * dy)) <= (radius * radius)) { + *g_fifo = color; + spi_transmit((uint16_t *)g_fifo, 2); + + } else { + *g_fifo = background_color; + spi_transmit((uint16_t *)g_fifo, 2); + } + } + } + + __enable_irq(); +} + /*************************************************************** * Printf Functions ***************************************************************/ diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.h b/Libraries/MiscDrivers/Display/tft_ssd2119.h index 6d62e241d83..aeed7ce1138 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.h +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.h @@ -113,6 +113,110 @@ void MXC_TFT_ClearScreen(void); */ void MXC_TFT_FillRect(area_t *area, int color); + +/** + * @brief Draws an image that's already been formatted for the + * 9-bit SPI transactions. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image_2D Pointer to 2-D array of image. + */ +void MXC_TFT_DrawImage(int px_x, int px_y, int width, int height, uint32_t **image_2D); + +/** + * @brief Draws a raw bitmap (RGB565 16-bit color codes) to display. This function + * packages each pixel of the image (RGB565 16-bit color codes) into + * compatible packets that are sent to the display. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image Pointer to image filled with RGB565 color codes. + */ +void MXC_TFT_DrawBitmap(int px_x, int px_y, int width, int height, uint16_t *image); + +/** + * @brief Draws an inverted color, raw bitmap (RGB565 16-bit color codes) to display. This function + * packages and inverts each pixel of the image (RGB565 16-bit color codes) + * into compatible packets before transmitting to display. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image Pointer to image filled with RGB565 color codes. + */ +void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint16_t *image); + +/** + * @brief Draws a raw bitmap (RGB565 16-bit color codes) to display with a single RGB565 color replaced + * with another selected color. This function is mainly useful when trying to match the background + * color of the bitmap to whatever the bitmap is overlaying onto the display. This function + * packages and inverts each pixel of the image (RGB565 16-bit color codes) + * into compatible packets before transmitting to display. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image Pointer to image filled with RGB565 color codes. + * @param original_color 16-bit RGB565 color code to be replaced on bitmap. + * @param mask New 16-bit RGB565 color code that replaces the original color. + */ +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask); + +/** + * @brief Draws an inverted color, raw bitmap (RGB565 16-bit color codes) to display with a single RGB565 color replaced + * with another selected color. This function is mainly useful when trying to match the background + * color of the bitmap to whatever the bitmap is overlaying onto the display. This function + * packages and inverts each pixel of the image (RGB565 16-bit color codes) + * into compatible packets before transmitting to display. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image Pointer to image filled with RGB565 color codes. + * @param original_color 16-bit RGB565 color code to be replaced on bitmap. + * @param mask New 16-bit RGB565 color code that replaces the original color. + */ +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask); + +/** + * @brief Draws a single-pixel height, horizontal line. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Length of line. + * @param color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + */ +void MXC_TFT_DrawHorizontalLine(int px_x, int px_y, int width, uint32_t color); + +/** + * @brief Draws a single-pixel wide, vertical line. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param height Length of image. + * @param color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + */ +void MXC_TFT_DrawVerticalLine(int px_x, int px_y, int height, uint32_t color); + +/** + * @brief Draws a rectangle. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of rectanlge. + * @param height Height of rectangle. + * @param color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + */ +void MXC_TFT_DrawRect(int pixelX, int pixelY, int width, int height, uint32_t color); + /** * @brief Write a Pixel on TFT display * @@ -124,6 +228,20 @@ void MXC_TFT_FillRect(area_t *area, int color); */ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t color); + +/** + * @brief Draws a rectangle with rounded corners. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of rectanlge. + * @param height Height of rectangle. + * @param color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + * @param radius Radius of corners (how much you want rounded off). + * @param background_color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + */ +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, int radius, uint32_t background_color); + /** * @brief Draw a bitmap * @@ -133,8 +251,22 @@ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t */ void MXC_TFT_ShowImage(int x0, int y0, int id); +/** + * @brief Draw Camer + * + * @param x0 x location of image + * @param y0 y location of image + * @param id Bitmap number + */ void MXC_TFT_ShowImageCameraRGB565(int x0, int y0, uint8_t *image, int iWidth, int iHeight); +/** + * @brief Draw a bitmap + * + * @param x0 x location of image + * @param y0 y location of image + * @param id Bitmap number + */ void MXC_TFT_ShowImageCameraMono(int x0, int y0, uint8_t *image, int iWidth, int iHeight); /** From ffd6f5f870d706b2ebb21e21b96296847910d85c Mon Sep 17 00:00:00 2001 From: Woo Date: Mon, 16 Sep 2024 10:36:54 -0500 Subject: [PATCH 12/27] Add user selectable Mailbox size for ME17 --- .../CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk b/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk index 273168b321a..87cc115adec 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk @@ -28,7 +28,7 @@ PROJ_AFLAGS += -DSRAM_ORIGIN=0x20000000 # Will work with small MAILBOX_SIZE, cores will experience more interrupts # and higher communication latency. # Minimum value is 16 -MAILBOX_SIZE = 64 +MAILBOX_SIZE ?= 64 ifneq ($(RISCV_CORE),) # RISCV core From d37d69439e01b558671b3ac4017d2cf362cacfb5 Mon Sep 17 00:00:00 2001 From: Woo Date: Mon, 16 Sep 2024 14:22:11 -0500 Subject: [PATCH 13/27] Fix makefile errors --- .../MAX32655/Demo_2048/ARM/.vscode/settings.json | 15 +-------------- Examples/MAX32655/Demo_2048/ARM/Makefile | 4 ++-- Examples/MAX32655/Demo_2048/ARM/project.mk | 2 +- .../Demo_2048/RISCV/.vscode/settings.json | 7 +------ Examples/MAX32655/Demo_2048/RISCV/Makefile | 4 ++-- Examples/MAX32655/Demo_2048/RISCV/project.mk | 3 +-- 6 files changed, 8 insertions(+), 27 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json index 26a0c10968d..bd75836225f 100644 --- a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json @@ -74,19 +74,6 @@ ], "C_Cpp.default.forcedInclude": [ "${workspaceFolder}/build/project_defines.h" - ], - "files.associations": { - "mxc_device.h": "c", - "game_logic_2048.h": "c", - "mxc_delay.h": "c", - "ext_flash.h": "c", - "tft_ssd2119.h": "c", - "graphics.h": "c", - "led.h": "c", - "clear_sans_bold_game_text.h": "c", - "cfs_logo.h": "c", - "clear_sans_bold_scaled_block_digits.h": "c", - "type_traits": "c" - } + ] } diff --git a/Examples/MAX32655/Demo_2048/ARM/Makefile b/Examples/MAX32655/Demo_2048/ARM/Makefile index 57c3504b256..717125621b6 100644 --- a/Examples/MAX32655/Demo_2048/ARM/Makefile +++ b/Examples/MAX32655/Demo_2048/ARM/Makefile @@ -100,7 +100,7 @@ $(info Loaded project.mk) ifeq "$(MAXIM_PATH)" "" # MAXIM_PATH is still not defined... -DEPTH := ../../../ +DEPTH := ../../../../ MAXIM_PATH := $(abspath $(DEPTH)) $(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) $(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) @@ -370,7 +370,7 @@ endif all: # Extend the functionality of the "all" recipe here - arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf libclean: $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph diff --git a/Examples/MAX32655/Demo_2048/ARM/project.mk b/Examples/MAX32655/Demo_2048/ARM/project.mk index 4ae9229f410..7293998d13e 100644 --- a/Examples/MAX32655/Demo_2048/ARM/project.mk +++ b/Examples/MAX32655/Demo_2048/ARM/project.mk @@ -23,4 +23,4 @@ ifeq ($(DEV_MODE_TRACE), 1) PROJ_CFLAGS += -DDEV_MODE_TRACE=1 endif -MAILBOX_SIZE = 226; +MAILBOX_SIZE = 226 diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json index 11a28841a55..bd75836225f 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json @@ -74,11 +74,6 @@ ], "C_Cpp.default.forcedInclude": [ "${workspaceFolder}/build/project_defines.h" - ], - "files.associations": { - "stdint.h": "c", - "mxc_device.h": "c", - "uart.h": "c" - } + ] } diff --git a/Examples/MAX32655/Demo_2048/RISCV/Makefile b/Examples/MAX32655/Demo_2048/RISCV/Makefile index 57c3504b256..717125621b6 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/Makefile +++ b/Examples/MAX32655/Demo_2048/RISCV/Makefile @@ -100,7 +100,7 @@ $(info Loaded project.mk) ifeq "$(MAXIM_PATH)" "" # MAXIM_PATH is still not defined... -DEPTH := ../../../ +DEPTH := ../../../../ MAXIM_PATH := $(abspath $(DEPTH)) $(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) $(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) @@ -370,7 +370,7 @@ endif all: # Extend the functionality of the "all" recipe here - arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf libclean: $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph diff --git a/Examples/MAX32655/Demo_2048/RISCV/project.mk b/Examples/MAX32655/Demo_2048/RISCV/project.mk index cd7b6ebdce4..b69cc56fef3 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/project.mk +++ b/Examples/MAX32655/Demo_2048/RISCV/project.mk @@ -17,10 +17,9 @@ RISCV_CORE=1 IPATH += ./inc VPATH += ./src - DEV_MODE_TRACE = 1 ifeq ($(DEV_MODE_TRACE), 1) PROJ_CFLAGS += -DDEV_MODE_TRACE=1 endif -MAILBOX_SIZE = 226; +MAILBOX_SIZE = 226 From 55b2f186d9bded69fafb45cf23ae9ee53394e698 Mon Sep 17 00:00:00 2001 From: Woo Date: Mon, 16 Sep 2024 14:30:13 -0500 Subject: [PATCH 14/27] Update README --- Examples/MAX32655/Demo_2048/ARM/README.md | 2 +- Examples/MAX32655/Demo_2048/ARM/project.mk | 4 ++ Examples/MAX32655/Demo_2048/RISCV/README.md | 57 +++++++++++++++++--- Examples/MAX32655/Demo_2048/RISCV/project.mk | 4 ++ 4 files changed, 60 insertions(+), 7 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/README.md b/Examples/MAX32655/Demo_2048/ARM/README.md index 9a4da153f4d..0bc3ab69870 100644 --- a/Examples/MAX32655/Demo_2048/ARM/README.md +++ b/Examples/MAX32655/Demo_2048/ARM/README.md @@ -21,7 +21,7 @@ This project only supports the MAX32655EVKIT as it has the 320x240 TFT Display. If using the MAX32655EVKIT (EvKit\_V1): - Connect a USB cable between the PC and the CN1 (USB/PWR) connector. - Connect pins JP4(RX_SEL) and JP5(TX_SEL) to RX0 and TX0 header. -- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Open an terminal application on the PC and connect to the EV kit's console UART at 2000000, 8-N-1. - Close jumper JP2 (LED0 EN). - Close jumper JP3 (LED1 EN). diff --git a/Examples/MAX32655/Demo_2048/ARM/project.mk b/Examples/MAX32655/Demo_2048/ARM/project.mk index 7293998d13e..0c8806ec85b 100644 --- a/Examples/MAX32655/Demo_2048/ARM/project.mk +++ b/Examples/MAX32655/Demo_2048/ARM/project.mk @@ -24,3 +24,7 @@ PROJ_CFLAGS += -DDEV_MODE_TRACE=1 endif MAILBOX_SIZE = 226 + +ifeq ($(BOARD),FTHR_Apps_P1) +$(error ERR_NOTSUPPORTED: This example requires a TFT display, therefore it's not supported on the MAX32650FTHR) +endif diff --git a/Examples/MAX32655/Demo_2048/RISCV/README.md b/Examples/MAX32655/Demo_2048/RISCV/README.md index b95b1374ae3..0bc3ab69870 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/README.md +++ b/Examples/MAX32655/Demo_2048/RISCV/README.md @@ -1,6 +1,10 @@ ## Description -TODO +This example demonstrates running the 2048 game on both ARM and RISC-V cores on the MAX32655. + +The RISC-V core, running at 60MHz (ISO), handles the controller (keyboard) user inputs and the main 2048 game logic. + +The ARM core, running at 100MHz (IPO), keeps track of the timer (RTC) and handles the display graphics after the RISC-V core finishes handling the main game logic. ## Software @@ -10,16 +14,57 @@ Universal instructions on building, flashing, and debugging this project can be ### Project-Specific Build Notes -(None - this project builds as a standard example) +This project only supports the MAX32655EVKIT as it has the 320x240 TFT Display. ## Required Connections -TODO +If using the MAX32655EVKIT (EvKit\_V1): +- Connect a USB cable between the PC and the CN1 (USB/PWR) connector. +- Connect pins JP4(RX_SEL) and JP5(TX_SEL) to RX0 and TX0 header. +- Open an terminal application on the PC and connect to the EV kit's console UART at 2000000, 8-N-1. +- Close jumper JP2 (LED0 EN). +- Close jumper JP3 (LED1 EN). ## Expected Output -TODO - ``` -TODO +******************************************************************************* +ARM: Starting ARM Initialization. + +ARM: Semaphore is not busy - with previous value: 1 + +ARM: Starting RISC-V core and handing off major UART0 Control to RISC-V. + +RISC-V: Starting RISC-V Initialization. + +RISC-V: Semaphore is not busy - with previous value: 1 + +RISC-V: Finished startup. Main UART0 control is handled by RISC-V now. + +RISC-V: Starting Controller and Game + + + + + + + + + + + | | | + | | | + | | | +----------------------------------- + | | | + | | | + | | | +----------------------------------- + | | | + | | 0002 | + | | | +----------------------------------- + | | | + | | | + | | | ``` diff --git a/Examples/MAX32655/Demo_2048/RISCV/project.mk b/Examples/MAX32655/Demo_2048/RISCV/project.mk index b69cc56fef3..ec7e2cc78eb 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/project.mk +++ b/Examples/MAX32655/Demo_2048/RISCV/project.mk @@ -23,3 +23,7 @@ PROJ_CFLAGS += -DDEV_MODE_TRACE=1 endif MAILBOX_SIZE = 226 + +ifeq ($(BOARD),FTHR_Apps_P1) +$(error ERR_NOTSUPPORTED: This example requires a TFT display, therefore it's not supported on the MAX32650FTHR) +endif From c5be3fc16acb788fe7c926c718ef41a1463f9ac1 Mon Sep 17 00:00:00 2001 From: Woo Date: Mon, 16 Sep 2024 16:06:57 -0500 Subject: [PATCH 15/27] Fix typos, lower baudrate to 115200, move mailbox/semaphore definitions outside of RISCV to hide intellisense not finding definition error (build/buildrv/project_defines.h) --- .../Demo_2048/ARM/.vscode/settings.json | 5 +- Examples/MAX32655/Demo_2048/ARM/main.c | 4 +- .../Demo_2048/RISCV/inc/ipc_defines.h | 52 +++++++++++++++++++ Examples/MAX32655/Demo_2048/RISCV/main.c | 38 ++------------ 4 files changed, 63 insertions(+), 36 deletions(-) create mode 100644 Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json index bd75836225f..8d86424f5da 100644 --- a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json @@ -74,6 +74,9 @@ ], "C_Cpp.default.forcedInclude": [ "${workspaceFolder}/build/project_defines.h" - ] + ], + "files.associations": { + "graphics.h": "c" + } } diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 9376457494d..30f2163da7b 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -50,7 +50,7 @@ // Match the Console's baud rate to what the controller will be set to // for the RISC-V as they share the same port. -#define RISCV_CONTROLLER_BAUD (2000000) +#define RISCV_CONTROLLER_BAUD (115200) /// Semaphores // Should never reach here @@ -74,7 +74,7 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexs are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. #define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) #define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. #define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h new file mode 100644 index 00000000000..e5fc34e4a56 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h @@ -0,0 +1,52 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +/* **** Definitions **** */ + +/// Semaphores +// Should never reach here +#if (MAILBOX_SIZE == 0) +#error "Mailbox size is 0." +#endif + +// Keep track for Semaphore peripheral. +#define SEMA_IDX_ARM (0) +#define SEMA_IDX_RISCV (1) + +#define MAILBOX_OVERHEAD (2 * sizeof(uint16_t)) +#define MAILBOX_PAYLOAD_LEN (MAILBOX_SIZE - MAILBOX_OVERHEAD) +typedef struct { + uint16_t readLocation; + uint16_t writeLocation; +#if (MAILBOX_SIZE == 0) + uint8_t payload[1]; +#else + uint8_t payload[MAILBOX_PAYLOAD_LEN]; +#endif +} mxcSemaBox_t; + +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) + diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index d7160fab9dc..31a98261ef0 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -39,6 +39,7 @@ // Application Libraries #include "controller.h" #include "game_2048.h" +#include "ipc_defines.h" /***** Definitions *****/ @@ -50,41 +51,12 @@ #endif /// Controller Settings. -// Set to its fastest supported speed (3Mbps when tested). +// Change UART speeds here, if needed. 115200 was more than enough, but users +// have the option to increase the speed here. // UART speed up is set at the beginning of BOTH ARM and RISC-V main code // because SystemInit for both cores default the UART baud rate to -// 115200. -#define CONTROLLER_UART_BAUD (2000000) - -/// Semaphores -// Should never reach here -#if (MAILBOX_SIZE == 0) -#error "Mailbox size is 0." -#endif - -// Keep track for Semaphore peripheral. -#define SEMA_IDX_ARM (0) -#define SEMA_IDX_RISCV (1) - -#define MAILBOX_OVERHEAD (2 * sizeof(uint16_t)) -#define MAILBOX_PAYLOAD_LEN (MAILBOX_SIZE - MAILBOX_OVERHEAD) -typedef struct { - uint16_t readLocation; - uint16_t writeLocation; -#if (MAILBOX_SIZE == 0) - uint8_t payload[1]; -#else - uint8_t payload[MAILBOX_PAYLOAD_LEN]; -#endif -} mxcSemaBox_t; - -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexs are from 0 to (16 blocks * 4 bytes) - 1. -#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) -#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +// 115200. +#define CONTROLLER_UART_BAUD (115200) /* **** Globals **** */ // Defined in sema_reva.c From 85c4dab5b40af5a6af53fe5a01f32b0309ebbd9c Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 11:39:19 -0500 Subject: [PATCH 16/27] Move IPC definitions into ipc_defines.h, fix linter errors, revert grid draw --- .../MAX32655/Demo_2048/ARM/inc/cfs_logo.h | 5 ++ .../ARM/inc/clear_sans_bold_game_text.h | 5 ++ .../inc/clear_sans_bold_scaled_block_digits.h | 5 ++ .../Demo_2048/ARM/inc/end_game_text.h | 5 ++ .../MAX32655/Demo_2048/ARM/inc/graphics.h | 5 ++ .../MAX32655/Demo_2048/ARM/inc/ipc_defines.h | 60 +++++++++++++++++++ Examples/MAX32655/Demo_2048/ARM/main.c | 57 +++++------------- .../Demo_2048/ARM/resources/all_imgs.c | 54 ++++++----------- .../MAX32655/Demo_2048/ARM/resources/bitmap.h | 58 +++++++----------- .../MAX32655/Demo_2048/ARM/src/graphics.c | 44 +++++++------- .../Demo_2048/RISCV/.vscode/settings.json | 5 +- .../MAX32655/Demo_2048/RISCV/inc/controller.h | 5 ++ .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 5 ++ .../Demo_2048/RISCV/inc/ipc_defines.h | 8 +++ Examples/MAX32655/Demo_2048/RISCV/main.c | 31 +++++----- .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 15 +++-- 16 files changed, 202 insertions(+), 165 deletions(-) create mode 100644 Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h b/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h index 6687fa61583..1277d89c566 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h @@ -16,6 +16,9 @@ * ******************************************************************************/ +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CFS_LOGO_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CFS_LOGO_H_ + // clang-format off /* **** Includes **** */ @@ -115,3 +118,5 @@ __flash uint16_t cfs_logo[] = { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }; + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CFS_LOGO_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h index 08cad6f5790..d4a5f0f6922 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h @@ -16,6 +16,9 @@ * ******************************************************************************/ +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_GAME_TEXT_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_GAME_TEXT_H_ + // clang-format off /* **** Includes **** */ @@ -311,3 +314,5 @@ __flash uint16_t game_text_moves[] = { 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 }; + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_GAME_TEXT_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h index feab1246061..f074e776ee5 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h @@ -16,6 +16,9 @@ * ******************************************************************************/ +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_SCALED_BLOCK_DIGITS_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_SCALED_BLOCK_DIGITS_H_ + // clang-format off /* **** Includes **** */ @@ -356,3 +359,5 @@ __flash uint16_t block_2048[] = { : (block) == 1024 ? block_1024 \ : (block) == 2048 ? block_2048 \ : NULL) + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_SCALED_BLOCK_DIGITS_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h b/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h index ae26bd1ec48..577fc34df1f 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h @@ -16,6 +16,9 @@ * ******************************************************************************/ +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_END_GAME_TEXT_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_END_GAME_TEXT_H_ + // clang-format off /* **** Includes **** */ @@ -293,3 +296,5 @@ __flash uint16_t game_over[] = { 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703 }; + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_END_GAME_TEXT_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index e948a6aecd8..36db538a4ae 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -16,6 +16,9 @@ * ******************************************************************************/ +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_GRAPHICS_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_GRAPHICS_H_ + /* **** Includes **** */ #include @@ -258,3 +261,5 @@ void Graphics_DisplayGameOver(void); * @brief Draws the "you win" box popup when game is finished. */ void Graphics_DisplayYouWin(void); + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_GRAPHICS_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h new file mode 100644 index 00000000000..69e7ed870ce --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h @@ -0,0 +1,60 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +// These should match with the RISC-V core's copy of ipc_defines.h + +/// Semaphores +// Should never reach here +#if (MAILBOX_SIZE == 0) +#error "Mailbox size is 0." +#endif + +// Keep track for Semaphore peripheral. +#define SEMA_IDX_ARM (0) +#define SEMA_IDX_RISCV (1) + +#define MAILBOX_OVERHEAD (2 * sizeof(uint16_t)) +#define MAILBOX_PAYLOAD_LEN (MAILBOX_SIZE - MAILBOX_OVERHEAD) +typedef struct { + uint16_t readLocation; + uint16_t writeLocation; +#if (MAILBOX_SIZE == 0) + uint8_t payload[1]; +#else + uint8_t payload[MAILBOX_PAYLOAD_LEN]; +#endif +} mxcSemaBox_t; + +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 30f2163da7b..2380ced7550 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -38,6 +38,7 @@ // Application Libraries #include "graphics.h" +#include "ipc_defines.h" /* **** Definitions **** */ @@ -52,36 +53,6 @@ // for the RISC-V as they share the same port. #define RISCV_CONTROLLER_BAUD (115200) -/// Semaphores -// Should never reach here -#if (MAILBOX_SIZE == 0) -#error "Mailbox size is 0." -#endif - -// Keep track for Semaphore peripheral. -#define SEMA_IDX_ARM (0) -#define SEMA_IDX_RISCV (1) - -#define MAILBOX_OVERHEAD (2 * sizeof(uint16_t)) -#define MAILBOX_PAYLOAD_LEN (MAILBOX_SIZE - MAILBOX_OVERHEAD) -typedef struct { - uint16_t readLocation; - uint16_t writeLocation; -#if (MAILBOX_SIZE == 0) - uint8_t payload[1]; -#else - uint8_t payload[MAILBOX_PAYLOAD_LEN]; -#endif -} mxcSemaBox_t; - -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. -#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) -#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) - /* **** Globals **** */ // Defined in sema_reva.c extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads @@ -133,19 +104,19 @@ graphics_slide_direction_t ReceiveDirectionFromRISCVCore(void) // UP case 'w': return GRAPHICS_SLIDE_DIR_UP; - + // DOWN case 's': return GRAPHICS_SLIDE_DIR_DOWN; - + // LEFT case 'a': return GRAPHICS_SLIDE_DIR_LEFT; - + // RIGHT case 'd': return GRAPHICS_SLIDE_DIR_RIGHT; - + default: return -1; } @@ -198,7 +169,7 @@ int main(void) if (error != E_NO_ERROR) { PRINT("ARM: Error speeding up baud rate: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } PRINT("\n\n*******************************************************************************\n"); @@ -220,14 +191,14 @@ int main(void) if (error != E_NO_ERROR) { PRINT("ARM: Semaphore for ARM core is busy: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } error = MXC_SEMA_GetSema(SEMA_IDX_ARM); if (error != E_NO_ERROR) { PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); LED_On(LED_RED); - while(1); + while (1) {} } else { PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); } @@ -254,14 +225,14 @@ int main(void) if (MXC_RTC_Init(0, 0) != E_NO_ERROR) { PRINT("ARM: Error initializing RTC: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } error = Graphics_Init(); if (error != E_NO_ERROR) { PRINT("ARM: Error initializing graphics: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } // Wait for Game logic to finish initializing on RISCV. @@ -277,7 +248,7 @@ int main(void) if (game_state != IN_PROGRESS) { PRINT("ARM: Error starting game.\n"); LED_On(LED_RED); - while(1); + while (1) {} } Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); @@ -289,7 +260,7 @@ int main(void) if (MXC_RTC_Start() != E_NO_ERROR) { PRINT("ARM: Error starting timer: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } uint32_t prev_seconds = 0; @@ -360,7 +331,7 @@ int main(void) MXC_Delay(MXC_DELAY_MSEC(750)); Graphics_DisplayYouWin(); - while(1); + while (1) {} } else if (game_state == GAME_OVER) { PRINT("ARM: Game Over. Nice try! Better luck next time.\n"); PRINT("ARM: Ending game.\n"); @@ -369,7 +340,7 @@ int main(void) MXC_Delay(MXC_DELAY_MSEC(750)); Graphics_DisplayGameOver(); - while(1); + while (1) {} } // Signal RISC-V Core that it's ready for the next grid state. diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c index afa363ed547..1536bb85377 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c +++ b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c @@ -1,40 +1,20 @@ - -/******************************************************************************* -* Copyright (C) 2022 Maxim Integrated Products, Inc., All rights Reserved. -* -* This software is protected by copyright laws of the United States and -* of foreign countries. This material may also be protected by patent laws -* and technology transfer regulations of the United States and of foreign -* countries. This software is furnished under a license agreement and/or a -* nondisclosure agreement and may only be used or reproduced in accordance -* with the terms of those agreements. Dissemination of this information to -* any party or parties not specified in the license agreement and/or -* nondisclosure agreement is expressly prohibited. -* -* The above copyright notice and this permission notice shall be included -* in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES -* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -* OTHER DEALINGS IN THE SOFTWARE. -* -* Except as contained in this notice, the name of Maxim Integrated -* Products, Inc. shall not be used except as stated in the Maxim Integrated -* Products, Inc. Branding Policy. -* -* The mere transfer of this software does not imply any licenses -* of trade secrets, proprietary technology, copyrights, patents, -* trademarks, maskwork rights, or any other form of intellectual -* property whatsoever. Maxim Integrated Products, Inc. retains all -* ownership rights. -******************************************************************************* -*/ - - +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ __attribute__ ((section(".bin_storage_img"))) __attribute__ ((__used__)) const unsigned char imgs_arr[ ] = { diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h index e154825b3b4..705e43b76f4 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h +++ b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h @@ -1,42 +1,24 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ -/******************************************************************************* -* Copyright (C) 2022 Maxim Integrated Products, Inc., All rights Reserved. -* -* This software is protected by copyright laws of the United States and -* of foreign countries. This material may also be protected by patent laws -* and technology transfer regulations of the United States and of foreign -* countries. This software is furnished under a license agreement and/or a -* nondisclosure agreement and may only be used or reproduced in accordance -* with the terms of those agreements. Dissemination of this information to -* any party or parties not specified in the license agreement and/or -* nondisclosure agreement is expressly prohibited. -* -* The above copyright notice and this permission notice shall be included -* in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES -* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -* OTHER DEALINGS IN THE SOFTWARE. -* -* Except as contained in this notice, the name of Maxim Integrated -* Products, Inc. shall not be used except as stated in the Maxim Integrated -* Products, Inc. Branding Policy. -* -* The mere transfer of this software does not imply any licenses -* of trade secrets, proprietary technology, copyrights, patents, -* trademarks, maskwork rights, or any other form of intellectual -* property whatsoever. Maxim Integrated Products, Inc. retains all -* ownership rights. -******************************************************************************* -*/ - -#ifndef _BITMAP_H_ -#define _BITMAP_H_ +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ // bitmaps id @@ -47,4 +29,4 @@ #define urw_gothic_13_white_bg_grey 3 -#endif //_BITMAP_H_ +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index 426bbf5acdd..04137c4c0e9 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -103,7 +103,7 @@ int Graphics_Init(void) MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); // Draw grid. - MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, GRID_LENGTH, F_GRID_COLOR, RADIUS_FOR_CORNERS, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, GRID_LENGTH, F_GRID_COLOR); for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. @@ -127,7 +127,7 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4) // Increase the block size by 10 pixels MXC_TFT_DrawRoundedRect(x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); - + // Don't delay when empty space is fully filled. if (frame_i < 5) { // Minimum speed visual for human eye while also being fast and not laggy. @@ -223,7 +223,7 @@ inline void Graphics_AddBlock(int row, int col, int value) // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_128, RGB565_BLACK, RGB565_BLOCK_128); break; - + case 256: // Draw block. MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, F_GRID_COLOR); @@ -232,7 +232,7 @@ inline void Graphics_AddBlock(int row, int col, int value) // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_256, RGB565_BLACK, RGB565_BLOCK_256); break; - + case 512: // Draw block. MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, F_GRID_COLOR); @@ -241,7 +241,7 @@ inline void Graphics_AddBlock(int row, int col, int value) // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_512, RGB565_BLACK, RGB565_BLOCK_512); break; - + case 1024: // Draw block. MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, F_GRID_COLOR); @@ -250,7 +250,7 @@ inline void Graphics_AddBlock(int row, int col, int value) // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_1024, RGB565_BLACK, RGB565_BLOCK_1024); break; - + case 2048: // Draw block. MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_GRID_COLOR); @@ -273,7 +273,7 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); // Animate the blow up. - // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. + // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. for (int i = 0; i < BLOCK_SPACING + 1; i++) { MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2*i), BLOCK_LENGTH + (2*i), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); @@ -309,7 +309,7 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) // @param frame_i Current frame of the animation. // @param current_length Length of block at current frame. // @param f_color Formatted color code of outer border. -// @param radius Radius ofrounded cornewrs and width of block. +// @param radius Radius ofrounded cornewrs and width of block. static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) { // Draw top horizontal lines. @@ -391,7 +391,7 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u // @param frame_i Current frame of the animation. // @param current_length Length of block at current frame. // @param f_color Formatted color code of outer border. -// @param radius Radius ofrounded cornewrs and width of block. +// @param radius Radius ofrounded cornewrs and width of block. static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) { for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { @@ -440,7 +440,7 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS, F_GRID_COLOR); } else { graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS); - } + } } } } @@ -535,7 +535,7 @@ void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_directi } MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); - + } else { MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } @@ -544,7 +544,7 @@ void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_directi } } break; - + case GRAPHICS_SLIDE_DIR_DOWN: // Start from top row to bottom row (column order doesn't matter). // This for-loop keeps track of the localized y position of where the horizontal line is drawn. @@ -576,7 +576,7 @@ void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_directi } MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); - + } else { MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } @@ -585,7 +585,7 @@ void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_directi } } break; - + case GRAPHICS_SLIDE_DIR_LEFT: // Start from right column to left column (row order doesn't matter). // This for-loop keeps track of the localized x position of where the vertical line is drawn. @@ -617,7 +617,7 @@ void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_directi } MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); - + } else { MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } @@ -626,7 +626,7 @@ void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_directi } } break; - + case GRAPHICS_SLIDE_DIR_RIGHT: // Start from left column to right column (row order doesn't matter). // This for-loop keeps track of the localized x position of where the vertical line is drawn. @@ -658,7 +658,7 @@ void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_directi } MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); - + } else { MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } @@ -668,7 +668,7 @@ void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_directi } break; - + default: return; } @@ -687,7 +687,7 @@ void Graphics_SetTime(uint32_t total_seconds) { // Convert total time to minutes:seconds (mm:ss) int digit0, digit1, digit2, digit3; - + // The max possible seconds is 5999, which yields 99m:59s. if (total_seconds >= 5999) { digit0 = 9; @@ -703,7 +703,7 @@ void Graphics_SetTime(uint32_t total_seconds) } // Update timer on display. - MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. @@ -733,7 +733,7 @@ void Graphics_UpdateMovesCount(uint32_t moves_count) { // Convert total time to minutes:seconds (mm:ss) int digit0, digit1, digit2, digit3; - + // The max possible seconds is 5999, which yields 99m:59s. if (moves_count >= 9999) { digit0 = 9; @@ -748,7 +748,7 @@ void Graphics_UpdateMovesCount(uint32_t moves_count) } // Update timer on display. - MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json index bd75836225f..8ca5ce8ab8c 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json @@ -74,6 +74,9 @@ ], "C_Cpp.default.forcedInclude": [ "${workspaceFolder}/build/project_defines.h" - ] + ], + "files.associations": { + "ipc_defines.h": "c" + } } diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h b/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h index 5e7c1930b40..51453a4c21d 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h @@ -16,6 +16,9 @@ * ******************************************************************************/ +#ifndef EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_CONTROLLER_H_ +#define EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_CONTROLLER_H_ + /* **** Includes **** */ #include @@ -45,3 +48,5 @@ int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud); * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. */ int Controller_Start(mxc_uart_req_t *req); + +#endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_CONTROLLER_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h index 5c30c22ac23..251f1a82573 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -16,6 +16,9 @@ * ******************************************************************************/ +#ifndef EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_GAME_2048_H_ +#define EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_GAME_2048_H_ + /* **** Includes **** */ #include @@ -105,3 +108,5 @@ void Game_2048_GetGrid(uint32_t grid[4][4]); * @param grid Pointer to 2-D array to hold the current grid state. */ void Game_2048_GetGridState(uint8_t grid_state[4][4]); + +#endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_GAME_2048_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h index e5fc34e4a56..5127400c7aa 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h @@ -16,10 +16,17 @@ * ******************************************************************************/ +#ifndef EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ +#define EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ + /* **** Includes **** */ +#include + /* **** Definitions **** */ +// These should match with the ARM core's copy of ipc_defines.h + /// Semaphores // Should never reach here #if (MAILBOX_SIZE == 0) @@ -50,3 +57,4 @@ typedef struct { #define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) #define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 31a98261ef0..703e2b7ca5b 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -112,31 +112,30 @@ void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) KEYPRESS_INPUT_DIR = INPUT_LEFT; KEYPRESS_READY = true; break; - + case 'd': KEYPRESS_INPUT_DIR = INPUT_RIGHT; KEYPRESS_READY = true; break; - + case 'w': KEYPRESS_INPUT_DIR = INPUT_UP; KEYPRESS_READY = true; break; - + case 's': KEYPRESS_INPUT_DIR = INPUT_DOWN; KEYPRESS_READY = true; break; - + default: KEYPRESS_READY = false; error = Controller_Start(&CONTROLLER_REQ); if (error != E_NO_ERROR) { - PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); - LED_On(LED_RED); + PRINT("RISC-V: Invalid Keypress: %c\n", CONTROLLER_KEYPRESS); } } - + PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, cb_error); } @@ -271,7 +270,7 @@ int main(void) if (error != E_NO_ERROR) { PRINT("RISC-V: Error speeding up baud rate: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } // Set up Controller Request Struct. @@ -292,14 +291,14 @@ int main(void) if (error != E_NO_ERROR) { PRINT("RISC-V: Semaphore for RISC-V core is busy: %d\n", error); LED_On(LED_GREEN); - while(1); + while (1) {} } error = MXC_SEMA_GetSema(SEMA_IDX_RISCV); if (error != E_NO_ERROR) { PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); LED_On(LED_RED); - while(1); + while (1) {} } else { PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); } @@ -318,14 +317,14 @@ int main(void) if (error != E_NO_ERROR) { PRINT("RISC-V: Error starting the controller: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } error = Game_2048_Init(&new_block_idx_location); if (error != E_NO_ERROR) { PRINT("RISC-V: Error starting game: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } // Send starting grid to ARM core. @@ -365,7 +364,7 @@ int main(void) PRINT("RISC-V: Blocks did not move.\n"); } - // Check state of game. + // Get the state of the game after finishing latest move. game_state_t game_state = Game_2048_CheckState(); // These functions must be called before PRINT_GRID() and SendGridToARMCore() @@ -393,14 +392,14 @@ int main(void) PRINT("RISCV: Congratulations, you win!\n"); PRINT("RISCV: Ending game.\n"); - while(1); + while (1) {} } else if (game_state == GAME_OVER) { // Signal ARM to finish final display update. MXC_SEMA_FreeSema(SEMA_IDX_ARM); PRINT("RISCV: Game Over. Nice try! Better luck next time.\n"); PRINT("RISCV: Ending game.\n"); - while(1); + while (1) {} } // Listen for next keypress. @@ -410,7 +409,7 @@ int main(void) if (error != E_NO_ERROR) { PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); LED_On(LED_RED); - while(1); + while (1) {} } // Signal ARM to update display. diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index be8a1ef35fe..4141092ddae 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -167,7 +167,7 @@ int Game_2048_Init(uint8_t *new_block_location_idx) } // Should never reach here since we cleared the grid earlier in the function. - if(add_new_block(true, new_block_location_idx) == false) { + if (add_new_block(true, new_block_location_idx) == false) { return E_BAD_STATE; } @@ -208,11 +208,11 @@ inline static bool row_logic_left(void) // If there's only one valid block, don't bother with the same-value pair logic. if (temp_col_num == 1) { MAIN_2048_GRID[row][0] = temp_row[0]; - + // Check if the single block moved left. if (prev_row[0] != MAIN_2048_GRID[row][0]) { blocks_moved = true; - + // Represent the state of the original block location as deleted for // display. for (int col = 3; col >= 0; col--) { @@ -491,9 +491,8 @@ inline static bool column_logic_up(void) static bool column_logic_down(void) { bool blocks_moved = false; - + for (int col = 0; col < 4; col++) { - // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. if (COLUMN_SUM(col) == 0) { continue; @@ -653,7 +652,7 @@ bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx printf("UP\n"); blocks_moved = column_logic_up(); break; - + case INPUT_DOWN: printf("DOWN\n"); blocks_moved = column_logic_down(); @@ -663,12 +662,12 @@ bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx printf("LEFT\n"); blocks_moved = row_logic_left(); break; - + case INPUT_RIGHT: printf("RIGHT\n"); blocks_moved = row_logic_right(); break; - + // Should never reach here. default: return false; From 1b74b093db52f630b8451400bdf5dccc14532a7d Mon Sep 17 00:00:00 2001 From: sihyung-maxim Date: Tue, 17 Sep 2024 16:45:12 +0000 Subject: [PATCH 17/27] clang-format bot reformatting. --- .../MAX32655/Demo_2048/ARM/inc/graphics.h | 178 +- .../MAX32655/Demo_2048/ARM/inc/ipc_defines.h | 15 +- Examples/MAX32655/Demo_2048/ARM/main.c | 69 +- .../Demo_2048/ARM/resources/all_imgs.c | 123340 ++++++++++++++- .../MAX32655/Demo_2048/ARM/resources/bitmap.h | 12 +- .../MAX32655/Demo_2048/ARM/src/graphics.c | 844 +- .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 7 +- .../Demo_2048/RISCV/inc/ipc_defines.h | 15 +- Examples/MAX32655/Demo_2048/RISCV/main.c | 88 +- .../MAX32655/Demo_2048/RISCV/src/controller.c | 4 - .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 80 +- Libraries/MiscDrivers/Display/tft_ssd2119.c | 35 +- Libraries/MiscDrivers/Display/tft_ssd2119.h | 11 +- .../device/audio_4_channel_mic/src/main.c | 602 +- .../audio_4_channel_mic/src/tusb_config.h | 76 +- .../audio_4_channel_mic/src/usb_descriptors.c | 157 +- .../src/FreeRTOSConfig/FreeRTOSConfig.h | 166 +- .../src/freertos_hook.c | 81 +- .../audio_4_channel_mic_freertos/src/main.c | 706 +- .../src/tusb_config.h | 78 +- .../src/usb_descriptors.c | 157 +- .../examples/device/audio_test/src/main.c | 504 +- .../device/audio_test/src/tusb_config.h | 60 +- .../device/audio_test/src/usb_descriptors.c | 155 +- .../src/FreeRTOSConfig/FreeRTOSConfig.h | 166 +- .../audio_test_freertos/src/freertos_hook.c | 81 +- .../device/audio_test_freertos/src/main.c | 594 +- .../audio_test_freertos/src/tusb_config.h | 62 +- .../audio_test_freertos/src/usb_descriptors.c | 155 +- .../device/audio_test_multi_rate/src/main.c | 593 +- .../audio_test_multi_rate/src/tusb_config.h | 75 +- .../src/usb_descriptors.c | 153 +- .../src/usb_descriptors.h | 164 +- .../examples/device/board_test/src/main.c | 51 +- .../device/board_test/src/tusb_config.h | 16 +- .../examples/device/cdc_dual_ports/src/main.c | 161 +- .../device/cdc_dual_ports/src/tusb_config.h | 36 +- .../cdc_dual_ports/src/usb_descriptors.c | 275 +- .../examples/device/cdc_msc/src/main.c | 141 +- .../examples/device/cdc_msc/src/msc_disk.c | 316 +- .../examples/device/cdc_msc/src/tusb_config.h | 38 +- .../device/cdc_msc/src/usb_descriptors.c | 267 +- .../src/FreeRTOSConfig/FreeRTOSConfig.h | 166 +- .../cdc_msc_freertos/src/freertos_hook.c | 81 +- .../device/cdc_msc_freertos/src/main.c | 260 +- .../device/cdc_msc_freertos/src/msc_disk.c | 294 +- .../device/cdc_msc_freertos/src/tusb_config.h | 40 +- .../cdc_msc_freertos/src/usb_descriptors.c | 276 +- .../examples/device/cdc_uac2/src/cdc_app.c | 54 +- .../examples/device/cdc_uac2/src/common.h | 38 +- .../examples/device/cdc_uac2/src/main.c | 33 +- .../device/cdc_uac2/src/tusb_config.h | 121 +- .../examples/device/cdc_uac2/src/uac2_app.c | 367 +- .../device/cdc_uac2/src/usb_descriptors.c | 218 +- .../device/cdc_uac2/src/usb_descriptors.h | 303 +- .../tinyusb/examples/device/dfu/src/main.c | 133 +- .../examples/device/dfu/src/tusb_config.h | 24 +- .../examples/device/dfu/src/usb_descriptors.c | 157 +- .../examples/device/dfu_runtime/src/main.c | 58 +- .../device/dfu_runtime/src/tusb_config.h | 20 +- .../device/dfu_runtime/src/usb_descriptors.c | 154 +- .../device/dynamic_configuration/src/main.c | 176 +- .../dynamic_configuration/src/msc_disk.c | 294 +- .../dynamic_configuration/src/tusb_config.h | 40 +- .../src/usb_descriptors.c | 303 +- .../device/hid_boot_interface/src/main.c | 255 +- .../hid_boot_interface/src/tusb_config.h | 32 +- .../hid_boot_interface/src/usb_descriptors.c | 178 +- .../hid_boot_interface/src/usb_descriptors.h | 7 +- .../examples/device/hid_composite/src/main.c | 340 +- .../device/hid_composite/src/tusb_config.h | 32 +- .../hid_composite/src/usb_descriptors.c | 218 +- .../hid_composite/src/usb_descriptors.h | 13 +- .../src/FreeRTOSConfig/FreeRTOSConfig.h | 166 +- .../src/freertos_hook.c | 81 +- .../device/hid_composite_freertos/src/main.c | 424 +- .../hid_composite_freertos/src/tusb_config.h | 34 +- .../src/usb_descriptors.c | 216 +- .../src/usb_descriptors.h | 13 +- .../device/hid_generic_inout/src/main.c | 88 +- .../hid_generic_inout/src/tusb_config.h | 32 +- .../hid_generic_inout/src/usb_descriptors.c | 161 +- .../device/hid_multiple_interface/src/main.c | 184 +- .../hid_multiple_interface/src/tusb_config.h | 32 +- .../src/usb_descriptors.c | 190 +- .../examples/device/midi_test/src/main.c | 121 +- .../device/midi_test/src/tusb_config.h | 34 +- .../device/midi_test/src/usb_descriptors.c | 193 +- .../examples/device/msc_dual_lun/src/main.c | 73 +- .../device/msc_dual_lun/src/msc_disk_dual.c | 436 +- .../device/msc_dual_lun/src/tusb_config.h | 32 +- .../device/msc_dual_lun/src/usb_descriptors.c | 203 +- .../device/net_lwip_webserver/src/arch/cc.h | 19 +- .../device/net_lwip_webserver/src/lwipopts.h | 54 +- .../device/net_lwip_webserver/src/main.c | 247 +- .../net_lwip_webserver/src/tusb_config.h | 36 +- .../net_lwip_webserver/src/usb_descriptors.c | 261 +- .../examples/device/uac2_headset/src/main.c | 564 +- .../device/uac2_headset/src/tusb_config.h | 116 +- .../device/uac2_headset/src/usb_descriptors.c | 195 +- .../device/uac2_headset/src/usb_descriptors.h | 306 +- .../tinyusb/examples/device/usbtmc/src/main.c | 99 +- .../examples/device/usbtmc/src/tusb_config.h | 26 +- .../device/usbtmc/src/usb_descriptors.c | 229 +- .../examples/device/usbtmc/src/usbtmc_app.c | 305 +- .../device/video_capture/src/images.h | 27106 +++- .../examples/device/video_capture/src/main.c | 398 +- .../device/video_capture/src/tusb_config.h | 28 +- .../video_capture/src/usb_descriptors.c | 263 +- .../video_capture/src/usb_descriptors.h | 399 +- .../device/video_capture_2ch/src/images.h | 27090 +++- .../device/video_capture_2ch/src/main.c | 423 +- .../video_capture_2ch/src/tusb_config.h | 28 +- .../video_capture_2ch/src/usb_descriptors.c | 299 +- .../video_capture_2ch/src/usb_descriptors.h | 399 +- .../examples/device/webusb_serial/src/main.c | 266 +- .../device/webusb_serial/src/tusb_config.h | 35 +- .../webusb_serial/src/usb_descriptors.c | 300 +- .../webusb_serial/src/usb_descriptors.h | 6 +- Libraries/tinyusb/hw/bsp/ansi_escape.h | 66 +- Libraries/tinyusb/hw/bsp/board.c | 95 +- Libraries/tinyusb/hw/bsp/board_api.h | 137 +- Libraries/tinyusb/hw/bsp/board_mcu.h | 108 +- Libraries/tinyusb/src/class/audio/audio.h | 1268 +- .../tinyusb/src/class/audio/audio_device.c | 3836 +- .../tinyusb/src/class/audio/audio_device.h | 277 +- Libraries/tinyusb/src/class/bth/bth_device.c | 323 +- Libraries/tinyusb/src/class/bth/bth_device.h | 29 +- Libraries/tinyusb/src/class/cdc/cdc.h | 562 +- Libraries/tinyusb/src/class/cdc/cdc_device.c | 653 +- Libraries/tinyusb/src/class/cdc/cdc_device.h | 135 +- Libraries/tinyusb/src/class/cdc/cdc_host.c | 2515 +- Libraries/tinyusb/src/class/cdc/cdc_host.h | 64 +- Libraries/tinyusb/src/class/cdc/cdc_rndis.h | 362 +- .../tinyusb/src/class/cdc/cdc_rndis_host.c | 283 +- .../tinyusb/src/class/cdc/cdc_rndis_host.h | 17 +- .../tinyusb/src/class/cdc/serial/ch34x.h | 67 +- .../tinyusb/src/class/cdc/serial/cp210x.h | 50 +- .../tinyusb/src/class/cdc/serial/ftdi_sio.h | 74 +- Libraries/tinyusb/src/class/dfu/dfu.h | 105 +- Libraries/tinyusb/src/class/dfu/dfu_device.c | 641 +- Libraries/tinyusb/src/class/dfu/dfu_device.h | 24 +- .../tinyusb/src/class/dfu/dfu_rt_device.c | 114 +- .../tinyusb/src/class/dfu/dfu_rt_device.h | 14 +- Libraries/tinyusb/src/class/hid/hid.h | 1867 +- Libraries/tinyusb/src/class/hid/hid_device.c | 587 +- Libraries/tinyusb/src/class/hid/hid_device.h | 731 +- Libraries/tinyusb/src/class/hid/hid_host.c | 1132 +- Libraries/tinyusb/src/class/hid/hid_host.h | 48 +- Libraries/tinyusb/src/class/midi/midi.h | 255 +- .../tinyusb/src/class/midi/midi_device.c | 811 +- .../tinyusb/src/class/midi/midi_device.h | 86 +- Libraries/tinyusb/src/class/msc/msc.h | 466 +- Libraries/tinyusb/src/class/msc/msc_device.c | 1421 +- Libraries/tinyusb/src/class/msc/msc_device.h | 48 +- Libraries/tinyusb/src/class/msc/msc_host.c | 648 +- Libraries/tinyusb/src/class/msc/msc_host.h | 52 +- .../tinyusb/src/class/net/ecm_rndis_device.c | 541 +- Libraries/tinyusb/src/class/net/ncm.h | 119 +- Libraries/tinyusb/src/class/net/ncm_device.c | 1069 +- Libraries/tinyusb/src/class/net/net_device.h | 27 +- Libraries/tinyusb/src/class/usbtmc/usbtmc.h | 364 +- .../tinyusb/src/class/usbtmc/usbtmc_device.c | 1250 +- .../tinyusb/src/class/usbtmc/usbtmc_device.h | 42 +- .../tinyusb/src/class/vendor/vendor_device.c | 371 +- .../tinyusb/src/class/vendor/vendor_device.h | 88 +- .../tinyusb/src/class/vendor/vendor_host.c | 112 +- .../tinyusb/src/class/vendor/vendor_host.h | 30 +- Libraries/tinyusb/src/class/video/video.h | 894 +- .../tinyusb/src/class/video/video_device.c | 1954 +- .../tinyusb/src/class/video/video_device.h | 17 +- Libraries/tinyusb/src/common/tusb_common.h | 355 +- Libraries/tinyusb/src/common/tusb_compiler.h | 397 +- Libraries/tinyusb/src/common/tusb_debug.h | 137 +- Libraries/tinyusb/src/common/tusb_fifo.c | 967 +- Libraries/tinyusb/src/common/tusb_fifo.h | 95 +- Libraries/tinyusb/src/common/tusb_mcu.h | 510 +- Libraries/tinyusb/src/common/tusb_private.h | 140 +- Libraries/tinyusb/src/common/tusb_types.h | 642 +- Libraries/tinyusb/src/common/tusb_verify.h | 82 +- Libraries/tinyusb/src/device/dcd.h | 166 +- Libraries/tinyusb/src/device/usbd.c | 2041 +- Libraries/tinyusb/src/device/usbd.h | 1034 +- Libraries/tinyusb/src/device/usbd_control.c | 239 +- Libraries/tinyusb/src/device/usbd_pvt.h | 48 +- Libraries/tinyusb/src/osal/osal.h | 40 +- Libraries/tinyusb/src/osal/osal_freertos.h | 208 +- Libraries/tinyusb/src/osal/osal_mynewt.h | 181 +- Libraries/tinyusb/src/osal/osal_none.h | 161 +- Libraries/tinyusb/src/osal/osal_pico.h | 143 +- Libraries/tinyusb/src/osal/osal_rtthread.h | 100 +- Libraries/tinyusb/src/osal/osal_rtx4.h | 179 +- .../src/portable/mentor/musb/dcd_musb.c | 1267 +- .../src/portable/mentor/musb/musb_max32.h | 136 +- .../src/portable/mentor/musb/musb_type.h | 794 +- Libraries/tinyusb/src/tusb.c | 610 +- Libraries/tinyusb/src/tusb.h | 119 +- Libraries/tinyusb/src/tusb_option.h | 452 +- 198 files changed, 196004 insertions(+), 39767 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index 36db538a4ae..c53bb87bf89 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -25,110 +25,129 @@ /* **** Definitions **** */ -#define SCREEN_ORIENTATION (SCREEN_ROTATE) +#define SCREEN_ORIENTATION (SCREEN_ROTATE) // Will be different from actual screen dimensions depending on screen orientation -#define SCREEN_WIDTH (320) -#define SCREEN_HEIGHT (240) +#define SCREEN_WIDTH (320) +#define SCREEN_HEIGHT (240) // TODO(SW): Automatically calculate these sizes based on screen dimensions. // Set the dimensions of all the models. -#define GRID_OFFSET_X (80) -#define GRID_OFFSET_Y (0) -#define GRID_LENGTH (224) -#define GRID_SPACING (8) // spacing between edge of "screen to grid". +#define GRID_OFFSET_X (80) +#define GRID_OFFSET_Y (0) +#define GRID_LENGTH (224) +#define GRID_SPACING (8) // spacing between edge of "screen to grid". -#define BLOCK_LENGTH (51) -#define BLOCK_SPACING (4) // spacing between edge of "grid to block" and "block to block". +#define BLOCK_LENGTH (51) +#define BLOCK_SPACING (4) // spacing between edge of "grid to block" and "block to block". -#define RADIUS_FOR_CORNERS (3) +#define RADIUS_FOR_CORNERS (3) -#define CFS_LOGO_OFFSET_X (4) -#define CFS_LOGO_OFFSET_Y (0) +#define CFS_LOGO_OFFSET_X (4) +#define CFS_LOGO_OFFSET_Y (0) -#define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) -#define GAME_LOGO_OFFSET_Y (80) +#define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) +#define GAME_LOGO_OFFSET_Y (80) // Position settings for timer. -#define TIME_OFFSET_Y (215) -#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - 1) -#define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels -#define TIME_DIGIT3_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) -#define TIME_DIGIT2_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) -#define TIME_DIGIT1_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) -#define TIME_DIGIT0_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) +#define TIME_OFFSET_Y (215) +#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - 1) +#define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels +#define TIME_DIGIT3_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - \ + (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT2_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - \ + (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT1_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + \ + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) +#define TIME_DIGIT0_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + \ + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) // Position settings for moves counter. -#define MOVES_DIGITS_OFFSET_Y (160) -#define MOVES_TEXT_OFFSET_Y (MOVES_DIGITS_OFFSET_Y + GAME_TEXT_DIGITS_HEIGHT + 4) // 4 seemed to be appropriate number of pxiels for spacing. -#define MOVES_DIGIT_WIDTH (15) // Max width of digit is 15 pixels. -#define MOVES_DIGITS_OFFSET_X ((GRID_OFFSET_X / 2) - MOVES_DIGIT_WIDTH - (MOVES_DIGIT_WIDTH / 2)) -#define MOVES_TEXT_OFFSET_X ((GRID_OFFSET_X / 2) - (GAME_TEXT_MOVES_WIDTH / 2) + 4) -#define MOVES_DIGIT3_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 0) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT2_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 1) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT1_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT0_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGITS_OFFSET_Y (160) +#define MOVES_TEXT_OFFSET_Y \ + (MOVES_DIGITS_OFFSET_Y + GAME_TEXT_DIGITS_HEIGHT + \ + 4) // 4 seemed to be appropriate number of pxiels for spacing. +#define MOVES_DIGIT_WIDTH (15) // Max width of digit is 15 pixels. +#define MOVES_DIGITS_OFFSET_X ((GRID_OFFSET_X / 2) - MOVES_DIGIT_WIDTH - (MOVES_DIGIT_WIDTH / 2)) +#define MOVES_TEXT_OFFSET_X ((GRID_OFFSET_X / 2) - (GAME_TEXT_MOVES_WIDTH / 2) + 4) +#define MOVES_DIGIT3_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 0) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT2_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 1) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT1_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT0_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) // Position settings for Game Over and You Win boxes, -#define GAME_OVER_BOX_OFFSET_X (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (GAME_OVER_BOX_WIDTH / 2)) -#define GAME_OVER_BOX_OFFSET_Y (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (GAME_OVER_BOX_HEIGHT / 2)) -#define YOU_WIN_BOX_OFFSET_X (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (YOU_WIN_BOX_WIDTH / 2)) -#define YOU_WIN_BOX_OFFSET_Y (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (YOU_WIN_BOX_HEIGHT / 2)) +#define GAME_OVER_BOX_OFFSET_X \ + (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (GAME_OVER_BOX_WIDTH / 2)) +#define GAME_OVER_BOX_OFFSET_Y \ + (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (GAME_OVER_BOX_HEIGHT / 2)) +#define YOU_WIN_BOX_OFFSET_X \ + (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (YOU_WIN_BOX_WIDTH / 2)) +#define YOU_WIN_BOX_OFFSET_Y \ + (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (YOU_WIN_BOX_HEIGHT / 2)) // Colors 16-bit RGB565. -#define RGB565_WHITE (0xFFFF) -#define RGB565_BLACK (0x0000) -#define RGB565_DARK_GRAY (0x3084) -#define RGB565_LIGHT_GRAY (0x5AEB) +#define RGB565_WHITE (0xFFFF) +#define RGB565_BLACK (0x0000) +#define RGB565_DARK_GRAY (0x3084) +#define RGB565_LIGHT_GRAY (0x5AEB) // Block colors (2-2048) are taken from original game: https://github.com/gabrielecirulli/2048?tab=readme-ov-file // Open-source under MIT License. -#define RGB565_BLOCK_2 (0xEF3B) -#define RGB565_BLOCK_4 (0xEF19) -#define RGB565_BLOCK_8 (0xF58F) -#define RGB565_BLOCK_16 (0xF4AC) -#define RGB565_BLOCK_32 (0xF3EB) -#define RGB565_BLOCK_64 (0xF2E7) -#define RGB565_BLOCK_128 (0xEE6E) -#define RGB565_BLOCK_256 (0xEE6C) -#define RGB565_BLOCK_512 (0xEE4A) -#define RGB565_BLOCK_1024 (0xEE27) -#define RGB565_BLOCK_2048 (0xEE05) +#define RGB565_BLOCK_2 (0xEF3B) +#define RGB565_BLOCK_4 (0xEF19) +#define RGB565_BLOCK_8 (0xF58F) +#define RGB565_BLOCK_16 (0xF4AC) +#define RGB565_BLOCK_32 (0xF3EB) +#define RGB565_BLOCK_64 (0xF2E7) +#define RGB565_BLOCK_128 (0xEE6E) +#define RGB565_BLOCK_256 (0xEE6C) +#define RGB565_BLOCK_512 (0xEE4A) +#define RGB565_BLOCK_1024 (0xEE27) +#define RGB565_BLOCK_2048 (0xEE05) // Unused, but left here if anyone wants to expand features. -#define RGB565_BLOCK_4096 (0xFDF7) -#define RGB565_BLOCK_8192 (0xF38E) -#define RGB565_BLOCK_16384 (0xFC58) -#define RGB565_BLOCK_32768 (0xB43C) -#define RGB565_BLOCK_65536 (0x8BF9) -#define RGB565_BLOCK_131072 (0x6C3C) +#define RGB565_BLOCK_4096 (0xFDF7) +#define RGB565_BLOCK_8192 (0xF38E) +#define RGB565_BLOCK_16384 (0xFC58) +#define RGB565_BLOCK_32768 (0xB43C) +#define RGB565_BLOCK_65536 (0x8BF9) +#define RGB565_BLOCK_131072 (0x6C3C) // For my non-American English Speakers :) -#define RGB565_DARK_GREY RGB565_DARK_GRAY -#define RGB565_LIGHT_GREY RGB565_LIGHT_GRAY +#define RGB565_DARK_GREY RGB565_DARK_GRAY +#define RGB565_LIGHT_GREY RGB565_LIGHT_GRAY // Formatted Colors -#define FORMAT_RGB565_TO_PACKET(RGB) (0x01000100 | ((RGB & 0x00FF) << 16) | ((RGB & 0xFF00) >> 8)) +#define FORMAT_RGB565_TO_PACKET(RGB) (0x01000100 | ((RGB & 0x00FF) << 16) | ((RGB & 0xFF00) >> 8)) // 'F_' prefix stands for "formatted into packets". -#define F_BACKGROUND_COLOR FORMAT_RGB565_TO_PACKET(RGB565_WHITE) -#define F_GRID_COLOR FORMAT_RGB565_TO_PACKET(RGB565_DARK_GRAY) -#define F_EMPTY_BLOCK_COLOR FORMAT_RGB565_TO_PACKET(RGB565_LIGHT_GRAY) - -#define RGB_BLOCK_COLOR(block) ((block) == 2 ? RGB565_BLOCK_2 \ - : (block) == 4 ? RGB565_BLOCK_4 \ - : (block) == 8 ? RGB565_BLOCK_8 \ - : (block) == 16 ? RGB565_BLOCK_16 \ - : (block) == 32 ? RGB565_BLOCK_32 \ - : (block) == 64 ? RGB565_BLOCK_64 \ - : (block) == 128 ? RGB565_BLOCK_128 \ - : (block) == 256 ? RGB565_BLOCK_256 \ - : (block) == 512 ? RGB565_BLOCK_512 \ - : (block) == 1024 ? RGB565_BLOCK_1024 \ - : (block) == 2048 ? RGB565_BLOCK_2048 \ - : BLOCK_2_DIGIT_PX_HEIGHT) - -#define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) +#define F_BACKGROUND_COLOR FORMAT_RGB565_TO_PACKET(RGB565_WHITE) +#define F_GRID_COLOR FORMAT_RGB565_TO_PACKET(RGB565_DARK_GRAY) +#define F_EMPTY_BLOCK_COLOR FORMAT_RGB565_TO_PACKET(RGB565_LIGHT_GRAY) + +#define RGB_BLOCK_COLOR(block) \ + ((block) == 2 ? RGB565_BLOCK_2 : \ + (block) == 4 ? RGB565_BLOCK_4 : \ + (block) == 8 ? RGB565_BLOCK_8 : \ + (block) == 16 ? RGB565_BLOCK_16 : \ + (block) == 32 ? RGB565_BLOCK_32 : \ + (block) == 64 ? RGB565_BLOCK_64 : \ + (block) == 128 ? RGB565_BLOCK_128 : \ + (block) == 256 ? RGB565_BLOCK_256 : \ + (block) == 512 ? RGB565_BLOCK_512 : \ + (block) == 1024 ? RGB565_BLOCK_1024 : \ + (block) == 2048 ? RGB565_BLOCK_2048 : \ + BLOCK_2_DIGIT_PX_HEIGHT) + +#define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) /** * These enums help keep track of what blocks were erased, @@ -136,12 +155,7 @@ * the animation of for the display. * IMPORTANT: Sync these commands with the RISCV core. */ -typedef enum { - EMPTY = 0, - ERASE = 1, - COMBINE = 2, - UNMOVED = 3 -} block_state_t; +typedef enum { EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; /** * These enums help keep track of the game state. diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h index 69e7ed870ce..b32456265eb 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h @@ -49,12 +49,13 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. -#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) -#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX \ + (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) #endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 2380ced7550..c2b3d97000f 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -59,12 +59,12 @@ extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes // Rename boxes for readability. -// Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. +// Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. #define SEMA_RISCV_MAILBOX mxcSemaBox0 #define SEMA_ARM_MAILBOX mxcSemaBox1 -uint32_t ARM_GRID_COPY[4][4] = {0}; -block_state_t ARM_GRID_COPY_STATE[4][4] = {0}; +uint32_t ARM_GRID_COPY[4][4] = { 0 }; +block_state_t ARM_GRID_COPY_STATE[4][4] = { 0 }; uint32_t MOVES_COUNT = 0; @@ -78,11 +78,11 @@ void ReceiveGridFromRISCVCore(void) for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { ARM_GRID_COPY[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+1] << (8 * 1); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+2] << (8 * 2); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+3] << (8 * 3); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 1] << (8 * 1); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 2] << (8 * 2); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 3] << (8 * 3); - i+=4; + i += 4; } } @@ -101,24 +101,24 @@ graphics_slide_direction_t ReceiveDirectionFromRISCVCore(void) { // Add more direction keys here. switch (SEMA_ARM_MAILBOX->payload[MAILBOX_KEYPRESS_IDX]) { - // UP - case 'w': - return GRAPHICS_SLIDE_DIR_UP; + // UP + case 'w': + return GRAPHICS_SLIDE_DIR_UP; - // DOWN - case 's': - return GRAPHICS_SLIDE_DIR_DOWN; + // DOWN + case 's': + return GRAPHICS_SLIDE_DIR_DOWN; - // LEFT - case 'a': - return GRAPHICS_SLIDE_DIR_LEFT; + // LEFT + case 'a': + return GRAPHICS_SLIDE_DIR_LEFT; - // RIGHT - case 'd': - return GRAPHICS_SLIDE_DIR_RIGHT; + // RIGHT + case 'd': + return GRAPHICS_SLIDE_DIR_RIGHT; - default: - return -1; + default: + return -1; } } @@ -145,9 +145,9 @@ uint32_t ReceiveMovesCountFromRISCVCore(void) { uint32_t moves_count = 0; moves_count = SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] << (8 * 0); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+1] << (8 * 1); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+2] << (8 * 2); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+3] << (8 * 3); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 1] << (8 * 1); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 2] << (8 * 2); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 3] << (8 * 3); return moves_count; } @@ -163,7 +163,7 @@ int main(void) // - Use IPO for System Clock for fastest speed. (Done in SystemInit) // - Enable Internal Cache. (Done in SystemInit) - // Speed up console UART to match player controller baud rate which have shared ports + // Speed up console UART to match player controller baud rate which have shared ports // (PC Keyboard via Console UART). error = MXC_UART_Init(MXC_UART_GET_UART(CONSOLE_UART), RISCV_CONTROLLER_BAUD, MXC_UART_APB_CLK); if (error != E_NO_ERROR) { @@ -173,7 +173,7 @@ int main(void) } PRINT("\n\n*******************************************************************************\n"); - + // ARM Initialization. PRINT("ARM: Starting ARM Initialization.\n\n"); @@ -185,7 +185,7 @@ int main(void) // Prepare ARM semaphore. MXC_SEMA_Init(); - + // Check status of ARM semaphore. error = MXC_SEMA_CheckSema(SEMA_IDX_ARM); if (error != E_NO_ERROR) { @@ -196,11 +196,13 @@ int main(void) error = MXC_SEMA_GetSema(SEMA_IDX_ARM); if (error != E_NO_ERROR) { - PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); + PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_ARM]); LED_On(LED_RED); while (1) {} } else { - PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); + PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_ARM]); } // Backup Delay for 1 second before starting RISCV core. @@ -302,7 +304,9 @@ int main(void) // Add new blocks. for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { - if ((ARM_GRID_COPY[row][col]) != 0 && (ARM_GRID_COPY_STATE[row][col] != UNMOVED) && (ARM_GRID_COPY_STATE[row][col] != COMBINE)) { + if ((ARM_GRID_COPY[row][col]) != 0 && + (ARM_GRID_COPY_STATE[row][col] != UNMOVED) && + (ARM_GRID_COPY_STATE[row][col] != COMBINE)) { // Don't draw newly spawned block. // new_block_row and new_block_col will be set to 0xFFFF for invalid // location if new block was not added. @@ -315,10 +319,11 @@ int main(void) // Add combined blocks. Graphics_CombineBlocks(ARM_GRID_COPY, ARM_GRID_COPY_STATE); - + // Add new block with spawn animation. if (new_block_added == true) { - Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); + Graphics_AddNewBlock(new_block_row, new_block_col, + ARM_GRID_COPY[new_block_row][new_block_col]); } game_state = ReceiveGameStateFromRISCVCore(); diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c index 1536bb85377..b2091035ae7 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c +++ b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c @@ -14,7416 +14,115960 @@ * See the License for the specific language governing permissions and * limitations under the License. * - ******************************************************************************/ + ******************************************************************************/ -__attribute__ ((section(".bin_storage_img"))) __attribute__ ((__used__)) -const unsigned char imgs_arr[ ] = { +__attribute__((section(".bin_storage_img"))) __attribute__((__used__)) +const unsigned char imgs_arr[] = { -/* + /* Header */ -0x18,0x00,0x00,0x00,0x1D,0x04,0x00,0x00,0x16,0x0A,0x00,0x00,0x01,0x00,0x00, -0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x1D, + 0x04, + 0x00, + 0x00, + 0x16, + 0x0A, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, -/* + /* Palette */ -0x01, -0x1D,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9B,0xA5,0x18,0x00,0x70,0x73,0x71, -0x00,0x33,0x35,0x3B,0x00,0x20,0xE8,0xD9,0x00,0x03,0x02,0xD5,0x00,0x00,0xA9,0x00, -0x00,0x6F,0x6E,0x7A,0x00,0xFF,0xFD,0xFF,0x00,0x76,0x75,0x76,0x00,0x95,0x94,0x95, -0x00,0x6A,0x66,0x69,0x00,0x7A,0x76,0x78,0x00,0x76,0x72,0x74,0x00,0x75,0x71,0x73, -0x00,0x71,0x6F,0x6F,0x00,0x76,0x75,0x75,0x00,0x75,0x74,0x74,0x00,0x74,0x73,0x73, -0x00,0x73,0x72,0x72,0x00,0x72,0x71,0x71,0x00,0x91,0x90,0x90,0x00,0x86,0x85,0x85, -0x00,0x67,0x65,0x64,0x00,0x63,0x61,0x60,0x00,0x70,0x6E,0x6D,0x00,0x6A,0x68,0x66, -0x00,0x77,0x76,0x75,0x00,0x71,0x70,0x6F,0x00,0x6E,0x6D,0x6C,0x00,0x6D,0x6C,0x6B, -0x00,0x6C,0x6B,0x6A,0x00,0x90,0x8F,0x8E,0x00,0x88,0x87,0x86,0x00,0x77,0x74,0x70, -0x00,0x76,0x73,0x6F,0x00,0x75,0x72,0x6E,0x00,0x4F,0x4D,0x4A,0x00,0x5A,0x58,0x55, -0x00,0x58,0x56,0x53,0x00,0x56,0x54,0x51,0x00,0x3F,0x3D,0x39,0x00,0x44,0x42,0x3E, -0x00,0x47,0x45,0x41,0x00,0x4C,0x4A,0x46,0x00,0x4B,0x49,0x45,0x00,0x4A,0x48,0x44, -0x00,0x4E,0x4C,0x48,0x00,0x4D,0x4B,0x47,0x00,0x6B,0x6A,0x68,0x00,0x68,0x67,0x65, -0x00,0x66,0x65,0x63,0x00,0x64,0x63,0x61,0x00,0x74,0x73,0x71,0x00,0x73,0x72,0x70, -0x00,0x42,0x40,0x3B,0x00,0x41,0x3F,0x3A,0x00,0x43,0x41,0x3C,0x00,0x46,0x44,0x3F, -0x00,0x5D,0x5C,0x59,0x00,0x5B,0x5A,0x57,0x00,0x61,0x60,0x5D,0x00,0x5F,0x5E,0x5B, -0x00,0x76,0x75,0x72,0x00,0x72,0x71,0x6E,0x00,0x53,0x52,0x4E,0x00,0x51,0x50,0x4C, -0x00,0x79,0x78,0x74,0x00,0x48,0x47,0x42,0x00,0xFD,0xFC,0xF7,0x00,0x77,0x76,0x6B, -0x00,0x80,0x7F,0x71,0x00,0x9D,0xA0,0x19,0x00,0x93,0x95,0x1E,0x00,0xA3,0xA6,0x25, -0x00,0xF9,0xF9,0xED,0x00,0x76,0x76,0x73,0x00,0x79,0x79,0x77,0x00,0x89,0x89,0x87, -0x00,0x81,0x81,0x7F,0x00,0x4C,0x4C,0x4B,0x00,0x4A,0x4A,0x49,0x00,0xFE,0xFE,0xFC, -0x00,0xFF,0xFF,0xFE,0x00,0xE2,0xE2,0xE1,0x00,0xC2,0xC2,0xC1,0x00,0xB7,0xB7,0xB6, -0x00,0xAE,0xAE,0xAD,0x00,0xA7,0xA7,0xA6,0x00,0xA1,0xA1,0xA0,0x00,0x9C,0x9C,0x9B, -0x00,0x9A,0x9A,0x99,0x00,0x97,0x97,0x96,0x00,0x8E,0x8E,0x8D,0x00,0x8D,0x8D,0x8C, -0x00,0x8A,0x8A,0x89,0x00,0x83,0x83,0x82,0x00,0xA6,0xAE,0x00,0x00,0xA5,0xAB,0x00, -0x00,0xA2,0xA6,0x00,0x00,0xA0,0xA4,0x00,0x00,0x95,0x9C,0x01,0x00,0xA6,0xAA,0x0A, -0x00,0x9F,0xA6,0x0B,0x00,0x89,0x8F,0x0E,0x00,0xA9,0xAD,0x13,0x00,0xAD,0xB1,0x1D, -0x00,0x9C,0xA2,0x1F,0x00,0xB1,0xB5,0x25,0x00,0xBD,0xC3,0x41,0x00,0xB5,0xB9,0x44, -0x00,0xC3,0xC8,0x59,0x00,0x83,0x85,0x4B,0x00,0xCB,0xCF,0x79,0x00,0x8B,0x8D,0x56, -0x00,0x7D,0x7E,0x59,0x00,0xDB,0xDE,0x9D,0x00,0xE4,0xE6,0xB7,0x00,0xA9,0xB2,0x00, -0x00,0xAF,0xB8,0x14,0x00,0x9D,0xA6,0x13,0x00,0x9C,0xA5,0x15,0x00,0x9B,0xA5,0x16, -0x00,0x99,0xA2,0x17,0x00,0x9A,0xA3,0x19,0x00,0x9E,0xA7,0x1D,0x00,0xA0,0xA9,0x20, -0x00,0x74,0x7A,0x1A,0x00,0xB5,0xBC,0x2B,0x00,0xAE,0xB4,0x36,0x00,0x9A,0xA0,0x31, -0x00,0x93,0x97,0x46,0x00,0x97,0x9A,0x67,0x00,0xA8,0xAB,0x77,0x00,0x84,0x86,0x65, -0x00,0xEC,0xEE,0xCC,0x00,0xF4,0xF5,0xE0,0x00,0x9C,0xA6,0x18,0x00,0x91,0x99,0x2C, -0x00,0x60,0x65,0x24,0x00,0x6A,0x6C,0x56,0x00,0x77,0x79,0x62,0x00,0x9C,0xAB,0x15, -0x00,0xA5,0xB5,0x2B,0x00,0x9E,0xAD,0x2C,0x00,0x8A,0x93,0x37,0x00,0x7C,0x84,0x3D, -0x00,0x51,0x55,0x2F,0x00,0x4C,0x4F,0x2F,0x00,0x9C,0x9F,0x81,0x00,0x8F,0xA2,0x15, -0x00,0xAF,0xC1,0x29,0x00,0xAA,0xBC,0x2A,0x00,0xA7,0xB8,0x2B,0x00,0xA4,0xB5,0x2B, -0x00,0xA3,0xB3,0x2C,0x00,0x99,0xA9,0x35,0x00,0x45,0x48,0x32,0x00,0xA6,0xBA,0x32, -0x00,0xA2,0xB5,0x33,0x00,0x9D,0xAF,0x34,0x00,0x6A,0x72,0x40,0x00,0x65,0x6B,0x42, -0x00,0x5F,0x65,0x40,0x00,0x48,0x4C,0x31,0x00,0x58,0x5C,0x40,0x00,0x59,0x5C,0x47, -0x00,0x53,0x56,0x44,0x00,0x4F,0x51,0x45,0x00,0x53,0x55,0x49,0x00,0x41,0x44,0x34, -0x00,0x76,0x7A,0x66,0x00,0x48,0x4D,0x38,0x00,0x73,0x76,0x6B,0x00,0x4B,0x4D,0x46, -0x00,0x41,0x45,0x39,0x00,0x73,0x76,0x6D,0x00,0x7C,0x7D,0x7B,0x00,0xFC,0xFD,0xFB, -0x00,0x3A,0x3D,0x39,0x00,0x6D,0x71,0x6C,0x00,0x56,0x59,0x56,0x00,0x75,0x78,0x75, -0x00,0xCC,0xCD,0xCC,0x00,0x50,0xCD,0x59,0x00,0x32,0xC6,0x3E,0x00,0x81,0xDC,0x89, -0x00,0xA8,0xE8,0xAE,0x00,0xC3,0xEF,0xC7,0x00,0x02,0xC0,0x19,0x00,0xE9,0xF9,0xEB, -0x00,0x02,0xD4,0x2E,0x00,0x6A,0x6D,0x6B,0x00,0x74,0x77,0x75,0x00,0x73,0x76,0x74, -0x00,0x71,0x74,0x72,0x00,0x6C,0x6F,0x6D,0x00,0xFC,0xFF,0xFE,0x00,0x26,0xE2,0xD3, -0x00,0x2E,0xD8,0xC9,0x00,0x34,0xD0,0xC1,0x00,0x57,0xE1,0xD5,0x00,0x88,0xE9,0xE1, -0x00,0xBC,0xF3,0xEE,0x00,0xE0,0xF9,0xF7,0x00,0xF1,0xFD,0xFC,0x00,0x1F,0xE9,0xDA, -0x00,0x63,0x65,0x65,0x00,0x51,0x52,0x52,0x00,0x55,0x56,0x56,0x00,0x4B,0x4D,0x4E, -0x00,0x36,0x38,0x3A,0x00,0x42,0x44,0x47,0x00,0x6F,0x71,0x75,0x00,0x4E,0x4F,0x51, -0x00,0x37,0x39,0x3E,0x00,0x3A,0x3C,0x41,0x00,0x34,0x36,0x3C,0x00,0x3F,0x40,0x44, -0x00,0x46,0x47,0x4B,0x00,0x44,0x45,0x49,0x00,0x5A,0x5B,0x5F,0x00,0x79,0x7A,0x7F, -0x00,0xF9,0xFA,0xFF,0x00,0x69,0x6A,0x70,0x00,0x12,0x25,0xF6,0x00,0x0D,0x1A,0xEB, -0x00,0xEE,0xEF,0xFD,0x00,0x09,0x0F,0xE1,0x00,0x27,0x2A,0xE1,0x00,0x38,0x3A,0xE3, -0x00,0x48,0x4A,0xE4,0x00,0x72,0x73,0xEA,0x00,0x7F,0x80,0xEC,0x00,0xA6,0xA6,0xF1, -0x00,0xBD,0xBD,0xF5,0x00,0xD8,0xD8,0xF9,0x00,0x79,0x79,0x84,0x00,0x75,0x75,0x7E, -0x00,0x97,0x97,0x9E,0x00,0x49,0x49,0x4C,0x00,0x58,0x58,0x59,0x00,0xFA,0xFA,0xFA, -0x00,0xF7,0xF7,0xF7,0x00,0xF3,0xF3,0xF3,0x00,0xEA,0xEA,0xEA,0x00,0xD8,0xD8,0xD8, -0x00,0x98,0x98,0x98,0x00,0x92,0x92,0x92,0x00,0x91,0x91,0x91,0x00,0x76,0x76,0x76, -0x00,0x4D,0x4D,0x4D,0x00,0x4B,0x4B,0x4B,0x00,0x4A,0x4A,0x4A,0x00,0x49,0x49,0x49, -0x00, + 0x01, + 0x1D, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x9B, + 0xA5, + 0x18, + 0x00, + 0x70, + 0x73, + 0x71, + 0x00, + 0x33, + 0x35, + 0x3B, + 0x00, + 0x20, + 0xE8, + 0xD9, + 0x00, + 0x03, + 0x02, + 0xD5, + 0x00, + 0x00, + 0xA9, + 0x00, + 0x00, + 0x6F, + 0x6E, + 0x7A, + 0x00, + 0xFF, + 0xFD, + 0xFF, + 0x00, + 0x76, + 0x75, + 0x76, + 0x00, + 0x95, + 0x94, + 0x95, + 0x00, + 0x6A, + 0x66, + 0x69, + 0x00, + 0x7A, + 0x76, + 0x78, + 0x00, + 0x76, + 0x72, + 0x74, + 0x00, + 0x75, + 0x71, + 0x73, + 0x00, + 0x71, + 0x6F, + 0x6F, + 0x00, + 0x76, + 0x75, + 0x75, + 0x00, + 0x75, + 0x74, + 0x74, + 0x00, + 0x74, + 0x73, + 0x73, + 0x00, + 0x73, + 0x72, + 0x72, + 0x00, + 0x72, + 0x71, + 0x71, + 0x00, + 0x91, + 0x90, + 0x90, + 0x00, + 0x86, + 0x85, + 0x85, + 0x00, + 0x67, + 0x65, + 0x64, + 0x00, + 0x63, + 0x61, + 0x60, + 0x00, + 0x70, + 0x6E, + 0x6D, + 0x00, + 0x6A, + 0x68, + 0x66, + 0x00, + 0x77, + 0x76, + 0x75, + 0x00, + 0x71, + 0x70, + 0x6F, + 0x00, + 0x6E, + 0x6D, + 0x6C, + 0x00, + 0x6D, + 0x6C, + 0x6B, + 0x00, + 0x6C, + 0x6B, + 0x6A, + 0x00, + 0x90, + 0x8F, + 0x8E, + 0x00, + 0x88, + 0x87, + 0x86, + 0x00, + 0x77, + 0x74, + 0x70, + 0x00, + 0x76, + 0x73, + 0x6F, + 0x00, + 0x75, + 0x72, + 0x6E, + 0x00, + 0x4F, + 0x4D, + 0x4A, + 0x00, + 0x5A, + 0x58, + 0x55, + 0x00, + 0x58, + 0x56, + 0x53, + 0x00, + 0x56, + 0x54, + 0x51, + 0x00, + 0x3F, + 0x3D, + 0x39, + 0x00, + 0x44, + 0x42, + 0x3E, + 0x00, + 0x47, + 0x45, + 0x41, + 0x00, + 0x4C, + 0x4A, + 0x46, + 0x00, + 0x4B, + 0x49, + 0x45, + 0x00, + 0x4A, + 0x48, + 0x44, + 0x00, + 0x4E, + 0x4C, + 0x48, + 0x00, + 0x4D, + 0x4B, + 0x47, + 0x00, + 0x6B, + 0x6A, + 0x68, + 0x00, + 0x68, + 0x67, + 0x65, + 0x00, + 0x66, + 0x65, + 0x63, + 0x00, + 0x64, + 0x63, + 0x61, + 0x00, + 0x74, + 0x73, + 0x71, + 0x00, + 0x73, + 0x72, + 0x70, + 0x00, + 0x42, + 0x40, + 0x3B, + 0x00, + 0x41, + 0x3F, + 0x3A, + 0x00, + 0x43, + 0x41, + 0x3C, + 0x00, + 0x46, + 0x44, + 0x3F, + 0x00, + 0x5D, + 0x5C, + 0x59, + 0x00, + 0x5B, + 0x5A, + 0x57, + 0x00, + 0x61, + 0x60, + 0x5D, + 0x00, + 0x5F, + 0x5E, + 0x5B, + 0x00, + 0x76, + 0x75, + 0x72, + 0x00, + 0x72, + 0x71, + 0x6E, + 0x00, + 0x53, + 0x52, + 0x4E, + 0x00, + 0x51, + 0x50, + 0x4C, + 0x00, + 0x79, + 0x78, + 0x74, + 0x00, + 0x48, + 0x47, + 0x42, + 0x00, + 0xFD, + 0xFC, + 0xF7, + 0x00, + 0x77, + 0x76, + 0x6B, + 0x00, + 0x80, + 0x7F, + 0x71, + 0x00, + 0x9D, + 0xA0, + 0x19, + 0x00, + 0x93, + 0x95, + 0x1E, + 0x00, + 0xA3, + 0xA6, + 0x25, + 0x00, + 0xF9, + 0xF9, + 0xED, + 0x00, + 0x76, + 0x76, + 0x73, + 0x00, + 0x79, + 0x79, + 0x77, + 0x00, + 0x89, + 0x89, + 0x87, + 0x00, + 0x81, + 0x81, + 0x7F, + 0x00, + 0x4C, + 0x4C, + 0x4B, + 0x00, + 0x4A, + 0x4A, + 0x49, + 0x00, + 0xFE, + 0xFE, + 0xFC, + 0x00, + 0xFF, + 0xFF, + 0xFE, + 0x00, + 0xE2, + 0xE2, + 0xE1, + 0x00, + 0xC2, + 0xC2, + 0xC1, + 0x00, + 0xB7, + 0xB7, + 0xB6, + 0x00, + 0xAE, + 0xAE, + 0xAD, + 0x00, + 0xA7, + 0xA7, + 0xA6, + 0x00, + 0xA1, + 0xA1, + 0xA0, + 0x00, + 0x9C, + 0x9C, + 0x9B, + 0x00, + 0x9A, + 0x9A, + 0x99, + 0x00, + 0x97, + 0x97, + 0x96, + 0x00, + 0x8E, + 0x8E, + 0x8D, + 0x00, + 0x8D, + 0x8D, + 0x8C, + 0x00, + 0x8A, + 0x8A, + 0x89, + 0x00, + 0x83, + 0x83, + 0x82, + 0x00, + 0xA6, + 0xAE, + 0x00, + 0x00, + 0xA5, + 0xAB, + 0x00, + 0x00, + 0xA2, + 0xA6, + 0x00, + 0x00, + 0xA0, + 0xA4, + 0x00, + 0x00, + 0x95, + 0x9C, + 0x01, + 0x00, + 0xA6, + 0xAA, + 0x0A, + 0x00, + 0x9F, + 0xA6, + 0x0B, + 0x00, + 0x89, + 0x8F, + 0x0E, + 0x00, + 0xA9, + 0xAD, + 0x13, + 0x00, + 0xAD, + 0xB1, + 0x1D, + 0x00, + 0x9C, + 0xA2, + 0x1F, + 0x00, + 0xB1, + 0xB5, + 0x25, + 0x00, + 0xBD, + 0xC3, + 0x41, + 0x00, + 0xB5, + 0xB9, + 0x44, + 0x00, + 0xC3, + 0xC8, + 0x59, + 0x00, + 0x83, + 0x85, + 0x4B, + 0x00, + 0xCB, + 0xCF, + 0x79, + 0x00, + 0x8B, + 0x8D, + 0x56, + 0x00, + 0x7D, + 0x7E, + 0x59, + 0x00, + 0xDB, + 0xDE, + 0x9D, + 0x00, + 0xE4, + 0xE6, + 0xB7, + 0x00, + 0xA9, + 0xB2, + 0x00, + 0x00, + 0xAF, + 0xB8, + 0x14, + 0x00, + 0x9D, + 0xA6, + 0x13, + 0x00, + 0x9C, + 0xA5, + 0x15, + 0x00, + 0x9B, + 0xA5, + 0x16, + 0x00, + 0x99, + 0xA2, + 0x17, + 0x00, + 0x9A, + 0xA3, + 0x19, + 0x00, + 0x9E, + 0xA7, + 0x1D, + 0x00, + 0xA0, + 0xA9, + 0x20, + 0x00, + 0x74, + 0x7A, + 0x1A, + 0x00, + 0xB5, + 0xBC, + 0x2B, + 0x00, + 0xAE, + 0xB4, + 0x36, + 0x00, + 0x9A, + 0xA0, + 0x31, + 0x00, + 0x93, + 0x97, + 0x46, + 0x00, + 0x97, + 0x9A, + 0x67, + 0x00, + 0xA8, + 0xAB, + 0x77, + 0x00, + 0x84, + 0x86, + 0x65, + 0x00, + 0xEC, + 0xEE, + 0xCC, + 0x00, + 0xF4, + 0xF5, + 0xE0, + 0x00, + 0x9C, + 0xA6, + 0x18, + 0x00, + 0x91, + 0x99, + 0x2C, + 0x00, + 0x60, + 0x65, + 0x24, + 0x00, + 0x6A, + 0x6C, + 0x56, + 0x00, + 0x77, + 0x79, + 0x62, + 0x00, + 0x9C, + 0xAB, + 0x15, + 0x00, + 0xA5, + 0xB5, + 0x2B, + 0x00, + 0x9E, + 0xAD, + 0x2C, + 0x00, + 0x8A, + 0x93, + 0x37, + 0x00, + 0x7C, + 0x84, + 0x3D, + 0x00, + 0x51, + 0x55, + 0x2F, + 0x00, + 0x4C, + 0x4F, + 0x2F, + 0x00, + 0x9C, + 0x9F, + 0x81, + 0x00, + 0x8F, + 0xA2, + 0x15, + 0x00, + 0xAF, + 0xC1, + 0x29, + 0x00, + 0xAA, + 0xBC, + 0x2A, + 0x00, + 0xA7, + 0xB8, + 0x2B, + 0x00, + 0xA4, + 0xB5, + 0x2B, + 0x00, + 0xA3, + 0xB3, + 0x2C, + 0x00, + 0x99, + 0xA9, + 0x35, + 0x00, + 0x45, + 0x48, + 0x32, + 0x00, + 0xA6, + 0xBA, + 0x32, + 0x00, + 0xA2, + 0xB5, + 0x33, + 0x00, + 0x9D, + 0xAF, + 0x34, + 0x00, + 0x6A, + 0x72, + 0x40, + 0x00, + 0x65, + 0x6B, + 0x42, + 0x00, + 0x5F, + 0x65, + 0x40, + 0x00, + 0x48, + 0x4C, + 0x31, + 0x00, + 0x58, + 0x5C, + 0x40, + 0x00, + 0x59, + 0x5C, + 0x47, + 0x00, + 0x53, + 0x56, + 0x44, + 0x00, + 0x4F, + 0x51, + 0x45, + 0x00, + 0x53, + 0x55, + 0x49, + 0x00, + 0x41, + 0x44, + 0x34, + 0x00, + 0x76, + 0x7A, + 0x66, + 0x00, + 0x48, + 0x4D, + 0x38, + 0x00, + 0x73, + 0x76, + 0x6B, + 0x00, + 0x4B, + 0x4D, + 0x46, + 0x00, + 0x41, + 0x45, + 0x39, + 0x00, + 0x73, + 0x76, + 0x6D, + 0x00, + 0x7C, + 0x7D, + 0x7B, + 0x00, + 0xFC, + 0xFD, + 0xFB, + 0x00, + 0x3A, + 0x3D, + 0x39, + 0x00, + 0x6D, + 0x71, + 0x6C, + 0x00, + 0x56, + 0x59, + 0x56, + 0x00, + 0x75, + 0x78, + 0x75, + 0x00, + 0xCC, + 0xCD, + 0xCC, + 0x00, + 0x50, + 0xCD, + 0x59, + 0x00, + 0x32, + 0xC6, + 0x3E, + 0x00, + 0x81, + 0xDC, + 0x89, + 0x00, + 0xA8, + 0xE8, + 0xAE, + 0x00, + 0xC3, + 0xEF, + 0xC7, + 0x00, + 0x02, + 0xC0, + 0x19, + 0x00, + 0xE9, + 0xF9, + 0xEB, + 0x00, + 0x02, + 0xD4, + 0x2E, + 0x00, + 0x6A, + 0x6D, + 0x6B, + 0x00, + 0x74, + 0x77, + 0x75, + 0x00, + 0x73, + 0x76, + 0x74, + 0x00, + 0x71, + 0x74, + 0x72, + 0x00, + 0x6C, + 0x6F, + 0x6D, + 0x00, + 0xFC, + 0xFF, + 0xFE, + 0x00, + 0x26, + 0xE2, + 0xD3, + 0x00, + 0x2E, + 0xD8, + 0xC9, + 0x00, + 0x34, + 0xD0, + 0xC1, + 0x00, + 0x57, + 0xE1, + 0xD5, + 0x00, + 0x88, + 0xE9, + 0xE1, + 0x00, + 0xBC, + 0xF3, + 0xEE, + 0x00, + 0xE0, + 0xF9, + 0xF7, + 0x00, + 0xF1, + 0xFD, + 0xFC, + 0x00, + 0x1F, + 0xE9, + 0xDA, + 0x00, + 0x63, + 0x65, + 0x65, + 0x00, + 0x51, + 0x52, + 0x52, + 0x00, + 0x55, + 0x56, + 0x56, + 0x00, + 0x4B, + 0x4D, + 0x4E, + 0x00, + 0x36, + 0x38, + 0x3A, + 0x00, + 0x42, + 0x44, + 0x47, + 0x00, + 0x6F, + 0x71, + 0x75, + 0x00, + 0x4E, + 0x4F, + 0x51, + 0x00, + 0x37, + 0x39, + 0x3E, + 0x00, + 0x3A, + 0x3C, + 0x41, + 0x00, + 0x34, + 0x36, + 0x3C, + 0x00, + 0x3F, + 0x40, + 0x44, + 0x00, + 0x46, + 0x47, + 0x4B, + 0x00, + 0x44, + 0x45, + 0x49, + 0x00, + 0x5A, + 0x5B, + 0x5F, + 0x00, + 0x79, + 0x7A, + 0x7F, + 0x00, + 0xF9, + 0xFA, + 0xFF, + 0x00, + 0x69, + 0x6A, + 0x70, + 0x00, + 0x12, + 0x25, + 0xF6, + 0x00, + 0x0D, + 0x1A, + 0xEB, + 0x00, + 0xEE, + 0xEF, + 0xFD, + 0x00, + 0x09, + 0x0F, + 0xE1, + 0x00, + 0x27, + 0x2A, + 0xE1, + 0x00, + 0x38, + 0x3A, + 0xE3, + 0x00, + 0x48, + 0x4A, + 0xE4, + 0x00, + 0x72, + 0x73, + 0xEA, + 0x00, + 0x7F, + 0x80, + 0xEC, + 0x00, + 0xA6, + 0xA6, + 0xF1, + 0x00, + 0xBD, + 0xBD, + 0xF5, + 0x00, + 0xD8, + 0xD8, + 0xF9, + 0x00, + 0x79, + 0x79, + 0x84, + 0x00, + 0x75, + 0x75, + 0x7E, + 0x00, + 0x97, + 0x97, + 0x9E, + 0x00, + 0x49, + 0x49, + 0x4C, + 0x00, + 0x58, + 0x58, + 0x59, + 0x00, + 0xFA, + 0xFA, + 0xFA, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0xF3, + 0xF3, + 0xF3, + 0x00, + 0xEA, + 0xEA, + 0xEA, + 0x00, + 0xD8, + 0xD8, + 0xD8, + 0x00, + 0x98, + 0x98, + 0x98, + 0x00, + 0x92, + 0x92, + 0x92, + 0x00, + 0x91, + 0x91, + 0x91, + 0x00, + 0x76, + 0x76, + 0x76, + 0x00, + 0x4D, + 0x4D, + 0x4D, + 0x00, + 0x4B, + 0x4B, + 0x4B, + 0x00, + 0x4A, + 0x4A, + 0x4A, + 0x00, + 0x49, + 0x49, + 0x49, + 0x00, -/* + /* Fonts */ -0x04, -0x2E,0x04,0x00,0x00,0xA8,0x05,0x00,0x00,0x22,0x07,0x00,0x00,0x9C,0x08,0x00, -0x00, -0x5E, -0x00, -0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0B,0x23,0x15,0x00,0x09, -0x24,0x1F,0x00,0x10,0x25,0x30,0x00,0x0F,0x26,0x40,0x00,0x02,0x27,0x43,0x00,0x06, -0x28,0x4A,0x00,0x07,0x29,0x52,0x00,0x06,0x2A,0x59,0x00,0x0B,0x2B,0x65,0x00,0x05, -0x2C,0x6B,0x00,0x06,0x2D,0x72,0x00,0x02,0x2E,0x75,0x00,0x09,0x2F,0x7F,0x00,0x0B, -0x30,0x8B,0x00,0x05,0x31,0x91,0x00,0x0A,0x32,0x9C,0x00,0x0B,0x33,0xA8,0x00,0x0B, -0x34,0xB4,0x00,0x0C,0x35,0xC1,0x00,0x0B,0x36,0xCD,0x00,0x09,0x37,0xD7,0x00,0x0A, -0x38,0xE2,0x00,0x0B,0x39,0xEE,0x00,0x02,0x3A,0xF1,0x00,0x04,0x3B,0xF6,0x00,0x0B, -0x3C,0x02,0x01,0x0B,0x3D,0x0E,0x01,0x0B,0x3E,0x1A,0x01,0x0A,0x3F,0x25,0x01,0x10, -0x40,0x36,0x01,0x10,0x41,0x47,0x01,0x0A,0x42,0x52,0x01,0x10,0x43,0x63,0x01,0x0D, -0x44,0x71,0x01,0x09,0x45,0x7B,0x01,0x09,0x46,0x85,0x01,0x11,0x47,0x97,0x01,0x0C, -0x48,0xA4,0x01,0x02,0x49,0xA7,0x01,0x09,0x4A,0xB1,0x01,0x0B,0x4B,0xBD,0x01,0x09, -0x4C,0xC7,0x01,0x11,0x4D,0xD9,0x01,0x0D,0x4E,0xE7,0x01,0x11,0x4F,0xF9,0x01,0x0B, -0x50,0x05,0x02,0x11,0x51,0x17,0x02,0x0B,0x52,0x23,0x02,0x0A,0x53,0x2E,0x02,0x09, -0x54,0x38,0x02,0x0B,0x55,0x44,0x02,0x0F,0x56,0x54,0x02,0x15,0x57,0x6A,0x02,0x0D, -0x58,0x78,0x02,0x0E,0x59,0x87,0x02,0x0A,0x5A,0x92,0x02,0x04,0x5B,0x97,0x02,0x09, -0x5C,0xA1,0x02,0x05,0x5D,0xA7,0x02,0x0D,0x5E,0xB5,0x02,0x0B,0x5F,0xC1,0x02,0x06, -0x60,0xC8,0x02,0x0D,0x61,0xD6,0x02,0x0C,0x62,0xE3,0x02,0x0D,0x63,0xF1,0x02,0x0D, -0x64,0xFF,0x02,0x0C,0x65,0x0C,0x03,0x06,0x66,0x13,0x03,0x0C,0x67,0x20,0x03,0x0B, -0x68,0x2C,0x03,0x02,0x69,0x2F,0x03,0x05,0x6A,0x35,0x03,0x0A,0x6B,0x40,0x03,0x02, -0x6C,0x43,0x03,0x12,0x6D,0x56,0x03,0x0A,0x6E,0x61,0x03,0x0C,0x6F,0x6E,0x03,0x0C, -0x70,0x7B,0x03,0x0D,0x71,0x89,0x03,0x05,0x72,0x8F,0x03,0x07,0x73,0x97,0x03,0x07, -0x74,0x9F,0x03,0x0A,0x75,0xAA,0x03,0x0C,0x76,0xB7,0x03,0x12,0x77,0xCA,0x03,0x0B, -0x78,0xD6,0x03,0x0C,0x79,0xE3,0x03,0x09,0x7A,0xED,0x03,0x06,0x7B,0xF4,0x03,0x02, -0x7C,0xF7,0x03,0x06,0x7D,0xFE,0x03,0x0B,0x7E, -0x5E, -0x01, -0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0B,0x23,0x15,0x00,0x09, -0x24,0x1F,0x00,0x10,0x25,0x30,0x00,0x0F,0x26,0x40,0x00,0x02,0x27,0x43,0x00,0x06, -0x28,0x4A,0x00,0x07,0x29,0x52,0x00,0x06,0x2A,0x59,0x00,0x0B,0x2B,0x65,0x00,0x05, -0x2C,0x6B,0x00,0x06,0x2D,0x72,0x00,0x02,0x2E,0x75,0x00,0x09,0x2F,0x7F,0x00,0x0B, -0x30,0x8B,0x00,0x05,0x31,0x91,0x00,0x0A,0x32,0x9C,0x00,0x0B,0x33,0xA8,0x00,0x0B, -0x34,0xB4,0x00,0x0C,0x35,0xC1,0x00,0x0B,0x36,0xCD,0x00,0x09,0x37,0xD7,0x00,0x0A, -0x38,0xE2,0x00,0x0B,0x39,0xEE,0x00,0x02,0x3A,0xF1,0x00,0x04,0x3B,0xF6,0x00,0x0B, -0x3C,0x02,0x01,0x0B,0x3D,0x0E,0x01,0x0B,0x3E,0x1A,0x01,0x0A,0x3F,0x25,0x01,0x10, -0x40,0x36,0x01,0x10,0x41,0x47,0x01,0x0A,0x42,0x52,0x01,0x10,0x43,0x63,0x01,0x0D, -0x44,0x71,0x01,0x09,0x45,0x7B,0x01,0x09,0x46,0x85,0x01,0x11,0x47,0x97,0x01,0x0C, -0x48,0xA4,0x01,0x02,0x49,0xA7,0x01,0x09,0x4A,0xB1,0x01,0x0B,0x4B,0xBD,0x01,0x09, -0x4C,0xC7,0x01,0x11,0x4D,0xD9,0x01,0x0D,0x4E,0xE7,0x01,0x11,0x4F,0xF9,0x01,0x0B, -0x50,0x05,0x02,0x11,0x51,0x17,0x02,0x0B,0x52,0x23,0x02,0x0A,0x53,0x2E,0x02,0x09, -0x54,0x38,0x02,0x0B,0x55,0x44,0x02,0x0F,0x56,0x54,0x02,0x15,0x57,0x6A,0x02,0x0D, -0x58,0x78,0x02,0x0E,0x59,0x87,0x02,0x0A,0x5A,0x92,0x02,0x04,0x5B,0x97,0x02,0x09, -0x5C,0xA1,0x02,0x05,0x5D,0xA7,0x02,0x0D,0x5E,0xB5,0x02,0x0B,0x5F,0xC1,0x02,0x06, -0x60,0xC8,0x02,0x0D,0x61,0xD6,0x02,0x0C,0x62,0xE3,0x02,0x0D,0x63,0xF1,0x02,0x0D, -0x64,0xFF,0x02,0x0C,0x65,0x0C,0x03,0x06,0x66,0x13,0x03,0x0C,0x67,0x20,0x03,0x0B, -0x68,0x2C,0x03,0x02,0x69,0x2F,0x03,0x05,0x6A,0x35,0x03,0x0A,0x6B,0x40,0x03,0x02, -0x6C,0x43,0x03,0x12,0x6D,0x56,0x03,0x0A,0x6E,0x61,0x03,0x0C,0x6F,0x6E,0x03,0x0C, -0x70,0x7B,0x03,0x0D,0x71,0x89,0x03,0x05,0x72,0x8F,0x03,0x07,0x73,0x97,0x03,0x07, -0x74,0x9F,0x03,0x0A,0x75,0xAA,0x03,0x0C,0x76,0xB7,0x03,0x12,0x77,0xCA,0x03,0x0B, -0x78,0xD6,0x03,0x0C,0x79,0xE3,0x03,0x09,0x7A,0xED,0x03,0x06,0x7B,0xF4,0x03,0x02, -0x7C,0xF7,0x03,0x06,0x7D,0xFE,0x03,0x0B,0x7E, -0x5E, -0x02, -0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0C,0x23,0x16,0x00,0x09, -0x24,0x20,0x00,0x11,0x25,0x32,0x00,0x10,0x26,0x43,0x00,0x02,0x27,0x46,0x00,0x07, -0x28,0x4E,0x00,0x07,0x29,0x56,0x00,0x07,0x2A,0x5E,0x00,0x0C,0x2B,0x6B,0x00,0x04, -0x2C,0x70,0x00,0x06,0x2D,0x77,0x00,0x02,0x2E,0x7A,0x00,0x0A,0x2F,0x85,0x00,0x0C, -0x30,0x92,0x00,0x05,0x31,0x98,0x00,0x0B,0x32,0xA4,0x00,0x0B,0x33,0xB0,0x00,0x0C, -0x34,0xBD,0x00,0x0C,0x35,0xCA,0x00,0x0C,0x36,0xD7,0x00,0x0A,0x37,0xE2,0x00,0x0B, -0x38,0xEE,0x00,0x0C,0x39,0xFB,0x00,0x02,0x3A,0xFE,0x00,0x04,0x3B,0x03,0x01,0x0C, -0x3C,0x10,0x01,0x0C,0x3D,0x1D,0x01,0x0C,0x3E,0x2A,0x01,0x0B,0x3F,0x36,0x01,0x11, -0x40,0x48,0x01,0x11,0x41,0x5A,0x01,0x0B,0x42,0x66,0x01,0x11,0x43,0x78,0x01,0x0E, -0x44,0x87,0x01,0x0A,0x45,0x92,0x01,0x09,0x46,0x9C,0x01,0x12,0x47,0xAF,0x01,0x0C, -0x48,0xBC,0x01,0x02,0x49,0xBF,0x01,0x09,0x4A,0xC9,0x01,0x0C,0x4B,0xD6,0x01,0x09, -0x4C,0xE0,0x01,0x12,0x4D,0xF3,0x01,0x0E,0x4E,0x02,0x02,0x12,0x4F,0x15,0x02,0x0B, -0x50,0x21,0x02,0x12,0x51,0x34,0x02,0x0C,0x52,0x41,0x02,0x0B,0x53,0x4D,0x02,0x0A, -0x54,0x58,0x02,0x0C,0x55,0x65,0x02,0x10,0x56,0x76,0x02,0x16,0x57,0x8D,0x02,0x0E, -0x58,0x9C,0x02,0x0E,0x59,0xAB,0x02,0x0B,0x5A,0xB7,0x02,0x05,0x5B,0xBD,0x02,0x0A, -0x5C,0xC8,0x02,0x05,0x5D,0xCE,0x02,0x0E,0x5E,0xDD,0x02,0x0C,0x5F,0xEA,0x02,0x07, -0x60,0xF2,0x02,0x0E,0x61,0x01,0x03,0x0D,0x62,0x0F,0x03,0x0E,0x63,0x1E,0x03,0x0E, -0x64,0x2D,0x03,0x0D,0x65,0x3B,0x03,0x07,0x66,0x43,0x03,0x0D,0x67,0x51,0x03,0x0B, -0x68,0x5D,0x03,0x02,0x69,0x60,0x03,0x05,0x6A,0x66,0x03,0x0B,0x6B,0x72,0x03,0x02, -0x6C,0x75,0x03,0x13,0x6D,0x89,0x03,0x0B,0x6E,0x95,0x03,0x0D,0x6F,0xA3,0x03,0x0D, -0x70,0xB1,0x03,0x0D,0x71,0xBF,0x03,0x06,0x72,0xC6,0x03,0x08,0x73,0xCF,0x03,0x07, -0x74,0xD7,0x03,0x0B,0x75,0xE3,0x03,0x0D,0x76,0xF1,0x03,0x14,0x77,0x06,0x04,0x0B, -0x78,0x12,0x04,0x0D,0x79,0x20,0x04,0x09,0x7A,0x2A,0x04,0x06,0x7B,0x31,0x04,0x02, -0x7C,0x34,0x04,0x06,0x7D,0x3B,0x04,0x0C,0x7E, -0x5E, -0x03, -0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0C,0x23,0x16,0x00,0x09, -0x24,0x20,0x00,0x11,0x25,0x32,0x00,0x10,0x26,0x43,0x00,0x02,0x27,0x46,0x00,0x07, -0x28,0x4E,0x00,0x07,0x29,0x56,0x00,0x07,0x2A,0x5E,0x00,0x0C,0x2B,0x6B,0x00,0x04, -0x2C,0x70,0x00,0x06,0x2D,0x77,0x00,0x02,0x2E,0x7A,0x00,0x0A,0x2F,0x85,0x00,0x0C, -0x30,0x92,0x00,0x05,0x31,0x98,0x00,0x0B,0x32,0xA4,0x00,0x0B,0x33,0xB0,0x00,0x0C, -0x34,0xBD,0x00,0x0C,0x35,0xCA,0x00,0x0C,0x36,0xD7,0x00,0x0A,0x37,0xE2,0x00,0x0B, -0x38,0xEE,0x00,0x0C,0x39,0xFB,0x00,0x02,0x3A,0xFE,0x00,0x04,0x3B,0x03,0x01,0x0C, -0x3C,0x10,0x01,0x0C,0x3D,0x1D,0x01,0x0C,0x3E,0x2A,0x01,0x0B,0x3F,0x36,0x01,0x11, -0x40,0x48,0x01,0x11,0x41,0x5A,0x01,0x0B,0x42,0x66,0x01,0x11,0x43,0x78,0x01,0x0E, -0x44,0x87,0x01,0x0A,0x45,0x92,0x01,0x09,0x46,0x9C,0x01,0x12,0x47,0xAF,0x01,0x0C, -0x48,0xBC,0x01,0x02,0x49,0xBF,0x01,0x09,0x4A,0xC9,0x01,0x0C,0x4B,0xD6,0x01,0x09, -0x4C,0xE0,0x01,0x12,0x4D,0xF3,0x01,0x0E,0x4E,0x02,0x02,0x12,0x4F,0x15,0x02,0x0B, -0x50,0x21,0x02,0x12,0x51,0x34,0x02,0x0C,0x52,0x41,0x02,0x0B,0x53,0x4D,0x02,0x0A, -0x54,0x58,0x02,0x0C,0x55,0x65,0x02,0x10,0x56,0x76,0x02,0x16,0x57,0x8D,0x02,0x0E, -0x58,0x9C,0x02,0x0E,0x59,0xAB,0x02,0x0B,0x5A,0xB7,0x02,0x05,0x5B,0xBD,0x02,0x0A, -0x5C,0xC8,0x02,0x05,0x5D,0xCE,0x02,0x0E,0x5E,0xDD,0x02,0x0C,0x5F,0xEA,0x02,0x07, -0x60,0xF2,0x02,0x0E,0x61,0x01,0x03,0x0D,0x62,0x0F,0x03,0x0E,0x63,0x1E,0x03,0x0E, -0x64,0x2D,0x03,0x0D,0x65,0x3B,0x03,0x07,0x66,0x43,0x03,0x0D,0x67,0x51,0x03,0x0B, -0x68,0x5D,0x03,0x02,0x69,0x60,0x03,0x05,0x6A,0x66,0x03,0x0B,0x6B,0x72,0x03,0x02, -0x6C,0x75,0x03,0x13,0x6D,0x89,0x03,0x0B,0x6E,0x95,0x03,0x0D,0x6F,0xA3,0x03,0x0D, -0x70,0xB1,0x03,0x0D,0x71,0xBF,0x03,0x06,0x72,0xC6,0x03,0x08,0x73,0xCF,0x03,0x07, -0x74,0xD7,0x03,0x0B,0x75,0xE3,0x03,0x0D,0x76,0xF1,0x03,0x14,0x77,0x06,0x04,0x0B, -0x78,0x12,0x04,0x0D,0x79,0x20,0x04,0x09,0x7A,0x2A,0x04,0x06,0x7B,0x31,0x04,0x02, -0x7C,0x34,0x04,0x06,0x7D,0x3B,0x04,0x0C,0x7E, + 0x04, + 0x2E, + 0x04, + 0x00, + 0x00, + 0xA8, + 0x05, + 0x00, + 0x00, + 0x22, + 0x07, + 0x00, + 0x00, + 0x9C, + 0x08, + 0x00, + 0x00, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0B, + 0x23, + 0x15, + 0x00, + 0x09, + 0x24, + 0x1F, + 0x00, + 0x10, + 0x25, + 0x30, + 0x00, + 0x0F, + 0x26, + 0x40, + 0x00, + 0x02, + 0x27, + 0x43, + 0x00, + 0x06, + 0x28, + 0x4A, + 0x00, + 0x07, + 0x29, + 0x52, + 0x00, + 0x06, + 0x2A, + 0x59, + 0x00, + 0x0B, + 0x2B, + 0x65, + 0x00, + 0x05, + 0x2C, + 0x6B, + 0x00, + 0x06, + 0x2D, + 0x72, + 0x00, + 0x02, + 0x2E, + 0x75, + 0x00, + 0x09, + 0x2F, + 0x7F, + 0x00, + 0x0B, + 0x30, + 0x8B, + 0x00, + 0x05, + 0x31, + 0x91, + 0x00, + 0x0A, + 0x32, + 0x9C, + 0x00, + 0x0B, + 0x33, + 0xA8, + 0x00, + 0x0B, + 0x34, + 0xB4, + 0x00, + 0x0C, + 0x35, + 0xC1, + 0x00, + 0x0B, + 0x36, + 0xCD, + 0x00, + 0x09, + 0x37, + 0xD7, + 0x00, + 0x0A, + 0x38, + 0xE2, + 0x00, + 0x0B, + 0x39, + 0xEE, + 0x00, + 0x02, + 0x3A, + 0xF1, + 0x00, + 0x04, + 0x3B, + 0xF6, + 0x00, + 0x0B, + 0x3C, + 0x02, + 0x01, + 0x0B, + 0x3D, + 0x0E, + 0x01, + 0x0B, + 0x3E, + 0x1A, + 0x01, + 0x0A, + 0x3F, + 0x25, + 0x01, + 0x10, + 0x40, + 0x36, + 0x01, + 0x10, + 0x41, + 0x47, + 0x01, + 0x0A, + 0x42, + 0x52, + 0x01, + 0x10, + 0x43, + 0x63, + 0x01, + 0x0D, + 0x44, + 0x71, + 0x01, + 0x09, + 0x45, + 0x7B, + 0x01, + 0x09, + 0x46, + 0x85, + 0x01, + 0x11, + 0x47, + 0x97, + 0x01, + 0x0C, + 0x48, + 0xA4, + 0x01, + 0x02, + 0x49, + 0xA7, + 0x01, + 0x09, + 0x4A, + 0xB1, + 0x01, + 0x0B, + 0x4B, + 0xBD, + 0x01, + 0x09, + 0x4C, + 0xC7, + 0x01, + 0x11, + 0x4D, + 0xD9, + 0x01, + 0x0D, + 0x4E, + 0xE7, + 0x01, + 0x11, + 0x4F, + 0xF9, + 0x01, + 0x0B, + 0x50, + 0x05, + 0x02, + 0x11, + 0x51, + 0x17, + 0x02, + 0x0B, + 0x52, + 0x23, + 0x02, + 0x0A, + 0x53, + 0x2E, + 0x02, + 0x09, + 0x54, + 0x38, + 0x02, + 0x0B, + 0x55, + 0x44, + 0x02, + 0x0F, + 0x56, + 0x54, + 0x02, + 0x15, + 0x57, + 0x6A, + 0x02, + 0x0D, + 0x58, + 0x78, + 0x02, + 0x0E, + 0x59, + 0x87, + 0x02, + 0x0A, + 0x5A, + 0x92, + 0x02, + 0x04, + 0x5B, + 0x97, + 0x02, + 0x09, + 0x5C, + 0xA1, + 0x02, + 0x05, + 0x5D, + 0xA7, + 0x02, + 0x0D, + 0x5E, + 0xB5, + 0x02, + 0x0B, + 0x5F, + 0xC1, + 0x02, + 0x06, + 0x60, + 0xC8, + 0x02, + 0x0D, + 0x61, + 0xD6, + 0x02, + 0x0C, + 0x62, + 0xE3, + 0x02, + 0x0D, + 0x63, + 0xF1, + 0x02, + 0x0D, + 0x64, + 0xFF, + 0x02, + 0x0C, + 0x65, + 0x0C, + 0x03, + 0x06, + 0x66, + 0x13, + 0x03, + 0x0C, + 0x67, + 0x20, + 0x03, + 0x0B, + 0x68, + 0x2C, + 0x03, + 0x02, + 0x69, + 0x2F, + 0x03, + 0x05, + 0x6A, + 0x35, + 0x03, + 0x0A, + 0x6B, + 0x40, + 0x03, + 0x02, + 0x6C, + 0x43, + 0x03, + 0x12, + 0x6D, + 0x56, + 0x03, + 0x0A, + 0x6E, + 0x61, + 0x03, + 0x0C, + 0x6F, + 0x6E, + 0x03, + 0x0C, + 0x70, + 0x7B, + 0x03, + 0x0D, + 0x71, + 0x89, + 0x03, + 0x05, + 0x72, + 0x8F, + 0x03, + 0x07, + 0x73, + 0x97, + 0x03, + 0x07, + 0x74, + 0x9F, + 0x03, + 0x0A, + 0x75, + 0xAA, + 0x03, + 0x0C, + 0x76, + 0xB7, + 0x03, + 0x12, + 0x77, + 0xCA, + 0x03, + 0x0B, + 0x78, + 0xD6, + 0x03, + 0x0C, + 0x79, + 0xE3, + 0x03, + 0x09, + 0x7A, + 0xED, + 0x03, + 0x06, + 0x7B, + 0xF4, + 0x03, + 0x02, + 0x7C, + 0xF7, + 0x03, + 0x06, + 0x7D, + 0xFE, + 0x03, + 0x0B, + 0x7E, + 0x5E, + 0x01, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0B, + 0x23, + 0x15, + 0x00, + 0x09, + 0x24, + 0x1F, + 0x00, + 0x10, + 0x25, + 0x30, + 0x00, + 0x0F, + 0x26, + 0x40, + 0x00, + 0x02, + 0x27, + 0x43, + 0x00, + 0x06, + 0x28, + 0x4A, + 0x00, + 0x07, + 0x29, + 0x52, + 0x00, + 0x06, + 0x2A, + 0x59, + 0x00, + 0x0B, + 0x2B, + 0x65, + 0x00, + 0x05, + 0x2C, + 0x6B, + 0x00, + 0x06, + 0x2D, + 0x72, + 0x00, + 0x02, + 0x2E, + 0x75, + 0x00, + 0x09, + 0x2F, + 0x7F, + 0x00, + 0x0B, + 0x30, + 0x8B, + 0x00, + 0x05, + 0x31, + 0x91, + 0x00, + 0x0A, + 0x32, + 0x9C, + 0x00, + 0x0B, + 0x33, + 0xA8, + 0x00, + 0x0B, + 0x34, + 0xB4, + 0x00, + 0x0C, + 0x35, + 0xC1, + 0x00, + 0x0B, + 0x36, + 0xCD, + 0x00, + 0x09, + 0x37, + 0xD7, + 0x00, + 0x0A, + 0x38, + 0xE2, + 0x00, + 0x0B, + 0x39, + 0xEE, + 0x00, + 0x02, + 0x3A, + 0xF1, + 0x00, + 0x04, + 0x3B, + 0xF6, + 0x00, + 0x0B, + 0x3C, + 0x02, + 0x01, + 0x0B, + 0x3D, + 0x0E, + 0x01, + 0x0B, + 0x3E, + 0x1A, + 0x01, + 0x0A, + 0x3F, + 0x25, + 0x01, + 0x10, + 0x40, + 0x36, + 0x01, + 0x10, + 0x41, + 0x47, + 0x01, + 0x0A, + 0x42, + 0x52, + 0x01, + 0x10, + 0x43, + 0x63, + 0x01, + 0x0D, + 0x44, + 0x71, + 0x01, + 0x09, + 0x45, + 0x7B, + 0x01, + 0x09, + 0x46, + 0x85, + 0x01, + 0x11, + 0x47, + 0x97, + 0x01, + 0x0C, + 0x48, + 0xA4, + 0x01, + 0x02, + 0x49, + 0xA7, + 0x01, + 0x09, + 0x4A, + 0xB1, + 0x01, + 0x0B, + 0x4B, + 0xBD, + 0x01, + 0x09, + 0x4C, + 0xC7, + 0x01, + 0x11, + 0x4D, + 0xD9, + 0x01, + 0x0D, + 0x4E, + 0xE7, + 0x01, + 0x11, + 0x4F, + 0xF9, + 0x01, + 0x0B, + 0x50, + 0x05, + 0x02, + 0x11, + 0x51, + 0x17, + 0x02, + 0x0B, + 0x52, + 0x23, + 0x02, + 0x0A, + 0x53, + 0x2E, + 0x02, + 0x09, + 0x54, + 0x38, + 0x02, + 0x0B, + 0x55, + 0x44, + 0x02, + 0x0F, + 0x56, + 0x54, + 0x02, + 0x15, + 0x57, + 0x6A, + 0x02, + 0x0D, + 0x58, + 0x78, + 0x02, + 0x0E, + 0x59, + 0x87, + 0x02, + 0x0A, + 0x5A, + 0x92, + 0x02, + 0x04, + 0x5B, + 0x97, + 0x02, + 0x09, + 0x5C, + 0xA1, + 0x02, + 0x05, + 0x5D, + 0xA7, + 0x02, + 0x0D, + 0x5E, + 0xB5, + 0x02, + 0x0B, + 0x5F, + 0xC1, + 0x02, + 0x06, + 0x60, + 0xC8, + 0x02, + 0x0D, + 0x61, + 0xD6, + 0x02, + 0x0C, + 0x62, + 0xE3, + 0x02, + 0x0D, + 0x63, + 0xF1, + 0x02, + 0x0D, + 0x64, + 0xFF, + 0x02, + 0x0C, + 0x65, + 0x0C, + 0x03, + 0x06, + 0x66, + 0x13, + 0x03, + 0x0C, + 0x67, + 0x20, + 0x03, + 0x0B, + 0x68, + 0x2C, + 0x03, + 0x02, + 0x69, + 0x2F, + 0x03, + 0x05, + 0x6A, + 0x35, + 0x03, + 0x0A, + 0x6B, + 0x40, + 0x03, + 0x02, + 0x6C, + 0x43, + 0x03, + 0x12, + 0x6D, + 0x56, + 0x03, + 0x0A, + 0x6E, + 0x61, + 0x03, + 0x0C, + 0x6F, + 0x6E, + 0x03, + 0x0C, + 0x70, + 0x7B, + 0x03, + 0x0D, + 0x71, + 0x89, + 0x03, + 0x05, + 0x72, + 0x8F, + 0x03, + 0x07, + 0x73, + 0x97, + 0x03, + 0x07, + 0x74, + 0x9F, + 0x03, + 0x0A, + 0x75, + 0xAA, + 0x03, + 0x0C, + 0x76, + 0xB7, + 0x03, + 0x12, + 0x77, + 0xCA, + 0x03, + 0x0B, + 0x78, + 0xD6, + 0x03, + 0x0C, + 0x79, + 0xE3, + 0x03, + 0x09, + 0x7A, + 0xED, + 0x03, + 0x06, + 0x7B, + 0xF4, + 0x03, + 0x02, + 0x7C, + 0xF7, + 0x03, + 0x06, + 0x7D, + 0xFE, + 0x03, + 0x0B, + 0x7E, + 0x5E, + 0x02, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0C, + 0x23, + 0x16, + 0x00, + 0x09, + 0x24, + 0x20, + 0x00, + 0x11, + 0x25, + 0x32, + 0x00, + 0x10, + 0x26, + 0x43, + 0x00, + 0x02, + 0x27, + 0x46, + 0x00, + 0x07, + 0x28, + 0x4E, + 0x00, + 0x07, + 0x29, + 0x56, + 0x00, + 0x07, + 0x2A, + 0x5E, + 0x00, + 0x0C, + 0x2B, + 0x6B, + 0x00, + 0x04, + 0x2C, + 0x70, + 0x00, + 0x06, + 0x2D, + 0x77, + 0x00, + 0x02, + 0x2E, + 0x7A, + 0x00, + 0x0A, + 0x2F, + 0x85, + 0x00, + 0x0C, + 0x30, + 0x92, + 0x00, + 0x05, + 0x31, + 0x98, + 0x00, + 0x0B, + 0x32, + 0xA4, + 0x00, + 0x0B, + 0x33, + 0xB0, + 0x00, + 0x0C, + 0x34, + 0xBD, + 0x00, + 0x0C, + 0x35, + 0xCA, + 0x00, + 0x0C, + 0x36, + 0xD7, + 0x00, + 0x0A, + 0x37, + 0xE2, + 0x00, + 0x0B, + 0x38, + 0xEE, + 0x00, + 0x0C, + 0x39, + 0xFB, + 0x00, + 0x02, + 0x3A, + 0xFE, + 0x00, + 0x04, + 0x3B, + 0x03, + 0x01, + 0x0C, + 0x3C, + 0x10, + 0x01, + 0x0C, + 0x3D, + 0x1D, + 0x01, + 0x0C, + 0x3E, + 0x2A, + 0x01, + 0x0B, + 0x3F, + 0x36, + 0x01, + 0x11, + 0x40, + 0x48, + 0x01, + 0x11, + 0x41, + 0x5A, + 0x01, + 0x0B, + 0x42, + 0x66, + 0x01, + 0x11, + 0x43, + 0x78, + 0x01, + 0x0E, + 0x44, + 0x87, + 0x01, + 0x0A, + 0x45, + 0x92, + 0x01, + 0x09, + 0x46, + 0x9C, + 0x01, + 0x12, + 0x47, + 0xAF, + 0x01, + 0x0C, + 0x48, + 0xBC, + 0x01, + 0x02, + 0x49, + 0xBF, + 0x01, + 0x09, + 0x4A, + 0xC9, + 0x01, + 0x0C, + 0x4B, + 0xD6, + 0x01, + 0x09, + 0x4C, + 0xE0, + 0x01, + 0x12, + 0x4D, + 0xF3, + 0x01, + 0x0E, + 0x4E, + 0x02, + 0x02, + 0x12, + 0x4F, + 0x15, + 0x02, + 0x0B, + 0x50, + 0x21, + 0x02, + 0x12, + 0x51, + 0x34, + 0x02, + 0x0C, + 0x52, + 0x41, + 0x02, + 0x0B, + 0x53, + 0x4D, + 0x02, + 0x0A, + 0x54, + 0x58, + 0x02, + 0x0C, + 0x55, + 0x65, + 0x02, + 0x10, + 0x56, + 0x76, + 0x02, + 0x16, + 0x57, + 0x8D, + 0x02, + 0x0E, + 0x58, + 0x9C, + 0x02, + 0x0E, + 0x59, + 0xAB, + 0x02, + 0x0B, + 0x5A, + 0xB7, + 0x02, + 0x05, + 0x5B, + 0xBD, + 0x02, + 0x0A, + 0x5C, + 0xC8, + 0x02, + 0x05, + 0x5D, + 0xCE, + 0x02, + 0x0E, + 0x5E, + 0xDD, + 0x02, + 0x0C, + 0x5F, + 0xEA, + 0x02, + 0x07, + 0x60, + 0xF2, + 0x02, + 0x0E, + 0x61, + 0x01, + 0x03, + 0x0D, + 0x62, + 0x0F, + 0x03, + 0x0E, + 0x63, + 0x1E, + 0x03, + 0x0E, + 0x64, + 0x2D, + 0x03, + 0x0D, + 0x65, + 0x3B, + 0x03, + 0x07, + 0x66, + 0x43, + 0x03, + 0x0D, + 0x67, + 0x51, + 0x03, + 0x0B, + 0x68, + 0x5D, + 0x03, + 0x02, + 0x69, + 0x60, + 0x03, + 0x05, + 0x6A, + 0x66, + 0x03, + 0x0B, + 0x6B, + 0x72, + 0x03, + 0x02, + 0x6C, + 0x75, + 0x03, + 0x13, + 0x6D, + 0x89, + 0x03, + 0x0B, + 0x6E, + 0x95, + 0x03, + 0x0D, + 0x6F, + 0xA3, + 0x03, + 0x0D, + 0x70, + 0xB1, + 0x03, + 0x0D, + 0x71, + 0xBF, + 0x03, + 0x06, + 0x72, + 0xC6, + 0x03, + 0x08, + 0x73, + 0xCF, + 0x03, + 0x07, + 0x74, + 0xD7, + 0x03, + 0x0B, + 0x75, + 0xE3, + 0x03, + 0x0D, + 0x76, + 0xF1, + 0x03, + 0x14, + 0x77, + 0x06, + 0x04, + 0x0B, + 0x78, + 0x12, + 0x04, + 0x0D, + 0x79, + 0x20, + 0x04, + 0x09, + 0x7A, + 0x2A, + 0x04, + 0x06, + 0x7B, + 0x31, + 0x04, + 0x02, + 0x7C, + 0x34, + 0x04, + 0x06, + 0x7D, + 0x3B, + 0x04, + 0x0C, + 0x7E, + 0x5E, + 0x03, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0C, + 0x23, + 0x16, + 0x00, + 0x09, + 0x24, + 0x20, + 0x00, + 0x11, + 0x25, + 0x32, + 0x00, + 0x10, + 0x26, + 0x43, + 0x00, + 0x02, + 0x27, + 0x46, + 0x00, + 0x07, + 0x28, + 0x4E, + 0x00, + 0x07, + 0x29, + 0x56, + 0x00, + 0x07, + 0x2A, + 0x5E, + 0x00, + 0x0C, + 0x2B, + 0x6B, + 0x00, + 0x04, + 0x2C, + 0x70, + 0x00, + 0x06, + 0x2D, + 0x77, + 0x00, + 0x02, + 0x2E, + 0x7A, + 0x00, + 0x0A, + 0x2F, + 0x85, + 0x00, + 0x0C, + 0x30, + 0x92, + 0x00, + 0x05, + 0x31, + 0x98, + 0x00, + 0x0B, + 0x32, + 0xA4, + 0x00, + 0x0B, + 0x33, + 0xB0, + 0x00, + 0x0C, + 0x34, + 0xBD, + 0x00, + 0x0C, + 0x35, + 0xCA, + 0x00, + 0x0C, + 0x36, + 0xD7, + 0x00, + 0x0A, + 0x37, + 0xE2, + 0x00, + 0x0B, + 0x38, + 0xEE, + 0x00, + 0x0C, + 0x39, + 0xFB, + 0x00, + 0x02, + 0x3A, + 0xFE, + 0x00, + 0x04, + 0x3B, + 0x03, + 0x01, + 0x0C, + 0x3C, + 0x10, + 0x01, + 0x0C, + 0x3D, + 0x1D, + 0x01, + 0x0C, + 0x3E, + 0x2A, + 0x01, + 0x0B, + 0x3F, + 0x36, + 0x01, + 0x11, + 0x40, + 0x48, + 0x01, + 0x11, + 0x41, + 0x5A, + 0x01, + 0x0B, + 0x42, + 0x66, + 0x01, + 0x11, + 0x43, + 0x78, + 0x01, + 0x0E, + 0x44, + 0x87, + 0x01, + 0x0A, + 0x45, + 0x92, + 0x01, + 0x09, + 0x46, + 0x9C, + 0x01, + 0x12, + 0x47, + 0xAF, + 0x01, + 0x0C, + 0x48, + 0xBC, + 0x01, + 0x02, + 0x49, + 0xBF, + 0x01, + 0x09, + 0x4A, + 0xC9, + 0x01, + 0x0C, + 0x4B, + 0xD6, + 0x01, + 0x09, + 0x4C, + 0xE0, + 0x01, + 0x12, + 0x4D, + 0xF3, + 0x01, + 0x0E, + 0x4E, + 0x02, + 0x02, + 0x12, + 0x4F, + 0x15, + 0x02, + 0x0B, + 0x50, + 0x21, + 0x02, + 0x12, + 0x51, + 0x34, + 0x02, + 0x0C, + 0x52, + 0x41, + 0x02, + 0x0B, + 0x53, + 0x4D, + 0x02, + 0x0A, + 0x54, + 0x58, + 0x02, + 0x0C, + 0x55, + 0x65, + 0x02, + 0x10, + 0x56, + 0x76, + 0x02, + 0x16, + 0x57, + 0x8D, + 0x02, + 0x0E, + 0x58, + 0x9C, + 0x02, + 0x0E, + 0x59, + 0xAB, + 0x02, + 0x0B, + 0x5A, + 0xB7, + 0x02, + 0x05, + 0x5B, + 0xBD, + 0x02, + 0x0A, + 0x5C, + 0xC8, + 0x02, + 0x05, + 0x5D, + 0xCE, + 0x02, + 0x0E, + 0x5E, + 0xDD, + 0x02, + 0x0C, + 0x5F, + 0xEA, + 0x02, + 0x07, + 0x60, + 0xF2, + 0x02, + 0x0E, + 0x61, + 0x01, + 0x03, + 0x0D, + 0x62, + 0x0F, + 0x03, + 0x0E, + 0x63, + 0x1E, + 0x03, + 0x0E, + 0x64, + 0x2D, + 0x03, + 0x0D, + 0x65, + 0x3B, + 0x03, + 0x07, + 0x66, + 0x43, + 0x03, + 0x0D, + 0x67, + 0x51, + 0x03, + 0x0B, + 0x68, + 0x5D, + 0x03, + 0x02, + 0x69, + 0x60, + 0x03, + 0x05, + 0x6A, + 0x66, + 0x03, + 0x0B, + 0x6B, + 0x72, + 0x03, + 0x02, + 0x6C, + 0x75, + 0x03, + 0x13, + 0x6D, + 0x89, + 0x03, + 0x0B, + 0x6E, + 0x95, + 0x03, + 0x0D, + 0x6F, + 0xA3, + 0x03, + 0x0D, + 0x70, + 0xB1, + 0x03, + 0x0D, + 0x71, + 0xBF, + 0x03, + 0x06, + 0x72, + 0xC6, + 0x03, + 0x08, + 0x73, + 0xCF, + 0x03, + 0x07, + 0x74, + 0xD7, + 0x03, + 0x0B, + 0x75, + 0xE3, + 0x03, + 0x0D, + 0x76, + 0xF1, + 0x03, + 0x14, + 0x77, + 0x06, + 0x04, + 0x0B, + 0x78, + 0x12, + 0x04, + 0x0D, + 0x79, + 0x20, + 0x04, + 0x09, + 0x7A, + 0x2A, + 0x04, + 0x06, + 0x7B, + 0x31, + 0x04, + 0x02, + 0x7C, + 0x34, + 0x04, + 0x06, + 0x7D, + 0x3B, + 0x04, + 0x0C, + 0x7E, -/* + /* Bitmaps */ -0x04, -0x27,0x0A,0x00,0x00,0x6F,0x73,0x00,0x00,0xB7,0xDC,0x00,0x00,0xCB,0x50,0x01, -0x00, -0x0B,0x04,0x00,0x00, -0x1A,0x00,0x00,0x00, -0x00, -0x00, -0x3A,0x69,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0xDF,0x56,0xF7,0x56,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0x00,0x00, -0x00,0x53,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF7,0x00,0x55,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF3, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0x04,0xDF,0xD6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x54,0xDF,0xDA,0x04,0xDD,0xF7,0x00,0x00,0xD8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD0,0xF6,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD7,0x53,0x00,0xD6,0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x00,0x00,0x04,0x57,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x56, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD0,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0xC6,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, -0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0xDC, -0x04,0x04,0x04,0x04,0xE1,0xF3,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0x53,0xD5,0x04,0x04,0x5A,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, -0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0xD0,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x53,0x00,0x58,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xDC, -0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD2,0x04, -0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, -0x17,0x04,0x04,0xDD,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF4, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x5B,0x04,0x04,0x04,0xDE,0xF3,0x00, -0x00,0xF3,0xDE,0x04,0x04,0x04,0x04,0x57,0x53,0x00,0x00,0x53,0x5E,0x04,0x04,0x04, -0x04,0xD5,0xB3,0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0xD8,0x04,0x04,0x04, -0x04,0x60,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xDE,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xDC,0x00,0xDF,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDA,0xFA,0xB3,0x00,0x54,0x00,0xF5,0xD7,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x04,0x04,0xDB,0x55,0x54,0x54,0x00,0xF6,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00,0x54, -0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00,0x54,0x54,0xF7,0xD9,0x04, -0x04,0x04,0x04,0x09,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E,0xB3, -0x00,0x00,0x53,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0xF4, -0x00,0x00,0x54,0x54,0x55,0xD7,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x5E,0x04,0x00,0x00,0x00,0x00, -0x54,0x00,0xB3,0x56,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0xF6,0x54,0x00,0x54, -0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x54,0x00,0x09,0xF6, -0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xF7, -0x53,0x00,0x54,0x00,0x54,0xF6,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDE,0xF3,0x00, -0x54,0x53,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00, -0xF7,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0xDC,0x55,0x54,0x00,0x54,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xB8, -0xB3,0x00,0x54,0x00,0x53,0xF7,0xDB,0xDA,0x56,0x54,0x54,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xD9,0x00,0x00,0xDB,0x04,0x04,0x04,0xD0,0xF3,0x00,0x54,0x53,0xB8, -0xD8,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, -0xF3,0x00,0x54,0x54,0xF7,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x54,0xB8,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF6,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0xF4,0x04,0x04,0xDA,0x53,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x58,0xB3,0x00,0x54,0x00,0xF6,0xDC,0x04,0x00,0xF6,0x04,0x00,0xF6,0xDA,0x57,0x53, -0x00,0x00,0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xB3,0x00,0x54,0x00, -0xF6,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0xF3,0x00,0x54,0x00,0xF6,0xDC, -0x04,0x00,0xF6,0x04,0x04,0x04,0xDA,0x56,0x53,0x00,0x00,0xC6,0x56,0xD8,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0xC6,0x00,0x00,0x53, -0x58,0xDA,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xF1,0x00,0x54,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xD8,0x56,0x53,0x00,0x54,0x54,0xF7,0xD9, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x56,0xC6,0x00,0x00,0x53,0xB8,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0x59,0xB3,0x00,0x54,0x00,0xF5,0xD2,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x57,0xC6,0x54,0x00,0x57,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0xDA,0xB8,0x54,0x00,0x00,0xB3,0xD2,0xF6,0x00,0x04,0x04, -0x04, -0x04,0x04,0xDD,0x00,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x55,0x54,0xB8,0x04,0x04,0x04,0x04,0x53,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xDF,0x04,0x04,0x04,0x04,0xD5,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x59, -0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF7,0x04,0x04,0x04, -0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0x00,0x00,0x00,0x59,0x04,0x04, -0x04,0x04,0x04,0x04,0xF5,0xC6,0x04,0x04,0xE1,0x00,0x00,0xF7,0xF7,0x00,0x00,0xD6, -0x04,0x04,0xF4,0x00,0x53,0xF7,0xF7,0x00,0x00,0xF7,0x04,0x04,0xDD,0x00,0x00,0xD6, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, -0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF6,0x00,0x54,0x55,0xB8,0xF6,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0xC6,0x00,0x00,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x04,0x04,0xF1,0x00, -0x00,0xF5,0xB8,0xF6,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x5A,0x00,0x00,0x55,0xB8,0xF3,0x00,0xC6,0xD9, -0x04,0x04,0x04,0x59,0x00,0x00,0x55,0xB8,0xF5,0x00,0x00,0xDB,0x04,0x04,0x04,0x5A, -0x54,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xC6,0xF7,0xF7,0x53,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0xDA,0x53,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x57,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, -0xF7,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x53,0x00,0x00,0xF4,0xF7,0xB8,0x55, -0x00,0x00,0x55,0xD4,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x53,0x54,0xDA,0x04,0x00,0x53,0x56,0x56,0xB8,0x55,0x53,0x00, -0x00,0xDB,0x04,0x04,0x04,0xD8,0xF5,0x00,0x00,0xF4,0xF7,0xB8,0x55,0x54,0x00,0x54, -0xD2,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0xF7,0xF4,0x00,0x00,0xB3,0xDB,0x04, -0x04,0x04,0x00,0x53,0x56,0x56,0x56,0x56,0x56,0x56,0xDF,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xB3,0x55,0xB8,0xF7, -0xF4,0x00,0x00,0xF3,0xDB,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xDE,0x00,0x00,0x55,0xB8,0xB3,0x54,0xF6, -0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0xF3,0x04,0x04,0x00,0xB3, -0x56,0x56,0x56,0x56,0x56,0x56,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9,0x00, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDB,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF3,0xF7, -0xB8,0x55,0x54,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x53,0x55,0xB8,0x55, -0x53,0x00,0x00,0x00,0x00,0xF3,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0xD6,0x04,0x04,0x04,0x5D,0x54,0x00,0x55,0xB8,0xF4,0x54,0xB3,0xD8,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x55,0xB8,0xF5, -0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xD3,0x04,0x04,0x04, -0x04,0x04,0xF4,0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xDB,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0xC6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xF7,0x56,0x56,0x56,0x56,0x56, -0x56,0x56,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0xD6,0x04,0x04,0x04,0xDF,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x53,0x00,0x54,0xF7,0xB8, -0xF6,0x00,0x00,0xEF,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0xB3,0xF7,0xF7,0xF3,0x00, -0x54,0xDC,0x04,0x04,0x04,0xD9,0xB3,0x00,0x53,0xF7,0xB8,0xF5,0x00,0x00,0x56,0x04, -0x04,0x04,0x04,0xD9,0xB3,0x00,0x54,0x55,0xB8,0xF6,0x00,0x00,0xD6,0x00,0xF6,0x04, -0x04,0xDB,0xC6,0x00,0xB3,0xF7,0xF7,0xF3,0x00,0x53,0xDB,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xDD,0x54,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0xF6,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x54,0x00,0xDD,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x04,0xDD,0x54,0x00,0xB3,0xF7,0xB8,0xF4,0x00,0x00,0xD2,0x04,0x04,0x00, -0x00,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x54,0xDD,0x04,0x04,0x04,0xD9,0xB3,0x00, -0x53,0xF7,0xB8,0xF6,0x00,0x00,0x5D,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x59,0x00,0xB3,0xB8,0xF3,0x00,0x57,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0xDA, -0xB3,0x00,0xB3,0xF7,0xF7,0x54,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x53,0x04, -0x04,0x04,0xD5,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD8,0x04, -0x04,0x04,0xF3,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xC6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x00,0xB8,0x56,0x56,0x56,0x56,0x56,0x56,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x54,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04, -0x04,0x04,0xDA,0x54,0x00,0xDF,0xDA,0xDD,0xF3,0x00,0xD6,0x04,0x04,0x04,0x04,0x04, -0xD0,0x00,0xE1,0x04,0x53,0x00,0xD9,0x04,0x04,0xD9,0x54,0x53,0x04,0x57,0x00,0xF7, -0x04,0x04,0x04,0xD8,0xF3,0x00,0x17,0xD3,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x04, -0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x57,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xF7,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF5,0xDA, -0x04,0x04,0x04,0xD5,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDB,0x54, -0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0xD2,0x04,0x04,0x04, -0xDD,0x00,0x54,0xDA,0x04,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x00,0xF3,0x17, -0x04,0x04,0xDE,0x00,0xF3,0xD8,0x04,0x04,0x04,0x17,0x00,0xF3,0x04,0x04,0xF2,0x00, -0x53,0xD9,0x04,0x04,0x04,0xD0,0x54,0xB3,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x60,0x00,0x55,0x04,0x04,0x04,0x04,0x55,0x00,0x5C,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x54,0xF7,0x04,0x04,0xD8, -0x55,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xF5,0x00,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xF6,0xD7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0xF1,0x00,0x00,0x00,0x00,0xD9,0x04,0x04,0xD8,0x00,0x00,0x00,0xD6, -0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, -0x00,0xB8,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x17,0x00,0x55,0x04,0x04, -0xD9,0x54,0x00,0xF6,0xD9,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDE,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0x00,0xDD,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0x53,0x00,0xF4,0xDC,0x04,0x04,0x04,0x04,0x04,0xD8,0xF7,0x00, -0x00,0xD5,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0xF3,0x00,0xD5,0x04,0x04,0x04,0xF5,0x54,0xDC,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0xDB,0x00,0x00,0xD9,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0xD9,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0x00,0xF6,0xDA,0x04,0xD4,0xF4,0x00,0xF5,0xDB,0x04,0x04,0x04,0x04,0x04,0xD6, -0x54,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0x00, -0xF3,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x58,0x00,0xF7,0x04,0x04,0x04, -0xD9,0x00,0x00,0xD5,0x04,0x04,0x04,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF4,0xDA,0x04,0x04,0x04,0xD2,0x00,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, -0xF4,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04, -0xD9,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x59,0x04,0x04,0x04,0x04,0xD8,0xF5,0x00, -0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xD8,0x04, -0xDA,0x53,0x00,0x5D,0x04,0x04,0x04,0x04,0xDB,0xB3,0x00,0x21,0x04,0x04,0xDA,0x53, -0x00,0x5A,0x04,0x04,0x04,0x04,0xD8,0xF4,0x00,0x00,0xF6,0xDA,0xDA,0xC6,0x00,0xD6, -0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0xD4,0x54,0x00,0xE1,0x04,0x04,0x04,0x04,0xD6,0x00,0x00,0x00,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF3,0x04,0x04,0x04,0xF3,0x00,0xE1,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD4,0x54, -0x00,0xE1,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xD9,0x04,0x00,0x00,0x00,0xE1,0x04, -0x04,0x04,0x04,0xD0,0x00,0x54,0xD8,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04, -0xD8,0xF5,0x00,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0x09,0xDA,0x04, -0x04, -0x54,0x54,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04, -0x04,0x04,0x04,0xF5,0x00,0x00,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x54,0xB3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xDB,0x04,0x04,0x57,0x00, -0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF6,0x04,0x04,0x59,0x54,0x58, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xB8,0x00,0x04,0x04,0xDA,0x55,0x00,0x04,0x04,0x04,0x04,0xFA,0x00, -0xFA,0x04,0x04,0x04,0xD8,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04, -0xD8,0x00,0x00,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF1,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0x5A,0x00,0x17,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD9,0xC6,0x00,0xE1,0x04, -0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0x60, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xF3,0x00, -0xD8,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04, -0x04,0x04,0xB8,0x00,0xD0,0x04,0x04,0x04,0xB8,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, -0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0xDA,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04, -0x58,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xEF,0xF3,0x00,0x00,0xF6,0xD3,0x04,0x04,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0xD3,0xF6,0x00,0x00,0xF3,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, -0x00,0x00,0x00,0x00,0x00,0xF4,0xDF,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDB,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0xF4,0x00,0x56,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x53,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xB3,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x54,0xDE,0x54,0xB8,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x00,0xF6,0x04, -0xDA,0x55,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xC6,0x00,0xD7, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0x00,0xF3,0xD8,0x04,0x04,0x04,0x04,0xDA,0xD0,0x00,0x00,0x00,0x54,0xB8,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0xD3,0x00,0x53,0xDA,0x04,0x04,0x04,0x5A,0x00,0x57,0x04, -0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0xF3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD0,0x04,0x04,0x04,0x04, -0x04,0x04,0xF3,0x54,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD6,0x00,0x00,0x00,0xF4,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x17,0x04,0x04,0x04,0x60,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x56,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00, -0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x54,0xB8,0x04,0x57,0x00,0x5A,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0xF6,0x55,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x53,0x00,0xF6,0x04,0x56,0x00,0xD6,0x04,0x04,0x04,0x04,0x04, -0x04,0x17,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x00,0x17,0x04, -0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00, -0x58,0xDA,0xF7,0x00,0x56,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xB8,0x00,0xDF,0x04,0x04,0x04, -0x04,0x04,0x04,0xE1,0x00,0xF7,0x04,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x54,0xB8,0x04,0x57,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00, -0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x16,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0xD8, -0x00,0x00,0x04,0x04,0x04,0x04,0x5C,0x00,0xDE,0xB8,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF4,0x54,0xDB,0x00,0x57,0x04,0x04,0xB3,0xB3,0xD7,0x00,0x5A,0x04, -0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD6,0xDB,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x56,0x00,0xDF,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF2, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xFB,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0xF7, -0x54,0x59,0x17,0x17,0x55,0x00,0xFA,0x17,0x17,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04, -0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xDC,0x54,0x54,0xDA,0x04, -0x04,0xDA,0x54,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, -0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xEF,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04, -0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF7,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD9,0x53,0x00,0xEF,0x04,0x04,0x04,0x04, -0x04,0x56,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0xB3,0x00,0xD0, -0xDD,0xDD,0xDD,0xDD,0xDD,0x00,0xF5,0xDD,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0xDC,0x54,0xB8,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x54, -0xB8,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0xD9,0xD6,0xD0,0x00,0x54,0xD8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0x54,0x00, -0x00,0xF7,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x54,0x54,0x5B,0xD4,0x04,0x04,0x04, -0x04,0x04,0x04,0xF6,0x5D,0x04,0x04,0x04,0x04,0xDA,0x58,0x00,0x00,0x00,0x00,0xDE, -0xDA,0xF7,0x00,0x00,0x04,0xDF,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD0,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDC,0x5D,0xDD,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x5E,0x00,0x5E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xDA,0x04,0x04,0x04, -0x04,0x04,0xD8,0x00,0x55,0x04,0x00,0xB3,0x04,0x04,0x04,0xF7,0x00,0x56,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x50,0x00,0x58,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x53,0xDA,0x00,0xF6,0x04,0xD7,0x00,0xF4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xB3,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0xD8,0x04,0x04, -0x04,0x04,0xD9,0x55,0x00,0x00,0xD2,0xD8,0xC6,0x00,0xD3,0x04,0x00,0xF6,0x04,0x04, -0xD4,0x54,0x00,0xD5,0x04,0x04,0x04,0x04,0xDF,0xF6,0xDD,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xB3,0x04, -0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0xDD,0x54,0xB8, -0x04,0xF7,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD8,0xF6, -0x00,0x04,0x04,0x04,0x04,0xB8,0x00,0xDB,0x55,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0x54,0x00,0xD9,0x04,0xD9,0x00,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x54,0xB3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x56,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x58,0x00,0x60,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x5E,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0xF6,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xD5, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF7,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x54,0x54,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04, -0x53, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04, -0x04,0x04,0xB3,0x53,0x04,0xDB,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF7,0x04,0xB3,0xF3,0x04,0xD9,0x00,0x57,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0x54,0x00,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53, -0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x54,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, -0x04,0x04,0x04,0xD7,0xD9,0x04,0x04,0x04,0x04,0xDA,0xE1,0xD7,0x04,0x04,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xD9,0xDD,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x00,0xB3,0x5A,0x59,0x53,0x00,0x17, -0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0xF3,0x00, -0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xD8,0x53,0x00,0x17,0x04,0x04,0x04,0x04,0xDC,0xDF,0xDA, -0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0xDC,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0xD8,0xDF,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00, -0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04, -0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF5,0x00,0x04,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0x56,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04, -0x04,0x04,0x04,0x04,0xD8,0xB8,0x54,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xC6, -0xE0,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDB,0x00,0xF5,0x04,0x04,0x04,0xF4,0x00, -0xDA,0x04,0xD0,0x00,0xF7,0x04,0x04,0x04,0x04,0x56,0x00,0x5B,0x17,0x17,0x17,0x17, -0x17,0x17,0x55,0x00,0xDE,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xB3,0x00,0x04,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD5,0x04,0x04,0x04,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x5E,0x00,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0x00,0xF7,0x04,0xDF,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF3,0x00,0xD8, -0x04,0x5B,0x54,0x17,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0xF4,0x54,0xD7,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF7,0x5C,0x5E,0x56,0xF5,0x00,0x00, -0xF6,0xD9,0x04,0x04,0xDE,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x55,0x00,0x5E,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0xF7,0x00,0xDB,0x04,0xDD,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB3,0x04,0x5C,0x54,0xDE,0x04,0x04, -0x04,0xB3,0x54,0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00, -0xF6,0xDA,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00, -0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x58,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04, -0x00,0xB3,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00, -0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x56,0x00,0x00,0xFA,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xD7,0x00,0x58, -0x04,0x04,0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0xC6,0xDD,0x04,0x57,0x00, -0xD9,0x59,0x00,0xDB,0x04,0x57,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xB8,0x04,0xD7,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xF1,0xF4, -0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x55,0x00,0xF7,0xDC,0x04,0xB3, -0xF6,0x04,0x04,0x04,0x5D,0x54,0x00,0x00,0xF7,0xDA,0x04,0x04,0x87,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0xDD,0xDD,0x00,0x55,0xDD,0xDD,0xDC,0x00,0xF7,0xDC, -0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xC6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0xD9,0xDF,0x54,0x00,0x00,0x54,0x50,0x04,0x04,0x55,0x00,0xFA, -0xDA,0x04,0x04,0x5E,0x00,0x54,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0xD8,0xB3,0xC6,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x50,0x00,0x57,0x04,0x04,0xB8,0x54,0xFA,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x00,0xF4, -0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8, -0x04,0x04,0x04,0x04,0xC6,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x53,0x04,0x04, -0xF4,0x00,0xF6,0xDE,0xF1,0x5C,0x54,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x57,0x04,0x04, -0x04,0x04,0x00,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0xDF,0x04,0x04,0xF6, -0x00,0xD9,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x00, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, -0x00,0x57,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xDC,0x00,0x55,0x04,0x04,0xDA,0x00,0xF3, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x5D,0x00,0xB8,0x04, -0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF2,0x00,0x56,0x04,0x00,0xF3,0x17,0x17,0x17,0x50,0xD0,0xD9,0x04,0x04, -0x04,0x04,0x53,0x00,0xB3,0x00,0x00,0x00,0x00,0x54,0x55,0xD7,0x04,0x04,0x04,0x04, -0x04,0x54,0x54,0x04,0x00,0xF6,0xDA,0xDF,0x00,0x54,0x00,0xF3,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0xD4,0x00,0xF3,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD5,0x00,0xB8,0x04,0xDB,0x00,0xB8,0x04,0x04,0xD8,0x00,0x55,0x04, -0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x55,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0xD2,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF2,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0x00,0xF6,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF6,0xDC,0x00,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00, -0xF3,0xD0,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x55,0x00,0xD8,0x04,0x04,0xD0,0x00, -0x58,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xD5,0x00,0x00,0x00,0x53,0x04, -0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDB,0x04,0x04,0xB3,0x00,0xD4,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0x04,0x04,0x04,0xF7,0x00,0x5D,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0xD4,0x00,0x00,0xF7,0x04,0xD6,0x00,0xF7,0x58,0x54, -0x00,0x00,0xB3,0x00,0x00,0xFA,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD0,0x53,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, -0xB8,0x04,0x04,0xD8,0xD9,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0x55,0xD8,0x59,0x00, -0xC6,0xD9,0x04,0xF3,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xF5,0x00,0xDD,0xDD,0xDD,0xDD,0xDD,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0xB3,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xD9, -0x04,0x04,0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x04,0xF5,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0x58,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDA,0x04,0x04,0x04, -0x59,0x00,0x56,0x04,0x04,0x04,0x04,0x57,0x54,0xB8,0x04,0x5D,0x00,0xF7,0x04,0x04, -0x04,0x04,0xD9,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B, -0x54,0x00,0x00,0x55,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x00,0x00, -0x53,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xC6,0x5E,0x04,0x04,0x04,0x00,0xF5, -0x04,0x54,0xB3,0x04,0x04,0x04,0x04,0xB3,0xF6,0x04,0x04,0xDE,0x00,0x59,0x04,0x04, -0x04,0x04,0xF6,0x00,0xD3,0xDD,0xDD,0xDD,0xDD,0x5C,0x00,0x5A,0x04,0x04,0x04,0x04, -0x00,0xF3,0x17,0x60,0x5D,0x57,0xF6,0x00,0x53,0xD9,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF3,0x17,0x17,0x17,0x17, -0x17,0x17,0xD5,0x04,0x00,0xF3,0x17,0x17,0x17,0x17,0x17,0xE1,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xD5,0x04, -0x00,0xF3,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xF2, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0xF7,0x00,0xF1,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0x00,0x53,0xDA,0x04,0x04,0x00,0xF6,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, -0x55,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0x04,0x04,0x00,0xF5, -0x04,0x04,0xDB,0xDB,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x00,0xF6,0x04,0xD2,0xEF,0x5D,0xF7,0x00,0xC6,0x56,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x57,0x53,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xFA,0x00,0xDF,0x04,0x04,0x04,0x5E,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x58, -0x00,0xF2,0x04,0x04,0x54,0xB3,0x04,0x04,0xDF,0x00,0xDF,0x04,0x04,0xF3,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x54,0xD8,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xE1,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD9,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF6,0x04,0x00, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD6,0x00,0xF6,0x04,0x53,0x00,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, -0xDD,0xDD,0x00,0xC6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB3,0xC6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0x04,0xDB,0x00,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x5E,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0xD8,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x00, -0xF4, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00, -0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xDF,0x00,0xB3,0xD7,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0x04,0xE0,0x53,0x04,0x04,0x04, -0x04,0xD7,0x00,0x58,0x04,0x04,0x04,0x53,0x00,0x00,0x56,0x04,0x04,0x04,0xF4,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0xF4,0x04,0x04,0x04,0x60,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0xC6,0x54,0xD8,0x04,0x04,0x04,0xD2,0xF3,0x00,0xF2,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x55,0x00,0x55,0xD3,0x04,0x04,0x58,0x00,0x00,0xC6,0x56,0xD9,0x04,0xD8, -0xB3,0xF5,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x55,0x54,0x04,0x04,0x04,0xF4,0xB3,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0x54,0x00, -0x00,0xF7,0x04,0x04,0x04,0x04,0xDB,0xDF,0xD0,0xDA,0x04,0xF6,0x00,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0xD7, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xE1,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, -0xDA,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x53,0x00,0xDD, -0x04,0x04,0x04,0x04,0x04,0xD3,0xFA,0xF7,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0xD2, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04, -0x04,0xD2,0x00,0xC6,0x04,0x04,0xD2,0x00,0xF4,0xDA,0x04,0x04,0x04,0xDD,0x00,0x54, -0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0x00,0x5D,0x04,0x04,0x04,0x04,0xF6,0x00,0xF4, -0x5A,0x5B,0xF5,0x00,0xF5,0xDA,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x5C, -0x00,0xD0,0x04,0x54,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0xF3,0x00, -0x00,0xF5,0xD2,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00,0x00,0xF3,0xEF,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0x5D,0x04,0x04,0x00,0xF5,0x04,0xF5,0x00,0xD9, -0x04,0x04,0x04,0xB8,0x00,0xDA,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0xD7,0x00, -0x58,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xDD,0x00,0x00,0xD8,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDA, -0x00,0xF4,0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0xF4,0x54,0xD7,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0x00,0xF5, -0xDD,0xDD,0xDD,0xD3,0xDF,0xF6,0x54,0x54,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xD8,0xB3,0x00,0xDD,0x04,0x04,0x04,0xDE,0xF3,0x54,0x00,0x54,0x57, -0xDA,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, -0x04,0x04,0xDA,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04, -0xF7,0x00,0xD8,0x04,0x55,0x54,0xD8,0x04,0x04,0x56,0x00,0xDC,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF4,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0xF6,0x00,0xDB,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0xE1,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD5, -0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00, -0xD9,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5C, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00,0x00,0x60,0x04,0x04, -0x04,0x04,0x04,0x04,0xEF,0x54,0xB8,0x04,0x56,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0xF3,0xF5,0x04,0x04,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x53,0x00,0xF6,0x04,0xB8,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF7, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0xEF,0x00,0x00,0x04,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0x60, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x55,0x00, -0xFA,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0xE1, -0x00, -0x54,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x00,0x00,0xDA,0x04,0x04, -0x04,0x04,0xD4,0x00,0x53,0x04,0xB8,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, -0x54,0xB8,0x04,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x54,0xB8,0x04, -0x56,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00,0x54, -0x04,0x04,0x04,0xDA,0x55,0x00,0xD9,0x04,0x04,0xDB,0xD9,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04, -0x58,0x00,0xD2,0x04,0x04,0x04,0x04,0x57,0x00,0xDE,0x04,0x04,0x04,0xF7,0x00,0xD8, -0x04,0x04,0x04,0xB8,0x00,0x00,0xDD,0x04,0x04,0x04,0xDF,0x54,0xE1,0x04,0x04,0x04, -0x04,0x57,0x00,0x5C,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xDF,0x04, -0x04,0x04,0x04,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x55,0x04, -0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, -0x04,0x04,0x04,0x04,0x04,0xD8,0xD9,0x04,0x04,0x04,0x04,0x04,0xD8,0xDA,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xD0,0x55,0x00,0xD0,0xD0, -0xD0,0xF5,0x00,0xD0,0xD0,0x04,0x04,0xDB,0x54,0x00,0x00,0x55,0xDC,0x04,0x04,0x04, -0x04,0x55,0x00,0x00,0x00,0x00,0xE1,0xD2,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xF6,0xD8,0x04,0x04,0xF6,0x00,0xDC,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xDF,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD6,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0x00,0x53,0x57,0x5D,0x55,0x54,0x00,0xDC, -0x04,0x04,0x04,0xF6,0x00,0xC6,0x57,0xFA,0xF7,0x00,0x00,0xD2,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB8,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00,0x00,0xF3, -0xE1,0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0x04,0x04, -0xE1,0xF3,0x00,0x00,0xF5,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0x53,0x00,0xDB,0x04,0x54,0x53,0x04,0xD6,0x00,0xF7,0x04,0x04,0x04,0xDF, -0x00,0x17,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04, -0xD5,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0xDD,0xDD,0xD7,0x60,0xB3,0x00, -0xDF,0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, -0x00,0x04,0x00,0xF5,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xD8,0x04,0x00,0xF5,0xDD,0xDD, -0xDD,0xDD,0xDD,0xDB,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, -0xDD,0xDD,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x0A,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x57,0x00,0xD6,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x5D,0x00, -0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xB8,0x54,0x60,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xDE,0x00,0x56,0x04,0x04,0xE1,0x00,0x00,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF1,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xD5,0x04,0x04,0x04,0x04,0xDA,0x00,0xF5,0x04,0x04,0x04,0x0A,0x00,0xD6,0x04, -0x54,0xB3,0x04,0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60, -0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04, -0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xDA, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD0,0x00,0x56,0x04,0x04,0x04, -0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x5C,0x04,0x04,0x04, -0x04,0xD8,0xF5,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0xD0, -0x00,0x54,0xD8,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04,0xD9,0xB3,0x00,0x5E, -0x04,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04,0xD9,0xF3,0x00,0x00,0xF6,0x04, -0xD8,0x54,0x00,0xD7,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xD9,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0xD8,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xE1,0x54,0x00,0x00, -0x04,0x00,0x00,0xF5,0xD4,0x04,0x04,0x04,0xD5,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDA,0xC6,0x00,0xDC,0x04,0x04, -0x04, -0x00,0xF6,0x04,0x00,0x00,0x56,0x04,0x04,0x04,0xD8,0x53,0x00,0x00,0x57,0x04, -0x04,0x04,0xDA,0xB3,0x00,0xDD,0x04,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x55,0x00, -0xB8,0x04,0xD8,0x54,0x00,0xD0,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD8,0x04,0x00, -0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xD8,0x04,0xDA,0x54,0x00,0x60, -0x04,0x04,0x04,0x04,0xD8,0xF5,0x54,0x00,0xF6,0x04,0x00,0x00,0x58,0x04,0x04,0x04, -0xF7,0x00,0xDC,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xC6,0x53,0x04,0x04, -0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xDC, -0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDC,0x00,0xF4,0x04, -0x04,0x56,0x00,0x5E,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x04,0x04,0x04,0x04,0xB8, -0x54,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD0,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0xF6,0x00,0x56,0xDA,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xF6,0xD7, -0xD6,0x54,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1, -0x00,0xF3,0xDB,0xF7,0x00,0x54,0xD8,0x04,0xD9,0x17,0xDC,0x04,0x04,0x04,0x04,0x04, -0xDE,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x53,0x04,0x04,0x04, -0xF7,0xDC,0xDB,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x5A,0xDE, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0xD9,0xDC,0x5E, -0x54,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD8,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x00,0x54,0xB3,0x00,0x00,0x00,0xF5,0xD5,0x04,0x04,0x04,0x04,0xD9, -0x00,0x00,0x00,0x00,0x00,0xF3,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58, -0x00,0xDE,0x04,0x04,0x04,0x58,0x00,0xF6,0xDE,0xD7,0xF6,0x00,0x57,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04, -0x54,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x00,0x00,0x53,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF1,0xD9,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0x56,0x04,0x55,0x00,0xD5,0x04,0xF3,0x00,0xDE,0x04,0x04,0x5C,0x00,0xF5,0x04,0xDE, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0xD6,0x04,0x04,0xF7,0x00,0xD5,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xDA,0x54,0x53,0x04,0x04,0xF5, -0x54,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF4,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0xB8,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0xE0,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0x00,0x57,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xDB,0x00,0x53,0xDA,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0xD3,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF7,0xDA,0xF3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0xF5,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA, -0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x55,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04, -0x04,0x04,0xD0,0x00,0x5B,0x04,0x04,0x04,0xD8,0x00,0xF7,0xDB,0x00,0xB8,0x04,0x04, -0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0xD9,0x00,0x00, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDB,0x04,0x04,0x56,0x00,0xE1, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xF7,0x04,0x04,0x04,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0xDA,0x00,0xB3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6,0x00,0x00,0xDF, -0x00,0xF6,0xDA,0x00,0x00,0x00,0x09,0xF3,0xF7,0xF7,0xF3,0x54,0x54,0xDD,0x04,0x04, -0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0xD9, -0xB3,0x54,0x53,0xF7,0xB8,0xF6,0x00,0x00,0x59,0x00,0xF6,0xDA,0x04,0xDD,0x54,0x54, -0xF4,0xF7,0xF7,0xF3,0x54,0x54,0xD7,0x04,0x04,0x56,0x56,0x00,0x53,0x56,0x56,0x04, -0x04,0xF1,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0xF5,0xF6,0x00,0x04,0x00,0x00,0x00, -0x54,0xF7,0xB8,0xF6,0x00,0x00,0xEF,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0xDC,0x00,0xC6,0xD4,0x04,0x04,0x00,0xF6,0xDA, -0x00,0x00,0x00,0xF3,0xF7,0x55,0x00,0x00,0xD6,0xF6,0x00,0xF3,0xB8,0xF7,0x54,0x00, -0x56,0x04,0x04,0x00,0x00,0x00,0x53,0xF7,0xF7,0x53,0x54,0xB3,0xD8,0x04,0x04,0xDD, -0x54,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x00,0xD3,0x04,0x04,0x00,0x00,0x00,0x09,0xF4, -0xF7,0xF7,0xB3,0x54,0x54,0xDD,0x04,0x04,0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6, -0x00,0x00,0x5C,0x00,0xF6,0xDA,0x00,0x00,0x09,0xF4,0x58,0x04,0xD3,0x00,0x54,0xB8, -0xB3,0x00,0xD0,0x04,0x56,0x56,0x53,0x00,0x56,0x56,0x56,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDE,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x55,0x00,0xD9,0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xB8,0x50,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0xB3,0x00, -0xDB,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04, -0x56,0x56,0x56,0x56,0x56,0xB8,0x54,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, -0xF6,0x04,0xD8,0xD8,0xD9,0x00,0x58,0xD8,0xD8,0xD7,0x00,0x60,0xD8,0x04,0x04,0x00, -0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x53,0x04,0x04,0x04,0xDE,0x00,0x00, -0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0xD8,0x04,0x04, -0x5B,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x04,0xDA,0xF6,0x00,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x54,0xB8,0x04, -0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4, -0x54,0x04,0xD8,0xDB,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDB, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF4,0x04,0x04, -0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0x00,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x56,0xD8,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0xF1,0x00, -0xF5,0x04,0xDB,0x54,0x54,0xB8,0x5A,0x00,0x53,0x00,0xD8,0xF6,0x00,0xD7,0x04,0x04, -0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xE1,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xDF,0xDB,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF7,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4, -0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xE1,0x09,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0xF4,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x5E,0x00, -0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0xE1,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x04,0x00,0xF5,0x04, -0x04,0x04,0x04,0x04,0xDE,0xDD,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0x00, -0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0xF7,0x00, -0xDB,0x04,0x04,0x04,0x04,0xB3,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xF6,0x00, -0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD6,0x04,0xD6,0x00,0x55,0x04,0x04,0x04, -0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0x04,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDC,0x04,0x04,0x54,0x53,0x04,0x04,0x04, -0x04,0x04,0x5D,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0x54,0xB8,0x04, -0x04,0x04,0x04,0x59,0x00,0xDF,0x04,0xFA,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x58,0xB3,0x00,0x00,0x00,0xF6,0xDD,0x04,0x00,0xF6,0x04,0x00, -0xF6,0x04,0x57,0x53,0x00,0x00,0xC6,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0xDA,0x58, -0xB3,0x00,0x00,0x00,0xF6,0xF1,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0xB3,0x00, -0x00,0x00,0xF6,0xD7,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x00,0xC6, -0xB8,0xD8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD8,0xF7, -0x54,0x00,0x00,0xB3,0x5C,0x04,0xF6,0x00,0x04,0x00,0xF6,0xD7,0xF5,0x00,0x00,0x00, -0xF5, -0xD3,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xE1,0xB3, -0x00,0x00,0xF3,0xDE,0x04,0x04,0x57,0x54,0x00,0x00,0xB3,0x17,0x04,0x04,0x04,0x00, -0xF6,0xDD,0xF5,0x00,0x00,0x53,0xB8,0xDA,0x04,0x04,0x04,0x04,0xD8,0x56,0x53,0x00, -0x00,0x54,0xF7,0xD8,0x04,0x04,0x04,0x00,0xF6,0x04,0x57,0x53,0x00,0x00,0xC6,0xB8, -0xD8,0x04,0x04,0x04,0x04,0x04,0xDA,0x59,0xB3,0x00,0x00,0x00,0xF5,0xD2,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x57,0x00,0x00,0x04,0x04,0xD6,0xC6,0x00,0x54,0x5C,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0xF6,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x56,0x04, -0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3, -0x00,0x59,0x04,0xB8,0x00,0x17,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3,0x04,0x04,0xF6, -0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD9,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04, -0x04,0x54,0x55,0x04,0x04,0x04,0x00,0x56,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x16,0xF7,0x04,0x00,0xF5,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x00,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD7,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0xDE,0x00,0xF4,0x04,0x04,0x04,0x17,0x59,0x00,0x09,0x57,0x17,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, -0x00,0xDF,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x59,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54, -0x04,0x04,0x5E,0x00,0xD3,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0x00,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDD,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD5,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xB3,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0xF7,0x00,0x58,0x04,0xDB, -0xF4,0x00,0x00,0xF3,0xD8,0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xB8,0x00,0xDC,0x5A,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0xF4,0x00,0x58,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDB,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xE1,0x00,0x53,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x54,0x00,0xDD,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD6,0x00,0xF6,0x04,0x00,0xF6, -0x5C,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF7,0x54,0x56, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xF1,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF7,0x04,0x04,0xB3,0x00,0x59,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF5,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x17,0x00,0x5A,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0xDB, -0x00,0xF7,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x5B,0x00,0x60,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x5D,0x00,0xFA,0x04,0x04,0x04,0x53,0xC6,0x04,0x04,0x04,0x04, -0x04,0xB8,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x0A,0x04,0x04,0x04, -0x04,0xD6,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xF5, -0x00,0xDB,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD3,0x00,0xF3,0x04,0x04,0x55,0x00,0xD7,0x04,0x04,0x04,0x04,0xB3,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0xDA, -0x00,0xF3,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0xF3,0x04, -0x04,0x04,0x53,0xF5,0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x53,0x54,0x04, -0x53,0x00,0xD9,0x04,0x04,0x5B,0x00,0x5A,0x04,0x56,0x00,0xD3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x54,0x54,0xDA,0x04,0x04,0xDF,0x00,0x57,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x58,0x09,0xF5,0xDA,0x04,0x04,0xE1,0x00,0x54,0xD9, -0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04, -0x60,0x00,0xF6,0xD4,0x04,0x04,0x04,0xDC,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x5A,0x54,0xF7,0x04,0x04,0x04,0x04,0xF7,0x00,0x57,0x04,0x04,0xD7,0x00, -0xF7,0x04,0x04,0x04,0x5C,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, -0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x17,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x53,0x00,0xD8,0x04,0x04,0xD8,0x00, -0x53,0x04,0x04,0xD3,0x00,0xB3,0xD8,0x04,0x04,0x04,0x50,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x59,0x04,0x04, -0x04,0xD8,0xB3,0x00,0xDD,0x04,0x04,0x04,0xF4,0x00,0x55,0xD8,0x04,0xD8,0xD9,0x04, -0xDA,0xB8,0x54,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD5,0x00, -0xF3,0x04,0x04,0x04,0xD9,0x54,0x00,0x55,0xD8,0x04,0x04,0x04,0x04,0x04,0xD6,0x00, -0x00,0xDE,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0x00,0x00,0xD5, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF4,0xDD,0x04,0x04,0x04,0x04, -0x04,0xDB,0xF6,0x00,0xF3,0xDA,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDC,0x00,0x54,0xD8,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x53,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF5,0x54,0xF6,0xDB,0x04,0x04, -0x04,0x04,0x04,0x50,0x00,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0xD8,0xF3,0x00,0xE1,0x04,0x04,0xD9,0x54,0x00,0xF6,0xDB,0x04,0x04,0x04,0x04, -0x04,0xDB,0xF6,0x00,0x53,0xD8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD7, -0x00,0x00,0xD8,0x04,0x04,0xF4,0x00,0xD2,0x04,0x04,0x04,0xF7,0x00,0xD6,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x00,0xB3,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0xD8,0x00,0x00,0xD8, -0x04,0x04,0x04,0xD8,0x00,0x54,0xD8,0x04,0x04,0x04,0xD2,0x00,0x55,0x04,0x04,0x04, -0x04,0x04,0xDA,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x5D,0x04,0xD5,0x00,0x54,0xD5,0x04,0x04,0xD7,0x00,0x17,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0xF6,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x5E,0x00, -0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDE,0xF3,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0x54, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF7,0x04, -0x04,0x04,0x04,0x54,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6, -0xDA,0x00,0x00,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0xF6,0xC6, -0x04,0x04,0x04,0x56,0x00,0xF7,0xD9,0xD8,0xF7,0x00,0x58,0x04,0xD6,0x00,0x54,0xF7, -0xF6,0x00,0x53,0xDA,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, -0x00,0xC6,0xB8,0xF6,0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x57,0x09,0x54,0x04,0x5C,0x54,0xB3,0xD9,0x04,0x04,0x04,0x04,0xDC, -0xD6,0x00,0x00,0xDF,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0xF6,0x00,0xC6, -0xF7,0xB8,0xF5,0x00,0x00,0xD6,0x04,0x04,0x17,0x56,0x56,0x00,0xF6,0xDA,0x04,0xF5, -0x54,0x53,0xF7,0xF7,0x53,0x00,0xF4,0x04,0x04,0x04,0x04,0xF4,0x00,0xF4,0xB8,0xF6, -0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xF6,0xDA, -0x04,0x04,0x04,0xDD,0x00,0xF5,0x56,0x56,0x56,0x56,0x56,0xD5,0x04,0x04,0x04,0x04, -0x04,0x04,0x17,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x56,0x56,0x56,0x56,0x56,0x56, -0x56,0x00,0x00,0x04,0x04,0xD6,0x00,0x54,0xF7,0xF7,0x00,0x00,0xD6,0x04,0x04,0x04, -0x5A,0x00,0x00,0x55,0xB8,0xF3,0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0xF3,0xB8,0xF7,0x00,0x54,0x59, -0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF4,0xF7,0xB8,0xF6,0x00,0x00,0xF3,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x00,0x58,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xF7,0xF5,0x00,0x00,0xD2,0x04,0x04,0x04, -0x04,0xD9,0xF4,0x00,0x00,0xF4,0xF7,0xB8,0x55,0x54,0x53,0x54,0xDE,0x04,0x04,0x04, -0x00,0x53,0x56,0x56,0xB8,0x55,0xF3,0x00,0x00,0xF3,0xDB,0x04,0x04,0x04,0x00,0x53, -0x56,0x56,0x56,0x56,0x56,0x56,0xDF,0x04,0x00,0x53,0x56,0x56,0x56,0x56,0x56,0x56, -0x04,0x04,0x04,0x04,0xD8,0xF5,0x00,0x00,0xB3,0x55,0xB8,0xF7,0xF3,0x00,0x00,0xF7, -0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x50,0x00,0xF4,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x00,0xF6,0xDA,0x00,0x00,0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x00,0xF3,0xF7,0xB8,0x55,0x54,0x54, -0x54,0xD0,0x04,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0xF7,0xF5,0x00,0x00,0xF6, -0x04,0x04,0x04,0x04,0xD9,0xF5,0x00,0x00,0xF3,0x55,0xB8,0xF7,0xF3,0x00,0x00,0xF6, -0xD8,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0x55,0xB3,0x00,0x00,0xD0,0x04,0x04, -0x04,0xDD,0x00,0x54,0xF6,0xB8,0xB3,0x54,0xF4,0x04,0x04,0x56,0x56,0x56,0x53,0x00, -0x56,0x56,0x56,0x56,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0xD7,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xF1, -0x04,0x5B,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x58,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x55,0x00,0x50,0x04,0x04,0x04,0x04,0x04, -0x17,0x00,0xF7,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x58, -0x00,0x60,0x04,0x04,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xB8,0x54,0x00,0x04,0x04, -0xDF,0x00,0x00,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0xF4,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, -0xF4,0x00,0x54,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x53,0xF7,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF7,0xD5, -0x04,0x00,0xF6,0xDA,0xD0,0xF3,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, -0xF6,0x04,0x04,0x04,0x04,0xDF,0x00,0xD9,0x04,0x04,0x56,0x00,0xDA,0x04,0x04,0x04, -0x55,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0xD0,0xB3,0x00,0x00,0xF6,0xD8,0x04, -0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0x00, -0xF6,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0xD3,0xF5,0x04,0x5A,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF2,0x00,0x50,0x04,0x04,0x04,0xFA,0xB3,0x00,0x00,0x00,0xF6, -0xDC,0x04,0x04,0x04,0xF4,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x5A,0xB3,0x00,0x00, -0x53,0x58,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x55,0xD9,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5, -0x00,0xDC,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0x04,0x04,0xD0,0xF3,0x00,0x00,0xB3,0xE1,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00, -0x00,0x54,0xF7,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0xF3,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDC,0x55,0xC6,0x00,0x00,0x00,0xF5,0xEF,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x54,0xF6,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0xF6,0x54,0x00,0x00,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x53,0x55,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x04, -0x04,0x04,0xD0,0xF5,0x00,0x00,0x00,0x00,0xB3,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x54,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x00, -0xF6,0x04,0x00,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0xD5,0xF7,0x53,0x00,0x00,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF4,0x5E,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDE,0xF6,0x54,0x00,0x00,0x00,0x54,0x55,0xD7,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0xD5,0xF5, -0x00,0x00,0x53,0xB8,0xDA,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF1,0x00,0x55,0x04,0xF5,0x00,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xD5,0x04,0xDE,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD2, -0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x54,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD3,0xF5,0x04, -0xD8,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xD6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x59,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xC6,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x54,0x00,0xD6,0x04,0x00,0xF6,0x04, -0xF7,0x00,0xF4,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF4, -0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xD5,0xD9,0x57,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xEC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x00,0x00, -0x0B,0x04,0x00,0x00, -0x1A,0x00,0x00,0x00, -0x00, -0x00, -0x3A,0x69,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5, -0x59,0xF7,0xF7,0xB8,0xF9,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x54,0x00,0x00,0x00, -0x00,0x53,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF7,0x00,0x55,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF3, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x04,0x59,0x5B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xB8,0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD7,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58, -0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x54,0x59,0xDB,0x04,0xE1,0x55,0x00,0x00,0xD3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF9,0xF5,0x53,0xB3,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x0D,0x53,0x54,0x5B,0x04,0x04,0x04,0x04,0xF7,0x00,0xF5,0xD9,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5E,0x00,0x00,0x04,0xB8,0x54,0xF4,0xDC,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF9,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD7,0x00,0xC6,0xDC,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, -0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF5,0xE1, -0x04,0x04,0x04,0x04,0x5D,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00, -0x53,0xD0,0x04,0x04,0x56,0x00,0x53,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x5D,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xF9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x54,0xB8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD6, -0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x17,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF3,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0x58,0x04,0x04,0xE1,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF3, -0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0x04,0x60,0xF3,0x00, -0x00,0xF3,0x60,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x00,0xB3,0x57,0x04,0x04,0x04, -0x04,0xD0,0xB3,0xD6,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0xDC,0x04,0x04,0x04, -0x04,0x58,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x16,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD6,0x53,0x59,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xB3,0x00,0x00,0x00,0xF4,0xDF,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x04,0x04,0xDE,0xF6,0x00,0x00,0x00,0xF6,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x60,0xF3,0x00,0x00, -0x54,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0x60,0xF4,0x00,0x00,0x54,0x55,0xD7,0x04, -0x04,0x04,0x04,0xC6,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xB3, -0x00,0x00,0x53,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5D,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0xD8,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x58,0xF3, -0x00,0x00,0x00,0x00,0xF6,0x0D,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDE,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x09,0x57,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0xB3,0xF7,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0xF6,0x54,0x00,0x00, -0x00,0xF3,0x56,0xD9,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xF6, -0x5C,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x55, -0x53,0x00,0x00,0x00,0x54,0xF5,0x5D,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x60,0xF3,0x00, -0x00,0x54,0xF7,0xD8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, -0xF7,0x04,0x00,0x00,0x53,0x53,0x53,0x53,0x53,0x00,0xD0,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0xE1,0x55,0x54,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0xF7, -0xB3,0x00,0x00,0x00,0x53,0xF7,0xDE,0xDB,0xF7,0x54,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xD7,0x00,0x00,0xDE,0x04,0x04,0x04,0x5E,0xF3,0x00,0x00,0x54,0xF7, -0xD5,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x59, -0xF3,0x00,0x00,0x54,0x55,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF6,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0xDB,0x53,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0x56,0xB3,0x00,0x00,0x00,0xF5,0xD6,0x04,0x00,0xF6,0x04,0x00,0xF6,0xD9,0xB8,0x53, -0x00,0x00,0x54,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0xB3,0x00,0x00,0x54, -0xF5,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xF3,0x00,0x00,0x00,0xF5,0xD6, -0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0xB8,0x53,0x00,0x00,0xC6,0xF7,0xD5,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0xC6,0x00,0x00,0x53, -0xB8,0x04,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xD6,0x00,0x54,0xDD,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xD5,0xF7,0x53,0x00,0x00,0x54,0x55,0xD2, -0x04,0x04,0x04,0x00,0xF6,0xD9,0xB8,0xC6,0x00,0x00,0x53,0xF7,0xDC,0x04,0x04,0x04, -0x04,0x04,0xD8,0x56,0xB3,0x00,0x00,0x54,0xF5,0xDF,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x54,0xB8,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x54,0x00,0x00,0xB3,0x17,0xF6,0x00,0x04,0x04, -0x04, -0x04,0x04,0xE1,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0xF7,0x04,0x04,0x04,0x04,0x53,0x54,0xF9,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x59,0x04,0x04,0x04,0x04,0xD0,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x04,0x04, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD0,0xB3,0x00,0x00,0x54,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0x04,0xF4,0xC6,0x04,0x04,0x5D,0x00,0x00,0x55,0x55,0x00,0x00,0x5B, -0x04,0xD8,0xF3,0x00,0x53,0xF7,0x55,0x00,0x00,0x55,0x04,0x04,0xE1,0x00,0x00,0x5B, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF6,0x00,0x54,0x55,0xF7,0xF5,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x54,0x00,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x04,0x04,0xD6,0x00, -0x00,0xF5,0xF7,0xF6,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0x55,0xF7,0xF3,0x00,0xC6,0xD7, -0x04,0x04,0x04,0x56,0x00,0x00,0xF6,0xF7,0xF4,0x00,0x00,0xDE,0x04,0x04,0x04,0x56, -0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xC6,0x55,0x55,0x53,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0xD9,0x53,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0xB8,0x00,0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, -0x55,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0x55,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0x00,0xF4,0x55,0xF7,0x55, -0x00,0x00,0xF6,0xD9,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x53,0x00,0xD9,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF6,0x53,0x00, -0x00,0xDE,0x04,0x04,0x04,0xD3,0xF4,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00,0x54, -0x17,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF3,0x00,0x00,0xB3,0xDE,0x04, -0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x59,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x00,0xB3,0x55,0xF7,0x55, -0xF3,0x00,0x00,0xF3,0xDE,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x60,0x00,0x00,0xF6,0xF7,0xB3,0x00,0xF6, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xF3,0xD8,0x04,0x00,0xB3, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xDC,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD2,0x00, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x00,0x00,0xF6,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xF3,0x55, -0xF7,0xF6,0x54,0x00,0x00,0xF9,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x53,0x55,0xF7,0x55, -0x53,0x00,0x00,0x00,0x00,0xF3,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0x5B,0x04,0x04,0x04,0x57,0x00,0x00,0xF6,0xF7,0xF4,0x00,0xB3,0xDC,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x55,0xF7,0xF5, -0x00,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x54,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x11,0x04,0x04,0x04, -0x04,0x04,0xF3,0x00,0x00,0x11,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xDE,0x04, -0x04,0x04,0x04,0x04,0xDE,0x00,0xC6,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, -0xF7,0xF7,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00, -0x5A,0x04,0x04,0x04,0x59,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x53,0x00,0x54,0x55,0xF7, -0xF6,0x00,0x00,0x5A,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0xB3,0x55,0x55,0xF3,0x00, -0x54,0xD6,0x04,0x04,0x04,0xF2,0xB3,0x00,0x53,0x55,0xF7,0xF5,0x00,0x00,0xF7,0x04, -0x04,0x04,0x04,0xD2,0xB3,0x00,0x54,0x55,0xF7,0xF6,0x00,0x00,0x5B,0x00,0xF6,0x04, -0x04,0xDE,0xC6,0x00,0xB3,0xF7,0x55,0xF3,0x00,0x53,0xDE,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0xF3,0xF7,0x55,0xF3,0x00,0xF5,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD3,0x54,0x00,0xE1,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x04,0xE1,0x53,0x00,0xB3,0x55,0xF7,0xF3,0x00,0x00,0x17,0x04,0x04,0x00, -0x00,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x54,0xE1,0x04,0x04,0x04,0xF2,0xB3,0x00, -0x53,0x55,0xF7,0xF5,0x00,0x00,0x57,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x56,0x00,0xB3,0xF7,0xF3,0x00,0xB8,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0xDB, -0xB3,0x00,0xB3,0x55,0x55,0x54,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x53,0x04, -0x04,0x04,0xD0,0x00,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xD3,0x04, -0x04,0x04,0xF3,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xC6,0x04,0x04, -0x04,0x04,0x04,0x04,0x54,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x54,0x55, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04, -0x04,0x04,0xD9,0x09,0xC6,0x59,0xDB,0xE1,0xF3,0x00,0x5B,0x04,0x04,0x04,0x04,0x04, -0x5E,0x00,0x5C,0x04,0x53,0x00,0xD2,0x04,0x04,0xF2,0x00,0x53,0x04,0xB8,0x54,0x55, -0x04,0x04,0x04,0xDC,0xF3,0x00,0x58,0x0A,0x00,0x00,0x5E,0x04,0x04,0x04,0x04,0x04, -0xD6,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB8,0x54,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0x55,0x04,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF4,0xDB, -0x04,0x04,0x04,0xD0,0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDE,0x54, -0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x17,0x04,0x04,0x04, -0xE1,0x00,0x54,0xDB,0x04,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x00,0xF3,0x58, -0x04,0x04,0x60,0x00,0xF3,0xDC,0x04,0x04,0x04,0x58,0x00,0xF3,0x04,0x04,0x17,0x00, -0x53,0xD7,0x04,0x04,0x04,0xF9,0x00,0xB3,0x04,0x04,0x04,0xDB,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x58,0x00,0xF6,0x04,0x04,0x04,0x04,0xF6,0x00,0x57,0x04,0x04, -0x04,0x04,0x04,0xD6,0x54,0xF6,0xDA,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0xD5, -0xF6,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xF5,0x54,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xF5,0xDF, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04, -0x04,0x04,0x04,0xD6,0x00,0x00,0x00,0x00,0xD7,0x04,0x04,0xD5,0x00,0x00,0x00,0x5B, -0x04,0x04,0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, -0x00,0xF7,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x58,0x00,0xF6,0x04,0x04, -0xD7,0x54,0x00,0xF6,0xF2,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x60,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0xD8,0x57,0x00,0x00,0xE1,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF2,0x53,0x00,0xF3,0xD6,0x04,0x04,0x04,0x04,0x04,0xDC,0x55,0x00, -0x00,0xD0,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0xF3,0x00,0xD0,0x04,0x04,0x04,0xF4,0x00,0xD6,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0xDE,0x00,0x00,0xF2,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xD2,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0x00,0xF6,0xDA,0x04,0xD9,0xF3,0x00,0xF4,0xDE,0x04,0x04,0x04,0x04,0x04,0x5B, -0x54,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0x54,0x60,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00, -0xF3,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04, -0xD2,0x00,0x54,0xD0,0x04,0x04,0x04,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x59,0x53,0xF4,0xDB,0x04,0x04,0x04,0x17,0x00,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0xD8,0x00,0x00, -0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0xF4,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x57,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0x04, -0xD7,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0x56,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00, -0x00,0xF6,0xDA,0x00,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x5D,0x00,0x54,0xDC,0x04, -0xD9,0x53,0x00,0x57,0x04,0x04,0x04,0x04,0xDE,0xB3,0x00,0x57,0x04,0x04,0xD9,0x53, -0x00,0x56,0x04,0x04,0x04,0x04,0xD3,0xF3,0x00,0x00,0xF6,0xDA,0xDB,0xC6,0x00,0x5A, -0x04,0x04,0x04,0x04,0x5B,0x00,0x53,0xD9,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0xDC,0x54,0x00,0x5D,0x04,0x04,0x04,0x04,0x5B,0x09,0xC6,0x00,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF3,0x04,0x04,0xD8,0xF3,0x54,0x5C,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDC,0x54, -0x00,0x5C,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xD7,0x04,0x00,0x00,0x00,0x5C,0x04, -0x04,0x04,0x04,0xF9,0x00,0x54,0xDC,0x04,0xDB,0x53,0x54,0x58,0x04,0x04,0x04,0x04, -0xD3,0xF4,0x00,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0x54,0xD9,0x04, -0xD8, -0x54,0x54,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB8,0x54,0xF7,0x04, -0x04,0x04,0xD8,0xF5,0x00,0x00,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xB3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0xDE,0x04,0x04,0xB8,0x53, -0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF5,0x04,0x04,0x56,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0x00,0xF9,0x04,0x04,0x04,0x04,0x04, -0x59,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0x04,0x04,0x04,0x55,0x00,0x04,0x04,0x04,0x04,0x57,0x09, -0x57,0x04,0x04,0x04,0xDC,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, -0x54,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04, -0xD3,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x0A,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, -0x56,0x00,0x58,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF2,0xC6,0x00,0x5D,0x04, -0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x58, -0x04,0x00,0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x00,0x04,0x04,0xF3,0x00, -0xD3,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x60,0x04,0xF4,0x00,0xD0,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0x5E,0x04,0x04,0x04,0xF7,0x00,0x0A,0x04,0x04,0x04,0x04,0x04, -0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0xDB,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04, -0xB8,0x54,0xF9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5A,0xF3,0x00,0x00,0xF5,0x0A,0x04,0x04,0x58,0x58,0x58,0x58,0x58, -0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x0A,0xF5,0x00,0x00,0xF3,0x5B,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54, -0x00,0x00,0x00,0x00,0x00,0xF4,0x59,0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04, -0x59,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0xDE,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0xF4,0x00,0xF7,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0xD3,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xE1,0x09,0xB3,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xB3, -0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x53,0x53,0xD8,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x00,0xF4,0x04,0x04,0x04,0x04,0x60,0x54,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8, -0xB3,0x00,0x5E,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0x54,0x60,0x00,0xF7,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xF6,0x04, -0x04,0xF6,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xC6,0x00,0x0D, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, -0x00,0xF3,0xDC,0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x00,0x00,0x00,0xF7,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x0A,0x00,0x53,0xD9,0x04,0x04,0x04,0x56,0x54,0xB8,0x04, -0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0xF3,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF9,0x04,0x04,0x04,0x04, -0x04,0x04,0xF3,0x00,0xDB,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x5B,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x58,0x04,0x04,0x04,0x58,0x00,0x55,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD2,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00, -0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF7,0x04,0xB8,0x00,0x56,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0xF5,0xF6,0x04,0x04,0xB8,0x00,0x56,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0x53,0x00,0xF6,0x04,0xB8,0x00,0x5B,0x04,0x04,0x04,0x04,0x04, -0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0x58,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00, -0x56,0xDA,0x55,0x54,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xF7,0x00,0x59,0x04,0x04,0x04, -0x04,0x04,0x04,0x5C,0x00,0x55,0x04,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04, -0x59,0x00,0xF7,0x04,0xB8,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00, -0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x57,0x04,0x04,0x04,0xF5,0x00,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0xDC, -0x00,0x00,0x04,0x04,0x04,0x04,0x57,0x00,0x60,0xF7,0x00,0x0D,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF3,0x54,0xDE,0x54,0xB8,0x04,0x04,0xB3,0xB3,0x0D,0x00,0x56,0x04, -0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5A,0xDE,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0x59,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x17, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xFB,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x55, -0x00,0x56,0x58,0x58,0xF6,0x09,0x57,0x58,0x58,0x04,0x55,0x00,0xD2,0x04,0x04,0x04, -0x04,0xF4,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x54,0xC6,0xDB,0x04, -0x04,0xDB,0x54,0x54,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, -0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5A,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04, -0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF7,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD7,0x53,0x00,0x5A,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x0D,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0xB3,0x54,0x16, -0xE1,0xE1,0xE1,0xE1,0xE1,0x00,0xF4,0xE1,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xD6,0x00,0xF7,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00, -0xF7,0x04,0x04,0x04,0xF2,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04, -0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0x04,0xF2,0x5B,0xF9,0x00,0x54,0xDC, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x56,0x54,0x54, -0x00,0x55,0xDE,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x00,0x54,0x57,0xD9,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x56,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x00,0x00,0x60, -0xDB,0x55,0x00,0x00,0xD8,0x59,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0xF9,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD6,0x57,0xE1,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x57,0x09,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF4,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xC6,0x56,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD9,0xD8,0x04,0x04, -0x04,0x04,0xDC,0x00,0xF6,0x04,0x00,0xB3,0x04,0x04,0xDA,0x55,0x00,0xF7,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x59,0x54,0xB8,0x04,0x53,0x00,0xD8,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x53,0xD9,0x00,0xF6,0x04,0x0D,0x00,0xF4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xB3,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD3,0x04,0x04, -0x04,0x04,0xD7,0x55,0x00,0x00,0xDF,0xD5,0xE0,0x00,0x0A,0x04,0x00,0xF6,0x04,0x04, -0xDB,0xC6,0x09,0xD0,0x04,0x04,0x04,0x04,0x59,0xF6,0xE1,0x04,0x04,0x04,0x04,0x04, -0xF5,0x00,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xB3,0x04, -0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF7, -0x04,0x55,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD3,0xF5, -0x00,0xD8,0x04,0x04,0x04,0xF7,0x00,0xDE,0xF6,0x00,0xDC,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0x54,0x00,0xD7,0x04,0xD7,0x00,0x54,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xB3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x56,0xC6,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xC6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x59,0x00,0xF6,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xD0, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x55,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x54,0x54,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04, -0x53, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xE0,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04, -0x04,0x04,0xB3,0x53,0x04,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, -0xF7,0x04,0xB3,0xF3,0x04,0xF2,0x54,0xB8,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0xDB,0x54,0x00,0x00,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54, -0x04,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0xDC,0x09,0x54,0xDB,0x04,0x04,0x04, -0x04,0x04,0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, -0x04,0x04,0x04,0x60,0xD0,0x04,0x04,0x04,0x04,0xD9,0x5D,0x0D,0x04,0x04,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x00,0x00,0x54,0x54, -0x00,0x00,0x00,0x54,0x00,0x04,0xD7,0xE1,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0x54,0xB3,0x56,0x56,0x53,0x00,0x58, -0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x00,0x00,0xD3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, -0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0xF3,0x00, -0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xD3,0x53,0x00,0x58,0x04,0x04,0x04,0x04,0xD6,0x59,0xD9, -0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0x04,0xD6,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0xD5,0x59,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04, -0x04,0xF6,0x00,0xD2,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0xF5,0x00,0x04,0x04,0xDB,0xF6,0x00,0x09,0x00,0x00,0x00,0x55,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xB8,0xDC,0x04,0x04,0x04, -0x04,0x04,0x04,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0xD3,0xF7,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x53, -0xC6,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDE,0x00,0xF4,0x04,0x04,0x04,0xF4,0x00, -0xD8,0x04,0x5E,0x00,0x55,0x04,0x04,0x04,0x04,0xB8,0x54,0x57,0x58,0x58,0x58,0x58, -0x58,0x58,0x55,0x00,0x60,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xB3,0x00,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, -0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD0,0x04,0x04,0x04,0x58,0x58,0x58,0x58, -0x58,0x58,0x58,0x58,0x57,0x09,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0x00,0xF7,0x04,0x59,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF3,0x00,0xDC, -0x04,0x57,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0xF4,0x00,0xDF,0x04,0x00,0xF6,0x04,0xF6,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x55,0x57,0x57,0xB8,0xF4,0x00,0x00, -0xF5,0xD7,0x04,0x04,0x16,0x09,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6,0x00,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDE,0x04,0xE1,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB3,0x04,0x57,0x00,0x60,0x04,0x04, -0x04,0xB3,0x54,0x04,0x59,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF9,0x00, -0xF5,0xDA,0xF5,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00, -0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x56,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD5,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0x04, -0x00,0xB3,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00, -0xF4, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xD7,0xF7,0x00,0x00,0x57,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0xDF,0x00,0xB8, -0x04,0x04,0xF4,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xE1,0x04,0xB8,0x54, -0xD7,0x56,0x00,0xDE,0x04,0xB8,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00, -0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x54,0xF7,0x04,0x0D,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0xD6,0xF4, -0x00,0x5E,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0x55,0x13,0x04,0xB3, -0xF5,0xDA,0x04,0x04,0x57,0x54,0x00,0x00,0x55,0x04,0x04,0x04,0xAD,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0xE1,0xE1,0x00,0xF6,0xE1,0xE1,0xD6,0x00,0x55,0xE1, -0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xC6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0xD2,0x59,0x53,0x00,0x00,0x54,0x59,0x04,0x04,0xF6,0x00,0x57, -0x04,0x04,0x04,0x57,0x09,0x54,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54,0x54,0x54,0x00,0x00,0x00,0x54,0x54,0x54, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x0D,0x00,0x59,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0xDC,0xB3,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x59,0x00,0xB8,0x04,0x04,0xF7,0x00,0x57,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x55,0x04,0x00,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x04,0x04,0x0D,0x00,0xF7, -0x04,0x04,0x04,0x04,0xC6,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04, -0xF3,0x00,0xF5,0x16,0xD6,0x57,0x54,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD2,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xB8,0x04,0x04, -0x04,0x04,0x00,0xB3,0x04,0x00,0xF5,0x04,0x04,0x04,0xD6,0x00,0x59,0x04,0x04,0xF6, -0x00,0xF2,0x04,0x04,0x04,0xD7,0x00,0x00,0x00,0x00,0x54,0x54,0x54,0x00,0x00,0x53, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x00, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x00,0x54,0x54,0x54,0x54,0x54,0x54,0x54, -0x54,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, -0x00,0xB8,0x54,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD6,0x00,0x55,0x04,0x04,0xDB,0x00,0xF3, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x57,0x00,0xF7,0x04, -0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x17,0x00,0xB8,0x04,0x00,0xF3,0x58,0x58,0x58,0x59,0xF9,0xD7,0x04,0x04, -0x04,0x04,0x53,0x00,0xB3,0x00,0x00,0x00,0x00,0x54,0xF6,0x0D,0x04,0x04,0x04,0x04, -0x04,0x54,0x54,0x04,0x00,0xF6,0xDA,0x59,0x54,0x00,0x00,0xF3,0x5C,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0xD9,0x54,0xF3,0x04,0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0xD0,0x00,0xF7,0x04,0xDE,0x00,0xF7,0x04,0x04,0xDC,0x00,0xF6,0x04, -0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x55,0x00,0x55, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x17,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x53,0x17,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x55,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF9,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, -0x00,0xF6,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0xDA,0x00,0x00,0x00,0x54, -0x54,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF6,0xE1,0x09,0xC6,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x00,0xF5, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD3,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, -0xF3,0xF9,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0xF9,0x00, -0x56,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xD0,0x00,0x00,0x00,0x53,0x04, -0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x5B,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDE,0x04,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0x55,0x00,0x60,0x04,0x04,0x04,0x04,0x55,0x00,0x57,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0xD9,0x00,0x00,0x55,0x04,0x5B,0x53,0x55,0xB8,0x53, -0x54,0x00,0xB3,0x00,0x00,0x57,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5E,0x53,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54, -0xF7,0x04,0x04,0xD3,0xD7,0x04,0x04,0x04,0x04,0xD7,0x54,0x00,0x55,0xDC,0x56,0x00, -0xC6,0xF2,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xF4,0x00,0xE1,0xE1,0xE1,0xE1,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, -0xB3,0x09,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x00,0xF2, -0x04,0x04,0xD8,0x53,0x00,0xD2,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5A,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04, -0x04,0x04,0x56,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD9,0x04,0x04,0x04, -0x56,0x00,0xF7,0x04,0x04,0x04,0x04,0xB8,0x00,0xF7,0x04,0x57,0x00,0x55,0x04,0x04, -0x04,0x04,0xF2,0x00,0x53,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0x54,0x00,0x00,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0x58, -0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x54, -0x54,0x56,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0xC6,0x57,0x04,0x04,0x04,0x00,0xF5, -0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0xB3,0xF5,0x04,0x04,0x60,0x00,0x56,0x04,0x04, -0x04,0x04,0xF6,0x00,0x0A,0xE1,0xE1,0xE1,0xE1,0x57,0x00,0x56,0x04,0x04,0x04,0x04, -0x00,0xF3,0x58,0x58,0x57,0xB8,0xF5,0x00,0x53,0xD7,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF3,0x58,0x58,0x58,0x58, -0x58,0x58,0xD0,0x04,0x00,0xF3,0x58,0x58,0x58,0x58,0x58,0x5D,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xD0,0x04, -0x00,0xF3,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x17, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0xF6,0x00,0xE1,0x04,0x04,0x04,0x55,0x00,0xD6,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDE,0x00,0x53,0xD9,0x04,0x04,0x00,0xF6,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00, -0xF6,0x04,0x00,0x00,0x00,0x54,0x54,0x00,0x54,0x00,0xF3,0xDE,0x04,0x04,0x00,0xF4, -0x04,0xD8,0xDE,0xDE,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x00,0xF6,0x04,0x17,0x5A,0x57,0x55,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04, -0xDE,0xB8,0x53,0x54,0x53,0xDC,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x57,0x00,0x59,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0x17,0x04,0x04,0x54,0xB3,0x04,0x04,0x59,0x00,0x59,0x04,0x04,0xF3,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0x54,0xD5,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5D,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0xD0,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD2,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x00, -0xC6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0x04,0x54,0x00,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1, -0xE1,0xE1,0x00,0x09,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0xC6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0x04,0xDE,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x57,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF4,0x04,0x04, -0x04,0x04,0x04,0xDC,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x00, -0xF4, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x09,0xC6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, -0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x59,0x00,0xB3,0x0D,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0x04,0xDC,0x00,0xF6,0x04,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04, -0x04,0xDF,0x00,0x56,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0x04,0x04,0x04,0xF4,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, -0xD7,0x00,0xF3,0x04,0x04,0x04,0x58,0xC6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0xC6,0x54,0xD5,0x04,0x04,0x04,0xDF,0xF3,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0xF6,0x00,0xF6,0x0A,0x04,0x04,0xB8,0x00,0x00,0x53,0xB8,0xD7,0x04,0xD5, -0xB3,0xF5,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0xF6,0x54,0x04,0x04,0x04,0xF4,0xB3,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x54,0x00, -0x00,0x55,0x04,0x04,0x04,0x04,0xDE,0x59,0x5E,0xD9,0x04,0xF5,0x00,0xDB,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF5,0x00,0x00,0x00,0x00,0xD3,0x04,0x04,0xDF, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5D,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, -0xDB,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x53,0x54,0xE1, -0x04,0x04,0x04,0x04,0x04,0x0A,0x57,0xF7,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0xDF, -0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0x00,0x55,0xD8,0x04,0x04, -0xDA,0xDF,0x00,0xC6,0x04,0x04,0x17,0x00,0xF4,0xD9,0x04,0x04,0x04,0xE1,0x00,0x54, -0xD8,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x57,0x04,0x04,0x04,0x04,0xF6,0x00,0xF4, -0x56,0x57,0xF5,0x00,0xF4,0xD9,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x57, -0x00,0x5E,0x04,0x54,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x5A,0xF3,0x00, -0x54,0xF5,0xDF,0x04,0x04,0x04,0x04,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54, -0x54,0x00,0x04,0x04,0x04,0x04,0x0D,0xF5,0x00,0x00,0xF3,0x5A,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDC,0xB3,0x00,0x57,0x04,0x04,0x00,0xF5,0x04,0xF4,0x00,0xD7, -0x04,0x04,0x04,0xF7,0x00,0xDB,0x04,0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0xDF,0x00, -0x56,0x04,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0xDB,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x00,0x56,0x04, -0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x53,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x54, -0x54,0x54,0x54,0x54,0x54,0x00,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xE1,0x00,0x00,0xDC,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDC, -0x00,0xF3,0x04,0x04,0x04,0x04,0xDE,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x00,0xF4, -0xE1,0xE1,0xE1,0x0A,0x59,0xF6,0x00,0x54,0xD9,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xDC,0xF3,0x00,0xE1,0x04,0x04,0x04,0x16,0xF3,0x00,0x00,0x53,0xB8, -0xDB,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB3,0x00,0xD8,0x04, -0x04,0x04,0xD9,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04, -0x55,0x00,0xD5,0x04,0x55,0x00,0xDC,0x04,0x04,0xF7,0x00,0x03,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF3,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0xDE,0xF7,0xC6,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF5,0x00,0x5C,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00, -0xD7,0x04,0x04,0x04,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x57, -0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00,0x09,0x57,0x04,0x04, -0x04,0x04,0x04,0x04,0x5A,0x00,0xF7,0x04,0xB8,0x00,0x57,0x04,0x04,0x04,0x04,0x04, -0x04,0xDC,0xF4,0xF5,0x04,0x04,0xB8,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0x53,0x00,0xF6,0x04,0xF7,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x55, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, -0x04,0x5A,0x00,0x00,0x04,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x57, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6,0x09, -0x57,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x5D, -0x00, -0x53,0x04,0x04,0x04,0x04,0x04,0xF9,0x54,0xB8,0x04,0x00,0x00,0xD9,0x04,0x04, -0x04,0x04,0xDB,0x00,0x54,0x04,0xF7,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x59, -0x00,0xF7,0x04,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xF7,0x04, -0xF7,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00,0x53, -0x04,0x04,0x04,0xDA,0x55,0x00,0xF2,0x04,0x04,0xDE,0xD2,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04, -0xB8,0x00,0xDF,0x04,0x04,0x04,0x04,0xB8,0x00,0x60,0x04,0x04,0x04,0x55,0x00,0xD3, -0x04,0x04,0x04,0xF7,0x00,0x00,0xE1,0x04,0x04,0x04,0x59,0x54,0x5C,0x04,0x04,0x04, -0x04,0xB8,0x00,0x57,0xD6,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x59,0x04, -0x04,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x55,0x04, -0x04,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF3, -0x04,0x04,0x04,0x04,0x04,0xDC,0xD2,0x04,0x04,0x04,0x04,0x04,0xF2,0xDD,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF9,0xF9,0x55,0x00,0xF9,0xF9, -0xF9,0xF5,0x00,0xF9,0xF9,0x04,0x04,0xDE,0x54,0x00,0x00,0x55,0xD6,0x04,0x04,0x04, -0x04,0x55,0x00,0x00,0x00,0x00,0x5D,0x17,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x00,0xF6,0xD3,0x04,0x04,0xF5,0x54,0xD6,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x59,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x55,0x00,0x09,0xC6,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5B,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0xD3,0x00,0x00,0x53,0xB8,0x57,0x55,0x00,0x00,0xD6, -0x04,0x04,0x04,0xF6,0x00,0xC6,0xB8,0x57,0x55,0x00,0x00,0x17,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0xF7,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDF,0xF5,0x00,0x00,0xF3, -0x5C,0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0x04,0x04, -0x5C,0xF3,0x00,0x00,0xF5,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDC,0x53,0x00,0xDE,0x04,0x54,0x53,0x04,0x5A,0x00,0xF7,0x04,0x04,0x04,0x59, -0x00,0x58,0x04,0xDC,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF3,0xC6,0x04,0x04,0x04, -0xD0,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0xE1,0xE1,0x0D,0x58,0xB3,0x00, -0x59,0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, -0x00,0x04,0x00,0xF4,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xDC,0x04,0x00,0xF4,0xE1,0xE1, -0xE1,0xE1,0xE1,0xDE,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1, -0xE1,0xE1,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x5A,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xB8,0x54,0x5B,0x04,0x04, -0x04,0x04,0x04,0xF4,0x00,0xDC,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x57,0x00, -0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0x58,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x16,0x00,0xF7,0x04,0x04,0x5D,0x00,0x00,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0xD0,0x04,0x04,0x04,0x04,0xD9,0x00,0xF5,0x04,0x04,0x04,0x5A,0x00,0x5B,0x04, -0x54,0xB3,0x04,0x04,0x04,0x0D,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0xC6,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04, -0xDC,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x54,0xDB, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, -0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0xF9,0x54,0xB8,0x04,0x04,0x04, -0x55,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0x57,0x04,0xDA,0xDA, -0x04,0xDC,0xF4,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x5A,0x04,0xDA,0x04,0x04,0x5E, -0x00,0x54,0xDC,0x04,0xDB,0x53,0x00,0x58,0x04,0xDA,0x04,0x04,0xD2,0xB3,0x54,0x57, -0x04,0x04,0xDB,0x53,0x00,0x58,0x04,0xDA,0x04,0x04,0xD2,0xF3,0x00,0x00,0xF6,0x04, -0xDC,0x54,0x00,0x0D,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0xD2,0x04,0x04,0x04,0x00, -0xF6,0xD4,0x04,0x04,0xDC,0x00,0x00,0x60,0x04,0xDA,0xDA,0x04,0x5D,0x54,0x00,0x00, -0x04,0x00,0x00,0xF5,0xD9,0xDA,0xDA,0x04,0xD0,0x00,0x00,0xDC,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDB,0xC6,0x00,0xD6,0x04,0x04, -0x04, -0x00,0xF6,0x04,0x00,0x00,0xB8,0x04,0x04,0x04,0xDC,0x53,0x00,0x00,0xB8,0x04, -0x04,0x04,0xDB,0xB3,0x00,0xE1,0x04,0x00,0x00,0x55,0xDA,0xDA,0xDA,0x04,0x55,0x00, -0xF7,0x04,0xDC,0x54,0x00,0xF9,0x04,0xDA,0x04,0x04,0x60,0x00,0x00,0xD3,0x04,0x00, -0x00,0x00,0x5B,0x04,0xDA,0x04,0x04,0x5C,0x54,0x54,0xDC,0x04,0xDB,0x54,0x00,0x58, -0x04,0xDA,0xDA,0x04,0xDC,0xF4,0x00,0x00,0xF6,0x04,0x00,0x00,0xB8,0x04,0x04,0x04, -0x55,0x00,0xD6,0x04,0xDC,0x00,0xF6,0xDA,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xC6,0x53,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0xD8,0x00,0xF4,0x04,0x04,0x04,0x04,0xD6, -0x00,0x54,0x04,0x04,0x04,0x04,0xD8,0x00,0xF5,0x04,0x04,0x04,0xD6,0x00,0xF4,0x04, -0x04,0xB8,0x54,0x57,0x04,0x04,0x04,0x04,0x54,0x00,0xD8,0x04,0x04,0x04,0x04,0xF7, -0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF9,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09, -0xC6,0x04,0x04,0xF5,0x00,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0xDF, -0x5B,0x54,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D, -0x00,0xF3,0xDE,0x55,0x00,0x54,0xDC,0x04,0xF2,0x58,0xD6,0x04,0x04,0x04,0x04,0x04, -0x60,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x53,0x04,0x04,0x04, -0x55,0xE1,0xDE,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x56,0x5E, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0xD7,0xD6,0x57, -0x09,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0xDB,0xC6,0x00,0xDC,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x00,0x54,0xB3,0x00,0x00,0x00,0xF5,0xD0,0x04,0x04,0x04,0x04,0xD7, -0x00,0x00,0x00,0x00,0x00,0xF3,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0x16,0x04,0x04,0x04,0xB8,0x54,0xF5,0x60,0xDF,0xF6,0x00,0xB8,0x04,0x04,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04, -0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x54,0x53,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x00,0x55,0xDE, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD7,0x04,0x04,0x04,0x04,0x04,0x60,0x00, -0xF7,0xDA,0xF6,0x00,0xD0,0x04,0xF3,0x00,0x60,0x04,0x04,0x57,0x00,0xF4,0x04,0x5E, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x5B,0x04,0x04,0x55,0x00,0xD0,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD9,0x54,0x53,0x04,0x04,0xF5, -0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF4,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0xF7,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, -0x00,0xB8,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xDE,0x00,0x53,0xD9,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0x00,0x0A,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, -0x55,0xDA,0xF4,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD2,0x00,0xF5,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA, -0x04,0x53,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0x04, -0x04,0x04,0xF9,0x00,0x57,0x04,0x04,0x04,0xD5,0x00,0x55,0xDE,0x00,0xF7,0x04,0x04, -0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x54,0xF2,0x00,0x00, -0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDE,0x04,0x04,0xB8,0x54,0x5C, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF7,0x04,0x04,0x04,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF2,0x00,0xF6,0x04,0x04,0x04,0x04,0xC6,0x09,0xD8,0x04,0xD9,0x00,0xB3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x53,0x54,0x53,0x55,0xF7,0xF6,0x00,0x00,0x59, -0x00,0xF6,0xDA,0x00,0x00,0x00,0x54,0xB3,0x55,0xF7,0xF3,0x00,0x54,0xE1,0x04,0x04, -0x04,0xDE,0x53,0x00,0x53,0x55,0xF7,0xF5,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0xF2, -0xB3,0xC6,0x53,0x55,0xF7,0xF5,0x54,0x00,0x56,0x00,0xF6,0xDA,0x04,0xE1,0x54,0x00, -0xF3,0xF7,0x55,0xF3,0x00,0x54,0x0D,0x04,0x04,0xF7,0xF7,0x00,0x53,0xF7,0xF7,0x04, -0x04,0xD6,0x00,0x00,0xF3,0x55,0x55,0xF3,0x00,0xF5,0xF6,0x00,0x04,0x00,0x00,0x00, -0x54,0x55,0xF7,0xF6,0x00,0x00,0x5A,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0xD6,0x00,0xC6,0xDB,0x04,0x04,0x00,0xF6,0xDA, -0x00,0x00,0x00,0xF3,0xF7,0x55,0x00,0x00,0x5B,0xF6,0x54,0xF3,0xF7,0x55,0x54,0x00, -0xF7,0x04,0x04,0x00,0x00,0x00,0x53,0x55,0x55,0x53,0x00,0xB3,0xD5,0x04,0x04,0xE1, -0x54,0x00,0xF3,0x55,0xF7,0xF3,0x00,0x00,0x0A,0x04,0x04,0x00,0x00,0x00,0x54,0xF3, -0x55,0xF7,0xB3,0x00,0x54,0xE1,0x04,0x04,0x04,0xDE,0x53,0x00,0x53,0x55,0xF7,0xF6, -0x00,0x00,0x57,0x00,0xF6,0xDA,0x00,0x00,0x54,0xF3,0x56,0x04,0x0A,0x00,0x09,0xF7, -0xB3,0x00,0xF9,0x04,0xF7,0xF7,0x53,0x00,0xF7,0xF7,0xF7,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x60,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0xD7,0x04,0x59,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0xF7,0x59,0x04,0x04, -0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0xD8,0x53,0x00,0xF2,0x04,0x04,0x04,0xB3,0x00, -0xDE,0x04,0x04,0x16,0x09,0x55,0xDA,0x04,0x04,0x04,0x04,0xDE,0x00,0xF6,0xDA,0x04, -0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, -0xF6,0x04,0xDC,0xDC,0xF2,0x00,0x56,0xDC,0xDC,0xDF,0xC6,0x57,0xDC,0x04,0x04,0x00, -0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x53,0x04,0x04,0x04,0x60,0x00,0x00, -0x00,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0xD3,0x04,0x04, -0x57,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDE, -0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x59,0x04,0x04,0x04,0xF5,0x00,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0xD0,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF4,0x04,0x04,0x04,0x04, -0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF7,0x04, -0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF3, -0x54,0x04,0xDC,0xDE,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0xDE, -0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF4,0x04,0x04, -0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x0A,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xB8,0x00,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0xD6,0x00, -0xF5,0x04,0xDE,0x54,0x00,0xF7,0x56,0x00,0x53,0x00,0xD5,0xF5,0x00,0xDF,0x04,0x04, -0x04,0x04,0x04,0xD9,0x00,0xF3,0x04,0xDB,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x5C,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x59,0xDE,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x09,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xF7,0x55,0xD8,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4, -0x54,0x59,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x5C,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x54,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x0D,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x57,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x5D,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0x04,0x00,0xF5,0x04, -0x04,0x04,0x04,0xDA,0x5E,0xE1,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD5,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x55,0x00, -0xDE,0x04,0x04,0x04,0x04,0xB3,0x00,0x00,0x00,0x60,0x04,0x04,0x04,0x04,0xF5,0x54, -0xDB,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x5B,0x04,0x5B,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x0A,0x00,0x55,0x04,0x04,0x04,0xD5,0x54,0xB3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD6,0x04,0x04,0x54,0x53,0x04,0x04,0x04, -0x04,0x04,0x57,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF7,0x04, -0x04,0x04,0x04,0x56,0x00,0x59,0xDA,0x58,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0xB8,0xB3,0x00,0x00,0x00,0xF6,0xE1,0x04,0x00,0xF6,0x04,0x00, -0xF6,0xD8,0xB8,0x53,0x00,0x00,0xC6,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x56, -0xB3,0x00,0x00,0x00,0xF6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x56,0xB3,0x00, -0x00,0x00,0xF5,0x0D,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0xF7,0x53,0x00,0x00,0xC6, -0xF7,0xDC,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD3,0xF7, -0x54,0x00,0x00,0xB3,0x57,0x04,0xF6,0x00,0x04,0x00,0xF6,0x0D,0xF4,0x00,0x00,0x00, -0xF5, -0x0A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x57,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x5C,0xB3, -0x00,0x00,0xF3,0x60,0x04,0x04,0xB8,0x54,0x00,0x00,0xB3,0x58,0x04,0x04,0x04,0x00, -0xF6,0xE1,0xF4,0x00,0x00,0x54,0xF7,0xDB,0x04,0x04,0x04,0x04,0xDC,0xF7,0x53,0x00, -0x00,0x54,0x55,0xD3,0x04,0x04,0x04,0x00,0xF6,0xD8,0xB8,0x53,0x00,0x00,0xC6,0xF7, -0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x56,0xB3,0x00,0x00,0x00,0xF5,0xDF,0x04,0x00, -0xF6,0x04,0x00,0xF6,0xB8,0x00,0x09,0x04,0x04,0x5B,0xC6,0x00,0x54,0x57,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x0D,0x54,0xB8,0x04, -0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A, -0x00,0x56,0x04,0xF7,0x00,0x58,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3,0x04,0x04,0xF5, -0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD7,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04, -0x04,0x54,0x55,0x04,0x04,0xD8,0x00,0xF7,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x57,0x55,0x04,0x00,0xF5,0x04,0x04,0x04,0xD5,0x00,0xF6,0xD8,0x00,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x0D,0x00,0xF3,0xD8,0x04,0x04,0x04, -0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x58,0x56,0x00,0x54,0xB8,0x58,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, -0x00,0x59,0x04,0x04,0xF4,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x54,0x53, -0x04,0x04,0x57,0x00,0x0A,0x04,0x04,0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x60,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xE1,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD0,0x04,0x04,0x00,0xF5,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0xDA,0x55, -0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xB3,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF7,0x04,0x04,0x55,0x54,0xB8,0x04,0xDE, -0xF4,0x00,0x00,0xF3,0xDC,0x04,0x58,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF7,0x00,0xD6,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0xC6,0x09,0xDC,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x5D,0x00,0x53,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x55,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x54,0x00,0xE1,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x5B,0x00,0xF6,0x04,0x00,0xF6, -0x57,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x55,0x54,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x00,0xD6,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x55,0x04,0x04,0xB3,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF4,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x58,0x00,0x56,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0xDE, -0x00,0x55,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x57,0x09,0x57,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x57,0x54,0x57,0x04,0x04,0x04,0x53,0x09,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x57,0x00,0x5A,0x04,0x04,0x04, -0x04,0x5B,0x00,0xF6,0x04,0x04,0x04,0xF5,0x00,0xF9,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0xDE,0x04,0x04,0x04,0x04,0xB8,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x0A,0x00,0xF3,0x04,0xDA,0x55,0x00,0x0D,0x04,0x04,0x04,0x04,0xB3,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x16,0x04,0x04,0x04,0x04,0xDB, -0x00,0xF4,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04, -0x04,0x04,0x53,0xF5,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x53,0x54,0x04, -0x53,0x00,0xD2,0xDA,0x04,0x57,0x00,0x56,0x04,0xF7,0x00,0x0A,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xE0,0x54,0xDB,0x04,0x04,0x59,0x00,0xB8,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x56,0x54,0xF5,0xDB,0x04,0x04,0x5D,0x00,0x54,0xD7, -0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04, -0x57,0x00,0xF5,0xD9,0xDA,0x04,0x04,0xD6,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x56,0x00,0x55,0xDA,0xDA,0xDA,0x04,0xF7,0x00,0xB8,0x04,0x04,0xDF,0x00, -0x55,0xDA,0x04,0x04,0x57,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00, -0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x58,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x53,0x00,0xD3,0xDA,0xDA,0xD3,0x00, -0x53,0x04,0x04,0x0A,0x00,0xB3,0xDC,0xDA,0x04,0x04,0x59,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x56,0x04,0x04, -0x04,0xDC,0xB3,0x00,0xE1,0x04,0x04,0xD8,0xF4,0x00,0x55,0xD3,0x04,0xF1,0xF2,0x04, -0xDB,0xF7,0x00,0x54,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0x00, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0xD0,0x00, -0xF3,0x04,0x04,0x04,0xD7,0x00,0x00,0x55,0xD3,0x04,0xDA,0xDA,0x04,0x04,0x5B,0x00, -0x00,0x16,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0xD5,0xF7,0x00,0x00,0xD0, -0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0xF4,0xE1,0x04,0xDA,0xDA,0xDA, -0x04,0xDE,0xF5,0x00,0xF3,0xD9,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD6,0x00,0x54,0xDC,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD5,0x00,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x53,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0xF5,0x00,0xF6,0xDE,0x04,0xDA, -0xDA,0x04,0x04,0x59,0x00,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04, -0x04,0xDC,0xF3,0x00,0x5C,0x04,0x04,0xF2,0x54,0x00,0xF6,0xDE,0x04,0xDA,0xDA,0xDA, -0x04,0xDE,0xF5,0x54,0x53,0xDC,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0x0D, -0x00,0x00,0xDC,0x04,0x04,0xF4,0x00,0x17,0xDA,0x04,0x04,0x55,0x00,0x5B,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x00,0xB3,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0x00,0xD3, -0x04,0x04,0x04,0xD3,0x00,0x54,0xD5,0x04,0x04,0x04,0xDF,0x00,0x55,0x04,0x04,0x04, -0x04,0x04,0xDB,0xC6,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0x57,0x04,0xD0,0x00,0x54,0xD0,0x04,0x04,0xDF,0x00,0x58,0x04,0x04,0x04,0x04, -0x04,0x04,0xD7,0xF5,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x57,0xC6, -0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x16,0xF3,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0x54, -0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0xDA, -0x04,0x04,0x04,0x54,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF4,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6, -0xDA,0x00,0x00,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x04,0x04,0x04,0xF5,0x09, -0x04,0x04,0x04,0xB8,0x00,0x55,0xD2,0xDC,0xF7,0x00,0x56,0x04,0x5B,0x54,0x54,0x55, -0xF6,0x00,0x53,0xDB,0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0x09,0xC6,0xF7,0xF6,0x00,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0xB8,0x54,0x54,0x04,0x57,0x00,0xB3,0xF2,0x04,0x04,0x04,0x04,0xD6, -0x5B,0x00,0x00,0x59,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0xF6,0x54,0x53, -0x55,0xF7,0xF5,0x54,0x00,0x5B,0x04,0x04,0x58,0xF7,0xF7,0x00,0xF6,0xDA,0x04,0xF4, -0x00,0x53,0x55,0x55,0x53,0x54,0xF4,0xD8,0x04,0x04,0x04,0xF4,0x00,0xF4,0xF7,0xF5, -0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x54,0x00,0xF6,0xDA, -0x04,0x04,0x04,0xE1,0x00,0xF4,0xF7,0xF7,0xF7,0xF7,0xF7,0xD0,0x04,0x04,0x04,0x04, -0x04,0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, -0xF7,0x00,0x00,0x04,0x04,0x5B,0x00,0x54,0x55,0x55,0x00,0x00,0x5A,0x04,0x04,0x04, -0x56,0xC6,0x09,0x55,0xF7,0xF3,0x00,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x00,0xF3,0xF7,0x55,0x00,0x54,0x56, -0x04,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xF4,0x55,0xF7,0xF5,0x00,0x00,0xF3,0xDE, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x00,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0x55,0xF4,0x00,0x00,0x17,0x04,0x04,0x04, -0x04,0xD7,0xF4,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00,0xC6,0x60,0x04,0x04,0x04, -0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF3,0x00,0x00,0xF3,0xDE,0x04,0x04,0x04,0x00,0x53, -0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x59,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, -0x04,0x04,0x04,0x04,0xDC,0xF5,0x54,0x54,0xB3,0x55,0xF7,0x55,0xF3,0x00,0x00,0xF7, -0xD9,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x59,0x00,0xF4,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x55,0x00,0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00, -0xC6,0x5E,0x04,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF5,0x00,0x09,0xF5, -0x04,0x04,0x04,0x04,0xD7,0xF4,0x00,0x00,0xF3,0x55,0xF7,0x55,0xF3,0x00,0x00,0xF5, -0xDC,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xB3,0x00,0x00,0xF9,0x04,0x04, -0x04,0xE1,0x00,0x00,0xF6,0xF7,0xB3,0x00,0xF4,0x04,0x04,0xF7,0xF7,0xF7,0x53,0x00, -0xF7,0xF7,0xF7,0xF7,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0xDF,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD6, -0x04,0x57,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x56,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0xF6,0x00,0x59,0x04,0x04,0x04,0x04,0x04, -0x58,0x00,0x55,0xDA,0x04,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0x58,0x04,0x04,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0x00,0x04,0x04, -0x59,0x00,0x00,0x04,0x04,0xF6,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54, -0xF4,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x00,0xD7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6, -0xF4,0x00,0x54,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x53,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x55,0x0C, -0x04,0x00,0xF6,0xDA,0xF9,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, -0xF6,0x04,0x04,0x04,0x04,0x59,0x00,0xF2,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0xD8, -0x55,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0xF9,0xB3,0x00,0x00,0xF6,0xD3,0x04, -0x04,0x04,0xF6,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x53,0x00,0x00, -0xF5,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x0A,0xF5,0x04,0x56,0x56,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x17,0x00,0x59,0x04,0x04,0x04,0x57,0xB3,0x00,0x00,0x00,0xF5, -0xD6,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x56,0xB3,0x00,0x00, -0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0xF6,0xD2,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0xD6,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0x04,0x04,0x5E,0xF3,0x00,0x00,0xB3,0x5D,0x04,0x04,0x04,0x04,0x04,0x16,0xF3,0x00, -0x00,0x54,0x55,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD2,0xF6,0x00,0x00,0x00,0xF3,0x5C,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD6,0x55,0xC6,0x00,0x00,0x00,0xF4,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x54,0xF6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, -0xF5,0x54,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x53,0xF6,0x5D,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF5,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0xF9,0xF5,0x00,0x00,0x00,0x00,0xB3,0xF7,0xDE,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0x00,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00, -0xF6,0x04,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF4,0x57,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x60,0xF6,0x54,0x00,0x00,0x00,0x54,0xF6,0xDF,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x55,0xDE,0x04,0x04,0x04,0x04,0x04,0xD0,0xF5, -0x00,0x00,0x54,0xF7,0xD9,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xF6,0x00,0xE1, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0xF5,0x00,0xD9, -0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0xD0,0x04,0x16,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x17, -0x04,0x17,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xD8,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x0A,0xF4,0x04, -0xDC,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x5A,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x54,0x00,0x56,0xD8,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0xC6,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x54,0x00,0x5B,0x04,0x00,0xF6,0x04, -0xF7,0x00,0xF4,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3, -0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0xD0,0xD7,0xB8,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xEC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x00,0x00, -0x49,0x04,0x00,0x00, -0x1B,0x00,0x00,0x00, -0x00, -0x00, -0x06,0x74,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, -0xB8,0x5D,0x17,0x17,0x5D,0xF7,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x54, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xB8,0xF2,0x04,0x04,0x04,0x04, -0x04,0x04,0xE1,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x17,0xDC,0xEF,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x55,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x60,0x5D,0x54,0x5D, -0x60,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDC,0xD6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5,0xDF,0xFA,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x57,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0xB8,0xD9,0xD9,0xDF,0xB8,0x55,0xF7,0x5A,0xD2,0x04,0xDE, -0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x58,0xDE,0x04,0xF2,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDE,0xD9, -0x17,0x00,0x00,0x00,0x00,0xDA,0xDC,0xEF,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD2,0x04,0x5B,0x00,0x5B,0xDA,0xD2,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x5E,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xB8,0xDC,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD8,0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0xD7,0xDB,0xB8,0x54,0x00,0x00,0x00,0x00,0xF3,0xDE,0x04,0x59,0x54,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF, -0x04,0x5A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x53,0xD3,0xD5,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xDE,0x57,0x54,0x00,0x00, -0x00,0xD6,0xD3,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0xDC,0xD9,0x58,0x00,0x00,0x00,0x59,0xD9,0xD7,0xF5,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xB8,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x56,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, -0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xC6,0x00,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF6,0xDC,0xDA,0x60,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xDE,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0xDD,0x5A,0x53, -0x00,0x00,0x00,0x00,0x54,0x54,0xF7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60, -0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDB,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, -0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xD8, -0x17,0x00,0x00,0x00,0xD6,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, -0xF2,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD3,0xD6,0x00,0x00,0x00,0x00,0xF7, -0xD0,0xDB,0xDB,0xD0,0xF7,0x00,0x00,0x00,0x00,0x58,0xDE,0xDB,0xD8,0xD7,0x60,0xF3, -0x00,0x00,0x00,0x00,0x57,0xD0,0xF3,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xD9,0x56, -0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0xD0,0x53,0x54,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDE,0xDD,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x53,0xDC,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF7,0xD6,0xD7,0xD8, -0xD8,0xD7,0x12,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x53,0xB8,0xE1,0xDD,0xD8,0xD3, -0xDF,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, -0x00,0x00,0x00,0x00,0xB3,0x16,0xF2,0xD9,0xD9,0xDE,0x5D,0x53,0x00,0x00,0x00,0x00, -0x54,0xF5,0xDF,0xD2,0xD9,0xD9,0xDE,0xFA,0xB3,0x54,0x00,0x00,0x00,0xD0,0xDA,0xF7, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xE1,0xDD,0xD8,0xDC,0xD6,0x55, -0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDA,0xDE,0x53,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0xF6,0xD9,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3, -0x5B,0xD0,0xDC,0xD8,0xD9,0xD7,0xD6,0x56,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0x03,0x00,0x04, -0x04,0x04,0x04,0xDA,0xDB,0xD2,0xD6,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5, -0xFA,0xD0,0xDC,0xDA,0xD9,0xD3,0xE1,0x59,0x53,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0x04,0xD9,0xD3,0xD0,0x5E,0xF6,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x17,0x54,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xB3,0x59,0xE1,0xD7,0xD9,0xDA,0xD5,0xDE,0x60,0xF6,0x09, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x04,0xDE,0x00,0x00,0xF7,0xE1,0xD5,0xDA,0xDD,0xD6,0xF6,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0x04,0x5D,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xD2,0x00, -0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x59,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0x59,0xD0,0xDC,0xD8, -0xD8,0xD3,0xE1,0x5A,0xF3,0xC6,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x53,0x59,0xE1,0xF1,0xD8,0xD9, -0xF1,0xE1,0x59,0x53,0xF5,0xDF,0xD7,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0xD5,0xDB,0xF7,0x00,0x00,0x00,0x55,0xEF,0xD7,0xD9,0xDB,0xDE,0x59,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF7, -0xD6,0xD7,0xD9,0xDB,0xDE,0x5E,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0xD5,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, -0xD8,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x04,0xB8,0x00,0x00,0x00, -0x00,0x00,0x17,0x04,0xDF,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x0D, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xDF,0x04,0xDF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0xDF,0x00,0x00,0xF3,0xD2, -0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD3,0xD8,0xD9,0xD7, -0xDF,0xF5,0x00,0x04,0xDE,0x00,0x04,0xDE,0x09,0xB8,0xE1,0xDC,0xD8,0xD5,0xD0,0x58, -0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD6,0xF1,0xD8,0xD9,0xF2,0x17,0xF5,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x0A,0xD7,0xD9,0xD8,0xD2,0x17,0xF5,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x57,0xD0,0xDD,0xDA,0xD5,0xD0,0x57,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x57,0xD0,0xDD,0xD8,0xD5, -0xE1,0xB8,0x00,0xF1,0xD7,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x17,0x04,0xD6,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x54,0x58,0xD0,0xDD, -0xDA,0xDB,0xDE,0x5A,0x00,0x54,0x00,0x00,0x04,0xDE,0x00,0x56,0xD0,0xD5,0xDA,0xDD, -0xD0,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x58,0xD0,0xD5,0xDA,0xD5,0xD0,0x56, -0xC6,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xC6,0x56,0xD0,0xDB,0xD9, -0xDE,0x56,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x54,0x59,0xDE, -0xDB,0x04,0xD5,0xD6,0xF5,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x17, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0xD9,0xF4,0x00,0x00, -0x00,0x00,0xD7,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x60,0x00,0x00, -0x00,0x00,0x00,0x5B,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0xF5,0x04,0xF2,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xD0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD0,0x00,0x00,0x00, -0xFA,0x04,0x55,0x00,0x00,0x00,0x00,0xC6,0x56,0xF2,0x04,0x04,0x04,0xD9,0x5B,0x00, -0x00,0x00,0x00,0x00,0x00,0xFA,0xD9,0x55,0x00,0x00,0xF7,0xDB,0xD8,0xD0,0xE1,0xD9, -0xDB,0xF7,0x00,0x00,0xEF,0x04,0xDB,0xE1,0xD6,0xF1,0x04,0xDE,0xF3,0x00,0x54,0x58, -0xD9,0xD5,0xF7,0x00,0x00,0x00,0x00,0x00,0x5E,0x04,0x60,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xE1,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x5D, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x0A,0xDB,0xF3, -0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xDB, -0x56,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xDC,0x04,0x04,0x0A,0x0A,0x0A,0x0A, -0x0A,0x0A,0x0A,0x0A,0x00,0x53,0x59,0xD8,0xD9,0xD0,0xD6,0xDE,0x04,0xDC,0xF7,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xF6, -0xDE,0x04,0xD7,0xD6,0xE1,0xDC,0x04,0xDE,0xF4,0x00,0x00,0x00,0xB8,0xDC,0x04,0xD7, -0xD6,0xD6,0xDC,0x04,0xDE,0xF5,0x00,0x00,0x00,0x56,0x04,0xD6,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x5D,0xDA,0xD9,0xD0,0xD6,0xDE,0x04,0xDB,0x56,0x00,0x00,0x00, -0x00,0x00,0x00,0xDF,0x04,0x60,0x54,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0xD6,0xDA,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0x60,0xDC, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x60, -0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xDC,0x04,0xDC,0xD0,0xD6, -0xD6,0xD0,0xDB,0x04,0xDE,0x55,0x00,0x00,0x00,0x55,0xDA,0xD0,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0xB8,0x00,0x04,0xDC,0x0A,0x0A,0x0A, -0xE1,0xD2,0x04,0x04,0x17,0x54,0x00,0x00,0x00,0x00,0x5D,0xDB,0x04,0xDB,0xD0,0xD6, -0xD6,0xDE,0xD9,0x04,0xD2,0xF7,0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0xD6,0xD6,0xDE, -0xD5,0x04,0xD9,0x17,0x53,0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x57, -0xD7,0x04,0xD9,0xDE,0xD6,0xD6,0xD0,0xDB,0x04,0xDB,0x16,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, -0xF7,0xD5,0x04,0xDE,0xD6,0xDE,0x04,0xD7,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0xDF,0x04,0xD6,0x00,0x00,0x04,0xDC,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x56,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5, -0x04,0xDE,0x00,0x00,0x00,0xC6,0x56,0xD7,0x04,0xD9,0xD0,0xD6,0xD6,0xD0,0xDB,0x04, -0xD7,0x56,0x54,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0xB8,0xD2,0x04,0xD9,0xDE,0xD6,0xD6,0xDE,0xD8,0x04,0x04, -0x04,0x04,0xDE,0x16,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xB3,0xDE,0x04,0x59, -0x00,0x00,0x54,0xB8,0xD5,0x04,0xD2,0xD6,0xE1,0xD5,0x04,0xD6,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0x04,0xF2,0xD6,0xD6, -0xD3,0x04,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x5A,0x04,0x04,0xDF, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x04,0xD0,0x00, -0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2, -0xD4,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x04,0x0A,0x0A, -0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0xD2,0xD8,0xF6,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDF,0xD8,0x55,0x00,0x00,0x00,0x59,0x04,0x60,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x53,0xEF,0x04,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04, -0xDE,0x00,0x04,0xDE,0x16,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00, -0x00,0x53,0xDF,0x04,0xDA,0xDE,0xD6,0xE1,0xF1,0x04,0xDC,0x57,0x00,0x00,0x00,0x00, -0x00,0xDF,0xDA,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04,0xDE,0x00,0x00,0x53, -0xD6,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x54,0xF3,0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xD9,0xD8,0x59,0xDE, -0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0x04,0xF2, -0xF3,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x00,0x00,0x00,0x00,0x09,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0x54,0xF3,0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04, -0xDE,0xF5,0x00,0x00,0x04,0xDE,0x60,0x04,0xDB,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3, -0x00,0x00,0x54,0xF3,0xE1,0x04,0xDB,0xD0,0xD6,0xD0,0xD9,0x04,0x16,0xDE,0x04,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0xC6,0x56,0xD8,0xD9,0xE1,0xD6,0xDB,0xD8,0x57,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x54,0x54,0xEF,0x04,0xD9,0xD0,0xD6,0xDE,0xD4, -0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0x04,0xDC,0xB3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x04,0x58,0x00,0x00,0x00,0xF7,0x04,0x04, -0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2,0xD9,0xF7,0x00,0x00,0x00,0x55,0xDB, -0xD7,0xF4,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0xDB,0x04,0xE1,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x3E,0x54,0x00,0xD5,0xD0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xDC,0x00,0x00,0x00,0x56,0x04,0x58,0x00, -0x00,0x00,0x00,0x56,0xD9,0xF2,0xB8,0xF3,0xB8,0xD7,0xDA,0x56,0x00,0x00,0x00,0x00, -0x00,0xF4,0xD5,0xDF,0x00,0x00,0xD0,0x04,0x57,0x00,0x00,0x57,0x04,0xD0,0x00,0x58, -0x04,0xDE,0xF6,0x00,0x00,0xF3,0xD6,0x04,0xD6,0x00,0x59,0xD8,0xDC,0xF7,0x00,0x00, -0x00,0x00,0x00,0xF4,0xD5,0xD7,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD8, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x17,0x5A,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x56,0x04,0x58,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0xD9,0xD5,0x56,0x00,0x00,0x00,0x00,0x59,0xD8,0xDC,0xF4,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0xF7,0xFC,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xB8,0xD4,0xD3,0xF7,0x00,0x00,0x00,0x59,0xD8,0xD7,0xB3,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xDE,0x04,0x60,0x00,0x00, -0x00,0xF3,0x12,0x04,0xE1,0x54,0x00,0xF6,0xDC,0xD8,0x5B,0x00,0x00,0x00,0x53,0xDF, -0x04,0xD0,0x00,0x00,0x00,0x00,0xDE,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x56, -0xDA,0xD2,0x55,0x00,0x00,0x00,0x56,0xD9,0xD5,0xF5,0x00,0x00,0x00,0x00,0x00,0xF3, -0xD2,0xD8,0xB8,0x54,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0xF7,0x04,0x0A,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x0A,0xD9,0x04,0xF1,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0x04,0xDB,0xEF,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xD0,0x56,0x00,0x00,0x00,0x00,0x00,0xB3,0x04, -0x04,0xDC,0xF7,0x00,0x00,0x00,0xD0,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0xF6,0xD9,0xDE,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF7,0xD7, -0x04,0xB8,0x54,0x00,0x00,0xEF,0x04,0xD5,0xFA,0xF3,0x00,0x00,0x00,0x00,0xF5,0x17, -0xD9,0xDB,0x56,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD0,0x04, -0xD0,0xB3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0xDB,0x60,0xF4, -0x00,0x00,0x00,0x00,0xB3,0x5A,0xDC,0x04,0xD6,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xD6,0x04,0x59,0x54, -0x00,0x00,0xDF,0x04,0x60,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xD2, -0xF3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0xF4,0xDD,0x04,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0xDE,0x00,0x00, -0x00,0x59,0xD8,0xDB,0x5E,0xF4,0x00,0x00,0x00,0x00,0xF3,0xFA,0xDB,0xD8,0x59,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, -0x58,0xD9,0xDA,0xDF,0xF6,0x00,0x00,0x00,0x54,0xF6,0x04,0x04,0x04,0xDF,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x0D,0x04,0xEF,0x00,0x00,0x00,0xF3,0xD3, -0xDA,0x5D,0x00,0x00,0x00,0xF4,0xD0,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0xF7,0xD8,0xD5,0x56,0x00,0x00,0x00,0x53,0x60,0x04,0xF2, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xDE,0x04,0x04,0xD5,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x04,0xD9,0xF3,0x00,0x00,0x00,0x00, -0x00,0xD2,0x04,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00, -0x00,0x00,0x00,0x53,0xDE,0xDA,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD9,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0xD5,0xE1,0x00,0x00,0x00,0x00,0x55,0xDA,0xE1,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0A,0x04,0xDE,0xF7,0x00,0x00,0x00,0x00,0x56,0xDC,0x04,0x04,0xDE,0x00,0x04,0x04, -0x04,0xD0,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xD0,0x00,0x00,0x00,0x0D,0x04,0xDE, -0xF7,0x00,0x00,0x00,0x00,0x5B,0xD9,0xD9,0xF7,0x00,0x00,0x00,0xDF,0x04,0xDE,0xF7, -0x00,0x00,0x00,0x00,0x57,0xDC,0x04,0x04,0xDE,0x00,0x00,0xEF,0x04,0xD6,0xF5,0x00, -0x00,0x00,0xF5,0xD6,0x04,0xD6,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0xE1,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7,0xDB,0xDC,0x55,0x00,0x00,0x00,0x04, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x54,0x54,0xE1,0x04,0xE1,0xF6,0x00,0x00,0x00,0xF3,0x0A,0x04,0xDE,0x53,0x00, -0x04,0x04,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xD6,0x04,0xD0,0x00,0x54,0x54,0xE1, -0x04,0xE1,0xF5,0x00,0x00,0x00,0xF6,0xE1,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0xDE,0xD8,0xF7,0x00,0x00,0xB8,0xD8,0xDE,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x57,0x04,0xF2,0xF6,0x00,0x00,0x00,0xB8,0xD5,0x04,0x04,0x00, -0x00,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF3,0xD5,0x04,0x04,0xD6,0x00,0x00,0x00,0x17,0x04,0x04,0xDA,0x55,0x00,0x00, -0x00,0x00,0x00,0x00,0xB8,0xD8,0xDE,0x00,0x00,0x54,0xD0,0x04,0x56,0x00,0x00,0x00, -0x00,0x00,0x00,0xEF,0x04,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0xD0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0x3B,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x16,0x04,0xF6,0x54,0x00,0xF5,0x04,0x17,0x00,0x00,0x00,0x00,0xD0, -0xDA,0x55,0x00,0x00,0x00,0xF7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDB, -0xF5,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0xDE,0xD9,0xF6,0x00,0x00, -0x00,0x00,0x53,0xDE,0x04,0xEF,0xDA,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x5A, -0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x53,0xDD,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04, -0x58,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x5A,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x55,0xD2,0xD8,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0xB8, -0x54,0x00,0x00,0x00,0x00,0x17,0x04,0x5A,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x59,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, -0x04,0xB8,0x54,0xDF,0x04,0x16,0x09,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x56,0x00, -0x00,0x00,0x58,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00, -0x00,0x00,0x00,0x5E,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD9,0xD2,0xF3, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xF3,0x00,0x00,0x00,0x00,0x54, -0x00, -0x56,0xD0,0xDA,0x04,0xD2,0x5A,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x59,0xD2,0x04,0xDA,0xE1,0x56,0x54,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x5A,0xDA,0xFA,0x00,0xF4,0xF7,0xF5,0x54,0x54,0xF3,0xF7,0x04,0x04,0x0A,0xF7,0x00, -0x00,0x00,0x56,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, -0x59,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDF,0x00,0x00, -0xFA,0x04,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDB,0xD5,0x55, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xEF,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x04,0xD7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0xD2,0x04,0x60,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0xF4,0xD9, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x55,0xDB,0xDB,0xF7,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x59, -0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0x04,0x04,0xDE,0x00,0x00,0x57,0xDA,0xD3,0xF7, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD7,0xD8,0x57,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD9,0xD9,0x57,0x00, -0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x04,0x04,0xD9,0x56,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x59,0x04,0xDE,0xB3,0x00,0x00,0x00,0x58,0x04,0xE1,0x00,0x00,0x00, -0x00,0x00,0xF5,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0xD6,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x57,0x00,0x00,0x00, -0x00,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0xDC,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0x00,0x55,0x04,0x04,0x04, -0xDA,0xF6,0x54,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xDF,0x00,0x00,0x00,0x00,0x60, -0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF3,0xD7,0xD2,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x56,0x00, -0x00,0x00,0x00,0x53,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDE,0xF4,0x00, -0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0x04,0xDE,0x00,0x04,0x04,0xDE,0x53,0x00,0x00, -0x00,0x00,0x00,0x53,0xD0,0x04,0x58,0x00,0x56,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00, -0x00,0x00,0x57,0xD9,0xDE,0x00,0x00,0x56,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xDB,0x04,0xDE,0x00,0x56,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xD6,0x04,0x57,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0x04,0xD0,0x53, -0x00,0x00,0x00,0x00,0x00,0x53,0xD0,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, -0x04,0x5B,0x53,0xF5,0xD7,0xD9,0x56,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, -0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x57,0x04, -0xD0,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x5A,0x54,0x04,0x04,0xD0,0x53, -0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x58,0x00,0x57,0x04,0xD0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xDB, -0xDE,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x04,0x00,0x00,0x00,0x00,0xB3, -0xDD,0xDE,0xF6,0xD9,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x04, -0x04,0xD5,0xB3,0x00,0x00,0xD2,0xD2,0xB8,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x17,0x04,0xFA,0x54,0x59,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xDB, -0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x5B,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x69,0xFF,0xAD,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56, -0x04,0x57,0x00,0x00,0x00,0xF1,0xD0,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00, -0x00,0x00,0xD2,0xDD,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0x60,0x00,0xDB,0xD2, -0x00,0x00,0x00,0xC6,0xF2,0xDB,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0xB8, -0x04,0x04,0xD2,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x55,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xC3,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00,0xD7,0xDB,0x53,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0x04,0x0A,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF6, -0xDE,0xDA,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0xD7,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0x04,0xD6,0x00,0xDB,0x04,0xD6,0x0A,0x0A,0x0A,0x0A,0x0A,0xDC,0x04,0x0A, -0x0A, -0x00,0xE1,0xD4,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0xD7, -0xDB,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x00,0x00,0xD2, -0xD5,0xF4,0x00,0x00,0x00,0x00,0x00,0xD5,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x55, -0x04,0xE1,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x60,0x04,0xDF,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x59,0xF2,0x04,0x04,0xD0, -0x57,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0x00,0x00,0x00,0x57,0xD0,0x04,0x04,0xDE,0x59,0x53,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xEF,0xFA,0x00,0x00,0x00,0x00,0x00,0xF6,0xDB,0xFA,0x00,0x60, -0xD9,0x04,0xDA,0xD6,0xB8,0xDD,0x04,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0xD2, -0xDC,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xF1,0xDC,0x53,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0xF6,0xDB,0xDB,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD6,0x5A,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xDA,0xF7,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0xD9,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, -0xDC,0xD9,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x04,0xDE,0x00,0x58,0x56,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0x04,0xDE, -0x09,0x00,0x00,0xF3,0xD2,0x04,0x58,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0xDE,0xD9,0xF5,0x57,0x04, -0x17,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0xF7,0xD9,0xD7,0xF4,0x04,0xDE,0x00,0xF3,0xDC,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0xDC,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xD7,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0xF4, -0x0D,0x04,0xFD,0xF7,0x57,0xDA,0xF1,0xF3,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7,0xDB, -0xD5,0x55,0x00,0x00,0x00,0x00,0xFA,0xDD,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0xD9,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xD7,0xDB,0xB3, -0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xD6, -0x04,0xF7,0xB3,0xDC,0xF2,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04, -0xDF,0xF7,0x04,0xDF,0x00,0x00,0x00,0x00,0x5A,0x04,0x04,0xDA,0x04,0x59,0x00,0x00, -0x00,0x00,0x00,0x00,0xB3,0xF2,0xD4,0xB8,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x54,0x57,0xDA,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF2,0xD2,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x54,0x5A,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, -0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x16,0x04,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF7,0x04,0xD0,0x54,0xE1,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xE1,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, -0xDE,0x54,0xE1,0xD9,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x5E,0x57,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0xD9,0xB8,0xD0, -0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xD0,0xDA,0x55,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x55,0xDA,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0xD0,0x00,0xD0,0x04,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x55,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0xDC,0xD5,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF1,0xF1,0x00,0x00, -0x00,0x00,0x00,0x00,0x53,0xDB,0x04,0x00,0x00,0x00,0x54,0x59,0x04,0x5A,0x00,0xD6, -0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0xF4,0x59,0x04,0x57,0x00, -0x55,0x04,0x17,0x00,0xD2,0xD7,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xD2,0xD9, -0xB8,0xD5,0xD7,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x60,0x57,0x04,0xDF, -0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xD7,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0x04,0xD0,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00, -0xF3,0x55,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0x56,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xD6,0x04,0xDE,0x0A,0x0A, -0x0A,0xDC,0xD5,0x0A,0x0A,0x0A,0x54,0x59,0x57,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDC,0xF3,0xD0,0x04,0x56,0x00,0x00,0x56, -0xDA,0xD0,0x00,0xDB,0xD2,0x54,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x04,0x59,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD3,0xF1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04, -0x58,0x00,0x00,0x00,0x00,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, -0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xF4,0xDE,0x04,0x17, -0x00,0x00,0x00,0x00,0x00,0xDE,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xD0, -0x00,0xFA,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x0A,0xD6, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0xD9,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0x5B,0x04,0x16,0x00,0x00, -0x00,0x00,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00, -0x00,0x54,0xB8,0x60,0x0D,0x5E,0x04,0xDA,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF5,0x60,0xF1,0x04,0xD9,0xD6,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0xE1,0xD8,0x04,0xD7,0xFA,0xF4,0x00,0x00,0x00,0x00,0x00,0x00, -0xF1,0xD7,0x00,0x00,0x00,0x00,0x00,0x17,0xDE,0x00,0x58,0x04,0xF1,0x60,0x17,0xF1, -0x04,0x04,0x56,0x55,0xEF,0xDC,0xF7,0x00,0x00,0x00,0x54,0x5B,0x04,0x59,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x60,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0xF5,0x04,0xD0,0x00,0x17,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x54,0xB8,0x04,0x0D,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xFA, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x5D,0x04,0xDF,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0x16,0x00,0x00,0xD6, -0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x54,0xB8,0x04,0xD6,0x00,0xC6,0xD7,0xDC,0xB3,0x00,0x00, -0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xDA,0x56,0x00, -0x04,0xDE,0x00,0xFA,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x60,0x04,0xFA,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x59,0x04,0x04,0x56,0xF5,0x53,0xF5,0x56,0xDF,0xD5,0x04,0xD0,0xF6,0x00, -0x00,0xEF,0x04,0xFA,0x00,0x04,0xDE,0x00,0x00,0xF3,0xD2,0x04,0x57,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD5,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF5,0x04,0xD0,0x00,0x00,0x00,0x00,0x09,0xF5,0xD9,0xDE,0x00,0x00,0xDF, -0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x56,0x00,0xDC,0xF2, -0x00,0x00,0x00,0x00,0xE1,0x04,0xF6,0xF6,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xD9,0xD7,0xF3,0x53,0xDE,0xDA,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF3,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xDB, -0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF3, -0xDC,0xDC,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDC,0xD5,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, -0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xD5,0x00, -0xDC,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC, -0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xDE,0x00,0xDC,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7, -0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xD2,0xDB,0x00,0x04,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7, -0xD5,0x00,0xDD,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x04,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDE,0x04,0x0D,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF2,0x04,0x00,0x00,0x00,0x00,0xDE,0xD5,0xF3,0x00,0x56,0x04,0xDF,0x00,0x00, -0x00,0x00,0x00,0x00,0xF6,0xD8,0xD6,0x00,0xF4,0xD9,0xEF,0x00,0x5E,0x04,0xF7,0x00, -0x60,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD8,0x04,0x04,0x56,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0xF6,0x00,0xD7,0xD5,0xF3,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0xD8,0xDE,0x53,0x00,0x00,0x00,0x00,0x00,0x5B,0x04,0xDF,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xDE,0xDB,0xF7,0xC6,0x00,0x0A,0xE1,0x00,0x54, -0x53,0x53,0x57,0xDE,0xD9,0xDE,0xF7,0x00,0x00,0x00,0x56,0xFF,0xFF,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xDC,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0xF7,0xD4,0x04,0x04,0x04,0xD9,0xD6,0xD6,0xD9,0xD5,0xF7,0x00,0xD0, -0xDA,0xB8,0x53,0x00,0x00,0x53,0xD6,0x04,0x04,0x04,0xD2,0x53,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, -0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A, -0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDD,0xE1,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xD0,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xD0,0x04,0x0A,0x53,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00,0x00,0xDE,0xD9, -0xF7,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0xDB,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0xF3,0xDC,0xF1,0xB3,0x00,0x00,0x00,0x00,0xD7, -0xDC,0x53,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xE1,0x00,0x00,0xF3,0xE1,0x04,0x04, -0x04,0x04,0x04,0x04,0xF1,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xDB,0x04,0x04,0x04,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x5A,0x00, -0x00,0x00,0x00,0xF2,0x58,0x00,0xE1,0x04,0xF7,0x00,0x00,0xF5,0xD2,0x04,0x59,0x54, -0x00,0xFA,0xD7,0xE0,0x00,0x00,0x00,0xF3,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x58, -0x04,0xDF,0x00,0xDE,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDC,0xD2,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD9,0xF4,0x00,0x00,0x00,0x0A, -0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6,0x04,0xD2,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0xDA,0x57,0x5B,0x04,0xD0,0x53,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0xD6,0x04,0xF7,0x00,0x00,0x16,0x04,0x59,0x54,0x00,0x00,0x04,0xDE,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xDF,0x00,0x00,0x04,0xDE,0x00,0xD0, -0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xD8, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x59,0x54,0x00,0x00,0x00,0x55,0x04,0xDE, -0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x04,0xDF,0x56,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04, -0xD0,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0x59,0x54,0x00,0x55,0xDA,0xD6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x54,0xDE,0xDB,0xB3,0x00,0x03,0xDA,0xF6,0x00,0x00,0x54, -0xDD,0xF2,0x00,0x00,0xF2,0xD5,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, -0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04, -0xDA,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD6,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6, -0xDB,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x17,0x04,0x59,0x54, -0x00,0x00,0x00,0x00,0x00,0x59,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xDE,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00,0xD8,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xDE,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0xDA,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x04,0xDE,0x56,0xDA,0x04,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00,0xDA,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0xF3,0xFA,0xD2,0x04,0xD8,0xEF,0xF3,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, -0x00,0x00,0xF7,0x04,0x0D,0x00,0x00,0x00,0xF2,0xD5,0xF3,0x00,0x00,0x00,0x00,0x00, -0x16,0x04,0x57,0x00,0x00,0xD0,0xDC,0x00,0xDE,0xD7,0x00,0x00,0x55,0xD8,0x0A,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0x04,0xE1,0x00,0x00,0xFA,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17, -0x04,0x17,0x00,0x00,0x00,0x00,0xDC,0xDA,0x04,0xF5,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0xF7,0x04,0xDA,0xFA,0x00,0x5A,0x04,0xFA,0xF3,0x57,0xDE,0x04,0x04, -0x04,0x04,0xD5,0x55,0x00,0x00,0x4D,0xF9,0x69,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD0,0xD7,0x00,0x00,0x00,0x59,0x04,0xB8,0x54,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF5,0xD0,0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xE1,0x04,0x53,0xF7,0xD0,0xDB,0xDB,0xD0,0xF7,0x00,0x00,0x56,0xD4,0xDC,0xB8,0x54, -0xB3,0xE1,0x04,0xD0,0xF3,0x17,0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A, -0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDB,0xF3,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD6,0x04,0xE1,0x53,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xFA,0x00,0x00,0xF7,0xD9,0xD0,0x00,0x00,0x00, -0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56, -0x04,0xDF,0x00,0xDE,0xDB,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xEF,0x00, -0x00,0x00,0x00,0x00,0x16,0x04,0x5A,0x00,0x00,0x00,0x00,0xDF,0x04,0x5D,0x00,0x00, -0x00,0x00,0x00,0xE1,0x04,0x5A,0x00,0x53,0xD0,0x04,0xD0,0xB8,0xF3,0xF5,0x59,0xD3, -0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x04,0x04,0x04, -0xF7,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x55,0x04,0x04, -0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xDC,0xD9,0x56,0xC6,0x00,0x00,0xDB, -0xF6,0x00,0xD0,0x04,0xF3,0x00,0x00,0x00,0xF7,0xD9,0xD0,0x00,0x00,0x00,0xD0,0x16, -0xC6,0x00,0x00,0x00,0xDF,0x04,0xD0,0xEF,0xEF,0xEF,0xEF,0xEF,0xD0,0x04,0xD6,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0x00,0xF7,0xF1,0xD9,0xF7,0x00,0xDB, -0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDB,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xF6,0xD9,0xDE, -0x00,0x00,0x00,0xF4,0xDB,0xDE,0x54,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0xF7,0xD9,0xD2,0xF3,0x00,0x00,0x04,0xDE,0x00,0xDD,0xD2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD5,0x00,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0xF2,0x17,0xF4,0x00,0x00,0xDC,0xF1,0x55,0x5A,0x17,0xEF, -0xDF,0x5D,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xD5,0x00,0x04,0xDE,0x00, -0xF7,0xD0,0xDE,0xD7,0xD8,0x04,0xDE,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x55,0xDF,0xD9,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0xD7,0xDC,0xB3,0x00,0x00,0x00,0xD0,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00, -0x00,0xF5,0xD8,0xD0,0x00,0x00,0x59,0x04,0x59,0x54,0x00,0xB8,0x04,0xDF,0x00,0x00, -0x17,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2,0x04,0x04,0xD2,0xF3, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDD,0x04,0x04,0xD0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0x0D,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x55,0xD9,0xDE,0x54,0x00,0x00,0x00,0x00, -0x00,0xDE,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0xD5,0xD7,0x54,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0xDE,0x00,0xD5,0x04,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x04,0xDC,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD5,0xD2,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, -0xDE,0x00,0x17,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x53,0x00,0x00,0x00,0x00,0x00,0x17,0x04, -0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xDB,0xD2, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0x04,0xD7,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD7,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF6, -0xD2,0x04,0xD3,0x60,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0xEF,0x04, -0xF7,0x00,0x00,0x00,0x5D,0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0xF2,0xDC,0x53,0x00, -0x00,0x5B,0x04,0x57,0xD4,0xDF,0x00,0x00,0x00,0xD0,0xDB,0xF4,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0xD5,0x04,0xD9,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x57, -0x00,0x00,0xF4,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xD8,0xB8, -0x54,0x00,0x00,0xDB,0x04,0x04,0xF4,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7, -0x04,0xDA,0x16,0x00,0x00,0xD6,0x04,0x04,0x04,0xD9,0xD6,0x56,0xF4,0x5A,0xD8,0xD6, -0x00,0x00,0xFF,0xFF,0xD8,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0xDA,0xF4,0x00,0x00,0xF7,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x0A, -0xDB,0x04,0xFC,0xF6,0x00,0x00,0x00,0x54,0x00,0x00,0x54,0x53,0xB8,0x04,0x58,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0xD8,0xEF,0xD0,0x04,0xD6,0x53, -0x00,0xF4,0xDC,0xDC,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x57,0x04,0x59,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD6,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, -0x5A,0xDA,0xF1,0xF4,0x00,0x00,0x00,0x17,0x04,0x5A,0x00,0x00,0x00,0xDE,0x04,0x00, -0x00,0x00,0x00,0xF7,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x56,0x00,0x5A, -0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0xF4,0xDB,0xD2,0x00,0x00,0x00,0x00,0xF4,0xD2,0xD8,0x17,0x55,0xB3,0xF7,0xE1,0x04, -0xDE,0xB3,0x00,0x5B,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0xF6,0xD3,0xD8,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xFA,0xD7,0x04,0xDA,0xD0,0xB8,0x00, -0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD6,0xD8,0x04,0xD7,0xFA,0xF4,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0xB8,0xDB,0xDB,0x56,0x00,0x00,0x04,0x53,0x00,0x0A,0x04, -0xF7,0x00,0x00,0x00,0x00,0xD6,0xDA,0x55,0x00,0x00,0x56,0xF2,0x00,0x00,0x00,0x00, -0x55,0xD8,0xD6,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0xF7,0x00,0x00,0x00,0x00,0x04, -0xDC,0x0A,0x0A,0xD6,0xE1,0xF2,0xDA,0xDB,0x57,0x00,0x00,0xDA,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, -0x54,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x56,0xD8,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x60,0x04,0x58,0x00,0x00,0x00,0x00, -0xEF,0x04,0xB8,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xF3,0xD2,0xD8, -0xB8,0x00,0x00,0x00,0x04,0xDE,0x00,0xDA,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0xD6, -0xD0,0xDB,0x04,0xD2,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0xF5,0x17,0xDA,0xD7,0xF3,0x00,0x00,0x00,0x00,0x55,0x60,0xDE,0xDA,0x04,0xB6,0xB8, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x57,0x04,0xDF, -0x00,0x00,0x00,0x00,0x58,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x5C, -0x00,0x00,0xF6,0xDA,0xD6,0x00,0x00,0x60,0x04,0x56,0x00,0x00,0x56,0x04,0x17,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x58,0xD6,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF4,0xDC,0xD2,0x53,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x03,0x04,0xB8,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xFA,0x04,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x55,0x04,0xD0,0x00,0xD0,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, -0xF5,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, -0xDE,0x00,0xD0,0x04,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0x04,0xD0,0x54, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0xD4,0x55,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0x04,0x00,0x04,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC, -0xD7,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x53,0xD0, -0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00, -0x00,0x00,0xD2,0x04,0xF6,0x00,0x00,0x00,0x00,0x00,0x0D,0x04,0xB8,0x00,0x04,0xF1, -0x54, -0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD5,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF7,0x04,0xD0,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0x04,0xD0,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF7,0x04,0x04,0x00,0x04,0xD2,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xDF,0x53,0x00, -0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0xF4,0xDB,0xDE,0x00,0x00,0x00,0x00, -0xF4,0xDB,0xDE,0x54,0x00,0x00,0x00,0xF7,0x04,0xDF,0x00,0x00,0x00,0xF6,0xD8,0x04, -0x04,0xB8,0x00,0x00,0x00,0x59,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD8, -0x5A,0xD8,0xDE,0x53,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0x00,0x00,0x00,0xEF, -0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDB,0xD7,0xF4,0x00,0x00,0x53, -0x16,0x04,0x17,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD2,0xD9,0xF7,0x00,0x00, -0x00,0x00,0x5A,0xDF,0x5D,0xF6,0x00,0x00,0x00,0x00,0xFA,0x56,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xB8,0x00, -0x00,0xB3,0x04,0xEF,0x00,0x00,0x00,0x00,0xF7,0xDE,0x04,0xDA,0xD9,0xD6,0xF6,0x00, -0x00,0x00,0x00,0x57,0xDF,0xDF,0x57,0x00,0x54,0xDE,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xF7,0xD0,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x5D,0x04, -0x17,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0xF4,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x58,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53, -0xD5,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xD0,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0xFA,0xD6,0xD2,0x04,0xF1,0xF7,0x00, -0x00,0x00,0x00,0xB3,0xD2,0xD5,0xF6,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xD7, -0xDA,0x5E,0x00,0x00,0x00,0xF3,0x0A,0x04,0xD0,0x00,0x00,0x53,0xD2,0xD8,0x5A,0x00, -0x00,0x00,0x53,0xDF,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57, -0x00,0x00,0x00,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xDE, -0xD8,0xF6,0x00,0x00,0x00,0x00,0x00,0x53,0x59,0x04,0x17,0x00,0x04,0xDE,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0xDE,0x04,0x04,0xDE,0x58,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, -0x00,0x57,0xD0,0x04,0x04,0xDE,0x58,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x54,0xB8,0xDB,0xD9,0xF7,0x00,0xD9,0xF6,0x00,0x58,0x04,0x17,0x00,0x00,0x00, -0x00,0x56,0x04,0x17,0x00,0x00,0xF4,0xD9,0x00,0x00,0x00,0x00,0x54,0xE1,0xD9,0xF6, -0x00,0x00,0x09,0xF5,0xDB,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xC6,0xF2,0xD9,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x00,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x57,0x00,0xD9,0xD2,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xDC,0x04,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xFA,0x04,0xE1, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x53,0xF1,0xD3,0x53,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00, -0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xDF,0x04,0x17,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xD2,0xD5,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xE1,0x04, -0xDF,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF2,0xDB,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04, -0x5D,0x00,0x00,0x00,0xDF,0xD8,0x04,0xD2,0xDF,0xB8,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00, -0x53,0xDC,0xD7,0x54,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x55,0x00,0x00,0x00,0xF2, -0xD3,0x00,0x00,0xD0,0xDB,0xB3,0x00,0x00,0x53,0xD5,0xF2,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDF,0x04,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF5,0xDB,0xF2,0x00,0x55,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x5A,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x53,0xDC,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x54,0xB8,0x04,0xD6,0x00,0x00,0x00,0x00,0xD6,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x57,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5,0x04, -0xDE,0x00,0x04,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x54,0x00,0xD0,0x04,0x57,0x00, -0x57,0x04,0xDE,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDE,0x00,0x00,0x57, -0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0x04,0xDE,0x00,0x58,0x04, -0xD6,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x12,0x04,0x57,0x00,0x00,0x00,0x04,0xDE, -0x00, -0x00,0x00,0x00,0x59,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04, -0x04,0x00,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xE1,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0xF6,0xDC,0xDB,0xF7,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x55,0xDA,0x04, -0x5A,0x00,0x00,0x00,0x00,0x00,0xD2,0xD8,0xF4,0x00,0x04,0x04,0xB8,0x00,0x00,0x00, -0x00,0x00,0x56,0x04,0xD0,0x00,0x59,0x04,0xD0,0x54,0x00,0x00,0x00,0x00,0x54,0x53, -0xD0,0x04,0x58,0x00,0x04,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x54,0x53,0xD0,0x04, -0x57,0x00,0x58,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x00,0x53,0xD0,0x04,0x04,0x00, -0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0xD0,0x04,0xF4,0x00,0x00,0xF4,0x5B,0x56,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDE,0x04,0x00,0x00,0x5B,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0xB8, -0x00,0x00,0x00,0xDF,0x04,0xF7,0x00,0x00,0x00,0x00,0xDE,0x04,0xDC,0x00,0x00,0x00, -0x00,0xF3,0xD5,0xD0,0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0xDF,0x00,0x16,0x04,0x17, -0x54,0x00,0x00,0x00,0x5B,0x04,0x60,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x0A,0x54,0x00,0x00,0xF3,0x04,0xD0,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0xFF,0xFF,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x58,0xFA,0x04,0xDF,0x58,0x58,0x58,0x04,0xF2, -0x58,0x58,0x00,0xF5,0xDC,0x04,0xD2,0xFA,0xF6,0x00,0x00,0x00,0x00,0xF3,0xD0,0x04, -0xDA,0x04,0x04,0xD0,0xF3,0x57,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xD6,0x04,0xDE,0xDB,0xDA,0xDF,0x53,0x00,0x53,0xD2,0xDC,0xF6,0x00,0x00, -0x00,0x00,0x00,0x17,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3, -0x04,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD9,0xF3,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xDE, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00, -0x56,0xDA,0xD6,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xE1,0x04,0x04,0xD3,0xD6, -0xE1,0xDC,0x04,0xDE,0xF5,0x00,0x00,0x00,0xB8,0xD8,0x04,0xD2,0xD6,0xD6,0xF1,0x04, -0xF2,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x54,0x00,0x00,0x00, -0xF6,0x04,0x04,0xDE,0xD6,0xD0,0x04,0x04,0x55,0x00,0x00,0xDB,0xF2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF5,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0xB8,0xE1,0xD8,0x04,0xD2,0x5C,0xF3,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x5A,0xD2,0x04,0xD4,0xE1, -0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x57, -0x04,0xE1,0x00,0xD2,0x59,0x54,0x53,0xD7,0xDB,0xF7,0x00,0x00,0x00,0x53,0x04,0xD3, -0x00,0x00,0xF4,0xD8,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0x17,0x00,0x00,0x00,0x16, -0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xB3,0x55,0x5A,0xDC,0xDB, -0xF7,0x00,0x00,0xDE,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xB3,0xD9,0xD2,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xDA,0xF5,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x17,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x58,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x54,0xD0,0xD9,0xF6,0x00,0x04,0xDE,0x00, -0x04,0xDE,0x00,0x00,0x56,0xDA,0xDE,0x53,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xDE, -0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xDA, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0xD7,0xD9, -0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xD9,0xDE, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0xE1,0x00,0x00,0xFA, -0x04,0xD0,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x55,0xD8,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDA,0x57, -0x54,0x00,0x00,0x00,0x54,0xDC,0xD2,0x00,0x00,0x00,0x00,0xDF,0x04,0xF7,0xF3,0xD9, -0xD0,0x00,0x00,0x00,0x00,0xE1,0x04,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD4, -0x04,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57,0x54, -0x00,0xEF,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDB,0x55, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x58, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xDE,0x00,0x00,0x00,0x00,0xDE,0xD9, -0xF6,0x00,0x00,0xF5,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xD6, -0x04,0xDE,0xF7,0x00,0x00,0x00,0x00,0x57,0xF1,0x04,0x04,0xDE,0x00,0x04,0x04, -0x04,0xD0,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xE1,0x00,0x00,0x00,0x0A,0x04,0xD0, -0x55,0x00,0x00,0x00,0x00,0x59,0xDB,0xDB,0xF7,0x00,0x00,0x00,0x0A,0x04,0xDE,0x55, -0x00,0x00,0x00,0x00,0x59,0xD5,0x04,0x04,0xDE,0x00,0x00,0xD0,0x04,0xEF,0xF4,0x00, -0x00,0x00,0xF5,0x12,0x04,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0xD0,0x04,0xD6,0xF4,0x00,0x00,0x00,0xF6,0xE1,0xD4,0x04,0x04,0x00,0x04,0x04, -0xD7,0xF7,0x00,0x00,0x00,0x55,0xD7,0x04,0x56,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x56,0xDA,0xD2,0xF3,0x00,0x00,0x00,0x04, -0xDE,0x00,0x04,0x04,0xD0,0xF3,0x00,0x00,0xF4,0xD0,0x04,0x04,0xDC,0xF7,0x00,0x00, -0x00,0x5E,0x04,0xE1,0x00,0x00,0x04,0x04,0xD7,0xF7,0x00,0x00,0x00,0xF7,0xD7,0x04, -0x59,0x00,0x00,0xD0,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xE1,0x04,0xD0,0x00,0x00, -0x04,0x04,0x04,0xE1,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xE1,0x00,0x00,0x00,0xD0, -0x04,0xE1,0xF5,0x00,0x00,0x00,0xF6,0xE1,0x04,0x04,0x04,0x00,0x04,0x04,0xDE,0xF6, -0x00,0x00,0x00,0x0A,0x04,0x57,0x53,0x00,0x5A,0x04,0xDF,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, -0x54,0xF2,0xDD,0xB3,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x54,0x53,0xDC, -0xF2,0x00,0x00,0x00,0x00,0x00,0xFA,0xDA,0xEF,0x00,0x00,0x00,0x00,0x00,0xEF,0xDA, -0x55,0x00,0x00,0x00,0xF7,0xD9,0xD2,0xB3,0x00,0x00,0xDE,0xD8,0xB8,0x54,0x00,0x54, -0xF2,0xD8,0xF6,0x00,0x00,0x00,0x00,0x54,0xD0,0xD8,0x55,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xD6,0x04,0x57,0x54,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x74,0xEC,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0xDA,0x04,0x04,0xDA,0xDA,0xDA,0x04,0x04,0x04,0x04,0x00,0x60, -0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xD6,0xF6,0xF6,0xD6,0x04, -0xDF,0x00,0xD2,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0xD6, -0x00,0xF6,0xD0,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55, -0xD4,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0x00,0x00, -0x56,0x58,0x00,0x57,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x59,0x54,0x00,0x00,0xD9,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0xD0,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xD9,0x00,0x00,0x00,0x00, -0x00,0x00,0xF3,0x56,0xD2,0xD8,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x57, -0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x60,0x04,0xDF,0xDE,0xDB,0xD9,0xF2,0x16,0xF3, -0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0xDC,0xD9,0xD2,0x17,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0xB8,0x54,0x00,0x00,0xE1,0x04,0x5A,0x00, -0x00,0x00,0x59,0x04,0xD0,0x00,0x00,0xD9,0xDE,0x54,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0x04,0xD0,0x00,0xD5,0xD0,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x55,0xDF,0xDB,0x04,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x04,0xDB,0x0D,0x55,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x57,0xEE,0xF5,0x54,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0xDF, -0xDE,0x00,0x00,0xB8,0xD8,0xD3,0xF7,0x00,0x00,0xF7,0x04,0x04,0x57,0x00,0x57,0xD7, -0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDD,0xF3,0x54,0x53,0xD3,0xD7,0x53,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x17, -0x04,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x0D,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0xDE,0x00,0x00,0xF3,0xDE,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD0,0xD9,0xF5,0x00, -0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x60,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0xF4, -0xD7,0xD9,0xF7,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xFA,0x04,0x60,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xFA,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x0A,0x04,0x5B,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x17,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xD0,0x00,0x00,0xD7,0xD5,0xF4,0x00,0x00, -0x00,0x00,0x00,0x00,0x53,0x54,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x17,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xD0,0x00,0x00,0x00,0x00, -0xB8,0x04,0xDF,0x00,0x00,0x00,0x00,0x56,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x00, -0x00,0x5A,0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0xF3,0xD2,0xD8,0xB8,0x55,0xD9,0xD7, -0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x00,0x00,0x00,0xF6,0xD9,0xF2, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xE1,0x00,0x00,0x00,0x00, -0xDB,0xB6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD7,0x53,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x55,0x04,0xD0,0x00,0x00,0x00,0x00,0x59,0x04,0x60,0x00,0x00,0x16, -0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDF,0x04,0xDA, -0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04,0xDE,0x00,0x04,0xDE,0xFA,0xD4,0xD9,0xD0, -0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00,0x00,0x53,0xDF,0x04,0xD8,0xDE,0xD6,0xD6, -0xD7,0x04,0xDC,0xB8,0x54,0x00,0x00,0x00,0x00,0xDF,0xDA,0xD8,0xDE,0xD6,0xE1,0xD7, -0x04,0xD5,0x56,0x04,0xDE,0x00,0x00,0xF3,0xE1,0x04,0xDB,0xD0,0xD6,0xD0,0xDB,0xDA, -0xD6,0xF3,0x00,0x00,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x0A,0x00,0x00,0xF4,0xD0,0x04, -0xDB,0xD0,0xD6,0xD0,0xD9,0xD9,0x59,0xDE,0x04,0x00,0x04,0x04,0x04,0xD9,0xD0,0xD6, -0xD0,0xD9,0x04,0x17,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x17,0x04,0x12,0x54,0x00,0x00,0x04,0xDE,0x00,0x04,0x04, -0x04,0xDC,0xD6,0xD6,0xDC,0x04,0x60,0xB8,0xDB,0xD9,0xD0,0xD6,0xF2,0x04,0xD7,0x55, -0x00,0x00,0x04,0x04,0x04,0xD9,0xD0,0xD6,0xD0,0xD9,0x04,0xDF,0x00,0x00,0x00,0xF3, -0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xD0,0xF4,0x00,0x00,0x04,0xDE,0xFA,0xD4, -0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00,0x00,0xF3,0xE1,0x04,0xD9,0xD0, -0xD6,0xD0,0xDB,0x04,0x60,0xDE,0x04,0x00,0x04,0x04,0x04,0xDB,0xD6,0x56,0x00,0xF7, -0xDB,0xD9,0xE1,0xE1,0xD9,0xD5,0x55,0x00,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xB8,0x04,0xDF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0xF5,0x00,0x57,0x04,0xF9,0x00,0x00,0x00, -0x00,0x00,0xF6,0xF9,0xF7,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0x17,0x00,0x00,0x53, -0xDE,0xD9,0xF7,0x00,0x00,0x00,0x55,0xDB,0xD7,0xF3,0x00,0xB8,0x04,0xD0,0x00,0x00, -0x00,0x00,0x00,0x00,0x57,0x04,0xDF,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6, -0x04,0xDD,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x3B,0x56,0x94,0x00,0x04,0xDE,0x00,0x04,0xDE,0xDE,0x04,0x53,0xF6,0x55, -0x55,0xDE,0xDE,0x55,0x55,0x55,0x17,0x04,0xB8,0x55,0x00,0xD0,0xDA,0xF6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDD,0xD3,0x53,0x00,0x00,0x53,0xF1,0xDC,0x00,0x5A,0x04, -0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0xD5,0xF4,0x00,0x00,0xF3,0xDC, -0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x58,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x5A,0x00,0x00,0x00,0x17,0xDD,0x55,0xDC, -0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x53,0xD5,0xE1,0x00,0x00,0x00,0xD7,0xD5,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0x04,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD5,0xD7,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDB,0x00,0x00,0xF4,0xF3,0x00,0x00,0x00,0x00, -0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xF1,0xD7,0xF4,0xDE,0x04,0x00, -0x00,0x00,0x00,0x57,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xB3,0xF2,0xDA,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0xDA,0xE1,0x00,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0xD2, -0xD9,0x00,0x00,0xD7,0xD5,0x53,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0xEF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF5,0x16,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDC,0x16,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16, -0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x55,0xD9,0x60,0x00,0x00, -0x58,0xD9,0xD8,0xD0,0xD6,0xDD,0xDE,0xD7,0xE1,0x53,0xDE,0xDF,0x00,0x00,0x00,0x00, -0x00,0x00,0x5A,0x04,0x5B,0x00,0x58,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x00,0xF6,0xDB,0xD5,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x56,0xD6,0x58,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xD2,0xDA,0xF7,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xD8,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7, -0xE1,0x0D,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x55,0xDC,0xDB,0xF7,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xD7,0xD3,0x53,0x04,0xDE,0x00,0x04,0xDE,0x00,0x0A,0x04,0xFA,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF4,0xF1,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xDC,0xF3,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF2,0xD8,0x00,0xF7,0xDA,0xDC,0xF6,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF6,0xDC,0xD9,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0xE1,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0x17, -0x59,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xB3,0xDC,0xDC,0xB3,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD4,0x55,0x00,0x00,0x00,0x17,0x04,0x57,0x00, -0x00,0x00,0x00,0xB3,0xDB,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0xF6,0x04,0xE1, -0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xDF,0x00,0x00,0xFA,0x04,0xEF,0x00,0x00,0x00, -0x00,0x00,0x00,0xEF,0x04,0x57,0x00,0x00,0x00,0x00,0xDF,0x04,0x59,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xDA,0x56,0x00,0x00,0x00,0xD2,0xDB,0xB3,0x00, -0x00,0x00,0x00,0x00,0xF7,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x57, -0x04,0xD6,0x00,0x00,0x00,0x00,0xB3,0xDC,0xF1,0x53,0x00,0xD7,0xDD,0xF3,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD7,0xD9,0xD9,0xF2, -0x17,0xF4,0x00,0x04,0xDE,0x00,0x04,0xDE,0x54,0xB8,0xE1,0xDD,0xDA,0xD5,0xD0,0x58, -0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD3,0xD9,0xD9,0xF2,0x17,0xF5,0x00, -0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD7,0xD9,0xD9,0xD2,0xDF,0xF6,0x00,0x04, -0xDE,0x00,0x00,0x00,0x54,0x57,0xD0,0xDD,0xD8,0xDC,0xD0,0x57,0x00,0x00,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x59,0xD0,0xD5,0xD8,0xDC, -0xD6,0xF7,0x00,0xDE,0x04,0x00,0x04,0xDE,0xF5,0xDF,0xD3,0xD9,0xD5,0xD0,0x57,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x53,0xDE,0x04,0x59,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x55,0xD0,0xDB,0xD9, -0xDE,0x59,0x00,0x00,0xF7,0xD0,0xDB,0xD8,0xF1,0xEF,0xF6,0x00,0x00,0x00,0x04,0xDE, -0xF3,0x60,0xD2,0xD9,0xD5,0xD0,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0xD0,0xDC, -0xD8,0xD5,0xD0,0x59,0x00,0x00,0x00,0x00,0x04,0xDE,0x54,0xB8,0xE1,0xDD,0xDA,0xD5, -0xD0,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xD0,0xDD,0xD8,0xD5,0xD0,0x56, -0x00,0xDE,0x04,0x00,0x04,0xDE,0xB8,0xD7,0x04,0x17,0x00,0x00,0xF7,0xD0,0xD9,0xDB, -0xD0,0xF7,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xD6,0x04,0x55,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x58,0x04,0xFA,0x00,0xE1,0xD8,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD7,0x00,0x00,0x60,0x04,0x60,0x00,0x00, -0x00,0x00,0x00,0x5D,0x04,0x0D,0x00,0xD6,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xD7,0xD5,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x8C, -0x3B,0x00,0x04,0xDE,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0xEF,0xDB,0x00, -0x00,0x00,0x56,0x04,0x58,0x00,0x00,0xD0,0x04,0xF3,0x00,0x00,0x00,0x00,0xD0,0xD7, -0x00,0xD9,0xDE,0x00,0x00,0x00,0x54,0xDE,0xD9,0x00,0xF3,0xDC,0xD6,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x53,0xDE,0xD9,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xF6,0xD5,0xDD,0x55,0x00,0x00,0x00,0x00, -0x54,0xB8,0xD9,0xDE,0x53,0x00,0x00,0x00,0xB3,0x04,0x04,0x04,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xD6,0xD9,0xF4,0x00,0x00,0xD6,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0xDF, -0x04,0x5E,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00, -0x00,0x55,0xDA,0xDE,0x00,0x00,0xDE,0xD3,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00, -0x00,0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xF6, -0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9, -0xD0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, -0xD4,0x55,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0x00,0xDF, -0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x57,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00, -0x00,0x00,0x00,0xF6,0xD9,0xF2,0x00,0x00,0x5B,0xDA,0x5E,0x00,0x00,0xF7,0xE1,0xD5, -0xD9,0xD0,0x55,0x00,0xF3,0x04,0xD5,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xDD, -0xD2,0x00,0xDE,0xDB,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0xE1,0x00,0x00,0x00,0xFA,0x04,0xD2,0x55,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x09,0xB8,0xD5,0xDB,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF3,0xE1,0x04,0xEF,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04, -0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD2,0x04,0x59,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x54, -0xB8,0xD9,0xD7,0xF5,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x16,0x04, -0x04,0x04,0xDE,0x00,0x04,0xDE,0x57,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x56,0xD8,0xD7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF7, -0xDC,0xDA,0x57,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xD9, -0xF1,0x00,0x00,0xDF,0x04,0xF2,0xF6,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55, -0xF2,0x04,0x16,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, -0xFA,0x00,0x00,0xDC,0xDC,0xB3,0x00,0x00,0x00,0x54,0xF7,0x04,0xD6,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x59,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x57,0x04,0xDF,0x00,0x00,0x54,0xDE,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00, -0xD0,0x04,0x04,0xD3,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDB,0x53,0x00,0x00,0xC6, -0xB8,0xD8,0xD2,0xB3,0x00,0x00,0x00,0xDE,0x04,0x56,0x00,0x00,0x00,0x00,0x55,0xD9, -0xDE,0x00,0x00,0x00,0x00,0x00,0xF5,0xDB,0xD7,0x53,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF6,0xD9,0xD2,0xB3,0x00,0x00,0x17,0x04,0x59,0x00,0x00,0x00,0x00,0x00, -0xC3,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x5A,0x00,0x00, -0x00,0x00,0x00,0x17,0x04,0x59,0x57,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0xC8,0xE3,0x00,0x04,0xDE, -0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x5A,0x04,0xF7,0x00,0x00,0xF5,0x04, -0x17,0x00,0x00,0x17,0x04,0x57,0x00,0x00,0x00,0xF4,0xDB,0xDE,0x00,0xDE,0xDA,0x56, -0x54,0x00,0xB8,0xD4,0xDE,0x00,0x00,0x16,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDE,0xD9,0xF7,0x54,0x00,0xB8,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x57,0x04,0xD2,0x55,0x00,0x00,0x00,0xF7,0xDC,0xD5,0xF7, -0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x59, -0x00,0x00,0xF7,0xD9,0xDD,0x56,0x00,0x00,0x00,0x00,0x5C,0xD4,0xDC,0xF5,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x56,0x04,0xD7,0x55,0x00,0x00,0x00,0x55,0xD2,0x04,0x57, -0x00,0x00,0xEF,0x04,0x59,0x00,0x00,0x00,0x17,0x04,0x17,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xDC,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04,0x16,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xEF,0x00,0x00, -0xD0,0x04,0x59,0x00,0x00,0x00,0x59,0xDA,0xD0,0x00,0x00,0xF6,0xD5,0xDB,0x57,0x00, -0x00,0x00,0xF3,0xDF,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD7,0xD8,0x5A,0x54,0x00,0x54,0xF5,0xD0, -0x04,0x5A,0x00,0x00,0x00,0x17,0x04,0xDE,0x56,0x00,0x00,0x00,0x00,0x00,0xB3,0x59, -0xD7,0xDB,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x60,0x04,0x0A, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xB3,0xD6,0x04, -0x5D,0x00,0x00,0x00,0x00,0xDF,0x04,0xDD,0x5A,0xF3,0x00,0x00,0x00,0x00,0xF4,0x60, -0xD9,0xD9,0x56,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0x00,0xB3,0x58,0xD2,0x04, -0xD0,0xB3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x53,0xD0,0x04,0xDB,0xFA,0xF3, -0x00,0x00,0x00,0x00,0xB3,0x5A,0xDC,0x04,0x60,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x5B,0x04,0xD0, -0x53,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xDB,0x04,0x04,0xDE,0x00, -0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x59,0xD9,0xDB,0x5E,0xF4,0x00,0x00,0x00,0x00,0xF5,0x17,0xD9,0xD8,0x59,0x54, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF4,0xD0,0x04,0xEF,0x00,0x00,0x53, -0xD6,0x04,0xDC,0x5A,0xF3,0x00,0x00,0x00,0x00,0xF3,0x5C,0xDD,0x04,0xEF,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xFA,0xD8,0xDC,0xF5,0x00,0x00,0xDF, -0x04,0x0D,0x53,0x00,0x54,0xF5,0xDE,0x04,0x57,0x54,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0xDE,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD3, -0xD5,0xF3,0x00,0xF5,0xD4,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04,0x04,0xD6, -0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x56,0x00,0x00,0xB3,0xD2,0xD8,0xB8,0x54, -0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00,0x00,0xD6,0x04,0x56,0x00,0x00,0x00, -0x00,0x00,0x00,0x17,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16, -0x04,0x5E,0x00,0x00,0xF6,0xDB,0xDB,0x56,0x00,0x00,0x00,0xF5,0xDB,0xD6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x53,0x17,0x04,0xD7,0xF3,0x00,0x00,0x00,0x00,0x00,0xF6, -0xD9,0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xFA,0x5D,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xD2,0xD8,0xF7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x00, -0xD5,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x55,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x04,0xDE,0x00,0x04,0x04,0x04, -0x04,0x00,0x00,0x00,0x00,0xF7,0x04,0x59,0x54,0x00,0x00,0xD3,0xD0,0x00,0x00,0xF6, -0xF1,0xD3,0x56,0xF3,0x55,0xD0,0x04,0x5A,0x00,0xB8,0xDB,0xD9,0xE1,0xE1,0xD9,0xDB, -0xB8,0x54,0x00,0xF4,0xDB,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD9,0xDB, -0xE1,0xE1,0xD9,0xD9,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x59,0xD9,0xDC,0x56,0x00,0x57,0xDB,0xD5,0xB8,0x54,0x00,0x00,0x00,0x0A, -0x0A,0x04,0x04,0x04,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD5,0xE1,0x00,0x00,0x00,0x59, -0xD8,0x04,0xDE,0xD6,0xD6,0xD7,0x04,0xD5,0xB8,0x54,0x00,0x0A,0x0A,0x0A,0x04,0xDE, -0x00,0x00,0x5E,0xD4,0xD9,0xD0,0xD6,0xD0,0xD9,0x04,0x60,0x00,0x00,0x00,0x55,0xDC, -0xD4,0xD0,0xD6,0xDE,0x04,0xD7,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, -0xD5,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0xF7,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0xB8,0x54,0x00,0x00,0x00,0x00, -0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x04,0xD9,0x00,0x00,0x55,0xF1,0x04,0xDE, -0xD6,0xDE,0x04,0xDC,0x55,0x00,0x00,0x00,0xB8,0xD5,0x04,0xDE,0xD6,0xE1,0xDC,0x04, -0xDE,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x56,0xDB,0x04,0xD2,0xD6,0xE1,0xD5,0x04,0xD6,0x00,0x00,0x00, -0x00,0x00,0x58,0xDC,0x04,0xDD,0xD0,0xD6,0xD6,0xD0,0xDB,0x04,0xDE,0xF7,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD9,0x04,0x04,0xF7,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0xD6,0xD0,0xDD,0x04,0xDE,0xB3,0x00,0x00,0x00, -0x00,0x00,0x5D,0xDB,0x04,0xDB,0xD0,0xD6,0xD6,0xDE,0xD9,0x04,0xD2,0xF7,0x00,0x00, -0x00, -0x04,0xDC,0x0A,0x0A,0xD6,0xE1,0xDE,0xDB,0x04,0xD9,0x17,0x53,0x00,0x00,0x00, -0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x57,0x54,0x04,0xDC,0x0A,0x0A,0x0A, -0x0A,0x0A,0x0A,0x57,0x54,0x00,0x00,0xB3,0xEF,0x04,0x04,0xD9,0xDE,0xD6,0xD6,0xD0, -0xDB,0x04,0xD7,0x57,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x0D,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x58,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x04,0xDE,0x00,0x04,0x04,0x04,0x5A, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xB8,0xD2, -0x04,0xD9,0xDE,0xD6,0xD6,0xDE,0xD9,0x04,0xD7,0x56,0x00,0x00,0x00,0x00,0x04,0xDC, -0x0A,0x0A,0x12,0xD6,0xDE,0xDB,0x04,0xD2,0xF5,0x00,0x00,0x00,0x00,0x5E,0xDB,0x04, -0xDB,0xD0,0xD6,0xD6,0xD0,0xDB,0xDA,0xDB,0x5C,0x00,0x00,0x00,0x00,0x04,0xDC,0x0A, -0x0A,0x12,0xD6,0xDE,0xDB,0x04,0xDC,0xB8,0x54,0x00,0x00,0xF4,0xDE,0x04,0xD7,0xD6, -0xE1,0xD5,0x04,0xD6,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x0A,0x0A, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF7,0x04, -0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x5A,0x54,0x59, -0x04,0xF9,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x58,0x00,0x00,0x00,0x00, -0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x17,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00, -0x16,0x04,0xDF,0x00,0x00,0xF7,0xDA,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, -0xDD,0xF1,0xF3,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6,0x04,0xDB,0x00,0x00, -0x00,0x57,0xD9,0xDA,0x5A,0x00,0x00,0x16,0x04,0xB8,0x54,0x00,0x00,0x00,0x00,0x00, -0x00,0xD2,0x04,0xD3,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x04,0xC1, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x58,0xD7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x57,0xD4,0xD8,0xD0,0xD6,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xD0,0x57,0x00,0x04,0xDE,0x00,0x0A,0xD7,0x04, -0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x9D,0x3B,0xD8,0x00,0x04,0xDE,0x00,0x04,0xDE,0xDE,0x04,0x00,0x00,0x00, -0x00,0x53,0xDB,0xDF,0x00,0x00,0x00,0xD0,0xDC,0x00,0x00,0x00,0x55,0xDE,0x04,0x04, -0x04,0xD8,0x17,0x00,0x00,0x00,0xF7,0xD0,0xDB,0xDB,0xD0,0xB8,0x00,0x00,0x00,0x00, -0xDF,0xDB,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD0,0xD9,0xDB,0xD0,0xB8, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF7, -0xD0,0x17,0x00,0x17,0xD0,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04, -0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD9,0xF4,0x00,0x00,0x00,0xF7,0xD6,0xD7,0xD9, -0xD9,0xD2,0xDF,0xF6,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x54,0xB8, -0xE1,0xDC,0xD8,0xDC,0xD0,0x56,0x00,0x00,0x00,0x00,0x00,0x55,0xD6,0xD5,0xD8,0xF1, -0xEF,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x04,0x00, -0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x55,0xD5,0xD7,0xF4,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x12,0xDC,0xD8,0xDC,0xD6,0x55, -0x00,0x00,0x00,0x00,0x00,0xF6,0xDF,0xD7,0xD9,0xDB,0xDE,0x5D,0x53,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0xF7,0xE1,0xDD,0x04,0xDB,0xDE,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3, -0x5B,0xD0,0xF1,0xD8,0xD9,0xD7,0xD6,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD6,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0x04,0x04,0x04,0xD9,0xDC,0xDE,0xFA,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, -0x16,0xD0,0xDD,0xD8,0xD9,0xD7,0xE1,0x58,0x53,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0xD8,0xDB,0xD7,0xD0,0x5E,0xF6,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, -0x00,0x00,0x00,0x00,0x54,0xB8,0x0A,0xD7,0xD9,0x04,0xD9,0xD7,0xD6,0x59,0x53,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDE,0x04,0x5A,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xD3,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF7,0x04,0x04,0xDE,0x00,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0x58,0xE1,0xD3,0xD8, -0xD8,0xF1,0xE1,0x59,0x53,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xD9, -0xDC,0xD0,0xFA,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x60,0xDE,0xDD,0xDA,0xD8, -0xDC,0xD0,0xFA,0xF5,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDA,0xD9,0xD3, -0xD0,0xFA,0xF4,0x00,0x00,0x00,0x00,0x00,0xF3,0x60,0xD2,0xD9,0xDB,0xDE,0x5A,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x0D,0x04,0x58,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x00,0xD6,0x04,0x55,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD7,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD5, -0xD2,0x00,0xF7,0xD8,0xD2,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x56, -0x00,0xE1,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0x5E,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0xB8,0xDE, -0x17,0x00,0x00,0xD7,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0xEF,0xF5, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0xB8,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, -0xDE,0x04,0xD7,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0xE1,0xF1,0xD9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xF2,0xD8,0x17,0x00,0x04,0xDE,0x00,0xD8,0xDC,0xD6,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xF2,0xF6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0xF3, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD2,0x53,0xD0,0xE1,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0x16,0xB3,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x3B,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF3,0x55,0x00,0xF6,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0xFF,0xFF,0xFF,0x00,0x00, -0x49,0x04,0x00,0x00, -0x1B,0x00,0x00,0x00, -0x00, -0x00, -0x06,0x74,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDC,0x60,0x58,0x58,0x60,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x58,0x53,0xB8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, -0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x60,0x04,0x60, -0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x57,0x16,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53, -0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x00,0x56,0xD7,0xD9,0xDB,0xDF,0xF3,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD0,0xF6,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF6,0x00, -0x58,0x04,0x04,0x04,0x04,0x54,0x53,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF4,0x00,0x17,0x04,0x17,0x00,0xF4,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x5C,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0x53,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x54,0xD3,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x0A,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xB3,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xF6,0xD0,0x04,0x04,0x04, -0x04,0xB8,0xB3,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x53,0x00,0xE1,0x04,0x04,0x04,0xD6,0x00,0xF3,0xD4,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD7,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD2,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD8,0x53,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0xF5,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x53,0xDF,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A, -0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x3B,0x3B,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0x57,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xF7,0x04,0x04,0x04,0x04,0xDB, -0x55,0x54,0x54,0x55,0xDB,0x04,0x04,0x04,0x04,0xE1,0xF6,0x54,0x00,0xF3,0x59,0x04, -0x04,0x04,0x04,0x04,0xDE,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xF2, -0x04,0x04,0x04,0x04,0x04,0xEF,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0xB8,0xF3,0x00, -0x00,0xF3,0xB8,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00, -0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x04,0x04,0x04,0xDD,0xF7,0x53,0x54,0xB3, -0x56,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0x5D,0xF5,0x00,0x00,0xF5,0x60,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0x57,0xF3,0x00,0x00,0xF5,0x16,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0x53,0x54,0x53,0xB8,0xD9, -0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0xDA,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x17,0x55,0x53,0x54,0x53,0xF3,0xB8,0xD2,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDE, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF7,0x04,0x00, -0x00,0x54,0x53,0x53,0x54,0xF4,0xB8,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0xFA,0xF6,0x53,0x54,0x00,0x53,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54, -0x53,0x53,0x00,0x53,0x55,0x5C,0xD8,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x53, -0x53,0x53,0x53,0x53,0x53,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xF7,0xF3,0x00,0x54,0x53,0xF6,0x5A,0xDA,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0xDB,0xF7,0x53,0x00,0x46,0xB8,0xD8,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x17,0x04,0x00,0x00,0x54,0x53,0x53, -0x53,0x53,0x53,0x53,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF4,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x0A,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x55,0x53,0x54, -0x53,0xB3,0xF7,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0xF7,0xB3,0x00,0x54, -0xB3,0xF7,0xD6,0x04,0xDA,0x57,0xF3,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x54,0x54,0xDB,0x04,0x04,0x04,0xD9,0xB8,0xF3,0x54,0x54,0xF6,0xE1,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, -0xB8,0xF3,0x54,0x53,0xF5,0x5C,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x54,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4, -0x00,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD3,0x04,0x04,0x04, -0x04,0x04,0x59,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x56, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x04,0x57,0x00,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x57,0x04,0x04,0xDA,0xF4, -0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF7,0xB3,0x54,0x54,0xF3, -0x57,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD7,0xF7,0x53,0x54,0x53,0x55,0xD0, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0xB3,0x54,0x00,0xF4,0x59,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x54,0x54,0xF3,0x57,0xDA,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xDE,0x55,0x53,0x54,0x53,0x55,0xDE,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C,0x55,0x53,0x54,0x53, -0xF7,0xDC,0x04,0xB3,0xF3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x59,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDE,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x0C,0x55,0x53, -0x54,0x54,0xF6,0xEF,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD2,0x55,0x54,0x54,0x53, -0x55,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C,0x55,0x54,0x54,0x53,0x55,0xD2, -0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x54,0x00, -0xF5,0xF2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD6,0xF5, -0x54,0x54,0x53,0xB8,0xD4,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0x57, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x51,0x00,0x00,0xDA,0x04,0x04, -0x04,0x04,0xF3,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x5A,0x04,0x04, -0x04,0x04,0x04,0x17,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF4,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x55,0x04,0x04,0x04, -0xFA,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0xD7,0xF4,0x00,0x00,0x00,0x00,0x17,0x04, -0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xD9,0x04,0x04,0xDB,0x54,0x00,0x55,0xF7,0x00, -0x54,0xD5,0x04,0x04,0xB8,0x00,0x54,0xF7,0xF7,0xB3,0x00,0xF6,0xD4,0x04,0x04,0xE1, -0x00,0x54,0xDD,0x04,0x04,0x04,0x04,0x04,0x5C,0x54,0x59,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x17, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x54,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xF5,0xF7,0xF7,0xF4,0x00,0x54, -0xD2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x53,0x00,0x54,0xB8,0xB8,0xB8,0xB8, -0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x0A,0x00,0x00,0x55,0xB8,0xF5,0x00,0x53,0xDB,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0xD4, -0xF5,0x00,0xF3,0xF7,0xF7,0x53,0x00,0xF6,0xDA,0x04,0x04,0x04,0xDC,0x53,0x00,0xF3, -0xF7,0xF7,0x53,0x00,0xF5,0xD4,0x04,0x04,0x04,0xD7,0x54,0xB8,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x55,0xB8,0xF6,0x00,0x54,0xD2,0x04,0x04,0x04, -0x04,0x04,0x04,0x57,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0xB8,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0x53, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x5A, -0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x53,0x00,0x53,0x55,0xB8, -0xB8,0xF6,0x54,0x00,0xF6,0xD9,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x00,0x53,0xB8,0xB8,0xB8, -0xF7,0xF4,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x17,0xC6,0x09,0x54,0xF6,0xB8, -0xF7,0xF6,0x00,0x00,0xF4,0xDD,0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xF7,0xF6, -0x53,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0xD0,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDE, -0xF3,0x00,0x00,0xF6,0xF7,0xB8,0x55,0x54,0x00,0x54,0x5D,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, -0xD9,0x54,0x00,0xF6,0xB8,0xF5,0x00,0xF3,0xD4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54, -0x00,0xF6,0x04,0x04,0x04,0x04,0xD7,0xF3,0x00,0x00,0xF6,0xB8,0xB8,0xF6,0x09,0x09, -0xF3,0xD2,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00,0x00,0xF5,0xF7,0xB8,0xF6,0x00,0x00,0x00, -0x54,0x54,0xF5,0x5B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xD6, -0x04,0x04,0x04,0xDD,0x54,0x00,0xF4,0xB8,0xF7,0x53,0x00,0xB8,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x00,0xF4,0xB8,0xF7, -0xB3,0x54,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x56, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF3,0xDA,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0xB8,0xB8, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD9,0x04,0x04,0x04,0xD6,0x00,0x5A,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0xF5,0xB8,0xF7,0xF4,0x00,0xB3,0xD5,0x00, -0xF6,0x04,0x00,0xF6,0x5D,0x00,0x00,0x55,0xB8,0x55,0x54,0x00,0xF7,0xD4,0x04,0x04, -0x04,0x04,0x56,0x00,0x00,0xF6,0xB8,0xF7,0xB3,0x00,0x53,0xDE,0x04,0x04,0x04,0x04, -0x04,0x57,0x54,0x00,0xF5,0xB8,0xF7,0xF4,0x00,0xB3,0xDB,0x00,0xF6,0x04,0x04,0x04, -0xB8,0x00,0x00,0x55,0xB8,0x55,0x54,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xD4,0xF7,0x00,0x00,0x55,0xB8,0x55,0x00,0x00,0xE1,0xF5, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD0,0x00,0xF5, -0xDA,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0xD4,0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00, -0xF6,0xD4,0x04,0x04,0x00,0xF6,0x5A,0x00,0x54,0x55,0xB8,0x55,0x54,0x00,0xF7,0xD4, -0x04,0x04,0x04,0xDA,0xF7,0x00,0x54,0x55,0xB8,0x55,0x00,0x00,0x5B,0xF6,0x00,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xF7,0xF7,0x54,0x00,0xDE,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x55,0xB8,0xF6,0x00, -0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x53,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0xE1,0x04,0x04,0x04,0xD5,0x00,0x00, -0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0xD9,0x54, -0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x00,0xD2,0x04,0x04,0x04,0x04,0x04, -0x04,0x54,0x00,0xF7,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFE,0xFF,0xF9,0x04,0x54,0x55, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x53,0x04,0x04,0x04,0xD2,0x00,0xD0,0x04, -0x04,0x04,0x04,0xD7,0x00,0xF5,0xDC,0x04,0xD7,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0xD4,0x53,0x56,0x04,0x04,0x55,0x00,0xDE,0x04,0x04,0xDE,0x00,0x55,0xDA,0xE1, -0x00,0xF6,0xD4,0x04,0x04,0x04,0xF7,0x00,0xB8,0x04,0xEF,0x00,0x53,0xD5,0x04,0x04, -0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xDF,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04,0xF2,0x54,0xD0,0x04,0x04,0x04,0x04, -0x04,0x04,0xD5,0x00,0x54,0xD7,0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0xDA,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0xDB,0xB3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDC,0x00,0xB3,0xDB,0x04,0x04,0x04,0xD6,0x53,0xF3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xF6,0x54,0x5A,0x04,0x04, -0x04,0x04,0xB8,0x00,0xF7,0x04,0x04,0xDA,0x53,0x00,0x17,0x04,0x04,0x04,0x04,0x56, -0x00,0x55,0xDA,0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, -0x00,0xF4,0xD9,0x04,0x04,0x04,0xF2,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0xF4,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0xDB,0x00,0xB8,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xB8,0x54,0x00,0xB3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x54,0xB8,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x55,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0x00,0x53,0xD9,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0xD8,0x00,0xF5,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD5,0xF3, -0x00,0xDD,0x04,0x04,0x04,0xB8,0xC6,0x54,0x16,0x04,0x04,0x04,0x04,0x04,0xDA,0x58, -0x00,0x54,0xD7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00, -0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0x54,0x5A,0xDA, -0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0xF7,0x00,0xEF,0x04, -0x04,0x04,0x57,0x00,0x59,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF4, -0xDA,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0xF6,0x04,0x04, -0x04,0xEF,0x00,0x54,0x5C,0xDA,0x04,0x04,0x04,0x04,0xDA,0x16,0xC6,0x00,0xEF,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD0,0x00,0x00,0x56,0xDA,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x57,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xB8,0x04,0x04,0x04,0x04,0xB3, -0x00,0x17,0x04,0x04,0x04,0xDA,0x55,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x54,0xD2,0x04,0x04,0x04,0x04,0x5A,0x54,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x00,0x54,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0xDA,0x04,0x04,0x04,0x04, -0x04,0xF4,0x00,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xB8,0x54,0xF5,0xD5,0x04,0x04,0x04,0x04,0xD2,0x53,0x00,0x00,0xF6,0x04,0x00,0x00, -0x00,0x55,0xD8,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04,0x04,0x56,0x00,0xF5, -0xDB,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDD,0x04,0x04,0x04,0x56,0x00,0xF5,0xD5, -0x04,0x04,0x04,0x04,0xDE,0x53,0x00,0x00,0xF6,0x04,0x04,0xB8,0x53,0xF7,0xDA,0x04, -0x04,0x04,0xDA,0xF7,0x00,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0xD5,0x54,0x53,0xD9,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x59,0x54,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x04,0xF7,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xB8,0x54,0xF6,0xDA,0x04, -0x00,0x00,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04,0x04,0xF7, -0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0xDD,0x04,0x04,0xDD,0x00,0xF5,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0xD0,0x00,0xF4,0xD8,0x04,0x04,0x04,0xD3,0x53,0x00,0x00,0x04, -0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x00,0x00,0xF7,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0x04,0xDD,0x00,0xF5,0x04,0x04,0x04,0x55,0x54,0xD2,0x04,0x04,0x04, -0x04,0x04,0x04,0xB8,0x54,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xC8,0xFF,0xFE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5D,0x00,0xD8,0x04,0x04,0xD4,0x00,0x58,0x04,0x04,0x04,0x04,0xF6, -0x00,0xD9,0x04,0x04,0x04,0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x53, -0xD4,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0xF6,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0xB8,0x54,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, -0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, -0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0xD9,0xF3,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD7, -0x04,0x04,0x04,0x04,0x04,0x57,0x54,0xEF,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53, -0x53,0x00,0x00,0x54,0x53,0x04,0xD6,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0xD7,0x04,0x57,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD7,0x04, -0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, -0x04,0x04,0x04,0x5C,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x53,0xF4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0xD2,0x55,0x00,0x00,0xF4,0xEF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0xF4,0x00,0x00,0xF7,0xD7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0xFA,0x04,0xDA,0xD5,0xDA,0x04,0x04,0xDA,0xD5,0x00,0x00,0xB8,0xDB,0x04, -0x04,0x04,0xD2,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54, -0xD6,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x04, -0x16,0x09,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x54,0x53,0xD9, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xB8,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD8,0xF4,0x00,0x59,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x53,0xF3,0x04,0x04,0x04,0x04,0xDA,0x00, -0xF5,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xD9,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xEF, -0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xF6,0xDA,0x04,0xDE,0x00,0xB3,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF3,0x00,0xDE,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x00,0xDE,0x04, -0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0xD7,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0xE1,0x00,0xF5,0x04,0x04,0x04,0x04,0xD0,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0xB8,0x54,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, -0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x57,0x04,0x04,0x04,0x04,0x5A, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF3,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xD2,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF5,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xF6,0xDA,0x00,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0xD2,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04, -0x04,0x04,0xDE,0x00,0xF5,0x04,0x04,0xD2,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0x54,0x00,0xF6,0xDA,0xD2,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF7,0x00,0xDE,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD0,0x00,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, -0x00,0x17,0x04,0xD4,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, -0xDE,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD0,0x00, -0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x00,0x00,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0xD0,0x00,0x55,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x54, -0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0x53,0xF5,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00, -0x00,0x54,0x04,0x04,0x04,0xF4,0xF4,0xD7,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x58,0x00,0xFA,0x04,0x0A,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54, -0x00,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x17,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xE3,0x3B,0x6E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, -0x00,0xD0,0x04,0x04,0x04,0xB3,0x55,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04, -0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x59,0x04,0x54,0xF4, -0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, -0x00,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xB8,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x54,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xDA, -0xF5,0x00,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0xF7,0x04,0x09,0x00,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x53,0x54,0xB8, -0xB8, -0x04,0xF7,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x56,0x04,0xF3, -0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0x04,0x04,0xF3, -0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x56,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0xF5,0x00,0x00,0xF6, -0xDE,0x04,0x04,0x04,0x04,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, -0x53,0x04,0x04,0x04,0x04,0xDE,0xF6,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB8,0x16,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xFA,0x04,0x59, -0x00,0x00,0x00,0xF7,0xDC,0x53,0x00,0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0xF4, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x53,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0xDA,0x54,0x54,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xF7,0xDF,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0x53,0x00,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x00,0xF6,0x04,0xD0,0xD2,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF5, -0x04,0x04,0x04,0xDA,0xF4,0x00,0xD0,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x54,0xDA,0xD0,0x00, -0x58,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x00,0xF3,0xDA,0x00,0xF6,0x04,0xDA,0x53,0x54,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x53,0xD4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0xDA, -0x56,0x00,0xB3,0xDD,0xDE,0x54,0xB3,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0x54, -0x54,0xD9,0x04,0x04,0x04,0x04,0xFA,0x53,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0xF5, -0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, -0x00,0xDB,0x04,0x53,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00, -0x57,0xDD,0x00,0x57,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0x00,0xEF,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD7,0x04,0x04,0xDB,0x00,0xF3,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD0,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0xDF,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00, -0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x5B,0x00,0xF6,0x04,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x00,0x55,0x04,0xF7,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, -0xF6,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x5C,0xDE,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD5,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xD3,0x55, -0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDE,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x55,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0xF6,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB3,0xB3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x04,0x04,0x04,0xD6,0x00,0xDF,0x04,0xF7, -0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x0A,0x00,0xDE,0x04, -0xD9,0x00,0x58,0x04,0xF3,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00, -0xD3,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x54,0x5A,0xDE,0x00,0x57, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF3,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0xD4,0xD9,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, -0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF7,0x00,0xF6,0xB8,0xB8, -0xB8,0x53,0x53,0xB8,0xB8,0xB8,0x04,0xEF,0xDE,0x04,0x04,0x04,0x04,0x04,0xF5,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x53,0x04,0x55,0x00,0xD7,0x04,0x04,0xD2, -0x00,0x55,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0xD6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x53,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, -0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x00,0x55,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD4,0xF6,0x54,0x57, -0x04,0x04,0x04,0x04,0x04,0xF6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x16,0x54,0x5A,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xB8,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x54,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x17,0x00,0x5D,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0xDC,0x59,0x56,0x5C,0x00,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x5A,0xB3,0x00,0x00,0xF7,0xDD,0x04,0x04,0x04,0x04,0x04, -0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0xF7,0x00,0x00,0xF3,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0xB3,0xF3,0x04,0x04,0x04,0x04,0x04,0x58,0xF6,0x04,0xD0,0x00,0xB3,0x5A,0x58,0xB3, -0x00,0x00,0xD7,0xD9,0xB8,0xC6,0xDB,0x04,0x04,0x04,0x04,0x17,0x00,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x5A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x59,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDC,0x00,0x56,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xFA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x56,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0x00,0x5D,0x04,0x04,0xF7, -0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x54,0xB8,0x04,0x04,0xF3,0x53,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD7,0x04, -0x00,0xF6,0x04,0x16,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x5A,0x00,0xF9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x0A,0x00,0x00,0xD2,0xDA,0x04,0xDA,0xD7,0x57,0x53,0x00,0xF6,0xDA,0x04, -0x04,0xB8,0x00,0x16,0x04,0x00,0xF6,0x04,0x04,0xD4,0xF4,0x00,0xDE,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x04,0x57, -0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD2,0x04,0x53,0xF4, -0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0xDA,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDD,0x00,0xF3,0x04,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD7,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF6,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04, -0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, -0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x53,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x54,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3, -0x54,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x54,0x56,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0xF6,0x54,0xDA,0x04,0xD7,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0xF7,0x04,0xDA,0x00,0xB8,0x04,0x5C,0x00,0xDD,0x04, -0x5A,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x00,0x00,0xF2,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0xF4,0x53,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x56,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF5,0x54,0xD9,0x04,0x04,0xB8,0xF7,0x04,0x04, -0x04,0x04,0xD0,0xF6,0x00,0xF5,0xD5,0x04,0x04,0x04,0xF7,0x3B,0x3B,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x54,0x53,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0xF7,0xF7,0x00,0x54,0xDB,0x04,0xF6, -0x00,0xDC,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53,0x53,0x53,0x54, -0x00,0x00,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8, -0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xC6,0xF7,0x04,0x04,0xF5,0x00, -0xD9,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04,0xF3, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04,0x04,0xD4,0xF7,0x00,0x00, -0x00,0x00,0x00,0x00,0xB3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x54,0x00,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDF,0x04, -0x04,0x04,0x04,0xF5,0xE1,0x04,0xF7,0x00,0xDD,0x04,0x04,0xDA,0xF4,0x00,0x0A,0x04, -0x04,0xFA,0xF3,0xD4,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0x53,0x53,0x53,0x53,0x54, -0x00,0x00,0x54,0xDA,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0x00,0x57,0x04,0xF5,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x53,0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0xB8, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xF7,0x00,0xF3,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x00,0x00,0xDE,0x17,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0xF7,0x00,0xDD,0x04,0x04,0x5D,0x54,0xD6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x57,0x04,0x04,0x00,0xF6,0x04,0xF6, -0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, -0x00,0x00,0x53,0x54,0x00,0x00,0x00,0xF4,0xD6,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0xB8,0x54,0x00,0x57,0xD2,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xD6,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04, -0x53,0xF4,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00, -0x00,0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00, -0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x57,0x53,0xD6,0x04, -0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x53,0x53,0x53,0x53, -0x53,0x53,0x53,0x53,0x54,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x00,0xF6,0xD2,0x00,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x59,0x54,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x16,0xF5,0x54,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0x04,0xD5,0x00,0x56,0x04,0x04,0x04,0xF4,0x54,0xDA,0x04,0x04,0x04,0x04,0x04, -0x5D,0x00,0xDE,0x04,0x04,0x55,0x53,0x04,0xF5,0xF3,0x04,0x04,0xD8,0x00,0xB8,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDD,0x54,0xF7,0x04,0x04,0x16,0x09,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x59, -0x00,0x59,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xDA,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0xDD,0x00,0x00,0x16,0x04,0xDF,0x00,0x16,0xDA,0xD0,0xF5,0x00,0x00, -0x00,0x00,0x53,0xD9,0x04,0x04,0xFC,0x3B,0xE3,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF6,0xF4,0x04,0x04,0x04,0x0A,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF7,0x00,0x04,0xDB,0x55,0x54,0x54,0x55,0xD5,0x04,0x04,0xD2,0x00,0x53,0xDC,0x04, -0x04,0xF7,0x00,0x55,0x04,0x58,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8, -0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x53,0xD4,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x54,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x16,0x04,0x04,0xD5,0x00,0xF6,0xDA,0x04,0x04, -0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, -0x00,0x56,0x04,0xF6,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8,0x04, -0x04,0x04,0x04,0x04,0x5B,0x00,0xEF,0x04,0x04,0x04,0x04,0x57,0x00,0x60,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x04,0xF6,0x00,0x55,0xD7,0x04,0xDA,0xD6,0xB3, -0xC6,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0x00, -0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00, -0x00,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0xD7,0x04,0x04,0x04,0x54, -0xDA,0x04,0x55,0x00,0x04,0x04,0x04,0x04,0xDB,0x54,0xF6,0x04,0x04,0x04,0x55,0x5B, -0x04,0x04,0x04,0x04,0x57,0x00,0x55,0xB8,0xB8,0xB8,0xB8,0xB8,0x55,0x00,0xB8,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0xD9,0x04,0x54, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xDA,0x00,0xF6, -0x04,0x04,0x04,0xDA,0x53,0xF5,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04, -0x04,0x04,0xDD,0x00,0xF4,0x04,0x04,0x04,0x00,0xF6,0xDA,0x53,0xF4,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0x00, -0x54,0x53,0x53,0x53,0x54,0xF4,0x59,0xDA,0x04,0x04,0x53,0xB3,0xD9,0xDF,0x57,0xB8, -0x57,0x17,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x00,0xF6,0xDA, -0xD5,0x55,0xF6,0xF3,0x00,0x00,0xF5,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x57,0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0xF3,0x53,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0x00,0x55,0x04,0x04,0x0A,0x00,0x03,0x04,0x04,0xDD,0x00,0x57,0x04,0x04, -0x57,0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x53,0x00,0x00,0x55,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x56,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD8,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0xF6,0xDA,0x54,0x00,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0x54,0x53,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0xF4,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, -0xF6,0xDA,0x59,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00, -0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x54,0xF3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA, -0xF3,0x00,0xB3,0x59,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xB8,0x00, -0xDB,0x04,0x04,0x04,0x17,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF4,0x53,0x04,0x04, -0x04,0x17,0x00,0xD0,0x00,0x57,0x04,0x04,0x04,0x55,0x54,0xDA,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x54,0x54,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE, -0x04,0x04,0xDA,0x53,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDC, -0x04,0x04,0x04,0x54,0x00,0x00,0xD4,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0xD5, -0x00,0x00,0x5D,0x04,0x04,0xB8,0x54,0x00,0x00,0x00,0xF7,0xF2,0xDA,0xDF,0x09,0xF7, -0x04,0x04,0x3B,0x3B,0x45,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x58,0x00,0xDA,0x04,0x04,0xD5,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xB8, -0x54,0x00,0xB3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0xE1,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xB8,0x55,0x00,0xF7,0x04, -0x04,0xDA,0x53,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x54,0xE1,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB8,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0xB3,0xDA,0x04,0x04,0x04,0x58,0x00,0xDF,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0x04,0x04,0xD5,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD7,0x04,0xDF, -0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04,0x04,0x04, -0xDA,0x54,0xF4,0x04,0x04,0x04,0x04,0xDA,0xF4,0x00,0x58,0xD9,0x04,0xD5,0xF7,0x00, -0xF5,0x04,0x04,0x17,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x16,0xF3,0x00,0x00,0x55,0xD7,0x04, -0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x00,0x00,0xF4,0x16,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x54,0xF2,0x04,0x04,0x00,0x04,0x04,0xB8,0x00, -0xDB,0x04,0x04,0x04,0x04,0xB8,0x00,0xD9,0x04,0x04,0xD2,0xF5,0x04,0x04,0x04,0x04, -0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDD,0x04,0x04,0x04,0x04,0x00, -0x53,0xB8,0xB8,0xB8,0xF7,0xF4,0x00,0x54,0xD0,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x00,0x54,0x53, -0x53,0x53,0x53,0x53,0x53,0x04,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x57, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x00,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0xD2,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x5A,0x00,0xE1,0x04,0x04,0x04,0x04, -0xB8,0x00,0xDC,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4,0x00, -0xDC,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8, -0x55,0x54,0x00,0xF4,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0xDA,0x59,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0xD9,0x5A,0xF5,0x00,0x00,0xF5,0xD7, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDE,0x00,0x57, -0x04,0x04,0x04,0x04,0xD0,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x17, -0x04,0x04,0xDA,0x54,0xB8,0x04,0x04,0x5A,0x00,0xD2,0x04,0x04,0xD7,0x54,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xE1,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x53,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x16,0x00,0xF6,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0x55,0xDA,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0xDA,0x04,0x04,0x55,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, -0xF6,0xDA,0xF6,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0x55,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0x00,0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, -0xF3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6, -0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xDC,0x04,0x00,0xB3, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0xDA,0xF6,0x00,0xDB,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDB,0x00,0x55,0xDA,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x00,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xDA,0x54,0xF6,0x04,0x04,0x04,0x04, -0xDA,0x53,0xF5,0x04,0x04,0x04,0x04,0xDD,0x00,0x57,0x04,0x04,0x04,0xDA,0x00,0x00, -0x00,0xD7,0x04,0x04,0x04,0xD6,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x54, -0xEF,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0xB8, -0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0xD4,0x04,0x04,0x04, -0x5B,0x54,0x57,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04, -0x04,0x04,0xEF,0x56,0x17,0xDA,0x04,0x04,0x04,0x04,0x16,0xD7,0x04,0x04,0x3B,0x3B, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xDC,0x04, -0x04,0x04,0x54,0xB8,0x04,0x04,0x04,0x04,0xDB,0xF5,0x00,0x00,0x00,0xF7,0xD8,0x04, -0x04,0x04,0xDA,0xD0,0x57,0x57,0xD0,0x04,0xDA,0xF6,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0xD5,0x04,0x04,0x04,0x60,0x00, -0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD0,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x53,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x55,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x0B,0xF7,0xF4,0x00,0xB3,0xD5,0x04, -0x04,0x04,0x04,0x04,0xF4,0x53,0xDA,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0xF3, -0x00,0x5C,0x04,0x04,0x04,0x04,0xB8,0x00,0x55,0x04,0x04,0x04,0xF4,0x00,0xEF,0x04, -0x04,0x04,0x04,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDE, -0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0xDA,0x04,0x04,0xF5, -0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x59,0x04,0x00,0xF6,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD0,0xF6,0x00,0x00,0xF6,0xD0,0x04,0x04,0x04, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0xDE,0xF6,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDC,0x54,0x00,0xDB,0x04,0x00,0xD8,0x04,0xD0,0x00,0x58,0x04,0x04,0x04, -0x04,0xD7,0x00,0x58,0x04,0x04,0xDA,0x00,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD4, -0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xD0,0x04,0x00,0xF4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x53,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0xFA,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0xB3,0xB3,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00, -0x57,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF4,0x53,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, -0x60,0x04,0x04,0xDA,0x57,0x00,0x00,0xF3,0x57,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04, -0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04,0xF5, -0xB3,0x04,0x04,0xF6,0x54,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x56,0x00,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x54,0xF4,0x04,0xD9,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x54,0x5C,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x53,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04,0xB8,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x54,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x53,0x00, -0xF6,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xD0,0x04, -0xDE,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xF5,0x04,0x04,0xDE, -0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0xF6,0x04,0xE1,0x00, -0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6, -0x04, -0x04,0x04,0x04,0xD6,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00, -0x00,0x04,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF7,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xD8,0x53,0xC6,0xDB,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0xD8,0x00,0x00, -0xDF,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x00,0x00,0xD3,0x04,0x04,0x04, -0x04,0x04,0xD2,0x00,0xF6,0x04,0xD6,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x55,0x00,0xE1,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00, -0xD0,0x04,0xD0,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x00,0x04, -0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x04,0x04,0xDA,0x17,0xD2,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0xF6,0x00,0x04,0x04,0x17,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDC, -0x04,0x04,0x04,0x56,0x00,0xD5,0x04,0x04,0x04,0xDA,0xF6,0x54,0x53,0x04,0x04,0x04, -0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x60,0x54,0x57,0x04,0x5D,0x00,0x58, -0x04,0x04,0x04,0x04,0x17,0x54,0x59,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x54,0xB8,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3C,0x3B,0x3B,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xD0,0x16,0x00,0x56,0xD0,0xD0,0xD0,0x00,0xF4, -0xD0,0xD0,0x04,0xDA,0x53,0x54,0xF3,0xFA,0xD4,0x04,0x04,0x04,0x04,0xDA,0xF6,0x54, -0x00,0x00,0x54,0x55,0xDA,0xD0,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x54,0xF6,0x54,0x00,0x57,0x04,0x04,0x04,0xF4,0x53,0xDA,0x04,0x04, -0x04,0x04,0x04,0x58,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, -0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDA,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0xEF,0x04,0x04,0x04,0x04,0x04,0x04, -0xD7,0x00,0xF7,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xB3,0xF7, -0xF7,0x53,0x00,0xF5,0xDA,0x04,0x04,0x04,0xDC,0x54,0x00,0xF4,0xB8,0xF7,0xB3,0x00, -0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0xF6,0xDA,0x04,0x04,0x04, -0xD8,0x00,0x00,0xF5,0xB8,0xF6,0x00,0x00,0xD9,0x04,0x04,0x54,0xF4,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0x00,0x00,0xF3,0x17,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xF4,0x00,0x00,0xF7, -0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, -0x00,0xF7,0x04,0xF4,0xD6,0x04,0x04,0xF3,0x54,0xDB,0x04,0x04,0x04,0x04,0x00,0xB3, -0x04,0x04,0xDA,0x00,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x04,0x5B, -0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD9,0xEF,0x53,0x54, -0xD9,0x04,0x04,0xF5,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0xF7,0x00,0x59,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0xD0,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0x00,0xF6,0x04, -0x00,0xF6,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xF5, -0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0xF4,0x00, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF5, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0xFA, -0x00,0xF6,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xD0, -0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x57,0x00,0xDB,0xDA,0x00, -0x55,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00, -0x00,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD0,0x04, -0x04,0xB8,0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xD8, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xD0, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x54, -0xD4,0x04,0x04,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xB8, -0x54,0xF5,0xDB,0x04,0x04,0x04,0x04,0xDE,0xB3,0x00,0x00,0xF6,0x04,0x00,0x00, -0xC6,0x55,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x04,0xB8,0x54,0xF6, -0xD9,0x04,0x04,0x04,0x04,0x0A,0x54,0x54,0xD5,0x04,0x04,0x04,0xB8,0x00,0xF6,0xD9, -0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0x00,0xF6,0x04,0x04,0x55,0x00,0xB8,0xD4,0x04, -0x04,0x04,0xDA,0xB8,0x54,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x55,0x00,0xB8,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0x00, -0xF3,0xDB,0x04,0x04,0x04,0xD9,0xF3,0x00,0xD2,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF2,0x00,0xF4,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0x00,0x55,0xD4,0x04,0x04,0xDA,0x55,0x00,0x00,0x53,0xDB,0x04,0x04, -0x04,0x5C,0x00,0xF7,0x04,0x04,0x00,0x00,0xF3,0xD9,0x04,0x04,0x04,0xDB,0xF3,0x00, -0xE1,0x04,0x04,0x55,0x00,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04, -0x00,0x00,0xC6,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x04,0x55, -0x00,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x54,0x00,0x00,0x04,0x00,0x00,0xF5,0xD4, -0x04,0x04,0x04,0xB8,0x54,0xD0,0x04,0x04,0xDF,0x00,0x57,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04,0x04,0x04,0x53, -0xF5,0x04,0x04,0x04,0x04,0x04,0x5E,0x09,0xB8,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, -0xD9,0x04,0x04,0x04,0xDB,0x00,0xF4,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0x04, -0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xD8,0x3E,0x04,0x00,0xF6,0xDA,0x04,0x04,0xDA, -0x04,0x04,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x5A, -0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xB8,0xD8,0xDA,0xB8,0x54, -0x56,0x04,0xF4,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xB8, -0x04,0xD8,0xF6,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04, -0xB6,0xD0,0x04,0xDE,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xD6,0x04,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6, -0xDA,0xF6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0xD2,0xF4,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE, -0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x5A,0x54,0x57,0xF6,0x54,0x00,0xF4,0x5D,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x00,0x53,0x00,0xF3,0x59,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDC,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04, -0x04,0x04,0xD6,0x00,0x55,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x00,0x55,0x04,0x54,0x55,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0x56,0x54,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x54,0x56,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x57,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x57, -0xF5,0x04,0x04,0xD7,0x00,0xB3,0xD5,0x04,0x04,0xDB,0x00,0x00,0xDE,0x04,0xDE,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0xB3,0xF3,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0x58, -0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x56,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xF6,0x00,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x5A,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xD4, -0xF3,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xFA,0x00,0x5A,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0x16,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0xB8,0x54,0x17,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x57,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xF3,0x54,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x58,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, -0xDC,0x00,0x56,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0x00,0x00,0x16,0x04,0x04,0x04, -0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0xDC,0xD9,0x00,0xF3, -0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF5,0x04,0x04,0x04,0xD8,0x00,0xF5, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04, -0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0xF3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x04,0x04,0x04,0x0A,0x00,0x59,0x04,0x04,0x5D, -0x54,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00, -0xF5,0xF7,0xF7,0xF3,0x00,0xB3,0xD5,0x00,0xF6,0xDA,0x00,0xF6,0x0B,0x00,0x00,0x55, -0xB8,0x55,0x54,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0xF6,0xB8,0xF7, -0xF3,0x00,0x53,0xD7,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x54,0xF6,0xB8,0xF7,0xF3, -0x00,0x53,0xD2,0x00,0xF6,0xDA,0x04,0xDA,0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00, -0xF7,0x04,0x04,0x04,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0xB8,0x04,0x04,0xDA,0x55,0x00, -0x54,0x55,0xB8,0x55,0x00,0x00,0x0A,0xF6,0x00,0x04,0x00,0x00,0x00,0x00,0xF6,0xB8, -0x55,0x00,0x00,0x58,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, -0x00,0x53,0xF7,0xF7,0x53,0x00,0x5A,0xDC,0x54,0x00,0x55,0xB8,0xF5,0x53,0xF3,0xD9, -0x04,0x04,0x00,0x00,0x00,0x54,0xF6,0xB8,0xF6,0x00,0x00,0x56,0x04,0x04,0x04,0xDA, -0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00,0xF6,0xD4,0x04,0x04,0x00,0xF6,0x0B,0x00, -0x00,0x55,0xB8,0x55,0x54,0x00,0xF7,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x55, -0xB8,0x55,0x54,0x00,0x59,0xF6,0x00,0x04,0x00,0x00,0x00,0x54,0xF7,0xD7,0x04,0xDB, -0x54,0x00,0xF7,0xF7,0x00,0x54,0xD9,0x04,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDC,0x00,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0xD0,0x00,0xFA,0x04,0x04,0x04, -0x04,0x04,0xDA,0x16,0xDB,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x59,0x04,0x04,0x04, -0xF5,0x54,0xDD,0x04,0x04,0x04,0xD9,0x54,0xF3,0xDA,0x04,0xDC,0x00,0x55,0x04,0x04, -0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xF7, -0x00,0x53,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xFF,0xF9,0x94,0x04,0x00,0xF6,0x04,0x00,0xF6,0xF6,0x00,0x04,0xD9,0xD9, -0xD9,0xF5,0xF5,0xD9,0xD9,0xD9,0x58,0x00,0xD7,0xD9,0xDA,0x55,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0xB3,0x53,0x04,0xDF,0x00, -0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0xDA,0x04,0x04,0xDA,0x53, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF7,0x00,0xE1,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x57,0x53,0xD9,0x53, -0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x53,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x04,0xD4,0xDA,0x04,0x04,0x04,0x04, -0xD5,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xB3,0xF3,0xD4,0xF6,0x00,0x04, -0x04,0x04,0x04,0xDE,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF5,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0x04,0x04,0xF3,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x54,0xB8,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0x5B,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x53,0x5B,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D, -0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0xD9,0x00,0x5A,0x04,0x04, -0xE1,0x00,0x00,0x55,0xB8,0x53,0xF5,0xF3,0xF7,0x04,0xF5,0x56,0x04,0x04,0x04,0x04, -0x04,0x04,0xDF,0x00,0x17,0x04,0xE1,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x04,0xD8,0x09,0x53,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0xB8,0xD0,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0xD5,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDB,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, -0xF7,0x56,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0xD9,0x53,0x54,0xD5,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD5,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF3,0xB3,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xB8,0x00,0xFA,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDA,0xB3,0xC6,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x53,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0xD5,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0xEF,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x53,0x53,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x59,0x00,0xDE,0x04, -0x04,0x04,0x04,0x04,0x54,0x00,0x00,0xC6,0xDB,0x04,0x04,0x04,0x04,0xD8,0x54,0xF7, -0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x57,0x04,0x04,0xFA,0x00,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04,0xF4,0x53,0x04,0x04, -0x04,0x04,0x04,0x04,0xD5,0x54,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xF3,0x53,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0xF3,0x00,0x00,0xF4, -0x59,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD3,0xF7,0x53,0x00,0x54,0x55,0xD0, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0xB3,0x00,0x00,0xF4,0x59,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x00,0x00,0xF4,0x57,0xDA,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x53,0x55,0xDE,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xE1,0xF6,0x53,0x00,0x53, -0xF7,0xD5,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x56,0xB3,0x00,0x54,0x55,0xDE,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x0A,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xD9,0x55,0x54,0x00, -0xF5,0xD6,0x04,0x04,0xDB,0x55,0x54,0x00,0xB3,0xB8,0xDA,0x04,0x04,0x04,0x00,0xF6, -0x04,0x59,0xF3,0x00,0x54,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x53, -0x00,0x54,0xF6,0x0A,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD3,0xF7,0x53,0x00,0x54, -0xF6,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x53,0x55,0xD2, -0x04,0xF6,0x00,0x04,0x00,0xF6,0xD7,0xF3,0x54,0x57,0x04,0x04,0xDC,0xF6,0x00,0x54, -0xF6,0xDD,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xB8,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xE1,0x00,0x16,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x59,0x00,0x5A,0x04,0x04, -0x04,0x04,0x04,0x60,0x00,0x56,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x54,0xDA,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x9E, -0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xB8,0x54,0x04, -0x04,0x04,0xF2,0x00,0xD0,0x04,0xDA,0x55,0x00,0xDA,0x04,0x04,0x04,0x04,0x55,0xF3, -0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x53,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0x54,0x53,0xD9,0x04,0x04,0x04,0x04, -0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xB8,0x00,0xDA,0x04,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0x00,0x5C,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0xF6,0x04,0x04,0xF5,0xB3,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDA, -0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, -0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x54,0xD9,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x04,0x57, -0x00,0xEF,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0xD4,0x00,0xF5,0x04,0x04,0x17,0x00,0x5C,0x04,0x04,0xD5,0xF7,0x54, -0x00,0xF6,0xD9,0x04,0x04,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, -0xF4,0x04,0xF6,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x16,0x00,0xF4,0xD9,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDD,0x54,0x54,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xB8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, -0xF4,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xF3,0x00,0x0A,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xD7,0x00,0xF3,0xD4,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0x00,0x00,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00, -0x00,0x00,0xF6,0x04,0x00,0xF6,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0xD2,0x00,0xF3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDD, -0x53,0x00,0xDE,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x54, -0xB3,0x04,0x04,0x57,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0xF4,0x53,0x5D,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00, -0xFA,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD6,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDE,0x00,0x57,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x55,0x00,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04, -0xDC,0x00,0xF4,0x04,0x04,0x04,0x04,0xF6,0x00,0xD2,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD8,0x53,0xF4,0x04,0x04,0x04,0x57,0x00,0xEF,0x04,0x04,0x04,0x04,0x04, -0xB8,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDF,0x04,0x04, -0x04,0x04,0x04,0x59,0x00,0xE1,0xDE,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD5,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x54,0x41,0x04,0x00,0xF6, -0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDF,0x00,0xDB,0x04,0x04,0xDA,0x00, -0x57,0x04,0x04,0x59,0x00,0xDE,0x04,0x04,0x04,0xD4,0x54,0xF5,0x04,0xF6,0x00,0xD7, -0x04,0x04,0xD7,0x00,0xF6,0x04,0x04,0x5B,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0xD5,0x04,0x04,0xDD,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0xD0,0x00,0xF4,0xD9,0x04,0x04,0x04,0xDB,0x53,0x54,0xDB, -0x04,0x04,0x04,0x53,0x54,0x00,0x00,0x00,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xD6, -0x04,0x04,0xDD,0x00,0x53,0xD7,0x04,0x04,0x04,0x04,0x17,0x00,0x53,0xDA,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0xD2,0x00,0xF3,0xD9,0x04,0x04,0x04,0xD9,0xF4,0x00,0xDE, -0x04,0x04,0xB8,0x54,0xE1,0x04,0x04,0x04,0x58,0x00,0x58,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x53,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x5D,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8,0x04,0x04, -0x55,0x00,0xD6,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x04,0xDA,0x53,0x54,0xDE,0x04, -0x04,0x04,0x04,0x56,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0xDA,0xF6, -0x54,0xDF,0x04,0x04,0x04,0x59,0x00,0xF6,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0xE1, -0xF3,0x54,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x5A,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, -0x60,0x04,0x04,0x04,0x04,0x56,0x00,0x53,0xDF,0x04,0x04,0x04,0x04,0x04,0xDA,0x5A, -0x00,0x00,0xD7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xF4,0x00, -0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x54,0x16,0xDA, -0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0x5A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0x00,0xF6,0x04, -0x00,0x00,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0xE1,0x00,0x54,0x5B,0xD4,0xDA,0x04,0x04,0x04,0xDA,0x58,0x00,0x00,0x0A,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xB8,0x04,0x04,0x04, -0xF7,0x00,0x53,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x53,0x00,0xB8,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x53,0xDA,0x04,0x04,0x56, -0x00,0x56,0x04,0x04,0x04,0xDA,0xF6,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, -0x53,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x54,0xD7,0x04,0x04,0x04,0xF4,0x54,0xDC,0x04, -0x04,0x04,0x04,0xDB,0x00,0xF3,0xDA,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04, -0x04,0x04,0x04,0x59,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B, -0x54,0x5B,0x04,0x04,0xD8,0x54,0x54,0xD7,0x04,0x04,0x04,0xD4,0x54,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xC6,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x60,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDD,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0xDA,0x04,0x04,0x04, -0x54,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x59,0x04,0x00,0xF6,0xDA,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x04,0xD5,0x00,0xD6,0x04,0x04,0x04,0xB3,0x55,0x04,0x04,0xDA, -0x53,0xB3,0xD2,0x04,0xD9,0x55,0x00,0xEF,0x04,0xDC,0x54,0x00,0xF7,0xF7,0x00,0x54, -0xDC,0x04,0x04,0xDA,0x54,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x54, -0xF7,0xF7,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x0A,0x00,0x53,0xD7,0x04,0xDE,0x54,0x54,0xD7,0x04,0x04,0x04,0x04,0xB8, -0xB8,0x54,0x00,0x00,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0x0A, -0x00,0x54,0xF5,0xF7,0xF7,0xF3,0x00,0x53,0xD3,0x04,0x04,0xB8,0xB8,0xB8,0x54,0xF6, -0xDA,0x04,0x5C,0x00,0x00,0x55,0xB8,0x55,0x00,0x00,0x5A,0x04,0x04,0x04,0xD9,0x53, -0x00,0xF6,0xB8,0xF5,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x54,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0x04,0x04,0x04, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x00,0x04,0x04,0xD9,0x53,0x54,0xF6, -0xB8,0xF6,0x54,0x53,0xD9,0x04,0x04,0x04,0xD3,0x53,0x00,0xF5,0xB8,0xF7,0x53,0x00, -0xF6,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD7,0x54,0x00,0xF4,0xB8,0xF7,0x54,0x00,0xB8,0x04,0x04,0x04, -0x04,0x04,0xE1,0x53,0x00,0x53,0x55,0xB8,0xF7,0xF6,0x54,0x00,0xF5,0xDD,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0x55,0x53,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x17,0x54,0x00,0x54,0x55,0xB8,0xF7,0xF6,0x00,0x00,0xF4,0xDD,0x04,0x04, -0x04, -0x00,0x53,0xB8,0xB8,0xB8,0xF7,0xF5,0x54,0x00,0x00,0x58,0x04,0x04,0x04,0x04, -0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xD0,0x04,0x00,0x53,0xB8,0xB8,0xB8, -0xB8,0xB8,0xB8,0xD0,0x04,0x04,0x04,0x04,0xB8,0x54,0x54,0x00,0xF6,0xB8,0xB8,0x55, -0x54,0x00,0xF3,0xDE,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x56,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD3,0xF4, -0x00,0x00,0xF6,0xF7,0xF7,0xF6,0x00,0x00,0xF3,0xD7,0x04,0x04,0x04,0x04,0x00,0x53, -0xB8,0xB8,0xB8,0xF7,0xF6,0x00,0x00,0xF4,0xDA,0x04,0x04,0x04,0x04,0x5C,0x54,0x00, -0x54,0xF6,0xB8,0xF7,0xF6,0x00,0x00,0x54,0x17,0x04,0x04,0x04,0x04,0x00,0x53,0xB8, -0xB8,0xB8,0xF7,0xF6,0x00,0x00,0x53,0xDC,0x04,0x04,0x04,0xDA,0xF5,0x53,0xF3,0xF7, -0xF7,0x54,0x00,0xB8,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0xB8,0xB8, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDB,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xDF,0x04,0xD6, -0x00,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0xE1,0x04,0x04,0x04,0x04, -0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x58,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04, -0x5D,0x54,0x56,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x53,0xB3,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x54,0x04,0x04, -0x04,0xDE,0x00,0x00,0xDF,0x04,0x04,0x5D,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF4,0x54,0xB3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xE1,0xF3,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0xF6,0xB8,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x55,0xDE,0x04,0x00,0xF6,0xDA,0xB8,0xF3,0x00, -0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x81,0xFF,0x45,0x04,0x00,0xF6,0x04,0x00,0xF6,0xF6,0x00,0x04,0x04,0x04, -0x04,0x04,0x54,0x56,0x04,0x04,0x04,0x55,0x53,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00, -0x00,0x00,0x58,0x04,0x04,0x04,0xD5,0x55,0x54,0x54,0xF6,0xDD,0x04,0x04,0x04,0x04, -0x57,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x54,0xF6,0xD3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDC, -0xF6,0x58,0x04,0x58,0x55,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, -0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDA,0x04,0x04,0x04,0xD5,0xB8,0xF3,0x00, -0x00,0xF3,0x57,0xD8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0xD7, -0xF7,0x53,0x00,0x53,0x55,0xD7,0x04,0x04,0x04,0x04,0x04,0xD9,0xF7,0x53,0x00,0xB3, -0xB8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x04, -0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x53,0xB8,0xD9, -0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0xF3,0x00,0x54,0xF5,0x17,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0xDB,0xF7,0x53,0x00,0x54,0xF6,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x17,0x55,0xB3,0x00,0x00,0xF3,0xF7,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0x00,0x00,0x00,0x00,0x53,0xF6,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x5D,0xF6,0x53,0x00,0x00,0xF3,0xF7,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, -0x00,0x00,0x54,0xF3,0x55,0x5C,0xD8,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x57, -0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x00,0x00,0x00,0xF3,0xF7,0xE1,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDF,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD5,0x00,0x00,0xF6,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0xF7,0xB3,0x00, -0x00,0xB3,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x53,0xF6,0x16,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x5A,0xF6,0x53,0x00,0x00, -0x53,0xF6,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xB3, -0x55,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0xF4,0x00,0x54,0xF5,0xDF,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x56,0x00,0xD0,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF5,0x04,0xF7,0x00,0xD9,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xF4,0x04,0xDD,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD7, -0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0x5C,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDC,0xF5, -0x58,0x04,0x04,0xF3,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xB8,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0xF5,0x54,0xF3,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD3,0xF7,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0xF4,0x54,0x57,0x04,0x00,0xF6,0x04,0x00,0x53,0xF7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, -0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF4,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF4,0x04,0x55,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x5D,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEC,0xFF,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x04,0xD8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x3B,0x3B,0x3B,0x00,0x00, + 0x04, + 0x27, + 0x0A, + 0x00, + 0x00, + 0x6F, + 0x73, + 0x00, + 0x00, + 0xB7, + 0xDC, + 0x00, + 0x00, + 0xCB, + 0x50, + 0x01, + 0x00, + 0x0B, + 0x04, + 0x00, + 0x00, + 0x1A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3A, + 0x69, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDF, + 0x56, + 0xF7, + 0x56, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x04, + 0xDF, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0xDF, + 0xDA, + 0x04, + 0xDD, + 0xF7, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x04, + 0x57, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xC6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD5, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0x53, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xFA, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x54, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x09, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x54, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5E, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB3, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x09, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xF7, + 0x53, + 0x00, + 0x54, + 0x00, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xB3, + 0x00, + 0x54, + 0x00, + 0x53, + 0xF7, + 0xDB, + 0xDA, + 0x56, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF3, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x57, + 0x53, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x56, + 0x53, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0xC6, + 0x00, + 0x00, + 0x53, + 0x58, + 0xDA, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x53, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0x54, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xC6, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xC6, + 0x00, + 0x00, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0xF5, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF3, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xC6, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x55, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xDA, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0x53, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xB3, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x53, + 0x55, + 0xB8, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x55, + 0xB8, + 0xF4, + 0x54, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xC6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x54, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xB3, + 0xF7, + 0xB8, + 0xF4, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0xB8, + 0xF3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xDF, + 0xDA, + 0xDD, + 0xF3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xE1, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x53, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x17, + 0xD3, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x00, + 0xF3, + 0x17, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xF3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD4, + 0xF4, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0x21, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xDA, + 0xC6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x09, + 0xDA, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x59, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x60, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0xD3, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xDE, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0xB8, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF6, + 0x55, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x58, + 0xDA, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x57, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x16, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xDE, + 0xB8, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDB, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0xD7, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0xF7, + 0x54, + 0x59, + 0x17, + 0x17, + 0x55, + 0x00, + 0xFA, + 0x17, + 0x17, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xDC, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xF5, + 0xDD, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x54, + 0x54, + 0x5B, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD0, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x5D, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x5E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x58, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x55, + 0x00, + 0x00, + 0xD2, + 0xD8, + 0xC6, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB8, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD8, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD9, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0xD9, + 0x00, + 0x57, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xE1, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD9, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0x59, + 0x53, + 0x00, + 0x17, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0xF3, + 0x00, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDF, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0xDF, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0xE0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5B, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x5E, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x5B, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x5C, + 0x5E, + 0x56, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0xDD, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x5C, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0xDD, + 0x04, + 0x57, + 0x00, + 0xD9, + 0x59, + 0x00, + 0xDB, + 0x04, + 0x57, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xB8, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xDC, + 0x04, + 0xB3, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x87, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0x00, + 0x55, + 0xDD, + 0xDD, + 0xDC, + 0x00, + 0xF7, + 0xDC, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0xDF, + 0x54, + 0x00, + 0x00, + 0x54, + 0x50, + 0x04, + 0x04, + 0x55, + 0x00, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0xC6, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF6, + 0xDE, + 0xF1, + 0x5C, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x50, + 0xD0, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDF, + 0x00, + 0x54, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xB8, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDC, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x58, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0x55, + 0xD8, + 0x59, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0xF3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xF5, + 0x00, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xB8, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x53, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xC6, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD3, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x5C, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x60, + 0x5D, + 0x57, + 0xF6, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0xD5, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xD5, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xDB, + 0xDB, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0xEF, + 0x5D, + 0xF7, + 0x00, + 0xC6, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x57, + 0x53, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x00, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5E, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE0, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xC6, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x55, + 0xD3, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD9, + 0x04, + 0xD8, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xDF, + 0xD0, + 0xDA, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xFA, + 0xF7, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xC6, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF4, + 0x5A, + 0x5B, + 0xF5, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xD0, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDD, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xD3, + 0xDF, + 0xF6, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x54, + 0x00, + 0x54, + 0x57, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x55, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0xDB, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0xB8, + 0x04, + 0x56, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0xF5, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x60, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x53, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x56, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xDB, + 0xD9, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5C, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDA, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xD0, + 0x55, + 0x00, + 0xD0, + 0xD0, + 0xD0, + 0xF5, + 0x00, + 0xD0, + 0xD0, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0xD2, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x53, + 0x57, + 0x5D, + 0x55, + 0x54, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0x57, + 0xFA, + 0xF7, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xDB, + 0x04, + 0x54, + 0x53, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xD7, + 0x60, + 0xB3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xD8, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDB, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x0A, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x60, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xD6, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x5E, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDA, + 0xC6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x54, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF6, + 0xD7, + 0xD6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0xDB, + 0xF7, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xD9, + 0x17, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xDC, + 0xDB, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x5A, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0x5E, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0xDE, + 0xD7, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF5, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xB8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0xE0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0xDA, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD9, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x56, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x54, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x54, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x59, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDD, + 0x54, + 0x54, + 0xF4, + 0xF7, + 0xF7, + 0xF3, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x56, + 0x56, + 0x00, + 0x53, + 0x56, + 0x56, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xC6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x00, + 0xD6, + 0xF6, + 0x00, + 0xF3, + 0xB8, + 0xF7, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x54, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF4, + 0xF7, + 0xF7, + 0xB3, + 0x54, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x5C, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x09, + 0xF4, + 0x58, + 0x04, + 0xD3, + 0x00, + 0x54, + 0xB8, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x56, + 0x53, + 0x00, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x50, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0xD8, + 0xD9, + 0x00, + 0x58, + 0xD8, + 0xD8, + 0xD7, + 0x00, + 0x60, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0xD8, + 0xDB, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDB, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0xF1, + 0x00, + 0xF5, + 0x04, + 0xDB, + 0x54, + 0x54, + 0xB8, + 0x5A, + 0x00, + 0x53, + 0x00, + 0xD8, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDF, + 0xDB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xF1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x5C, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDD, + 0xF5, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x53, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD6, + 0xC6, + 0x00, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x59, + 0x04, + 0xB8, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF7, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x17, + 0x59, + 0x00, + 0x09, + 0x57, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x5A, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x53, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x5A, + 0x04, + 0x56, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x58, + 0x09, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5A, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x55, + 0xD8, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5D, + 0x04, + 0xD5, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5E, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0xD9, + 0xD8, + 0xF7, + 0x00, + 0x58, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xF7, + 0xF6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xC6, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x04, + 0x5C, + 0x54, + 0xB3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0xDF, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0xF7, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x17, + 0x56, + 0x56, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF5, + 0x54, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF4, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF3, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xF3, + 0xB8, + 0xF7, + 0x00, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x53, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xDF, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x54, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xB3, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x53, + 0x00, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF1, + 0x04, + 0x5B, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x50, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xB8, + 0x54, + 0x00, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF7, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD0, + 0xF3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF5, + 0x04, + 0x5A, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x50, + 0x04, + 0x04, + 0x04, + 0xFA, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF4, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF5, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x55, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD2, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x54, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF5, + 0x04, + 0xD8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x54, + 0x00, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xD5, + 0xD9, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x00, + 0x00, + 0x0B, + 0x04, + 0x00, + 0x00, + 0x1A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3A, + 0x69, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x59, + 0xF7, + 0xF7, + 0xB8, + 0xF9, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x04, + 0x59, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x59, + 0xDB, + 0x04, + 0xE1, + 0x55, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF5, + 0x53, + 0xB3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x53, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF5, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x04, + 0xB8, + 0x54, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xC6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x56, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xB3, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD6, + 0x53, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x58, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x09, + 0x57, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF6, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x55, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDE, + 0xDB, + 0xF7, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0xF3, + 0x00, + 0x00, + 0x54, + 0x55, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xF6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0xB8, + 0x53, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xB8, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0xB8, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x17, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xC6, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x55, + 0x55, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x53, + 0xF7, + 0x55, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0xC6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xC6, + 0x55, + 0x55, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0xF4, + 0x55, + 0xF7, + 0x55, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF6, + 0x53, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x60, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x00, + 0xB3, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x53, + 0x55, + 0xF7, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x11, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x11, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x55, + 0x55, + 0xF3, + 0x00, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xC6, + 0x00, + 0xB3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0xB3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB3, + 0xF7, + 0xF3, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xB3, + 0x55, + 0x55, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x09, + 0xC6, + 0x59, + 0xDB, + 0xE1, + 0xF3, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x5C, + 0x04, + 0x53, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0x58, + 0x0A, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDE, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x00, + 0xF3, + 0x58, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x17, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xD5, + 0xF6, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF5, + 0x54, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0xF6, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x57, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x53, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xF3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xD9, + 0x53, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0xC6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x09, + 0xC6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x53, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xD9, + 0x04, + 0xD8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF2, + 0xC6, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x60, + 0x04, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0x0A, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x09, + 0xB3, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x53, + 0x53, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x54, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xC6, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x56, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x56, + 0xDA, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0xF7, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDE, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x0D, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5A, + 0xDE, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x55, + 0x00, + 0x56, + 0x58, + 0x58, + 0xF6, + 0x09, + 0x57, + 0x58, + 0x58, + 0x04, + 0x55, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x54, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0xB3, + 0x54, + 0x16, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0xF4, + 0xE1, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x5B, + 0xF9, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x56, + 0x54, + 0x54, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x54, + 0x57, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0xDB, + 0x55, + 0x00, + 0x00, + 0xD8, + 0x59, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xF9, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x57, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD9, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xB8, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x0D, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0xDF, + 0xD5, + 0xE0, + 0x00, + 0x0A, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x09, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD3, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xD7, + 0x04, + 0xD7, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xE0, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0xF2, + 0x54, + 0xB8, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x09, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x60, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5D, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x04, + 0xD7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x56, + 0x56, + 0x53, + 0x00, + 0x58, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0xF3, + 0x00, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x59, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x59, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x55, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x57, + 0x09, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x59, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDC, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x55, + 0x57, + 0x57, + 0xB8, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x16, + 0x09, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x59, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xF5, + 0xDA, + 0xF5, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD5, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0xB8, + 0x54, + 0xD7, + 0x56, + 0x00, + 0xDE, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xF7, + 0x04, + 0x0D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0x13, + 0x04, + 0xB3, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xAD, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0x00, + 0xF6, + 0xE1, + 0xE1, + 0xD6, + 0x00, + 0x55, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x59, + 0x53, + 0x00, + 0x00, + 0x54, + 0x59, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x55, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xF5, + 0x16, + 0xD6, + 0x57, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x54, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x59, + 0xF9, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x59, + 0x54, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xE1, + 0x09, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x55, + 0x04, + 0x5B, + 0x53, + 0x55, + 0xB8, + 0x53, + 0x54, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x53, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF7, + 0x04, + 0x04, + 0xD3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0x55, + 0xDC, + 0x56, + 0x00, + 0xC6, + 0xF2, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xF4, + 0x00, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5A, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x54, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x0A, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x57, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x57, + 0xB8, + 0xF5, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0xD0, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xD0, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0xD8, + 0xDE, + 0xDE, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x17, + 0x5A, + 0x57, + 0x55, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB8, + 0x53, + 0x54, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x17, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x54, + 0x00, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0x09, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x09, + 0xC6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x58, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF3, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD7, + 0x04, + 0xD5, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x59, + 0x5E, + 0xD9, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x57, + 0xF7, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0xDA, + 0xDF, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF4, + 0x56, + 0x57, + 0xF5, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5E, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xF3, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x56, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0x0A, + 0x59, + 0xF6, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x03, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0xF7, + 0xC6, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0xF5, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x54, + 0xB8, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x54, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xDE, + 0xD2, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x57, + 0xD6, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xDD, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF9, + 0x55, + 0x00, + 0xF9, + 0xF9, + 0xF9, + 0xF5, + 0x00, + 0xF9, + 0xF9, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x55, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x09, + 0xC6, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0x57, + 0x55, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0xB8, + 0x57, + 0x55, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x5C, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0xDE, + 0x04, + 0x54, + 0x53, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xC6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0x0D, + 0x58, + 0xB3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xDC, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xDE, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5A, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x5B, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0xDC, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0x57, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x58, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD2, + 0xB3, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x58, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xDA, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xE1, + 0x04, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0x55, + 0x00, + 0xF7, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF9, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x58, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xC6, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0xDF, + 0x5B, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF3, + 0xDE, + 0x55, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xF2, + 0x58, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x55, + 0xE1, + 0xDE, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xD6, + 0x57, + 0x09, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0x60, + 0xDF, + 0xF6, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0xDA, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x60, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF4, + 0x04, + 0x5E, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x5B, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x53, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x0A, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0xDA, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x53, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x54, + 0xF2, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0xD8, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x54, + 0x53, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x59, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0xC6, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x56, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x54, + 0x0D, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x55, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x00, + 0x5B, + 0xF6, + 0x54, + 0xF3, + 0xF7, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0x55, + 0x53, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x55, + 0xF7, + 0xB3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x57, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x56, + 0x04, + 0x0A, + 0x00, + 0x09, + 0xF7, + 0xB3, + 0x00, + 0xF9, + 0x04, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x59, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x16, + 0x09, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0xDC, + 0xF2, + 0x00, + 0x56, + 0xDC, + 0xDC, + 0xDF, + 0xC6, + 0x57, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x57, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0xDC, + 0xDE, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0xDE, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB8, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0xF5, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xF7, + 0x56, + 0x00, + 0x53, + 0x00, + 0xD5, + 0xF5, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF3, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x59, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x55, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x0D, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x5D, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5E, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x5B, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0xDA, + 0x58, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x0D, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x57, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x0D, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0xF4, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xB8, + 0x00, + 0x09, + 0x04, + 0x04, + 0x5B, + 0xC6, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x54, + 0xB8, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x56, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x55, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x58, + 0x56, + 0x00, + 0x54, + 0xB8, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x57, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x60, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x58, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xC6, + 0x09, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x53, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF3, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x53, + 0x00, + 0xD2, + 0xDA, + 0x04, + 0x57, + 0x00, + 0x56, + 0x04, + 0xF7, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE0, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x56, + 0x54, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF5, + 0xD9, + 0xDA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0x55, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x57, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD3, + 0xDA, + 0xDA, + 0xD3, + 0x00, + 0x53, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xB3, + 0xDC, + 0xDA, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x55, + 0xD3, + 0x04, + 0xF1, + 0xF2, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x55, + 0xD3, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x16, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0xF4, + 0xE1, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0x5C, + 0x04, + 0x04, + 0xF2, + 0x54, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xDE, + 0xF5, + 0x54, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x17, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0xC6, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x09, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x55, + 0xD2, + 0xDC, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x5B, + 0x54, + 0x54, + 0x55, + 0xF6, + 0x00, + 0x53, + 0xDB, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0xC6, + 0xF7, + 0xF6, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x57, + 0x00, + 0xB3, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x5B, + 0x00, + 0x00, + 0x59, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x58, + 0xF7, + 0xF7, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF4, + 0x00, + 0x53, + 0x55, + 0x55, + 0x53, + 0x54, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF4, + 0xF7, + 0xF5, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF4, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x54, + 0x55, + 0x55, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0x09, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xF4, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x55, + 0xF4, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xC6, + 0x60, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x59, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0x54, + 0x54, + 0xB3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xC6, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF5, + 0x00, + 0x09, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB3, + 0x00, + 0xF4, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x54, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x53, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x55, + 0x0C, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF9, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0x00, + 0x00, + 0xF5, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x04, + 0x56, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x54, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x55, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF4, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x16, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xD8, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF4, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x5B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xD0, + 0xD7, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x00, + 0x00, + 0x49, + 0x04, + 0x00, + 0x00, + 0x1B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x74, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB8, + 0x5D, + 0x17, + 0x17, + 0x5D, + 0xF7, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDC, + 0xEF, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x5D, + 0x54, + 0x5D, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xD9, + 0xDF, + 0xB8, + 0x55, + 0xF7, + 0x5A, + 0xD2, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0x04, + 0xF2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDE, + 0xD9, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDC, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x5B, + 0x00, + 0x5B, + 0xDA, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC1, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD3, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xDE, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD3, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xD9, + 0x58, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xDA, + 0x60, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDE, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDD, + 0x5A, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD8, + 0x17, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xF2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD3, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0xDB, + 0xD8, + 0xD7, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xD0, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDD, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD6, + 0xD7, + 0xD8, + 0xD8, + 0xD7, + 0x12, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xE1, + 0xDD, + 0xD8, + 0xD3, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x16, + 0xF2, + 0xD9, + 0xD9, + 0xDE, + 0x5D, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0xD2, + 0xD9, + 0xD9, + 0xDE, + 0xFA, + 0xB3, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xD8, + 0xDC, + 0xD6, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0xD0, + 0xDC, + 0xD8, + 0xD9, + 0xD7, + 0xD6, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x03, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDB, + 0xD2, + 0xD6, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xFA, + 0xD0, + 0xDC, + 0xDA, + 0xD9, + 0xD3, + 0xE1, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD3, + 0xD0, + 0x5E, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xE1, + 0xD7, + 0xD9, + 0xDA, + 0xD5, + 0xDE, + 0x60, + 0xF6, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xD5, + 0xDA, + 0xDD, + 0xD6, + 0xF6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x5D, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xD0, + 0xDC, + 0xD8, + 0xD8, + 0xD3, + 0xE1, + 0x5A, + 0xF3, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x59, + 0xE1, + 0xF1, + 0xD8, + 0xD9, + 0xF1, + 0xE1, + 0x59, + 0x53, + 0xF5, + 0xDF, + 0xD7, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xEF, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD6, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDF, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDF, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD3, + 0xD8, + 0xD9, + 0xD7, + 0xDF, + 0xF5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x09, + 0xB8, + 0xE1, + 0xDC, + 0xD8, + 0xD5, + 0xD0, + 0x58, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD6, + 0xF1, + 0xD8, + 0xD9, + 0xF2, + 0x17, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x0A, + 0xD7, + 0xD9, + 0xD8, + 0xD2, + 0x17, + 0xF5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x57, + 0xD0, + 0xDD, + 0xD8, + 0xD5, + 0xE1, + 0xB8, + 0x00, + 0xF1, + 0xD7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD0, + 0xDD, + 0xDA, + 0xDB, + 0xDE, + 0x5A, + 0x00, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x56, + 0xD0, + 0xD5, + 0xDA, + 0xDD, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD0, + 0xD5, + 0xDA, + 0xD5, + 0xD0, + 0x56, + 0xC6, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD0, + 0xDB, + 0xD9, + 0xDE, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xDE, + 0xDB, + 0x04, + 0xD5, + 0xD6, + 0xF5, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xD9, + 0x55, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xD8, + 0xD0, + 0xE1, + 0xD9, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xDB, + 0xE1, + 0xD6, + 0xF1, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x54, + 0x58, + 0xD9, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x53, + 0x59, + 0xD8, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xD7, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0xD7, + 0xD6, + 0xD6, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDA, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x60, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x60, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x60, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDC, + 0x04, + 0xDC, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0xE1, + 0xD2, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD2, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xD6, + 0xDE, + 0xD5, + 0x04, + 0xD9, + 0x17, + 0x53, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD7, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDB, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xD5, + 0x04, + 0xDE, + 0xD6, + 0xDE, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDC, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD7, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD7, + 0x56, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD2, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xDE, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x16, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x59, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD5, + 0x04, + 0xD2, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0x04, + 0xF2, + 0xD6, + 0xD6, + 0xD3, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5A, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD4, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0xD2, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xEF, + 0x04, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x16, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xDA, + 0xDE, + 0xD6, + 0xE1, + 0xF1, + 0x04, + 0xDC, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDA, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0xD8, + 0x59, + 0xDE, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xF2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x60, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x16, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD8, + 0xD9, + 0xE1, + 0xD6, + 0xDB, + 0xD8, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0x54, + 0xEF, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0xE1, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x45, + 0x3E, + 0x54, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xF2, + 0xB8, + 0xF3, + 0xB8, + 0xD7, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD5, + 0xDF, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x59, + 0xD8, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD5, + 0xD7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD5, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xFC, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD4, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xD7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x12, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0xD8, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xD5, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x0A, + 0xD9, + 0x04, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0x04, + 0xDB, + 0xEF, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xD0, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xD5, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xD9, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD0, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDB, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xDC, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x60, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xDB, + 0x5E, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xDB, + 0xD8, + 0x59, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD9, + 0xDA, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD3, + 0xDA, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xD5, + 0x56, + 0x00, + 0x00, + 0x00, + 0x53, + 0x60, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0x04, + 0x04, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDC, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0xD9, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xDC, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xD6, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xDC, + 0x55, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x54, + 0x54, + 0xE1, + 0x04, + 0xE1, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x54, + 0x54, + 0xE1, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xF2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD5, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x7D, + 0x3B, + 0x45, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDB, + 0xF5, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0xEF, + 0xDA, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDD, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xD2, + 0xD8, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5A, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x59, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x54, + 0xDF, + 0x04, + 0x16, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD9, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x56, + 0xD0, + 0xDA, + 0x04, + 0xD2, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xD2, + 0x04, + 0xDA, + 0xE1, + 0x56, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0xDA, + 0xFA, + 0x00, + 0xF4, + 0xF7, + 0xF5, + 0x54, + 0x54, + 0xF3, + 0xF7, + 0x04, + 0x04, + 0x0A, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x60, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD9, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0xDA, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD7, + 0xD8, + 0x57, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD9, + 0xD9, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x56, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x5B, + 0x53, + 0xF5, + 0xD7, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x54, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDD, + 0xDE, + 0xF6, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0x00, + 0xD2, + 0xD2, + 0xB8, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x54, + 0x59, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x69, + 0xFF, + 0xAD, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDD, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x60, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0xC6, + 0xF2, + 0xDB, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDB, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0xDA, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD6, + 0x00, + 0xDB, + 0x04, + 0xD6, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0x04, + 0x0A, + 0x0A, + 0x00, + 0xE1, + 0xD4, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0xD7, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xF2, + 0x04, + 0x04, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xFA, + 0x00, + 0x60, + 0xD9, + 0x04, + 0xDA, + 0xD6, + 0xB8, + 0xDD, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF1, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0xDB, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD6, + 0x5A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0xF7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x09, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xD9, + 0xF5, + 0x57, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF4, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xDC, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD7, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x0D, + 0x04, + 0xFD, + 0xF7, + 0x57, + 0xDA, + 0xF1, + 0xF3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xDD, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0xB3, + 0xDC, + 0xF2, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xDF, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD4, + 0xB8, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0xDA, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF2, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0x5A, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x54, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDE, + 0x54, + 0xE1, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x5E, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xD0, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0x04, + 0x5A, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xF4, + 0x59, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x17, + 0x00, + 0xD2, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD9, + 0xB8, + 0xD5, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x60, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD7, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xD6, + 0x04, + 0xDE, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0xD5, + 0x0A, + 0x0A, + 0x0A, + 0x54, + 0x59, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDC, + 0xF3, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD0, + 0x00, + 0xDB, + 0xD2, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x60, + 0x0D, + 0x5E, + 0x04, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x60, + 0xF1, + 0x04, + 0xD9, + 0xD6, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xD8, + 0x04, + 0xD7, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDE, + 0x00, + 0x58, + 0x04, + 0xF1, + 0x60, + 0x17, + 0xF1, + 0x04, + 0x04, + 0x56, + 0x55, + 0xEF, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5B, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x17, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x0D, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5D, + 0x04, + 0xDF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x16, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD6, + 0x00, + 0xC6, + 0xD7, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x56, + 0xF5, + 0x53, + 0xF5, + 0x56, + 0xDF, + 0xD5, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF5, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0xDC, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xF6, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x53, + 0xDE, + 0xDA, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0xDC, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0xDD, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDE, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD5, + 0xF3, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0xD6, + 0x00, + 0xF4, + 0xD9, + 0xEF, + 0x00, + 0x5E, + 0x04, + 0xF7, + 0x00, + 0x60, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF6, + 0x00, + 0xD7, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD8, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0xF7, + 0xC6, + 0x00, + 0x0A, + 0xE1, + 0x00, + 0x54, + 0x53, + 0x53, + 0x57, + 0xDE, + 0xD9, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x56, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0xD6, + 0xD9, + 0xD5, + 0xF7, + 0x00, + 0xD0, + 0xDA, + 0xB8, + 0x53, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDD, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0x0A, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xF1, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x58, + 0x00, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x59, + 0x54, + 0x00, + 0xFA, + 0xD7, + 0xE0, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x5B, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x16, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xDF, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x59, + 0x54, + 0x00, + 0x55, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xDB, + 0xB3, + 0x00, + 0x03, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x54, + 0xDD, + 0xF2, + 0x00, + 0x00, + 0xF2, + 0xD5, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x56, + 0xDA, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD2, + 0x04, + 0xD8, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x57, + 0x00, + 0x00, + 0xD0, + 0xDC, + 0x00, + 0xDE, + 0xD7, + 0x00, + 0x00, + 0x55, + 0xD8, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xDA, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0xFA, + 0x00, + 0x5A, + 0x04, + 0xFA, + 0xF3, + 0x57, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x4D, + 0xF9, + 0x69, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD0, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x53, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x56, + 0xD4, + 0xDC, + 0xB8, + 0x54, + 0xB3, + 0xE1, + 0x04, + 0xD0, + 0xF3, + 0x17, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0xDE, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x00, + 0x53, + 0xD0, + 0x04, + 0xD0, + 0xB8, + 0xF3, + 0xF5, + 0x59, + 0xD3, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x56, + 0xC6, + 0x00, + 0x00, + 0xDB, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x16, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD0, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xD0, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xF7, + 0xF1, + 0xD9, + 0xF7, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDD, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF2, + 0x17, + 0xF4, + 0x00, + 0x00, + 0xDC, + 0xF1, + 0x55, + 0x5A, + 0x17, + 0xEF, + 0xDF, + 0x5D, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xD0, + 0xDE, + 0xD7, + 0xD8, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDF, + 0xD9, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x59, + 0x04, + 0x59, + 0x54, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0xD5, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0xD5, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x17, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0xD3, + 0x60, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x57, + 0xD4, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0x16, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0x56, + 0xF4, + 0x5A, + 0xD8, + 0xD6, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDA, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x0A, + 0xDB, + 0x04, + 0xFC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0xD8, + 0xEF, + 0xD0, + 0x04, + 0xD6, + 0x53, + 0x00, + 0xF4, + 0xDC, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5A, + 0xDA, + 0xF1, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD2, + 0xD8, + 0x17, + 0x55, + 0xB3, + 0xF7, + 0xE1, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x5B, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD7, + 0x04, + 0xDA, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD6, + 0xD8, + 0x04, + 0xD7, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDB, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x04, + 0x53, + 0x00, + 0x0A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x56, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xE1, + 0xF2, + 0xDA, + 0xDB, + 0x57, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x56, + 0xD8, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x60, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD2, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xDA, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x60, + 0xDE, + 0xDA, + 0x04, + 0xB6, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x58, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDC, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x03, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xF5, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xB8, + 0x00, + 0x04, + 0xF1, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD5, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD8, + 0x5A, + 0xD8, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x53, + 0x16, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0xDF, + 0x5D, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x56, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDE, + 0x04, + 0xDA, + 0xD9, + 0xD6, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xDF, + 0xDF, + 0x57, + 0x00, + 0x54, + 0xDE, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xD6, + 0xD2, + 0x04, + 0xF1, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD5, + 0xF6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDA, + 0x5E, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x53, + 0xD2, + 0xD8, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x59, + 0x04, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0x04, + 0x04, + 0xDE, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x58, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDB, + 0xD9, + 0xF7, + 0x00, + 0xD9, + 0xF6, + 0x00, + 0x58, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF4, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xE1, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x09, + 0xF5, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0xF2, + 0xD9, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xF1, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xDF, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xD8, + 0x04, + 0xD2, + 0xDF, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD3, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x12, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xF2, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x12, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xE1, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD8, + 0xF4, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xD0, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF4, + 0x5B, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0xDF, + 0x00, + 0x16, + 0x04, + 0x17, + 0x54, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x0A, + 0x54, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEC, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x58, + 0xFA, + 0x04, + 0xDF, + 0x58, + 0x58, + 0x58, + 0x04, + 0xF2, + 0x58, + 0x58, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0xD2, + 0xFA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x57, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDE, + 0xDB, + 0xDA, + 0xDF, + 0x53, + 0x00, + 0x53, + 0xD2, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD3, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0x04, + 0xD2, + 0xD6, + 0xD6, + 0xF1, + 0x04, + 0xF2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xD6, + 0xD0, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0xDB, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xE1, + 0xD8, + 0x04, + 0xD2, + 0x5C, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xD2, + 0x04, + 0xD4, + 0xE1, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xE1, + 0x00, + 0xD2, + 0x59, + 0x54, + 0x53, + 0xD7, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD3, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xB3, + 0x55, + 0x5A, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD9, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDA, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD0, + 0xD9, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDA, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0xD7, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD9, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD0, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDA, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDC, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0xF3, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x54, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xF1, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xD0, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDB, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD5, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xEF, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x12, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0xD4, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD7, + 0x04, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x59, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x57, + 0x53, + 0x00, + 0x5A, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x54, + 0xF2, + 0xDD, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x54, + 0x53, + 0xDC, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xDA, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x54, + 0xF2, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD0, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x41, + 0x74, + 0xEC, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x60, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD6, + 0xF6, + 0xF6, + 0xD6, + 0x04, + 0xDF, + 0x00, + 0xD2, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD4, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x56, + 0x58, + 0x00, + 0x57, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xEE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xD2, + 0xD8, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0xDE, + 0xDB, + 0xD9, + 0xF2, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDC, + 0xD9, + 0xD2, + 0x17, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDF, + 0xDB, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x04, + 0xDB, + 0x0D, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xEE, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0xDF, + 0xDE, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x57, + 0x00, + 0x57, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDD, + 0xF3, + 0x54, + 0x53, + 0xD3, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x0D, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x60, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0xD7, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x0A, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x55, + 0xD9, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xB6, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x60, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xDA, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xFA, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD8, + 0xDE, + 0xD6, + 0xD6, + 0xD7, + 0x04, + 0xDC, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDA, + 0xD8, + 0xDE, + 0xD6, + 0xE1, + 0xD7, + 0x04, + 0xD5, + 0x56, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0xDA, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0xD9, + 0x59, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x17, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x12, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD6, + 0xD6, + 0xDC, + 0x04, + 0x60, + 0xB8, + 0xDB, + 0xD9, + 0xD0, + 0xD6, + 0xF2, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD0, + 0xF4, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xFA, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0x60, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xD6, + 0x56, + 0x00, + 0xF7, + 0xDB, + 0xD9, + 0xE1, + 0xE1, + 0xD9, + 0xD5, + 0x55, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF5, + 0x00, + 0x57, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xF9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x17, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF3, + 0x00, + 0xB8, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xDD, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3B, + 0x56, + 0x94, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x53, + 0xF6, + 0x55, + 0x55, + 0xDE, + 0xDE, + 0x55, + 0x55, + 0x55, + 0x17, + 0x04, + 0xB8, + 0x55, + 0x00, + 0xD0, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x53, + 0xF1, + 0xDC, + 0x00, + 0x5A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDD, + 0x55, + 0xDC, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x00, + 0x00, + 0xF4, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xF1, + 0xD7, + 0xF4, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x16, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x16, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x55, + 0xD9, + 0x60, + 0x00, + 0x00, + 0x58, + 0xD9, + 0xD8, + 0xD0, + 0xD6, + 0xDD, + 0xDE, + 0xD7, + 0xE1, + 0x53, + 0xDE, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5B, + 0x00, + 0x58, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x56, + 0xD6, + 0x58, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD2, + 0xDA, + 0xF7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0x0D, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD3, + 0x53, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0A, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0xF1, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xDC, + 0xF3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD8, + 0x00, + 0xF7, + 0xDA, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xF1, + 0x53, + 0x00, + 0xD7, + 0xDD, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xF2, + 0x17, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD3, + 0xD9, + 0xD9, + 0xF2, + 0x17, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xD2, + 0xDF, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0xD0, + 0xDD, + 0xD8, + 0xDC, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD0, + 0xD5, + 0xD8, + 0xDC, + 0xD6, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0xF5, + 0xDF, + 0xD3, + 0xD9, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x55, + 0xD0, + 0xDB, + 0xD9, + 0xDE, + 0x59, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xD8, + 0xF1, + 0xEF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xF3, + 0x60, + 0xD2, + 0xD9, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xDC, + 0xD8, + 0xD5, + 0xD0, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xD0, + 0xDD, + 0xD8, + 0xD5, + 0xD0, + 0x56, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0xB8, + 0xD7, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xD9, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xFA, + 0x00, + 0xE1, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD7, + 0x00, + 0x00, + 0x60, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x0D, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x8C, + 0x3B, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xEF, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD7, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xD9, + 0x00, + 0xF3, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0xDD, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0xDE, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x5B, + 0xDA, + 0x5E, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xD5, + 0xD9, + 0xD0, + 0x55, + 0x00, + 0xF3, + 0x04, + 0xD5, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDD, + 0xD2, + 0x00, + 0xDE, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xB8, + 0xD5, + 0xDB, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x16, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x57, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x56, + 0xD8, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0xDA, + 0x57, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF1, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF2, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xF2, + 0x04, + 0x16, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x57, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3B, + 0xC8, + 0xE3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x17, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x00, + 0xDE, + 0xDA, + 0x56, + 0x54, + 0x00, + 0xB8, + 0xD4, + 0xDE, + 0x00, + 0x00, + 0x16, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xDD, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0xD4, + 0xDC, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x57, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0xDB, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD7, + 0xD8, + 0x5A, + 0x54, + 0x00, + 0x54, + 0xF5, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDE, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xD7, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x60, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD6, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDD, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x60, + 0xD9, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB3, + 0x58, + 0xD2, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0xDB, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xDC, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xDB, + 0x5E, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xD9, + 0xD8, + 0x59, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xDC, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0xDD, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD8, + 0xDC, + 0xF5, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x0D, + 0x53, + 0x00, + 0x54, + 0xF5, + 0xDE, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0xD5, + 0xF3, + 0x00, + 0xF5, + 0xD4, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x56, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5E, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xFA, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD2, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xC0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xD3, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xF1, + 0xD3, + 0x56, + 0xF3, + 0x55, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0xB8, + 0xDB, + 0xD9, + 0xE1, + 0xE1, + 0xD9, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0xF4, + 0xDB, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xDB, + 0xE1, + 0xE1, + 0xD9, + 0xD9, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xDC, + 0x56, + 0x00, + 0x57, + 0xDB, + 0xD5, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD7, + 0x04, + 0xD5, + 0xB8, + 0x54, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x5E, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xD4, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x55, + 0xF1, + 0x04, + 0xDE, + 0xD6, + 0xDE, + 0x04, + 0xDC, + 0x55, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD5, + 0x04, + 0xDE, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDB, + 0x04, + 0xD2, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDC, + 0x04, + 0xDD, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xD0, + 0xDD, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD2, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xE1, + 0xDE, + 0xDB, + 0x04, + 0xD9, + 0x17, + 0x53, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x54, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x54, + 0x00, + 0x00, + 0xB3, + 0xEF, + 0x04, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD7, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD2, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD7, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x12, + 0xD6, + 0xDE, + 0xDB, + 0x04, + 0xD2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0xDA, + 0xDB, + 0x5C, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x12, + 0xD6, + 0xDE, + 0xDB, + 0x04, + 0xDC, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0xD7, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x5A, + 0x54, + 0x59, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0xF1, + 0xF3, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD9, + 0xDA, + 0x5A, + 0x00, + 0x00, + 0x16, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xC1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xD7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD4, + 0xD8, + 0xD0, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xD0, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0A, + 0xD7, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x9D, + 0x3B, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDB, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x17, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD0, + 0xD9, + 0xDB, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0x17, + 0x00, + 0x17, + 0xD0, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xD2, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xDC, + 0xD8, + 0xDC, + 0xD0, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD6, + 0xD5, + 0xD8, + 0xF1, + 0xEF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x12, + 0xDC, + 0xD8, + 0xDC, + 0xD6, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDF, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x5D, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xDD, + 0x04, + 0xDB, + 0xDE, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0xD0, + 0xF1, + 0xD8, + 0xD9, + 0xD7, + 0xD6, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0xDE, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x16, + 0xD0, + 0xDD, + 0xD8, + 0xD9, + 0xD7, + 0xE1, + 0x58, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDB, + 0xD7, + 0xD0, + 0x5E, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x0A, + 0xD7, + 0xD9, + 0x04, + 0xD9, + 0xD7, + 0xD6, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x5A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x58, + 0xE1, + 0xD3, + 0xD8, + 0xD8, + 0xF1, + 0xE1, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0xD0, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x60, + 0xDE, + 0xDD, + 0xDA, + 0xD8, + 0xDC, + 0xD0, + 0xFA, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD9, + 0xD3, + 0xD0, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x60, + 0xD2, + 0xD9, + 0xDB, + 0xDE, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0D, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xD2, + 0x00, + 0xF7, + 0xD8, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0xE1, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5E, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDE, + 0x17, + 0x00, + 0x00, + 0xD7, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xEF, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xD7, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xF1, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF2, + 0xD8, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD8, + 0xDC, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xF2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD2, + 0x53, + 0xD0, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x16, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x3B, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x00, + 0xF6, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x49, + 0x04, + 0x00, + 0x00, + 0x1B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x74, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x60, + 0x58, + 0x58, + 0x60, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x60, + 0x04, + 0x60, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x56, + 0xD7, + 0xD9, + 0xDB, + 0xDF, + 0xF3, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB3, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF5, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x55, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x54, + 0x00, + 0xF3, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xF7, + 0x53, + 0x54, + 0xB3, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x57, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x54, + 0x53, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x17, + 0x55, + 0x53, + 0x54, + 0x53, + 0xF3, + 0xB8, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x54, + 0xF4, + 0xB8, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xFA, + 0xF6, + 0x53, + 0x54, + 0x00, + 0x53, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x00, + 0x53, + 0x55, + 0x5C, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xF6, + 0x5A, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x53, + 0x00, + 0x46, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x17, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x55, + 0x53, + 0x54, + 0x53, + 0xB3, + 0xF7, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF7, + 0xB3, + 0x00, + 0x54, + 0xB3, + 0xF7, + 0xD6, + 0x04, + 0xDA, + 0x57, + 0xF3, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xF3, + 0x54, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0xF3, + 0x54, + 0x53, + 0xF5, + 0x5C, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x57, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0xB3, + 0x54, + 0x54, + 0xF3, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0xF7, + 0x53, + 0x54, + 0x53, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x54, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x54, + 0x54, + 0xF3, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x53, + 0x54, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x53, + 0x54, + 0x53, + 0xF7, + 0xDC, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x53, + 0x54, + 0x54, + 0xF6, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0x55, + 0x54, + 0x54, + 0x53, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x54, + 0x54, + 0x53, + 0x55, + 0xD2, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF5, + 0x54, + 0x54, + 0x53, + 0xB8, + 0xD4, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x51, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x55, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x55, + 0xF7, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0xB3, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF7, + 0xF4, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x00, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF5, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x5A, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x53, + 0x55, + 0xB8, + 0xB8, + 0xF6, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0xC6, + 0x09, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x53, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x54, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xB8, + 0xF5, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0xF6, + 0x09, + 0x09, + 0xF3, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0xF5, + 0x5B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0xB3, + 0x54, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5D, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xF7, + 0xB3, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0xE1, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x5A, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x5B, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xF7, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFE, + 0xFF, + 0xF9, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x53, + 0x56, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x53, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x54, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x54, + 0x5A, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x54, + 0x5C, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xC6, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x53, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDD, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC8, + 0xFF, + 0xFE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD4, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xB8, + 0x54, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xEF, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0x00, + 0x54, + 0x53, + 0x04, + 0xD6, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x57, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0xF4, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xFA, + 0x04, + 0xDA, + 0xD5, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0xD5, + 0x00, + 0x00, + 0xB8, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x16, + 0x09, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x59, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDE, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0xD2, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x17, + 0x04, + 0xD4, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF4, + 0xD7, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xFA, + 0x04, + 0x0A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE3, + 0x3B, + 0x6E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x59, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF5, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x09, + 0x00, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x54, + 0xB8, + 0xB8, + 0x04, + 0xF7, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xFA, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0xDA, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF7, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD0, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDA, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x53, + 0xD4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x56, + 0x00, + 0xB3, + 0xDD, + 0xDE, + 0x54, + 0xB3, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x53, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDF, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5C, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x0A, + 0x00, + 0xDE, + 0x04, + 0xD9, + 0x00, + 0x58, + 0x04, + 0xF3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD3, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0x5A, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF3, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0xEF, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x53, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x55, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF6, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x16, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x59, + 0x56, + 0x5C, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0xF7, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xF6, + 0x04, + 0xD0, + 0x00, + 0xB3, + 0x5A, + 0x58, + 0xB3, + 0x00, + 0x00, + 0xD7, + 0xD9, + 0xB8, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x59, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x16, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xD2, + 0xDA, + 0x04, + 0xDA, + 0xD7, + 0x57, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x16, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD4, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD2, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0xDA, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0xDA, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0x00, + 0xB8, + 0x04, + 0x5C, + 0x00, + 0xDD, + 0x04, + 0x5A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD9, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xDB, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0xF7, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0x0A, + 0x04, + 0x04, + 0xFA, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0x00, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x57, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD2, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xF5, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x55, + 0x53, + 0x04, + 0xF5, + 0xF3, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x16, + 0x09, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDF, + 0x00, + 0x16, + 0xDA, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0xFC, + 0x3B, + 0xE3, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x55, + 0xD5, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x58, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x53, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x16, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0xD7, + 0x04, + 0xDA, + 0xD6, + 0xB3, + 0xC6, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x54, + 0xDA, + 0x04, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x54, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x53, + 0xB3, + 0xD9, + 0xDF, + 0x57, + 0xB8, + 0x57, + 0x17, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD5, + 0x55, + 0xF6, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x57, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x03, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x57, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x53, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x00, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF3, + 0x00, + 0xB3, + 0x59, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF2, + 0xDA, + 0xDF, + 0x09, + 0xF7, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x45, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xB8, + 0x54, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xB8, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0x58, + 0xD9, + 0x04, + 0xD5, + 0xF7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0xF4, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD2, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD2, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5A, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xE1, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0xDA, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xDA, + 0xF6, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0xDA, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xEF, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x56, + 0x17, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xD7, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD0, + 0x57, + 0x57, + 0xD0, + 0x04, + 0xDA, + 0xF6, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0B, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x00, + 0xD8, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xFA, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x00, + 0x00, + 0xF3, + 0x57, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xB3, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF4, + 0x04, + 0xD9, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD0, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x53, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xE1, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD0, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x17, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0x57, + 0x04, + 0x5D, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3C, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xD0, + 0x16, + 0x00, + 0x56, + 0xD0, + 0xD0, + 0xD0, + 0x00, + 0xF4, + 0xD0, + 0xD0, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xF3, + 0xFA, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x54, + 0x55, + 0xDA, + 0xD0, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xF6, + 0x54, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0xB3, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xF5, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xEF, + 0x53, + 0x54, + 0xD9, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF5, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDB, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD4, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xC6, + 0x55, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x54, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0xD4, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD0, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x09, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0xD8, + 0x3E, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x5A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0xD8, + 0xDA, + 0xB8, + 0x54, + 0x56, + 0x04, + 0xF4, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xB8, + 0x04, + 0xD8, + 0xF6, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB6, + 0xD0, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD2, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0x57, + 0xF6, + 0x54, + 0x00, + 0xF4, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x53, + 0x00, + 0xF3, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x54, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x54, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x57, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x57, + 0xF5, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xDE, + 0x04, + 0xDE, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x58, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xD4, + 0xF3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xFA, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x16, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0xB8, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x58, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDC, + 0xD9, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x59, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xB3, + 0xD5, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x0B, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD2, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x0A, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0x5A, + 0xDC, + 0x54, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x53, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x0B, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x59, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD7, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xD9, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDC, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0xF9, + 0x94, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0xD9, + 0xD9, + 0xD9, + 0xF5, + 0xF5, + 0xD9, + 0xD9, + 0xD9, + 0x58, + 0x00, + 0xD7, + 0xD9, + 0xDA, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDF, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD9, + 0x53, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x04, + 0xD4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0xF3, + 0xD4, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5B, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x5B, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xD9, + 0x00, + 0x5A, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x53, + 0xF5, + 0xF3, + 0xF7, + 0x04, + 0xF5, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0xE1, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0xD8, + 0x09, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD5, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0xB3, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xD5, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x57, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x00, + 0x54, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xD5, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0x55, + 0x54, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x00, + 0xB3, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x59, + 0xF3, + 0x00, + 0x54, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x53, + 0x00, + 0x54, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x00, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x53, + 0x55, + 0xD2, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD7, + 0xF3, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x54, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xB8, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x16, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x9E, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xD0, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0xF3, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF5, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x04, + 0x57, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5C, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0xF6, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x53, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xE1, + 0xDE, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x54, + 0x41, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x57, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xF5, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5B, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xD6, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x5A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF4, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0x5B, + 0xD4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x5B, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x59, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xB3, + 0xD2, + 0x04, + 0xD9, + 0x55, + 0x00, + 0xEF, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x53, + 0xD7, + 0x04, + 0xDE, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x54, + 0xF5, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD3, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x5C, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0xB8, + 0xF5, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x00, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xF6, + 0xB8, + 0xF6, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x53, + 0x55, + 0xB8, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x54, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF5, + 0x53, + 0xF3, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDF, + 0x04, + 0xD6, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x58, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x56, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xB8, + 0xF3, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x81, + 0xFF, + 0x45, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x55, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x55, + 0x54, + 0x54, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x54, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x58, + 0x04, + 0x58, + 0x55, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0x57, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x53, + 0x00, + 0x53, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF7, + 0x53, + 0x00, + 0xB3, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x53, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xF3, + 0x00, + 0x54, + 0xF5, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x53, + 0x00, + 0x54, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x17, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5D, + 0xF6, + 0x53, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x55, + 0x5C, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0xF6, + 0x53, + 0x00, + 0x00, + 0x53, + 0xF6, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0xF4, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x5C, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0x58, + 0x04, + 0x04, + 0xF3, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF4, + 0x54, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF4, + 0x04, + 0x55, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0xFF, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x04, + 0xD8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x00, + 0x00, }; \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h index 705e43b76f4..b35c3514e8d 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h +++ b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h @@ -14,8 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. * - ******************************************************************************/ - + ******************************************************************************/ #ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ #define EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ @@ -23,10 +22,9 @@ // bitmaps id // fonts id -#define urw_gothic_12_grey_bg_white 0 -#define urw_gothic_12_white_bg_grey 1 -#define urw_gothic_13_grey_bg_white 2 -#define urw_gothic_13_white_bg_grey 3 - +#define urw_gothic_12_grey_bg_white 0 +#define urw_gothic_12_white_bg_grey 1 +#define urw_gothic_13_grey_bg_white 2 +#define urw_gothic_13_white_bg_grey 3 #endif // EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index 04137c4c0e9..d523bd172b9 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -16,7 +16,6 @@ * ******************************************************************************/ - /* **** Includes **** */ #include @@ -31,18 +30,21 @@ #include "cfs_logo.h" #include "end_game_text.h" - /* **** Definitions **** */ // Focus on top left corner of the top left block in the grid to help with visualize calculating the coordinates. -#define BLOCK_X_POSITION(col) (GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (col))) -#define BLOCK_Y_POSITION(row) (GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (row))) +#define BLOCK_X_POSITION(col) \ + (GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (col))) +#define BLOCK_Y_POSITION(row) \ + (GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (row))) // Math is to center the digits printed to the newly created block. -#define DIGIT_CENTER_X_POSITION(x, value) (x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2)) -#define DIGIT_CENTER_Y_POSITION(y, value) (y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2)) +#define DIGIT_CENTER_X_POSITION(x, value) \ + (x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2)) +#define DIGIT_CENTER_Y_POSITION(y, value) \ + (y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2)) // Test out delays so that it's not too slow and not too fast for human eye. -#define COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS (15) +#define COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS (15) /* **** Globals **** */ @@ -69,7 +71,8 @@ int Graphics_Init(void) MXC_TFT_DrawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, F_BACKGROUND_COLOR); // Draw CFS Logo. - MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, cfs_logo); + MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, + cfs_logo); // Draw Game Logo. // Forgive me for all the math who ever tries to read through the code. @@ -82,32 +85,65 @@ int Graphics_Init(void) int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_2048_DIGIT_PX_HEIGHT / 2); // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_BACKGROUND_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, + F_BACKGROUND_COLOR); // Draw digits. // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, + block_2048, RGB565_BLACK, RGB565_BLOCK_2048); // Draw move counter. - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_TEXT_OFFSET_X, MOVES_TEXT_OFFSET_Y, GAME_TEXT_MOVES_WIDTH, GAME_TEXT_MOVES_HEIGHT, game_text_moves, RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_TEXT_OFFSET_X, MOVES_TEXT_OFFSET_Y, GAME_TEXT_MOVES_WIDTH, + GAME_TEXT_MOVES_HEIGHT, game_text_moves, RGB565_BLACK, + RGB565_WHITE); // Draw timer. - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_COLON_OFFSET_X, TIME_OFFSET_Y, GAME_TEXT_DIGIT_COLON_WIDTH, GAME_TEXT_DIGITS_HEIGHT, game_text_colon, RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_COLON_OFFSET_X, TIME_OFFSET_Y, GAME_TEXT_DIGIT_COLON_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, game_text_colon, RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); // Draw grid. - MXC_TFT_DrawRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, GRID_LENGTH, F_GRID_COLOR); + MXC_TFT_DrawRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, + GRID_LENGTH, F_GRID_COLOR); for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row), GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col), BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + + ((BLOCK_LENGTH + BLOCK_SPACING) * row), + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + + ((BLOCK_LENGTH + BLOCK_SPACING) * col), + BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, + RADIUS_FOR_CORNERS, F_GRID_COLOR); } } @@ -122,11 +158,17 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4) // The math calculates where each block needs to be drawn as its animated to grow from small to big. // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - int x = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_X + GRID_SPACING + + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_Y + GRID_SPACING + + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); // Increase the block size by 10 pixels - MXC_TFT_DrawRoundedRect(x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); + MXC_TFT_DrawRoundedRect( + x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), + ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), + FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, + ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); // Don't delay when empty space is fully filled. if (frame_i < 5) { @@ -136,17 +178,21 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4) } // Calculate the starting coordinate to write the digit at the center of the tile. - int x = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(block_2_4) / 2) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(block_2_4) / 2) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(block_2_4) / 2) + GRID_OFFSET_X + + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(block_2_4) / 2) + GRID_OFFSET_Y + + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); // Draw a 2 or 4 digit. // Blocks 2 and 4 are lighter color, so white text won't fit. Use black text instead (Inverted). if (block_2_4 == 2) { // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_2_DIGIT_PX_WIDTH, BLOCK_2_DIGIT_PX_HEIGHT, block_2, RGB565_BLACK, RGB565_BLOCK_2); + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_2_DIGIT_PX_WIDTH, BLOCK_2_DIGIT_PX_HEIGHT, + block_2, RGB565_BLACK, RGB565_BLOCK_2); } else { // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_4_DIGIT_PX_WIDTH, BLOCK_4_DIGIT_PX_HEIGHT, block_4, RGB565_BLACK, RGB565_BLOCK_4); + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_4_DIGIT_PX_WIDTH, BLOCK_4_DIGIT_PX_HEIGHT, + block_4, RGB565_BLACK, RGB565_BLOCK_4); } } @@ -161,107 +207,142 @@ inline void Graphics_AddBlock(int row, int col, int value) int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2); switch (value) { - case 2: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_2, RGB565_BLACK, RGB565_BLOCK_2); - break; - - case 4: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_4), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_4, RGB565_BLACK, RGB565_BLOCK_4); - break; - - case 8: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_8), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_8, RGB565_BLACK, RGB565_BLOCK_8); - break; - - case 16: - // Draw text. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_16), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_16, RGB565_BLACK, RGB565_BLOCK_16); - break; - - case 32: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_32), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_32, RGB565_BLACK, RGB565_BLOCK_32); - break; - - case 64: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_64), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_64, RGB565_BLACK, RGB565_BLOCK_64); - break; - - case 128: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_128), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_128, RGB565_BLACK, RGB565_BLOCK_128); - break; - - case 256: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_256, RGB565_BLACK, RGB565_BLOCK_256); - break; - - case 512: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_512, RGB565_BLACK, RGB565_BLOCK_512); - break; - - case 1024: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_1024, RGB565_BLACK, RGB565_BLOCK_1024); - break; - - case 2048: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_2048, RGB565_BLACK, RGB565_BLOCK_2048); - break; - - default: - break; + case 2: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), + BLOCK_DIGIT_PX_HEIGHT(value), block_2, RGB565_BLACK, + RGB565_BLOCK_2); + break; + + case 4: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_4), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), + BLOCK_DIGIT_PX_HEIGHT(value), block_4, RGB565_BLACK, + RGB565_BLOCK_4); + break; + + case 8: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_8), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_8, RGB565_BLACK, RGB565_BLOCK_8); + break; + + case 16: + // Draw text. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_16), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_16, RGB565_BLACK, RGB565_BLOCK_16); + break; + + case 32: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_32), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_32, RGB565_BLACK, RGB565_BLOCK_32); + break; + + case 64: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_64), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_64, RGB565_BLACK, RGB565_BLOCK_64); + break; + + case 128: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_128), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_128, RGB565_BLACK, RGB565_BLOCK_128); + break; + + case 256: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_256, RGB565_BLACK, RGB565_BLOCK_256); + break; + + case 512: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_512, RGB565_BLACK, RGB565_BLOCK_512); + break; + + case 1024: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_1024, RGB565_BLACK, RGB565_BLOCK_1024); + break; + + case 2048: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + break; + + default: + break; } } @@ -270,12 +351,15 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) int x = BLOCK_X_POSITION(col); int y = BLOCK_Y_POSITION(row); - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), + RADIUS_FOR_CORNERS, F_GRID_COLOR); // Animate the blow up. // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. for (int i = 0; i < BLOCK_SPACING + 1; i++) { - MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2*i), BLOCK_LENGTH + (2*i), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2 * i), BLOCK_LENGTH + (2 * i), + FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, + F_GRID_COLOR); // Delay for animation. MXC_Delay(MXC_DELAY_MSEC(6)); @@ -284,16 +368,29 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) // Animate the shrink down. for (int i = 0; i < BLOCK_SPACING; i++) { // Redraw block to remove corners. - MXC_TFT_DrawRoundedRect(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, + F_GRID_COLOR); // Remove outer borders again. - MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Top line. + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Top line. - MXC_TFT_DrawVerticalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Left line. + MXC_TFT_DrawVerticalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Left line. - MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + 1 + i, BLOCK_LENGTH + y + BLOCK_SPACING - 1 - i, BLOCK_LENGTH + ((BLOCK_SPACING - 1 - i)*2), F_GRID_COLOR); // Bottom line. + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + 1 + i, + BLOCK_LENGTH + y + BLOCK_SPACING - 1 - i, + BLOCK_LENGTH + ((BLOCK_SPACING - 1 - i) * 2), + F_GRID_COLOR); // Bottom line. - MXC_TFT_DrawVerticalLine(BLOCK_LENGTH + x + BLOCK_SPACING - 1 - i, y - BLOCK_SPACING + i, BLOCK_LENGTH - 1 + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Right line. + MXC_TFT_DrawVerticalLine(BLOCK_LENGTH + x + BLOCK_SPACING - 1 - i, y - BLOCK_SPACING + i, + BLOCK_LENGTH - 1 + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Right line. // Delay for animation. MXC_Delay(MXC_DELAY_MSEC(6)); @@ -310,7 +407,9 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) // @param current_length Length of block at current frame. // @param f_color Formatted color code of outer border. // @param radius Radius ofrounded cornewrs and width of block. -static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) +static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, + uint32_t current_length, uint32_t f_color, + uint32_t radius) { // Draw top horizontal lines. for (int p_y = 0; p_y < radius; p_y++) { @@ -327,7 +426,8 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u dx--; } - MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, current_length - (2 * (radius - dx)), f_color); + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, + current_length - (2 * (radius - dx)), f_color); } // Draw bottom horizontal lines. @@ -345,7 +445,8 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u dx--; } - MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, current_length - (2 * (radius - dx)), f_color); + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, + current_length - (2 * (radius - dx)), f_color); } // Draw left vertical lines. @@ -363,7 +464,8 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u dy--; } - MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, current_length - (2 * (radius - dy)), f_color); + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, + current_length - (2 * (radius - dy)), f_color); } // Draw right vertical lines. @@ -381,7 +483,8 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u dy--; } - MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, current_length - (2 * (radius - dy)), f_color); + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, + current_length - (2 * (radius - dy)), f_color); } } @@ -392,13 +495,18 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u // @param current_length Length of block at current frame. // @param f_color Formatted color code of outer border. // @param radius Radius ofrounded cornewrs and width of block. -static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) +static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, + uint32_t current_length, uint32_t f_color, uint32_t radius) { for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { // Calculate distance from the corner. - int dx = (p_x < radius) ? radius - p_x : (p_x >= current_length - radius) ? p_x - (current_length - radius - 1) : 0; - int dy = (p_y < radius) ? radius - p_y : (p_y >= current_length - radius) ? p_y - (current_length - radius - 1) : 0; + int dx = (p_x < radius) ? radius - p_x : + (p_x >= current_length - radius) ? p_x - (current_length - radius - 1) : + 0; + int dy = (p_y < radius) ? radius - p_y : + (p_y >= current_length - radius) ? p_y - (current_length - radius - 1) : + 0; // Use pythagorean theorem to map coordinates, square not necessary when comparing with r. if (((dx * dx) + (dy * dy)) > (radius * radius)) { @@ -437,9 +545,13 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) if (frame_i == 0) { // Draw entire block for first frame. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), + RADIUS_FOR_CORNERS, F_GRID_COLOR); } else { - graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS); + graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), + FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), + RADIUS_FOR_CORNERS); } } } @@ -468,14 +580,23 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) uint32_t y = BLOCK_Y_POSITION(row); // Erase outer edges. - MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - MXC_TFT_DrawVerticalLine(x - (frame_i + 1), y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - - MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - MXC_TFT_DrawVerticalLine(x + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y - (frame_i + 1), + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine(x - (frame_i + 1), y - (frame_i + 1), + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), + y + BLOCK_LENGTH + (2 * (frame_i + 1)) - + (frame_i + 1) - 1, + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine( + x + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, + y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); // Erase corners. - graphics_helper_eraseCorners(x - frame_i, y - frame_i, frame_i, BLOCK_LENGTH + (2 * (frame_i)), F_GRID_COLOR, RADIUS_FOR_CORNERS); + graphics_helper_eraseCorners(x - frame_i, y - frame_i, frame_i, + BLOCK_LENGTH + (2 * (frame_i)), F_GRID_COLOR, + RADIUS_FOR_CORNERS); // Draw digit in last frame. if ((frame_i) == 0) { @@ -484,9 +605,20 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) // Blocks 2 and 4 are the only ones with inverted digit colors because of their block color. // However, Block 2 will nevber be a combined block. if (grid[row][col] == 4) { - MXC_TFT_DrawBitmapInvertedMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), DIGIT_CENTER_Y_POSITION(y, grid[row][col]), BLOCK_DIGIT_PX_WIDTH(grid[row][col]), BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, RGB_BLOCK_COLOR(grid[row][col])); + MXC_TFT_DrawBitmapInvertedMask( + DIGIT_CENTER_X_POSITION(x, grid[row][col]), + DIGIT_CENTER_Y_POSITION(y, grid[row][col]), + BLOCK_DIGIT_PX_WIDTH(grid[row][col]), + BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), + BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, + RGB_BLOCK_COLOR(grid[row][col])); } else { - MXC_TFT_DrawBitmapMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), DIGIT_CENTER_Y_POSITION(y, grid[row][col]), BLOCK_DIGIT_PX_WIDTH(grid[row][col]), BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, RGB_BLOCK_COLOR(grid[row][col])); + MXC_TFT_DrawBitmapMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), + DIGIT_CENTER_Y_POSITION(y, grid[row][col]), + BLOCK_DIGIT_PX_WIDTH(grid[row][col]), + BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), + BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, + RGB_BLOCK_COLOR(grid[row][col])); } } } @@ -504,183 +636,221 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_direction_t direction) { switch (direction) { - case GRAPHICS_SLIDE_DIR_UP: - // Start from bottom row to top row (column order doesn't matter). - // This for-loop keeps track of the localized y position of where the horizontal line is drawn. - // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { - // These two for-loops iterate through each block in the - // grid (bottom row to top row, columns direction - don't care) and - // erases a horizontal line (1-pixel wide) - for (int row = 3; row >= 0; row--) { - for (int col = 0; col < 4; col++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting x position using pythagorean theorem. - int dx = 0; - int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - - while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { - dx++; - } - - // No negative horizontal distance. - if (dx > 0) { - dx--; - } - - MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + case GRAPHICS_SLIDE_DIR_UP: + // Start from bottom row to top row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { + // These two for-loops iterate through each block in the + // grid (bottom row to top row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 3; row >= 0; row--) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_y : + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + + while ((dx * dx) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, + BLOCK_LENGTH - + (2 * (RADIUS_FOR_CORNERS - dx)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, + F_EMPTY_BLOCK_COLOR); } } } } - break; - - case GRAPHICS_SLIDE_DIR_DOWN: - // Start from top row to bottom row (column order doesn't matter). - // This for-loop keeps track of the localized y position of where the horizontal line is drawn. - // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { - // These two for-loops iterate through each block in the - // grid (top row to bottom row, columns direction - don't care) and - // erases a horizontal line (1-pixel wide) - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting x position using pythagorean theorem. - int dx = 0; - int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - - while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { - dx++; - } - - // No negative horizontal distance. - if (dx > 0) { - dx--; - } - - MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + break; + + case GRAPHICS_SLIDE_DIR_DOWN: + // Start from top row to bottom row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { + // These two for-loops iterate through each block in the + // grid (top row to bottom row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_y : + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + + while ((dx * dx) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, + BLOCK_LENGTH - + (2 * (RADIUS_FOR_CORNERS - dx)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, + F_EMPTY_BLOCK_COLOR); } } } } - break; - - case GRAPHICS_SLIDE_DIR_LEFT: - // Start from right column to left column (row order doesn't matter). - // This for-loop keeps track of the localized x position of where the vertical line is drawn. - // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { - // These two for-loops iterate through each block in the - // grid (right column to left column, rows direction - don't care) and - // erases a vertical line (1-pixel wide) - for (int col = 3; col >= 0; col--) { - for (int row = 0; row < 4; row++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem. - int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - int dy = 0; - - while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { - dy++; - } - - // No negative vertical distance. - if (dy > 0) { - dy--; - } - - MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + break; + + case GRAPHICS_SLIDE_DIR_LEFT: + // Start from right column to left column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 3; col >= 0; col--) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_x : + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + int dy = 0; + + while ((dy * dy) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, + BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } } - break; - - case GRAPHICS_SLIDE_DIR_RIGHT: - // Start from left column to right column (row order doesn't matter). - // This for-loop keeps track of the localized x position of where the vertical line is drawn. - // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { - // These two for-loops iterate through each block in the - // grid (right column to left column, rows direction - don't care) and - // erases a vertical line (1-pixel wide) - for (int col = 0; col < 4; col++) { - for (int row = 0; row < 4; row++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem. - int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - int dy = 0; - - while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { - dy++; - } - - // No negative vertical distance. - if (dy > 0) { - dy--; - } - - MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + break; + + case GRAPHICS_SLIDE_DIR_RIGHT: + // Start from left column to right column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 0; col < 4; col++) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_x : + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + int dy = 0; + + while ((dy * dy) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, + BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } } + } - break; + break; - default: - return; + default: + return; } } -void Graphics_EraseSingleBlock(int row, int col) { +void Graphics_EraseSingleBlock(int row, int col) +{ // Forgive me for all the math who ever tries to read through the code. // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, + RADIUS_FOR_CORNERS, F_GRID_COLOR); } void Graphics_SetTime(uint32_t total_seconds) @@ -703,28 +873,44 @@ void Graphics_SetTime(uint32_t total_seconds) } // Update timer on display. - MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), + RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. if (prev_timer_digit1 != digit1) { - MXC_TFT_DrawRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), + RGB565_BLACK, RGB565_WHITE); prev_timer_digit1 = digit1; } // Changes every 60 seconds. if (prev_timer_digit2 != digit2) { - MXC_TFT_DrawRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), + RGB565_BLACK, RGB565_WHITE); prev_timer_digit2 = digit2; } // Changes every 600 seoncds. if (prev_timer_digit3 != digit3) { - MXC_TFT_DrawRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), + RGB565_BLACK, RGB565_WHITE); prev_timer_digit3 = digit3; } } @@ -748,38 +934,56 @@ void Graphics_UpdateMovesCount(uint32_t moves_count) } // Update timer on display. - MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), + RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. if (prev_moves_digit1 != digit1) { - MXC_TFT_DrawRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), + RGB565_BLACK, RGB565_WHITE); prev_moves_digit1 = digit1; } // Changes every 60 seconds. if (prev_moves_digit2 != digit2) { - MXC_TFT_DrawRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), + RGB565_BLACK, RGB565_WHITE); prev_moves_digit2 = digit2; } // Changes every 600 seoncds. if (prev_moves_digit3 != digit3) { - MXC_TFT_DrawRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), + RGB565_BLACK, RGB565_WHITE); prev_moves_digit3 = digit3; } } void Graphics_DisplayGameOver(void) { - MXC_TFT_DrawBitmap(GAME_OVER_BOX_OFFSET_X, GAME_OVER_BOX_OFFSET_Y, GAME_OVER_BOX_WIDTH, GAME_OVER_BOX_HEIGHT, game_over); + MXC_TFT_DrawBitmap(GAME_OVER_BOX_OFFSET_X, GAME_OVER_BOX_OFFSET_Y, GAME_OVER_BOX_WIDTH, + GAME_OVER_BOX_HEIGHT, game_over); } void Graphics_DisplayYouWin(void) { - MXC_TFT_DrawBitmap(YOU_WIN_BOX_OFFSET_X, YOU_WIN_BOX_OFFSET_Y, YOU_WIN_BOX_WIDTH, YOU_WIN_BOX_HEIGHT, you_win); + MXC_TFT_DrawBitmap(YOU_WIN_BOX_OFFSET_X, YOU_WIN_BOX_OFFSET_Y, YOU_WIN_BOX_WIDTH, + YOU_WIN_BOX_HEIGHT, you_win); } diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h index 251f1a82573..45222b36eb4 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -42,12 +42,7 @@ typedef enum { * combined at new grid. * IMPORTANT: Sync these commands with the ARM core. */ -typedef enum { - EMPTY = 0, - ERASE = 1, - COMBINE = 2, - UNMOVED = 3 -} block_state_t; +typedef enum { EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; /** * These enums help track the state of the end game.. diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h index 5127400c7aa..3c8894d5e27 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h @@ -49,12 +49,13 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. -#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) -#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX \ + (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) #endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 703e2b7ca5b..b283dc951cf 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -56,7 +56,7 @@ // UART speed up is set at the beginning of BOTH ARM and RISC-V main code // because SystemInit for both cores default the UART baud rate to // 115200. -#define CONTROLLER_UART_BAUD (115200) +#define CONTROLLER_UART_BAUD (115200) /* **** Globals **** */ // Defined in sema_reva.c @@ -72,8 +72,8 @@ uint8_t CONTROLLER_KEYPRESS; volatile bool KEYPRESS_READY = false; uint8_t KEYPRESS_INPUT_DIR; -uint32_t RISCV_GRID_COPY[4][4] = {0}; -uint8_t RISCV_GRID_COPY_STATE[4][4] = {0}; +uint32_t RISCV_GRID_COPY[4][4] = { 0 }; +uint8_t RISCV_GRID_COPY_STATE[4][4] = { 0 }; uint32_t MOVES_COUNT = 0; @@ -108,35 +108,36 @@ void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) // User can add additional directional key switches here. switch (CONTROLLER_KEYPRESS) { - case 'a': - KEYPRESS_INPUT_DIR = INPUT_LEFT; - KEYPRESS_READY = true; - break; - - case 'd': - KEYPRESS_INPUT_DIR = INPUT_RIGHT; - KEYPRESS_READY = true; - break; - - case 'w': - KEYPRESS_INPUT_DIR = INPUT_UP; - KEYPRESS_READY = true; - break; - - case 's': - KEYPRESS_INPUT_DIR = INPUT_DOWN; - KEYPRESS_READY = true; - break; - - default: - KEYPRESS_READY = false; - error = Controller_Start(&CONTROLLER_REQ); - if (error != E_NO_ERROR) { - PRINT("RISC-V: Invalid Keypress: %c\n", CONTROLLER_KEYPRESS); - } + case 'a': + KEYPRESS_INPUT_DIR = INPUT_LEFT; + KEYPRESS_READY = true; + break; + + case 'd': + KEYPRESS_INPUT_DIR = INPUT_RIGHT; + KEYPRESS_READY = true; + break; + + case 'w': + KEYPRESS_INPUT_DIR = INPUT_UP; + KEYPRESS_READY = true; + break; + + case 's': + KEYPRESS_INPUT_DIR = INPUT_DOWN; + KEYPRESS_READY = true; + break; + + default: + KEYPRESS_READY = false; + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Invalid Keypress: %c\n", CONTROLLER_KEYPRESS); + } } - PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, cb_error); + PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, + cb_error); } // Must grab grid space before calling this function to have the latest @@ -211,11 +212,11 @@ void SendGridToARMCore(void) for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; - i+=4; + i += 4; } } @@ -235,7 +236,8 @@ inline void SendKeypressToARMCore(void) void SendNewBlockIndexToARMCore(uint8_t *new_block_idx, uint8_t did_block_move_or_is_init) { - SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX] = (did_block_move_or_is_init >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX] = (did_block_move_or_is_init >> (8 * 0)) & + 0xFF; SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] = (*new_block_idx >> (8 * 0)) & 0xFF; } @@ -247,9 +249,9 @@ void SendGameStateToARMCore(game_state_t state) void SendMovesCountToARMCore(uint32_t moves_count) { SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] = (moves_count >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+1] = (moves_count >> (8 * 1)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+2] = (moves_count >> (8 * 2)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+3] = (moves_count >> (8 * 3)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 1] = (moves_count >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 2] = (moves_count >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 3] = (moves_count >> (8 * 3)) & 0xFF; } // ***************************************************************************** @@ -296,11 +298,13 @@ int main(void) error = MXC_SEMA_GetSema(SEMA_IDX_RISCV); if (error != E_NO_ERROR) { - PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_RISCV]); LED_On(LED_RED); while (1) {} } else { - PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_RISCV]); } // Initialize mailboxes between ARM and RISCV cores. @@ -340,7 +344,7 @@ int main(void) SendGameStateToARMCore(Game_2048_CheckState()); - // Signal ARM core to + // Signal ARM core to MXC_SEMA_FreeSema(SEMA_IDX_ARM); // Wait for ARM core to finish displaying the starting grid. @@ -355,7 +359,7 @@ int main(void) MXC_SEMA_GetSema(SEMA_IDX_RISCV); input_direction_t dir = KEYPRESS_INPUT_DIR; - + state = Game_2048_UpdateGrid(dir, &new_block_idx_location); if (state == true) { PRINT("RISC-V: Blocks moved.\n"); diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c index dc5dd747d30..8c4222c5b1d 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c @@ -16,7 +16,6 @@ * ******************************************************************************/ - /* **** Includes **** */ #include @@ -25,7 +24,6 @@ /* **** Definitions **** */ - /* **** Globals **** */ static mxc_uart_regs_t *Controller_UART; @@ -74,5 +72,3 @@ int Controller_Start(mxc_uart_req_t *req) return E_NO_ERROR; } - - diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index 4141092ddae..623eaf292d3 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -35,8 +35,12 @@ #define PRINT(...) #endif -#define COLUMN_SUM(col) ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + MAIN_2048_GRID[3][col])) -#define ROW_SUM(row) ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + MAIN_2048_GRID[row][3])) +#define COLUMN_SUM(col) \ + ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + \ + MAIN_2048_GRID[3][col])) +#define ROW_SUM(row) \ + ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + \ + MAIN_2048_GRID[row][3])) /* **** Globals **** */ @@ -87,7 +91,7 @@ static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) // Add more weight to 2. if (MXC_TRNG_RandomInt() % 3) { // 1 or 2 block_2_or_4 = 2; - } else { // 0 + } else { // 0 block_2_or_4 = 4; } } @@ -106,7 +110,7 @@ static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) // ---|---|---|--- ------|-------|-------|------ // c | d | e | f (3,0) | (3,1) | (3,2) | (3,3) for (int i = 0; i < 16; i++) { - if (MAIN_2048_GRID[i/4][i%4] == 0) { + if (MAIN_2048_GRID[i / 4][i % 4] == 0) { available_open_spaces += 1; } } @@ -186,8 +190,8 @@ inline static bool row_logic_left(void) continue; } - uint32_t prev_row[4] = {0}; - uint32_t temp_row[4] = {0}; + uint32_t prev_row[4] = { 0 }; + uint32_t temp_row[4] = { 0 }; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. // Get all valid blocks in column to help with same-value pair logic. @@ -290,8 +294,8 @@ inline static bool row_logic_right(void) continue; } - uint32_t prev_row[4] = {0}; - uint32_t temp_row[4] = {0}; + uint32_t prev_row[4] = { 0 }; + uint32_t temp_row[4] = { 0 }; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. // Get all valid blocks to help with same-value pair logic. @@ -395,8 +399,8 @@ inline static bool column_logic_up(void) continue; } - uint32_t prev_col[4] = {0}; - uint32_t temp_column[4] = {0}; + uint32_t prev_col[4] = { 0 }; + uint32_t temp_column[4] = { 0 }; int temp_row_num = 0; // Also tracks how many valid blocks there are. // Get all valid blocks to help with same-value pair logic. @@ -498,8 +502,8 @@ static bool column_logic_down(void) continue; } - uint32_t prev_col[4] = {0}; - uint32_t temp_column[4] = {0}; + uint32_t prev_col[4] = { 0 }; + uint32_t temp_column[4] = { 0 }; int temp_row_num = 0; // Also tracks how many valid blocks there are in column. // Get all valid blocks to help with same-value pair logic. @@ -613,7 +617,7 @@ game_state_t Game_2048_CheckState(void) // Check if a row has same value pair. for (int r = 0; r < 4; r++) { for (int c = 0; c < 3; c++) { - if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r][c+1]) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r][c + 1]) { return IN_PROGRESS; } } @@ -622,7 +626,7 @@ game_state_t Game_2048_CheckState(void) // Check if a column has a same-value pair. for (int c = 0; c < 4; c++) { for (int r = 0; r < 3; r++) { - if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r+1][c]) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r + 1][c]) { return IN_PROGRESS; } } @@ -647,30 +651,30 @@ bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx } // Run main game logic. - switch(direction) { - case INPUT_UP: - printf("UP\n"); - blocks_moved = column_logic_up(); - break; - - case INPUT_DOWN: - printf("DOWN\n"); - blocks_moved = column_logic_down(); - break; - - case INPUT_LEFT: - printf("LEFT\n"); - blocks_moved = row_logic_left(); - break; - - case INPUT_RIGHT: - printf("RIGHT\n"); - blocks_moved = row_logic_right(); - break; - - // Should never reach here. - default: - return false; + switch (direction) { + case INPUT_UP: + printf("UP\n"); + blocks_moved = column_logic_up(); + break; + + case INPUT_DOWN: + printf("DOWN\n"); + blocks_moved = column_logic_down(); + break; + + case INPUT_LEFT: + printf("LEFT\n"); + blocks_moved = row_logic_left(); + break; + + case INPUT_RIGHT: + printf("RIGHT\n"); + blocks_moved = row_logic_right(); + break; + + // Should never reach here. + default: + return false; } // Once the main game logic is done, insert a new block. diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.c b/Libraries/MiscDrivers/Display/tft_ssd2119.c index b5ffab47f75..6011d06d210 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.c +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.c @@ -1261,11 +1261,12 @@ void MXC_TFT_DrawBitmap(int px_x, int px_y, int width, int height, uint16_t *ima displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { // g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); - g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | (uint32_t)((image[i] & 0xFF00) << 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | + (uint32_t)((image[i] & 0xFF00) << 8)); spi_transmit((uint16_t *)g_fifo, 2); i += 1; } @@ -1301,10 +1302,11 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { - g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | (uint32_t)((~image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | + (uint32_t)((~image[i] & 0xFF00) >> 8)); spi_transmit((uint16_t *)g_fifo, 2); i += 1; } @@ -1313,7 +1315,8 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 __enable_irq(); } -void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask) +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask) { area_t _area; area_t *area; @@ -1340,13 +1343,15 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (image[i] == original_color) { - g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | (uint32_t)((mask & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | + (uint32_t)((mask & 0xFF00) >> 8)); } else { - g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | + (uint32_t)((image[i] & 0xFF00) >> 8)); } spi_transmit((uint16_t *)g_fifo, 2); i += 1; @@ -1356,7 +1361,8 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t __enable_irq(); } -void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask) +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask) { area_t _area; area_t *area; @@ -1383,13 +1389,15 @@ void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, u displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (image[i] == original_color) { - g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | (uint32_t)((mask & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | + (uint32_t)((mask & 0xFF00) >> 8)); } else { - g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | (uint32_t)((~image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | + (uint32_t)((~image[i] & 0xFF00) >> 8)); } spi_transmit((uint16_t *)g_fifo, 2); i += 1; @@ -1596,7 +1604,8 @@ void MXC_TFT_PrintPalette(void) } } -void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, int radius, uint32_t background_color) +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, + int radius, uint32_t background_color) { area_t _area; area_t *area; diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.h b/Libraries/MiscDrivers/Display/tft_ssd2119.h index aeed7ce1138..e947fe869b0 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.h +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.h @@ -113,7 +113,6 @@ void MXC_TFT_ClearScreen(void); */ void MXC_TFT_FillRect(area_t *area, int color); - /** * @brief Draws an image that's already been formatted for the * 9-bit SPI transactions. @@ -167,7 +166,8 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 * @param original_color 16-bit RGB565 color code to be replaced on bitmap. * @param mask New 16-bit RGB565 color code that replaces the original color. */ -void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask); +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask); /** * @brief Draws an inverted color, raw bitmap (RGB565 16-bit color codes) to display with a single RGB565 color replaced @@ -184,7 +184,8 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t * @param original_color 16-bit RGB565 color code to be replaced on bitmap. * @param mask New 16-bit RGB565 color code that replaces the original color. */ -void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask); +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask); /** * @brief Draws a single-pixel height, horizontal line. @@ -228,7 +229,6 @@ void MXC_TFT_DrawRect(int pixelX, int pixelY, int width, int height, uint32_t co */ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t color); - /** * @brief Draws a rectangle with rounded corners. * @@ -240,7 +240,8 @@ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t * @param radius Radius of corners (how much you want rounded off). * @param background_color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). */ -void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, int radius, uint32_t background_color); +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, + int radius, uint32_t background_color); /** * @brief Draw a bitmap diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/main.c b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/main.c index 10e6fe88a4a..1a2049ee595 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/main.c +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/main.c @@ -43,38 +43,41 @@ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTYPES //--------------------------------------------------------------------+ -#define AUDIO_SAMPLE_RATE CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE +#define AUDIO_SAMPLE_RATE CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE /* Blink pattern * - 250 ms : device not mounted * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 -uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 uint32_t sampFreq; uint8_t clkValid; // Range states -audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state -audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state +audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // Volume range state +audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state #if CFG_TUD_AUDIO_ENABLE_ENCODING // Audio test data, each buffer contains 2 channels, buffer[0] for CH0-1, buffer[1] for CH1-2 -uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX*CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE/1000/CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; +uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO] + [CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX * CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE / + 1000 / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; #else // Audio test data, 4 channels muxed together, buffer[0] for CH0, buffer[1] for CH1, buffer[2] for CH2, buffer[3] for CH3 -uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX*CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE/1000]; +uint16_t + i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX * CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE / 1000]; #endif void led_blinking_task(void); @@ -83,69 +86,65 @@ void audio_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - // Init values - sampFreq = AUDIO_SAMPLE_RATE; - clkValid = 1; + // Init values + sampFreq = AUDIO_SAMPLE_RATE; + clkValid = 1; - sampleFreqRng.wNumSubRanges = 1; - sampleFreqRng.subrange[0].bMin = AUDIO_SAMPLE_RATE; - sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE; - sampleFreqRng.subrange[0].bRes = 0; + sampleFreqRng.wNumSubRanges = 1; + sampleFreqRng.subrange[0].bMin = AUDIO_SAMPLE_RATE; + sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE; + sampleFreqRng.subrange[0].bRes = 0; - // Generate dummy data + // Generate dummy data #if CFG_TUD_AUDIO_ENABLE_ENCODING - uint16_t * p_buff = i2s_dummy_buffer[0]; - uint16_t dataVal = 0; - for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++) - { - // CH0 saw wave - *p_buff++ = dataVal; - // CH1 inverted saw wave - *p_buff++ = 3200 + AUDIO_SAMPLE_RATE/1000 - dataVal; - dataVal+= 32; - } - p_buff = i2s_dummy_buffer[1]; - for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++) - { - // CH3 square wave - *p_buff++ = cnt < (AUDIO_SAMPLE_RATE/1000/2) ? 3400:5000; - // CH4 sinus wave - float t = 2*3.1415f * cnt / (AUDIO_SAMPLE_RATE/1000); - *p_buff++ = (uint16_t)((int16_t)(sinf(t) * 750) + 6000); - } + uint16_t *p_buff = i2s_dummy_buffer[0]; + uint16_t dataVal = 0; + for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE / 1000; cnt++) { + // CH0 saw wave + *p_buff++ = dataVal; + // CH1 inverted saw wave + *p_buff++ = 3200 + AUDIO_SAMPLE_RATE / 1000 - dataVal; + dataVal += 32; + } + p_buff = i2s_dummy_buffer[1]; + for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE / 1000; cnt++) { + // CH3 square wave + *p_buff++ = cnt < (AUDIO_SAMPLE_RATE / 1000 / 2) ? 3400 : 5000; + // CH4 sinus wave + float t = 2 * 3.1415f * cnt / (AUDIO_SAMPLE_RATE / 1000); + *p_buff++ = (uint16_t)((int16_t)(sinf(t) * 750) + 6000); + } #else - uint16_t * p_buff = i2s_dummy_buffer; - uint16_t dataVal = 0; - for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++) - { - // CH0 saw wave - *p_buff++ = dataVal; - // CH1 inverted saw wave - *p_buff++ = 3200 + AUDIO_SAMPLE_RATE/1000 - dataVal; - dataVal+= 32; - // CH3 square wave - *p_buff++ = cnt < (AUDIO_SAMPLE_RATE/1000/2) ? 3400:5000; - // CH4 sinus wave - float t = 2*3.1415f * cnt / (AUDIO_SAMPLE_RATE/1000); - *p_buff++ = (uint16_t)((int16_t)(sinf(t) * 750) + 6000); - } + uint16_t *p_buff = i2s_dummy_buffer; + uint16_t dataVal = 0; + for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE / 1000; cnt++) { + // CH0 saw wave + *p_buff++ = dataVal; + // CH1 inverted saw wave + *p_buff++ = 3200 + AUDIO_SAMPLE_RATE / 1000 - dataVal; + dataVal += 32; + // CH3 square wave + *p_buff++ = cnt < (AUDIO_SAMPLE_RATE / 1000 / 2) ? 3400 : 5000; + // CH4 sinus wave + float t = 2 * 3.1415f * cnt / (AUDIO_SAMPLE_RATE / 1000); + *p_buff++ = (uint16_t)((int16_t)(sinf(t) * 750) + 6000); + } #endif - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - audio_task(); - } + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + audio_task(); + } } //--------------------------------------------------------------------+ @@ -155,13 +154,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -169,14 +168,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -185,20 +184,25 @@ void tud_resume_cb(void) void audio_task(void) { - // Yet to be filled - e.g. read audio from I2S buffer. - // Here we simulate a I2S receive callback every 1ms. - static uint32_t start_ms = 0; - uint32_t curr_ms = board_millis(); - if ( start_ms == curr_ms ) return; // not enough time - start_ms = curr_ms; + // Yet to be filled - e.g. read audio from I2S buffer. + // Here we simulate a I2S receive callback every 1ms. + static uint32_t start_ms = 0; + uint32_t curr_ms = board_millis(); + if (start_ms == curr_ms) + return; // not enough time + start_ms = curr_ms; #if CFG_TUD_AUDIO_ENABLE_ENCODING - // Write I2S buffer into FIFO - for (uint8_t cnt=0; cnt < 2; cnt++) - { - tud_audio_write_support_ff(cnt, i2s_dummy_buffer[cnt], AUDIO_SAMPLE_RATE/1000 * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX); - } + // Write I2S buffer into FIFO + for (uint8_t cnt = 0; cnt < 2; cnt++) { + tud_audio_write_support_ff(cnt, i2s_dummy_buffer[cnt], + AUDIO_SAMPLE_RATE / 1000 * + CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * + CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX); + } #else - tud_audio_write(i2s_dummy_buffer, AUDIO_SAMPLE_RATE/1000 * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX); + tud_audio_write(i2s_dummy_buffer, AUDIO_SAMPLE_RATE / 1000 * + CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX); #endif } @@ -207,285 +211,288 @@ void audio_task(void) //--------------------------------------------------------------------+ // Invoked when audio class specific set request received for an EP -bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; - (void) pBuff; + (void)rhport; + (void)pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; - (void) pBuff; + (void)rhport; + (void)pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void) itf; + (void)itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if ( entityID == 2 ) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if (entityID == 2) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur; + volume[channelNum] = (uint16_t)((audio_control_cur_2_t *)pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } } - } - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - // return tud_control_xfer(rhport, p_request, &tmp, 1); + // return tud_control_xfer(rhport, p_request, &tmp, 1); - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == 1) - { - switch ( ctrlSel ) - { - case AUDIO_TE_CTRL_CONNECTOR: - { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = (audio_channel_config_t) 0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); - } - break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; + (void)rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == 1) { + switch (ctrlSel) { + case AUDIO_TE_CTRL_CONNECTOR: { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = (audio_channel_config_t)0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + } break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; + } } - } - - // Feature unit - if (entityID == 2) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) - ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 90; // +90 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + + // Feature unit + if (entityID == 2) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], + sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 90; // +90 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; + } + + // Clock Source unit + if (entityID == 4) { + switch (ctrlSel) { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + // Buffered control transfer is needed for IN flow control to work + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, + sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Sample Freq. range\r\n"); + return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - } - - // Clock Source unit - if ( entityID == 4 ) - { - switch ( ctrlSel ) - { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - // Buffered control transfer is needed for IN flow control to work - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Sample Freq. range\r\n"); - return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - - // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; } - } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, + uint8_t cur_alt_setting) { - (void) rhport; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; - - - // In read world application data flow is driven by I2S clock, - // both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used. - // For example in your I2S receive callback: - // void I2S_Rx_Callback(int channel, const void* data, uint16_t samples) - // { - // tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO); - // } - - return true; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; + + // In read world application data flow is driven by I2S clock, + // both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used. + // For example in your I2S receive callback: + // void I2S_Rx_Callback(int channel, const void* data, uint16_t samples) + // { + // tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO); + // } + + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, + uint8_t ep_in, uint8_t cur_alt_setting) { - (void) rhport; - (void) n_bytes_copied; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; + (void)rhport; + (void)n_bytes_copied; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - return true; + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - (void) p_request; + (void)rhport; + (void)p_request; - return true; + return true; } //--------------------------------------------------------------------+ @@ -493,13 +500,14 @@ bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h index 46484f847be..dccd82b609f 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,51 +87,63 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 +#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup -#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX \ + 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ + 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup +#define CFG_TUD_AUDIO_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_ENABLE_ENCODING 1 -#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 +#define CFG_TUD_AUDIO_ENABLE_ENCODING 1 +#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 #if CFG_TUD_AUDIO_ENABLE_ENCODING -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1 -#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value -#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX) -#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * (CFG_TUD_AUDIO_EP_SZ_IN / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1 +#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX \ + 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value +#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO \ + (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX) +#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ \ + (TUD_OPT_HIGH_SPEED ? 32 : 4) * \ + (CFG_TUD_AUDIO_EP_SZ_IN / \ + CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device #else -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ + (TUD_OPT_HIGH_SPEED ? 32 : 4) * \ + CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device #endif diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c index 728a5f9cecb..b3b48754258 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c @@ -32,85 +32,83 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) #if TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_AUDIO 0x03 +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) - // nRF5x ISO can only be endpoint 8 - #define EPNUM_AUDIO 0x08 +// nRF5x ISO can only be endpoint 8 +#define EPNUM_AUDIO 0x08 #else - #define EPNUM_AUDIO 0x01 +#define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) + // Interface number, string index, EP Out & EP In address, EP size + TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR( + /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, + /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, + /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * 8, + /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -119,61 +117,64 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const* string_desc_arr [] = { - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode_4_Ch", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode_4_Ch", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h index 869500ad2ad..ccd96107b31 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h @@ -26,7 +26,6 @@ * 1 tab == 4 spaces! */ - #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H @@ -49,142 +48,145 @@ #include "bsp/board_mcu.h" #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 - #error "ESP32-Sx should use IDF's FreeRTOSConfig.h" +#error "ESP32-Sx should use IDF's FreeRTOSConfig.h" #endif // TODO fix later #if CFG_TUSB_MCU == OPT_MCU_MM32F327X - extern u32 SystemCoreClock; +extern u32 SystemCoreClock; #else - // FIXME cause redundant-decls warnings - extern uint32_t SystemCoreClock; +// FIXME cause redundant-decls warnings +extern uint32_t SystemCoreClock; #endif #endif /* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU 0 -#define configENABLE_FPU 1 -#define configENABLE_TRUSTZONE 0 -#define configMINIMAL_SECURE_STACK_SIZE ( 1024 ) -#define configRUN_FREERTOS_SECURE_ONLY 1 +#define configENABLE_MPU 0 +#define configENABLE_FPU 1 +#define configENABLE_TRUSTZONE 0 +#define configMINIMAL_SECURE_STACK_SIZE (1024) +#define configRUN_FREERTOS_SECURE_ONLY 1 -#define configUSE_PREEMPTION 1 +#define configUSE_PREEMPTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ SystemCoreClock -#define configTICK_RATE_HZ ( 1000 ) -#define configMAX_PRIORITIES ( 5 ) -#define configMINIMAL_STACK_SIZE ( 128 ) -#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 ) -#define configMAX_TASK_NAME_LEN 16 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configQUEUE_REGISTRY_SIZE 4 -#define configUSE_QUEUE_SETS 0 -#define configUSE_TIME_SLICING 0 -#define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 - -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configSUPPORT_DYNAMIC_ALLOCATION 0 +#define configCPU_CLOCK_HZ SystemCoreClock +#define configTICK_RATE_HZ (1000) +#define configMAX_PRIORITIES (5) +#define configMINIMAL_STACK_SIZE (128) +#define configTOTAL_HEAP_SIZE (configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024) +#define configMAX_TASK_NAME_LEN 16 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configQUEUE_REGISTRY_SIZE 4 +#define configUSE_QUEUE_SETS 0 +#define configUSE_TIME_SLICING 0 +#define configUSE_NEWLIB_REENTRANT 0 +#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 + +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 0 /* Hook function related definitions. */ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configCHECK_HANDLER_INSTALLATION 0 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configCHECK_HANDLER_INSTALLATION 0 /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS 0 -#define configUSE_TRACE_FACILITY 1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#define configGENERATE_RUN_TIME_STATS 0 +#define configUSE_TRACE_FACILITY 1 // legacy trace +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES 2 +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 /* Software timer related definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2) -#define configTIMER_QUEUE_LENGTH 32 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 2) +#define configTIMER_QUEUE_LENGTH 32 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet 0 -#define INCLUDE_uxTaskPriorityGet 0 -#define INCLUDE_vTaskDelete 0 -#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR 0 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 -#define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 -#define INCLUDE_xTaskGetIdleTaskHandle 0 +#define INCLUDE_vTaskPrioritySet 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskSuspend \ + 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY +#define INCLUDE_xResumeFromISR 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName 0 -#define INCLUDE_eTaskGetState 0 -#define INCLUDE_xEventGroupSetBitFromISR 0 -#define INCLUDE_xTimerPendFunctionCall 0 +#define INCLUDE_pcTaskGetTaskName 0 +#define INCLUDE_eTaskGetState 0 +#define INCLUDE_xEventGroupSetBitFromISR 0 +#define INCLUDE_xTimerPendFunctionCall 0 #ifdef __RX__ /* Renesas RX series */ -#define vSoftwareInterruptISR INT_Excep_ICU_SWINT -#define vTickISR INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2) -#define configKERNEL_INTERRUPT_PRIORITY 1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 +#define vSoftwareInterruptISR INT_Excep_ICU_SWINT +#define vTickISR INT_Excep_CMT0_CMI0 +#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ / 2) +#define configKERNEL_INTERRUPT_PRIORITY 1 +#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 #else /* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler -#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler +#define xPortSysTickHandler SysTick_Handler +#define vPortSVCHandler SVC_Handler //--------------------------------------------------------------------+ // Interrupt nesting behavior configuration. //--------------------------------------------------------------------+ #if defined(__NVIC_PRIO_BITS) - // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h - #define configPRIO_BITS __NVIC_PRIO_BITS +// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h +#define configPRIO_BITS __NVIC_PRIO_BITS #elif defined(__ECLIC_INTCTLBITS) - // RISC-V Bumblebee core from nuclei - #define configPRIO_BITS __ECLIC_INTCTLBITS +// RISC-V Bumblebee core from nuclei +#define configPRIO_BITS __ECLIC_INTCTLBITS #elif defined(__IASMARM__) - // FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. - // Therefore we will hard coded it to minimum value of 2 to get pass ci build. - // IAR user must update this to correct value of the target MCU - #message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" - #define configPRIO_BITS 2 +// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. +// Therefore we will hard coded it to minimum value of 2 to get pass ci build. +// IAR user must update this to correct value of the target MCU +#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" +#define configPRIO_BITS 2 #else - #error "FreeRTOS configPRIO_BITS to be defined" +#error "FreeRTOS configPRIO_BITS to be defined" #endif /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1<bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; - (void) pBuff; + (void)rhport; + (void)pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void) itf; + (void)itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if ( entityID == 2 ) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if (entityID == 2) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = ((audio_control_cur_2_t*) pBuff)->bCur; + volume[channelNum] = ((audio_control_cur_2_t *)pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } } - } - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == 1) - { - switch ( ctrlSel ) - { - case AUDIO_TE_CTRL_CONNECTOR: - { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = 0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); - } - break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; + (void)rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == 1) { + switch (ctrlSel) { + case AUDIO_TE_CTRL_CONNECTOR: { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = 0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + } break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; + } } - } - - // Feature unit - if (entityID == 2) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) - ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 90; // +90 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + + // Feature unit + if (entityID == 2) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], + sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 90; // +90 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; + } + + // Clock Source unit + if (entityID == 4) { + switch (ctrlSel) { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + // Buffered control transfer is needed for IN flow control to work + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, + sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Sample Freq. range\r\n"); + return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - } - - // Clock Source unit - if ( entityID == 4 ) - { - switch ( ctrlSel ) - { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - // Buffered control transfer is needed for IN flow control to work - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Sample Freq. range\r\n"); - return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - - // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; } - } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, + uint8_t cur_alt_setting) { - (void) rhport; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; - - - // In read world application data flow is driven by I2S clock, - // both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used. - // For example in your I2S receive callback: - // void I2S_Rx_Callback(int channel, const void* data, uint16_t samples) - // { - // tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO); - // } - - return true; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; + + // In read world application data flow is driven by I2S clock, + // both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used. + // For example in your I2S receive callback: + // void I2S_Rx_Callback(int channel, const void* data, uint16_t samples) + // { + // tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO); + // } + + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, + uint8_t ep_in, uint8_t cur_alt_setting) { - (void) rhport; - (void) n_bytes_copied; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; + (void)rhport; + (void)n_bytes_copied; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - return true; + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - (void) p_request; + (void)rhport; + (void)p_request; - return true; + return true; } ///--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void* param) { - (void) param; - static uint32_t start_ms = 0; - static bool led_state = false; - - while (1) { - // Blink every interval ms - vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } +void led_blinking_task(void *param) +{ + (void)param; + static uint32_t start_ms = 0; + static bool led_state = false; + + while (1) { + // Blink every interval ms + vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/tusb_config.h index 88f20278b58..09e375bfa2c 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/tusb_config.h @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -55,23 +55,23 @@ extern "C" { // This examples use FreeRTOS #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_FREERTOS +#define CFG_TUSB_OS OPT_OS_FREERTOS #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos/ +#define CFG_TUSB_OS_INC_PATH freertos / #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -85,7 +85,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -93,51 +93,63 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 +#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup -#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX \ + 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ + 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup +#define CFG_TUD_AUDIO_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_ENABLE_ENCODING 1 -#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 +#define CFG_TUD_AUDIO_ENABLE_ENCODING 1 +#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 #if CFG_TUD_AUDIO_ENABLE_ENCODING -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1 -#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value -#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX) -#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * (CFG_TUD_AUDIO_EP_SZ_IN / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1 +#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX \ + 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value +#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO \ + (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX) +#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ \ + (TUD_OPT_HIGH_SPEED ? 32 : 4) * \ + (CFG_TUD_AUDIO_EP_SZ_IN / \ + CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device #else -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ + (TUD_OPT_HIGH_SPEED ? 32 : 4) * \ + CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device #endif diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/usb_descriptors.c index 728a5f9cecb..b3b48754258 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/usb_descriptors.c @@ -32,85 +32,83 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) #if TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_AUDIO 0x03 +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) - // nRF5x ISO can only be endpoint 8 - #define EPNUM_AUDIO 0x08 +// nRF5x ISO can only be endpoint 8 +#define EPNUM_AUDIO 0x08 #else - #define EPNUM_AUDIO 0x01 +#define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) + // Interface number, string index, EP Out & EP In address, EP size + TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR( + /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, + /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, + /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * 8, + /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -119,61 +117,64 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const* string_desc_arr [] = { - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode_4_Ch", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode_4_Ch", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_test/src/main.c b/Libraries/tinyusb/examples/device/audio_test/src/main.c index f79bb44683a..400c1b311df 100644 --- a/Libraries/tinyusb/examples/device/audio_test/src/main.c +++ b/Libraries/tinyusb/examples/device/audio_test/src/main.c @@ -47,24 +47,24 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 -uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 uint32_t sampFreq; uint8_t clkValid; // Range states -audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state -audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state +audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // Volume range state +audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state // Audio test data uint16_t test_buffer_audio[(CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2]; @@ -76,30 +76,29 @@ void audio_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); - - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - // Init values - sampFreq = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; - clkValid = 1; - - sampleFreqRng.wNumSubRanges = 1; - sampleFreqRng.subrange[0].bMin = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; - sampleFreqRng.subrange[0].bMax = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; - sampleFreqRng.subrange[0].bRes = 0; - - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - audio_task(); - } + board_init(); + + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + // Init values + sampFreq = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; + clkValid = 1; + + sampleFreqRng.wNumSubRanges = 1; + sampleFreqRng.subrange[0].bMin = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; + sampleFreqRng.subrange[0].bMax = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; + sampleFreqRng.subrange[0].bRes = 0; + + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + audio_task(); + } } //--------------------------------------------------------------------+ @@ -109,13 +108,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -123,14 +122,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -139,8 +138,8 @@ void tud_resume_cb(void) void audio_task(void) { - // Yet to be filled - e.g. put meas data into TX FIFOs etc. - // asm("nop"); + // Yet to be filled - e.g. put meas data into TX FIFOs etc. + // asm("nop"); } //--------------------------------------------------------------------+ @@ -148,283 +147,285 @@ void audio_task(void) //--------------------------------------------------------------------+ // Invoked when audio class specific set request received for an EP -bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; - (void) pBuff; + (void)rhport; + (void)pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; - (void) pBuff; + (void)rhport; + (void)pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void) itf; + (void)itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if ( entityID == 2 ) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if (entityID == 2) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur; + volume[channelNum] = (uint16_t)((audio_control_cur_2_t *)pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } } - } - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - // return tud_control_xfer(rhport, p_request, &tmp, 1); + // return tud_control_xfer(rhport, p_request, &tmp, 1); - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == 1) - { - switch ( ctrlSel ) - { - case AUDIO_TE_CTRL_CONNECTOR: - { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = (audio_channel_config_t) 0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); - } - break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; + (void)rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == 1) { + switch (ctrlSel) { + case AUDIO_TE_CTRL_CONNECTOR: { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = (audio_channel_config_t)0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + } break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; + } } - } - - // Feature unit - if (entityID == 2) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) - ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 90; // +90 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + + // Feature unit + if (entityID == 2) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], + sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 90; // +90 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; + } + + // Clock Source unit + if (entityID == 4) { + switch (ctrlSel) { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Sample Freq. range\r\n"); + return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - } - - // Clock Source unit - if ( entityID == 4 ) - { - switch ( ctrlSel ) - { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Sample Freq. range\r\n"); - return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - - // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; } - } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, + uint8_t cur_alt_setting) { - (void) rhport; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - tud_audio_write ((uint8_t *)test_buffer_audio, CFG_TUD_AUDIO_EP_SZ_IN - 2); + tud_audio_write((uint8_t *)test_buffer_audio, CFG_TUD_AUDIO_EP_SZ_IN - 2); - return true; + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, + uint8_t ep_in, uint8_t cur_alt_setting) { - (void) rhport; - (void) n_bytes_copied; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; - - for (size_t cnt = 0; cnt < (CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2; cnt++) - { - test_buffer_audio[cnt] = startVal++; - } - - return true; + (void)rhport; + (void)n_bytes_copied; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; + + for (size_t cnt = 0; cnt < (CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2; cnt++) { + test_buffer_audio[cnt] = startVal++; + } + + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - (void) p_request; - startVal = 0; + (void)rhport; + (void)p_request; + startVal = 0; - return true; + return true; } //--------------------------------------------------------------------+ @@ -432,13 +433,14 @@ bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/audio_test/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_test/src/tusb_config.h index 8c021e23caa..e75941f680d 100644 --- a/Libraries/tinyusb/examples/device/audio_test/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_test/src/tusb_config.h @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED // CFG_TUSB_DEBUG is defined by compiler in DEBUG build // #define CFG_TUSB_DEBUG 0 @@ -82,7 +82,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -90,34 +90,42 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 - -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer - -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! -#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 8 : 1) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 + +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT \ + 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer + +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX \ + 2 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ + 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! +#define CFG_TUD_AUDIO_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ + (TUD_OPT_HIGH_SPEED ? 8 : 1) * \ + CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/audio_test/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_test/src/usb_descriptors.c index 9864377f608..50afd3bf5da 100644 --- a/Libraries/tinyusb/examples/device/audio_test/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_test/src/usb_descriptors.c @@ -32,85 +32,84 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_AUDIO 0x03 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) - // nRF5x ISO can only be endpoint 8 - #define EPNUM_AUDIO 0x08 +// nRF5x ISO can only be endpoint 8 +#define EPNUM_AUDIO 0x08 #else - #define EPNUM_AUDIO 0x01 +#define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = -{ +uint8_t const desc_configuration[] = { // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) + TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR( + /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, + /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, + /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * 8, + /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -119,20 +118,19 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const* string_desc_arr [] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; @@ -140,42 +138,45 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_test_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h b/Libraries/tinyusb/examples/device/audio_test_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h index 869500ad2ad..ccd96107b31 100644 --- a/Libraries/tinyusb/examples/device/audio_test_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h +++ b/Libraries/tinyusb/examples/device/audio_test_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h @@ -26,7 +26,6 @@ * 1 tab == 4 spaces! */ - #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H @@ -49,142 +48,145 @@ #include "bsp/board_mcu.h" #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 - #error "ESP32-Sx should use IDF's FreeRTOSConfig.h" +#error "ESP32-Sx should use IDF's FreeRTOSConfig.h" #endif // TODO fix later #if CFG_TUSB_MCU == OPT_MCU_MM32F327X - extern u32 SystemCoreClock; +extern u32 SystemCoreClock; #else - // FIXME cause redundant-decls warnings - extern uint32_t SystemCoreClock; +// FIXME cause redundant-decls warnings +extern uint32_t SystemCoreClock; #endif #endif /* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU 0 -#define configENABLE_FPU 1 -#define configENABLE_TRUSTZONE 0 -#define configMINIMAL_SECURE_STACK_SIZE ( 1024 ) -#define configRUN_FREERTOS_SECURE_ONLY 1 +#define configENABLE_MPU 0 +#define configENABLE_FPU 1 +#define configENABLE_TRUSTZONE 0 +#define configMINIMAL_SECURE_STACK_SIZE (1024) +#define configRUN_FREERTOS_SECURE_ONLY 1 -#define configUSE_PREEMPTION 1 +#define configUSE_PREEMPTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ SystemCoreClock -#define configTICK_RATE_HZ ( 1000 ) -#define configMAX_PRIORITIES ( 5 ) -#define configMINIMAL_STACK_SIZE ( 128 ) -#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 ) -#define configMAX_TASK_NAME_LEN 16 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configQUEUE_REGISTRY_SIZE 4 -#define configUSE_QUEUE_SETS 0 -#define configUSE_TIME_SLICING 0 -#define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 - -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configSUPPORT_DYNAMIC_ALLOCATION 0 +#define configCPU_CLOCK_HZ SystemCoreClock +#define configTICK_RATE_HZ (1000) +#define configMAX_PRIORITIES (5) +#define configMINIMAL_STACK_SIZE (128) +#define configTOTAL_HEAP_SIZE (configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024) +#define configMAX_TASK_NAME_LEN 16 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configQUEUE_REGISTRY_SIZE 4 +#define configUSE_QUEUE_SETS 0 +#define configUSE_TIME_SLICING 0 +#define configUSE_NEWLIB_REENTRANT 0 +#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 + +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 0 /* Hook function related definitions. */ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configCHECK_HANDLER_INSTALLATION 0 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configCHECK_HANDLER_INSTALLATION 0 /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS 0 -#define configUSE_TRACE_FACILITY 1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#define configGENERATE_RUN_TIME_STATS 0 +#define configUSE_TRACE_FACILITY 1 // legacy trace +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES 2 +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 /* Software timer related definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2) -#define configTIMER_QUEUE_LENGTH 32 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 2) +#define configTIMER_QUEUE_LENGTH 32 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet 0 -#define INCLUDE_uxTaskPriorityGet 0 -#define INCLUDE_vTaskDelete 0 -#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR 0 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 -#define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 -#define INCLUDE_xTaskGetIdleTaskHandle 0 +#define INCLUDE_vTaskPrioritySet 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskSuspend \ + 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY +#define INCLUDE_xResumeFromISR 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName 0 -#define INCLUDE_eTaskGetState 0 -#define INCLUDE_xEventGroupSetBitFromISR 0 -#define INCLUDE_xTimerPendFunctionCall 0 +#define INCLUDE_pcTaskGetTaskName 0 +#define INCLUDE_eTaskGetState 0 +#define INCLUDE_xEventGroupSetBitFromISR 0 +#define INCLUDE_xTimerPendFunctionCall 0 #ifdef __RX__ /* Renesas RX series */ -#define vSoftwareInterruptISR INT_Excep_ICU_SWINT -#define vTickISR INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2) -#define configKERNEL_INTERRUPT_PRIORITY 1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 +#define vSoftwareInterruptISR INT_Excep_ICU_SWINT +#define vTickISR INT_Excep_CMT0_CMI0 +#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ / 2) +#define configKERNEL_INTERRUPT_PRIORITY 1 +#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 #else /* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler -#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler +#define xPortSysTickHandler SysTick_Handler +#define vPortSVCHandler SVC_Handler //--------------------------------------------------------------------+ // Interrupt nesting behavior configuration. //--------------------------------------------------------------------+ #if defined(__NVIC_PRIO_BITS) - // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h - #define configPRIO_BITS __NVIC_PRIO_BITS +// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h +#define configPRIO_BITS __NVIC_PRIO_BITS #elif defined(__ECLIC_INTCTLBITS) - // RISC-V Bumblebee core from nuclei - #define configPRIO_BITS __ECLIC_INTCTLBITS +// RISC-V Bumblebee core from nuclei +#define configPRIO_BITS __ECLIC_INTCTLBITS #elif defined(__IASMARM__) - // FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. - // Therefore we will hard coded it to minimum value of 2 to get pass ci build. - // IAR user must update this to correct value of the target MCU - #message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" - #define configPRIO_BITS 2 +// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. +// Therefore we will hard coded it to minimum value of 2 to get pass ci build. +// IAR user must update this to correct value of the target MCU +#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" +#define configPRIO_BITS 2 #else - #error "FreeRTOS configPRIO_BITS to be defined" +#error "FreeRTOS configPRIO_BITS to be defined" #endif /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1<bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; - (void) pBuff; + (void)rhport; + (void)pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void) itf; + (void)itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if ( entityID == 2 ) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if (entityID == 2) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur; + volume[channelNum] = (uint16_t)((audio_control_cur_2_t *)pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } } - } - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == 1) - { - switch ( ctrlSel ) - { - case AUDIO_TE_CTRL_CONNECTOR: - { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = (audio_channel_config_t) 0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); - } - break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; + (void)rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == 1) { + switch (ctrlSel) { + case AUDIO_TE_CTRL_CONNECTOR: { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = (audio_channel_config_t)0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + } break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; + } } - } - - // Feature unit - if (entityID == 2) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) - ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 90; // +90 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + + // Feature unit + if (entityID == 2) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], + sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 90; // +90 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; + } + + // Clock Source unit + if (entityID == 4) { + switch (ctrlSel) { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Sample Freq. range\r\n"); + return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - } - - // Clock Source unit - if ( entityID == 4 ) - { - switch ( ctrlSel ) - { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Sample Freq. range\r\n"); - return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - - // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; } - } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, + uint8_t cur_alt_setting) { - (void) rhport; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - tud_audio_write ((uint8_t *)test_buffer_audio, CFG_TUD_AUDIO_EP_SZ_IN - 2); + tud_audio_write((uint8_t *)test_buffer_audio, CFG_TUD_AUDIO_EP_SZ_IN - 2); - return true; + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, + uint8_t ep_in, uint8_t cur_alt_setting) { - (void) rhport; - (void) n_bytes_copied; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; - - for (size_t cnt = 0; cnt < (CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2; cnt++) - { - test_buffer_audio[cnt] = startVal++; - } - - return true; + (void)rhport; + (void)n_bytes_copied; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; + + for (size_t cnt = 0; cnt < (CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2; cnt++) { + test_buffer_audio[cnt] = startVal++; + } + + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - (void) p_request; - startVal = 0; + (void)rhport; + (void)p_request; + startVal = 0; - return true; + return true; } //--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void* param) { - (void) param; - static uint32_t start_ms = 0; - static bool led_state = false; - - while (1) { - // Blink every interval ms - vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } +void led_blinking_task(void *param) +{ + (void)param; + static uint32_t start_ms = 0; + static bool led_state = false; + + while (1) { + // Blink every interval ms + vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } diff --git a/Libraries/tinyusb/examples/device/audio_test_freertos/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_test_freertos/src/tusb_config.h index 8b376a4c3c1..7c8bb65a090 100644 --- a/Libraries/tinyusb/examples/device/audio_test_freertos/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_test_freertos/src/tusb_config.h @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -55,23 +55,23 @@ extern "C" { // This examples use FreeRTOS #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_FREERTOS +#define CFG_TUSB_OS OPT_OS_FREERTOS #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos/ +#define CFG_TUSB_OS_INC_PATH freertos / #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED // CFG_TUSB_DEBUG is defined by compiler in DEBUG build // #define CFG_TUSB_DEBUG 0 @@ -88,7 +88,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -96,34 +96,42 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 - -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer - -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! -#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 8 : 1) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 + +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT \ + 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer + +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX \ + 2 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ + 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! +#define CFG_TUD_AUDIO_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ + (TUD_OPT_HIGH_SPEED ? 8 : 1) * \ + CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/audio_test_freertos/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_test_freertos/src/usb_descriptors.c index 9864377f608..50afd3bf5da 100644 --- a/Libraries/tinyusb/examples/device/audio_test_freertos/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_test_freertos/src/usb_descriptors.c @@ -32,85 +32,84 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_AUDIO 0x03 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) - // nRF5x ISO can only be endpoint 8 - #define EPNUM_AUDIO 0x08 +// nRF5x ISO can only be endpoint 8 +#define EPNUM_AUDIO 0x08 #else - #define EPNUM_AUDIO 0x01 +#define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = -{ +uint8_t const desc_configuration[] = { // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) + TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR( + /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, + /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, + /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * 8, + /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -119,20 +118,19 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const* string_desc_arr [] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; @@ -140,42 +138,45 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/main.c b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/main.c index 2ff7f10bd07..fdfc0bd35ba 100644 --- a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/main.c +++ b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/main.c @@ -49,40 +49,35 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 -uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 uint32_t sampFreq; uint8_t bytesPerSample; uint8_t clkValid; // Range states // List of supported sample rates -static const uint32_t sampleRatesList[] = -{ - 32000, 48000, 96000 -}; +static const uint32_t sampleRatesList[] = { 32000, 48000, 96000 }; -#define N_sampleRates TU_ARRAY_SIZE(sampleRatesList) +#define N_sampleRates TU_ARRAY_SIZE(sampleRatesList) // Bytes per format of every Alt settings -static const uint8_t bytesPerSampleAltList[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = -{ +static const uint8_t bytesPerSampleAltList[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = { CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, }; -audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state - +audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // Volume range state // Audio test data CFG_TUSB_MEM_ALIGN uint8_t test_buffer_audio[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX]; @@ -94,28 +89,26 @@ void audio_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); - - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + board_init(); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - // Init values - sampFreq = sampleRatesList[0]; - clkValid = 1; + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - audio_task(); - } + // Init values + sampFreq = sampleRatesList[0]; + clkValid = 1; + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + audio_task(); + } - return 0; + return 0; } //--------------------------------------------------------------------+ @@ -125,13 +118,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -139,14 +132,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -155,8 +148,8 @@ void tud_resume_cb(void) void audio_task(void) { - // Yet to be filled - e.g. put meas data into TX FIFOs etc. - // asm("nop"); + // Yet to be filled - e.g. put meas data into TX FIFOs etc. + // asm("nop"); } //--------------------------------------------------------------------+ @@ -164,348 +157,343 @@ void audio_task(void) //--------------------------------------------------------------------+ // Invoked when set interface is called, typically on start/stop streaming or format change -bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void)rhport; - //uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - - // Clear buffer when streaming format is changed - if(alt != 0) - { - bytesPerSample = bytesPerSampleAltList[alt-1]; - } - return true; + (void)rhport; + //uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + + // Clear buffer when streaming format is changed + if (alt != 0) { + bytesPerSample = bytesPerSampleAltList[alt - 1]; + } + return true; } // Invoked when audio class specific set request received for an EP -bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; - (void) pBuff; + (void)rhport; + (void)pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; - (void) pBuff; + (void)rhport; + (void)pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void) itf; + (void)itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if ( entityID == UAC2_ENTITY_FEATURE_UNIT ) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if (entityID == UAC2_ENTITY_FEATURE_UNIT) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur; + volume[channelNum] = (uint16_t)((audio_control_cur_2_t *)pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } } - } - // Clock Source unit - if ( entityID == UAC2_ENTITY_CLOCK ) - { - switch ( ctrlSel ) - { - case AUDIO_CS_CTRL_SAM_FREQ: - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_4_t)); + // Clock Source unit + if (entityID == UAC2_ENTITY_CLOCK) { + switch (ctrlSel) { + case AUDIO_CS_CTRL_SAM_FREQ: + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_4_t)); - sampFreq = (uint32_t)((audio_control_cur_4_t *)pBuff)->bCur; + sampFreq = (uint32_t)((audio_control_cur_4_t *)pBuff)->bCur; - TU_LOG2("Clock set current freq: %" PRIu32 "\r\n", sampFreq); + TU_LOG2("Clock set current freq: %" PRIu32 "\r\n", sampFreq); - return true; - break; + return true; + break; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } } - } - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) ep; + (void)channelNum; + (void)ctrlSel; + (void)ep; - // return tud_control_xfer(rhport, p_request, &tmp, 1); + // return tud_control_xfer(rhport, p_request, &tmp, 1); - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void) channelNum; (void) ctrlSel; (void) itf; + (void)channelNum; + (void)ctrlSel; + (void)itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == UAC2_ENTITY_INPUT_TERMINAL) - { - switch ( ctrlSel ) - { - case AUDIO_TE_CTRL_CONNECTOR: - { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = 0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); - } - break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; + (void)rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == UAC2_ENTITY_INPUT_TERMINAL) { + switch (ctrlSel) { + case AUDIO_TE_CTRL_CONNECTOR: { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = 0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + } break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; + } } - } - - // Feature unit - if (entityID == UAC2_ENTITY_FEATURE_UNIT) - { - switch ( ctrlSel ) - { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) - ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 30; // +30 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + + // Feature unit + if (entityID == UAC2_ENTITY_FEATURE_UNIT) { + switch (ctrlSel) { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], + sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 30; // +30 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, + sizeof(ret)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - break; - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; } - } - - // Clock Source unit - if ( entityID == UAC2_ENTITY_CLOCK ) - { - switch ( ctrlSel ) - { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch ( p_request->bRequest ) - { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - { - TU_LOG2(" Get Sample Freq. range\r\n"); - audio_control_range_4_n_t(N_sampleRates) rangef = - { - .wNumSubRanges = tu_htole16(N_sampleRates) - }; - TU_LOG1("Clock get %d freq ranges\r\n", N_sampleRates); - for(uint8_t i = 0; i < N_sampleRates; i++) - { - rangef.subrange[i].bMin = (int32_t)sampleRatesList[i]; - rangef.subrange[i].bMax = (int32_t)sampleRatesList[i]; - rangef.subrange[i].bRes = 0; - TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); + + // Clock Source unit + if (entityID == UAC2_ENTITY_CLOCK) { + switch (ctrlSel) { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch (p_request->bRequest) { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: { + TU_LOG2(" Get Sample Freq. range\r\n"); + audio_control_range_4_n_t(N_sampleRates) + rangef = { .wNumSubRanges = tu_htole16(N_sampleRates) }; + TU_LOG1("Clock get %d freq ranges\r\n", N_sampleRates); + for (uint8_t i = 0; i < N_sampleRates; i++) { + rangef.subrange[i].bMin = (int32_t)sampleRatesList[i]; + rangef.subrange[i].bMax = (int32_t)sampleRatesList[i]; + rangef.subrange[i].bRes = 0; + TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, + (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); + } + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &rangef, + sizeof(rangef)); } - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &rangef, sizeof(rangef)); - } - // Unknown/Unsupported control - default: + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; + } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + + // Unknown/Unsupported control + default: TU_BREAKPOINT(); return false; } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; } - } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, + uint8_t cur_alt_setting) { - (void) rhport; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - tud_audio_write((uint8_t *)test_buffer_audio, (uint16_t)(sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000) * bytesPerSample)); + tud_audio_write((uint8_t *)test_buffer_audio, + (uint16_t)(sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000) * bytesPerSample)); - return true; + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, + uint8_t ep_in, uint8_t cur_alt_setting) { - (void) rhport; - (void) n_bytes_copied; - (void) itf; - (void) ep_in; - (void) cur_alt_setting; - - // 16bit - if(bytesPerSample == 2) - { - uint16_t* pData_16 = (uint16_t*)((void*)test_buffer_audio); - for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++) - { - pData_16[cnt] = startVal++; + (void)rhport; + (void)n_bytes_copied; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; + + // 16bit + if (bytesPerSample == 2) { + uint16_t *pData_16 = (uint16_t *)((void *)test_buffer_audio); + for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++) { + pData_16[cnt] = startVal++; + } } - } - // 24bit in 32bit slot - else if(bytesPerSample == 4) - { - uint32_t* pData_32 = (uint32_t*)((void*)test_buffer_audio); - for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++) - { - pData_32[cnt] = (uint32_t)startVal++ << 16U; + // 24bit in 32bit slot + else if (bytesPerSample == 4) { + uint32_t *pData_32 = (uint32_t *)((void *)test_buffer_audio); + for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++) { + pData_32[cnt] = (uint32_t)startVal++ << 16U; + } } - } - return true; + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; - (void) p_request; - startVal = 0; + (void)rhport; + (void)p_request; + startVal = 0; - return true; + return true; } //--------------------------------------------------------------------+ @@ -513,13 +501,14 @@ bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/tusb_config.h index 1c8288bce7a..e3f57b6999f 100644 --- a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/tusb_config.h @@ -38,12 +38,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -56,18 +56,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED // CFG_TUSB_DEBUG is defined by compiler in DEBUG build // #define CFG_TUSB_DEBUG 0 @@ -84,7 +84,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -92,48 +92,59 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 96000 +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 96000 // How many formats are used, need to adjust USB descriptor if changed -#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 +#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 // 16bit in 16bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 // 24bit in 32bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer - -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT \ + 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer + +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ + 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX \ + TU_MAX( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX #ifdef __cplusplus } #endif diff --git a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.c index f50e70a251e..8b0c2bd36b3 100644 --- a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.c @@ -34,76 +34,73 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN) +#define CONFIG_TOTAL_LEN \ + (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_AUDIO 0x03 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) - // nRF5x ISO can only be endpoint 8 - #define EPNUM_AUDIO 0x08 +// nRF5x ISO can only be endpoint 8 +#define EPNUM_AUDIO 0x08 #else - #define EPNUM_AUDIO 0x01 +#define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = -{ +uint8_t const desc_configuration[] = { // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_epin*/ 0x80 | EPNUM_AUDIO) + TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, + /*_epin*/ 0x80 | EPNUM_AUDIO) }; TU_VERIFY_STATIC(sizeof(desc_configuration) == CONFIG_TOTAL_LEN, "Incorrect size"); @@ -111,10 +108,10 @@ TU_VERIFY_STATIC(sizeof(desc_configuration) == CONFIG_TOTAL_LEN, "Incorrect size // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -123,20 +120,19 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const* string_desc_arr [] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; @@ -144,42 +140,45 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.h index 8381e31f51e..4326f8e36de 100644 --- a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.h @@ -29,74 +29,104 @@ // #include "tusb.h" // Unit numbers are arbitrary selected -#define UAC2_ENTITY_CLOCK 0x04 -#define UAC2_ENTITY_INPUT_TERMINAL 0x01 -#define UAC2_ENTITY_OUTPUT_TERMINAL 0x03 -#define UAC2_ENTITY_FEATURE_UNIT 0x02 +#define UAC2_ENTITY_CLOCK 0x04 +#define UAC2_ENTITY_INPUT_TERMINAL 0x01 +#define UAC2_ENTITY_OUTPUT_TERMINAL 0x03 +#define UAC2_ENTITY_FEATURE_UNIT 0x02 +#define TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN \ + (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ + TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN /* Interface 1, Alternate 0 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 1, Alternate 1 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 1, Alternate 2 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) -#define TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ - + TUD_AUDIO_DESC_STD_AC_LEN\ - + TUD_AUDIO_DESC_CS_AC_LEN\ - + TUD_AUDIO_DESC_CLK_SRC_LEN\ - + TUD_AUDIO_DESC_INPUT_TERM_LEN\ - + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ - + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - /* Interface 1, Alternate 1 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ - /* Interface 1, Alternate 2 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) - - -#define TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESCRIPTOR(_itfnum, _stridx, _epin) \ - /* Standard Interface Association Descriptor (IAD) */\ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ - /* Standard AC Interface Descriptor(4.7.1) */\ - TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ - /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ - TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ - /* Clock Source Descriptor(4.7.2.1) */\ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_PRO_CLK, /*_ctrl*/ AUDIO_CTRL_RW << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS | AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_VAL_POS, /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ - /* Input Terminal Descriptor(4.7.2.4) */\ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\ - /* Output Terminal Descriptor(4.7.2.5) */\ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ UAC2_ENTITY_INPUT_TERMINAL, /*_srcid*/ UAC2_ENTITY_FEATURE_UNIT, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ - /* Feature Unit Descriptor(4.7.2.8) */\ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ UAC2_ENTITY_FEATURE_UNIT, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 1 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ - /* Interface 1, Alternate 2 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN, /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) - +#define TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESCRIPTOR(_itfnum, _stridx, _epin) \ + /* Standard Interface Association Descriptor (IAD) */ \ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, \ + /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ + TUD_AUDIO_DESC_STD_AC( \ + /*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, \ + /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ + TUD_AUDIO_DESC_CS_AC( \ + /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, \ + /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, \ + /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, \ + /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_PRO_CLK, \ + /*_ctrl*/ AUDIO_CTRL_RW << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS | \ + AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_VAL_POS, \ + /*_assocTerm*/ 0x01, \ + /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ + TUD_AUDIO_DESC_INPUT_TERM( \ + /*_termid*/ UAC2_ENTITY_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, \ + /*_assocTerm*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, \ + /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, \ + /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, \ + /*_assocTerm*/ UAC2_ENTITY_INPUT_TERMINAL, \ + /*_srcid*/ UAC2_ENTITY_FEATURE_UNIT, \ + /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, \ + /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL( \ + /*_unitid*/ UAC2_ENTITY_FEATURE_UNIT, /*_srcid*/ 0x01, \ + /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ + /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, \ + /*_nEPs*/ 0x00, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epin, \ + /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), \ + /*_maxEPsize*/ CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000), /* Interface 1, Alternate 2 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epin, \ + /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), \ + /*_maxEPsize*/ CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN, /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000) #endif diff --git a/Libraries/tinyusb/examples/device/board_test/src/main.c b/Libraries/tinyusb/examples/device/board_test/src/main.c index 91799eb89e0..d2f3d43773f 100644 --- a/Libraries/tinyusb/examples/device/board_test/src/main.c +++ b/Libraries/tinyusb/examples/device/board_test/src/main.c @@ -32,43 +32,42 @@ * - 250 ms : button is not pressed * - 1000 ms : button is pressed (and hold) */ -enum { - BLINK_PRESSED = 250, - BLINK_UNPRESSED = 1000 -}; +enum { BLINK_PRESSED = 250, BLINK_UNPRESSED = 1000 }; -#define HELLO_STR "Hello from TinyUSB\r\n" +#define HELLO_STR "Hello from TinyUSB\r\n" -int main(void) { - board_init(); - board_led_write(true); +int main(void) +{ + board_init(); + board_led_write(true); - uint32_t start_ms = 0; - bool led_state = false; + uint32_t start_ms = 0; + bool led_state = false; - while (1) { - uint32_t interval_ms = board_button_read() ? BLINK_PRESSED : BLINK_UNPRESSED; + while (1) { + uint32_t interval_ms = board_button_read() ? BLINK_PRESSED : BLINK_UNPRESSED; - // Blink and print every interval ms - if (!(board_millis() - start_ms < interval_ms)) { - board_uart_write(HELLO_STR, strlen(HELLO_STR)); + // Blink and print every interval ms + if (!(board_millis() - start_ms < interval_ms)) { + board_uart_write(HELLO_STR, strlen(HELLO_STR)); - start_ms = board_millis(); + start_ms = board_millis(); - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } - // echo - uint8_t ch; - if (board_uart_read(&ch, 1) > 0) { - board_uart_write(&ch, 1); + // echo + uint8_t ch; + if (board_uart_read(&ch, 1) > 0) { + board_uart_write(&ch, 1); + } } - } } #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -void app_main(void) { - main(); +void app_main(void) +{ + main(); } #endif diff --git a/Libraries/tinyusb/examples/device/board_test/src/tusb_config.h b/Libraries/tinyusb/examples/device/board_test/src/tusb_config.h index 36eafe8070a..8c4d0deeab0 100644 --- a/Libraries/tinyusb/examples/device/board_test/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/board_test/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif // board_test example is special example that doesn't enable device or host stack @@ -41,21 +41,21 @@ // defined by compiler flags for flexibility #ifndef CFG_TUSB_MCU - #error CFG_TUSB_MCU must be defined +#error CFG_TUSB_MCU must be defined #endif #ifndef CFG_TUSB_OS - #define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos/ +#define CFG_TUSB_OS_INC_PATH freertos / #endif // This example only test LED & GPIO, disable both device and host stack -#define CFG_TUD_ENABLED 0 -#define CFG_TUH_ENABLED 0 +#define CFG_TUD_ENABLED 0 +#define CFG_TUH_ENABLED 0 // CFG_TUSB_DEBUG is defined by compiler in DEBUG build // #define CFG_TUSB_DEBUG 0 @@ -72,11 +72,11 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/main.c b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/main.c index ef12186f2b6..4217d129e37 100644 --- a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/main.c +++ b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/main.c @@ -37,9 +37,9 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -48,108 +48,117 @@ static void led_blinking_task(void); static void cdc_task(void); /*------------- MAIN -------------*/ -int main(void) { - board_init(); +int main(void) +{ + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - cdc_task(); - led_blinking_task(); - } + while (1) { + tud_task(); // tinyusb device task + cdc_task(); + led_blinking_task(); + } } // echo to either Serial0 or Serial1 // with Serial0 as all lower case, Serial1 as all upper case -static void echo_serial_port(uint8_t itf, uint8_t buf[], uint32_t count) { - uint8_t const case_diff = 'a' - 'A'; - - for (uint32_t i = 0; i < count; i++) { - if (itf == 0) { - // echo back 1st port as lower case - if (isupper(buf[i])) buf[i] += case_diff; - } else { - // echo back 2nd port as upper case - if (islower(buf[i])) buf[i] -= case_diff; - } +static void echo_serial_port(uint8_t itf, uint8_t buf[], uint32_t count) +{ + uint8_t const case_diff = 'a' - 'A'; + + for (uint32_t i = 0; i < count; i++) { + if (itf == 0) { + // echo back 1st port as lower case + if (isupper(buf[i])) + buf[i] += case_diff; + } else { + // echo back 2nd port as upper case + if (islower(buf[i])) + buf[i] -= case_diff; + } - tud_cdc_n_write_char(itf, buf[i]); - } - tud_cdc_n_write_flush(itf); + tud_cdc_n_write_char(itf, buf[i]); + } + tud_cdc_n_write_flush(itf); } // Invoked when device is mounted -void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) +{ + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) +{ + blink_interval_ms = BLINK_NOT_MOUNTED; } - //--------------------------------------------------------------------+ // USB CDC //--------------------------------------------------------------------+ -static void cdc_task(void) { - uint8_t itf; - - for (itf = 0; itf < CFG_TUD_CDC; itf++) { - // connected() check for DTR bit - // Most but not all terminal client set this when making connection - // if ( tud_cdc_n_connected(itf) ) - { - if (tud_cdc_n_available(itf)) { - uint8_t buf[64]; - - uint32_t count = tud_cdc_n_read(itf, buf, sizeof(buf)); - - // echo back to both serial ports - echo_serial_port(0, buf, count); - echo_serial_port(1, buf, count); - } +static void cdc_task(void) +{ + uint8_t itf; + + for (itf = 0; itf < CFG_TUD_CDC; itf++) { + // connected() check for DTR bit + // Most but not all terminal client set this when making connection + // if ( tud_cdc_n_connected(itf) ) + { + if (tud_cdc_n_available(itf)) { + uint8_t buf[64]; + + uint32_t count = tud_cdc_n_read(itf, buf, sizeof(buf)); + + // echo back to both serial ports + echo_serial_port(0, buf, count); + echo_serial_port(1, buf, count); + } + } } - } } // Invoked when cdc when line state changed e.g connected/disconnected // Use to reset to DFU when disconnect with 1200 bps -void tud_cdc_line_state_cb(uint8_t instance, bool dtr, bool rts) { - (void)rts; - - // DTR = false is counted as disconnected - if (!dtr) { - // touch1200 only with first CDC instance (Serial) - if (instance == 0) { - cdc_line_coding_t coding; - tud_cdc_get_line_coding(&coding); - if (coding.bit_rate == 1200) { - if (board_reset_to_bootloader) { - board_reset_to_bootloader(); +void tud_cdc_line_state_cb(uint8_t instance, bool dtr, bool rts) +{ + (void)rts; + + // DTR = false is counted as disconnected + if (!dtr) { + // touch1200 only with first CDC instance (Serial) + if (instance == 0) { + cdc_line_coding_t coding; + tud_cdc_get_line_coding(&coding); + if (coding.bit_rate == 1200) { + if (board_reset_to_bootloader) { + board_reset_to_bootloader(); + } + } } - } } - } } //--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; - - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle +void led_blinking_task(void) +{ + static uint32_t start_ms = 0; + static bool led_state = false; + + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h index 070f08ed1d2..7cfefab9474 100644 --- a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,25 +87,25 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 2 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 2 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c index de2505c07f2..e49f7701221 100644 --- a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c @@ -32,165 +32,158 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_CDC_0 = 0, - ITF_NUM_CDC_0_DATA, - ITF_NUM_CDC_1, - ITF_NUM_CDC_1_DATA, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_CDC_0 = 0, ITF_NUM_CDC_0_DATA, ITF_NUM_CDC_1, ITF_NUM_CDC_1_DATA, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_CDC * TUD_CDC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_CDC * TUD_CDC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_CDC_0_NOTIF 0x81 - #define EPNUM_CDC_0_OUT 0x02 - #define EPNUM_CDC_0_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_CDC_0_NOTIF 0x81 +#define EPNUM_CDC_0_OUT 0x02 +#define EPNUM_CDC_0_IN 0x82 - #define EPNUM_CDC_1_NOTIF 0x84 - #define EPNUM_CDC_1_OUT 0x05 - #define EPNUM_CDC_1_IN 0x85 +#define EPNUM_CDC_1_NOTIF 0x84 +#define EPNUM_CDC_1_OUT 0x05 +#define EPNUM_CDC_1_IN 0x85 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X - // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_0_NOTIF 0x81 - #define EPNUM_CDC_0_OUT 0x02 - #define EPNUM_CDC_0_IN 0x83 +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X +// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_0_NOTIF 0x81 +#define EPNUM_CDC_0_OUT 0x02 +#define EPNUM_CDC_0_IN 0x83 - #define EPNUM_CDC_1_NOTIF 0x84 - #define EPNUM_CDC_1_OUT 0x05 - #define EPNUM_CDC_1_IN 0x86 +#define EPNUM_CDC_1_NOTIF 0x84 +#define EPNUM_CDC_1_OUT 0x05 +#define EPNUM_CDC_1_IN 0x86 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X - // FT9XX doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_0_NOTIF 0x81 - #define EPNUM_CDC_0_OUT 0x02 - #define EPNUM_CDC_0_IN 0x83 +// FT9XX doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_0_NOTIF 0x81 +#define EPNUM_CDC_0_OUT 0x02 +#define EPNUM_CDC_0_IN 0x83 - #define EPNUM_CDC_1_NOTIF 0x84 - #define EPNUM_CDC_1_OUT 0x05 - #define EPNUM_CDC_1_IN 0x86 +#define EPNUM_CDC_1_NOTIF 0x84 +#define EPNUM_CDC_1_OUT 0x05 +#define EPNUM_CDC_1_IN 0x86 #else - #define EPNUM_CDC_0_NOTIF 0x81 - #define EPNUM_CDC_0_OUT 0x02 - #define EPNUM_CDC_0_IN 0x82 +#define EPNUM_CDC_0_NOTIF 0x81 +#define EPNUM_CDC_0_OUT 0x02 +#define EPNUM_CDC_0_IN 0x82 - #define EPNUM_CDC_1_NOTIF 0x83 - #define EPNUM_CDC_1_OUT 0x04 - #define EPNUM_CDC_1_IN 0x84 +#define EPNUM_CDC_1_NOTIF 0x83 +#define EPNUM_CDC_1_OUT 0x04 +#define EPNUM_CDC_1_IN 0x84 #endif -uint8_t const desc_fs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_fs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, 64), + // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, 64), - // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, 64), + // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, 64), }; #if TUD_OPT_HIGH_SPEED // Per USB specs: high speed capable device must report device_qualifier and other_speed_configuration -uint8_t const desc_hs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, 512), + // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, + 512), - // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, 512), + // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, + 512), }; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed -tusb_desc_device_qualifier_t const desc_device_qualifier = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, - - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .bNumConfigurations = 0x01, - .bReserved = 0x00 +tusb_desc_device_qualifier_t const desc_device_qualifier = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, + + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 0x01, + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const* tud_descriptor_device_qualifier_cb(void) +uint8_t const *tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const*) &desc_device_qualifier; + return (uint8_t const *)&desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration; + // if link speed is high return fullspeed config, and vice versa + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration; } #endif // highspeed @@ -198,15 +191,15 @@ uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -216,62 +209,64 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB CDC", // 4: CDC Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB CDC", // 4: CDC Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/cdc_msc/src/main.c b/Libraries/tinyusb/examples/device/cdc_msc/src/main.c index 4581a3babea..4d5568ee549 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc/src/main.c +++ b/Libraries/tinyusb/examples/device/cdc_msc/src/main.c @@ -36,9 +36,9 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -47,22 +47,23 @@ void led_blinking_task(void); void cdc_task(void); /*------------- MAIN -------------*/ -int main(void) { - board_init(); +int main(void) +{ + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); - cdc_task(); - } + cdc_task(); + } } //--------------------------------------------------------------------+ @@ -70,83 +71,91 @@ int main(void) { //--------------------------------------------------------------------+ // Invoked when device is mounted -void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) +{ + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) +{ + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended // remote_wakeup_en : if host allow us to perform remote wakeup // Within 7ms, device must draw an average of current less than 2.5 mA from bus -void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; +void tud_suspend_cb(bool remote_wakeup_en) +{ + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed -void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +void tud_resume_cb(void) +{ + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } - //--------------------------------------------------------------------+ // USB CDC //--------------------------------------------------------------------+ -void cdc_task(void) { - // connected() check for DTR bit - // Most but not all terminal client set this when making connection - // if ( tud_cdc_connected() ) - { - // connected and there are data available - if (tud_cdc_available()) { - // read data - char buf[64]; - uint32_t count = tud_cdc_read(buf, sizeof(buf)); - (void) count; - - // Echo back - // Note: Skip echo by commenting out write() and write_flush() - // for throughput test e.g - // $ dd if=/dev/zero of=/dev/ttyACM0 count=10000 - tud_cdc_write(buf, count); - tud_cdc_write_flush(); +void cdc_task(void) +{ + // connected() check for DTR bit + // Most but not all terminal client set this when making connection + // if ( tud_cdc_connected() ) + { + // connected and there are data available + if (tud_cdc_available()) { + // read data + char buf[64]; + uint32_t count = tud_cdc_read(buf, sizeof(buf)); + (void)count; + + // Echo back + // Note: Skip echo by commenting out write() and write_flush() + // for throughput test e.g + // $ dd if=/dev/zero of=/dev/ttyACM0 count=10000 + tud_cdc_write(buf, count); + tud_cdc_write_flush(); + } } - } } // Invoked when cdc when line state changed e.g connected/disconnected -void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { - (void) itf; - (void) rts; - - // TODO set some indicator - if (dtr) { - // Terminal connected - } else { - // Terminal disconnected - } +void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) +{ + (void)itf; + (void)rts; + + // TODO set some indicator + if (dtr) { + // Terminal connected + } else { + // Terminal disconnected + } } // Invoked when CDC interface received data from host -void tud_cdc_rx_cb(uint8_t itf) { - (void) itf; +void tud_cdc_rx_cb(uint8_t itf) +{ + (void)itf; } //--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; - - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle +void led_blinking_task(void) +{ + static uint32_t start_ms = 0; + static bool led_state = false; + + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/cdc_msc/src/msc_disk.c b/Libraries/tinyusb/examples/device/cdc_msc/src/msc_disk.c index d2f8628f136..e245379bd3e 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc/src/msc_disk.c +++ b/Libraries/tinyusb/examples/device/cdc_msc/src/msc_disk.c @@ -36,128 +36,132 @@ static bool ejected = false; // CFG_EXAMPLE_MSC_READONLY defined #define README_CONTENTS \ -"This is tinyusb's MassStorage Class demo.\r\n\r\n\ + "This is tinyusb's MassStorage Class demo.\r\n\r\n\ If you find any bugs or get any questions, feel free to file an\r\n\ issue at github.com/hathach/tinyusb" -enum -{ - DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount - DISK_BLOCK_SIZE = 512 +enum { + DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount + DISK_BLOCK_SIZE = 512 }; #ifdef CFG_EXAMPLE_MSC_READONLY const #endif -uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ - //------------- Block0: Boot Sector -------------// - // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; - // sector_per_cluster = 1; reserved_sectors = 1; - // fat_num = 1; fat12_root_entry_num = 16; - // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; - // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; - // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; - // FAT magic code at offset 510-511 - { - 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, - 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , - 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, - - // Zero up to 2 last bytes of FAT magic code - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA - }, - - //------------- Block1: FAT12 Table -------------// - { - 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file - }, - - //------------- Block2: Root Directory -------------// - { - // first entry is volume label - 'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // second entry is readme file - 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, - 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) - }, - - //------------- Block3: Readme Content -------------// - README_CONTENTS -}; + uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { + //------------- Block0: Boot Sector -------------// + // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; + // sector_per_cluster = 1; reserved_sectors = 1; + // fat_num = 1; fat12_root_entry_num = 16; + // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; + // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; + // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; + // FAT magic code at offset 510-511 + { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, + 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T', 'i', + 'n', 'y', 'U', 'S', 'B', ' ', 'M', 'S', 'C', 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, + 0x20, 0x00, 0x00, + + // Zero up to 2 last bytes of FAT magic code + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x55, 0xAA }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, + 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file + }, + + //------------- Block2: Root Directory -------------// + { + // first entry is volume label + 'T', 'i', 'n', 'y', 'U', 'S', 'B', ' ', 'M', 'S', 'C', 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + // second entry is readme file + 'R', 'E', 'A', 'D', 'M', 'E', ' ', ' ', 'T', 'X', 'T', 0x20, 0x00, 0xC6, 0x52, 0x6D, + 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, + sizeof(README_CONTENTS) - 1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block3: Readme Content -------------// + README_CONTENTS + }; // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) +void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], + uint8_t product_rev[4]) { - (void) lun; + (void)lun; - const char vid[] = "TinyUSB"; - const char pid[] = "Mass Storage"; - const char rev[] = "1.0"; + const char vid[] = "TinyUSB"; + const char pid[] = "Mass Storage"; + const char rev[] = "1.0"; - memcpy(vendor_id , vid, strlen(vid)); - memcpy(product_id , pid, strlen(pid)); - memcpy(product_rev, rev, strlen(rev)); + memcpy(vendor_id, vid, strlen(vid)); + memcpy(product_id, pid, strlen(pid)); + memcpy(product_rev, rev, strlen(rev)); } // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted bool tud_msc_test_unit_ready_cb(uint8_t lun) { - (void) lun; + (void)lun; - // RAM disk is ready until ejected - if (ejected) { - // Additional Sense 3A-00 is NOT_FOUND - tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3a, 0x00); - return false; - } + // RAM disk is ready until ejected + if (ejected) { + // Additional Sense 3A-00 is NOT_FOUND + tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3a, 0x00); + return false; + } - return true; + return true; } // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) +void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size) { - (void) lun; + (void)lun; - *block_count = DISK_BLOCK_NUM; - *block_size = DISK_BLOCK_SIZE; + *block_count = DISK_BLOCK_NUM; + *block_size = DISK_BLOCK_SIZE; } // Invoked when received Start Stop Unit command @@ -165,108 +169,108 @@ void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_siz // - Start = 1 : active mode, if load_eject = 1 : load disk storage bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) { - (void) lun; - (void) power_condition; - - if ( load_eject ) - { - if (start) - { - // load disk storage - }else - { - // unload disk storage - ejected = true; + (void)lun; + (void)power_condition; + + if (load_eject) { + if (start) { + // load disk storage + } else { + // unload disk storage + ejected = true; + } } - } - return true; + return true; } // Callback invoked when received READ10 command. // Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) +int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, + uint32_t bufsize) { - (void) lun; + (void)lun; - // out of ramdisk - if ( lba >= DISK_BLOCK_NUM ) return -1; + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) + return -1; - uint8_t const* addr = msc_disk[lba] + offset; - memcpy(buffer, addr, bufsize); + uint8_t const *addr = msc_disk[lba] + offset; + memcpy(buffer, addr, bufsize); - return (int32_t) bufsize; + return (int32_t)bufsize; } -bool tud_msc_is_writable_cb (uint8_t lun) +bool tud_msc_is_writable_cb(uint8_t lun) { - (void) lun; + (void)lun; #ifdef CFG_EXAMPLE_MSC_READONLY - return false; + return false; #else - return true; + return true; #endif } // Callback invoked when received WRITE10 command. // Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, + uint32_t bufsize) { - (void) lun; + (void)lun; - // out of ramdisk - if ( lba >= DISK_BLOCK_NUM ) return -1; + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) + return -1; #ifndef CFG_EXAMPLE_MSC_READONLY - uint8_t* addr = msc_disk[lba] + offset; - memcpy(addr, buffer, bufsize); + uint8_t *addr = msc_disk[lba] + offset; + memcpy(addr, buffer, bufsize); #else - (void) lba; (void) offset; (void) buffer; + (void)lba; + (void)offset; + (void)buffer; #endif - return (int32_t) bufsize; + return (int32_t)bufsize; } // Callback invoked when received an SCSI command not in built-in list below // - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE // - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) +int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) { - // read10 & write10 has their own callback and MUST not be handled here + // read10 & write10 has their own callback and MUST not be handled here - void const* response = NULL; - int32_t resplen = 0; + void const *response = NULL; + int32_t resplen = 0; - // most scsi handled is input - bool in_xfer = true; + // most scsi handled is input + bool in_xfer = true; - switch (scsi_cmd[0]) - { + switch (scsi_cmd[0]) { default: - // Set Sense = Invalid Command Operation - tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - - // negative means error -> tinyusb could stall and/or response with failed status - resplen = -1; - break; - } - - // return resplen must not larger than bufsize - if ( resplen > bufsize ) resplen = bufsize; - - if ( response && (resplen > 0) ) - { - if(in_xfer) - { - memcpy(buffer, response, (size_t) resplen); - }else - { - // SCSI output + // Set Sense = Invalid Command Operation + tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + + // negative means error -> tinyusb could stall and/or response with failed status + resplen = -1; + break; + } + + // return resplen must not larger than bufsize + if (resplen > bufsize) + resplen = bufsize; + + if (response && (resplen > 0)) { + if (in_xfer) { + memcpy(buffer, response, (size_t)resplen); + } else { + // SCSI output + } } - } - return (int32_t) resplen; + return (int32_t)resplen; } #endif diff --git a/Libraries/tinyusb/examples/device/cdc_msc/src/tusb_config.h b/Libraries/tinyusb/examples/device/cdc_msc/src/tusb_config.h index 03e0e649cd5..de7c4eab408 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/cdc_msc/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,28 +87,28 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 1 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 1 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE 512 +#define CFG_TUD_MSC_EP_BUFSIZE 512 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c index fac7cce8f65..2f35cebc140 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c @@ -32,121 +32,119 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; +uint8_t const *tud_descriptor_device_cb(void) +{ + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { - ITF_NUM_CDC = 0, - ITF_NUM_CDC_DATA, - ITF_NUM_MSC, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_CDC = 0, ITF_NUM_CDC_DATA, ITF_NUM_MSC, ITF_NUM_TOTAL }; -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x82 - #define EPNUM_MSC_OUT 0x05 - #define EPNUM_MSC_IN 0x85 +#define EPNUM_MSC_OUT 0x05 +#define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X - // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x83 +// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x83 - #define EPNUM_MSC_OUT 0x04 - #define EPNUM_MSC_IN 0x85 +#define EPNUM_MSC_OUT 0x04 +#define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_CXD56 - // CXD56 doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - // CXD56 USB driver has fixed endpoint type (bulk/interrupt/iso) and direction (IN/OUT) by its number - // 0 control (IN/OUT), 1 Bulk (IN), 2 Bulk (OUT), 3 In (IN), 4 Bulk (IN), 5 Bulk (OUT), 6 In (IN) - #define EPNUM_CDC_NOTIF 0x83 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x81 +// CXD56 doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +// CXD56 USB driver has fixed endpoint type (bulk/interrupt/iso) and direction (IN/OUT) by its number +// 0 control (IN/OUT), 1 Bulk (IN), 2 Bulk (OUT), 3 In (IN), 4 Bulk (IN), 5 Bulk (OUT), 6 In (IN) +#define EPNUM_CDC_NOTIF 0x83 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x81 - #define EPNUM_MSC_OUT 0x05 - #define EPNUM_MSC_IN 0x84 +#define EPNUM_MSC_OUT 0x05 +#define EPNUM_MSC_IN 0x84 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X - // FT9XX doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x83 +// FT9XX doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x83 - #define EPNUM_MSC_OUT 0x04 - #define EPNUM_MSC_IN 0x85 +#define EPNUM_MSC_OUT 0x04 +#define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // MAX32 doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x83 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// MAX32 doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x83 - #define EPNUM_MSC_OUT 0x04 - #define EPNUM_MSC_IN 0x85 +#define EPNUM_MSC_OUT 0x04 +#define EPNUM_MSC_IN 0x85 #else - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x82 +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x82 - #define EPNUM_MSC_OUT 0x03 - #define EPNUM_MSC_IN 0x83 +#define EPNUM_MSC_OUT 0x03 +#define EPNUM_MSC_IN 0x83 #endif -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) // full speed configuration uint8_t const desc_fs_configuration[] = { @@ -180,58 +178,60 @@ uint8_t desc_other_speed_config[CONFIG_TOTAL_LEN]; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_qualifier_t), - .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = USB_BCD, - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .bNumConfigurations = 0x01, - .bReserved = 0x00 + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const *) &desc_device_qualifier; +uint8_t const *tud_descriptor_device_qualifier_cb(void) +{ + return (uint8_t const *)&desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) +{ + (void)index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - // Note: the descriptor type is OHER_SPEED_CONFIG instead of CONFIG - memcpy(desc_other_speed_config, - (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration, - CONFIG_TOTAL_LEN); + // if link speed is high return fullspeed config, and vice versa + // Note: the descriptor type is OHER_SPEED_CONFIG instead of CONFIG + memcpy(desc_other_speed_config, + (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration, + CONFIG_TOTAL_LEN); - desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; + desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; - return desc_other_speed_config; + return desc_other_speed_config; } #endif // highspeed - // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +{ + (void)index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -241,62 +241,65 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors char const *string_desc_arr[] = { - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB CDC", // 4: CDC Interface - "TinyUSB MSC", // 5: MSC Interface + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB CDC", // 4: CDC Interface + "TinyUSB MSC", // 5: MSC Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h index 869500ad2ad..ccd96107b31 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h +++ b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h @@ -26,7 +26,6 @@ * 1 tab == 4 spaces! */ - #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H @@ -49,142 +48,145 @@ #include "bsp/board_mcu.h" #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 - #error "ESP32-Sx should use IDF's FreeRTOSConfig.h" +#error "ESP32-Sx should use IDF's FreeRTOSConfig.h" #endif // TODO fix later #if CFG_TUSB_MCU == OPT_MCU_MM32F327X - extern u32 SystemCoreClock; +extern u32 SystemCoreClock; #else - // FIXME cause redundant-decls warnings - extern uint32_t SystemCoreClock; +// FIXME cause redundant-decls warnings +extern uint32_t SystemCoreClock; #endif #endif /* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU 0 -#define configENABLE_FPU 1 -#define configENABLE_TRUSTZONE 0 -#define configMINIMAL_SECURE_STACK_SIZE ( 1024 ) -#define configRUN_FREERTOS_SECURE_ONLY 1 +#define configENABLE_MPU 0 +#define configENABLE_FPU 1 +#define configENABLE_TRUSTZONE 0 +#define configMINIMAL_SECURE_STACK_SIZE (1024) +#define configRUN_FREERTOS_SECURE_ONLY 1 -#define configUSE_PREEMPTION 1 +#define configUSE_PREEMPTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ SystemCoreClock -#define configTICK_RATE_HZ ( 1000 ) -#define configMAX_PRIORITIES ( 5 ) -#define configMINIMAL_STACK_SIZE ( 128 ) -#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 ) -#define configMAX_TASK_NAME_LEN 16 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configQUEUE_REGISTRY_SIZE 4 -#define configUSE_QUEUE_SETS 0 -#define configUSE_TIME_SLICING 0 -#define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 - -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configSUPPORT_DYNAMIC_ALLOCATION 0 +#define configCPU_CLOCK_HZ SystemCoreClock +#define configTICK_RATE_HZ (1000) +#define configMAX_PRIORITIES (5) +#define configMINIMAL_STACK_SIZE (128) +#define configTOTAL_HEAP_SIZE (configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024) +#define configMAX_TASK_NAME_LEN 16 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configQUEUE_REGISTRY_SIZE 4 +#define configUSE_QUEUE_SETS 0 +#define configUSE_TIME_SLICING 0 +#define configUSE_NEWLIB_REENTRANT 0 +#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 + +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 0 /* Hook function related definitions. */ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configCHECK_HANDLER_INSTALLATION 0 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configCHECK_HANDLER_INSTALLATION 0 /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS 0 -#define configUSE_TRACE_FACILITY 1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#define configGENERATE_RUN_TIME_STATS 0 +#define configUSE_TRACE_FACILITY 1 // legacy trace +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES 2 +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 /* Software timer related definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2) -#define configTIMER_QUEUE_LENGTH 32 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 2) +#define configTIMER_QUEUE_LENGTH 32 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet 0 -#define INCLUDE_uxTaskPriorityGet 0 -#define INCLUDE_vTaskDelete 0 -#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR 0 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 -#define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 -#define INCLUDE_xTaskGetIdleTaskHandle 0 +#define INCLUDE_vTaskPrioritySet 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskSuspend \ + 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY +#define INCLUDE_xResumeFromISR 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName 0 -#define INCLUDE_eTaskGetState 0 -#define INCLUDE_xEventGroupSetBitFromISR 0 -#define INCLUDE_xTimerPendFunctionCall 0 +#define INCLUDE_pcTaskGetTaskName 0 +#define INCLUDE_eTaskGetState 0 +#define INCLUDE_xEventGroupSetBitFromISR 0 +#define INCLUDE_xTimerPendFunctionCall 0 #ifdef __RX__ /* Renesas RX series */ -#define vSoftwareInterruptISR INT_Excep_ICU_SWINT -#define vTickISR INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2) -#define configKERNEL_INTERRUPT_PRIORITY 1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 +#define vSoftwareInterruptISR INT_Excep_ICU_SWINT +#define vTickISR INT_Excep_CMT0_CMI0 +#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ / 2) +#define configKERNEL_INTERRUPT_PRIORITY 1 +#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 #else /* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler -#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler +#define xPortSysTickHandler SysTick_Handler +#define vPortSVCHandler SVC_Handler //--------------------------------------------------------------------+ // Interrupt nesting behavior configuration. //--------------------------------------------------------------------+ #if defined(__NVIC_PRIO_BITS) - // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h - #define configPRIO_BITS __NVIC_PRIO_BITS +// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h +#define configPRIO_BITS __NVIC_PRIO_BITS #elif defined(__ECLIC_INTCTLBITS) - // RISC-V Bumblebee core from nuclei - #define configPRIO_BITS __ECLIC_INTCTLBITS +// RISC-V Bumblebee core from nuclei +#define configPRIO_BITS __ECLIC_INTCTLBITS #elif defined(__IASMARM__) - // FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. - // Therefore we will hard coded it to minimum value of 2 to get pass ci build. - // IAR user must update this to correct value of the target MCU - #message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" - #define configPRIO_BITS 2 +// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. +// Therefore we will hard coded it to minimum value of 2 to get pass ci build. +// IAR user must update this to correct value of the target MCU +#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" +#define configPRIO_BITS 2 #else - #error "FreeRTOS configPRIO_BITS to be defined" +#error "FreeRTOS configPRIO_BITS to be defined" #endif /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1<= DISK_BLOCK_NUM ) return -1; + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) + return -1; - uint8_t const* addr = msc_disk[lba] + offset; - memcpy(buffer, addr, bufsize); + uint8_t const *addr = msc_disk[lba] + offset; + memcpy(buffer, addr, bufsize); - return (int32_t) bufsize; + return (int32_t)bufsize; } // Callback invoked when received WRITE10 command. // Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, + uint32_t bufsize) { - (void) lun; + (void)lun; - // out of ramdisk - if ( lba >= DISK_BLOCK_NUM ) return -1; + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) + return -1; #ifndef CFG_EXAMPLE_MSC_READONLY - uint8_t* addr = msc_disk[lba] + offset; - memcpy(addr, buffer, bufsize); + uint8_t *addr = msc_disk[lba] + offset; + memcpy(addr, buffer, bufsize); #else - (void) lba; (void) offset; (void) buffer; + (void)lba; + (void)offset; + (void)buffer; #endif - return (int32_t) bufsize; + return (int32_t)bufsize; } // Callback invoked when received an SCSI command not in built-in list below // - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE // - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) +int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) { - // read10 & write10 has their own callback and MUST not be handled here + // read10 & write10 has their own callback and MUST not be handled here - void const* response = NULL; - int32_t resplen = 0; + void const *response = NULL; + int32_t resplen = 0; - // most scsi handled is input - bool in_xfer = true; + // most scsi handled is input + bool in_xfer = true; - switch (scsi_cmd[0]) - { + switch (scsi_cmd[0]) { default: - // Set Sense = Invalid Command Operation - tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - - // negative means error -> tinyusb could stall and/or response with failed status - resplen = -1; - break; - } - - // return resplen must not larger than bufsize - if ( resplen > bufsize ) resplen = bufsize; - - if ( response && (resplen > 0) ) - { - if(in_xfer) - { - memcpy(buffer, response, (size_t) resplen); - }else - { - // SCSI output + // Set Sense = Invalid Command Operation + tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + + // negative means error -> tinyusb could stall and/or response with failed status + resplen = -1; + break; + } + + // return resplen must not larger than bufsize + if (resplen > bufsize) + resplen = bufsize; + + if (response && (resplen > 0)) { + if (in_xfer) { + memcpy(buffer, response, (size_t)resplen); + } else { + // SCSI output + } } - } - return (int32_t) resplen; + return (int32_t)resplen; } #endif diff --git a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h index e743c914842..94bea0c6565 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -55,24 +55,24 @@ // This examples use FreeRTOS #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_FREERTOS +#define CFG_TUSB_OS OPT_OS_FREERTOS #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos/ +#define CFG_TUSB_OS_INC_PATH freertos / #endif // can be defined by compiler in DEBUG build #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -86,7 +86,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -94,28 +94,28 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 1 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 1 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE 512 +#define CFG_TUD_MSC_EP_BUFSIZE 512 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c index 917b73e10ab..80664f0329d 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c @@ -32,175 +32,167 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_CDC = 0, - ITF_NUM_CDC_DATA, - ITF_NUM_MSC, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_CDC = 0, ITF_NUM_CDC_DATA, ITF_NUM_MSC, ITF_NUM_TOTAL }; -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x82 - #define EPNUM_MSC_OUT 0x05 - #define EPNUM_MSC_IN 0x85 +#define EPNUM_MSC_OUT 0x05 +#define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_SAMG - // SAMG doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x83 +// SAMG doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x83 - #define EPNUM_MSC_OUT 0x04 - #define EPNUM_MSC_IN 0x85 +#define EPNUM_MSC_OUT 0x04 +#define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // MAX32 doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x83 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// MAX32 doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x83 - #define EPNUM_MSC_OUT 0x04 - #define EPNUM_MSC_IN 0x85 +#define EPNUM_MSC_OUT 0x04 +#define EPNUM_MSC_IN 0x85 #else - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x82 +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x82 - #define EPNUM_MSC_OUT 0x03 - #define EPNUM_MSC_IN 0x83 +#define EPNUM_MSC_OUT 0x03 +#define EPNUM_MSC_IN 0x83 #endif -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) -uint8_t const desc_fs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_fs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), }; #if TUD_OPT_HIGH_SPEED // Per USB specs: high speed capable device must report device_qualifier and other_speed_configuration // high speed configuration -uint8_t const desc_hs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 512), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 512), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), }; // other speed configuration uint8_t desc_other_speed_config[CONFIG_TOTAL_LEN]; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed -tusb_desc_device_qualifier_t const desc_device_qualifier = -{ - .bLength = sizeof(tusb_desc_device_qualifier_t), - .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, - .bcdUSB = USB_BCD, - - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .bNumConfigurations = 0x01, - .bReserved = 0x00 +tusb_desc_device_qualifier_t const desc_device_qualifier = { + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = USB_BCD, + + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 0x01, + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const* tud_descriptor_device_qualifier_cb(void) +uint8_t const *tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const*) &desc_device_qualifier; + return (uint8_t const *)&desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - // Note: the descriptor type is OHER_SPEED_CONFIG instead of CONFIG - memcpy(desc_other_speed_config, - (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration, - CONFIG_TOTAL_LEN); + // if link speed is high return fullspeed config, and vice versa + // Note: the descriptor type is OHER_SPEED_CONFIG instead of CONFIG + memcpy(desc_other_speed_config, + (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration, + CONFIG_TOTAL_LEN); - desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; + desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; - return desc_other_speed_config; + return desc_other_speed_config; } #endif // highspeed @@ -208,15 +200,15 @@ uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -226,63 +218,65 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB CDC", // 4: CDC Interface - "TinyUSB MSC", // 5: MSC Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB CDC", // 4: CDC Interface + "TinyUSB MSC", // 5: MSC Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/cdc_app.c b/Libraries/tinyusb/examples/device/cdc_uac2/src/cdc_app.c index 2166c1d6bad..e2c152ebd9b 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/cdc_app.c +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/cdc_app.c @@ -31,42 +31,38 @@ // Invoked when cdc when line state changed e.g connected/disconnected void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { - (void) itf; - (void) rts; + (void)itf; + (void)rts; - if (dtr) - { - // Terminal connected - } - else - { - // Terminal disconnected - } + if (dtr) { + // Terminal connected + } else { + // Terminal disconnected + } } // Invoked when CDC interface received data from host void tud_cdc_rx_cb(uint8_t itf) { - uint8_t buf[64]; - uint32_t count; + uint8_t buf[64]; + uint32_t count; - // connected() check for DTR bit - // Most but not all terminal client set this when making connection - if (tud_cdc_connected()) - { - if (tud_cdc_available()) // data is available - { - count = tud_cdc_n_read(itf, buf, sizeof(buf)); - (void) count; + // connected() check for DTR bit + // Most but not all terminal client set this when making connection + if (tud_cdc_connected()) { + if (tud_cdc_available()) // data is available + { + count = tud_cdc_n_read(itf, buf, sizeof(buf)); + (void)count; - tud_cdc_n_write(itf, buf, count); - tud_cdc_n_write_flush(itf); - // dummy code to check that cdc serial is responding - board_led_write(0); - board_delay(50); - board_led_write(1); - board_delay(50); - board_led_write(0); + tud_cdc_n_write(itf, buf, count); + tud_cdc_n_write_flush(itf); + // dummy code to check that cdc serial is responding + board_led_write(0); + board_delay(50); + board_led_write(1); + board_delay(50); + board_led_write(0); + } } - } } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/common.h b/Libraries/tinyusb/examples/device/cdc_uac2/src/common.h index f281024c7a0..dbc1ce167f7 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/common.h +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/common.h @@ -7,28 +7,26 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum -{ - BLINK_STREAMING = 25, - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_STREAMING = 25, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; -enum -{ - VOLUME_CTRL_0_DB = 0, - VOLUME_CTRL_10_DB = 2560, - VOLUME_CTRL_20_DB = 5120, - VOLUME_CTRL_30_DB = 7680, - VOLUME_CTRL_40_DB = 10240, - VOLUME_CTRL_50_DB = 12800, - VOLUME_CTRL_60_DB = 15360, - VOLUME_CTRL_70_DB = 17920, - VOLUME_CTRL_80_DB = 20480, - VOLUME_CTRL_90_DB = 23040, - VOLUME_CTRL_100_DB = 25600, - VOLUME_CTRL_SILENCE = 0x8000, +enum { + VOLUME_CTRL_0_DB = 0, + VOLUME_CTRL_10_DB = 2560, + VOLUME_CTRL_20_DB = 5120, + VOLUME_CTRL_30_DB = 7680, + VOLUME_CTRL_40_DB = 10240, + VOLUME_CTRL_50_DB = 12800, + VOLUME_CTRL_60_DB = 15360, + VOLUME_CTRL_70_DB = 17920, + VOLUME_CTRL_80_DB = 20480, + VOLUME_CTRL_90_DB = 23040, + VOLUME_CTRL_100_DB = 25600, + VOLUME_CTRL_SILENCE = 0x8000, }; #endif diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/main.c b/Libraries/tinyusb/examples/device/cdc_uac2/src/main.c index 25b2cd9a52c..3e2d04b9826 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/main.c +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/main.c @@ -43,28 +43,27 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); #if (CFG_TUSB_MCU == OPT_MCU_RP2040) - stdio_init_all(); + stdio_init_all(); #endif - TU_LOG1("CDC UAC2 example running\r\n"); + TU_LOG1("CDC UAC2 example running\r\n"); - while (1) - { - tud_task(); // TinyUSB device task - led_blinking_task(); + while (1) { + tud_task(); // TinyUSB device task + led_blinking_task(); #if (CFG_TUSB_MCU == OPT_MCU_RP2040) - // printf("Hello, world!\r\n"); + // printf("Hello, world!\r\n"); #endif - } + } - return 0; + return 0; } //--------------------------------------------------------------------+ @@ -74,13 +73,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -88,12 +87,12 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/tusb_config.h b/Libraries/tinyusb/examples/device/cdc_uac2/src/tusb_config.h index 93489cf6267..2e90ed5fb9a 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/tusb_config.h @@ -39,12 +39,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -57,18 +57,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -82,7 +82,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -90,82 +90,103 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_HEADSET_STEREO_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_HEADSET_STEREO_DESC_LEN // How many formats are used, need to adjust USB descriptor if changed -#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 +#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 // Audio format type I specifications #if defined(__RX__) -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 48000 // 16bit/48kHz is the best quality for Renesas RX +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 48000 // 16bit/48kHz is the best quality for Renesas RX #else -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 96000 // 24bit/96kHz is the best quality for full-speed, high-speed is needed beyond this +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE \ + 96000 // 24bit/96kHz is the best quality for full-speed, high-speed is needed beyond this #endif -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX 1 // Changed +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX 1 // Changed // 16bit in 16bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX 16 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 #if defined(__RX__) // 8bit in 8bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 8 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 8 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 1 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 8 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 1 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 8 #else // 24bit in 32bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 24 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 #endif // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN) -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ + TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN) +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX \ + TU_MAX( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT) -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ \ + TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT) +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX \ + TU_MAX( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 2 +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 2 // Size of control request buffer -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE 64 -#define CFG_TUD_CDC_TX_BUFSIZE 64 +#define CFG_TUD_CDC_RX_BUFSIZE 64 +#define CFG_TUD_CDC_TX_BUFSIZE 64 #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/uac2_app.c b/Libraries/tinyusb/examples/device/cdc_uac2/src/uac2_app.c index c57d98a1a78..b342e96ffd9 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/uac2_app.c +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/uac2_app.c @@ -37,17 +37,17 @@ //--------------------------------------------------------------------+ // List of supported sample rates -const uint32_t sample_rates[] = {44100, 48000}; -uint32_t current_sample_rate = 44100; +const uint32_t sample_rates[] = { 44100, 48000 }; +uint32_t current_sample_rate = 44100; -#define N_SAMPLE_RATES TU_ARRAY_SIZE(sample_rates) +#define N_SAMPLE_RATES TU_ARRAY_SIZE(sample_rates) uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 -int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 +int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 +int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 // Buffer for microphone data int32_t mic_buf[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ / 4]; @@ -56,150 +56,145 @@ int32_t spk_buf[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ / 4]; // Speaker data size received in the last frame int spk_data_size; // Resolution per format -const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = {CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX}; +const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = { + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX +}; // Current resolution, update on format change uint8_t current_resolution; // Helper for clock get requests static bool tud_audio_clock_get_request(uint8_t rhport, audio_control_request_t const *request) { - TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - - if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) - { - if (request->bRequest == AUDIO_CS_REQ_CUR) - { - TU_LOG1("Clock get current freq %" PRIu32 "\r\n", current_sample_rate); - - audio_control_cur_4_t curf = { (int32_t) tu_htole32(current_sample_rate) }; - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); + + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { + if (request->bRequest == AUDIO_CS_REQ_CUR) { + TU_LOG1("Clock get current freq %" PRIu32 "\r\n", current_sample_rate); + + audio_control_cur_4_t curf = { (int32_t)tu_htole32(current_sample_rate) }; + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); + } else if (request->bRequest == AUDIO_CS_REQ_RANGE) { + audio_control_range_4_n_t(N_SAMPLE_RATES) + rangef = { .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) }; + TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); + for (uint8_t i = 0; i < N_SAMPLE_RATES; i++) { + rangef.subrange[i].bMin = (int32_t)sample_rates[i]; + rangef.subrange[i].bMax = (int32_t)sample_rates[i]; + rangef.subrange[i].bRes = 0; + TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, + (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); + } + + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); + } + } else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && + request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_1_t cur_valid = { .bCur = 1 }; + TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); } - else if (request->bRequest == AUDIO_CS_REQ_RANGE) - { - audio_control_range_4_n_t(N_SAMPLE_RATES) rangef = - { - .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) - }; - TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); - for(uint8_t i = 0; i < N_SAMPLE_RATES; i++) - { - rangef.subrange[i].bMin = (int32_t) sample_rates[i]; - rangef.subrange[i].bMax = (int32_t) sample_rates[i]; - rangef.subrange[i].bRes = 0; - TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); - } - - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); - } - } - else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && - request->bRequest == AUDIO_CS_REQ_CUR) - { - audio_control_cur_1_t cur_valid = { .bCur = 1 }; - TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); - } - TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - return false; + TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + return false; } // Helper for clock set requests -static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) +static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, + uint8_t const *buf) { - (void)rhport; + (void)rhport; - TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); + TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) - { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); - current_sample_rate = (uint32_t) ((audio_control_cur_4_t const *)buf)->bCur; + current_sample_rate = (uint32_t)((audio_control_cur_4_t const *)buf)->bCur; - TU_LOG1("Clock set current freq: %" PRIu32 "\r\n", current_sample_rate); + TU_LOG1("Clock set current freq: %" PRIu32 "\r\n", current_sample_rate); - return true; - } - else - { - TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - return false; - } + return true; + } else { + TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + return false; + } } // Helper for feature unit get requests -static bool tud_audio_feature_unit_get_request(uint8_t rhport, audio_control_request_t const *request) +static bool tud_audio_feature_unit_get_request(uint8_t rhport, + audio_control_request_t const *request) { - TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - - if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) - { - audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; - TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); - } - else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) - { - if (request->bRequest == AUDIO_CS_REQ_RANGE) - { - audio_control_range_2_n_t(1) range_vol = { - .wNumSubRanges = tu_htole16(1), - .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), tu_htole16(VOLUME_CTRL_0_DB), tu_htole16(256) } - }; - TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, - range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, range_vol.subrange[0].bRes / 256); - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); - } - else if (request->bRequest == AUDIO_CS_REQ_CUR) - { - audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; - TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); + + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; + TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); + } else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { + if (request->bRequest == AUDIO_CS_REQ_RANGE) { + audio_control_range_2_n_t(1) + range_vol = { .wNumSubRanges = tu_htole16(1), + .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), + tu_htole16(VOLUME_CTRL_0_DB), + tu_htole16(256) } }; + TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, + range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, + range_vol.subrange[0].bRes / 256); + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); + } else if (request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; + TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); + } } - } - TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); + TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); - return false; + return false; } // Helper for feature unit set requests -static bool tud_audio_feature_unit_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) +static bool tud_audio_feature_unit_set_request(uint8_t rhport, + audio_control_request_t const *request, + uint8_t const *buf) { - (void)rhport; + (void)rhport; - TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); + TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) - { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); - mute[request->bChannelNumber] = ((audio_control_cur_1_t const *)buf)->bCur; + mute[request->bChannelNumber] = ((audio_control_cur_1_t const *)buf)->bCur; - TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, mute[request->bChannelNumber]); + TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, + mute[request->bChannelNumber]); - return true; - } - else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) - { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); + return true; + } else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); - volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; + volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; - TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, volume[request->bChannelNumber] / 256); + TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, + volume[request->bChannelNumber] / 256); - return true; - } - else - { - TU_LOG1("Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", + return true; + } else { + TU_LOG1( + "Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", request->bEntityID, request->bControlSelector, request->bRequest); - return false; - } + return false; + } } //--------------------------------------------------------------------+ @@ -209,94 +204,95 @@ static bool tud_audio_feature_unit_set_request(uint8_t rhport, audio_control_req // Invoked when audio class specific get request received for an entity bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - audio_control_request_t const *request = (audio_control_request_t const *)p_request; - - if (request->bEntityID == UAC2_ENTITY_CLOCK) - return tud_audio_clock_get_request(rhport, request); - if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) - return tud_audio_feature_unit_get_request(rhport, request); - else - { - TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - } - return false; + audio_control_request_t const *request = (audio_control_request_t const *)p_request; + + if (request->bEntityID == UAC2_ENTITY_CLOCK) + return tud_audio_clock_get_request(rhport, request); + if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) + return tud_audio_feature_unit_get_request(rhport, request); + else { + TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + } + return false; } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *buf) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *buf) { - audio_control_request_t const *request = (audio_control_request_t const *)p_request; + audio_control_request_t const *request = (audio_control_request_t const *)p_request; - if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) - return tud_audio_feature_unit_set_request(rhport, request, buf); - if (request->bEntityID == UAC2_ENTITY_CLOCK) - return tud_audio_clock_set_request(rhport, request, buf); - TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); + if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) + return tud_audio_feature_unit_set_request(rhport, request, buf); + if (request->bEntityID == UAC2_ENTITY_CLOCK) + return tud_audio_clock_set_request(rhport, request, buf); + TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); - return false; + return false; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void)rhport; + (void)rhport; - uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) { - // Audio streaming stop - blink_interval_ms = BLINK_MOUNTED; - } + if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) { + // Audio streaming stop + blink_interval_ms = BLINK_MOUNTED; + } - return true; + return true; } -bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void)rhport; - uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - - TU_LOG2("Set interface %d alt %d\r\n", itf, alt); - if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) { - // Audio streaming start - blink_interval_ms = BLINK_STREAMING; - } - - // Clear buffer when streaming format is changed - spk_data_size = 0; - if(alt != 0) - { - current_resolution = resolutions_per_format[alt-1]; - } - - return true; + (void)rhport; + uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + + TU_LOG2("Set interface %d alt %d\r\n", itf, alt); + if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) { + // Audio streaming start + blink_interval_ms = BLINK_STREAMING; + } + + // Clear buffer when streaming format is changed + spk_data_size = 0; + if (alt != 0) { + current_resolution = resolutions_per_format[alt - 1]; + } + + return true; } -bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) +bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, + uint8_t ep_out, uint8_t cur_alt_setting) { - (void)rhport; - (void)func_id; - (void)ep_out; - (void)cur_alt_setting; + (void)rhport; + (void)func_id; + (void)ep_out; + (void)cur_alt_setting; - spk_data_size = tud_audio_read(spk_buf, n_bytes_received); - tud_audio_write(spk_buf, n_bytes_received); + spk_data_size = tud_audio_read(spk_buf, n_bytes_received); + tud_audio_write(spk_buf, n_bytes_received); - return true; + return true; } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, + uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - // This callback could be used to fill microphone data separately - return true; + // This callback could be used to fill microphone data separately + return true; } //--------------------------------------------------------------------+ @@ -304,13 +300,14 @@ bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, u //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) return; - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; + board_led_write(led_state); + led_state = 1 - led_state; } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.c index ab1a2ee839a..58c682adc65 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.c @@ -35,110 +35,112 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN + CFG_TUD_CDC * TUD_CDC_DESC_LEN) +#define CONFIG_TOTAL_LEN \ + (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN + \ + CFG_TUD_CDC * TUD_CDC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_AUDIO_IN 0x03 - #define EPNUM_AUDIO_OUT 0x03 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_AUDIO_IN 0x03 +#define EPNUM_AUDIO_OUT 0x03 - #define EPNUM_CDC_NOTIF 0x84 - #define EPNUM_CDC_OUT 0x05 - #define EPNUM_CDC_IN 0x85 +#define EPNUM_CDC_NOTIF 0x84 +#define EPNUM_CDC_OUT 0x05 +#define EPNUM_CDC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_NRF5X - // ISO endpoints for NRF5x are fixed to 0x08 (0x88) - #define EPNUM_AUDIO_IN 0x08 - #define EPNUM_AUDIO_OUT 0x08 +// ISO endpoints for NRF5x are fixed to 0x08 (0x88) +#define EPNUM_AUDIO_IN 0x08 +#define EPNUM_AUDIO_OUT 0x08 - #define EPNUM_CDC_NOTIF 0x81 - #define EPNUM_CDC_OUT 0x02 - #define EPNUM_CDC_IN 0x82 +#define EPNUM_CDC_NOTIF 0x81 +#define EPNUM_CDC_OUT 0x02 +#define EPNUM_CDC_IN 0x82 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X - // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_AUDIO_IN 0x01 - #define EPNUM_AUDIO_OUT 0x02 +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X +// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_AUDIO_IN 0x01 +#define EPNUM_AUDIO_OUT 0x02 - #define EPNUM_CDC_NOTIF 0x83 - #define EPNUM_CDC_OUT 0x04 - #define EPNUM_CDC_IN 0x85 +#define EPNUM_CDC_NOTIF 0x83 +#define EPNUM_CDC_OUT 0x04 +#define EPNUM_CDC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X - // FT9XX doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_AUDIO_IN 0x01 - #define EPNUM_AUDIO_OUT 0x02 +// FT9XX doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_AUDIO_IN 0x01 +#define EPNUM_AUDIO_OUT 0x02 - #define EPNUM_CDC_NOTIF 0x83 - #define EPNUM_CDC_OUT 0x04 - #define EPNUM_CDC_IN 0x85 +#define EPNUM_CDC_NOTIF 0x83 +#define EPNUM_CDC_OUT 0x04 +#define EPNUM_CDC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // MAX32 doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_AUDIO_IN 0x01 - #define EPNUM_AUDIO_OUT 0x02 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// MAX32 doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_AUDIO_IN 0x01 +#define EPNUM_AUDIO_OUT 0x02 - #define EPNUM_CDC_NOTIF 0x83 - #define EPNUM_CDC_OUT 0x04 - #define EPNUM_CDC_IN 0x85 +#define EPNUM_CDC_NOTIF 0x83 +#define EPNUM_CDC_OUT 0x04 +#define EPNUM_CDC_IN 0x85 #else - #define EPNUM_AUDIO_IN 0x01 - #define EPNUM_AUDIO_OUT 0x01 +#define EPNUM_AUDIO_IN 0x01 +#define EPNUM_AUDIO_OUT 0x01 - #define EPNUM_CDC_NOTIF 0x83 - #define EPNUM_CDC_OUT 0x04 - #define EPNUM_CDC_IN 0x84 +#define EPNUM_CDC_NOTIF 0x83 +#define EPNUM_CDC_OUT 0x04 +#define EPNUM_CDC_IN 0x84 #endif -uint8_t const desc_configuration[] = -{ +uint8_t const desc_configuration[] = { // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), @@ -152,10 +154,10 @@ uint8_t const desc_configuration[] = // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -164,64 +166,66 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB headset", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB Speakers", // 4: Audio Interface - "TinyUSB Microphone", // 5: Audio Interface - "TinyUSB CDC", // 6: Audio Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB headset", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB Speakers", // 4: Audio Interface + "TinyUSB Microphone", // 5: Audio Interface + "TinyUSB CDC", // 6: Audio Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.h index 736feeefea7..8939bf75666 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.h @@ -30,129 +30,200 @@ // #include "tusb.h" // Unit numbers are arbitrary selected -#define UAC2_ENTITY_CLOCK 0x04 +#define UAC2_ENTITY_CLOCK 0x04 // Speaker path -#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 -#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 +#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 +#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 #define UAC2_ENTITY_SPK_OUTPUT_TERMINAL 0x03 // Microphone path -#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 +#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 #define UAC2_ENTITY_MIC_OUTPUT_TERMINAL 0x13 -enum -{ - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING_SPK, - ITF_NUM_AUDIO_STREAMING_MIC, - ITF_NUM_CDC, - ITF_NUM_CDC_DATA, - ITF_NUM_TOTAL +enum { + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING_SPK, + ITF_NUM_AUDIO_STREAMING_MIC, + ITF_NUM_CDC, + ITF_NUM_CDC_DATA, + ITF_NUM_TOTAL }; -#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ - + TUD_AUDIO_DESC_STD_AC_LEN\ - + TUD_AUDIO_DESC_CS_AC_LEN\ - + TUD_AUDIO_DESC_CLK_SRC_LEN\ - + TUD_AUDIO_DESC_INPUT_TERM_LEN\ - + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN\ - + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ - + TUD_AUDIO_DESC_INPUT_TERM_LEN\ - + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ - /* Interface 1, Alternate 2 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ - /* Interface 2, Alternate 0 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - /* Interface 2, Alternate 1 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ - /* Interface 2, Alternate 2 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) +#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN \ + (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ + TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 1, Alternate 0 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 1, Alternate 2 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 2, Alternate 0 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 2, Alternate 1 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 2, Alternate 2 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) -#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin) \ - /* Standard Interface Association Descriptor (IAD) */\ - TUD_AUDIO_DESC_IAD(/*_firstitfs*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ 3, /*_stridx*/ 0x00),\ - /* Standard AC Interface Descriptor(4.7.1) */\ - TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ - /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ - TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ - /* Clock Source Descriptor(4.7.2.1) */\ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, /*_assocTerm*/ 0x00, /*_stridx*/ 0x00), \ - /* Input Terminal Descriptor(4.7.2.4) */\ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ - /* Feature Unit Descriptor(4.7.2.8) */\ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(/*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_stridx*/ 0x00),\ - /* Output Terminal Descriptor(4.7.2.5) */\ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ - /* Input Terminal Descriptor(4.7.2.4) */\ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ - /* Output Terminal Descriptor(4.7.2.5) */\ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x05),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 1 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ - /* Interface 1, Alternate 2 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x04),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 2, Alternate 1 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ - /* Interface 2, Alternate 2 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin) \ + /* Standard Interface Association Descriptor (IAD) */ \ + TUD_AUDIO_DESC_IAD(/*_firstitfs*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ 3, \ + /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ + TUD_AUDIO_DESC_STD_AC( \ + /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x00, \ + /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ + TUD_AUDIO_DESC_CS_AC( \ + /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, \ + /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + \ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN, \ + /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, \ + /*_assocTerm*/ 0x00, \ + /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ + TUD_AUDIO_DESC_INPUT_TERM( \ + /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, \ + /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ + /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ + /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL( \ + /*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, \ + /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ \ + (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ \ + (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ \ + (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), \ + /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, \ + /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, \ + /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, \ + /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ + TUD_AUDIO_DESC_INPUT_TERM( \ + /*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, \ + /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ + /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ + /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, \ + /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, \ + /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), \ + /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ \ + 0x05), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x05), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epout, /*_attr*/ \ + (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | \ + TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, \ + /*_lockdelay*/ 0x0001), /* Interface 1, Alternate 2 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x05), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epout, /*_attr*/ \ + (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | \ + TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ \ + 0x0001), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */ \ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), \ + /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ \ + 0x04), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 2, Alternate 1 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x04), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epin, /*_attr*/ \ + (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ + TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000), /* Interface 2, Alternate 2 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x04), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epin, /*_attr*/ \ + (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ + TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000) #endif diff --git a/Libraries/tinyusb/examples/device/dfu/src/main.c b/Libraries/tinyusb/examples/device/dfu/src/main.c index 81fc0a62c26..ec13731ab81 100644 --- a/Libraries/tinyusb/examples/device/dfu/src/main.c +++ b/Libraries/tinyusb/examples/device/dfu/src/main.c @@ -23,7 +23,7 @@ * */ - /* +/* * After device is enumerated in dfu mode run the following commands * * To transfer firmware from host to device (best to test with text file) @@ -48,21 +48,18 @@ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTYPES //--------------------------------------------------------------------+ -const char* upload_image[2]= -{ - "Hello world from TinyUSB DFU! - Partition 0", - "Hello world from TinyUSB DFU! - Partition 1" -}; +const char *upload_image[2] = { "Hello world from TinyUSB DFU! - Partition 0", + "Hello world from TinyUSB DFU! - Partition 1" }; /* Blink pattern * - 250 ms : device not mounted * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -72,20 +69,19 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - } + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -95,13 +91,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -109,14 +105,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -129,39 +125,35 @@ void tud_resume_cb(void) // During this period, USB host won't try to communicate with us. uint32_t tud_dfu_get_timeout_cb(uint8_t alt, uint8_t state) { - if ( state == DFU_DNBUSY ) - { - // For this example - // - Atl0 Flash is fast : 1 ms - // - Alt1 EEPROM is slow: 100 ms - return (alt == 0) ? 1 : 100; - } - else if (state == DFU_MANIFEST) - { - // since we don't buffer entire image and do any flashing in manifest stage - return 0; - } + if (state == DFU_DNBUSY) { + // For this example + // - Atl0 Flash is fast : 1 ms + // - Alt1 EEPROM is slow: 100 ms + return (alt == 0) ? 1 : 100; + } else if (state == DFU_MANIFEST) { + // since we don't buffer entire image and do any flashing in manifest stage + return 0; + } - return 0; + return 0; } // Invoked when received DFU_DNLOAD (wLength>0) following by DFU_GETSTATUS (state=DFU_DNBUSY) requests // This callback could be returned before flashing op is complete (async). // Once finished flashing, application must call tud_dfu_finish_flashing() -void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const* data, uint16_t length) +void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const *data, uint16_t length) { - (void) alt; - (void) block_num; + (void)alt; + (void)block_num; - //printf("\r\nReceived Alt %u BlockNum %u of length %u\r\n", alt, wBlockNum, length); + //printf("\r\nReceived Alt %u BlockNum %u of length %u\r\n", alt, wBlockNum, length); - for(uint16_t i=0; i max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/dfu_runtime/src/main.c b/Libraries/tinyusb/examples/device/dfu_runtime/src/main.c index 170dde93239..5bb94f09948 100644 --- a/Libraries/tinyusb/examples/device/dfu_runtime/src/main.c +++ b/Libraries/tinyusb/examples/device/dfu_runtime/src/main.c @@ -53,11 +53,11 @@ * - 0 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_DFU_MODE = 100, - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_DFU_MODE = 100, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -67,20 +67,19 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - } + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -90,13 +89,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -104,20 +103,20 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } // Invoked on DFU_DETACH request to reboot to the bootloader void tud_dfu_runtime_reboot_to_dfu_cb(void) { - blink_interval_ms = BLINK_DFU_MODE; + blink_interval_ms = BLINK_DFU_MODE; } //--------------------------------------------------------------------+ @@ -126,13 +125,14 @@ void tud_dfu_runtime_reboot_to_dfu_cb(void) void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/dfu_runtime/src/tusb_config.h b/Libraries/tinyusb/examples/device/dfu_runtime/src/tusb_config.h index fa1ae6ed32a..c1d6e4a72cb 100644 --- a/Libraries/tinyusb/examples/device/dfu_runtime/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/dfu_runtime/src/tusb_config.h @@ -9,7 +9,7 @@ #define TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -18,12 +18,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -36,18 +36,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -61,7 +61,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -69,7 +69,7 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// @@ -77,7 +77,7 @@ #define CFG_TUD_DFU_RUNTIME 1 #ifdef __cplusplus - } +} #endif #endif /* TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c index 7ac53d255b1..0a42e228aa8 100644 --- a/Libraries/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c @@ -33,80 +33,74 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, - #if CFG_TUD_CDC +#if CFG_TUD_CDC // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - #else - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - #endif + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, +#else + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, +#endif - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_DFU_RT, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_DFU_RT, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_DFU_RT_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_DFU_RT_DESC_LEN) -uint8_t const desc_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, attributes, detach timeout, transfer size */ - TUD_DFU_RT_DESCRIPTOR(ITF_NUM_DFU_RT, 4, 0x0d, 1000, 4096), + // Interface number, string index, attributes, detach timeout, transfer size */ + TUD_DFU_RT_DESCRIPTOR(ITF_NUM_DFU_RT, 4, 0x0d, 1000, 4096), }; - // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -115,62 +109,64 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB DFU runtime", // 4: DFU runtime +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB DFU runtime", // 4: DFU runtime }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/dynamic_configuration/src/main.c b/Libraries/tinyusb/examples/device/dynamic_configuration/src/main.c index b6409c8e1e3..cc76c3f455d 100644 --- a/Libraries/tinyusb/examples/device/dynamic_configuration/src/main.c +++ b/Libraries/tinyusb/examples/device/dynamic_configuration/src/main.c @@ -39,10 +39,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -54,22 +54,21 @@ void midi_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); - - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - cdc_task(); - midi_task(); - } + board_init(); + + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + cdc_task(); + midi_task(); + } } //--------------------------------------------------------------------+ @@ -79,13 +78,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -93,61 +92,57 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } - //--------------------------------------------------------------------+ // USB CDC //--------------------------------------------------------------------+ void cdc_task(void) { - if ( tud_cdc_connected() ) - { - // connected and there are data available - if ( tud_cdc_available() ) - { - uint8_t buf[64]; + if (tud_cdc_connected()) { + // connected and there are data available + if (tud_cdc_available()) { + uint8_t buf[64]; - // read and echo back - uint32_t count = tud_cdc_read(buf, sizeof(buf)); + // read and echo back + uint32_t count = tud_cdc_read(buf, sizeof(buf)); - for(uint32_t i=0; i= sizeof(note_sequence)) note_pos = 0; + // If we are at the end of the sequence, start over. + if (note_pos >= sizeof(note_sequence)) + note_pos = 0; } //--------------------------------------------------------------------+ @@ -209,13 +206,14 @@ void midi_task(void) //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c b/Libraries/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c index 10c3ac6fe6d..13fd51a2155 100644 --- a/Libraries/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c +++ b/Libraries/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c @@ -33,121 +33,125 @@ // CFG_EXAMPLE_MSC_READONLY defined #define README_CONTENTS \ -"This is tinyusb's MassStorage Class demo.\r\n\r\n\ + "This is tinyusb's MassStorage Class demo.\r\n\r\n\ If you find any bugs or get any questions, feel free to file an\r\n\ issue at github.com/hathach/tinyusb" -enum -{ - DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount - DISK_BLOCK_SIZE = 512 +enum { + DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount + DISK_BLOCK_SIZE = 512 }; #ifdef CFG_EXAMPLE_MSC_READONLY const #endif -uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ - //------------- Block0: Boot Sector -------------// - // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; - // sector_per_cluster = 1; reserved_sectors = 1; - // fat_num = 1; fat12_root_entry_num = 16; - // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; - // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; - // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; - // FAT magic code at offset 510-511 - { - 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, - 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , - 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, - - // Zero up to 2 last bytes of FAT magic code - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA - }, - - //------------- Block1: FAT12 Table -------------// - { - 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file - }, - - //------------- Block2: Root Directory -------------// - { - // first entry is volume label - 'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // second entry is readme file - 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, - 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) - }, - - //------------- Block3: Readme Content -------------// - README_CONTENTS -}; + uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { + //------------- Block0: Boot Sector -------------// + // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; + // sector_per_cluster = 1; reserved_sectors = 1; + // fat_num = 1; fat12_root_entry_num = 16; + // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; + // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; + // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; + // FAT magic code at offset 510-511 + { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, + 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T', 'i', + 'n', 'y', 'U', 'S', 'B', ' ', 'M', 'S', 'C', 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, + 0x20, 0x00, 0x00, + + // Zero up to 2 last bytes of FAT magic code + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x55, 0xAA }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, + 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file + }, + + //------------- Block2: Root Directory -------------// + { + // first entry is volume label + 'T', 'i', 'n', 'y', 'U', 'S', 'B', ' ', 'M', 'S', 'C', 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + // second entry is readme file + 'R', 'E', 'A', 'D', 'M', 'E', ' ', ' ', 'T', 'X', 'T', 0x20, 0x00, 0xC6, 0x52, 0x6D, + 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, + sizeof(README_CONTENTS) - 1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block3: Readme Content -------------// + README_CONTENTS + }; // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) +void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], + uint8_t product_rev[4]) { - (void) lun; + (void)lun; - const char vid[] = "TinyUSB"; - const char pid[] = "Mass Storage"; - const char rev[] = "1.0"; + const char vid[] = "TinyUSB"; + const char pid[] = "Mass Storage"; + const char rev[] = "1.0"; - memcpy(vendor_id , vid, strlen(vid)); - memcpy(product_id , pid, strlen(pid)); - memcpy(product_rev, rev, strlen(rev)); + memcpy(vendor_id, vid, strlen(vid)); + memcpy(product_id, pid, strlen(pid)); + memcpy(product_rev, rev, strlen(rev)); } // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted bool tud_msc_test_unit_ready_cb(uint8_t lun) { - (void) lun; + (void)lun; - return true; // RAM disk is always ready + return true; // RAM disk is always ready } // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) +void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size) { - (void) lun; + (void)lun; - *block_count = DISK_BLOCK_NUM; - *block_size = DISK_BLOCK_SIZE; + *block_count = DISK_BLOCK_NUM; + *block_size = DISK_BLOCK_SIZE; } // Invoked when received Start Stop Unit command @@ -155,96 +159,96 @@ void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_siz // - Start = 1 : active mode, if load_eject = 1 : load disk storage bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) { - (void) lun; - (void) power_condition; - - if ( load_eject ) - { - if (start) - { - // load disk storage - }else - { - // unload disk storage + (void)lun; + (void)power_condition; + + if (load_eject) { + if (start) { + // load disk storage + } else { + // unload disk storage + } } - } - return true; + return true; } // Callback invoked when received READ10 command. // Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) +int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, + uint32_t bufsize) { - (void) lun; + (void)lun; - // out of ramdisk - if ( lba >= DISK_BLOCK_NUM ) return -1; + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) + return -1; - uint8_t const* addr = msc_disk[lba] + offset; - memcpy(buffer, addr, bufsize); + uint8_t const *addr = msc_disk[lba] + offset; + memcpy(buffer, addr, bufsize); - return (int32_t) bufsize; + return (int32_t)bufsize; } // Callback invoked when received WRITE10 command. // Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, + uint32_t bufsize) { - (void) lun; + (void)lun; - // out of ramdisk - if ( lba >= DISK_BLOCK_NUM ) return -1; + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) + return -1; #ifndef CFG_EXAMPLE_MSC_READONLY - uint8_t* addr = msc_disk[lba] + offset; - memcpy(addr, buffer, bufsize); + uint8_t *addr = msc_disk[lba] + offset; + memcpy(addr, buffer, bufsize); #else - (void) lba; (void) offset; (void) buffer; + (void)lba; + (void)offset; + (void)buffer; #endif - return (int32_t) bufsize; + return (int32_t)bufsize; } // Callback invoked when received an SCSI command not in built-in list below // - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE // - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) +int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) { - // read10 & write10 has their own callback and MUST not be handled here + // read10 & write10 has their own callback and MUST not be handled here - void const* response = NULL; - int32_t resplen = 0; + void const *response = NULL; + int32_t resplen = 0; - // most scsi handled is input - bool in_xfer = true; + // most scsi handled is input + bool in_xfer = true; - switch (scsi_cmd[0]) - { + switch (scsi_cmd[0]) { default: - // Set Sense = Invalid Command Operation - tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - - // negative means error -> tinyusb could stall and/or response with failed status - resplen = -1; - break; - } - - // return resplen must not larger than bufsize - if ( resplen > bufsize ) resplen = bufsize; - - if ( response && (resplen > 0) ) - { - if(in_xfer) - { - memcpy(buffer, response, (size_t) resplen); - }else - { - // SCSI output + // Set Sense = Invalid Command Operation + tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + + // negative means error -> tinyusb could stall and/or response with failed status + resplen = -1; + break; + } + + // return resplen must not larger than bufsize + if (resplen > bufsize) + resplen = bufsize; + + if (response && (resplen > 0)) { + if (in_xfer) { + memcpy(buffer, response, (size_t)resplen); + } else { + // SCSI output + } } - } - return resplen; + return resplen; } #endif diff --git a/Libraries/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h b/Libraries/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h index b9b3878cc21..3b954527b6e 100644 --- a/Libraries/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,29 +87,29 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 1 -#define CFG_TUD_MIDI 1 -#define CFG_TUD_HID 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 1 +#define CFG_TUD_MIDI 1 +#define CFG_TUD_HID 0 +#define CFG_TUD_VENDOR 0 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // MIDI FIFO size of TX and RX -#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE 512 +#define CFG_TUD_MSC_EP_BUFSIZE 512 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c index 20f2371559d..dd94ab4fce2 100644 --- a/Libraries/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c @@ -32,9 +32,10 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) // Configuration mode // 0 : enumerated as CDC/MIDI. Board button is not pressed when enumerating @@ -44,176 +45,168 @@ static uint32_t mode = 0; //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device_0 = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device_0 = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; -tusb_desc_device_t const desc_device_1 = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0, - .bDeviceSubClass = 0, - .bDeviceProtocol = 0, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID + 11, // should be different PID than desc0 - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, +tusb_desc_device_t const desc_device_1 = { .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0, + .bDeviceSubClass = 0, + .bDeviceProtocol = 0, - .bNumConfigurations = 0x01 -}; + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .idVendor = 0xCafe, + .idProduct = + USB_PID + 11, // should be different PID than desc0 + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - mode = board_button_read(); - return (uint8_t const*) (mode ? &desc_device_1 : &desc_device_0); + mode = board_button_read(); + return (uint8_t const *)(mode ? &desc_device_1 : &desc_device_0); } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_0_NUM_CDC = 0, - ITF_0_NUM_CDC_DATA, - ITF_0_NUM_MIDI, - ITF_0_NUM_MIDI_STREAMING, - ITF_0_NUM_TOTAL +enum { + ITF_0_NUM_CDC = 0, + ITF_0_NUM_CDC_DATA, + ITF_0_NUM_MIDI, + ITF_0_NUM_MIDI_STREAMING, + ITF_0_NUM_TOTAL }; -enum -{ - ITF_1_NUM_MSC = 0, - ITF_1_NUM_TOTAL -}; +enum { ITF_1_NUM_MSC = 0, ITF_1_NUM_TOTAL }; -#define CONFIG_0_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MIDI_DESC_LEN) -#define CONFIG_1_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) +#define CONFIG_0_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MIDI_DESC_LEN) +#define CONFIG_1_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... - #define EPNUM_0_CDC_NOTIF 0x81 - #define EPNUM_0_CDC_OUT 0x02 - #define EPNUM_0_CDC_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... +#define EPNUM_0_CDC_NOTIF 0x81 +#define EPNUM_0_CDC_OUT 0x02 +#define EPNUM_0_CDC_IN 0x82 - #define EPNUM_0_MIDI_OUT 0x05 - #define EPNUM_0_MIDI_IN 0x85 +#define EPNUM_0_MIDI_OUT 0x05 +#define EPNUM_0_MIDI_IN 0x85 - #define EPNUM_1_MSC_OUT 0x02 - #define EPNUM_1_MSC_IN 0x82 +#define EPNUM_1_MSC_OUT 0x02 +#define EPNUM_1_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_SAMG - // SAMG doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_0_CDC_NOTIF 0x81 - #define EPNUM_0_CDC_OUT 0x02 - #define EPNUM_0_CDC_IN 0x83 +// SAMG doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_0_CDC_NOTIF 0x81 +#define EPNUM_0_CDC_OUT 0x02 +#define EPNUM_0_CDC_IN 0x83 - #define EPNUM_0_MIDI_OUT 0x04 - #define EPNUM_0_MIDI_IN 0x85 +#define EPNUM_0_MIDI_OUT 0x04 +#define EPNUM_0_MIDI_IN 0x85 - #define EPNUM_1_MSC_OUT 0x01 - #define EPNUM_1_MSC_IN 0x82 +#define EPNUM_1_MSC_OUT 0x01 +#define EPNUM_1_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X - // FT9XX doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_0_CDC_NOTIF 0x81 - #define EPNUM_0_CDC_OUT 0x02 - #define EPNUM_0_CDC_IN 0x83 +// FT9XX doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_0_CDC_NOTIF 0x81 +#define EPNUM_0_CDC_OUT 0x02 +#define EPNUM_0_CDC_IN 0x83 - #define EPNUM_0_MIDI_OUT 0x04 - #define EPNUM_0_MIDI_IN 0x85 +#define EPNUM_0_MIDI_OUT 0x04 +#define EPNUM_0_MIDI_IN 0x85 - #define EPNUM_1_MSC_OUT 0x01 - #define EPNUM_1_MSC_IN 0x82 +#define EPNUM_1_MSC_OUT 0x01 +#define EPNUM_1_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // FT9XX doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_0_CDC_NOTIF 0x81 - #define EPNUM_0_CDC_OUT 0x02 - #define EPNUM_0_CDC_IN 0x83 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// FT9XX doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_0_CDC_NOTIF 0x81 +#define EPNUM_0_CDC_OUT 0x02 +#define EPNUM_0_CDC_IN 0x83 - #define EPNUM_0_MIDI_OUT 0x04 - #define EPNUM_0_MIDI_IN 0x85 +#define EPNUM_0_MIDI_OUT 0x04 +#define EPNUM_0_MIDI_IN 0x85 - #define EPNUM_1_MSC_OUT 0x01 - #define EPNUM_1_MSC_IN 0x82 +#define EPNUM_1_MSC_OUT 0x01 +#define EPNUM_1_MSC_IN 0x82 #else - #define EPNUM_0_CDC_NOTIF 0x81 - #define EPNUM_0_CDC_OUT 0x02 - #define EPNUM_0_CDC_IN 0x82 +#define EPNUM_0_CDC_NOTIF 0x81 +#define EPNUM_0_CDC_OUT 0x02 +#define EPNUM_0_CDC_IN 0x82 - #define EPNUM_0_MIDI_OUT 0x03 - #define EPNUM_0_MIDI_IN 0x83 +#define EPNUM_0_MIDI_OUT 0x03 +#define EPNUM_0_MIDI_IN 0x83 - #define EPNUM_1_MSC_OUT 0x01 - #define EPNUM_1_MSC_IN 0x81 +#define EPNUM_1_MSC_OUT 0x01 +#define EPNUM_1_MSC_IN 0x81 #endif -uint8_t const desc_configuration_0[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_0_NUM_TOTAL, 0, CONFIG_0_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration_0[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_0_NUM_TOTAL, 0, CONFIG_0_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_0_NUM_CDC, 0, EPNUM_0_CDC_NOTIF, 8, EPNUM_0_CDC_OUT, EPNUM_0_CDC_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_0_NUM_CDC, 0, EPNUM_0_CDC_NOTIF, 8, EPNUM_0_CDC_OUT, EPNUM_0_CDC_IN, + TUD_OPT_HIGH_SPEED ? 512 : 64), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MIDI_DESCRIPTOR(ITF_0_NUM_MIDI, 0, EPNUM_0_MIDI_OUT, EPNUM_0_MIDI_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_0_NUM_MIDI, 0, EPNUM_0_MIDI_OUT, EPNUM_0_MIDI_IN, + TUD_OPT_HIGH_SPEED ? 512 : 64), }; +uint8_t const desc_configuration_1[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_1_NUM_TOTAL, 0, CONFIG_1_TOTAL_LEN, 0x00, 100), -uint8_t const desc_configuration_1[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_1_NUM_TOTAL, 0, CONFIG_1_TOTAL_LEN, 0x00, 100), - - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_1_NUM_MSC, 0, EPNUM_1_MSC_OUT, EPNUM_1_MSC_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_1_NUM_MSC, 0, EPNUM_1_MSC_OUT, EPNUM_1_MSC_IN, + TUD_OPT_HIGH_SPEED ? 512 : 64), }; - // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return mode ? desc_configuration_1 : desc_configuration_0; + (void)index; // for multiple configurations + return mode ? desc_configuration_1 : desc_configuration_0; } //--------------------------------------------------------------------+ @@ -222,61 +215,63 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_boot_interface/src/main.c b/Libraries/tinyusb/examples/device/hid_boot_interface/src/main.c index 7ad5c53c21b..82a9950e79f 100644 --- a/Libraries/tinyusb/examples/device/hid_boot_interface/src/main.c +++ b/Libraries/tinyusb/examples/device/hid_boot_interface/src/main.c @@ -40,10 +40,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -54,24 +54,23 @@ void hid_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); - hid_task(); - } + hid_task(); + } - return 0; + return 0; } //--------------------------------------------------------------------+ @@ -81,13 +80,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -95,14 +94,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -113,132 +112,126 @@ void tud_resume_cb(void) // tud_hid_report_complete_cb() is used to send the next report after previous one is complete void hid_task(void) { - // Poll every 10ms - const uint32_t interval_ms = 10; - static uint32_t start_ms = 0; - - if ( board_millis() - start_ms < interval_ms) return; // not enough time - start_ms += interval_ms; - - uint32_t const btn = board_button_read(); - - if ( tud_suspended() && btn ) - { - // Wake up host if we are in suspend mode - // and REMOTE_WAKEUP feature is enabled by host - tud_remote_wakeup(); - } - else - { - // keyboard interface - if ( tud_hid_n_ready(ITF_NUM_KEYBOARD) ) - { - // used to avoid send multiple consecutive zero report for keyboard - static bool has_keyboard_key = false; - - uint8_t const report_id = 0; - uint8_t const modifier = 0; - - if ( btn ) - { - uint8_t keycode[6] = { 0 }; - keycode[0] = HID_KEY_ARROW_RIGHT; - - tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, keycode); - has_keyboard_key = true; - }else - { - // send empty key report if previously has key pressed - if (has_keyboard_key) tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, NULL); - has_keyboard_key = false; - } + // Poll every 10ms + const uint32_t interval_ms = 10; + static uint32_t start_ms = 0; + + if (board_millis() - start_ms < interval_ms) + return; // not enough time + start_ms += interval_ms; + + uint32_t const btn = board_button_read(); + + if (tud_suspended() && btn) { + // Wake up host if we are in suspend mode + // and REMOTE_WAKEUP feature is enabled by host + tud_remote_wakeup(); + } else { + // keyboard interface + if (tud_hid_n_ready(ITF_NUM_KEYBOARD)) { + // used to avoid send multiple consecutive zero report for keyboard + static bool has_keyboard_key = false; + + uint8_t const report_id = 0; + uint8_t const modifier = 0; + + if (btn) { + uint8_t keycode[6] = { 0 }; + keycode[0] = HID_KEY_ARROW_RIGHT; + + tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, keycode); + has_keyboard_key = true; + } else { + // send empty key report if previously has key pressed + if (has_keyboard_key) + tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, NULL); + has_keyboard_key = false; + } + } + + // mouse interface + if (tud_hid_n_ready(ITF_NUM_MOUSE)) { + if (btn) { + uint8_t const report_id = 0; + uint8_t const button_mask = 0; + uint8_t const vertical = 0; + uint8_t const horizontal = 0; + int8_t const delta = 5; + + tud_hid_n_mouse_report(ITF_NUM_MOUSE, report_id, button_mask, delta, delta, + vertical, horizontal); + } + } } - - // mouse interface - if ( tud_hid_n_ready(ITF_NUM_MOUSE) ) - { - if ( btn ) - { - uint8_t const report_id = 0; - uint8_t const button_mask = 0; - uint8_t const vertical = 0; - uint8_t const horizontal = 0; - int8_t const delta = 5; - - tud_hid_n_mouse_report(ITF_NUM_MOUSE, report_id, button_mask, delta, delta, vertical, horizontal); - } - } - } } // Invoked when received SET_PROTOCOL request // protocol is either HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol) { - (void) instance; - (void) protocol; + (void)instance; + (void)protocol; - // nothing to do since we use the same compatible boot report for both Boot and Report mode. - // TODO set a indicator for user + // nothing to do since we use the same compatible boot report for both Boot and Report mode. + // TODO set a indicator for user } // Invoked when sent REPORT successfully to host // Application can use this to send the next report // Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len) +void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len) { - (void) instance; - (void) report; - (void) len; + (void)instance; + (void)report; + (void)len; - // nothing to do + // nothing to do } // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) +uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, + uint8_t *buffer, uint16_t reqlen) { - // TODO not Implemented - (void) instance; - (void) report_id; - (void) report_type; - (void) buffer; - (void) reqlen; - - return 0; + // TODO not Implemented + (void)instance; + (void)report_id; + (void)report_type; + (void)buffer; + (void)reqlen; + + return 0; } // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) +void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, + uint8_t const *buffer, uint16_t bufsize) { - (void) report_id; - - // keyboard interface - if (instance == ITF_NUM_KEYBOARD) - { - // Set keyboard LED e.g Capslock, Numlock etc... - if (report_type == HID_REPORT_TYPE_OUTPUT) - { - // bufsize should be (at least) 1 - if ( bufsize < 1 ) return; - - uint8_t const kbd_leds = buffer[0]; - - if (kbd_leds & KEYBOARD_LED_CAPSLOCK) - { - // Capslock On: disable blink, turn led on - blink_interval_ms = 0; - board_led_write(true); - }else - { - // Caplocks Off: back to normal blink - board_led_write(false); - blink_interval_ms = BLINK_MOUNTED; - } + (void)report_id; + + // keyboard interface + if (instance == ITF_NUM_KEYBOARD) { + // Set keyboard LED e.g Capslock, Numlock etc... + if (report_type == HID_REPORT_TYPE_OUTPUT) { + // bufsize should be (at least) 1 + if (bufsize < 1) + return; + + uint8_t const kbd_leds = buffer[0]; + + if (kbd_leds & KEYBOARD_LED_CAPSLOCK) { + // Capslock On: disable blink, turn led on + blink_interval_ms = 0; + board_led_write(true); + } else { + // Caplocks Off: back to normal blink + board_led_write(false); + blink_interval_ms = BLINK_MOUNTED; + } + } } - } } //--------------------------------------------------------------------+ @@ -246,16 +239,18 @@ void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_ //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // blink is disabled - if (!blink_interval_ms) return; + // blink is disabled + if (!blink_interval_ms) + return; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h b/Libraries/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h index 52723e09f3c..16c95e46a5c 100644 --- a/Libraries/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_HID 2 // 1 for boot keyboard, 1 for boot mouse -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_HID 2 // 1 for boot keyboard, 1 for boot mouse +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE 8 +#define CFG_TUD_HID_EP_BUFSIZE 8 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c index d68ef16d93c..dac94f69eb9 100644 --- a/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c @@ -33,98 +33,94 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 -}; +tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ -uint8_t const desc_hid_keyboard_report[] = -{ - TUD_HID_REPORT_DESC_KEYBOARD() -}; +uint8_t const desc_hid_keyboard_report[] = { TUD_HID_REPORT_DESC_KEYBOARD() }; -uint8_t const desc_hid_mouse_report[] = -{ - TUD_HID_REPORT_DESC_MOUSE() -}; +uint8_t const desc_hid_mouse_report[] = { TUD_HID_REPORT_DESC_MOUSE() }; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) +uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance) { - return (instance == 0) ? desc_hid_keyboard_report : desc_hid_mouse_report; + return (instance == 0) ? desc_hid_keyboard_report : desc_hid_mouse_report; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + 2*TUD_HID_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + 2 * TUD_HID_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 1 Interrupt, 2 Bulk, 3 Iso, 4 Interrupt, 5 Bulk etc ... - #define EPNUM_KEYBOARD 0x81 - #define EPNUM_MOUSE 0x84 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 1 Interrupt, 2 Bulk, 3 Iso, 4 Interrupt, 5 Bulk etc ... +#define EPNUM_KEYBOARD 0x81 +#define EPNUM_MOUSE 0x84 #else - #define EPNUM_KEYBOARD 0x81 - #define EPNUM_MOUSE 0x82 +#define EPNUM_KEYBOARD 0x81 +#define EPNUM_MOUSE 0x82 #endif -uint8_t const desc_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), +uint8_t const desc_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, + 100), - // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval - TUD_HID_DESCRIPTOR(ITF_NUM_KEYBOARD, 0, HID_ITF_PROTOCOL_KEYBOARD, sizeof(desc_hid_keyboard_report), EPNUM_KEYBOARD, CFG_TUD_HID_EP_BUFSIZE, 10), + // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval + TUD_HID_DESCRIPTOR(ITF_NUM_KEYBOARD, 0, HID_ITF_PROTOCOL_KEYBOARD, + sizeof(desc_hid_keyboard_report), EPNUM_KEYBOARD, CFG_TUD_HID_EP_BUFSIZE, + 10), - // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval - TUD_HID_DESCRIPTOR(ITF_NUM_MOUSE, 0, HID_ITF_PROTOCOL_MOUSE, sizeof(desc_hid_mouse_report), EPNUM_MOUSE, CFG_TUD_HID_EP_BUFSIZE, 10) + // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval + TUD_HID_DESCRIPTOR(ITF_NUM_MOUSE, 0, HID_ITF_PROTOCOL_MOUSE, sizeof(desc_hid_mouse_report), + EPNUM_MOUSE, CFG_TUD_HID_EP_BUFSIZE, 10) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -133,61 +129,63 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h index 6fee9e223ca..88e6f383b23 100644 --- a/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h @@ -25,11 +25,6 @@ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ -enum -{ - ITF_NUM_KEYBOARD, - ITF_NUM_MOUSE, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_KEYBOARD, ITF_NUM_MOUSE, ITF_NUM_TOTAL }; #endif diff --git a/Libraries/tinyusb/examples/device/hid_composite/src/main.c b/Libraries/tinyusb/examples/device/hid_composite/src/main.c index dcf13079f33..9c06fc0af05 100644 --- a/Libraries/tinyusb/examples/device/hid_composite/src/main.c +++ b/Libraries/tinyusb/examples/device/hid_composite/src/main.c @@ -41,10 +41,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -55,22 +55,21 @@ void hid_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); - hid_task(); - } + hid_task(); + } } //--------------------------------------------------------------------+ @@ -80,13 +79,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -94,14 +93,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -110,180 +109,165 @@ void tud_resume_cb(void) static void send_hid_report(uint8_t report_id, uint32_t btn) { - // skip if hid is not ready yet - if ( !tud_hid_ready() ) return; - - switch(report_id) - { - case REPORT_ID_KEYBOARD: - { - // use to avoid send multiple consecutive zero report for keyboard - static bool has_keyboard_key = false; - - if ( btn ) - { - uint8_t keycode[6] = { 0 }; - keycode[0] = HID_KEY_A; - - tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode); - has_keyboard_key = true; - }else - { - // send empty key report if previously has key pressed - if (has_keyboard_key) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); - has_keyboard_key = false; - } - } - break; - - case REPORT_ID_MOUSE: - { - int8_t const delta = 5; - - // no button, right + down, no scroll, no pan - tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); + // skip if hid is not ready yet + if (!tud_hid_ready()) + return; + + switch (report_id) { + case REPORT_ID_KEYBOARD: { + // use to avoid send multiple consecutive zero report for keyboard + static bool has_keyboard_key = false; + + if (btn) { + uint8_t keycode[6] = { 0 }; + keycode[0] = HID_KEY_A; + + tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode); + has_keyboard_key = true; + } else { + // send empty key report if previously has key pressed + if (has_keyboard_key) + tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); + has_keyboard_key = false; + } + } break; + + case REPORT_ID_MOUSE: { + int8_t const delta = 5; + + // no button, right + down, no scroll, no pan + tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); + } break; + + case REPORT_ID_CONSUMER_CONTROL: { + // use to avoid send multiple consecutive zero report + static bool has_consumer_key = false; + + if (btn) { + // volume down + uint16_t volume_down = HID_USAGE_CONSUMER_VOLUME_DECREMENT; + tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &volume_down, 2); + has_consumer_key = true; + } else { + // send empty key report (release key) if previously has key pressed + uint16_t empty_key = 0; + if (has_consumer_key) + tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &empty_key, 2); + has_consumer_key = false; + } + } break; + + case REPORT_ID_GAMEPAD: { + // use to avoid send multiple consecutive zero report for keyboard + static bool has_gamepad_key = false; + + hid_gamepad_report_t report = { + .x = 0, .y = 0, .z = 0, .rz = 0, .rx = 0, .ry = 0, .hat = 0, .buttons = 0 + }; + + if (btn) { + report.hat = GAMEPAD_HAT_UP; + report.buttons = GAMEPAD_BUTTON_A; + tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); + + has_gamepad_key = true; + } else { + report.hat = GAMEPAD_HAT_CENTERED; + report.buttons = 0; + if (has_gamepad_key) + tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); + has_gamepad_key = false; + } + } break; + + default: + break; } - break; - - case REPORT_ID_CONSUMER_CONTROL: - { - // use to avoid send multiple consecutive zero report - static bool has_consumer_key = false; - - if ( btn ) - { - // volume down - uint16_t volume_down = HID_USAGE_CONSUMER_VOLUME_DECREMENT; - tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &volume_down, 2); - has_consumer_key = true; - }else - { - // send empty key report (release key) if previously has key pressed - uint16_t empty_key = 0; - if (has_consumer_key) tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &empty_key, 2); - has_consumer_key = false; - } - } - break; - - case REPORT_ID_GAMEPAD: - { - // use to avoid send multiple consecutive zero report for keyboard - static bool has_gamepad_key = false; - - hid_gamepad_report_t report = - { - .x = 0, .y = 0, .z = 0, .rz = 0, .rx = 0, .ry = 0, - .hat = 0, .buttons = 0 - }; - - if ( btn ) - { - report.hat = GAMEPAD_HAT_UP; - report.buttons = GAMEPAD_BUTTON_A; - tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); - - has_gamepad_key = true; - }else - { - report.hat = GAMEPAD_HAT_CENTERED; - report.buttons = 0; - if (has_gamepad_key) tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); - has_gamepad_key = false; - } - } - break; - - default: break; - } } // Every 10ms, we will sent 1 report for each HID profile (keyboard, mouse etc ..) // tud_hid_report_complete_cb() is used to send the next report after previous one is complete void hid_task(void) { - // Poll every 10ms - const uint32_t interval_ms = 10; - static uint32_t start_ms = 0; - - if ( board_millis() - start_ms < interval_ms) return; // not enough time - start_ms += interval_ms; - - uint32_t const btn = board_button_read(); - - // Remote wakeup - if ( tud_suspended() && btn ) - { - // Wake up host if we are in suspend mode - // and REMOTE_WAKEUP feature is enabled by host - tud_remote_wakeup(); - }else - { - // Send the 1st of report chain, the rest will be sent by tud_hid_report_complete_cb() - send_hid_report(REPORT_ID_KEYBOARD, btn); - } + // Poll every 10ms + const uint32_t interval_ms = 10; + static uint32_t start_ms = 0; + + if (board_millis() - start_ms < interval_ms) + return; // not enough time + start_ms += interval_ms; + + uint32_t const btn = board_button_read(); + + // Remote wakeup + if (tud_suspended() && btn) { + // Wake up host if we are in suspend mode + // and REMOTE_WAKEUP feature is enabled by host + tud_remote_wakeup(); + } else { + // Send the 1st of report chain, the rest will be sent by tud_hid_report_complete_cb() + send_hid_report(REPORT_ID_KEYBOARD, btn); + } } // Invoked when sent REPORT successfully to host // Application can use this to send the next report // Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len) +void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len) { - (void) instance; - (void) len; + (void)instance; + (void)len; - uint8_t next_report_id = report[0] + 1u; + uint8_t next_report_id = report[0] + 1u; - if (next_report_id < REPORT_ID_COUNT) - { - send_hid_report(next_report_id, board_button_read()); - } + if (next_report_id < REPORT_ID_COUNT) { + send_hid_report(next_report_id, board_button_read()); + } } // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) +uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, + uint8_t *buffer, uint16_t reqlen) { - // TODO not Implemented - (void) instance; - (void) report_id; - (void) report_type; - (void) buffer; - (void) reqlen; - - return 0; + // TODO not Implemented + (void)instance; + (void)report_id; + (void)report_type; + (void)buffer; + (void)reqlen; + + return 0; } // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) +void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, + uint8_t const *buffer, uint16_t bufsize) { - (void) instance; - - if (report_type == HID_REPORT_TYPE_OUTPUT) - { - // Set keyboard LED e.g Capslock, Numlock etc... - if (report_id == REPORT_ID_KEYBOARD) - { - // bufsize should be (at least) 1 - if ( bufsize < 1 ) return; - - uint8_t const kbd_leds = buffer[0]; - - if (kbd_leds & KEYBOARD_LED_CAPSLOCK) - { - // Capslock On: disable blink, turn led on - blink_interval_ms = 0; - board_led_write(true); - }else - { - // Caplocks Off: back to normal blink - board_led_write(false); - blink_interval_ms = BLINK_MOUNTED; - } + (void)instance; + + if (report_type == HID_REPORT_TYPE_OUTPUT) { + // Set keyboard LED e.g Capslock, Numlock etc... + if (report_id == REPORT_ID_KEYBOARD) { + // bufsize should be (at least) 1 + if (bufsize < 1) + return; + + uint8_t const kbd_leds = buffer[0]; + + if (kbd_leds & KEYBOARD_LED_CAPSLOCK) { + // Capslock On: disable blink, turn led on + blink_interval_ms = 0; + board_led_write(true); + } else { + // Caplocks Off: back to normal blink + board_led_write(false); + blink_interval_ms = BLINK_MOUNTED; + } + } } - } } //--------------------------------------------------------------------+ @@ -291,16 +275,18 @@ void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_ //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // blink is disabled - if (!blink_interval_ms) return; + // blink is disabled + if (!blink_interval_ms) + return; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/hid_composite/src/tusb_config.h b/Libraries/tinyusb/examples/device/hid_composite/src/tusb_config.h index 6bd32c427dc..f22982a91b4 100644 --- a/Libraries/tinyusb/examples/device/hid_composite/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/hid_composite/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_HID 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_HID 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE 16 +#define CFG_TUD_HID_EP_BUFSIZE 16 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.c index e174db46d4e..83793abd40e 100644 --- a/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.c @@ -33,86 +33,79 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 -}; +tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ -uint8_t const desc_hid_report[] = -{ - TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(REPORT_ID_KEYBOARD )), - TUD_HID_REPORT_DESC_MOUSE ( HID_REPORT_ID(REPORT_ID_MOUSE )), - TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL )), - TUD_HID_REPORT_DESC_GAMEPAD ( HID_REPORT_ID(REPORT_ID_GAMEPAD )) -}; +uint8_t const desc_hid_report[] = { TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(REPORT_ID_KEYBOARD)), + TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE)), + TUD_HID_REPORT_DESC_CONSUMER( + HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL)), + TUD_HID_REPORT_DESC_GAMEPAD(HID_REPORT_ID(REPORT_ID_GAMEPAD)) }; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) +uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance) { - (void) instance; - return desc_hid_report; + (void)instance; + return desc_hid_report; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_HID, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_HID, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN) -#define EPNUM_HID 0x81 +#define EPNUM_HID 0x81 -uint8_t const desc_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), +uint8_t const desc_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, + 100), - // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval - TUD_HID_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 5) + // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval + TUD_HID_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, + CFG_TUD_HID_EP_BUFSIZE, 5) }; #if TUD_OPT_HIGH_SPEED @@ -122,43 +115,42 @@ uint8_t const desc_configuration[] = uint8_t desc_other_speed_config[CONFIG_TOTAL_LEN]; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed -tusb_desc_device_qualifier_t const desc_device_qualifier = -{ - .bLength = sizeof(tusb_desc_device_qualifier_t), - .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, - .bcdUSB = USB_BCD, - - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .bNumConfigurations = 0x01, - .bReserved = 0x00 +tusb_desc_device_qualifier_t const desc_device_qualifier = { + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = USB_BCD, + + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 0x01, + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const* tud_descriptor_device_qualifier_cb(void) +uint8_t const *tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const*) &desc_device_qualifier; + return (uint8_t const *)&desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations - // other speed config is basically configuration with type = OHER_SPEED_CONFIG - memcpy(desc_other_speed_config, desc_configuration, CONFIG_TOTAL_LEN); - desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; + // other speed config is basically configuration with type = OHER_SPEED_CONFIG + memcpy(desc_other_speed_config, desc_configuration, CONFIG_TOTAL_LEN); + desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; - // this example use the same configuration for both high and full speed mode - return desc_other_speed_config; + // this example use the same configuration for both high and full speed mode + return desc_other_speed_config; } #endif // highspeed @@ -166,12 +158,12 @@ uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations - // This example use the same configuration for both high and full speed mode - return desc_configuration; + // This example use the same configuration for both high and full speed mode + return desc_configuration; } //--------------------------------------------------------------------+ @@ -180,61 +172,63 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.h index e733d31dde9..d27bbd72f85 100644 --- a/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.h @@ -25,13 +25,12 @@ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ -enum -{ - REPORT_ID_KEYBOARD = 1, - REPORT_ID_MOUSE, - REPORT_ID_CONSUMER_CONTROL, - REPORT_ID_GAMEPAD, - REPORT_ID_COUNT +enum { + REPORT_ID_KEYBOARD = 1, + REPORT_ID_MOUSE, + REPORT_ID_CONSUMER_CONTROL, + REPORT_ID_GAMEPAD, + REPORT_ID_COUNT }; #endif /* USB_DESCRIPTORS_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h b/Libraries/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h index 869500ad2ad..ccd96107b31 100644 --- a/Libraries/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h +++ b/Libraries/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h @@ -26,7 +26,6 @@ * 1 tab == 4 spaces! */ - #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H @@ -49,142 +48,145 @@ #include "bsp/board_mcu.h" #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 - #error "ESP32-Sx should use IDF's FreeRTOSConfig.h" +#error "ESP32-Sx should use IDF's FreeRTOSConfig.h" #endif // TODO fix later #if CFG_TUSB_MCU == OPT_MCU_MM32F327X - extern u32 SystemCoreClock; +extern u32 SystemCoreClock; #else - // FIXME cause redundant-decls warnings - extern uint32_t SystemCoreClock; +// FIXME cause redundant-decls warnings +extern uint32_t SystemCoreClock; #endif #endif /* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU 0 -#define configENABLE_FPU 1 -#define configENABLE_TRUSTZONE 0 -#define configMINIMAL_SECURE_STACK_SIZE ( 1024 ) -#define configRUN_FREERTOS_SECURE_ONLY 1 +#define configENABLE_MPU 0 +#define configENABLE_FPU 1 +#define configENABLE_TRUSTZONE 0 +#define configMINIMAL_SECURE_STACK_SIZE (1024) +#define configRUN_FREERTOS_SECURE_ONLY 1 -#define configUSE_PREEMPTION 1 +#define configUSE_PREEMPTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ SystemCoreClock -#define configTICK_RATE_HZ ( 1000 ) -#define configMAX_PRIORITIES ( 5 ) -#define configMINIMAL_STACK_SIZE ( 128 ) -#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 ) -#define configMAX_TASK_NAME_LEN 16 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configQUEUE_REGISTRY_SIZE 4 -#define configUSE_QUEUE_SETS 0 -#define configUSE_TIME_SLICING 0 -#define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 - -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configSUPPORT_DYNAMIC_ALLOCATION 0 +#define configCPU_CLOCK_HZ SystemCoreClock +#define configTICK_RATE_HZ (1000) +#define configMAX_PRIORITIES (5) +#define configMINIMAL_STACK_SIZE (128) +#define configTOTAL_HEAP_SIZE (configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024) +#define configMAX_TASK_NAME_LEN 16 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configQUEUE_REGISTRY_SIZE 4 +#define configUSE_QUEUE_SETS 0 +#define configUSE_TIME_SLICING 0 +#define configUSE_NEWLIB_REENTRANT 0 +#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 + +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 0 /* Hook function related definitions. */ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configCHECK_HANDLER_INSTALLATION 0 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configCHECK_HANDLER_INSTALLATION 0 /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS 0 -#define configUSE_TRACE_FACILITY 1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#define configGENERATE_RUN_TIME_STATS 0 +#define configUSE_TRACE_FACILITY 1 // legacy trace +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES 2 +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 /* Software timer related definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2) -#define configTIMER_QUEUE_LENGTH 32 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 2) +#define configTIMER_QUEUE_LENGTH 32 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet 0 -#define INCLUDE_uxTaskPriorityGet 0 -#define INCLUDE_vTaskDelete 0 -#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR 0 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 -#define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 -#define INCLUDE_xTaskGetIdleTaskHandle 0 +#define INCLUDE_vTaskPrioritySet 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskSuspend \ + 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY +#define INCLUDE_xResumeFromISR 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName 0 -#define INCLUDE_eTaskGetState 0 -#define INCLUDE_xEventGroupSetBitFromISR 0 -#define INCLUDE_xTimerPendFunctionCall 0 +#define INCLUDE_pcTaskGetTaskName 0 +#define INCLUDE_eTaskGetState 0 +#define INCLUDE_xEventGroupSetBitFromISR 0 +#define INCLUDE_xTimerPendFunctionCall 0 #ifdef __RX__ /* Renesas RX series */ -#define vSoftwareInterruptISR INT_Excep_ICU_SWINT -#define vTickISR INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2) -#define configKERNEL_INTERRUPT_PRIORITY 1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 +#define vSoftwareInterruptISR INT_Excep_ICU_SWINT +#define vTickISR INT_Excep_CMT0_CMI0 +#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ / 2) +#define configKERNEL_INTERRUPT_PRIORITY 1 +#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 #else /* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler -#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler +#define xPortSysTickHandler SysTick_Handler +#define vPortSVCHandler SVC_Handler //--------------------------------------------------------------------+ // Interrupt nesting behavior configuration. //--------------------------------------------------------------------+ #if defined(__NVIC_PRIO_BITS) - // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h - #define configPRIO_BITS __NVIC_PRIO_BITS +// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h +#define configPRIO_BITS __NVIC_PRIO_BITS #elif defined(__ECLIC_INTCTLBITS) - // RISC-V Bumblebee core from nuclei - #define configPRIO_BITS __ECLIC_INTCTLBITS +// RISC-V Bumblebee core from nuclei +#define configPRIO_BITS __ECLIC_INTCTLBITS #elif defined(__IASMARM__) - // FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. - // Therefore we will hard coded it to minimum value of 2 to get pass ci build. - // IAR user must update this to correct value of the target MCU - #message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" - #define configPRIO_BITS 2 +// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. +// Therefore we will hard coded it to minimum value of 2 to get pass ci build. +// IAR user must update this to correct value of the target MCU +#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" +#define configPRIO_BITS 2 #else - #error "FreeRTOS configPRIO_BITS to be defined" +#error "FreeRTOS configPRIO_BITS to be defined" #endif /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1< max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h index e733d31dde9..d27bbd72f85 100644 --- a/Libraries/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h @@ -25,13 +25,12 @@ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ -enum -{ - REPORT_ID_KEYBOARD = 1, - REPORT_ID_MOUSE, - REPORT_ID_CONSUMER_CONTROL, - REPORT_ID_GAMEPAD, - REPORT_ID_COUNT +enum { + REPORT_ID_KEYBOARD = 1, + REPORT_ID_MOUSE, + REPORT_ID_CONSUMER_CONTROL, + REPORT_ID_GAMEPAD, + REPORT_ID_COUNT }; #endif /* USB_DESCRIPTORS_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_generic_inout/src/main.c b/Libraries/tinyusb/examples/device/hid_generic_inout/src/main.c index cfa9f628312..6a62a26408d 100644 --- a/Libraries/tinyusb/examples/device/hid_generic_inout/src/main.c +++ b/Libraries/tinyusb/examples/device/hid_generic_inout/src/main.c @@ -65,10 +65,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -78,20 +78,19 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - } + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -101,13 +100,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -115,14 +114,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -132,29 +131,31 @@ void tud_resume_cb(void) // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) +uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, + uint8_t *buffer, uint16_t reqlen) { - // TODO not Implemented - (void) itf; - (void) report_id; - (void) report_type; - (void) buffer; - (void) reqlen; - - return 0; + // TODO not Implemented + (void)itf; + (void)report_id; + (void)report_type; + (void)buffer; + (void)reqlen; + + return 0; } // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) +void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, + uint8_t const *buffer, uint16_t bufsize) { - // This example doesn't use multiple report and report ID - (void) itf; - (void) report_id; - (void) report_type; + // This example doesn't use multiple report and report ID + (void)itf; + (void)report_id; + (void)report_type; - // echo back anything we received from host - tud_hid_report(0, buffer, bufsize); + // echo back anything we received from host + tud_hid_report(0, buffer, bufsize); } //--------------------------------------------------------------------+ @@ -162,13 +163,14 @@ void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t rep //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h b/Libraries/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h index 98143ac4d90..41101b8aacb 100644 --- a/Libraries/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 1 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 1 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE 64 +#define CFG_TUD_HID_EP_BUFSIZE 64 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c index 64f6d17aeb1..4e972ab7b99 100644 --- a/Libraries/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c @@ -32,89 +32,80 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 -}; +tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ -uint8_t const desc_hid_report[] = -{ - TUD_HID_REPORT_DESC_GENERIC_INOUT(CFG_TUD_HID_EP_BUFSIZE) -}; +uint8_t const desc_hid_report[] = { TUD_HID_REPORT_DESC_GENERIC_INOUT(CFG_TUD_HID_EP_BUFSIZE) }; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t itf) +uint8_t const *tud_hid_descriptor_report_cb(uint8_t itf) { - (void) itf; - return desc_hid_report; + (void)itf; + return desc_hid_report; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_HID, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_HID, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_INOUT_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_INOUT_DESC_LEN) -#define EPNUM_HID 0x01 +#define EPNUM_HID 0x01 -uint8_t const desc_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, protocol, report descriptor len, EP Out & In address, size & polling interval - TUD_HID_INOUT_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, 0x80 | EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 10) + // Interface number, string index, protocol, report descriptor len, EP Out & In address, size & polling interval + TUD_HID_INOUT_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), + EPNUM_HID, 0x80 | EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 10) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -123,61 +114,63 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/main.c b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/main.c index 30b4ae05523..f0d11304d86 100644 --- a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/main.c +++ b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/main.c @@ -35,20 +35,17 @@ //--------------------------------------------------------------------+ // Interface index depends on the order in configuration descriptor -enum { - ITF_KEYBOARD = 0, - ITF_MOUSE = 1 -}; +enum { ITF_KEYBOARD = 0, ITF_MOUSE = 1 }; /* Blink pattern * - 250 ms : device not mounted * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -59,22 +56,21 @@ void hid_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); - hid_task(); - } + hid_task(); + } } //--------------------------------------------------------------------+ @@ -84,13 +80,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -98,14 +94,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -114,84 +110,81 @@ void tud_resume_cb(void) void hid_task(void) { - // Poll every 10ms - const uint32_t interval_ms = 10; - static uint32_t start_ms = 0; - - if ( board_millis() - start_ms < interval_ms) return; // not enough time - start_ms += interval_ms; - - uint32_t const btn = board_button_read(); - - // Remote wakeup - if ( tud_suspended() && btn ) - { - // Wake up host if we are in suspend mode - // and REMOTE_WAKEUP feature is enabled by host - tud_remote_wakeup(); - } - - /*------------- Keyboard -------------*/ - if ( tud_hid_n_ready(ITF_KEYBOARD) ) - { - // use to avoid send multiple consecutive zero report for keyboard - static bool has_key = false; - - if ( btn ) - { - uint8_t keycode[6] = { 0 }; - keycode[0] = HID_KEY_A; - - tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, keycode); - - has_key = true; - }else - { - // send empty key report if previously has key pressed - if (has_key) tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, NULL); - has_key = false; + // Poll every 10ms + const uint32_t interval_ms = 10; + static uint32_t start_ms = 0; + + if (board_millis() - start_ms < interval_ms) + return; // not enough time + start_ms += interval_ms; + + uint32_t const btn = board_button_read(); + + // Remote wakeup + if (tud_suspended() && btn) { + // Wake up host if we are in suspend mode + // and REMOTE_WAKEUP feature is enabled by host + tud_remote_wakeup(); } - } - /*------------- Mouse -------------*/ - if ( tud_hid_n_ready(ITF_MOUSE) ) - { - if ( btn ) - { - int8_t const delta = 5; + /*------------- Keyboard -------------*/ + if (tud_hid_n_ready(ITF_KEYBOARD)) { + // use to avoid send multiple consecutive zero report for keyboard + static bool has_key = false; + + if (btn) { + uint8_t keycode[6] = { 0 }; + keycode[0] = HID_KEY_A; - // no button, right + down, no scroll pan - tud_hid_n_mouse_report(ITF_MOUSE, 0, 0x00, delta, delta, 0, 0); + tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, keycode); + + has_key = true; + } else { + // send empty key report if previously has key pressed + if (has_key) + tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, NULL); + has_key = false; + } } - } -} + /*------------- Mouse -------------*/ + if (tud_hid_n_ready(ITF_MOUSE)) { + if (btn) { + int8_t const delta = 5; + + // no button, right + down, no scroll pan + tud_hid_n_mouse_report(ITF_MOUSE, 0, 0x00, delta, delta, 0, 0); + } + } +} // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) +uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, + uint8_t *buffer, uint16_t reqlen) { - // TODO not Implemented - (void) itf; - (void) report_id; - (void) report_type; - (void) buffer; - (void) reqlen; - - return 0; + // TODO not Implemented + (void)itf; + (void)report_id; + (void)report_type; + (void)buffer; + (void)reqlen; + + return 0; } // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) +void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, + uint8_t const *buffer, uint16_t bufsize) { - // TODO set LED based on CAPLOCK, NUMLOCK etc... - (void) itf; - (void) report_id; - (void) report_type; - (void) buffer; - (void) bufsize; + // TODO set LED based on CAPLOCK, NUMLOCK etc... + (void)itf; + (void)report_id; + (void)report_type; + (void)buffer; + (void)bufsize; } //--------------------------------------------------------------------+ @@ -199,13 +192,14 @@ void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t rep //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h index 49dc962fe59..f76a68984da 100644 --- a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_HID 2 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_HID 2 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE 8 +#define CFG_TUD_HID_EP_BUFSIZE 8 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c index 86f567e8e4e..29b8b2d1746 100644 --- a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c @@ -32,105 +32,91 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 -}; +tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ -uint8_t const desc_hid_report1[] = -{ - TUD_HID_REPORT_DESC_KEYBOARD() -}; +uint8_t const desc_hid_report1[] = { TUD_HID_REPORT_DESC_KEYBOARD() }; -uint8_t const desc_hid_report2[] = -{ - TUD_HID_REPORT_DESC_MOUSE() -}; +uint8_t const desc_hid_report2[] = { TUD_HID_REPORT_DESC_MOUSE() }; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t itf) +uint8_t const *tud_hid_descriptor_report_cb(uint8_t itf) { - if (itf == 0) - { - return desc_hid_report1; - } - else if (itf == 1) - { - return desc_hid_report2; - } - - return NULL; + if (itf == 0) { + return desc_hid_report1; + } else if (itf == 1) { + return desc_hid_report2; + } + + return NULL; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_HID1, - ITF_NUM_HID2, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_HID1, ITF_NUM_HID2, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN + TUD_HID_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN + TUD_HID_DESC_LEN) -#define EPNUM_HID1 0x81 -#define EPNUM_HID2 0x82 +#define EPNUM_HID1 0x81 +#define EPNUM_HID2 0x82 -uint8_t const desc_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), +uint8_t const desc_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, + 100), - // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval - TUD_HID_DESCRIPTOR(ITF_NUM_HID1, 4, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report1), EPNUM_HID1, CFG_TUD_HID_EP_BUFSIZE, 10), - TUD_HID_DESCRIPTOR(ITF_NUM_HID2, 5, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report2), EPNUM_HID2, CFG_TUD_HID_EP_BUFSIZE, 10) + // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval + TUD_HID_DESCRIPTOR(ITF_NUM_HID1, 4, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report1), EPNUM_HID1, + CFG_TUD_HID_EP_BUFSIZE, 10), + TUD_HID_DESCRIPTOR(ITF_NUM_HID2, 5, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report2), EPNUM_HID2, + CFG_TUD_HID_EP_BUFSIZE, 10) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -139,63 +125,65 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "Keyboard Interface", // 4: Interface 1 String - "Mouse Interface", // 5: Interface 2 String +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "Keyboard Interface", // 4: Interface 1 String + "Mouse Interface", // 5: Interface 2 String }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/midi_test/src/main.c b/Libraries/tinyusb/examples/device/midi_test/src/main.c index b1d51598fef..3ac48cefa33 100644 --- a/Libraries/tinyusb/examples/device/midi_test/src/main.c +++ b/Libraries/tinyusb/examples/device/midi_test/src/main.c @@ -46,10 +46,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -60,21 +60,20 @@ void midi_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - midi_task(); - } + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + midi_task(); + } } //--------------------------------------------------------------------+ @@ -84,13 +83,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -98,14 +97,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -116,50 +115,51 @@ void tud_resume_cb(void) uint32_t note_pos = 0; // Store example melody as an array of note values -uint8_t note_sequence[] = -{ - 74,78,81,86,90,93,98,102,57,61,66,69,73,78,81,85,88,92,97,100,97,92,88,85,81,78, - 74,69,66,62,57,62,66,69,74,78,81,86,90,93,97,102,97,93,90,85,81,78,73,68,64,61, - 56,61,64,68,74,78,81,86,90,93,98,102 -}; +uint8_t note_sequence[] = { 74, 78, 81, 86, 90, 93, 98, 102, 57, 61, 66, 69, 73, 78, 81, 85, + 88, 92, 97, 100, 97, 92, 88, 85, 81, 78, 74, 69, 66, 62, 57, 62, + 66, 69, 74, 78, 81, 86, 90, 93, 97, 102, 97, 93, 90, 85, 81, 78, + 73, 68, 64, 61, 56, 61, 64, 68, 74, 78, 81, 86, 90, 93, 98, 102 }; void midi_task(void) { - static uint32_t start_ms = 0; + static uint32_t start_ms = 0; - uint8_t const cable_num = 0; // MIDI jack associated with USB endpoint - uint8_t const channel = 0; // 0 for channel 1 + uint8_t const cable_num = 0; // MIDI jack associated with USB endpoint + uint8_t const channel = 0; // 0 for channel 1 - // The MIDI interface always creates input and output port/jack descriptors - // regardless of these being used or not. Therefore incoming traffic should be read - // (possibly just discarded) to avoid the sender blocking in IO - uint8_t packet[4]; - while ( tud_midi_available() ) tud_midi_packet_read(packet); + // The MIDI interface always creates input and output port/jack descriptors + // regardless of these being used or not. Therefore incoming traffic should be read + // (possibly just discarded) to avoid the sender blocking in IO + uint8_t packet[4]; + while (tud_midi_available()) tud_midi_packet_read(packet); - // send note periodically - if (board_millis() - start_ms < 286) return; // not enough time - start_ms += 286; + // send note periodically + if (board_millis() - start_ms < 286) + return; // not enough time + start_ms += 286; - // Previous positions in the note sequence. - int previous = (int) (note_pos - 1); + // Previous positions in the note sequence. + int previous = (int)(note_pos - 1); - // If we currently are at position 0, set the - // previous position to the last note in the sequence. - if (previous < 0) previous = sizeof(note_sequence) - 1; + // If we currently are at position 0, set the + // previous position to the last note in the sequence. + if (previous < 0) + previous = sizeof(note_sequence) - 1; - // Send Note On for current position at full velocity (127) on channel 1. - uint8_t note_on[3] = { 0x90 | channel, note_sequence[note_pos], 127 }; - tud_midi_stream_write(cable_num, note_on, 3); + // Send Note On for current position at full velocity (127) on channel 1. + uint8_t note_on[3] = { 0x90 | channel, note_sequence[note_pos], 127 }; + tud_midi_stream_write(cable_num, note_on, 3); - // Send Note Off for previous note. - uint8_t note_off[3] = { 0x80 | channel, note_sequence[previous], 0}; - tud_midi_stream_write(cable_num, note_off, 3); + // Send Note Off for previous note. + uint8_t note_off[3] = { 0x80 | channel, note_sequence[previous], 0 }; + tud_midi_stream_write(cable_num, note_off, 3); - // Increment position - note_pos++; + // Increment position + note_pos++; - // If we are at the end of the sequence, start over. - if (note_pos >= sizeof(note_sequence)) note_pos = 0; + // If we are at the end of the sequence, start over. + if (note_pos >= sizeof(note_sequence)) + note_pos = 0; } //--------------------------------------------------------------------+ @@ -167,13 +167,14 @@ void midi_task(void) //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/midi_test/src/tusb_config.h b/Libraries/tinyusb/examples/device/midi_test/src/tusb_config.h index 314dde4385a..87dd883ac91 100644 --- a/Libraries/tinyusb/examples/device/midi_test/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/midi_test/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,22 +87,22 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 1 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 1 +#define CFG_TUD_VENDOR 0 // MIDI FIFO size of TX and RX -#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/midi_test/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/midi_test/src/usb_descriptors.c index 41e6e18186c..6879191bf4f 100644 --- a/Libraries/tinyusb/examples/device/midi_test/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/midi_test/src/usb_descriptors.c @@ -32,106 +32,97 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 -}; +tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } - //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_MIDI = 0, - ITF_NUM_MIDI_STREAMING, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_MIDI = 0, ITF_NUM_MIDI_STREAMING, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MIDI_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MIDI_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_MIDI_OUT 0x02 - #define EPNUM_MIDI_IN 0x02 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_MIDI_OUT 0x02 +#define EPNUM_MIDI_IN 0x02 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X - // On Bridgetek FT9xx endpoint numbers must be unique... - #define EPNUM_MIDI_OUT 0x02 - #define EPNUM_MIDI_IN 0x03 +// On Bridgetek FT9xx endpoint numbers must be unique... +#define EPNUM_MIDI_OUT 0x02 +#define EPNUM_MIDI_IN 0x03 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // On MAX32 endpoint numbers must be unique... - #define EPNUM_MIDI_OUT 0x02 - #define EPNUM_MIDI_IN 0x03 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// On MAX32 endpoint numbers must be unique... +#define EPNUM_MIDI_OUT 0x02 +#define EPNUM_MIDI_IN 0x03 #else - #define EPNUM_MIDI_OUT 0x01 - #define EPNUM_MIDI_IN 0x01 +#define EPNUM_MIDI_OUT 0x01 +#define EPNUM_MIDI_IN 0x01 #endif -uint8_t const desc_fs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_fs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI_OUT, (0x80 | EPNUM_MIDI_IN), 64) + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI_OUT, (0x80 | EPNUM_MIDI_IN), 64) }; #if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI_OUT, (0x80 | EPNUM_MIDI_IN), 512) + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI_OUT, (0x80 | EPNUM_MIDI_IN), 512) }; #endif // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -141,61 +132,63 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/msc_dual_lun/src/main.c b/Libraries/tinyusb/examples/device/msc_dual_lun/src/main.c index aabd0bf8ac8..a95369c47a8 100644 --- a/Libraries/tinyusb/examples/device/msc_dual_lun/src/main.c +++ b/Libraries/tinyusb/examples/device/msc_dual_lun/src/main.c @@ -40,9 +40,9 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -50,20 +50,21 @@ static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; void led_blinking_task(void); /*------------- MAIN -------------*/ -int main(void) { - board_init(); +int main(void) +{ + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - } + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -71,39 +72,45 @@ int main(void) { //--------------------------------------------------------------------+ // Invoked when device is mounted -void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) +{ + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) +{ + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended // remote_wakeup_en : if host allow us to perform remote wakeup // Within 7ms, device must draw an average of current less than 2.5 mA from bus -void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; +void tud_suspend_cb(bool remote_wakeup_en) +{ + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed -void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +void tud_resume_cb(void) +{ + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; - - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle +void led_blinking_task(void) +{ + static uint32_t start_ms = 0; + static bool led_state = false; + + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c b/Libraries/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c index b44b77c6cf8..43422d101b8 100644 --- a/Libraries/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c +++ b/Libraries/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c @@ -35,300 +35,320 @@ // We will use Flash as read-only disk with board that has // CFG_EXAMPLE_MSC_READONLY defined #if defined(CFG_EXAMPLE_MSC_READONLY) || defined(CFG_EXAMPLE_MSC_DUAL_READONLY) - #define MSC_CONST const +#define MSC_CONST const #else - #define MSC_CONST +#define MSC_CONST #endif enum { - DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount - DISK_BLOCK_SIZE = 512 + DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount + DISK_BLOCK_SIZE = 512 }; - //--------------------------------------------------------------------+ // LUN 0 //--------------------------------------------------------------------+ #define README0_CONTENTS \ -"LUN0: This is tinyusb's MassStorage Class demo.\r\n\r\n\ + "LUN0: This is tinyusb's MassStorage Class demo.\r\n\r\n\ If you find any bugs or get any questions, feel free to file an\r\n\ issue at github.com/hathach/tinyusb" - -MSC_CONST uint8_t msc_disk0[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ - //------------- Block0: Boot Sector -------------// - // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; - // sector_per_cluster = 1; reserved_sectors = 1; - // fat_num = 1; fat12_root_entry_num = 16; - // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; - // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; - // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB 0 "; - // FAT magic code at offset 510-511 - { - 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, - 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , - 'S' , 'B' , ' ' , '0' , ' ' , ' ' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, +MSC_CONST uint8_t msc_disk0[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { + //------------- Block0: Boot Sector -------------// + // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; + // sector_per_cluster = 1; reserved_sectors = 1; + // fat_num = 1; fat12_root_entry_num = 16; + // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; + // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; + // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB 0 "; + // FAT magic code at offset 510-511 + { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, + 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T', 'i', 'n', + 'y', 'U', 'S', 'B', ' ', '0', ' ', ' ', 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, + 0x00, // Zero up to 2 last bytes of FAT magic code - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA - }, - - //------------- Block1: FAT12 Table -------------// - { - 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file - }, - - //------------- Block2: Root Directory -------------// - { - // first entry is volume label - 'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , '0' , ' ' , ' ' , 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // second entry is readme file - 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , '0' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, - 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README0_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) - }, - - //------------- Block3: Readme Content -------------// - README0_CONTENTS + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x55, 0xAA }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, + 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file + }, + + //------------- Block2: Root Directory -------------// + { + // first entry is volume label + 'T', 'i', 'n', 'y', 'U', 'S', 'B', ' ', '0', ' ', ' ', 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // second entry is readme file + 'R', 'E', 'A', 'D', 'M', 'E', '0', ' ', 'T', 'X', 'T', 0x20, 0x00, 0xC6, 0x52, 0x6D, 0x65, + 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, + sizeof(README0_CONTENTS) - 1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block3: Readme Content -------------// + README0_CONTENTS }; //--------------------------------------------------------------------+ // LUN 1 //--------------------------------------------------------------------+ #define README1_CONTENTS \ -"LUN1: This is tinyusb's MassStorage Class demo.\r\n\r\n\ + "LUN1: This is tinyusb's MassStorage Class demo.\r\n\r\n\ If you find any bugs or get any questions, feel free to file an\r\n\ issue at github.com/hathach/tinyusb" -MSC_CONST uint8_t msc_disk1[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ - //------------- Block0: Boot Sector -------------// - // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; - // sector_per_cluster = 1; reserved_sectors = 1; - // fat_num = 1; fat12_root_entry_num = 16; - // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; - // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; - // filesystem_type = "FAT12 "; volume_serial_number = 0x5678; volume_label = "TinyUSB 1 "; - // FAT magic code at offset 510-511 - { - 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, - 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x78, 0x56, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , - 'S' , 'B' , ' ' , '1' , ' ' , ' ' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, +MSC_CONST uint8_t msc_disk1[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { + //------------- Block0: Boot Sector -------------// + // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; + // sector_per_cluster = 1; reserved_sectors = 1; + // fat_num = 1; fat12_root_entry_num = 16; + // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; + // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; + // filesystem_type = "FAT12 "; volume_serial_number = 0x5678; volume_label = "TinyUSB 1 "; + // FAT magic code at offset 510-511 + { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, + 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x78, 0x56, 0x00, 0x00, 'T', 'i', 'n', + 'y', 'U', 'S', 'B', ' ', '1', ' ', ' ', 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, + 0x00, // Zero up to 2 last bytes of FAT magic code - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA - }, - - //------------- Block1: FAT12 Table -------------// - { - 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file - }, - - //------------- Block2: Root Directory -------------// - { - // first entry is volume label - 'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , '1' , ' ' , ' ' , 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // second entry is readme file - 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , '1' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, - 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README1_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) - }, - - //------------- Block3: Readme Content -------------// - README1_CONTENTS + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x55, 0xAA }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, + 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file + }, + + //------------- Block2: Root Directory -------------// + { + // first entry is volume label + 'T', 'i', 'n', 'y', 'U', 'S', 'B', ' ', '1', ' ', ' ', 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // second entry is readme file + 'R', 'E', 'A', 'D', 'M', 'E', '1', ' ', 'T', 'X', 'T', 0x20, 0x00, 0xC6, 0x52, 0x6D, 0x65, + 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, + sizeof(README1_CONTENTS) - 1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block3: Readme Content -------------// + README1_CONTENTS }; // Invoked to determine max LUN -uint8_t tud_msc_get_maxlun_cb(void) { - return 2; // dual LUN +uint8_t tud_msc_get_maxlun_cb(void) +{ + return 2; // dual LUN } // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) { - (void) lun; // use same ID for both LUNs +void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], + uint8_t product_rev[4]) +{ + (void)lun; // use same ID for both LUNs - const char vid[] = "TinyUSB"; - const char pid[] = "Mass Storage"; - const char rev[] = "1.0"; + const char vid[] = "TinyUSB"; + const char pid[] = "Mass Storage"; + const char rev[] = "1.0"; - memcpy(vendor_id , vid, strlen(vid)); - memcpy(product_id , pid, strlen(pid)); - memcpy(product_rev, rev, strlen(rev)); + memcpy(vendor_id, vid, strlen(vid)); + memcpy(product_id, pid, strlen(pid)); + memcpy(product_rev, rev, strlen(rev)); } // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted -bool tud_msc_test_unit_ready_cb(uint8_t lun) { - if ( lun == 1 && board_button_read() ) return false; +bool tud_msc_test_unit_ready_cb(uint8_t lun) +{ + if (lun == 1 && board_button_read()) + return false; - return true; // RAM disk is always ready + return true; // RAM disk is always ready } // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) { - (void) lun; +void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size) +{ + (void)lun; - *block_count = DISK_BLOCK_NUM; - *block_size = DISK_BLOCK_SIZE; + *block_count = DISK_BLOCK_NUM; + *block_size = DISK_BLOCK_SIZE; } // Invoked when received Start Stop Unit command // - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage // - Start = 1 : active mode, if load_eject = 1 : load disk storage -bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) { - (void) lun; - (void) power_condition; - - if (load_eject) { - if (start) { - // load disk storage - } else { - // unload disk storage +bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) +{ + (void)lun; + (void)power_condition; + + if (load_eject) { + if (start) { + // load disk storage + } else { + // unload disk storage + } } - } - return true; + return true; } // Callback invoked when received READ10 command. // Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) { - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) return -1; +int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, + uint32_t bufsize) +{ + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) + return -1; - uint8_t const* addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; - memcpy(buffer, addr, bufsize); + uint8_t const *addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; + memcpy(buffer, addr, bufsize); - return (int32_t) bufsize; + return (int32_t)bufsize; } -bool tud_msc_is_writable_cb(uint8_t lun) { - (void) lun; +bool tud_msc_is_writable_cb(uint8_t lun) +{ + (void)lun; #if defined(CFG_EXAMPLE_MSC_READONLY) || defined(CFG_EXAMPLE_MSC_DUAL_READONLY) - return false; + return false; #else - return true; + return true; #endif } // Callback invoked when received WRITE10 command. // Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) { - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) return -1; +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, + uint32_t bufsize) +{ + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) + return -1; #if defined(CFG_EXAMPLE_MSC_READONLY) || defined(CFG_EXAMPLE_MSC_DUAL_READONLY) - (void) lun; - (void) lba; - (void) offset; - (void) buffer; + (void)lun; + (void)lba; + (void)offset; + (void)buffer; #else - uint8_t* addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; - memcpy(addr, buffer, bufsize); + uint8_t *addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; + memcpy(addr, buffer, bufsize); #endif - return (int32_t) bufsize; + return (int32_t)bufsize; } // Callback invoked when received an SCSI command not in built-in list below // - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE // - READ10 and WRITE10 has their own callbacks (MUST not be handled here) -int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) { - void const* response = NULL; - int32_t resplen = 0; +int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) +{ + void const *response = NULL; + int32_t resplen = 0; - // most scsi handled is input - bool in_xfer = true; + // most scsi handled is input + bool in_xfer = true; - switch (scsi_cmd[0]) { + switch (scsi_cmd[0]) { default: - // Set Sense = Invalid Command Operation - tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + // Set Sense = Invalid Command Operation + tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - // negative means error -> tinyusb could stall and/or response with failed status - return -1; - } + // negative means error -> tinyusb could stall and/or response with failed status + return -1; + } - // return resplen must not larger than bufsize - if (resplen > bufsize) resplen = bufsize; + // return resplen must not larger than bufsize + if (resplen > bufsize) + resplen = bufsize; - if (response && (resplen > 0)) { - if (in_xfer) { - memcpy(buffer, response, (size_t) resplen); - } else { - // SCSI output + if (response && (resplen > 0)) { + if (in_xfer) { + memcpy(buffer, response, (size_t)resplen); + } else { + // SCSI output + } } - } - return resplen; + return resplen; } #endif diff --git a/Libraries/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h b/Libraries/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h index 9cbbbade90f..a9278ad9524 100644 --- a/Libraries/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 1 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 1 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE 512 +#define CFG_TUD_MSC_EP_BUFSIZE 512 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c index c55bab0d896..0c6bfd7fa64 100644 --- a/Libraries/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c @@ -32,116 +32,109 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 -}; +tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_MSC, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_MSC, ITF_NUM_TOTAL }; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... - #define EPNUM_MSC_OUT 0x02 - #define EPNUM_MSC_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... +#define EPNUM_MSC_OUT 0x02 +#define EPNUM_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_SAMG - // SAMG doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_MSC_OUT 0x01 - #define EPNUM_MSC_IN 0x82 +// SAMG doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_MSC_OUT 0x01 +#define EPNUM_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X - // FT9XX doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_MSC_OUT 0x01 - #define EPNUM_MSC_IN 0x82 +// FT9XX doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_MSC_OUT 0x01 +#define EPNUM_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // MAX32 doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_MSC_OUT 0x01 - #define EPNUM_MSC_IN 0x82 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// MAX32 doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_MSC_OUT 0x01 +#define EPNUM_MSC_IN 0x82 #else - #define EPNUM_MSC_OUT 0x01 - #define EPNUM_MSC_IN 0x81 +#define EPNUM_MSC_OUT 0x01 +#define EPNUM_MSC_IN 0x81 #endif -uint8_t const desc_fs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_fs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), }; #if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), }; #endif // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -151,61 +144,63 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h index 9f30b91cb85..65830e7d477 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h @@ -36,10 +36,8 @@ typedef int sys_prot_t; - - /* define compiler specific symbols */ -#if defined (__ICCARM__) +#if defined(__ICCARM__) #define PACK_STRUCT_BEGIN #define PACK_STRUCT_STRUCT @@ -47,21 +45,21 @@ typedef int sys_prot_t; #define PACK_STRUCT_FIELD(x) x #define PACK_STRUCT_USE_INCLUDES -#elif defined (__CC_ARM) +#elif defined(__CC_ARM) #define PACK_STRUCT_BEGIN __packed #define PACK_STRUCT_STRUCT #define PACK_STRUCT_END #define PACK_STRUCT_FIELD(x) x -#elif defined (__GNUC__) +#elif defined(__GNUC__) #define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT __attribute__ ((__packed__)) +#define PACK_STRUCT_STRUCT __attribute__((__packed__)) #define PACK_STRUCT_END #define PACK_STRUCT_FIELD(x) x -#elif defined (__TASKING__) +#elif defined(__TASKING__) #define PACK_STRUCT_BEGIN #define PACK_STRUCT_STRUCT @@ -70,6 +68,11 @@ typedef int sys_prot_t; #endif -#define LWIP_PLATFORM_ASSERT(x) do { if(!(x)) while(1); } while(0) +#define LWIP_PLATFORM_ASSERT(x) \ + do { \ + if (!(x)) \ + while (1) {} \ + \ + } while (0) #endif /* __CC_H__ */ diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h index 41e8f0d677f..5599a272574 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h @@ -33,39 +33,39 @@ #define __LWIPOPTS_H__ /* Prevent having to link sys_arch.c (we don't test the API layers in unit tests) */ -#define NO_SYS 1 -#define MEM_ALIGNMENT 4 -#define LWIP_RAW 0 -#define LWIP_NETCONN 0 -#define LWIP_SOCKET 0 -#define LWIP_DHCP 0 -#define LWIP_ICMP 1 -#define LWIP_UDP 1 -#define LWIP_TCP 1 -#define LWIP_IPV4 1 -#define LWIP_IPV6 0 -#define ETH_PAD_SIZE 0 -#define LWIP_IP_ACCEPT_UDP_PORT(p) ((p) == PP_NTOHS(67)) +#define NO_SYS 1 +#define MEM_ALIGNMENT 4 +#define LWIP_RAW 0 +#define LWIP_NETCONN 0 +#define LWIP_SOCKET 0 +#define LWIP_DHCP 0 +#define LWIP_ICMP 1 +#define LWIP_UDP 1 +#define LWIP_TCP 1 +#define LWIP_IPV4 1 +#define LWIP_IPV6 0 +#define ETH_PAD_SIZE 0 +#define LWIP_IP_ACCEPT_UDP_PORT(p) ((p) == PP_NTOHS(67)) -#define TCP_MSS (1500 /*mtu*/ - 20 /*iphdr*/ - 20 /*tcphhr*/) -#define TCP_SND_BUF (4 * TCP_MSS) -#define TCP_WND (4 * TCP_MSS) +#define TCP_MSS (1500 /*mtu*/ - 20 /*iphdr*/ - 20 /*tcphhr*/) +#define TCP_SND_BUF (4 * TCP_MSS) +#define TCP_WND (4 * TCP_MSS) -#define ETHARP_SUPPORT_STATIC_ENTRIES 1 +#define ETHARP_SUPPORT_STATIC_ENTRIES 1 -#define LWIP_HTTPD_CGI 0 -#define LWIP_HTTPD_SSI 0 -#define LWIP_HTTPD_SSI_INCLUDE_TAG 0 +#define LWIP_HTTPD_CGI 0 +#define LWIP_HTTPD_SSI 0 +#define LWIP_HTTPD_SSI_INCLUDE_TAG 0 -#define LWIP_SINGLE_NETIF 1 +#define LWIP_SINGLE_NETIF 1 -#define PBUF_POOL_SIZE 4 +#define PBUF_POOL_SIZE 4 -#define HTTPD_USE_CUSTOM_FSDATA 0 +#define HTTPD_USE_CUSTOM_FSDATA 0 -#define LWIP_MULTICAST_PING 1 -#define LWIP_BROADCAST_PING 1 -#define LWIP_IPV6_MLD 0 -#define LWIP_IPV6_SEND_ROUTER_SOLICIT 0 +#define LWIP_MULTICAST_PING 1 +#define LWIP_BROADCAST_PING 1 +#define LWIP_IPV6_MLD 0 +#define LWIP_IPV6_SEND_ROUTER_SOLICIT 0 #endif /* __LWIPOPTS_H__ */ diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/main.c b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/main.c index 791e09b4f76..49352f5eeb4 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/main.c +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/main.c @@ -54,11 +54,13 @@ try changing the first byte of tud_network_mac_address[] below from 0x02 to 0x00 #include "lwip/timeouts.h" #ifdef INCLUDE_IPERF - #include "lwip/apps/lwiperf.h" +#include "lwip/apps/lwiperf.h" #endif -#define INIT_IP4(a, b, c, d) \ - { PP_HTONL(LWIP_MAKEU32(a, b, c, d)) } +#define INIT_IP4(a, b, c, d) \ + { \ + PP_HTONL(LWIP_MAKEU32(a, b, c, d)) \ + } /* lwip context */ static struct netif netif_data; @@ -69,7 +71,7 @@ static struct pbuf *received_frame; /* this is used by this code, ./class/net/net_driver.c, and usb_descriptors.c */ /* ideally speaking, this should be generated from the hardware's unique ID (if available) */ /* it is suggested that the first byte is 0x02 to indicate a link-local address */ -uint8_t tud_network_mac_address[6] = {0x02, 0x02, 0x84, 0x6A, 0x96, 0x00}; +uint8_t tud_network_mac_address[6] = { 0x02, 0x02, 0x84, 0x6A, 0x96, 0x00 }; /* network parameters of this MCU */ static const ip4_addr_t ipaddr = INIT_IP4(192, 168, 7, 1); @@ -79,178 +81,193 @@ static const ip4_addr_t gateway = INIT_IP4(0, 0, 0, 0); /* database IP addresses that can be offered to the host; this must be in RAM to store assigned MAC addresses */ static dhcp_entry_t entries[] = { /* mac ip address lease time */ - {{0}, INIT_IP4(192, 168, 7, 2), 24 * 60 * 60}, - {{0}, INIT_IP4(192, 168, 7, 3), 24 * 60 * 60}, - {{0}, INIT_IP4(192, 168, 7, 4), 24 * 60 * 60}, + { { 0 }, INIT_IP4(192, 168, 7, 2), 24 * 60 * 60 }, + { { 0 }, INIT_IP4(192, 168, 7, 3), 24 * 60 * 60 }, + { { 0 }, INIT_IP4(192, 168, 7, 4), 24 * 60 * 60 }, }; static const dhcp_config_t dhcp_config = { - .router = INIT_IP4(0, 0, 0, 0), /* router address (if any) */ - .port = 67, /* listen port */ + .router = INIT_IP4(0, 0, 0, 0), /* router address (if any) */ + .port = 67, /* listen port */ .dns = INIT_IP4(192, 168, 7, 1), /* dns server (if any) */ - "usb", /* dns suffix */ - TU_ARRAY_SIZE(entries), /* num entry */ - entries /* entries */ + "usb", /* dns suffix */ + TU_ARRAY_SIZE(entries), /* num entry */ + entries /* entries */ }; -static err_t linkoutput_fn(struct netif *netif, struct pbuf *p) { - (void) netif; +static err_t linkoutput_fn(struct netif *netif, struct pbuf *p) +{ + (void)netif; - for (;;) { - /* if TinyUSB isn't ready, we must signal back to lwip that there is nothing we can do */ - if (!tud_ready()) - return ERR_USE; + for (;;) { + /* if TinyUSB isn't ready, we must signal back to lwip that there is nothing we can do */ + if (!tud_ready()) + return ERR_USE; - /* if the network driver can accept another packet, we make it happen */ - if (tud_network_can_xmit(p->tot_len)) { - tud_network_xmit(p, 0 /* unused for this example */); - return ERR_OK; - } + /* if the network driver can accept another packet, we make it happen */ + if (tud_network_can_xmit(p->tot_len)) { + tud_network_xmit(p, 0 /* unused for this example */); + return ERR_OK; + } - /* transfer execution to TinyUSB in the hopes that it will finish transmitting the prior packet */ - tud_task(); - } + /* transfer execution to TinyUSB in the hopes that it will finish transmitting the prior packet */ + tud_task(); + } } -static err_t ip4_output_fn(struct netif *netif, struct pbuf *p, const ip4_addr_t *addr) { - return etharp_output(netif, p, addr); +static err_t ip4_output_fn(struct netif *netif, struct pbuf *p, const ip4_addr_t *addr) +{ + return etharp_output(netif, p, addr); } #if LWIP_IPV6 -static err_t ip6_output_fn(struct netif *netif, struct pbuf *p, const ip6_addr_t *addr) { - return ethip6_output(netif, p, addr); +static err_t ip6_output_fn(struct netif *netif, struct pbuf *p, const ip6_addr_t *addr) +{ + return ethip6_output(netif, p, addr); } #endif -static err_t netif_init_cb(struct netif *netif) { - LWIP_ASSERT("netif != NULL", (netif != NULL)); - netif->mtu = CFG_TUD_NET_MTU; - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_UP; - netif->state = NULL; - netif->name[0] = 'E'; - netif->name[1] = 'X'; - netif->linkoutput = linkoutput_fn; - netif->output = ip4_output_fn; +static err_t netif_init_cb(struct netif *netif) +{ + LWIP_ASSERT("netif != NULL", (netif != NULL)); + netif->mtu = CFG_TUD_NET_MTU; + netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_UP; + netif->state = NULL; + netif->name[0] = 'E'; + netif->name[1] = 'X'; + netif->linkoutput = linkoutput_fn; + netif->output = ip4_output_fn; #if LWIP_IPV6 - netif->output_ip6 = ip6_output_fn; + netif->output_ip6 = ip6_output_fn; #endif - return ERR_OK; + return ERR_OK; } -static void init_lwip(void) { - struct netif *netif = &netif_data; +static void init_lwip(void) +{ + struct netif *netif = &netif_data; - lwip_init(); + lwip_init(); - /* the lwip virtual MAC address must be different from the host's; to ensure this, we toggle the LSbit */ - netif->hwaddr_len = sizeof(tud_network_mac_address); - memcpy(netif->hwaddr, tud_network_mac_address, sizeof(tud_network_mac_address)); - netif->hwaddr[5] ^= 0x01; + /* the lwip virtual MAC address must be different from the host's; to ensure this, we toggle the LSbit */ + netif->hwaddr_len = sizeof(tud_network_mac_address); + memcpy(netif->hwaddr, tud_network_mac_address, sizeof(tud_network_mac_address)); + netif->hwaddr[5] ^= 0x01; - netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, netif_init_cb, ip_input); + netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, netif_init_cb, ip_input); #if LWIP_IPV6 - netif_create_ip6_linklocal_address(netif, 1); + netif_create_ip6_linklocal_address(netif, 1); #endif - netif_set_default(netif); + netif_set_default(netif); } /* handle any DNS requests from dns-server */ -bool dns_query_proc(const char *name, ip4_addr_t *addr) { - if (0 == strcmp(name, "tiny.usb")) { - *addr = ipaddr; - return true; - } - return false; +bool dns_query_proc(const char *name, ip4_addr_t *addr) +{ + if (0 == strcmp(name, "tiny.usb")) { + *addr = ipaddr; + return true; + } + return false; } -bool tud_network_recv_cb(const uint8_t *src, uint16_t size) { - /* this shouldn't happen, but if we get another packet before +bool tud_network_recv_cb(const uint8_t *src, uint16_t size) +{ + /* this shouldn't happen, but if we get another packet before parsing the previous, we must signal our inability to accept it */ - if (received_frame) return false; + if (received_frame) + return false; - if (size) { - struct pbuf *p = pbuf_alloc(PBUF_RAW, size, PBUF_POOL); + if (size) { + struct pbuf *p = pbuf_alloc(PBUF_RAW, size, PBUF_POOL); - if (p) { - /* pbuf_alloc() has already initialized struct; all we need to do is copy the data */ - memcpy(p->payload, src, size); + if (p) { + /* pbuf_alloc() has already initialized struct; all we need to do is copy the data */ + memcpy(p->payload, src, size); - /* store away the pointer for service_traffic() to later handle */ - received_frame = p; + /* store away the pointer for service_traffic() to later handle */ + received_frame = p; + } } - } - return true; + return true; } -uint16_t tud_network_xmit_cb(uint8_t *dst, void *ref, uint16_t arg) { - struct pbuf *p = (struct pbuf *) ref; +uint16_t tud_network_xmit_cb(uint8_t *dst, void *ref, uint16_t arg) +{ + struct pbuf *p = (struct pbuf *)ref; - (void) arg; /* unused for this example */ + (void)arg; /* unused for this example */ - return pbuf_copy_partial(p, dst, p->tot_len, 0); + return pbuf_copy_partial(p, dst, p->tot_len, 0); } -static void service_traffic(void) { - /* handle any packet received by tud_network_recv_cb() */ - if (received_frame) { - ethernet_input(received_frame, &netif_data); - pbuf_free(received_frame); - received_frame = NULL; - tud_network_recv_renew(); - } +static void service_traffic(void) +{ + /* handle any packet received by tud_network_recv_cb() */ + if (received_frame) { + ethernet_input(received_frame, &netif_data); + pbuf_free(received_frame); + received_frame = NULL; + tud_network_recv_renew(); + } - sys_check_timeouts(); + sys_check_timeouts(); } -void tud_network_init_cb(void) { - /* if the network is re-initializing and we have a leftover packet, we must do a cleanup */ - if (received_frame) { - pbuf_free(received_frame); - received_frame = NULL; - } +void tud_network_init_cb(void) +{ + /* if the network is re-initializing and we have a leftover packet, we must do a cleanup */ + if (received_frame) { + pbuf_free(received_frame); + received_frame = NULL; + } } -int main(void) { - /* initialize TinyUSB */ - board_init(); +int main(void) +{ + /* initialize TinyUSB */ + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - /* initialize lwip, dhcp-server, dns-server, and http */ - init_lwip(); - while (!netif_is_up(&netif_data)); - while (dhserv_init(&dhcp_config) != ERR_OK); - while (dnserv_init(IP_ADDR_ANY, 53, dns_query_proc) != ERR_OK); - httpd_init(); + /* initialize lwip, dhcp-server, dns-server, and http */ + init_lwip(); + while (!netif_is_up(&netif_data)) {} + while (dhserv_init(&dhcp_config) != ERR_OK) {} + while (dnserv_init(IP_ADDR_ANY, 53, dns_query_proc) != ERR_OK) {} + httpd_init(); #ifdef INCLUDE_IPERF - // test with: iperf -c 192.168.7.1 -e -i 1 -M 5000 -l 8192 -r - lwiperf_start_tcp_server_default(NULL, NULL); + // test with: iperf -c 192.168.7.1 -e -i 1 -M 5000 -l 8192 -r + lwiperf_start_tcp_server_default(NULL, NULL); #endif - while (1) { - tud_task(); - service_traffic(); - } + while (1) { + tud_task(); + service_traffic(); + } - return 0; + return 0; } /* lwip has provision for using a mutex, when applicable */ -sys_prot_t sys_arch_protect(void) { - return 0; +sys_prot_t sys_arch_protect(void) +{ + return 0; } -void sys_arch_unprotect(sys_prot_t pval) { - (void) pval; +void sys_arch_unprotect(sys_prot_t pval) +{ + (void)pval; } /* lwip needs a millisecond time source, and the TinyUSB board support code has one available */ -uint32_t sys_now(void) { - return board_millis(); +uint32_t sys_now(void) +{ + return board_millis(); } diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h index 22082fc8186..1f1f7fe16a5 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h @@ -38,12 +38,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT - #define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED - #define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -52,15 +52,15 @@ extern "C" { // defined by compiler flags for flexibility #ifndef CFG_TUSB_MCU - #error CFG_TUSB_MCU must be defined +#error CFG_TUSB_MCU must be defined #endif #ifndef CFG_TUSB_OS - #define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG - #define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack @@ -77,25 +77,25 @@ extern "C" { * - CFG_TUSB_MEM_ALIGN : __attribute__ ((aligned(4))) */ #ifndef CFG_TUSB_MEM_SECTION - #define CFG_TUSB_MEM_SECTION +#define CFG_TUSB_MEM_SECTION #endif #ifndef CFG_TUSB_MEM_ALIGN - #define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif // Use different configurations to test all net devices (also due to resource limitations) #if TU_CHECK_MCU(OPT_MCU_LPC15XX, OPT_MCU_LPC40XX, OPT_MCU_LPC51UXX, OPT_MCU_LPC54) - #define USE_ECM 1 +#define USE_ECM 1 #elif TU_CHECK_MCU(OPT_MCU_SAMD21, OPT_MCU_SAML21, OPT_MCU_SAML22) - #define USE_ECM 1 +#define USE_ECM 1 #elif TU_CHECK_MCU(OPT_MCU_STM32F0, OPT_MCU_STM32F1) - #define USE_ECM 1 +#define USE_ECM 1 #elif TU_CHECK_MCU(OPT_MCU_MAX32690, OPT_MCU_MAX32650, OPT_MCU_MAX32666, OPT_MCU_MAX78002) - #define USE_ECM 1 +#define USE_ECM 1 #else - #define USE_ECM 0 - #define INCLUDE_IPERF +#define USE_ECM 0 +#define INCLUDE_IPERF #endif //-------------------------------------------------------------------- @@ -112,12 +112,12 @@ extern "C" { // Number of NCM transfer blocks for reception side #ifndef CFG_TUD_NCM_OUT_NTB_N - #define CFG_TUD_NCM_OUT_NTB_N 1 +#define CFG_TUD_NCM_OUT_NTB_N 1 #endif // Number of NCM transfer blocks for transmission side #ifndef CFG_TUD_NCM_IN_NTB_N - #define CFG_TUD_NCM_IN_NTB_N 1 +#define CFG_TUD_NCM_IN_NTB_N 1 #endif //-------------------------------------------------------------------- @@ -125,15 +125,15 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE - #define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// // Network class has 2 drivers: ECM/RNDIS and NCM. // Only one of the drivers can be enabled -#define CFG_TUD_ECM_RNDIS USE_ECM -#define CFG_TUD_NCM (1 - CFG_TUD_ECM_RNDIS) +#define CFG_TUD_ECM_RNDIS USE_ECM +#define CFG_TUD_NCM (1 - CFG_TUD_ECM_RNDIS) #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c index 012e1bcd848..526eb4cd713 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c @@ -32,137 +32,131 @@ * Auto ProductID layout's Bitmap: * [MSB] NET | VENDOR | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) | _PID_MAP(ECM_RNDIS, 5) | _PID_MAP(NCM, 5) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4) | _PID_MAP(ECM_RNDIS, 5) | _PID_MAP(NCM, 5)) // String Descriptor Index -enum -{ - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, - STRID_INTERFACE, - STRID_MAC +enum { + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, + STRID_INTERFACE, + STRID_MAC }; -enum -{ - ITF_NUM_CDC = 0, - ITF_NUM_CDC_DATA, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_CDC = 0, ITF_NUM_CDC_DATA, ITF_NUM_TOTAL }; -enum -{ +enum { #if CFG_TUD_ECM_RNDIS - CONFIG_ID_RNDIS = 0, - CONFIG_ID_ECM = 1, + CONFIG_ID_RNDIS = 0, + CONFIG_ID_ECM = 1, #else - CONFIG_ID_NCM = 0, + CONFIG_ID_NCM = 0, #endif - CONFIG_ID_COUNT + CONFIG_ID_COUNT }; //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) device class - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0101, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0101, - .iManufacturer = STRID_MANUFACTURER, - .iProduct = STRID_PRODUCT, - .iSerialNumber = STRID_SERIAL, + .iManufacturer = STRID_MANUFACTURER, + .iProduct = STRID_PRODUCT, + .iSerialNumber = STRID_SERIAL, .bNumConfigurations = CONFIG_ID_COUNT // multiple configurations }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -#define MAIN_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_RNDIS_DESC_LEN) -#define ALT_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_ECM_DESC_LEN) -#define NCM_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_NCM_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_NET_NOTIF 0x81 - #define EPNUM_NET_OUT 0x02 - #define EPNUM_NET_IN 0x82 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X - // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_NET_NOTIF 0x81 - #define EPNUM_NET_OUT 0x02 - #define EPNUM_NET_IN 0x83 +#define MAIN_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_RNDIS_DESC_LEN) +#define ALT_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_ECM_DESC_LEN) +#define NCM_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_NCM_DESC_LEN) + +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_NET_NOTIF 0x81 +#define EPNUM_NET_OUT 0x02 +#define EPNUM_NET_IN 0x82 + +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X +// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_NET_NOTIF 0x81 +#define EPNUM_NET_OUT 0x02 +#define EPNUM_NET_IN 0x83 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // MAX32 doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_NET_NOTIF 0x81 - #define EPNUM_NET_OUT 0x02 - #define EPNUM_NET_IN 0x83 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// MAX32 doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_NET_NOTIF 0x81 +#define EPNUM_NET_OUT 0x02 +#define EPNUM_NET_IN 0x83 #else - #define EPNUM_NET_NOTIF 0x81 - #define EPNUM_NET_OUT 0x02 - #define EPNUM_NET_IN 0x82 +#define EPNUM_NET_NOTIF 0x81 +#define EPNUM_NET_OUT 0x02 +#define EPNUM_NET_IN 0x82 #endif #if CFG_TUD_ECM_RNDIS -static uint8_t const rndis_configuration[] = -{ - // Config number (index+1), interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(CONFIG_ID_RNDIS+1, ITF_NUM_TOTAL, 0, MAIN_CONFIG_TOTAL_LEN, 0, 100), +static uint8_t const rndis_configuration[] = { + // Config number (index+1), interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_RNDIS + 1, ITF_NUM_TOTAL, 0, MAIN_CONFIG_TOTAL_LEN, 0, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_RNDIS_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, EPNUM_NET_NOTIF, 8, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_RNDIS_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, EPNUM_NET_NOTIF, 8, EPNUM_NET_OUT, + EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE), }; -static uint8_t const ecm_configuration[] = -{ - // Config number (index+1), interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(CONFIG_ID_ECM+1, ITF_NUM_TOTAL, 0, ALT_CONFIG_TOTAL_LEN, 0, 100), +static uint8_t const ecm_configuration[] = { + // Config number (index+1), interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_ECM + 1, ITF_NUM_TOTAL, 0, ALT_CONFIG_TOTAL_LEN, 0, 100), - // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. - TUD_CDC_ECM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), + // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. + TUD_CDC_ECM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, + EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), }; #else -static uint8_t const ncm_configuration[] = -{ - // Config number (index+1), interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(CONFIG_ID_NCM+1, ITF_NUM_TOTAL, 0, NCM_CONFIG_TOTAL_LEN, 0, 100), +static uint8_t const ncm_configuration[] = { + // Config number (index+1), interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_NCM + 1, ITF_NUM_TOTAL, 0, NCM_CONFIG_TOTAL_LEN, 0, 100), - // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. - TUD_CDC_NCM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), + // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. + TUD_CDC_NCM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, + EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), }; #endif @@ -171,22 +165,21 @@ static uint8_t const ncm_configuration[] = // - Windows only works with RNDIS // - MacOS only works with CDC-ECM // - Linux will work on both -static uint8_t const * const configuration_arr[2] = -{ +static uint8_t const *const configuration_arr[2] = { #if CFG_TUD_ECM_RNDIS - [CONFIG_ID_RNDIS] = rndis_configuration, - [CONFIG_ID_ECM ] = ecm_configuration + [CONFIG_ID_RNDIS] = rndis_configuration, + [CONFIG_ID_ECM] = ecm_configuration #else - [CONFIG_ID_NCM ] = ncm_configuration + [CONFIG_ID_NCM] = ncm_configuration #endif }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - return (index < CONFIG_ID_COUNT) ? configuration_arr[index] : NULL; + return (index < CONFIG_ID_COUNT) ? configuration_arr[index] : NULL; } //--------------------------------------------------------------------+ @@ -194,65 +187,69 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) //--------------------------------------------------------------------+ // array of pointer to string descriptors -static char const* string_desc_arr [] = -{ - [STRID_LANGID] = (const char[]) { 0x09, 0x04 }, // supported language is English (0x0409) - [STRID_MANUFACTURER] = "TinyUSB", // Manufacturer - [STRID_PRODUCT] = "TinyUSB Device", // Product - [STRID_SERIAL] = NULL, // Serials will use unique ID if possible - [STRID_INTERFACE] = "TinyUSB Network Interface" // Interface Description - - // STRID_MAC index is handled separately +static char const *string_desc_arr[] = { + [STRID_LANGID] = (const char[]){ 0x09, 0x04 }, // supported language is English (0x0409) + [STRID_MANUFACTURER] = "TinyUSB", // Manufacturer + [STRID_PRODUCT] = "TinyUSB Device", // Product + [STRID_SERIAL] = NULL, // Serials will use unique ID if possible + [STRID_INTERFACE] = "TinyUSB Network Interface" // Interface Description + + // STRID_MAC index is handled separately }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - unsigned int chr_count = 0; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + unsigned int chr_count = 0; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; case STRID_MAC: - // Convert MAC address into UTF-16 - for (unsigned i=0; i> 4) & 0xf]; - _desc_str[1+chr_count++] = "0123456789ABCDEF"[(tud_network_mac_address[i] >> 0) & 0xf]; - } - break; + // Convert MAC address into UTF-16 + for (unsigned i = 0; i < sizeof(tud_network_mac_address); i++) { + _desc_str[1 + chr_count++] = + "0123456789ABCDEF"[(tud_network_mac_address[i] >> 4) & 0xf]; + _desc_str[1 + chr_count++] = + "0123456789ABCDEF"[(tud_network_mac_address[i] >> 0) & 0xf]; + } + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8 ) | (2*chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/uac2_headset/src/main.c b/Libraries/tinyusb/examples/device/uac2_headset/src/main.c index 0ea6e702582..d3e73105aa7 100644 --- a/Libraries/tinyusb/examples/device/uac2_headset/src/main.c +++ b/Libraries/tinyusb/examples/device/uac2_headset/src/main.c @@ -35,11 +35,11 @@ //--------------------------------------------------------------------+ // List of supported sample rates -const uint32_t sample_rates[] = {44100, 48000}; +const uint32_t sample_rates[] = { 44100, 48000 }; -uint32_t current_sample_rate = 44100; +uint32_t current_sample_rate = 44100; -#define N_SAMPLE_RATES TU_ARRAY_SIZE(sample_rates) +#define N_SAMPLE_RATES TU_ARRAY_SIZE(sample_rates) /* Blink pattern * - 25 ms : streaming data @@ -47,36 +47,34 @@ uint32_t current_sample_rate = 44100; * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum -{ - BLINK_STREAMING = 25, - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_STREAMING = 25, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; -enum -{ - VOLUME_CTRL_0_DB = 0, - VOLUME_CTRL_10_DB = 2560, - VOLUME_CTRL_20_DB = 5120, - VOLUME_CTRL_30_DB = 7680, - VOLUME_CTRL_40_DB = 10240, - VOLUME_CTRL_50_DB = 12800, - VOLUME_CTRL_60_DB = 15360, - VOLUME_CTRL_70_DB = 17920, - VOLUME_CTRL_80_DB = 20480, - VOLUME_CTRL_90_DB = 23040, - VOLUME_CTRL_100_DB = 25600, - VOLUME_CTRL_SILENCE = 0x8000, +enum { + VOLUME_CTRL_0_DB = 0, + VOLUME_CTRL_10_DB = 2560, + VOLUME_CTRL_20_DB = 5120, + VOLUME_CTRL_30_DB = 7680, + VOLUME_CTRL_40_DB = 10240, + VOLUME_CTRL_50_DB = 12800, + VOLUME_CTRL_60_DB = 15360, + VOLUME_CTRL_70_DB = 17920, + VOLUME_CTRL_80_DB = 20480, + VOLUME_CTRL_90_DB = 23040, + VOLUME_CTRL_100_DB = 25600, + VOLUME_CTRL_SILENCE = 0x8000, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 -int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 +int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 +int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 // Buffer for microphone data int32_t mic_buf[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ / 4]; @@ -85,8 +83,9 @@ int32_t spk_buf[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ / 4]; // Speaker data size received in the last frame int spk_data_size; // Resolution per format -const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = {CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX, - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX}; +const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = { + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX +}; // Current resolution, update on format change uint8_t current_resolution; @@ -97,24 +96,23 @@ void audio_control_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - TU_LOG1("Headset running\r\n"); + TU_LOG1("Headset running\r\n"); - while (1) - { - tud_task(); // TinyUSB device task - audio_task(); - audio_control_task(); - led_blinking_task(); - } + while (1) { + tud_task(); // TinyUSB device task + audio_task(); + audio_control_task(); + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -124,13 +122,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -138,156 +136,149 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } // Helper for clock get requests static bool tud_audio_clock_get_request(uint8_t rhport, audio_control_request_t const *request) { - TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - - if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) - { - if (request->bRequest == AUDIO_CS_REQ_CUR) - { - TU_LOG1("Clock get current freq %" PRIu32 "\r\n", current_sample_rate); - - audio_control_cur_4_t curf = { (int32_t) tu_htole32(current_sample_rate) }; - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); - } - else if (request->bRequest == AUDIO_CS_REQ_RANGE) - { - audio_control_range_4_n_t(N_SAMPLE_RATES) rangef = - { - .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) - }; - TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); - for(uint8_t i = 0; i < N_SAMPLE_RATES; i++) - { - rangef.subrange[i].bMin = (int32_t) sample_rates[i]; - rangef.subrange[i].bMax = (int32_t) sample_rates[i]; - rangef.subrange[i].bRes = 0; - TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); - } - - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); + + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { + if (request->bRequest == AUDIO_CS_REQ_CUR) { + TU_LOG1("Clock get current freq %" PRIu32 "\r\n", current_sample_rate); + + audio_control_cur_4_t curf = { (int32_t)tu_htole32(current_sample_rate) }; + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); + } else if (request->bRequest == AUDIO_CS_REQ_RANGE) { + audio_control_range_4_n_t(N_SAMPLE_RATES) + rangef = { .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) }; + TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); + for (uint8_t i = 0; i < N_SAMPLE_RATES; i++) { + rangef.subrange[i].bMin = (int32_t)sample_rates[i]; + rangef.subrange[i].bMax = (int32_t)sample_rates[i]; + rangef.subrange[i].bRes = 0; + TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, + (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); + } + + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); + } + } else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && + request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_1_t cur_valid = { .bCur = 1 }; + TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); } - } - else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && - request->bRequest == AUDIO_CS_REQ_CUR) - { - audio_control_cur_1_t cur_valid = { .bCur = 1 }; - TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); - } - TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - return false; + TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + return false; } // Helper for clock set requests -static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) +static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, + uint8_t const *buf) { - (void)rhport; + (void)rhport; - TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); + TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) - { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); - current_sample_rate = (uint32_t) ((audio_control_cur_4_t const *)buf)->bCur; + current_sample_rate = (uint32_t)((audio_control_cur_4_t const *)buf)->bCur; - TU_LOG1("Clock set current freq: %" PRIu32 "\r\n", current_sample_rate); + TU_LOG1("Clock set current freq: %" PRIu32 "\r\n", current_sample_rate); - return true; - } - else - { - TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - return false; - } + return true; + } else { + TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + return false; + } } // Helper for feature unit get requests -static bool tud_audio_feature_unit_get_request(uint8_t rhport, audio_control_request_t const *request) +static bool tud_audio_feature_unit_get_request(uint8_t rhport, + audio_control_request_t const *request) { - TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - - if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) - { - audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; - TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); - } - else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) - { - if (request->bRequest == AUDIO_CS_REQ_RANGE) - { - audio_control_range_2_n_t(1) range_vol = { - .wNumSubRanges = tu_htole16(1), - .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), tu_htole16(VOLUME_CTRL_0_DB), tu_htole16(256) } - }; - TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, - range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, range_vol.subrange[0].bRes / 256); - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); - } - else if (request->bRequest == AUDIO_CS_REQ_CUR) - { - audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; - TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); - return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); + + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; + TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); + } else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { + if (request->bRequest == AUDIO_CS_REQ_RANGE) { + audio_control_range_2_n_t(1) + range_vol = { .wNumSubRanges = tu_htole16(1), + .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), + tu_htole16(VOLUME_CTRL_0_DB), + tu_htole16(256) } }; + TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, + range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, + range_vol.subrange[0].bRes / 256); + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); + } else if (request->bRequest == AUDIO_CS_REQ_CUR) { + audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; + TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); + return tud_audio_buffer_and_schedule_control_xfer( + rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); + } } - } - TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); + TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); - return false; + return false; } // Helper for feature unit set requests -static bool tud_audio_feature_unit_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) +static bool tud_audio_feature_unit_set_request(uint8_t rhport, + audio_control_request_t const *request, + uint8_t const *buf) { - (void)rhport; + (void)rhport; - TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); + TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) - { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); - mute[request->bChannelNumber] = ((audio_control_cur_1_t const *)buf)->bCur; + mute[request->bChannelNumber] = ((audio_control_cur_1_t const *)buf)->bCur; - TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, mute[request->bChannelNumber]); + TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, + mute[request->bChannelNumber]); - return true; - } - else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) - { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); + return true; + } else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); - volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; + volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; - TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, volume[request->bChannelNumber] / 256); + TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, + volume[request->bChannelNumber] / 256); - return true; - } - else - { - TU_LOG1("Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", + return true; + } else { + TU_LOG1( + "Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", request->bEntityID, request->bControlSelector, request->bRequest); - return false; - } + return false; + } } //--------------------------------------------------------------------+ @@ -297,88 +288,89 @@ static bool tud_audio_feature_unit_set_request(uint8_t rhport, audio_control_req // Invoked when audio class specific get request received for an entity bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - audio_control_request_t const *request = (audio_control_request_t const *)p_request; - - if (request->bEntityID == UAC2_ENTITY_CLOCK) - return tud_audio_clock_get_request(rhport, request); - if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) - return tud_audio_feature_unit_get_request(rhport, request); - else - { - TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - } - return false; + audio_control_request_t const *request = (audio_control_request_t const *)p_request; + + if (request->bEntityID == UAC2_ENTITY_CLOCK) + return tud_audio_clock_get_request(rhport, request); + if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) + return tud_audio_feature_unit_get_request(rhport, request); + else { + TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + } + return false; } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *buf) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *buf) { - audio_control_request_t const *request = (audio_control_request_t const *)p_request; + audio_control_request_t const *request = (audio_control_request_t const *)p_request; - if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) - return tud_audio_feature_unit_set_request(rhport, request, buf); - if (request->bEntityID == UAC2_ENTITY_CLOCK) - return tud_audio_clock_set_request(rhport, request, buf); - TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); + if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) + return tud_audio_feature_unit_set_request(rhport, request, buf); + if (request->bEntityID == UAC2_ENTITY_CLOCK) + return tud_audio_clock_set_request(rhport, request, buf); + TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); - return false; + return false; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void)rhport; + (void)rhport; - uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) - blink_interval_ms = BLINK_MOUNTED; + if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) + blink_interval_ms = BLINK_MOUNTED; - return true; + return true; } -bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) +bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - (void)rhport; - uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - - TU_LOG2("Set interface %d alt %d\r\n", itf, alt); - if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) - blink_interval_ms = BLINK_STREAMING; - - // Clear buffer when streaming format is changed - spk_data_size = 0; - if(alt != 0) - { - current_resolution = resolutions_per_format[alt-1]; - } - - return true; + (void)rhport; + uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + + TU_LOG2("Set interface %d alt %d\r\n", itf, alt); + if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) + blink_interval_ms = BLINK_STREAMING; + + // Clear buffer when streaming format is changed + spk_data_size = 0; + if (alt != 0) { + current_resolution = resolutions_per_format[alt - 1]; + } + + return true; } -bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) +bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, + uint8_t ep_out, uint8_t cur_alt_setting) { - (void)rhport; - (void)func_id; - (void)ep_out; - (void)cur_alt_setting; + (void)rhport; + (void)func_id; + (void)ep_out; + (void)cur_alt_setting; - spk_data_size = tud_audio_read(spk_buf, n_bytes_received); - return true; + spk_data_size = tud_audio_read(spk_buf, n_bytes_received); + return true; } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, + uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - // This callback could be used to fill microphone data separately - return true; + // This callback could be used to fill microphone data separately + return true; } //--------------------------------------------------------------------+ @@ -387,82 +379,75 @@ bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, u void audio_task(void) { - // When new data arrived, copy data from speaker buffer, to microphone buffer - // and send it over - // Only support speaker & headphone both have the same resolution - // If one is 16bit another is 24bit be care of LOUD noise ! - if (spk_data_size) - { - if (current_resolution == 16) - { - int16_t *src = (int16_t*)spk_buf; - int16_t *limit = (int16_t*)spk_buf + spk_data_size / 2; - int16_t *dst = (int16_t*)mic_buf; - while (src < limit) - { - // Combine two channels into one - int32_t left = *src++; - int32_t right = *src++; - *dst++ = (int16_t) ((left >> 1) + (right >> 1)); - } - tud_audio_write((uint8_t *)mic_buf, (uint16_t) (spk_data_size / 2)); - spk_data_size = 0; - } - else if (current_resolution == 24) - { - int32_t *src = spk_buf; - int32_t *limit = spk_buf + spk_data_size / 4; - int32_t *dst = mic_buf; - while (src < limit) - { - // Combine two channels into one - int32_t left = *src++; - int32_t right = *src++; - *dst++ = (int32_t) ((uint32_t) ((left >> 1) + (right >> 1)) & 0xffffff00ul); - } - tud_audio_write((uint8_t *)mic_buf, (uint16_t) (spk_data_size / 2)); - spk_data_size = 0; + // When new data arrived, copy data from speaker buffer, to microphone buffer + // and send it over + // Only support speaker & headphone both have the same resolution + // If one is 16bit another is 24bit be care of LOUD noise ! + if (spk_data_size) { + if (current_resolution == 16) { + int16_t *src = (int16_t *)spk_buf; + int16_t *limit = (int16_t *)spk_buf + spk_data_size / 2; + int16_t *dst = (int16_t *)mic_buf; + while (src < limit) { + // Combine two channels into one + int32_t left = *src++; + int32_t right = *src++; + *dst++ = (int16_t)((left >> 1) + (right >> 1)); + } + tud_audio_write((uint8_t *)mic_buf, (uint16_t)(spk_data_size / 2)); + spk_data_size = 0; + } else if (current_resolution == 24) { + int32_t *src = spk_buf; + int32_t *limit = spk_buf + spk_data_size / 4; + int32_t *dst = mic_buf; + while (src < limit) { + // Combine two channels into one + int32_t left = *src++; + int32_t right = *src++; + *dst++ = (int32_t)((uint32_t)((left >> 1) + (right >> 1)) & 0xffffff00ul); + } + tud_audio_write((uint8_t *)mic_buf, (uint16_t)(spk_data_size / 2)); + spk_data_size = 0; + } } - } } void audio_control_task(void) { - // Press on-board button to control volume - // Open host volume control, volume should switch between 10% and 100% - - // Poll every 50ms - const uint32_t interval_ms = 50; - static uint32_t start_ms = 0; - static uint32_t btn_prev = 0; - - if ( board_millis() - start_ms < interval_ms) return; // not enough time - start_ms += interval_ms; - - uint32_t btn = board_button_read(); - - if (!btn_prev && btn) - { - // Adjust volume between 0dB (100%) and -30dB (10%) - for (int i = 0; i < CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1; i++) - { - volume[i] = volume[i] == 0 ? -VOLUME_CTRL_30_DB : 0; + // Press on-board button to control volume + // Open host volume control, volume should switch between 10% and 100% + + // Poll every 50ms + const uint32_t interval_ms = 50; + static uint32_t start_ms = 0; + static uint32_t btn_prev = 0; + + if (board_millis() - start_ms < interval_ms) + return; // not enough time + start_ms += interval_ms; + + uint32_t btn = board_button_read(); + + if (!btn_prev && btn) { + // Adjust volume between 0dB (100%) and -30dB (10%) + for (int i = 0; i < CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1; i++) { + volume[i] = volume[i] == 0 ? -VOLUME_CTRL_30_DB : 0; + } + + // 6.1 Interrupt Data Message + const audio_interrupt_data_t data = { + .bInfo = 0, // Class-specific interrupt, originated from an interface + .bAttribute = AUDIO_CS_REQ_CUR, // Caused by current settings + .wValue_cn_or_mcn = 0, // CH0: master volume + .wValue_cs = AUDIO_FU_CTRL_VOLUME, // Volume change + .wIndex_ep_or_int = 0, // From the interface itself + .wIndex_entity_id = UAC2_ENTITY_SPK_FEATURE_UNIT, // From feature unit + }; + + tud_audio_int_write(&data); } - // 6.1 Interrupt Data Message - const audio_interrupt_data_t data = { - .bInfo = 0, // Class-specific interrupt, originated from an interface - .bAttribute = AUDIO_CS_REQ_CUR, // Caused by current settings - .wValue_cn_or_mcn = 0, // CH0: master volume - .wValue_cs = AUDIO_FU_CTRL_VOLUME, // Volume change - .wIndex_ep_or_int = 0, // From the interface itself - .wIndex_entity_id = UAC2_ENTITY_SPK_FEATURE_UNIT, // From feature unit - }; - - tud_audio_int_write(&data); - } - - btn_prev = btn; + btn_prev = btn; } //--------------------------------------------------------------------+ @@ -470,13 +455,14 @@ void audio_control_task(void) //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) return; - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; + board_led_write(led_state); + led_state = 1 - led_state; } diff --git a/Libraries/tinyusb/examples/device/uac2_headset/src/tusb_config.h b/Libraries/tinyusb/examples/device/uac2_headset/src/tusb_config.h index 328e35f5225..84973700c30 100644 --- a/Libraries/tinyusb/examples/device/uac2_headset/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/uac2_headset/src/tusb_config.h @@ -39,12 +39,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -57,18 +57,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -82,7 +82,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -90,79 +90,99 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Allow volume controlled by on-baord button -#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 1 +#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 1 -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_HEADSET_STEREO_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_HEADSET_STEREO_DESC_LEN // How many formats are used, need to adjust USB descriptor if changed -#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 +#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 // Audio format type I specifications /* 24bit/48kHz is the best quality for headset or 24bit/96kHz for 2ch speaker, high-speed is needed beyond this */ -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 48000 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX 2 +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 48000 +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX 2 // 16bit in 16bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX 16 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 #if defined(__RX__) // 8bit in 8bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 8 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 8 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 1 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 8 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 1 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 8 #else // 24bit in 32bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 24 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 #endif // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN)*2 -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ + TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) * 2 +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX \ + TU_MAX( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT)*2 -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ \ + TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT) * 2 +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX \ + TU_MAX( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 2 +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 2 // Size of control request buffer -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c index a042ad206f8..0489892181e 100644 --- a/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c @@ -34,106 +34,107 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_AUDIO_IN 0x03 - #define EPNUM_AUDIO_OUT 0x03 - #define EPNUM_AUDIO_INT 0x01 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_AUDIO_IN 0x03 +#define EPNUM_AUDIO_OUT 0x03 +#define EPNUM_AUDIO_INT 0x01 #elif CFG_TUSB_MCU == OPT_MCU_NRF5X - // ISO endpoints for NRF5x are fixed to 0x08 (0x88) - #define EPNUM_AUDIO_IN 0x08 - #define EPNUM_AUDIO_OUT 0x08 - #define EPNUM_AUDIO_INT 0x01 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X - // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_AUDIO_IN 0x01 - #define EPNUM_AUDIO_OUT 0x02 - #define EPNUM_AUDIO_INT 0x03 +// ISO endpoints for NRF5x are fixed to 0x08 (0x88) +#define EPNUM_AUDIO_IN 0x08 +#define EPNUM_AUDIO_OUT 0x08 +#define EPNUM_AUDIO_INT 0x01 + +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X +// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_AUDIO_IN 0x01 +#define EPNUM_AUDIO_OUT 0x02 +#define EPNUM_AUDIO_INT 0x03 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X - // FT9XX doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_AUDIO_IN 0x01 - #define EPNUM_AUDIO_OUT 0x02 - #define EPNUM_AUDIO_INT 0x03 +// FT9XX doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_AUDIO_IN 0x01 +#define EPNUM_AUDIO_OUT 0x02 +#define EPNUM_AUDIO_INT 0x03 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // MAX32 doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_AUDIO_IN 0x01 - #define EPNUM_AUDIO_OUT 0x02 - #define EPNUM_AUDIO_INT 0x03 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// MAX32 doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_AUDIO_IN 0x01 +#define EPNUM_AUDIO_OUT 0x02 +#define EPNUM_AUDIO_INT 0x03 #else - #define EPNUM_AUDIO_IN 0x01 - #define EPNUM_AUDIO_OUT 0x01 - #define EPNUM_AUDIO_INT 0x02 +#define EPNUM_AUDIO_IN 0x01 +#define EPNUM_AUDIO_OUT 0x01 +#define EPNUM_AUDIO_INT 0x02 #endif -uint8_t const desc_configuration[] = -{ +uint8_t const desc_configuration[] = { // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(2, EPNUM_AUDIO_OUT, EPNUM_AUDIO_IN | 0x80, EPNUM_AUDIO_INT | 0x80) + TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(2, EPNUM_AUDIO_OUT, EPNUM_AUDIO_IN | 0x80, + EPNUM_AUDIO_INT | 0x80) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -142,63 +143,65 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB headset", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB Speakers", // 4: Audio Interface - "TinyUSB Microphone", // 5: Audio Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB headset", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB Speakers", // 4: Audio Interface + "TinyUSB Microphone", // 5: Audio Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h index da0da83e837..012e5dfbd0e 100644 --- a/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h @@ -29,130 +29,202 @@ // #include "tusb.h" // Unit numbers are arbitrary selected -#define UAC2_ENTITY_CLOCK 0x04 +#define UAC2_ENTITY_CLOCK 0x04 // Speaker path -#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 -#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 +#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 +#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 #define UAC2_ENTITY_SPK_OUTPUT_TERMINAL 0x03 // Microphone path -#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 +#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 #define UAC2_ENTITY_MIC_OUTPUT_TERMINAL 0x13 -enum -{ - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING_SPK, - ITF_NUM_AUDIO_STREAMING_MIC, - ITF_NUM_TOTAL +enum { + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING_SPK, + ITF_NUM_AUDIO_STREAMING_MIC, + ITF_NUM_TOTAL }; -#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ - + TUD_AUDIO_DESC_STD_AC_LEN\ - + TUD_AUDIO_DESC_CS_AC_LEN\ - + TUD_AUDIO_DESC_CLK_SRC_LEN\ - + TUD_AUDIO_DESC_INPUT_TERM_LEN\ - + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN\ - + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ - + TUD_AUDIO_DESC_INPUT_TERM_LEN\ - + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ - + TUD_AUDIO_DESC_STD_AC_INT_EP_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - /* Interface 1, Alternate 1 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ - /* Interface 1, Alternate 2 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ - /* Interface 2, Alternate 0 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - /* Interface 2, Alternate 1 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ - /* Interface 2, Alternate 2 */\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) +#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN \ + (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ + TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ + TUD_AUDIO_DESC_STD_AC_INT_EP_LEN /* Interface 1, Alternate 0 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 1, Alternate 1 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 1, Alternate 2 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 2, Alternate 0 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 2, Alternate 1 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 2, Alternate 2 */ \ + + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) -#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin, _epint) \ - /* Standard Interface Association Descriptor (IAD) */\ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ ITF_NUM_TOTAL, /*_stridx*/ 0x00),\ - /* Standard AC Interface Descriptor(4.7.1) */\ - TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x01, /*_stridx*/ _stridx),\ - /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ - TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ - /* Clock Source Descriptor(4.7.2.1) */\ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, /*_assocTerm*/ 0x00, /*_stridx*/ 0x00), \ - /* Input Terminal Descriptor(4.7.2.4) */\ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ - /* Feature Unit Descriptor(4.7.2.8) */\ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(/*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_stridx*/ 0x00),\ - /* Output Terminal Descriptor(4.7.2.5) */\ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ - /* Input Terminal Descriptor(4.7.2.4) */\ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ - /* Output Terminal Descriptor(4.7.2.5) */\ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ - /* Standard AC Interrupt Endpoint Descriptor(4.8.2.1) */\ - TUD_AUDIO_DESC_STD_AC_INT_EP(/*_ep*/ _epint, /*_interval*/ 0x01), \ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x05),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 1 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ADAPTIVE | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ - /* Interface 1, Alternate 2 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ADAPTIVE | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x04),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 2, Alternate 1 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ - /* Interface 2, Alternate 2 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin, _epint) \ + /* Standard Interface Association Descriptor (IAD) */ \ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ ITF_NUM_TOTAL, \ + /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ + TUD_AUDIO_DESC_STD_AC( \ + /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x01, \ + /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ + TUD_AUDIO_DESC_CS_AC( \ + /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, \ + /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + \ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN, \ + /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, \ + /*_assocTerm*/ 0x00, \ + /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ + TUD_AUDIO_DESC_INPUT_TERM( \ + /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, \ + /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ + /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ + /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL( \ + /*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, \ + /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ \ + (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ \ + (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ \ + (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), \ + /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, \ + /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, \ + /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, \ + /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ + TUD_AUDIO_DESC_INPUT_TERM( \ + /*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, \ + /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ + /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ + /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ + TUD_AUDIO_DESC_OUTPUT_TERM( \ + /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, \ + /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, \ + /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, \ + /*_ctrl*/ 0x0000, \ + /*_stridx*/ 0x00), /* Standard AC Interrupt Endpoint Descriptor(4.8.2.1) */ \ + TUD_AUDIO_DESC_STD_AC_INT_EP(/*_ep*/ _epint, /*_interval*/ \ + 0x01), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), \ + /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ \ + 0x05), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x05), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epout, /*_attr*/ \ + (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ADAPTIVE | \ + (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, \ + /*_lockdelay*/ 0x0001), /* Interface 1, Alternate 2 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x05), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epout, /*_attr*/ \ + (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ADAPTIVE | \ + (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ \ + 0x0001), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */ \ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), \ + /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ \ + 0x04), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 2, Alternate 1 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x04), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epin, /*_attr*/ \ + (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ + (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000), /* Interface 2, Alternate 2 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x04), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ + /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epin, /*_attr*/ \ + (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ + (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ + TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ + CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000) #endif diff --git a/Libraries/tinyusb/examples/device/usbtmc/src/main.c b/Libraries/tinyusb/examples/device/usbtmc/src/main.c index 9d8f0783d28..25024a6b1f5 100644 --- a/Libraries/tinyusb/examples/device/usbtmc/src/main.c +++ b/Libraries/tinyusb/examples/device/usbtmc/src/main.c @@ -39,10 +39,10 @@ * - 0 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 0, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 0, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -52,21 +52,20 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) - { - tud_task(); // tinyusb device task - led_blinking_task(); - usbtmc_app_task_iter(); - } + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + usbtmc_app_task_iter(); + } } //--------------------------------------------------------------------+ @@ -76,13 +75,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -90,57 +89,53 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ // BLINKING TASK + Indicator pulse //--------------------------------------------------------------------+ - volatile uint8_t doPulse = false; // called from USB context -void led_indicator_pulse(void) { - doPulse = true; +void led_indicator_pulse(void) +{ + doPulse = true; } void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; - if(blink_interval_ms == BLINK_MOUNTED) // Mounted - { - if(doPulse) - { - led_state = true; - board_led_write(true); - start_ms = board_millis(); - doPulse = false; - } - else if (led_state == true) + static uint32_t start_ms = 0; + static bool led_state = false; + if (blink_interval_ms == BLINK_MOUNTED) // Mounted { - if ( board_millis() - start_ms < 750) //Spec says blink must be between 500 and 1000 ms. - { - return; // not enough time - } - led_state = false; - board_led_write(false); + if (doPulse) { + led_state = true; + board_led_write(true); + start_ms = board_millis(); + doPulse = false; + } else if (led_state == true) { + if (board_millis() - start_ms < 750) //Spec says blink must be between 500 and 1000 ms. + { + return; // not enough time + } + led_state = false; + board_led_write(false); + } + } else { + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle } - } - else - { - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } } diff --git a/Libraries/tinyusb/examples/device/usbtmc/src/tusb_config.h b/Libraries/tinyusb/examples/device/usbtmc/src/tusb_config.h index ab486b1088b..50374c39468 100644 --- a/Libraries/tinyusb/examples/device/usbtmc/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/usbtmc/src/tusb_config.h @@ -9,7 +9,7 @@ #define TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -18,12 +18,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -36,18 +36,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -61,7 +61,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -69,17 +69,17 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_USBTMC 1 -#define CFG_TUD_USBTMC_ENABLE_INT_EP 1 -#define CFG_TUD_USBTMC_ENABLE_488 1 +#define CFG_TUD_USBTMC 1 +#define CFG_TUD_USBTMC_ENABLE_INT_EP 1 +#define CFG_TUD_USBTMC_ENABLE_488 1 #ifdef __cplusplus - } +} #endif #endif /* TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/usbtmc/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/usbtmc/src/usb_descriptors.c index 54948291edc..1e20f6b9525 100644 --- a/Libraries/tinyusb/examples/device/usbtmc/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/usbtmc/src/usb_descriptors.c @@ -34,43 +34,41 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, +tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = USB_BCD, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = USB_BCD, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, - .bNumConfigurations = 0x01 -}; + .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ @@ -79,94 +77,89 @@ uint8_t const * tud_descriptor_device_cb(void) #if defined(CFG_TUD_USBTMC) -# define TUD_USBTMC_DESC_MAIN(_itfnum,_bNumEndpoints, _bulkMaxPacketLength) \ - TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, /*_stridx = */ 4u, TUD_USBTMC_PROTOCOL_USB488), \ - TUD_USBTMC_BULK_DESCRIPTORS(/* OUT = */0x01, /* IN = */ 0x81, /* packet size = */_bulkMaxPacketLength) +#define TUD_USBTMC_DESC_MAIN(_itfnum, _bNumEndpoints, _bulkMaxPacketLength) \ + TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, /*_stridx = */ 4u, \ + TUD_USBTMC_PROTOCOL_USB488), \ + TUD_USBTMC_BULK_DESCRIPTORS(/* OUT = */ 0x01, /* IN = */ 0x81, \ + /* packet size = */ _bulkMaxPacketLength) #if CFG_TUD_USBTMC_ENABLE_INT_EP // USBTMC Interrupt xfer always has length of 2, but we use epMaxSize=8 for // compatibility with mcus that only allow 8, 16, 32 or 64 for FS endpoints -# define TUD_USBTMC_DESC(_itfnum, _bulkMaxPacketLength) \ - TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 3, _bulkMaxPacketLength), \ - TUD_USBTMC_INT_DESCRIPTOR(/* INT ep # */ 0x82, /* epMaxSize = */ 8, /* bInterval = */16u ) -# define TUD_USBTMC_DESC_LEN (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN + TUD_USBTMC_INT_DESCRIPTOR_LEN) +#define TUD_USBTMC_DESC(_itfnum, _bulkMaxPacketLength) \ + TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 3, _bulkMaxPacketLength), \ + TUD_USBTMC_INT_DESCRIPTOR(/* INT ep # */ 0x82, /* epMaxSize = */ 8, /* bInterval = */ 16u) +#define TUD_USBTMC_DESC_LEN \ + (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN + TUD_USBTMC_INT_DESCRIPTOR_LEN) #else -# define TUD_USBTMC_DESC(_itfnum, _bulkMaxPacketLength) \ - TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 2u, _bulkMaxPacketLength) -# define TUD_USBTMC_DESC_LEN (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN) +#define TUD_USBTMC_DESC(_itfnum, _bulkMaxPacketLength) \ + TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 2u, _bulkMaxPacketLength) +#define TUD_USBTMC_DESC_LEN (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN) #endif /* CFG_TUD_USBTMC_ENABLE_INT_EP */ #else -# define USBTMC_DESC_LEN (0) +#define USBTMC_DESC_LEN (0) #endif /* CFG_TUD_USBTMC */ -enum -{ - ITF_NUM_USBTMC, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_USBTMC, ITF_NUM_TOTAL }; +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_USBTMC_DESC_LEN) -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_USBTMC_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - // Note: since CDC EP ( 1 & 2), HID (4) are spot-on, thus we only need to force - // endpoint number for MSC to 5 - #define EPNUM_MSC 0x05 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +// Note: since CDC EP ( 1 & 2), HID (4) are spot-on, thus we only need to force +// endpoint number for MSC to 5 +#define EPNUM_MSC 0x05 #else - #define EPNUM_MSC 0x03 +#define EPNUM_MSC 0x03 #endif +uint8_t const desc_fs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), -uint8_t const desc_fs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - - TUD_USBTMC_DESC(ITF_NUM_USBTMC, /* _bulkMaxPacketLength = */ 64), + TUD_USBTMC_DESC(ITF_NUM_USBTMC, /* _bulkMaxPacketLength = */ 64), }; #if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - TUD_USBTMC_DESC(ITF_NUM_USBTMC, /* _bulkMaxPacketLength = */ 512), + TUD_USBTMC_DESC(ITF_NUM_USBTMC, /* _bulkMaxPacketLength = */ 512), }; // other speed configuration uint8_t desc_other_speed_config[CONFIG_TOTAL_LEN]; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed -tusb_desc_device_qualifier_t const desc_device_qualifier = -{ - .bLength = sizeof(tusb_desc_device_qualifier_t), - .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, - .bcdUSB = USB_BCD, - - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .bNumConfigurations = 0x01, - .bReserved = 0x00 +tusb_desc_device_qualifier_t const desc_device_qualifier = { + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = USB_BCD, + + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 0x01, + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const* tud_descriptor_device_qualifier_cb(void) +uint8_t const *tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const*) &desc_device_qualifier; + return (uint8_t const *)&desc_device_qualifier; } #endif @@ -174,14 +167,14 @@ uint8_t const* tud_descriptor_device_qualifier_cb(void) // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations + (void)index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -191,62 +184,64 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB USBTMC", // 4: USBTMC +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB USBTMC", // 4: USBTMC }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/usbtmc/src/usbtmc_app.c b/Libraries/tinyusb/examples/device/usbtmc/src/usbtmc_app.c index fb25982c7de..6793c2c13bf 100644 --- a/Libraries/tinyusb/examples/device/usbtmc/src/usbtmc_app.c +++ b/Libraries/tinyusb/examples/device/usbtmc/src/usbtmc_app.c @@ -24,7 +24,7 @@ */ #include -#include /* atoi */ +#include /* atoi */ #include "tusb.h" #include "bsp/board_api.h" #include "main.h" @@ -67,9 +67,9 @@ tud_usbtmc_app_capabilities = }; #define IEEE4882_STB_QUESTIONABLE (0x08u) -#define IEEE4882_STB_MAV (0x10u) -#define IEEE4882_STB_SER (0x20u) -#define IEEE4882_STB_SRQ (0x40u) +#define IEEE4882_STB_MAV (0x10u) +#define IEEE4882_STB_SER (0x20u) +#define IEEE4882_STB_SRQ (0x40u) static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer123456\r\n"; //static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer and a bunch of other text to make it longer than a packet, perhaps? lets make it three transfers...\n"; @@ -87,11 +87,10 @@ static size_t buffer_len; static size_t buffer_tx_ix; // for transmitting using multiple transfers static uint8_t buffer[225]; // A few packets long should be enough. - void tud_usbtmc_open_cb(uint8_t interface_id) { - (void)interface_id; - tud_usbtmc_start_bus_read(); + (void)interface_id; + tud_usbtmc_start_bus_read(); } #if (CFG_TUD_USBTMC_ENABLE_488) @@ -101,220 +100,206 @@ usbtmc_response_capabilities_t const * #endif tud_usbtmc_get_capabilities_cb() { - return &tud_usbtmc_app_capabilities; + return &tud_usbtmc_app_capabilities; } - -bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t* msg) { - (void)msg; - // Let trigger set the SRQ - status |= IEEE4882_STB_SRQ; - return true; +bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t *msg) +{ + (void)msg; + // Let trigger set the SRQ + status |= IEEE4882_STB_SRQ; + return true; } -bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const * msgHeader) +bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const *msgHeader) { - (void)msgHeader; - buffer_len = 0; - if(msgHeader->TransferSize > sizeof(buffer)) - { - - return false; - } - return true; + (void)msgHeader; + buffer_len = 0; + if (msgHeader->TransferSize > sizeof(buffer)) { + return false; + } + return true; } bool tud_usbtmc_msg_data_cb(void *data, size_t len, bool transfer_complete) { - // If transfer isn't finished, we just ignore it (for now) + // If transfer isn't finished, we just ignore it (for now) - if(len + buffer_len < sizeof(buffer)) - { - memcpy(&(buffer[buffer_len]), data, len); - buffer_len += len; - } - else - { - return false; // buffer overflow! - } - queryState = transfer_complete; - idnQuery = 0; + if (len + buffer_len < sizeof(buffer)) { + memcpy(&(buffer[buffer_len]), data, len); + buffer_len += len; + } else { + return false; // buffer overflow! + } + queryState = transfer_complete; + idnQuery = 0; - if ( transfer_complete && (len >= 4) && - (!strncmp("*idn?", data, 4) || !strncmp("*IDN?", data, 4)) ) - { - idnQuery = 1; - } + if (transfer_complete && (len >= 4) && + (!strncmp("*idn?", data, 4) || !strncmp("*IDN?", data, 4))) { + idnQuery = 1; + } - if ( transfer_complete && - (!strncmp("delay ", data, 5) || !strncmp("DELAY ", data, 5)) ) - { - queryState = 0; - int d = atoi((char*)data + 5); - if(d > 10000) - d = 10000; - if(d<0) - d=0; - resp_delay = (uint32_t)d; - } - tud_usbtmc_start_bus_read(); - return true; + if (transfer_complete && (!strncmp("delay ", data, 5) || !strncmp("DELAY ", data, 5))) { + queryState = 0; + int d = atoi((char *)data + 5); + if (d > 10000) + d = 10000; + if (d < 0) + d = 0; + resp_delay = (uint32_t)d; + } + tud_usbtmc_start_bus_read(); + return true; } bool tud_usbtmc_msgBulkIn_complete_cb() { - if((buffer_tx_ix == buffer_len) || idnQuery) // done - { - status &= (uint8_t)~(IEEE4882_STB_MAV); // clear MAV - queryState = 0; - bulkInStarted = 0; - buffer_tx_ix = 0; - } - tud_usbtmc_start_bus_read(); + if ((buffer_tx_ix == buffer_len) || idnQuery) // done + { + status &= (uint8_t) ~(IEEE4882_STB_MAV); // clear MAV + queryState = 0; + bulkInStarted = 0; + buffer_tx_ix = 0; + } + tud_usbtmc_start_bus_read(); - return true; + return true; } static unsigned int msgReqLen; -bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const * request) +bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const *request) { - msgReqLen = request->TransferSize; + msgReqLen = request->TransferSize; #ifdef xDEBUG - uart_tx_str_sync("MSG_IN_DATA: Requested!\r\n"); + uart_tx_str_sync("MSG_IN_DATA: Requested!\r\n"); #endif - if(queryState == 0 || (buffer_tx_ix == 0)) - { - TU_ASSERT(bulkInStarted == 0); - bulkInStarted = 1; - - // > If a USBTMC interface receives a Bulk-IN request prior to receiving a USBTMC command message - // that expects a response, the device must NAK the request (*not stall*) - } - else - { - size_t txlen = tu_min32(buffer_len-buffer_tx_ix,msgReqLen); - tud_usbtmc_transmit_dev_msg_data(&buffer[buffer_tx_ix], txlen, - (buffer_tx_ix+txlen) == buffer_len, false); - buffer_tx_ix += txlen; - } - // Always return true indicating not to stall the EP. - return true; + if (queryState == 0 || (buffer_tx_ix == 0)) { + TU_ASSERT(bulkInStarted == 0); + bulkInStarted = 1; + + // > If a USBTMC interface receives a Bulk-IN request prior to receiving a USBTMC command message + // that expects a response, the device must NAK the request (*not stall*) + } else { + size_t txlen = tu_min32(buffer_len - buffer_tx_ix, msgReqLen); + tud_usbtmc_transmit_dev_msg_data(&buffer[buffer_tx_ix], txlen, + (buffer_tx_ix + txlen) == buffer_len, false); + buffer_tx_ix += txlen; + } + // Always return true indicating not to stall the EP. + return true; } -void usbtmc_app_task_iter(void) { - switch(queryState) { - case 0: - break; - case 1: - queryDelayStart = board_millis(); - queryState = 2; - break; - case 2: - if( (board_millis() - queryDelayStart) > resp_delay) { - queryDelayStart = board_millis(); - queryState=3; - status |= 0x10u; // MAV - status |= 0x40u; // SRQ - } - break; - case 3: - if( (board_millis() - queryDelayStart) > resp_delay) { - queryState = 4; - } - break; - case 4: // time to transmit; - if(bulkInStarted && (buffer_tx_ix == 0)) { - if(idnQuery) - { - tud_usbtmc_transmit_dev_msg_data(idn, tu_min32(sizeof(idn)-1,msgReqLen),true,false); - queryState = 0; - bulkInStarted = 0; - } - else - { - buffer_tx_ix = tu_min32(buffer_len,msgReqLen); - tud_usbtmc_transmit_dev_msg_data(buffer, buffer_tx_ix, buffer_tx_ix == buffer_len, false); - } - // MAV is cleared in the transfer complete callback. +void usbtmc_app_task_iter(void) +{ + switch (queryState) { + case 0: + break; + case 1: + queryDelayStart = board_millis(); + queryState = 2; + break; + case 2: + if ((board_millis() - queryDelayStart) > resp_delay) { + queryDelayStart = board_millis(); + queryState = 3; + status |= 0x10u; // MAV + status |= 0x40u; // SRQ + } + break; + case 3: + if ((board_millis() - queryDelayStart) > resp_delay) { + queryState = 4; + } + break; + case 4: // time to transmit; + if (bulkInStarted && (buffer_tx_ix == 0)) { + if (idnQuery) { + tud_usbtmc_transmit_dev_msg_data(idn, tu_min32(sizeof(idn) - 1, msgReqLen), true, + false); + queryState = 0; + bulkInStarted = 0; + } else { + buffer_tx_ix = tu_min32(buffer_len, msgReqLen); + tud_usbtmc_transmit_dev_msg_data(buffer, buffer_tx_ix, buffer_tx_ix == buffer_len, + false); + } + // MAV is cleared in the transfer complete callback. + } + break; + default: + TU_ASSERT(false, ); } - break; - default: - TU_ASSERT(false,); - } } bool tud_usbtmc_initiate_clear_cb(uint8_t *tmcResult) { - *tmcResult = USBTMC_STATUS_SUCCESS; - queryState = 0; - bulkInStarted = false; - status = 0; - return true; + *tmcResult = USBTMC_STATUS_SUCCESS; + queryState = 0; + bulkInStarted = false; + status = 0; + return true; } bool tud_usbtmc_check_clear_cb(usbtmc_get_clear_status_rsp_t *rsp) { - queryState = 0; - bulkInStarted = false; - status = 0; - buffer_tx_ix = 0u; - buffer_len = 0u; - rsp->USBTMC_status = USBTMC_STATUS_SUCCESS; - rsp->bmClear.BulkInFifoBytes = 0u; - return true; + queryState = 0; + bulkInStarted = false; + status = 0; + buffer_tx_ix = 0u; + buffer_len = 0u; + rsp->USBTMC_status = USBTMC_STATUS_SUCCESS; + rsp->bmClear.BulkInFifoBytes = 0u; + return true; } bool tud_usbtmc_initiate_abort_bulk_in_cb(uint8_t *tmcResult) { - bulkInStarted = 0; - *tmcResult = USBTMC_STATUS_SUCCESS; - return true; + bulkInStarted = 0; + *tmcResult = USBTMC_STATUS_SUCCESS; + return true; } bool tud_usbtmc_check_abort_bulk_in_cb(usbtmc_check_abort_bulk_rsp_t *rsp) { - (void)rsp; - tud_usbtmc_start_bus_read(); - return true; + (void)rsp; + tud_usbtmc_start_bus_read(); + return true; } bool tud_usbtmc_initiate_abort_bulk_out_cb(uint8_t *tmcResult) { - *tmcResult = USBTMC_STATUS_SUCCESS; - return true; - + *tmcResult = USBTMC_STATUS_SUCCESS; + return true; } bool tud_usbtmc_check_abort_bulk_out_cb(usbtmc_check_abort_bulk_rsp_t *rsp) { - (void)rsp; - tud_usbtmc_start_bus_read(); - return true; + (void)rsp; + tud_usbtmc_start_bus_read(); + return true; } -void tud_usbtmc_bulkIn_clearFeature_cb(void) -{ -} +void tud_usbtmc_bulkIn_clearFeature_cb(void) {} void tud_usbtmc_bulkOut_clearFeature_cb(void) { - tud_usbtmc_start_bus_read(); + tud_usbtmc_start_bus_read(); } // Return status byte, but put the transfer result status code in the rspResult argument. uint8_t tud_usbtmc_get_stb_cb(uint8_t *tmcResult) { - uint8_t old_status = status; - status = (uint8_t)(status & ~(IEEE4882_STB_SRQ)); // clear SRQ + uint8_t old_status = status; + status = (uint8_t)(status & ~(IEEE4882_STB_SRQ)); // clear SRQ - *tmcResult = USBTMC_STATUS_SUCCESS; - // Increment status so that we see different results on each read... + *tmcResult = USBTMC_STATUS_SUCCESS; + // Increment status so that we see different results on each read... - return old_status; + return old_status; } -bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const * msg, uint8_t *tmcResult) +bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const *msg, uint8_t *tmcResult) { - (void)msg; - led_indicator_pulse(); - *tmcResult = USBTMC_STATUS_SUCCESS; - return true; + (void)msg; + led_indicator_pulse(); + *tmcResult = USBTMC_STATUS_SUCCESS; + return true; } diff --git a/Libraries/tinyusb/examples/device/video_capture/src/images.h b/Libraries/tinyusb/examples/device/video_capture/src/images.h index ac372cb16d6..41dce26d75c 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/images.h +++ b/Libraries/tinyusb/examples/device/video_capture/src/images.h @@ -1,1939 +1,25219 @@ #if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) // uncopmressed frame static const unsigned char frame_buffer[128 * (96 + 1) * 2] = { - /* 0 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 1 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 2 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 3 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 4 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 5 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 6 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 7 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 8 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 9 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 10 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 11 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 12 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 13 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 14 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 15 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 16 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 17 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 18 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 19 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 20 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 21 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 22 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 23 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 24 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 25 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 26 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 27 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 28 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 29 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 30 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 31 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 32 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 33 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 34 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 35 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 36 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 37 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 38 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 39 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 40 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 41 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 42 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 43 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 44 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 45 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 46 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 47 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 48 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 49 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 50 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 51 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 52 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 53 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 54 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 55 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 56 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 57 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 58 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 59 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 60 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 61 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 62 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 63 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 64 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 65 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 66 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 67 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 68 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 69 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 70 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 71 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 72 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 73 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 74 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 75 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 76 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 77 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 78 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 79 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 80 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 81 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 82 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 83 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 84 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 85 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 86 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 87 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 88 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 89 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 90 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 91 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 92 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 93 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 94 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 95 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 96 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 0 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 1 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 2 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 3 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 4 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 5 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 6 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 7 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 8 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 9 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 10 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 11 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 12 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 13 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 14 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 15 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 16 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 17 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 18 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 19 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 20 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 21 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 22 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 23 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 24 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 25 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 26 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 27 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 28 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 29 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 30 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 31 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 32 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 33 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 34 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 35 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 36 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 37 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 38 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 39 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 40 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 41 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 42 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 43 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 44 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 45 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 46 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 47 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 48 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 49 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 50 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 51 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 52 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 53 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 54 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 55 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 56 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 57 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 58 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 59 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 60 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 61 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 62 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 63 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 64 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 65 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 66 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 67 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 68 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 69 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 70 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 71 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 72 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 73 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 74 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 75 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 76 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 77 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 78 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 79 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 80 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 81 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 82 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 83 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 84 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 85 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 86 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 87 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 88 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 89 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 90 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 91 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 92 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 93 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 94 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 95 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 96 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, }; #else // mpeg compressed data (not CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) -#define color_bar_0_jpg_len 511 -#define color_bar_1_jpg_len 512 -#define color_bar_2_jpg_len 511 -#define color_bar_3_jpg_len 511 -#define color_bar_4_jpg_len 511 -#define color_bar_5_jpg_len 512 -#define color_bar_6_jpg_len 511 -#define color_bar_7_jpg_len 511 +#define color_bar_0_jpg_len 511 +#define color_bar_1_jpg_len 512 +#define color_bar_2_jpg_len 511 +#define color_bar_3_jpg_len 511 +#define color_bar_4_jpg_len 511 +#define color_bar_5_jpg_len 512 +#define color_bar_6_jpg_len 511 +#define color_bar_7_jpg_len 511 unsigned char color_bar_0_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x92, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x92, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0xff, 0xd9 }; unsigned char color_bar_1_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x7d, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x7f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x7d, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x7f, 0xff, 0xd9 }; unsigned char color_bar_2_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x75, 0x14, 0xcc, - 0xc4, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x75, 0x14, 0xcc, + 0xc4, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 }; unsigned char color_bar_3_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x5a, 0x2a, 0x08, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x91, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x5a, 0x2a, 0x08, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x91, 0xff, 0xd9 }; unsigned char color_bar_4_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x4a, 0x2a, 0xcb, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x9f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x4a, 0x2a, 0xcb, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x9f, 0xff, 0xd9 }; unsigned char color_bar_5_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x6d, 0x14, 0x8d, - 0x04, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x7f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x6d, 0x14, 0x8d, + 0x04, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x7f, 0xff, 0xd9 }; unsigned char color_bar_6_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x65, 0x15, 0xa0, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x65, 0x15, 0xa0, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 }; unsigned char color_bar_7_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x8e, 0x8a, 0x00, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x47, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x8e, 0x8a, 0x00, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x47, 0xff, 0xd9 }; #endif diff --git a/Libraries/tinyusb/examples/device/video_capture/src/main.c b/Libraries/tinyusb/examples/device/video_capture/src/main.c index ddb51e03ad1..4ac8d9acdb9 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/main.c +++ b/Libraries/tinyusb/examples/device/video_capture/src/main.c @@ -41,44 +41,44 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; -void led_blinking_task(void* param); +void led_blinking_task(void *param); void usb_device_task(void *param); -void video_task(void* param); +void video_task(void *param); #if CFG_TUSB_OS == OPT_OS_FREERTOS void freertos_init_task(void); #endif - //--------------------------------------------------------------------+ // Main //--------------------------------------------------------------------+ -int main(void) { - board_init(); +int main(void) +{ + board_init(); - // If using FreeRTOS: create blinky, tinyusb device, video task + // If using FreeRTOS: create blinky, tinyusb device, video task #if CFG_TUSB_OS == OPT_OS_FREERTOS - freertos_init_task(); + freertos_init_task(); #else - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(NULL); - video_task(NULL); - } + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(NULL); + video_task(NULL); + } #endif } @@ -87,26 +87,30 @@ int main(void) { //--------------------------------------------------------------------+ // Invoked when device is mounted -void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) +{ + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) +{ + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended // remote_wakeup_en : if host allow us to perform remote wakeup // Within 7ms, device must draw an average of current less than 2.5 mA from bus -void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; +void tud_suspend_cb(bool remote_wakeup_en) +{ + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed -void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +void tud_resume_cb(void) +{ + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -123,17 +127,13 @@ static unsigned interval_ms = 1000 / FRAME_RATE; #if !defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) static struct { - uint32_t size; - uint8_t const *buffer; + uint32_t size; + uint8_t const *buffer; } const frames[] = { - {color_bar_0_jpg_len, color_bar_0_jpg}, - {color_bar_1_jpg_len, color_bar_1_jpg}, - {color_bar_2_jpg_len, color_bar_2_jpg}, - {color_bar_3_jpg_len, color_bar_3_jpg}, - {color_bar_4_jpg_len, color_bar_4_jpg}, - {color_bar_5_jpg_len, color_bar_5_jpg}, - {color_bar_6_jpg_len, color_bar_6_jpg}, - {color_bar_7_jpg_len, color_bar_7_jpg}, + { color_bar_0_jpg_len, color_bar_0_jpg }, { color_bar_1_jpg_len, color_bar_1_jpg }, + { color_bar_2_jpg_len, color_bar_2_jpg }, { color_bar_3_jpg_len, color_bar_3_jpg }, + { color_bar_4_jpg_len, color_bar_4_jpg }, { color_bar_5_jpg_len, color_bar_5_jpg }, + { color_bar_6_jpg_len, color_bar_6_jpg }, { color_bar_7_jpg_len, color_bar_7_jpg }, }; #endif @@ -142,142 +142,154 @@ static struct { // YUY2 frame buffer static uint8_t frame_buffer[FRAME_WIDTH * FRAME_HEIGHT * 16 / 8]; -static void fill_color_bar(uint8_t* buffer, unsigned start_position) { - /* EBU color bars: https://stackoverflow.com/questions/6939422 */ - static uint8_t const bar_color[8][4] = { - /* Y, U, Y, V */ - { 235, 128, 235, 128}, /* 100% White */ - { 219, 16, 219, 138}, /* Yellow */ - { 188, 154, 188, 16}, /* Cyan */ - { 173, 42, 173, 26}, /* Green */ - { 78, 214, 78, 230}, /* Magenta */ - { 63, 102, 63, 240}, /* Red */ - { 32, 240, 32, 118}, /* Blue */ - { 16, 128, 16, 128}, /* Black */ - }; - uint8_t* p; - - /* Generate the 1st line */ - uint8_t* end = &buffer[FRAME_WIDTH * 2]; - unsigned idx = (FRAME_WIDTH / 2 - 1) - (start_position % (FRAME_WIDTH / 2)); - p = &buffer[idx * 4]; - for (unsigned i = 0; i < 8; ++i) { - for (int j = 0; j < FRAME_WIDTH / (2 * 8); ++j) { - memcpy(p, &bar_color[i], 4); - p += 4; - if (end <= p) { - p = buffer; - } +static void fill_color_bar(uint8_t *buffer, unsigned start_position) +{ + /* EBU color bars: https://stackoverflow.com/questions/6939422 */ + static uint8_t const bar_color[8][4] = { + /* Y, U, Y, V */ + { 235, 128, 235, 128 }, /* 100% White */ + { 219, 16, 219, 138 }, /* Yellow */ + { 188, 154, 188, 16 }, /* Cyan */ + { 173, 42, 173, 26 }, /* Green */ + { 78, 214, 78, 230 }, /* Magenta */ + { 63, 102, 63, 240 }, /* Red */ + { 32, 240, 32, 118 }, /* Blue */ + { 16, 128, 16, 128 }, /* Black */ + }; + uint8_t *p; + + /* Generate the 1st line */ + uint8_t *end = &buffer[FRAME_WIDTH * 2]; + unsigned idx = (FRAME_WIDTH / 2 - 1) - (start_position % (FRAME_WIDTH / 2)); + p = &buffer[idx * 4]; + for (unsigned i = 0; i < 8; ++i) { + for (int j = 0; j < FRAME_WIDTH / (2 * 8); ++j) { + memcpy(p, &bar_color[i], 4); + p += 4; + if (end <= p) { + p = buffer; + } + } + } + + /* Duplicate the 1st line to the others */ + p = &buffer[FRAME_WIDTH * 2]; + for (unsigned i = 1; i < FRAME_HEIGHT; ++i) { + memcpy(p, buffer, FRAME_WIDTH * 2); + p += FRAME_WIDTH * 2; } - } - - /* Duplicate the 1st line to the others */ - p = &buffer[FRAME_WIDTH * 2]; - for (unsigned i = 1; i < FRAME_HEIGHT; ++i) { - memcpy(p, buffer, FRAME_WIDTH * 2); - p += FRAME_WIDTH * 2; - } } #endif -void video_send_frame(void) { - static unsigned start_ms = 0; - static unsigned already_sent = 0; +void video_send_frame(void) +{ + static unsigned start_ms = 0; + static unsigned already_sent = 0; - if (!tud_video_n_streaming(0, 0)) { - already_sent = 0; - frame_num = 0; - return; - } + if (!tud_video_n_streaming(0, 0)) { + already_sent = 0; + frame_num = 0; + return; + } - if (!already_sent) { - already_sent = 1; - tx_busy = 1; - start_ms = board_millis(); + if (!already_sent) { + already_sent = 1; + tx_busy = 1; + start_ms = board_millis(); #ifdef CFG_EXAMPLE_VIDEO_READONLY - #if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) - tud_video_n_frame_xfer(0, 0, (void*)(uintptr_t)&frame_buffer[(frame_num % (FRAME_WIDTH / 2)) * 4], - FRAME_WIDTH * FRAME_HEIGHT * 16/8); - #else - tud_video_n_frame_xfer(0, 0, (void*)(uintptr_t)frames[frame_num % 8].buffer, frames[frame_num % 8].size); - #endif +#if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) + tud_video_n_frame_xfer( + 0, 0, (void *)(uintptr_t)&frame_buffer[(frame_num % (FRAME_WIDTH / 2)) * 4], + FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); #else - fill_color_bar(frame_buffer, frame_num); - tud_video_n_frame_xfer(0, 0, (void*) frame_buffer, FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); + tud_video_n_frame_xfer(0, 0, (void *)(uintptr_t)frames[frame_num % 8].buffer, + frames[frame_num % 8].size); #endif - } +#else + fill_color_bar(frame_buffer, frame_num); + tud_video_n_frame_xfer(0, 0, (void *)frame_buffer, FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); +#endif + } - unsigned cur = board_millis(); - if (cur - start_ms < interval_ms) return; // not enough time - if (tx_busy) return; - start_ms += interval_ms; - tx_busy = 1; + unsigned cur = board_millis(); + if (cur - start_ms < interval_ms) + return; // not enough time + if (tx_busy) + return; + start_ms += interval_ms; + tx_busy = 1; #ifdef CFG_EXAMPLE_VIDEO_READONLY - #if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) - tud_video_n_frame_xfer(0, 0, (void*)(uintptr_t)&frame_buffer[(frame_num % (FRAME_WIDTH / 2)) * 4], - FRAME_WIDTH * FRAME_HEIGHT * 16/8); - #else - tud_video_n_frame_xfer(0, 0, (void*)(uintptr_t)frames[frame_num % 8].buffer, frames[frame_num % 8].size); - #endif +#if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) + tud_video_n_frame_xfer(0, 0, + (void *)(uintptr_t)&frame_buffer[(frame_num % (FRAME_WIDTH / 2)) * 4], + FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); +#else + tud_video_n_frame_xfer(0, 0, (void *)(uintptr_t)frames[frame_num % 8].buffer, + frames[frame_num % 8].size); +#endif #else - fill_color_bar(frame_buffer, frame_num); - tud_video_n_frame_xfer(0, 0, (void*) frame_buffer, FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); + fill_color_bar(frame_buffer, frame_num); + tud_video_n_frame_xfer(0, 0, (void *)frame_buffer, FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); #endif } +void video_task(void *param) +{ + (void)param; -void video_task(void* param) { - (void) param; - - while(1) { - video_send_frame(); + while (1) { + video_send_frame(); - #if CFG_TUSB_OS == OPT_OS_FREERTOS - vTaskDelay(interval_ms / portTICK_PERIOD_MS); - #else - return; - #endif - } +#if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(interval_ms / portTICK_PERIOD_MS); +#else + return; +#endif + } } -void tud_video_frame_xfer_complete_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { - (void) ctl_idx; - (void) stm_idx; - tx_busy = 0; - /* flip buffer */ - ++frame_num; +void tud_video_frame_xfer_complete_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) +{ + (void)ctl_idx; + (void)stm_idx; + tx_busy = 0; + /* flip buffer */ + ++frame_num; } int tud_video_commit_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, - video_probe_and_commit_control_t const* parameters) { - (void) ctl_idx; - (void) stm_idx; - /* convert unit to ms from 100 ns */ - interval_ms = parameters->dwFrameInterval / 10000; - return VIDEO_ERROR_NONE; + video_probe_and_commit_control_t const *parameters) +{ + (void)ctl_idx; + (void)stm_idx; + /* convert unit to ms from 100 ns */ + interval_ms = parameters->dwFrameInterval / 10000; + return VIDEO_ERROR_NONE; } //--------------------------------------------------------------------+ // Blinking Task //--------------------------------------------------------------------+ -void led_blinking_task(void* param) { - (void) param; - static uint32_t start_ms = 0; - static bool led_state = false; - - while (1) { - #if CFG_TUSB_OS == OPT_OS_FREERTOS - vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); - #else - if (board_millis() - start_ms < blink_interval_ms) return; // not enough time - #endif - - start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } +void led_blinking_task(void *param) +{ + (void)param; + static uint32_t start_ms = 0; + static bool led_state = false; + + while (1) { +#if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); +#else + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time +#endif + + start_ms += blink_interval_ms; + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } //--------------------------------------------------------------------+ @@ -285,18 +297,19 @@ void led_blinking_task(void* param) { //--------------------------------------------------------------------+ #if CFG_TUSB_OS == OPT_OS_FREERTOS -#define BLINKY_STACK_SIZE configMINIMAL_STACK_SIZE -#define VIDEO_STACK_SIZE (configMINIMAL_STACK_SIZE*4) +#define BLINKY_STACK_SIZE configMINIMAL_STACK_SIZE +#define VIDEO_STACK_SIZE (configMINIMAL_STACK_SIZE * 4) #if TUP_MCU_ESPRESSIF - #define USBD_STACK_SIZE 4096 - int main(void); - void app_main(void) { +#define USBD_STACK_SIZE 4096 +int main(void); +void app_main(void) +{ main(); - } +} #else - // Increase stack size when debug log is enabled - #define USBD_STACK_SIZE (3*configMINIMAL_STACK_SIZE/2) * (CFG_TUSB_DEBUG ? 2 : 1) +// Increase stack size when debug log is enabled +#define USBD_STACK_SIZE (3 * configMINIMAL_STACK_SIZE / 2) * (CFG_TUSB_DEBUG ? 2 : 1) #endif // static task @@ -304,48 +317,53 @@ void led_blinking_task(void* param) { StackType_t blinky_stack[BLINKY_STACK_SIZE]; StaticTask_t blinky_taskdef; -StackType_t usb_device_stack[USBD_STACK_SIZE]; +StackType_t usb_device_stack[USBD_STACK_SIZE]; StaticTask_t usb_device_taskdef; -StackType_t video_stack[VIDEO_STACK_SIZE]; +StackType_t video_stack[VIDEO_STACK_SIZE]; StaticTask_t video_taskdef; #endif // USB Device Driver task // This top level thread process all usb events and invoke callbacks -void usb_device_task(void *param) { - (void) param; - - // init device stack on configured roothub port - // This should be called after scheduler/kernel is started. - // Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API. - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - // RTOS forever loop - while (1) { - // put this thread to waiting state until there is new events - tud_task(); - } +void usb_device_task(void *param) +{ + (void)param; + + // init device stack on configured roothub port + // This should be called after scheduler/kernel is started. + // Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API. + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + // RTOS forever loop + while (1) { + // put this thread to waiting state until there is new events + tud_task(); + } } -void freertos_init_task(void) { - #if configSUPPORT_STATIC_ALLOCATION - xTaskCreateStatic(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, blinky_stack, &blinky_taskdef); - xTaskCreateStatic(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES-1, usb_device_stack, &usb_device_taskdef); - xTaskCreateStatic(video_task, "cdc", VIDEO_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, video_stack, &video_taskdef); - #else - xTaskCreate(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, NULL); - xTaskCreate(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL); - xTaskCreate(video_task, "video", VIDEO_STACK_SZIE, NULL, configMAX_PRIORITIES - 2, NULL); - #endif - - // skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 - #if !TUP_MCU_ESPRESSIF - vTaskStartScheduler(); - #endif +void freertos_init_task(void) +{ +#if configSUPPORT_STATIC_ALLOCATION + xTaskCreateStatic(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, blinky_stack, + &blinky_taskdef); + xTaskCreateStatic(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, + usb_device_stack, &usb_device_taskdef); + xTaskCreateStatic(video_task, "cdc", VIDEO_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, + video_stack, &video_taskdef); +#else + xTaskCreate(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, NULL); + xTaskCreate(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL); + xTaskCreate(video_task, "video", VIDEO_STACK_SZIE, NULL, configMAX_PRIORITIES - 2, NULL); +#endif + +// skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 +#if !TUP_MCU_ESPRESSIF + vTaskStartScheduler(); +#endif } #endif diff --git a/Libraries/tinyusb/examples/device/video_capture/src/tusb_config.h b/Libraries/tinyusb/examples/device/video_capture/src/tusb_config.h index 21483a2da74..9ad8539e7a7 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/video_capture/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,23 +54,23 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos/ +#define CFG_TUSB_OS_INC_PATH freertos / #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -84,7 +84,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -92,18 +92,18 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// // The number of video control interfaces -#define CFG_TUD_VIDEO 1 +#define CFG_TUD_VIDEO 1 // The number of video streaming interfaces -#define CFG_TUD_VIDEO_STREAMING 1 +#define CFG_TUD_VIDEO_STREAMING 1 // video streaming endpoint buffer size -#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256 +#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256 // use bulk endpoint for streaming interface #define CFG_TUD_VIDEO_STREAMING_BULK 1 @@ -112,7 +112,7 @@ //#define CFG_EXAMPLE_VIDEO_DISABLE_MJPEG #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.c index 5011bee183c..2db45a46dcd 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.c @@ -33,64 +33,66 @@ * Auto ProductID layout's Bitmap: * [MSB] VIDEO | AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6)) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, - STRID_UVC_CONTROL, - STRID_UVC_STREAMING, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, + STRID_UVC_CONTROL, + STRID_UVC_STREAMING, }; // array of pointer to string descriptors -char const* string_desc_arr[] = { - (const char[]) {0x09, 0x04}, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UVC Control", // 4: UVC Interface - "UVC Streaming", // 5: UVC Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UVC Control", // 4: UVC Interface + "UVC Streaming", // 5: UVC Interface }; //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for Video // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = STRID_MANUFACTURER, - .iProduct = STRID_PRODUCT, - .iSerialNumber = STRID_SERIAL, + .iManufacturer = STRID_MANUFACTURER, + .iProduct = STRID_PRODUCT, + .iSerialNumber = STRID_SERIAL, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const* tud_descriptor_device_cb(void) { - return (uint8_t const*) &desc_device; +uint8_t const *tud_descriptor_device_cb(void) +{ + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ @@ -98,75 +100,71 @@ uint8_t const* tud_descriptor_device_cb(void) { //--------------------------------------------------------------------+ /* Time stamp base clock. It is a deprecated parameter. */ -#define UVC_CLOCK_FREQUENCY 27000000 +#define UVC_CLOCK_FREQUENCY 27000000 /* video capture path */ -#define UVC_ENTITY_CAP_INPUT_TERMINAL 0x01 +#define UVC_ENTITY_CAP_INPUT_TERMINAL 0x01 #define UVC_ENTITY_CAP_OUTPUT_TERMINAL 0x02 -enum { - ITF_NUM_VIDEO_CONTROL, - ITF_NUM_VIDEO_STREAMING, - ITF_NUM_TOTAL -}; +enum { ITF_NUM_VIDEO_CONTROL, ITF_NUM_VIDEO_STREAMING, ITF_NUM_TOTAL }; // Select appropriate endpoint number #if TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... - #define EPNUM_VIDEO_IN (CFG_TUD_VIDEO_STREAMING_BULK ? 0x82 : 0x83) +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... +#define EPNUM_VIDEO_IN (CFG_TUD_VIDEO_STREAMING_BULK ? 0x82 : 0x83) #elif TU_CHECK_MCU(OPT_MCU_NRF5X) - // nRF5x ISO can only be endpoint 8 - #define EPNUM_VIDEO_IN (CFG_TUD_VIDEO_STREAMING_BULK ? 0x81 : 0x88) +// nRF5x ISO can only be endpoint 8 +#define EPNUM_VIDEO_IN (CFG_TUD_VIDEO_STREAMING_BULK ? 0x81 : 0x88) #else - #define EPNUM_VIDEO_IN 0x81 +#define EPNUM_VIDEO_IN 0x81 #endif #if defined(CFG_EXAMPLE_VIDEO_READONLY) && !defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) - #define USE_MJPEG 1 +#define USE_MJPEG 1 #else - #define USE_MJPEG 0 +#define USE_MJPEG 0 #endif #define USE_ISO_STREAMING (!CFG_TUD_VIDEO_STREAMING_BULK) typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_control_header_1itf_t header; - tusb_desc_video_control_camera_terminal_t camera_terminal; - tusb_desc_video_control_output_terminal_t output_terminal; + tusb_desc_interface_t itf; + tusb_desc_video_control_header_1itf_t header; + tusb_desc_video_control_camera_terminal_t camera_terminal; + tusb_desc_video_control_output_terminal_t output_terminal; } uvc_control_desc_t; /* Windows support YUY2 and NV12 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */ typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_streaming_input_header_1byte_t header; + tusb_desc_interface_t itf; + tusb_desc_video_streaming_input_header_1byte_t header; #if USE_MJPEG - tusb_desc_video_format_mjpeg_t format; - tusb_desc_video_frame_mjpeg_continuous_t frame; + tusb_desc_video_format_mjpeg_t format; + tusb_desc_video_frame_mjpeg_continuous_t frame; #else - tusb_desc_video_format_uncompressed_t format; - tusb_desc_video_frame_uncompressed_continuous_t frame; + tusb_desc_video_format_uncompressed_t format; + tusb_desc_video_frame_uncompressed_continuous_t frame; #endif - tusb_desc_video_streaming_color_matching_t color; + tusb_desc_video_streaming_color_matching_t color; #if USE_ISO_STREAMING - // For ISO streaming, USB spec requires to alternate interface - tusb_desc_interface_t itf_alt; + // For ISO streaming, USB spec requires to alternate interface + tusb_desc_interface_t itf_alt; #endif - tusb_desc_endpoint_t ep; + tusb_desc_endpoint_t ep; } uvc_streaming_desc_t; typedef struct TU_ATTR_PACKED { - tusb_desc_configuration_t config; - tusb_desc_interface_assoc_t iad; - uvc_control_desc_t video_control; - uvc_streaming_desc_t video_streaming; + tusb_desc_configuration_t config; + tusb_desc_interface_assoc_t iad; + uvc_control_desc_t video_control; + uvc_streaming_desc_t video_streaming; } uvc_cfg_desc_t; const uvc_cfg_desc_t desc_fs_configuration = { @@ -366,73 +364,77 @@ const uvc_cfg_desc_t desc_fs_configuration = { #if TUD_OPT_HIGH_SPEED uvc_cfg_desc_t desc_hs_configuration; -static uint8_t * get_hs_configuration_desc(void) { - static bool init = false; +static uint8_t *get_hs_configuration_desc(void) +{ + static bool init = false; - if (!init) { - desc_hs_configuration = desc_fs_configuration; - // change endpoint bulk size to 512 if bulk streaming - if (CFG_TUD_VIDEO_STREAMING_BULK) { - desc_hs_configuration.video_streaming.ep.wMaxPacketSize = 512; + if (!init) { + desc_hs_configuration = desc_fs_configuration; + // change endpoint bulk size to 512 if bulk streaming + if (CFG_TUD_VIDEO_STREAMING_BULK) { + desc_hs_configuration.video_streaming.ep.wMaxPacketSize = 512; + } } - } - init = true; + init = true; - return (uint8_t *) &desc_hs_configuration; + return (uint8_t *)&desc_hs_configuration; } // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .bNumConfigurations = 0x01, - .bReserved = 0x00 + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const* tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const*) &desc_device_qualifier; +uint8_t const *tud_descriptor_device_qualifier_cb(void) +{ + return (uint8_t const *)&desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - if (tud_speed_get() == TUSB_SPEED_HIGH) { - return (uint8_t const*) &desc_fs_configuration; - } else { - return get_hs_configuration_desc(); - } +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) +{ + (void)index; // for multiple configurations + // if link speed is high return fullspeed config, and vice versa + if (tud_speed_get() == TUSB_SPEED_HIGH) { + return (uint8_t const *)&desc_fs_configuration; + } else { + return get_hs_configuration_desc(); + } } #endif // highspeed // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const* tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +{ + (void)index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - if (tud_speed_get() == TUSB_SPEED_HIGH) { - return get_hs_configuration_desc(); - } else + // Although we are highspeed, host may be fullspeed. + if (tud_speed_get() == TUSB_SPEED_HIGH) { + return get_hs_configuration_desc(); + } else #endif - { - return (uint8_t const*) &desc_fs_configuration; - } + { + return (uint8_t const *)&desc_fs_configuration; + } } //--------------------------------------------------------------------+ @@ -443,42 +445,45 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch (index) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) return NULL; + if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) + return NULL; - const char* str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.h index 12d41b2f3a8..26857591003 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.h @@ -27,212 +27,217 @@ #ifndef _USB_DESCRIPTORS_H_ #define _USB_DESCRIPTORS_H_ -#define FRAME_WIDTH 128 -#define FRAME_HEIGHT 96 -#define FRAME_RATE 10 +#define FRAME_WIDTH 128 +#define FRAME_HEIGHT 96 +#define FRAME_RATE 10 // NOTE: descriptor template is not used but leave here as reference -#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN (\ - TUD_VIDEO_DESC_IAD_LEN\ - /* control */\ - + TUD_VIDEO_DESC_STD_VC_LEN\ - + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ - + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ - + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ - + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\ - + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\ - + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ - /* Interface 1, Alternate 1 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + 7/* Endpoint */\ - ) - -#define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN (\ - TUD_VIDEO_DESC_IAD_LEN\ - /* control */\ - + TUD_VIDEO_DESC_STD_VC_LEN\ - + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ - + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ - + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ - + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN\ - + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN\ - + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ - /* Interface 1, Alternate 1 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + 7/* Endpoint */\ - ) - -#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN (\ - TUD_VIDEO_DESC_IAD_LEN\ - /* control */\ - + TUD_VIDEO_DESC_STD_VC_LEN\ - + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ - + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ - + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ - + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\ - + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\ - + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ - + 7/* Endpoint */\ - ) - -#define TUD_VIDEO_CAPTURE_DESC_MJPEG_BULK_LEN (\ - TUD_VIDEO_DESC_IAD_LEN\ - /* control */\ - + TUD_VIDEO_DESC_STD_VC_LEN\ - + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ - + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ - + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ - + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN\ - + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN\ - + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ - + 7/* Endpoint */\ - ) +#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN \ + (TUD_VIDEO_DESC_IAD_LEN /* control */ \ + + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + \ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN /* Interface 1, Alternate 1 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + 7 /* Endpoint */ \ + ) + +#define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN \ + (TUD_VIDEO_DESC_IAD_LEN /* control */ \ + + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + \ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN /* Interface 1, Alternate 1 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + 7 /* Endpoint */ \ + ) + +#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN \ + (TUD_VIDEO_DESC_IAD_LEN /* control */ \ + + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + \ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN + 7 /* Endpoint */ \ + ) + +#define TUD_VIDEO_CAPTURE_DESC_MJPEG_BULK_LEN \ + (TUD_VIDEO_DESC_IAD_LEN /* control */ \ + + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + \ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN + 7 /* Endpoint */ \ + ) /* Windows support YUY2 and NV12 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */ -#define TUD_VIDEO_DESC_CS_VS_FMT_YUY2(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_YUY2, 16, _frmidx, _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_NV12(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_NV12, 12, _frmidx, _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_M420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_M420, 12, _frmidx, _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_I420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, _asrx, _asry, _interlace, _cp) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ - /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ - /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ - /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ - /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, _stridx), \ - /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ - _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ - /*bmaControls(1)*/0), \ - /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ - /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ - /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \ - _width * _height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, \ - (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ - /* VS alt 1 */\ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), \ - /* EP */ \ - TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ - /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ - /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ - /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ - /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, _stridx), \ - /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ - _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ - /*bmaControls(1)*/0), \ - /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ - /*bmFlags*/0, /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ - /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */1, 0, _width, _height, \ - _width * _height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, \ - (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ - /* VS alt 1 */\ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), \ - /* EP */ \ - TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) - - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ - /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ - /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ - /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ - /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \ - /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ - /*wTotalLength - bLength */\ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ - _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ - /*bmaControls(1)*/0), \ - /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ - /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ - /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \ - _width * _height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, \ - (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ +#define TUD_VIDEO_DESC_CS_VS_FMT_YUY2(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ + _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_YUY2, 16, _frmidx, \ + _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_NV12(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ + _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_NV12, 12, _frmidx, \ + _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_M420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ + _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_M420, 12, _frmidx, \ + _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_I420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ + _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, \ + _asrx, _asry, _interlace, _cp) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ + _stridx), /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC( \ + ITF_NUM_VIDEO_CONTROL, 0, \ + _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC( \ + 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ + UVC_CLOCK_FREQUENCY, \ + ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ + 0), /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, \ + _stridx), /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( \ + /*bNumFormats*/ 1, /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ + /*bmaControls(1)*/ 0), /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ + /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ + /*bCopyProtect*/ 0), /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ + _width *_height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, (10000000 / _fps), \ + (10000000 / _fps), (10000000 / _fps) * _fps, \ + (10000000 / _fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ + VIDEO_COLOR_XFER_CH_BT709, \ + VIDEO_COLOR_COEF_SMPTE170M), /* VS alt 1 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), /* EP */ \ + TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ + _stridx), /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC( \ + ITF_NUM_VIDEO_CONTROL, 0, \ + _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC( \ + 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ + UVC_CLOCK_FREQUENCY, \ + ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ + 0), /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, \ + _stridx), /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( \ + /*bNumFormats*/ 1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ + /*bmaControls(1)*/ 0), /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ + /*bmFlags*/ 0, /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ + /*bCopyProtect*/ 0), /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ + _width *_height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, (10000000 / _fps), \ + (10000000 / _fps), (10000000 / _fps) * _fps, \ + (10000000 / _fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ + VIDEO_COLOR_XFER_CH_BT709, \ + VIDEO_COLOR_COEF_SMPTE170M), /* VS alt 1 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), /* EP */ \ + TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ + _stridx), /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC( \ + ITF_NUM_VIDEO_CONTROL, 0, \ + _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC( \ + 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ + UVC_CLOCK_FREQUENCY, \ + ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ + 0), /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, \ + _stridx), /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( \ + /*bNumFormats*/ 1, /*wTotalLength - bLength */ \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ + /*bmaControls(1)*/ 0), /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ + /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ + /*bCopyProtect*/ 0), /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ + _width *_height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, (10000000 / _fps), \ + (10000000 / _fps), (10000000 / _fps) * _fps, \ + (10000000 / _fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING( \ + VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1) -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ - /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ - /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ - /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, UVC_ENTITY_CAP_INPUT_TERMINAL, 0), \ - /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \ - /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ - _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ - /*bmaControls(1)*/0), \ - /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ - /*bmFlags*/0, /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ - /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */1, 0, _width, _height, \ - _width * _height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, \ - (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ - /* EP */ \ +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ + _stridx), /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC( \ + ITF_NUM_VIDEO_CONTROL, 0, \ + _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC( \ + 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ + UVC_CLOCK_FREQUENCY, \ + ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, \ + UVC_ENTITY_CAP_INPUT_TERMINAL, 0), /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, \ + _stridx), /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( \ + /*bNumFormats*/ 1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ + /*bmaControls(1)*/ 0), /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ + /*bmFlags*/ 0, /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ + /*bCopyProtect*/ 0), /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ + _width *_height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, (10000000 / _fps), \ + (10000000 / _fps), (10000000 / _fps) * _fps, \ + (10000000 / _fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ + VIDEO_COLOR_XFER_CH_BT709, \ + VIDEO_COLOR_COEF_SMPTE170M), /* EP */ \ TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1) - #endif diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/images.h b/Libraries/tinyusb/examples/device/video_capture_2ch/src/images.h index f0badd07439..3d881a93fd6 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/images.h +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/images.h @@ -3,1655 +3,24935 @@ // YUY2 Uncompressed Frame (fixed) //--------------------------------------------------------------------+ static const unsigned char framebuf_yuy2_readonly[128 * (96 + 1) * 2] = { - /* 0 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 1 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 2 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 3 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 4 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 5 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 6 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 7 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 8 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 9 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 10 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 11 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 12 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 13 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 14 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 15 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 16 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 17 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 18 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 19 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 20 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 21 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 22 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 23 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 24 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 25 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 26 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 27 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 28 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 29 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 30 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 31 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 32 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 33 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 34 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 35 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 36 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 37 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 38 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 39 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 40 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 41 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 42 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 43 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 44 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 45 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 46 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 47 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 48 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 49 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 50 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 51 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 52 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 53 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 54 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 55 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 56 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 57 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 58 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 59 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 60 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 61 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 62 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 63 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 64 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 65 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 66 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 67 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 68 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 69 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 70 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 71 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 72 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 73 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 74 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 75 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 76 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 77 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 78 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 79 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 80 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 81 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 82 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 83 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 84 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 85 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 86 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 87 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 88 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 89 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 90 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 91 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 92 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 93 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 94 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 95 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - /* 96 */ - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, - 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 0 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 1 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 2 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 3 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 4 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 5 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 6 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 7 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 8 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 9 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 10 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 11 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 12 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 13 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 14 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 15 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 16 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 17 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 18 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 19 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 20 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 21 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 22 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 23 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 24 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 25 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 26 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 27 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 28 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 29 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 30 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 31 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 32 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 33 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 34 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 35 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 36 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 37 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 38 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 39 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 40 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 41 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 42 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 43 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 44 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 45 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 46 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 47 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 48 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 49 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 50 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 51 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 52 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 53 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 54 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 55 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 56 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 57 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 58 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 59 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 60 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 61 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 62 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 63 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 64 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 65 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 66 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 67 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 68 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 69 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 70 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 71 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 72 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 73 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 74 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 75 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 76 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 77 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 78 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 79 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 80 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 81 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 82 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 83 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 84 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 85 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 86 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 87 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 88 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 89 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 90 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 91 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 92 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 93 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 94 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 95 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + /* 96 */ + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xeb, + 0x80, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xdb, + 0x10, + 0xdb, + 0x8a, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xbc, + 0x9a, + 0xbc, + 0x10, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0xad, + 0x2a, + 0xad, + 0x1a, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x4e, + 0xd6, + 0x4e, + 0xe6, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x3f, + 0x66, + 0x3f, + 0xf0, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x20, + 0xf0, + 0x20, + 0x76, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, + 0x10, + 0x80, }; #endif @@ -1661,274 +24941,274 @@ static const unsigned char framebuf_yuy2_readonly[128 * (96 + 1) * 2] = { //--------------------------------------------------------------------+ unsigned char color_bar_0_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x92, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x92, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0xff, 0xd9 }; unsigned char color_bar_1_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x7d, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x7f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x7d, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x7f, 0xff, 0xd9 }; unsigned char color_bar_2_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x75, 0x14, 0xcc, - 0xc4, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x75, 0x14, 0xcc, + 0xc4, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 }; unsigned char color_bar_3_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x5a, 0x2a, 0x08, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x91, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x5a, 0x2a, 0x08, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x91, 0xff, 0xd9 }; unsigned char color_bar_4_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x4a, 0x2a, 0xcb, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x9f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x4a, 0x2a, 0xcb, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x9f, 0xff, 0xd9 }; unsigned char color_bar_5_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x6d, 0x14, 0x8d, - 0x04, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x7f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x6d, 0x14, 0x8d, + 0x04, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x7f, 0xff, 0xd9 }; unsigned char color_bar_6_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x65, 0x15, 0xa0, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x65, 0x15, 0xa0, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 }; unsigned char color_bar_7_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x8e, 0x8a, 0x00, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x47, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x8e, 0x8a, 0x00, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x47, 0xff, 0xd9 }; diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/main.c b/Libraries/tinyusb/examples/device/video_capture_2ch/src/main.c index e8c2ec6b01b..52ca7245d56 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/main.c +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/main.c @@ -41,44 +41,44 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; -void led_blinking_task(void* param); +void led_blinking_task(void *param); void usb_device_task(void *param); -void video_task(void* param); +void video_task(void *param); #if CFG_TUSB_OS == OPT_OS_FREERTOS void freertos_init_task(void); #endif - //--------------------------------------------------------------------+ // Main //--------------------------------------------------------------------+ -int main(void) { - board_init(); +int main(void) +{ + board_init(); - // If using FreeRTOS: create blinky, tinyusb device, video task + // If using FreeRTOS: create blinky, tinyusb device, video task #if CFG_TUSB_OS == OPT_OS_FREERTOS - freertos_init_task(); + freertos_init_task(); #else - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(NULL); - video_task(NULL); - } + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(NULL); + video_task(NULL); + } #endif } @@ -87,26 +87,30 @@ int main(void) { //--------------------------------------------------------------------+ // Invoked when device is mounted -void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) +{ + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) +{ + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended // remote_wakeup_en : if host allow us to perform remote wakeup // Within 7ms, device must draw an average of current less than 2.5 mA from bus -void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; +void tud_suspend_cb(bool remote_wakeup_en) +{ + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed -void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +void tud_resume_cb(void) +{ + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -114,178 +118,185 @@ void tud_resume_cb(void) { //--------------------------------------------------------------------+ #define FRAMEBUF_SIZE (FRAME_WIDTH * FRAME_HEIGHT * 16 / 8) -static unsigned frame_num[CFG_TUD_VIDEO_STREAMING] = {1}; +static unsigned frame_num[CFG_TUD_VIDEO_STREAMING] = { 1 }; static unsigned tx_busy = 0; -static unsigned interval_ms[CFG_TUD_VIDEO_STREAMING] = {1000 / FRAME_RATE}; +static unsigned interval_ms[CFG_TUD_VIDEO_STREAMING] = { 1000 / FRAME_RATE }; // For mcus that does not have enough SRAM for frame buffer, we use fixed frame data. // To further reduce the size, we use MJPEG format instead of YUY2. #include "images.h" static struct { - uint32_t size; - uint8_t const *buffer; + uint32_t size; + uint8_t const *buffer; } const framebuf_mjpeg[] = { - {sizeof(color_bar_0_jpg), color_bar_0_jpg}, - {sizeof(color_bar_1_jpg), color_bar_1_jpg}, - {sizeof(color_bar_2_jpg), color_bar_2_jpg}, - {sizeof(color_bar_3_jpg), color_bar_3_jpg}, - {sizeof(color_bar_4_jpg), color_bar_4_jpg}, - {sizeof(color_bar_5_jpg), color_bar_5_jpg}, - {sizeof(color_bar_6_jpg), color_bar_6_jpg}, - {sizeof(color_bar_7_jpg), color_bar_7_jpg}, + { sizeof(color_bar_0_jpg), color_bar_0_jpg }, { sizeof(color_bar_1_jpg), color_bar_1_jpg }, + { sizeof(color_bar_2_jpg), color_bar_2_jpg }, { sizeof(color_bar_3_jpg), color_bar_3_jpg }, + { sizeof(color_bar_4_jpg), color_bar_4_jpg }, { sizeof(color_bar_5_jpg), color_bar_5_jpg }, + { sizeof(color_bar_6_jpg), color_bar_6_jpg }, { sizeof(color_bar_7_jpg), color_bar_7_jpg }, }; #if !defined(CFG_EXAMPLE_VIDEO_READONLY) // YUY2 frame buffer static uint8_t framebuf_yuy2[FRAMEBUF_SIZE]; -static void fill_color_bar(uint8_t* buffer, unsigned start_position) { - /* EBU color bars: https://stackoverflow.com/questions/6939422 */ - static uint8_t const bar_color[8][4] = { - /* Y, U, Y, V */ - { 235, 128, 235, 128}, /* 100% White */ - { 219, 16, 219, 138}, /* Yellow */ - { 188, 154, 188, 16}, /* Cyan */ - { 173, 42, 173, 26}, /* Green */ - { 78, 214, 78, 230}, /* Magenta */ - { 63, 102, 63, 240}, /* Red */ - { 32, 240, 32, 118}, /* Blue */ - { 16, 128, 16, 128}, /* Black */ - }; - uint8_t* p; - - /* Generate the 1st line */ - uint8_t* end = &buffer[FRAME_WIDTH * 2]; - unsigned idx = (FRAME_WIDTH / 2 - 1) - (start_position % (FRAME_WIDTH / 2)); - p = &buffer[idx * 4]; - for (unsigned i = 0; i < 8; ++i) { - for (int j = 0; j < FRAME_WIDTH / (2 * 8); ++j) { - memcpy(p, &bar_color[i], 4); - p += 4; - if (end <= p) { - p = buffer; - } +static void fill_color_bar(uint8_t *buffer, unsigned start_position) +{ + /* EBU color bars: https://stackoverflow.com/questions/6939422 */ + static uint8_t const bar_color[8][4] = { + /* Y, U, Y, V */ + { 235, 128, 235, 128 }, /* 100% White */ + { 219, 16, 219, 138 }, /* Yellow */ + { 188, 154, 188, 16 }, /* Cyan */ + { 173, 42, 173, 26 }, /* Green */ + { 78, 214, 78, 230 }, /* Magenta */ + { 63, 102, 63, 240 }, /* Red */ + { 32, 240, 32, 118 }, /* Blue */ + { 16, 128, 16, 128 }, /* Black */ + }; + uint8_t *p; + + /* Generate the 1st line */ + uint8_t *end = &buffer[FRAME_WIDTH * 2]; + unsigned idx = (FRAME_WIDTH / 2 - 1) - (start_position % (FRAME_WIDTH / 2)); + p = &buffer[idx * 4]; + for (unsigned i = 0; i < 8; ++i) { + for (int j = 0; j < FRAME_WIDTH / (2 * 8); ++j) { + memcpy(p, &bar_color[i], 4); + p += 4; + if (end <= p) { + p = buffer; + } + } + } + + /* Duplicate the 1st line to the others */ + p = &buffer[FRAME_WIDTH * 2]; + for (unsigned i = 1; i < FRAME_HEIGHT; ++i) { + memcpy(p, buffer, FRAME_WIDTH * 2); + p += FRAME_WIDTH * 2; } - } - - /* Duplicate the 1st line to the others */ - p = &buffer[FRAME_WIDTH * 2]; - for (unsigned i = 1; i < FRAME_HEIGHT; ++i) { - memcpy(p, buffer, FRAME_WIDTH * 2); - p += FRAME_WIDTH * 2; - } } #endif -size_t get_framebuf(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, size_t fnum, void **fb) { - uint32_t idx = ctl_idx + stm_idx; - - if (idx == 0) { - // stream 0 use uncompressed YUY2 frame - #if defined(CFG_EXAMPLE_VIDEO_READONLY) - *fb = (void*)(uintptr_t ) &framebuf_yuy2_readonly[(fnum % (FRAME_WIDTH / 2)) * 4]; - #else - fill_color_bar(framebuf_yuy2, frame_num[idx]); - *fb = framebuf_yuy2; - #endif - - return FRAMEBUF_SIZE; - }else { - // stream 1 use MJPEG frame - size_t const bar_id = fnum & 0x7; - - *fb = (void*)(uintptr_t) framebuf_mjpeg[bar_id].buffer; - return framebuf_mjpeg[bar_id].size; - } +size_t get_framebuf(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, size_t fnum, void **fb) +{ + uint32_t idx = ctl_idx + stm_idx; + + if (idx == 0) { +// stream 0 use uncompressed YUY2 frame +#if defined(CFG_EXAMPLE_VIDEO_READONLY) + *fb = (void *)(uintptr_t)&framebuf_yuy2_readonly[(fnum % (FRAME_WIDTH / 2)) * 4]; +#else + fill_color_bar(framebuf_yuy2, frame_num[idx]); + *fb = framebuf_yuy2; +#endif + + return FRAMEBUF_SIZE; + } else { + // stream 1 use MJPEG frame + size_t const bar_id = fnum & 0x7; + + *fb = (void *)(uintptr_t)framebuf_mjpeg[bar_id].buffer; + return framebuf_mjpeg[bar_id].size; + } } //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ -void video_send_frame(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { - static unsigned start_ms[CFG_TUD_VIDEO_STREAMING] = {0, }; - static unsigned already_sent = 0; - - uint32_t idx = ctl_idx + stm_idx; - if (!tud_video_n_streaming(ctl_idx, stm_idx)) { - already_sent &= ~(1u << idx); - frame_num[idx] = 0; - return; - } - void* fp; - size_t fb_size; - - if (!(already_sent & (1u << idx))) { - already_sent |= 1u << idx; +void video_send_frame(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) +{ + static unsigned start_ms[CFG_TUD_VIDEO_STREAMING] = { + 0, + }; + static unsigned already_sent = 0; + + uint32_t idx = ctl_idx + stm_idx; + if (!tud_video_n_streaming(ctl_idx, stm_idx)) { + already_sent &= ~(1u << idx); + frame_num[idx] = 0; + return; + } + void *fp; + size_t fb_size; + + if (!(already_sent & (1u << idx))) { + already_sent |= 1u << idx; + tx_busy |= 1u << idx; + start_ms[idx] = board_millis(); + + fb_size = get_framebuf(ctl_idx, stm_idx, frame_num[idx], &fp); + tud_video_n_frame_xfer(ctl_idx, stm_idx, fp, fb_size); + } + + unsigned cur = board_millis(); + if (cur - start_ms[idx] < interval_ms[idx]) + return; // not enough time + if (tx_busy & (1u << idx)) + return; + start_ms[idx] += interval_ms[idx]; tx_busy |= 1u << idx; - start_ms[idx] = board_millis(); fb_size = get_framebuf(ctl_idx, stm_idx, frame_num[idx], &fp); tud_video_n_frame_xfer(ctl_idx, stm_idx, fp, fb_size); - } - - unsigned cur = board_millis(); - if (cur - start_ms[idx] < interval_ms[idx]) return; // not enough time - if (tx_busy & (1u << idx)) return; - start_ms[idx] += interval_ms[idx]; - tx_busy |= 1u << idx; - - fb_size = get_framebuf(ctl_idx, stm_idx, frame_num[idx], &fp); - tud_video_n_frame_xfer(ctl_idx, stm_idx, fp, fb_size); } +void video_task(void *param) +{ + (void)param; -void video_task(void* param) { - (void) param; - - while(1) { - video_send_frame(0, 0); - video_send_frame(1, 0); + while (1) { + video_send_frame(0, 0); + video_send_frame(1, 0); - #if CFG_TUSB_OS == OPT_OS_FREERTOS - vTaskDelay(interval_ms[0] / portTICK_PERIOD_MS); - #else - return; - #endif - } +#if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(interval_ms[0] / portTICK_PERIOD_MS); +#else + return; +#endif + } } -void tud_video_frame_xfer_complete_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { - uint32_t idx = ctl_idx + stm_idx; - tx_busy &= ~(1u << idx); - /* flip buffer */ - ++frame_num[idx]; +void tud_video_frame_xfer_complete_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) +{ + uint32_t idx = ctl_idx + stm_idx; + tx_busy &= ~(1u << idx); + /* flip buffer */ + ++frame_num[idx]; } int tud_video_commit_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, - video_probe_and_commit_control_t const* parameters) { - uint32_t idx = ctl_idx + stm_idx; - /* convert unit to ms from 100 ns */ - interval_ms[idx] = parameters->dwFrameInterval / 10000; - return VIDEO_ERROR_NONE; + video_probe_and_commit_control_t const *parameters) +{ + uint32_t idx = ctl_idx + stm_idx; + /* convert unit to ms from 100 ns */ + interval_ms[idx] = parameters->dwFrameInterval / 10000; + return VIDEO_ERROR_NONE; } //--------------------------------------------------------------------+ // Blinking Task //--------------------------------------------------------------------+ -void led_blinking_task(void* param) { - (void) param; - static uint32_t start_ms = 0; - static bool led_state = false; - - while (1) { - #if CFG_TUSB_OS == OPT_OS_FREERTOS - vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); - #else - if (board_millis() - start_ms < blink_interval_ms) return; // not enough time - #endif - - start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } +void led_blinking_task(void *param) +{ + (void)param; + static uint32_t start_ms = 0; + static bool led_state = false; + + while (1) { +#if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); +#else + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time +#endif + + start_ms += blink_interval_ms; + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } //--------------------------------------------------------------------+ @@ -293,18 +304,19 @@ void led_blinking_task(void* param) { //--------------------------------------------------------------------+ #if CFG_TUSB_OS == OPT_OS_FREERTOS -#define BLINKY_STACK_SIZE configMINIMAL_STACK_SIZE -#define VIDEO_STACK_SIZE (configMINIMAL_STACK_SIZE*4) +#define BLINKY_STACK_SIZE configMINIMAL_STACK_SIZE +#define VIDEO_STACK_SIZE (configMINIMAL_STACK_SIZE * 4) #if TUP_MCU_ESPRESSIF - #define USBD_STACK_SIZE 4096 - int main(void); - void app_main(void) { +#define USBD_STACK_SIZE 4096 +int main(void); +void app_main(void) +{ main(); - } +} #else - // Increase stack size when debug log is enabled - #define USBD_STACK_SIZE (3*configMINIMAL_STACK_SIZE/2) * (CFG_TUSB_DEBUG ? 2 : 1) +// Increase stack size when debug log is enabled +#define USBD_STACK_SIZE (3 * configMINIMAL_STACK_SIZE / 2) * (CFG_TUSB_DEBUG ? 2 : 1) #endif // static task @@ -312,48 +324,53 @@ void led_blinking_task(void* param) { StackType_t blinky_stack[BLINKY_STACK_SIZE]; StaticTask_t blinky_taskdef; -StackType_t usb_device_stack[USBD_STACK_SIZE]; +StackType_t usb_device_stack[USBD_STACK_SIZE]; StaticTask_t usb_device_taskdef; -StackType_t video_stack[VIDEO_STACK_SIZE]; +StackType_t video_stack[VIDEO_STACK_SIZE]; StaticTask_t video_taskdef; #endif // USB Device Driver task // This top level thread process all usb events and invoke callbacks -void usb_device_task(void *param) { - (void) param; - - // init device stack on configured roothub port - // This should be called after scheduler/kernel is started. - // Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API. - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - // RTOS forever loop - while (1) { - // put this thread to waiting state until there is new events - tud_task(); - } +void usb_device_task(void *param) +{ + (void)param; + + // init device stack on configured roothub port + // This should be called after scheduler/kernel is started. + // Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API. + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + // RTOS forever loop + while (1) { + // put this thread to waiting state until there is new events + tud_task(); + } } -void freertos_init_task(void) { - #if configSUPPORT_STATIC_ALLOCATION - xTaskCreateStatic(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, blinky_stack, &blinky_taskdef); - xTaskCreateStatic(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES-1, usb_device_stack, &usb_device_taskdef); - xTaskCreateStatic(video_task, "cdc", VIDEO_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, video_stack, &video_taskdef); - #else - xTaskCreate(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, NULL); - xTaskCreate(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL); - xTaskCreate(video_task, "video", VIDEO_STACK_SZIE, NULL, configMAX_PRIORITIES - 2, NULL); - #endif - - // skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 - #if !TUP_MCU_ESPRESSIF - vTaskStartScheduler(); - #endif +void freertos_init_task(void) +{ +#if configSUPPORT_STATIC_ALLOCATION + xTaskCreateStatic(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, blinky_stack, + &blinky_taskdef); + xTaskCreateStatic(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, + usb_device_stack, &usb_device_taskdef); + xTaskCreateStatic(video_task, "cdc", VIDEO_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, + video_stack, &video_taskdef); +#else + xTaskCreate(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, NULL); + xTaskCreate(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL); + xTaskCreate(video_task, "video", VIDEO_STACK_SZIE, NULL, configMAX_PRIORITIES - 2, NULL); +#endif + +// skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 +#if !TUP_MCU_ESPRESSIF + vTaskStartScheduler(); +#endif } #endif diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/tusb_config.h b/Libraries/tinyusb/examples/device/video_capture_2ch/src/tusb_config.h index 43c7dfc9033..9b5ea8d1958 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,23 +54,23 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos/ +#define CFG_TUSB_OS_INC_PATH freertos / #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -84,7 +84,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -92,18 +92,18 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// // The number of video control interfaces -#define CFG_TUD_VIDEO 2 +#define CFG_TUD_VIDEO 2 // The number of video streaming interfaces -#define CFG_TUD_VIDEO_STREAMING 2 +#define CFG_TUD_VIDEO_STREAMING 2 // video streaming endpoint buffer size -#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256 +#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256 // use bulk endpoint for streaming interface #define CFG_TUD_VIDEO_STREAMING_BULK 1 @@ -114,7 +114,7 @@ #define CFG_TUD_VIDEO_LOG_LEVEL 1 #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.c index e78e452fc63..b519698e059 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.c @@ -33,35 +33,36 @@ * Auto ProductID layout's Bitmap: * [MSB] VIDEO | AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6)) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, - STRID_UVC_CONTROL_1, - STRID_UVC_STREAMING_1, - STRID_UVC_CONTROL_2, - STRID_UVC_STREAMING_2, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, + STRID_UVC_CONTROL_1, + STRID_UVC_STREAMING_1, + STRID_UVC_CONTROL_2, + STRID_UVC_STREAMING_2, }; // array of pointer to string descriptors -char const* string_desc_arr[] = { - (const char[]) {0x09, 0x04}, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UVC Control 1", // 4: UVC Interface 1 - "UVC Streaming 1", // 5: UVC Interface 1 - "UVC Control 2", // 6: UVC Interface 2 - "UVC Streaming 2", // 7: UVC Interface 2 +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UVC Control 1", // 4: UVC Interface 1 + "UVC Streaming 1", // 5: UVC Interface 1 + "UVC Control 2", // 6: UVC Interface 2 + "UVC Streaming 2", // 7: UVC Interface 2 }; @@ -69,33 +70,34 @@ char const* string_desc_arr[] = { // Device Descriptors //--------------------------------------------------------------------+ tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for Video // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = STRID_MANUFACTURER, - .iProduct = STRID_PRODUCT, - .iSerialNumber = STRID_SERIAL, + .iManufacturer = STRID_MANUFACTURER, + .iProduct = STRID_PRODUCT, + .iSerialNumber = STRID_SERIAL, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const* tud_descriptor_device_cb(void) { - return (uint8_t const*) &desc_device; +uint8_t const *tud_descriptor_device_cb(void) +{ + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ @@ -103,85 +105,85 @@ uint8_t const* tud_descriptor_device_cb(void) { //--------------------------------------------------------------------+ /* Time stamp base clock. It is a deprecated parameter. */ -#define UVC_CLOCK_FREQUENCY 27000000 +#define UVC_CLOCK_FREQUENCY 27000000 /* video capture path */ -#define UVC_ENTITY_CAP_INPUT_TERMINAL 0x01 +#define UVC_ENTITY_CAP_INPUT_TERMINAL 0x01 #define UVC_ENTITY_CAP_OUTPUT_TERMINAL 0x02 enum { - ITF_NUM_VIDEO_CONTROL_1, - ITF_NUM_VIDEO_STREAMING_1, - ITF_NUM_VIDEO_CONTROL_2, - ITF_NUM_VIDEO_STREAMING_2, - ITF_NUM_TOTAL + ITF_NUM_VIDEO_CONTROL_1, + ITF_NUM_VIDEO_STREAMING_1, + ITF_NUM_VIDEO_CONTROL_2, + ITF_NUM_VIDEO_STREAMING_2, + ITF_NUM_TOTAL }; -#define EPNUM_VIDEO_IN_1 0x81 -#define EPNUM_VIDEO_IN_2 0x82 +#define EPNUM_VIDEO_IN_1 0x81 +#define EPNUM_VIDEO_IN_2 0x82 #if defined(CFG_EXAMPLE_VIDEO_READONLY) && !defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) - #define USE_MJPEG 1 +#define USE_MJPEG 1 #else - #define USE_MJPEG 0 +#define USE_MJPEG 0 #endif #define USE_ISO_STREAMING (!CFG_TUD_VIDEO_STREAMING_BULK) typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_control_header_1itf_t header; - tusb_desc_video_control_camera_terminal_t camera_terminal; - tusb_desc_video_control_output_terminal_t output_terminal; + tusb_desc_interface_t itf; + tusb_desc_video_control_header_1itf_t header; + tusb_desc_video_control_camera_terminal_t camera_terminal; + tusb_desc_video_control_output_terminal_t output_terminal; } uvc_control_desc_t; /* Windows support YUY2 and NV12 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */ typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_streaming_input_header_1byte_t header; - tusb_desc_video_format_uncompressed_t format; - tusb_desc_video_frame_uncompressed_continuous_t frame; - tusb_desc_video_streaming_color_matching_t color; + tusb_desc_interface_t itf; + tusb_desc_video_streaming_input_header_1byte_t header; + tusb_desc_video_format_uncompressed_t format; + tusb_desc_video_frame_uncompressed_continuous_t frame; + tusb_desc_video_streaming_color_matching_t color; #if USE_ISO_STREAMING - // For ISO streaming, USB spec requires to alternate interface - tusb_desc_interface_t itf_alt; + // For ISO streaming, USB spec requires to alternate interface + tusb_desc_interface_t itf_alt; #endif - tusb_desc_endpoint_t ep; + tusb_desc_endpoint_t ep; } uvc_streaming_yuy2_desc_t; typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_streaming_input_header_1byte_t header; - tusb_desc_video_format_mjpeg_t format; - tusb_desc_video_frame_mjpeg_continuous_t frame; - tusb_desc_video_streaming_color_matching_t color; + tusb_desc_interface_t itf; + tusb_desc_video_streaming_input_header_1byte_t header; + tusb_desc_video_format_mjpeg_t format; + tusb_desc_video_frame_mjpeg_continuous_t frame; + tusb_desc_video_streaming_color_matching_t color; #if USE_ISO_STREAMING - // For ISO streaming, USB spec requires to alternate interface - tusb_desc_interface_t itf_alt; + // For ISO streaming, USB spec requires to alternate interface + tusb_desc_interface_t itf_alt; #endif - tusb_desc_endpoint_t ep; + tusb_desc_endpoint_t ep; } uvc_streaming_mpeg_desc_t; typedef struct TU_ATTR_PACKED { - tusb_desc_configuration_t config; - - struct TU_ATTR_PACKED { - tusb_desc_interface_assoc_t iad; - uvc_control_desc_t video_control; - uvc_streaming_yuy2_desc_t video_streaming; - } uvc_yuy2; - - struct TU_ATTR_PACKED { - tusb_desc_interface_assoc_t iad; - uvc_control_desc_t video_control; - uvc_streaming_mpeg_desc_t video_streaming; - } uvc_mpeg; + tusb_desc_configuration_t config; + + struct TU_ATTR_PACKED { + tusb_desc_interface_assoc_t iad; + uvc_control_desc_t video_control; + uvc_streaming_yuy2_desc_t video_streaming; + } uvc_yuy2; + + struct TU_ATTR_PACKED { + tusb_desc_interface_assoc_t iad; + uvc_control_desc_t video_control; + uvc_streaming_mpeg_desc_t video_streaming; + } uvc_mpeg; } uvc_cfg_desc_t; const uvc_cfg_desc_t desc_fs_configuration = { @@ -534,74 +536,78 @@ const uvc_cfg_desc_t desc_fs_configuration = { #if TUD_OPT_HIGH_SPEED uvc_cfg_desc_t desc_hs_configuration; -static uint8_t * get_hs_configuration_desc(void) { - static bool init = false; +static uint8_t *get_hs_configuration_desc(void) +{ + static bool init = false; - if (!init) { - desc_hs_configuration = desc_fs_configuration; - // change endpoint bulk size to 512 if bulk streaming - if (CFG_TUD_VIDEO_STREAMING_BULK) { - desc_hs_configuration.uvc_yuy2.video_streaming.ep.wMaxPacketSize = 512; - desc_hs_configuration.uvc_mpeg.video_streaming.ep.wMaxPacketSize = 512; + if (!init) { + desc_hs_configuration = desc_fs_configuration; + // change endpoint bulk size to 512 if bulk streaming + if (CFG_TUD_VIDEO_STREAMING_BULK) { + desc_hs_configuration.uvc_yuy2.video_streaming.ep.wMaxPacketSize = 512; + desc_hs_configuration.uvc_mpeg.video_streaming.ep.wMaxPacketSize = 512; + } } - } - init = true; + init = true; - return (uint8_t *) &desc_hs_configuration; + return (uint8_t *)&desc_hs_configuration; } // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .bNumConfigurations = 0x01, - .bReserved = 0x00 + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const* tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const*) &desc_device_qualifier; +uint8_t const *tud_descriptor_device_qualifier_cb(void) +{ + return (uint8_t const *)&desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - if (tud_speed_get() == TUSB_SPEED_HIGH) { - return (uint8_t const*) &desc_fs_configuration; - } else { - return get_hs_configuration_desc(); - } +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) +{ + (void)index; // for multiple configurations + // if link speed is high return fullspeed config, and vice versa + if (tud_speed_get() == TUSB_SPEED_HIGH) { + return (uint8_t const *)&desc_fs_configuration; + } else { + return get_hs_configuration_desc(); + } } #endif // highspeed // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const* tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +{ + (void)index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - if (tud_speed_get() == TUSB_SPEED_HIGH) { - return get_hs_configuration_desc(); - } else + // Although we are highspeed, host may be fullspeed. + if (tud_speed_get() == TUSB_SPEED_HIGH) { + return get_hs_configuration_desc(); + } else #endif - { - return (uint8_t const*) &desc_fs_configuration; - } + { + return (uint8_t const *)&desc_fs_configuration; + } } //--------------------------------------------------------------------+ @@ -612,42 +618,45 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch (index) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) return NULL; + if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) + return NULL; - const char* str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.h index 12d41b2f3a8..26857591003 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.h @@ -27,212 +27,217 @@ #ifndef _USB_DESCRIPTORS_H_ #define _USB_DESCRIPTORS_H_ -#define FRAME_WIDTH 128 -#define FRAME_HEIGHT 96 -#define FRAME_RATE 10 +#define FRAME_WIDTH 128 +#define FRAME_HEIGHT 96 +#define FRAME_RATE 10 // NOTE: descriptor template is not used but leave here as reference -#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN (\ - TUD_VIDEO_DESC_IAD_LEN\ - /* control */\ - + TUD_VIDEO_DESC_STD_VC_LEN\ - + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ - + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ - + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ - + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\ - + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\ - + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ - /* Interface 1, Alternate 1 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + 7/* Endpoint */\ - ) - -#define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN (\ - TUD_VIDEO_DESC_IAD_LEN\ - /* control */\ - + TUD_VIDEO_DESC_STD_VC_LEN\ - + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ - + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ - + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ - + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN\ - + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN\ - + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ - /* Interface 1, Alternate 1 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + 7/* Endpoint */\ - ) - -#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN (\ - TUD_VIDEO_DESC_IAD_LEN\ - /* control */\ - + TUD_VIDEO_DESC_STD_VC_LEN\ - + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ - + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ - + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ - + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\ - + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\ - + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ - + 7/* Endpoint */\ - ) - -#define TUD_VIDEO_CAPTURE_DESC_MJPEG_BULK_LEN (\ - TUD_VIDEO_DESC_IAD_LEN\ - /* control */\ - + TUD_VIDEO_DESC_STD_VC_LEN\ - + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ - + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ - + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ - /* Interface 1, Alternate 0 */\ - + TUD_VIDEO_DESC_STD_VS_LEN\ - + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ - + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN\ - + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN\ - + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ - + 7/* Endpoint */\ - ) +#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN \ + (TUD_VIDEO_DESC_IAD_LEN /* control */ \ + + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + \ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN /* Interface 1, Alternate 1 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + 7 /* Endpoint */ \ + ) + +#define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN \ + (TUD_VIDEO_DESC_IAD_LEN /* control */ \ + + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + \ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN /* Interface 1, Alternate 1 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + 7 /* Endpoint */ \ + ) + +#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN \ + (TUD_VIDEO_DESC_IAD_LEN /* control */ \ + + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + \ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN + 7 /* Endpoint */ \ + ) + +#define TUD_VIDEO_CAPTURE_DESC_MJPEG_BULK_LEN \ + (TUD_VIDEO_DESC_IAD_LEN /* control */ \ + + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ + + TUD_VIDEO_DESC_STD_VS_LEN + \ + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN + 7 /* Endpoint */ \ + ) /* Windows support YUY2 and NV12 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */ -#define TUD_VIDEO_DESC_CS_VS_FMT_YUY2(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_YUY2, 16, _frmidx, _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_NV12(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_NV12, 12, _frmidx, _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_M420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_M420, 12, _frmidx, _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_I420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, _asrx, _asry, _interlace, _cp) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ - /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ - /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ - /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ - /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, _stridx), \ - /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ - _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ - /*bmaControls(1)*/0), \ - /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ - /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ - /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \ - _width * _height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, \ - (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ - /* VS alt 1 */\ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), \ - /* EP */ \ - TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ - /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ - /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ - /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ - /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, _stridx), \ - /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ - _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ - /*bmaControls(1)*/0), \ - /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ - /*bmFlags*/0, /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ - /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */1, 0, _width, _height, \ - _width * _height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, \ - (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ - /* VS alt 1 */\ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), \ - /* EP */ \ - TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) - - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ - /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ - /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ - /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ - /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \ - /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ - /*wTotalLength - bLength */\ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ - _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ - /*bmaControls(1)*/0), \ - /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ - /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ - /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \ - _width * _height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, \ - (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ +#define TUD_VIDEO_DESC_CS_VS_FMT_YUY2(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ + _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_YUY2, 16, _frmidx, \ + _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_NV12(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ + _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_NV12, 12, _frmidx, \ + _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_M420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ + _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_M420, 12, _frmidx, \ + _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_I420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ + _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, \ + _asrx, _asry, _interlace, _cp) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ + _stridx), /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC( \ + ITF_NUM_VIDEO_CONTROL, 0, \ + _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC( \ + 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ + UVC_CLOCK_FREQUENCY, \ + ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ + 0), /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, \ + _stridx), /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( \ + /*bNumFormats*/ 1, /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ + /*bmaControls(1)*/ 0), /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ + /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ + /*bCopyProtect*/ 0), /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ + _width *_height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, (10000000 / _fps), \ + (10000000 / _fps), (10000000 / _fps) * _fps, \ + (10000000 / _fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ + VIDEO_COLOR_XFER_CH_BT709, \ + VIDEO_COLOR_COEF_SMPTE170M), /* VS alt 1 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), /* EP */ \ + TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ + _stridx), /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC( \ + ITF_NUM_VIDEO_CONTROL, 0, \ + _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC( \ + 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ + UVC_CLOCK_FREQUENCY, \ + ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ + 0), /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, \ + _stridx), /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( \ + /*bNumFormats*/ 1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ + /*bmaControls(1)*/ 0), /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ + /*bmFlags*/ 0, /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ + /*bCopyProtect*/ 0), /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ + _width *_height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, (10000000 / _fps), \ + (10000000 / _fps), (10000000 / _fps) * _fps, \ + (10000000 / _fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ + VIDEO_COLOR_XFER_CH_BT709, \ + VIDEO_COLOR_COEF_SMPTE170M), /* VS alt 1 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), /* EP */ \ + TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ + _stridx), /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC( \ + ITF_NUM_VIDEO_CONTROL, 0, \ + _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC( \ + 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ + UVC_CLOCK_FREQUENCY, \ + ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ + 0), /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, \ + _stridx), /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( \ + /*bNumFormats*/ 1, /*wTotalLength - bLength */ \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ + /*bmaControls(1)*/ 0), /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ + /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ + /*bCopyProtect*/ 0), /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ + _width *_height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, (10000000 / _fps), \ + (10000000 / _fps), (10000000 / _fps) * _fps, \ + (10000000 / _fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING( \ + VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1) -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ - /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ - /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ - /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, UVC_ENTITY_CAP_INPUT_TERMINAL, 0), \ - /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \ - /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ - _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ - /*bmaControls(1)*/0), \ - /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ - /*bmFlags*/0, /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ - /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */1, 0, _width, _height, \ - _width * _height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, \ - (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ - /* EP */ \ +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ + _stridx), /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC( \ + ITF_NUM_VIDEO_CONTROL, 0, \ + _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC( \ + 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ + UVC_CLOCK_FREQUENCY, \ + ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, \ + UVC_ENTITY_CAP_INPUT_TERMINAL, 0), /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, \ + _stridx), /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( \ + /*bNumFormats*/ 1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ + /*bmaControls(1)*/ 0), /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ + /*bmFlags*/ 0, /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ + /*bCopyProtect*/ 0), /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ + _width *_height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, (10000000 / _fps), \ + (10000000 / _fps), (10000000 / _fps) * _fps, \ + (10000000 / _fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ + VIDEO_COLOR_XFER_CH_BT709, \ + VIDEO_COLOR_COEF_SMPTE170M), /* EP */ \ TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1) - #endif diff --git a/Libraries/tinyusb/examples/device/webusb_serial/src/main.c b/Libraries/tinyusb/examples/device/webusb_serial/src/main.c index 800d435b8a1..bee9ec5e3a0 100644 --- a/Libraries/tinyusb/examples/device/webusb_serial/src/main.c +++ b/Libraries/tinyusb/examples/device/webusb_serial/src/main.c @@ -60,26 +60,23 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, - BLINK_ALWAYS_ON = UINT32_MAX, - BLINK_ALWAYS_OFF = 0 + BLINK_ALWAYS_ON = UINT32_MAX, + BLINK_ALWAYS_OFF = 0 }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; -#define URL "example.tinyusb.org/webusb-serial/index.html" +#define URL "example.tinyusb.org/webusb-serial/index.html" -const tusb_desc_webusb_url_t desc_url = -{ - .bLength = 3 + sizeof(URL) - 1, - .bDescriptorType = 3, // WEBUSB URL type - .bScheme = 1, // 0: http, 1: https - .url = URL -}; +const tusb_desc_webusb_url_t desc_url = { .bLength = 3 + sizeof(URL) - 1, + .bDescriptorType = 3, // WEBUSB URL type + .bScheme = 1, // 0: http, 1: https + .url = URL }; static bool web_serial_connected = false; @@ -91,45 +88,42 @@ void webserial_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); - - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - while (1) - { - tud_task(); // tinyusb device task - cdc_task(); - webserial_task(); - led_blinking_task(); - } + board_init(); + + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + while (1) { + tud_task(); // tinyusb device task + cdc_task(); + webserial_task(); + led_blinking_task(); + } } // send characters to both CDC and WebUSB void echo_all(uint8_t buf[], uint32_t count) { - // echo to web serial - if ( web_serial_connected ) - { - tud_vendor_write(buf, count); - tud_vendor_write_flush(); - } - - // echo to cdc - if ( tud_cdc_connected() ) - { - for(uint32_t i=0; ibmRequestType_bit.type) - { + switch (request->bmRequestType_bit.type) { case TUSB_REQ_TYPE_VENDOR: - switch (request->bRequest) - { + switch (request->bRequest) { case VENDOR_REQUEST_WEBUSB: - // match vendor request in BOS descriptor - // Get landing page url - return tud_control_xfer(rhport, request, (void*)(uintptr_t) &desc_url, desc_url.bLength); + // match vendor request in BOS descriptor + // Get landing page url + return tud_control_xfer(rhport, request, (void *)(uintptr_t)&desc_url, + desc_url.bLength); case VENDOR_REQUEST_MICROSOFT: - if ( request->wIndex == 7 ) - { - // Get Microsoft OS 2.0 compatible descriptor - uint16_t total_len; - memcpy(&total_len, desc_ms_os_20+8, 2); - - return tud_control_xfer(rhport, request, (void*)(uintptr_t) desc_ms_os_20, total_len); - }else - { - return false; - } - - default: break; - } - break; + if (request->wIndex == 7) { + // Get Microsoft OS 2.0 compatible descriptor + uint16_t total_len; + memcpy(&total_len, desc_ms_os_20 + 8, 2); + + return tud_control_xfer(rhport, request, (void *)(uintptr_t)desc_ms_os_20, + total_len); + } else { + return false; + } + + default: + break; + } + break; case TUSB_REQ_TYPE_CLASS: - if (request->bRequest == 0x22) - { - // Webserial simulate the CDC_REQUEST_SET_CONTROL_LINE_STATE (0x22) to connect and disconnect. - web_serial_connected = (request->wValue != 0); - - // Always lit LED if connected - if ( web_serial_connected ) - { - board_led_write(true); - blink_interval_ms = BLINK_ALWAYS_ON; - - tud_vendor_write_str("\r\nWebUSB interface connected\r\n"); - tud_vendor_write_flush(); - }else - { - blink_interval_ms = BLINK_MOUNTED; + if (request->bRequest == 0x22) { + // Webserial simulate the CDC_REQUEST_SET_CONTROL_LINE_STATE (0x22) to connect and disconnect. + web_serial_connected = (request->wValue != 0); + + // Always lit LED if connected + if (web_serial_connected) { + board_led_write(true); + blink_interval_ms = BLINK_ALWAYS_ON; + + tud_vendor_write_str("\r\nWebUSB interface connected\r\n"); + tud_vendor_write_flush(); + } else { + blink_interval_ms = BLINK_MOUNTED; + } + + // response with status OK + return tud_control_status(rhport, request); } + break; - // response with status OK - return tud_control_status(rhport, request); - } - break; - - default: break; - } + default: + break; + } - // stall unknown request - return false; + // stall unknown request + return false; } void webserial_task(void) { - if ( web_serial_connected ) - { - if ( tud_vendor_available() ) - { - uint8_t buf[64]; - uint32_t count = tud_vendor_read(buf, sizeof(buf)); - - // echo back to both web serial and cdc - echo_all(buf, count); + if (web_serial_connected) { + if (tud_vendor_available()) { + uint8_t buf[64]; + uint32_t count = tud_vendor_read(buf, sizeof(buf)); + + // echo back to both web serial and cdc + echo_all(buf, count); + } } - } } - //--------------------------------------------------------------------+ // USB CDC //--------------------------------------------------------------------+ void cdc_task(void) { - if ( tud_cdc_connected() ) - { - // connected and there are data available - if ( tud_cdc_available() ) - { - uint8_t buf[64]; + if (tud_cdc_connected()) { + // connected and there are data available + if (tud_cdc_available()) { + uint8_t buf[64]; - uint32_t count = tud_cdc_read(buf, sizeof(buf)); + uint32_t count = tud_cdc_read(buf, sizeof(buf)); - // echo back to both web serial and cdc - echo_all(buf, count); + // echo back to both web serial and cdc + echo_all(buf, count); + } } - } } // Invoked when cdc when line state changed e.g connected/disconnected void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { - (void) itf; - - // connected - if ( dtr && rts ) - { - // print initial message when connected - tud_cdc_write_str("\r\nTinyUSB WebUSB device example\r\n"); - } + (void)itf; + + // connected + if (dtr && rts) { + // print initial message when connected + tud_cdc_write_str("\r\nTinyUSB WebUSB device example\r\n"); + } } // Invoked when CDC interface received data from host void tud_cdc_rx_cb(uint8_t itf) { - (void) itf; + (void)itf; } //--------------------------------------------------------------------+ @@ -293,13 +280,14 @@ void tud_cdc_rx_cb(uint8_t itf) //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) + return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/webusb_serial/src/tusb_config.h b/Libraries/tinyusb/examples/device/webusb_serial/src/tusb_config.h index fde732b9ec7..555f3ba63a4 100644 --- a/Libraries/tinyusb/examples/device/webusb_serial/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/webusb_serial/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,28 +87,27 @@ //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 1 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 1 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // Vendor FIFO size of TX and RX // If not configured vendor endpoints will not be buffered #define CFG_TUD_VENDOR_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #define CFG_TUD_VENDOR_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) - #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c index ae1051af619..1ff8412cd60 100644 --- a/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c @@ -33,112 +33,108 @@ * Auto ProductID layout's Bitmap: * [MSB] MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) -#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) +#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) +#define USB_PID \ + (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ + _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0210, // at least 2.1 or 3.x for BOS & webUSB +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0210, // at least 2.1 or 3.x for BOS & webUSB // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) +uint8_t const *tud_descriptor_device_cb(void) { - return (uint8_t const *) &desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum -{ - ITF_NUM_CDC = 0, - ITF_NUM_CDC_DATA, - ITF_NUM_VENDOR, - ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_VENDOR_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX - // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number - // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... - #define EPNUM_CDC_IN 2 - #define EPNUM_CDC_OUT 2 - #define EPNUM_VENDOR_IN 5 - #define EPNUM_VENDOR_OUT 5 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X - // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_IN 2 - #define EPNUM_CDC_OUT 3 - #define EPNUM_VENDOR_IN 4 - #define EPNUM_VENDOR_OUT 5 +enum { ITF_NUM_CDC = 0, ITF_NUM_CDC_DATA, ITF_NUM_VENDOR, ITF_NUM_TOTAL }; + +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_VENDOR_DESC_LEN) + +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ + CFG_TUSB_MCU == OPT_MCU_LPC40XX +// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number +// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... +#define EPNUM_CDC_IN 2 +#define EPNUM_CDC_OUT 2 +#define EPNUM_VENDOR_IN 5 +#define EPNUM_VENDOR_OUT 5 +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X +// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_IN 2 +#define EPNUM_CDC_OUT 3 +#define EPNUM_VENDOR_IN 4 +#define EPNUM_VENDOR_OUT 5 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X - // FT9XX doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_IN 2 - #define EPNUM_CDC_OUT 3 - #define EPNUM_VENDOR_IN 4 - #define EPNUM_VENDOR_OUT 5 +// FT9XX doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_IN 2 +#define EPNUM_CDC_OUT 3 +#define EPNUM_VENDOR_IN 4 +#define EPNUM_VENDOR_OUT 5 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 - // MAX32 doesn't support a same endpoint number with different direction IN and OUT - // e.g EP1 OUT & EP1 IN cannot exist together - #define EPNUM_CDC_IN 2 - #define EPNUM_CDC_OUT 3 - #define EPNUM_VENDOR_IN 4 - #define EPNUM_VENDOR_OUT 5 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 +// MAX32 doesn't support a same endpoint number with different direction IN and OUT +// e.g EP1 OUT & EP1 IN cannot exist together +#define EPNUM_CDC_IN 2 +#define EPNUM_CDC_OUT 3 +#define EPNUM_VENDOR_IN 4 +#define EPNUM_VENDOR_OUT 5 #else - #define EPNUM_CDC_IN 2 - #define EPNUM_CDC_OUT 2 - #define EPNUM_VENDOR_IN 3 - #define EPNUM_VENDOR_OUT 3 +#define EPNUM_CDC_IN 2 +#define EPNUM_CDC_OUT 2 +#define EPNUM_VENDOR_IN 3 +#define EPNUM_VENDOR_OUT 3 #endif -uint8_t const desc_configuration[] = -{ - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, 0x81, 8, EPNUM_CDC_OUT, 0x80 | EPNUM_CDC_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, 0x81, 8, EPNUM_CDC_OUT, 0x80 | EPNUM_CDC_IN, + TUD_OPT_HIGH_SPEED ? 512 : 64), - // Interface number, string index, EP Out & IN address, EP size - TUD_VENDOR_DESCRIPTOR(ITF_NUM_VENDOR, 5, EPNUM_VENDOR_OUT, 0x80 | EPNUM_VENDOR_IN, TUD_OPT_HIGH_SPEED ? 512 : 64) + // Interface number, string index, EP Out & IN address, EP size + TUD_VENDOR_DESCRIPTOR(ITF_NUM_VENDOR, 5, EPNUM_VENDOR_OUT, 0x80 | EPNUM_VENDOR_IN, + TUD_OPT_HIGH_SPEED ? 512 : 64) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { - (void) index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -159,55 +155,59 @@ GUID is freshly generated and should be OK to use. (Section Microsoft OS compatibility descriptors) */ -#define BOS_TOTAL_LEN (TUD_BOS_DESC_LEN + TUD_BOS_WEBUSB_DESC_LEN + TUD_BOS_MICROSOFT_OS_DESC_LEN) +#define BOS_TOTAL_LEN (TUD_BOS_DESC_LEN + TUD_BOS_WEBUSB_DESC_LEN + TUD_BOS_MICROSOFT_OS_DESC_LEN) -#define MS_OS_20_DESC_LEN 0xB2 +#define MS_OS_20_DESC_LEN 0xB2 // BOS Descriptor is required for webUSB -uint8_t const desc_bos[] = -{ - // total length, number of device caps - TUD_BOS_DESCRIPTOR(BOS_TOTAL_LEN, 2), +uint8_t const desc_bos[] = { + // total length, number of device caps + TUD_BOS_DESCRIPTOR(BOS_TOTAL_LEN, 2), - // Vendor Code, iLandingPage - TUD_BOS_WEBUSB_DESCRIPTOR(VENDOR_REQUEST_WEBUSB, 1), + // Vendor Code, iLandingPage + TUD_BOS_WEBUSB_DESCRIPTOR(VENDOR_REQUEST_WEBUSB, 1), - // Microsoft OS 2.0 descriptor - TUD_BOS_MS_OS_20_DESCRIPTOR(MS_OS_20_DESC_LEN, VENDOR_REQUEST_MICROSOFT) + // Microsoft OS 2.0 descriptor + TUD_BOS_MS_OS_20_DESCRIPTOR(MS_OS_20_DESC_LEN, VENDOR_REQUEST_MICROSOFT) }; -uint8_t const * tud_descriptor_bos_cb(void) +uint8_t const *tud_descriptor_bos_cb(void) { - return desc_bos; + return desc_bos; } - -uint8_t const desc_ms_os_20[] = -{ - // Set header: length, type, windows version, total length - U16_TO_U8S_LE(0x000A), U16_TO_U8S_LE(MS_OS_20_SET_HEADER_DESCRIPTOR), U32_TO_U8S_LE(0x06030000), U16_TO_U8S_LE(MS_OS_20_DESC_LEN), - - // Configuration subset header: length, type, configuration index, reserved, configuration total length - U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_CONFIGURATION), 0, 0, U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A), - - // Function Subset header: length, type, first interface, reserved, subset length - U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_FUNCTION), ITF_NUM_VENDOR, 0, U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A-0x08), - - // MS OS 2.0 Compatible ID descriptor: length, type, compatible ID, sub compatible ID - U16_TO_U8S_LE(0x0014), U16_TO_U8S_LE(MS_OS_20_FEATURE_COMPATBLE_ID), 'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sub-compatible - - // MS OS 2.0 Registry property descriptor: length, type - U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A-0x08-0x08-0x14), U16_TO_U8S_LE(MS_OS_20_FEATURE_REG_PROPERTY), - U16_TO_U8S_LE(0x0007), U16_TO_U8S_LE(0x002A), // wPropertyDataType, wPropertyNameLength and PropertyName "DeviceInterfaceGUIDs\0" in UTF-16 - 'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, 'I', 0x00, 'n', 0x00, 't', 0x00, 'e', 0x00, - 'r', 0x00, 'f', 0x00, 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, 'I', 0x00, 'D', 0x00, 's', 0x00, 0x00, 0x00, - U16_TO_U8S_LE(0x0050), // wPropertyDataLength - //bPropertyData: “{975F44D9-0D08-43FD-8B3E-127CA8AFFF9D}”. - '{', 0x00, '9', 0x00, '7', 0x00, '5', 0x00, 'F', 0x00, '4', 0x00, '4', 0x00, 'D', 0x00, '9', 0x00, '-', 0x00, - '0', 0x00, 'D', 0x00, '0', 0x00, '8', 0x00, '-', 0x00, '4', 0x00, '3', 0x00, 'F', 0x00, 'D', 0x00, '-', 0x00, - '8', 0x00, 'B', 0x00, '3', 0x00, 'E', 0x00, '-', 0x00, '1', 0x00, '2', 0x00, '7', 0x00, 'C', 0x00, 'A', 0x00, - '8', 0x00, 'A', 0x00, 'F', 0x00, 'F', 0x00, 'F', 0x00, '9', 0x00, 'D', 0x00, '}', 0x00, 0x00, 0x00, 0x00, 0x00 +uint8_t const desc_ms_os_20[] = { + // Set header: length, type, windows version, total length + U16_TO_U8S_LE(0x000A), U16_TO_U8S_LE(MS_OS_20_SET_HEADER_DESCRIPTOR), U32_TO_U8S_LE(0x06030000), + U16_TO_U8S_LE(MS_OS_20_DESC_LEN), + + // Configuration subset header: length, type, configuration index, reserved, configuration total length + U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_CONFIGURATION), 0, 0, + U16_TO_U8S_LE(MS_OS_20_DESC_LEN - 0x0A), + + // Function Subset header: length, type, first interface, reserved, subset length + U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_FUNCTION), ITF_NUM_VENDOR, 0, + U16_TO_U8S_LE(MS_OS_20_DESC_LEN - 0x0A - 0x08), + + // MS OS 2.0 Compatible ID descriptor: length, type, compatible ID, sub compatible ID + U16_TO_U8S_LE(0x0014), U16_TO_U8S_LE(MS_OS_20_FEATURE_COMPATBLE_ID), 'W', 'I', 'N', 'U', 'S', + 'B', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sub-compatible + + // MS OS 2.0 Registry property descriptor: length, type + U16_TO_U8S_LE(MS_OS_20_DESC_LEN - 0x0A - 0x08 - 0x08 - 0x14), + U16_TO_U8S_LE(MS_OS_20_FEATURE_REG_PROPERTY), U16_TO_U8S_LE(0x0007), + U16_TO_U8S_LE( + 0x002A), // wPropertyDataType, wPropertyNameLength and PropertyName "DeviceInterfaceGUIDs\0" in UTF-16 + 'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, 'I', 0x00, 'n', 0x00, 't', + 0x00, 'e', 0x00, 'r', 0x00, 'f', 0x00, 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, + 'I', 0x00, 'D', 0x00, 's', 0x00, 0x00, 0x00, + U16_TO_U8S_LE(0x0050), // wPropertyDataLength + //bPropertyData: “{975F44D9-0D08-43FD-8B3E-127CA8AFFF9D}”. + '{', 0x00, '9', 0x00, '7', 0x00, '5', 0x00, 'F', 0x00, '4', 0x00, '4', 0x00, 'D', 0x00, '9', + 0x00, '-', 0x00, '0', 0x00, 'D', 0x00, '0', 0x00, '8', 0x00, '-', 0x00, '4', 0x00, '3', 0x00, + 'F', 0x00, 'D', 0x00, '-', 0x00, '8', 0x00, 'B', 0x00, '3', 0x00, 'E', 0x00, '-', 0x00, '1', + 0x00, '2', 0x00, '7', 0x00, 'C', 0x00, 'A', 0x00, '8', 0x00, 'A', 0x00, 'F', 0x00, 'F', 0x00, + 'F', 0x00, '9', 0x00, 'D', 0x00, '}', 0x00, 0x00, 0x00, 0x00, 0x00 }; TU_VERIFY_STATIC(sizeof(desc_ms_os_20) == MS_OS_20_DESC_LEN, "Incorrect size"); @@ -218,63 +218,65 @@ TU_VERIFY_STATIC(sizeof(desc_ms_os_20) == MS_OS_20_DESC_LEN, "Incorrect size"); // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = -{ - (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB CDC", // 4: CDC Interface - "TinyUSB WebUSB" // 5: Vendor Interface +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB CDC", // 4: CDC Interface + "TinyUSB WebUSB" // 5: Vendor Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { - (void) langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + size_t chr_count; - switch ( index ) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) + return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if ( chr_count > max_count ) chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) + chr_count = max_count; - // Convert ASCII string into UTF-16 - for ( size_t i = 0; i < chr_count; i++ ) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h index a1c4a2cf117..27f9a67f653 100644 --- a/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h @@ -25,11 +25,7 @@ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ -enum -{ - VENDOR_REQUEST_WEBUSB = 1, - VENDOR_REQUEST_MICROSOFT = 2 -}; +enum { VENDOR_REQUEST_WEBUSB = 1, VENDOR_REQUEST_MICROSOFT = 2 }; extern uint8_t const desc_ms_os_20[]; diff --git a/Libraries/tinyusb/hw/bsp/ansi_escape.h b/Libraries/tinyusb/hw/bsp/ansi_escape.h index 15af2f3ab1c..4a356f14a8e 100644 --- a/Libraries/tinyusb/hw/bsp/ansi_escape.h +++ b/Libraries/tinyusb/hw/bsp/ansi_escape.h @@ -31,65 +31,65 @@ #ifndef _TUSB_ANSI_ESC_CODE_H_ #define _TUSB_ANSI_ESC_CODE_H_ - #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#define CSI_CODE(seq) "\33[" seq -#define CSI_SGR(x) CSI_CODE(#x) "m" +#define CSI_CODE(seq) "\33[" seq +#define CSI_SGR(x) CSI_CODE(#x) "m" //------------- Cursor movement -------------// /** \defgroup group_ansi_cursor Cursor Movement * @{ */ -#define ANSI_CURSOR_UP(n) CSI_CODE(#n "A") ///< Move cursor up -#define ANSI_CURSOR_DOWN(n) CSI_CODE(#n "B") ///< Move cursor down -#define ANSI_CURSOR_FORWARD(n) CSI_CODE(#n "C") ///< Move cursor forward -#define ANSI_CURSOR_BACKWARD(n) CSI_CODE(#n "D") ///< Move cursor backward -#define ANSI_CURSOR_LINE_DOWN(n) CSI_CODE(#n "E") ///< Move cursor to the beginning of the line (n) down -#define ANSI_CURSOR_LINE_UP(n) CSI_CODE(#n "F") ///< Move cursor to the beginning of the line (n) up +#define ANSI_CURSOR_UP(n) CSI_CODE(#n "A") ///< Move cursor up +#define ANSI_CURSOR_DOWN(n) CSI_CODE(#n "B") ///< Move cursor down +#define ANSI_CURSOR_FORWARD(n) CSI_CODE(#n "C") ///< Move cursor forward +#define ANSI_CURSOR_BACKWARD(n) CSI_CODE(#n "D") ///< Move cursor backward +#define ANSI_CURSOR_LINE_DOWN(n) \ + CSI_CODE(#n "E") ///< Move cursor to the beginning of the line (n) down +#define ANSI_CURSOR_LINE_UP(n) CSI_CODE(#n "F") ///< Move cursor to the beginning of the line (n) up #define ANSI_CURSOR_POSITION(n, m) CSI_CODE(#n ";" #m "H") ///< Move cursor to position (n, m) /** @} */ //------------- Screen -------------// /** \defgroup group_ansi_screen Screen Control * @{ */ -#define ANSI_ERASE_SCREEN(n) CSI_CODE(#n "J") ///< Erase the screen -#define ANSI_ERASE_LINE(n) CSI_CODE(#n "K") ///< Erase the line (n) -#define ANSI_SCROLL_UP(n) CSI_CODE(#n "S") ///< Scroll the whole page up (n) lines -#define ANSI_SCROLL_DOWN(n) CSI_CODE(#n "T") ///< Scroll the whole page down (n) lines +#define ANSI_ERASE_SCREEN(n) CSI_CODE(#n "J") ///< Erase the screen +#define ANSI_ERASE_LINE(n) CSI_CODE(#n "K") ///< Erase the line (n) +#define ANSI_SCROLL_UP(n) CSI_CODE(#n "S") ///< Scroll the whole page up (n) lines +#define ANSI_SCROLL_DOWN(n) CSI_CODE(#n "T") ///< Scroll the whole page down (n) lines /** @} */ //------------- Text Color -------------// /** \defgroup group_ansi_text Text Color * @{ */ -#define ANSI_TEXT_BLACK CSI_SGR(30) -#define ANSI_TEXT_RED CSI_SGR(31) -#define ANSI_TEXT_GREEN CSI_SGR(32) -#define ANSI_TEXT_YELLOW CSI_SGR(33) -#define ANSI_TEXT_BLUE CSI_SGR(34) -#define ANSI_TEXT_MAGENTA CSI_SGR(35) -#define ANSI_TEXT_CYAN CSI_SGR(36) -#define ANSI_TEXT_WHITE CSI_SGR(37) -#define ANSI_TEXT_DEFAULT CSI_SGR(39) +#define ANSI_TEXT_BLACK CSI_SGR(30) +#define ANSI_TEXT_RED CSI_SGR(31) +#define ANSI_TEXT_GREEN CSI_SGR(32) +#define ANSI_TEXT_YELLOW CSI_SGR(33) +#define ANSI_TEXT_BLUE CSI_SGR(34) +#define ANSI_TEXT_MAGENTA CSI_SGR(35) +#define ANSI_TEXT_CYAN CSI_SGR(36) +#define ANSI_TEXT_WHITE CSI_SGR(37) +#define ANSI_TEXT_DEFAULT CSI_SGR(39) /** @} */ //------------- Background Color -------------// /** \defgroup group_ansi_background Background Color * @{ */ -#define ANSI_BG_BLACK CSI_SGR(40) -#define ANSI_BG_RED CSI_SGR(41) -#define ANSI_BG_GREEN CSI_SGR(42) -#define ANSI_BG_YELLOW CSI_SGR(43) -#define ANSI_BG_BLUE CSI_SGR(44) -#define ANSI_BG_MAGENTA CSI_SGR(45) -#define ANSI_BG_CYAN CSI_SGR(46) -#define ANSI_BG_WHITE CSI_SGR(47) -#define ANSI_BG_DEFAULT CSI_SGR(49) +#define ANSI_BG_BLACK CSI_SGR(40) +#define ANSI_BG_RED CSI_SGR(41) +#define ANSI_BG_GREEN CSI_SGR(42) +#define ANSI_BG_YELLOW CSI_SGR(43) +#define ANSI_BG_BLUE CSI_SGR(44) +#define ANSI_BG_MAGENTA CSI_SGR(45) +#define ANSI_BG_CYAN CSI_SGR(46) +#define ANSI_BG_WHITE CSI_SGR(47) +#define ANSI_BG_DEFAULT CSI_SGR(49) /** @} */ #ifdef __cplusplus - } +} #endif #endif /* _TUSB_ANSI_ESC_CODE_H_ */ diff --git a/Libraries/tinyusb/hw/bsp/board.c b/Libraries/tinyusb/hw/bsp/board.c index bb339f61363..f11efa19218 100644 --- a/Libraries/tinyusb/hw/bsp/board.c +++ b/Libraries/tinyusb/hw/bsp/board.c @@ -29,14 +29,14 @@ // newlib read()/write() retarget //--------------------------------------------------------------------+ #ifdef __ICCARM__ - #define sys_write __write - #define sys_read __read +#define sys_write __write +#define sys_read __read #elif defined(__MSP430__) || defined(__RX__) - #define sys_write write - #define sys_read read +#define sys_write write +#define sys_read read #else - #define sys_write _write - #define sys_read _read +#define sys_write _write +#define sys_read _read #endif #if defined(LOGGER_RTT) @@ -46,16 +46,18 @@ #if !(defined __SES_ARM) && !(defined __SES_RISCV) && !(defined __CROSSWORKS_ARM) #include "SEGGER_RTT.h" -TU_ATTR_USED int sys_write(int fhdl, const char *buf, size_t count) { - (void) fhdl; - SEGGER_RTT_Write(0, (const char *) buf, (int) count); - return (int) count; +TU_ATTR_USED int sys_write(int fhdl, const char *buf, size_t count) +{ + (void)fhdl; + SEGGER_RTT_Write(0, (const char *)buf, (int)count); + return (int)count; } -TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) { - (void) fhdl; - int rd = (int) SEGGER_RTT_Read(0, buf, count); - return (rd > 0) ? rd : -1; +TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) +{ + (void)fhdl; + int rd = (int)SEGGER_RTT_Read(0, buf, count); + return (rd > 0) ? rd : -1; } #endif @@ -64,36 +66,40 @@ TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) { // Logging with SWO for ARM Cortex #include "board_mcu.h" -TU_ATTR_USED int sys_write (int fhdl, const char *buf, size_t count) { - (void) fhdl; - uint8_t const* buf8 = (uint8_t const*) buf; +TU_ATTR_USED int sys_write(int fhdl, const char *buf, size_t count) +{ + (void)fhdl; + uint8_t const *buf8 = (uint8_t const *)buf; - for(size_t i=0; i 0) ? rd : -1; +TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) +{ + (void)fhdl; + int rd = board_uart_read((uint8_t *)buf, (int)count); + return (rd > 0) ? rd : -1; } #endif @@ -110,15 +116,17 @@ TU_ATTR_USED int sys_read (int fhdl, char *buf, size_t count) { // Clang use picolibc #if defined(__clang__) -static int cl_putc(char c, FILE *f) { - (void) f; - return sys_write(0, &c, 1); +static int cl_putc(char c, FILE *f) +{ + (void)f; + return sys_write(0, &c, 1); } -static int cl_getc(FILE* f) { - (void) f; - char c; - return sys_read(0, &c, 1) > 0 ? c : -1; +static int cl_getc(FILE *f) +{ + (void)f; + char c; + return sys_read(0, &c, 1) > 0 ? c : -1; } static FILE __stdio = FDEV_SETUP_STREAM(cl_putc, cl_getc, NULL, _FDEV_SETUP_RW); @@ -130,7 +138,8 @@ __strong_reference(stdin, stderr); //--------------------------------------------------------------------+ // Board API //--------------------------------------------------------------------+ -int board_getchar(void) { - char c; - return (sys_read(0, &c, 1) > 0) ? (int) c : (-1); +int board_getchar(void) +{ + char c; + return (sys_read(0, &c, 1) > 0) ? (int)c : (-1); } diff --git a/Libraries/tinyusb/hw/bsp/board_api.h b/Libraries/tinyusb/hw/bsp/board_api.h index a458a3fdcc4..fc4963bb25f 100644 --- a/Libraries/tinyusb/hw/bsp/board_api.h +++ b/Libraries/tinyusb/hw/bsp/board_api.h @@ -40,25 +40,25 @@ extern "C" { #if CFG_TUSB_OS == OPT_OS_FREERTOS #if TUP_MCU_ESPRESSIF - // ESP-IDF need "freertos/" prefix in include path. - // CFG_TUSB_OS_INC_PATH should be defined accordingly. - #include "freertos/FreeRTOS.h" - #include "freertos/semphr.h" - #include "freertos/queue.h" - #include "freertos/task.h" - #include "freertos/timers.h" +// ESP-IDF need "freertos/" prefix in include path. +// CFG_TUSB_OS_INC_PATH should be defined accordingly. +#include "freertos/FreeRTOS.h" +#include "freertos/semphr.h" +#include "freertos/queue.h" +#include "freertos/task.h" +#include "freertos/timers.h" #else - #include "FreeRTOS.h" - #include "semphr.h" - #include "queue.h" - #include "task.h" - #include "timers.h" +#include "FreeRTOS.h" +#include "semphr.h" +#include "queue.h" +#include "task.h" +#include "timers.h" #endif #endif // Define the default baudrate #ifndef CFG_BOARD_UART_BAUDRATE -#define CFG_BOARD_UART_BAUDRATE 115200 ///< Default baud rate +#define CFG_BOARD_UART_BAUDRATE 115200 ///< Default baud rate #endif //--------------------------------------------------------------------+ @@ -100,24 +100,28 @@ int board_uart_write(void const *buf, int len); uint32_t board_millis(void); #elif CFG_TUSB_OS == OPT_OS_FREERTOS -static inline uint32_t board_millis(void) { - return ( ( ((uint64_t) xTaskGetTickCount()) * 1000) / configTICK_RATE_HZ ); +static inline uint32_t board_millis(void) +{ + return ((((uint64_t)xTaskGetTickCount()) * 1000) / configTICK_RATE_HZ); } #elif CFG_TUSB_OS == OPT_OS_MYNEWT -static inline uint32_t board_millis(void) { - return os_time_ticks_to_ms32( os_time_get() ); +static inline uint32_t board_millis(void) +{ + return os_time_ticks_to_ms32(os_time_get()); } #elif CFG_TUSB_OS == OPT_OS_PICO #include "pico/time.h" -static inline uint32_t board_millis(void) { - return to_ms_since_boot(get_absolute_time()); +static inline uint32_t board_millis(void) +{ + return to_ms_since_boot(get_absolute_time()); } #elif CFG_TUSB_OS == OPT_OS_RTTHREAD -static inline uint32_t board_millis(void) { - return (((uint64_t)rt_tick_get()) * 1000 / RT_TICK_PER_SECOND); +static inline uint32_t board_millis(void) +{ + return (((uint64_t)rt_tick_get()) * 1000 / RT_TICK_PER_SECOND); } #elif CFG_TUSB_OS == OPT_OS_CUSTOM @@ -125,66 +129,69 @@ static inline uint32_t board_millis(void) { uint32_t board_millis(void); #else - #error "board_millis() is not implemented for this OS" +#error "board_millis() is not implemented for this OS" #endif //--------------------------------------------------------------------+ // Helper functions //--------------------------------------------------------------------+ -static inline void board_led_on(void) { - board_led_write(true); +static inline void board_led_on(void) +{ + board_led_write(true); } -static inline void board_led_off(void) { - board_led_write(false); +static inline void board_led_off(void) +{ + board_led_write(false); } // Get USB Serial number string from unique ID if available. Return number of character. // Input is string descriptor from index 1 (index 0 is type + len) -static inline size_t board_usb_get_serial(uint16_t desc_str1[], size_t max_chars) { - uint8_t uid[16] TU_ATTR_ALIGNED(4); - size_t uid_len; - - // TODO work with make, but not working with esp32s3 cmake - if ( board_get_unique_id ) { - uid_len = board_get_unique_id(uid, sizeof(uid)); - }else { - // fixed serial string is 01234567889ABCDEF - uint32_t* uid32 = (uint32_t*) (uintptr_t) uid; - uid32[0] = 0x67452301; - uid32[1] = 0xEFCDAB89; - uid_len = 8; - } - - if ( uid_len > max_chars / 2 ) uid_len = max_chars / 2; - - for ( size_t i = 0; i < uid_len; i++ ) { - for ( size_t j = 0; j < 2; j++ ) { - const char nibble_to_hex[16] = { - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' - }; - uint8_t const nibble = (uid[i] >> (j * 4)) & 0xf; - desc_str1[i * 2 + (1 - j)] = nibble_to_hex[nibble]; // UTF-16-LE +static inline size_t board_usb_get_serial(uint16_t desc_str1[], size_t max_chars) +{ + uint8_t uid[16] TU_ATTR_ALIGNED(4); + size_t uid_len; + + // TODO work with make, but not working with esp32s3 cmake + if (board_get_unique_id) { + uid_len = board_get_unique_id(uid, sizeof(uid)); + } else { + // fixed serial string is 01234567889ABCDEF + uint32_t *uid32 = (uint32_t *)(uintptr_t)uid; + uid32[0] = 0x67452301; + uid32[1] = 0xEFCDAB89; + uid_len = 8; } - } - return 2 * uid_len; + if (uid_len > max_chars / 2) + uid_len = max_chars / 2; + + for (size_t i = 0; i < uid_len; i++) { + for (size_t j = 0; j < 2; j++) { + const char nibble_to_hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + uint8_t const nibble = (uid[i] >> (j * 4)) & 0xf; + desc_str1[i * 2 + (1 - j)] = nibble_to_hex[nibble]; // UTF-16-LE + } + } + + return 2 * uid_len; } // TODO remove -static inline void board_delay(uint32_t ms) { - uint32_t start_ms = board_millis(); - while ( board_millis() - start_ms < ms ) { - // take chance to run usb background - #if CFG_TUD_ENABLED - tud_task(); - #endif - - #if CFG_TUH_ENABLED - tuh_task(); - #endif - } +static inline void board_delay(uint32_t ms) +{ + uint32_t start_ms = board_millis(); + while (board_millis() - start_ms < ms) { +// take chance to run usb background +#if CFG_TUD_ENABLED + tud_task(); +#endif + +#if CFG_TUH_ENABLED + tuh_task(); +#endif + } } // stdio getchar() is blocking, this is non-blocking version diff --git a/Libraries/tinyusb/hw/bsp/board_mcu.h b/Libraries/tinyusb/hw/bsp/board_mcu.h index d3a33cf36df..d86f5dd930d 100644 --- a/Libraries/tinyusb/hw/bsp/board_mcu.h +++ b/Libraries/tinyusb/hw/bsp/board_mcu.h @@ -24,7 +24,6 @@ * This file is part of the TinyUSB stack. */ - #ifndef BOARD_MCU_H_ #define BOARD_MCU_H_ @@ -39,152 +38,151 @@ //--------------------------------------------------------------------+ // Include order follows OPT_MCU_ number -#if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) || \ - TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC18XX) || \ - TU_CHECK_MCU(OPT_MCU_LPC40XX, OPT_MCU_LPC43XX) - #include "chip.h" +#if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) || \ + TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC18XX) || \ + TU_CHECK_MCU(OPT_MCU_LPC40XX, OPT_MCU_LPC43XX) +#include "chip.h" #elif TU_CHECK_MCU(OPT_MCU_LPC51UXX, OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX, OPT_MCU_MCXN9) - #include "fsl_device_registers.h" +#include "fsl_device_registers.h" #elif TU_CHECK_MCU(OPT_MCU_KINETIS_KL, OPT_MCU_KINETIS_K32L, OPT_MCU_KINETIS_K) - #include "fsl_device_registers.h" +#include "fsl_device_registers.h" #elif CFG_TUSB_MCU == OPT_MCU_NRF5X - #include "nrf.h" +#include "nrf.h" #elif CFG_TUSB_MCU == OPT_MCU_SAMD11 || CFG_TUSB_MCU == OPT_MCU_SAMD21 || \ - CFG_TUSB_MCU == OPT_MCU_SAMD51 || CFG_TUSB_MCU == OPT_MCU_SAME5X || \ - CFG_TUSB_MCU == OPT_MCU_SAML22 || CFG_TUSB_MCU == OPT_MCU_SAML21 - #include "sam.h" + CFG_TUSB_MCU == OPT_MCU_SAMD51 || CFG_TUSB_MCU == OPT_MCU_SAME5X || \ + CFG_TUSB_MCU == OPT_MCU_SAML22 || CFG_TUSB_MCU == OPT_MCU_SAML21 +#include "sam.h" #elif CFG_TUSB_MCU == OPT_MCU_SAMG - #undef LITTLE_ENDIAN // hack to suppress "LITTLE_ENDIAN" redefined - #include "sam.h" +#undef LITTLE_ENDIAN // hack to suppress "LITTLE_ENDIAN" redefined +#include "sam.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F0 - #include "stm32f0xx.h" +#include "stm32f0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F1 - #include "stm32f1xx.h" +#include "stm32f1xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F2 - #include "stm32f2xx.h" +#include "stm32f2xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F3 - #include "stm32f3xx.h" +#include "stm32f3xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F4 - #include "stm32f4xx.h" +#include "stm32f4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F7 - #include "stm32f7xx.h" +#include "stm32f7xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32G4 - #include "stm32g4xx.h" +#include "stm32g4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32H5 - #include "stm32h5xx.h" +#include "stm32h5xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32H7 - #include "stm32h7xx.h" +#include "stm32h7xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L0 - #include "stm32l0xx.h" +#include "stm32l0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L1 - #include "stm32l1xx.h" +#include "stm32l1xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L4 - #include "stm32l4xx.h" +#include "stm32l4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32WB - #include "stm32wbxx.h" +#include "stm32wbxx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32U5 - #include "stm32u5xx.h" +#include "stm32u5xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32G0 - #include "stm32g0xx.h" +#include "stm32g0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_CXD56 - // no header needed +// no header needed #elif CFG_TUSB_MCU == OPT_MCU_MSP430x5xx - #include "msp430.h" +#include "msp430.h" #elif CFG_TUSB_MCU == OPT_MCU_MSP432E4 - #include "msp.h" +#include "msp.h" #elif CFG_TUSB_MCU == OPT_MCU_VALENTYUSB_EPTRI - // no header needed +// no header needed #elif CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX - #include "fsl_device_registers.h" +#include "fsl_device_registers.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC120 - #include "NUC100Series.h" +#include "NUC100Series.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC121 || CFG_TUSB_MCU == OPT_MCU_NUC126 - #include "NuMicro.h" +#include "NuMicro.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC505 - #include "NUC505Series.h" +#include "NUC505Series.h" #elif CFG_TUSB_MCU == OPT_MCU_ESP32S2 - // no header needed +// no header needed #elif CFG_TUSB_MCU == OPT_MCU_ESP32S3 - // no header needed +// no header needed #elif CFG_TUSB_MCU == OPT_MCU_DA1469X - #include "DA1469xAB.h" +#include "DA1469xAB.h" #elif CFG_TUSB_MCU == OPT_MCU_RP2040 - #include "pico.h" +#include "pico.h" #elif CFG_TUSB_MCU == OPT_MCU_EFM32GG - #include "em_device.h" +#include "em_device.h" #elif CFG_TUSB_MCU == OPT_MCU_RX63X || CFG_TUSB_MCU == OPT_MCU_RX65X - // no header needed +// no header needed #elif CFG_TUSB_MCU == OPT_MCU_RAXXX - #include "bsp_api.h" +#include "bsp_api.h" #elif CFG_TUSB_MCU == OPT_MCU_GD32VF103 - #include "gd32vf103.h" +#include "gd32vf103.h" #elif CFG_TUSB_MCU == OPT_MCU_MM32F327X - #include "mm32_device.h" +#include "mm32_device.h" #elif CFG_TUSB_MCU == OPT_MCU_XMC4000 - #include "xmc_device.h" +#include "xmc_device.h" #elif CFG_TUSB_MCU == OPT_MCU_TM4C123 - #include "TM4C123.h" +#include "TM4C123.h" #elif CFG_TUSB_MCU == OPT_MCU_CH32F20X - #include "ch32f20x.h" +#include "ch32f20x.h" #elif TU_CHECK_MCU(OPT_MCU_BCM2711, OPT_MCU_BCM2835, OPT_MCU_BCM2837) - // no header needed +// no header needed #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 - #include "max32690.h" +#include "max32690.h" #elif CFG_TUSB_MCU == OPT_MCU_MAX32650 - #include "max32650.h" +#include "max32650.h" #elif CFG_TUSB_MCU == OPT_MCU_MAX32666 - #include "max32665.h" +#include "max32665.h" #elif CFG_TUSB_MCU == OPT_MCU_MAX78002 - #include "max78002.h" +#include "max78002.h" #else - #error "Missing MCU header" +#error "Missing MCU header" #endif - #endif /* BOARD_MCU_H_ */ diff --git a/Libraries/tinyusb/src/class/audio/audio.h b/Libraries/tinyusb/src/class/audio/audio.h index 2f97c0f23d7..dbab66a6135 100644 --- a/Libraries/tinyusb/src/class/audio/audio.h +++ b/Libraries/tinyusb/src/class/audio/audio.h @@ -42,426 +42,390 @@ extern "C" { /// Audio Device Class Codes /// A.2 - Audio Function Subclass Codes -typedef enum -{ - AUDIO_FUNCTION_SUBCLASS_UNDEFINED = 0x00, +typedef enum { + AUDIO_FUNCTION_SUBCLASS_UNDEFINED = 0x00, } audio_function_subclass_type_t; /// A.3 - Audio Function Protocol Codes -typedef enum -{ - AUDIO_FUNC_PROTOCOL_CODE_UNDEF = 0x00, - AUDIO_FUNC_PROTOCOL_CODE_V2 = 0x20, ///< Version 2.0 +typedef enum { + AUDIO_FUNC_PROTOCOL_CODE_UNDEF = 0x00, + AUDIO_FUNC_PROTOCOL_CODE_V2 = 0x20, ///< Version 2.0 } audio_function_protocol_code_t; /// A.5 - Audio Interface Subclass Codes -typedef enum -{ - AUDIO_SUBCLASS_UNDEFINED = 0x00, - AUDIO_SUBCLASS_CONTROL , ///< Audio Control - AUDIO_SUBCLASS_STREAMING , ///< Audio Streaming - AUDIO_SUBCLASS_MIDI_STREAMING , ///< MIDI Streaming +typedef enum { + AUDIO_SUBCLASS_UNDEFINED = 0x00, + AUDIO_SUBCLASS_CONTROL, ///< Audio Control + AUDIO_SUBCLASS_STREAMING, ///< Audio Streaming + AUDIO_SUBCLASS_MIDI_STREAMING, ///< MIDI Streaming } audio_subclass_type_t; /// A.6 - Audio Interface Protocol Codes -typedef enum -{ - AUDIO_INT_PROTOCOL_CODE_UNDEF = 0x00, - AUDIO_INT_PROTOCOL_CODE_V2 = 0x20, ///< Version 2.0 +typedef enum { + AUDIO_INT_PROTOCOL_CODE_UNDEF = 0x00, + AUDIO_INT_PROTOCOL_CODE_V2 = 0x20, ///< Version 2.0 } audio_interface_protocol_code_t; /// A.7 - Audio Function Category Codes -typedef enum -{ - AUDIO_FUNC_UNDEF = 0x00, - AUDIO_FUNC_DESKTOP_SPEAKER = 0x01, - AUDIO_FUNC_HOME_THEATER = 0x02, - AUDIO_FUNC_MICROPHONE = 0x03, - AUDIO_FUNC_HEADSET = 0x04, - AUDIO_FUNC_TELEPHONE = 0x05, - AUDIO_FUNC_CONVERTER = 0x06, - AUDIO_FUNC_SOUND_RECODER = 0x07, - AUDIO_FUNC_IO_BOX = 0x08, - AUDIO_FUNC_MUSICAL_INSTRUMENT = 0x09, - AUDIO_FUNC_PRO_AUDIO = 0x0A, - AUDIO_FUNC_AUDIO_VIDEO = 0x0B, - AUDIO_FUNC_CONTROL_PANEL = 0x0C, - AUDIO_FUNC_OTHER = 0xFF, +typedef enum { + AUDIO_FUNC_UNDEF = 0x00, + AUDIO_FUNC_DESKTOP_SPEAKER = 0x01, + AUDIO_FUNC_HOME_THEATER = 0x02, + AUDIO_FUNC_MICROPHONE = 0x03, + AUDIO_FUNC_HEADSET = 0x04, + AUDIO_FUNC_TELEPHONE = 0x05, + AUDIO_FUNC_CONVERTER = 0x06, + AUDIO_FUNC_SOUND_RECODER = 0x07, + AUDIO_FUNC_IO_BOX = 0x08, + AUDIO_FUNC_MUSICAL_INSTRUMENT = 0x09, + AUDIO_FUNC_PRO_AUDIO = 0x0A, + AUDIO_FUNC_AUDIO_VIDEO = 0x0B, + AUDIO_FUNC_CONTROL_PANEL = 0x0C, + AUDIO_FUNC_OTHER = 0xFF, } audio_function_code_t; /// A.9 - Audio Class-Specific AC Interface Descriptor Subtypes UAC2 -typedef enum -{ - AUDIO_CS_AC_INTERFACE_AC_DESCRIPTOR_UNDEF = 0x00, - AUDIO_CS_AC_INTERFACE_HEADER = 0x01, - AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL = 0x02, - AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL = 0x03, - AUDIO_CS_AC_INTERFACE_MIXER_UNIT = 0x04, - AUDIO_CS_AC_INTERFACE_SELECTOR_UNIT = 0x05, - AUDIO_CS_AC_INTERFACE_FEATURE_UNIT = 0x06, - AUDIO_CS_AC_INTERFACE_EFFECT_UNIT = 0x07, - AUDIO_CS_AC_INTERFACE_PROCESSING_UNIT = 0x08, - AUDIO_CS_AC_INTERFACE_EXTENSION_UNIT = 0x09, - AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE = 0x0A, - AUDIO_CS_AC_INTERFACE_CLOCK_SELECTOR = 0x0B, - AUDIO_CS_AC_INTERFACE_CLOCK_MULTIPLIER = 0x0C, - AUDIO_CS_AC_INTERFACE_SAMPLE_RATE_CONVERTER = 0x0D, +typedef enum { + AUDIO_CS_AC_INTERFACE_AC_DESCRIPTOR_UNDEF = 0x00, + AUDIO_CS_AC_INTERFACE_HEADER = 0x01, + AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL = 0x02, + AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL = 0x03, + AUDIO_CS_AC_INTERFACE_MIXER_UNIT = 0x04, + AUDIO_CS_AC_INTERFACE_SELECTOR_UNIT = 0x05, + AUDIO_CS_AC_INTERFACE_FEATURE_UNIT = 0x06, + AUDIO_CS_AC_INTERFACE_EFFECT_UNIT = 0x07, + AUDIO_CS_AC_INTERFACE_PROCESSING_UNIT = 0x08, + AUDIO_CS_AC_INTERFACE_EXTENSION_UNIT = 0x09, + AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE = 0x0A, + AUDIO_CS_AC_INTERFACE_CLOCK_SELECTOR = 0x0B, + AUDIO_CS_AC_INTERFACE_CLOCK_MULTIPLIER = 0x0C, + AUDIO_CS_AC_INTERFACE_SAMPLE_RATE_CONVERTER = 0x0D, } audio_cs_ac_interface_subtype_t; /// A.10 - Audio Class-Specific AS Interface Descriptor Subtypes UAC2 -typedef enum -{ - AUDIO_CS_AS_INTERFACE_AS_DESCRIPTOR_UNDEF = 0x00, - AUDIO_CS_AS_INTERFACE_AS_GENERAL = 0x01, - AUDIO_CS_AS_INTERFACE_FORMAT_TYPE = 0x02, - AUDIO_CS_AS_INTERFACE_ENCODER = 0x03, - AUDIO_CS_AS_INTERFACE_DECODER = 0x04, +typedef enum { + AUDIO_CS_AS_INTERFACE_AS_DESCRIPTOR_UNDEF = 0x00, + AUDIO_CS_AS_INTERFACE_AS_GENERAL = 0x01, + AUDIO_CS_AS_INTERFACE_FORMAT_TYPE = 0x02, + AUDIO_CS_AS_INTERFACE_ENCODER = 0x03, + AUDIO_CS_AS_INTERFACE_DECODER = 0x04, } audio_cs_as_interface_subtype_t; /// A.11 - Effect Unit Effect Types -typedef enum -{ - AUDIO_EFFECT_TYPE_UNDEF = 0x00, - AUDIO_EFFECT_TYPE_PARAM_EQ_SECTION = 0x01, - AUDIO_EFFECT_TYPE_REVERBERATION = 0x02, - AUDIO_EFFECT_TYPE_MOD_DELAY = 0x03, - AUDIO_EFFECT_TYPE_DYN_RANGE_COMP = 0x04, +typedef enum { + AUDIO_EFFECT_TYPE_UNDEF = 0x00, + AUDIO_EFFECT_TYPE_PARAM_EQ_SECTION = 0x01, + AUDIO_EFFECT_TYPE_REVERBERATION = 0x02, + AUDIO_EFFECT_TYPE_MOD_DELAY = 0x03, + AUDIO_EFFECT_TYPE_DYN_RANGE_COMP = 0x04, } audio_effect_unit_effect_type_t; /// A.12 - Processing Unit Process Types -typedef enum -{ - AUDIO_PROCESS_TYPE_UNDEF = 0x00, - AUDIO_PROCESS_TYPE_UP_DOWN_MIX = 0x01, - AUDIO_PROCESS_TYPE_DOLBY_PROLOGIC = 0x02, - AUDIO_PROCESS_TYPE_STEREO_EXTENDER = 0x03, +typedef enum { + AUDIO_PROCESS_TYPE_UNDEF = 0x00, + AUDIO_PROCESS_TYPE_UP_DOWN_MIX = 0x01, + AUDIO_PROCESS_TYPE_DOLBY_PROLOGIC = 0x02, + AUDIO_PROCESS_TYPE_STEREO_EXTENDER = 0x03, } audio_processing_unit_process_type_t; /// A.13 - Audio Class-Specific EP Descriptor Subtypes UAC2 -typedef enum -{ - AUDIO_CS_EP_SUBTYPE_UNDEF = 0x00, - AUDIO_CS_EP_SUBTYPE_GENERAL = 0x01, +typedef enum { + AUDIO_CS_EP_SUBTYPE_UNDEF = 0x00, + AUDIO_CS_EP_SUBTYPE_GENERAL = 0x01, } audio_cs_ep_subtype_t; /// A.14 - Audio Class-Specific Request Codes -typedef enum -{ - AUDIO_CS_REQ_UNDEF = 0x00, - AUDIO_CS_REQ_CUR = 0x01, - AUDIO_CS_REQ_RANGE = 0x02, - AUDIO_CS_REQ_MEM = 0x03, +typedef enum { + AUDIO_CS_REQ_UNDEF = 0x00, + AUDIO_CS_REQ_CUR = 0x01, + AUDIO_CS_REQ_RANGE = 0x02, + AUDIO_CS_REQ_MEM = 0x03, } audio_cs_req_t; /// A.17 - Control Selector Codes /// A.17.1 - Clock Source Control Selectors -typedef enum -{ - AUDIO_CS_CTRL_UNDEF = 0x00, - AUDIO_CS_CTRL_SAM_FREQ = 0x01, - AUDIO_CS_CTRL_CLK_VALID = 0x02, +typedef enum { + AUDIO_CS_CTRL_UNDEF = 0x00, + AUDIO_CS_CTRL_SAM_FREQ = 0x01, + AUDIO_CS_CTRL_CLK_VALID = 0x02, } audio_clock_src_control_selector_t; /// A.17.2 - Clock Selector Control Selectors -typedef enum -{ - AUDIO_CX_CTRL_UNDEF = 0x00, - AUDIO_CX_CTRL_CONTROL = 0x01, +typedef enum { + AUDIO_CX_CTRL_UNDEF = 0x00, + AUDIO_CX_CTRL_CONTROL = 0x01, } audio_clock_sel_control_selector_t; /// A.17.3 - Clock Multiplier Control Selectors -typedef enum -{ - AUDIO_CM_CTRL_UNDEF = 0x00, - AUDIO_CM_CTRL_NUMERATOR_CONTROL = 0x01, - AUDIO_CM_CTRL_DENOMINATOR_CONTROL = 0x02, +typedef enum { + AUDIO_CM_CTRL_UNDEF = 0x00, + AUDIO_CM_CTRL_NUMERATOR_CONTROL = 0x01, + AUDIO_CM_CTRL_DENOMINATOR_CONTROL = 0x02, } audio_clock_mul_control_selector_t; /// A.17.4 - Terminal Control Selectors -typedef enum -{ - AUDIO_TE_CTRL_UNDEF = 0x00, - AUDIO_TE_CTRL_COPY_PROTECT = 0x01, - AUDIO_TE_CTRL_CONNECTOR = 0x02, - AUDIO_TE_CTRL_OVERLOAD = 0x03, - AUDIO_TE_CTRL_CLUSTER = 0x04, - AUDIO_TE_CTRL_UNDERFLOW = 0x05, - AUDIO_TE_CTRL_OVERFLOW = 0x06, - AUDIO_TE_CTRL_LATENCY = 0x07, +typedef enum { + AUDIO_TE_CTRL_UNDEF = 0x00, + AUDIO_TE_CTRL_COPY_PROTECT = 0x01, + AUDIO_TE_CTRL_CONNECTOR = 0x02, + AUDIO_TE_CTRL_OVERLOAD = 0x03, + AUDIO_TE_CTRL_CLUSTER = 0x04, + AUDIO_TE_CTRL_UNDERFLOW = 0x05, + AUDIO_TE_CTRL_OVERFLOW = 0x06, + AUDIO_TE_CTRL_LATENCY = 0x07, } audio_terminal_control_selector_t; /// A.17.5 - Mixer Control Selectors -typedef enum -{ - AUDIO_MU_CTRL_UNDEF = 0x00, - AUDIO_MU_CTRL_MIXER = 0x01, - AUDIO_MU_CTRL_CLUSTER = 0x02, - AUDIO_MU_CTRL_UNDERFLOW = 0x03, - AUDIO_MU_CTRL_OVERFLOW = 0x04, - AUDIO_MU_CTRL_LATENCY = 0x05, +typedef enum { + AUDIO_MU_CTRL_UNDEF = 0x00, + AUDIO_MU_CTRL_MIXER = 0x01, + AUDIO_MU_CTRL_CLUSTER = 0x02, + AUDIO_MU_CTRL_UNDERFLOW = 0x03, + AUDIO_MU_CTRL_OVERFLOW = 0x04, + AUDIO_MU_CTRL_LATENCY = 0x05, } audio_mixer_control_selector_t; /// A.17.6 - Selector Control Selectors -typedef enum -{ - AUDIO_SU_CTRL_UNDEF = 0x00, - AUDIO_SU_CTRL_SELECTOR = 0x01, - AUDIO_SU_CTRL_LATENCY = 0x02, +typedef enum { + AUDIO_SU_CTRL_UNDEF = 0x00, + AUDIO_SU_CTRL_SELECTOR = 0x01, + AUDIO_SU_CTRL_LATENCY = 0x02, } audio_sel_control_selector_t; /// A.17.7 - Feature Unit Control Selectors -typedef enum -{ - AUDIO_FU_CTRL_UNDEF = 0x00, - AUDIO_FU_CTRL_MUTE = 0x01, - AUDIO_FU_CTRL_VOLUME = 0x02, - AUDIO_FU_CTRL_BASS = 0x03, - AUDIO_FU_CTRL_MID = 0x04, - AUDIO_FU_CTRL_TREBLE = 0x05, - AUDIO_FU_CTRL_GRAPHIC_EQUALIZER = 0x06, - AUDIO_FU_CTRL_AGC = 0x07, - AUDIO_FU_CTRL_DELAY = 0x08, - AUDIO_FU_CTRL_BASS_BOOST = 0x09, - AUDIO_FU_CTRL_LOUDNESS = 0x0A, - AUDIO_FU_CTRL_INPUT_GAIN = 0x0B, - AUDIO_FU_CTRL_GAIN_PAD = 0x0C, - AUDIO_FU_CTRL_INVERTER = 0x0D, - AUDIO_FU_CTRL_UNDERFLOW = 0x0E, - AUDIO_FU_CTRL_OVERVLOW = 0x0F, - AUDIO_FU_CTRL_LATENCY = 0x10, +typedef enum { + AUDIO_FU_CTRL_UNDEF = 0x00, + AUDIO_FU_CTRL_MUTE = 0x01, + AUDIO_FU_CTRL_VOLUME = 0x02, + AUDIO_FU_CTRL_BASS = 0x03, + AUDIO_FU_CTRL_MID = 0x04, + AUDIO_FU_CTRL_TREBLE = 0x05, + AUDIO_FU_CTRL_GRAPHIC_EQUALIZER = 0x06, + AUDIO_FU_CTRL_AGC = 0x07, + AUDIO_FU_CTRL_DELAY = 0x08, + AUDIO_FU_CTRL_BASS_BOOST = 0x09, + AUDIO_FU_CTRL_LOUDNESS = 0x0A, + AUDIO_FU_CTRL_INPUT_GAIN = 0x0B, + AUDIO_FU_CTRL_GAIN_PAD = 0x0C, + AUDIO_FU_CTRL_INVERTER = 0x0D, + AUDIO_FU_CTRL_UNDERFLOW = 0x0E, + AUDIO_FU_CTRL_OVERVLOW = 0x0F, + AUDIO_FU_CTRL_LATENCY = 0x10, } audio_feature_unit_control_selector_t; /// A.17.8 Effect Unit Control Selectors /// A.17.8.1 Parametric Equalizer Section Effect Unit Control Selectors -typedef enum -{ - AUDIO_PE_CTRL_UNDEF = 0x00, - AUDIO_PE_CTRL_ENABLE = 0x01, - AUDIO_PE_CTRL_CENTERFREQ = 0x02, - AUDIO_PE_CTRL_QFACTOR = 0x03, - AUDIO_PE_CTRL_GAIN = 0x04, - AUDIO_PE_CTRL_UNDERFLOW = 0x05, - AUDIO_PE_CTRL_OVERFLOW = 0x06, - AUDIO_PE_CTRL_LATENCY = 0x07, +typedef enum { + AUDIO_PE_CTRL_UNDEF = 0x00, + AUDIO_PE_CTRL_ENABLE = 0x01, + AUDIO_PE_CTRL_CENTERFREQ = 0x02, + AUDIO_PE_CTRL_QFACTOR = 0x03, + AUDIO_PE_CTRL_GAIN = 0x04, + AUDIO_PE_CTRL_UNDERFLOW = 0x05, + AUDIO_PE_CTRL_OVERFLOW = 0x06, + AUDIO_PE_CTRL_LATENCY = 0x07, } audio_parametric_equalizer_control_selector_t; /// A.17.8.2 Reverberation Effect Unit Control Selectors -typedef enum -{ - AUDIO_RV_CTRL_UNDEF = 0x00, - AUDIO_RV_CTRL_ENABLE = 0x01, - AUDIO_RV_CTRL_TYPE = 0x02, - AUDIO_RV_CTRL_LEVEL = 0x03, - AUDIO_RV_CTRL_TIME = 0x04, - AUDIO_RV_CTRL_FEEDBACK = 0x05, - AUDIO_RV_CTRL_PREDELAY = 0x06, - AUDIO_RV_CTRL_DENSITY = 0x07, - AUDIO_RV_CTRL_HIFREQ_ROLLOFF = 0x08, - AUDIO_RV_CTRL_UNDERFLOW = 0x09, - AUDIO_RV_CTRL_OVERFLOW = 0x0A, - AUDIO_RV_CTRL_LATENCY = 0x0B, +typedef enum { + AUDIO_RV_CTRL_UNDEF = 0x00, + AUDIO_RV_CTRL_ENABLE = 0x01, + AUDIO_RV_CTRL_TYPE = 0x02, + AUDIO_RV_CTRL_LEVEL = 0x03, + AUDIO_RV_CTRL_TIME = 0x04, + AUDIO_RV_CTRL_FEEDBACK = 0x05, + AUDIO_RV_CTRL_PREDELAY = 0x06, + AUDIO_RV_CTRL_DENSITY = 0x07, + AUDIO_RV_CTRL_HIFREQ_ROLLOFF = 0x08, + AUDIO_RV_CTRL_UNDERFLOW = 0x09, + AUDIO_RV_CTRL_OVERFLOW = 0x0A, + AUDIO_RV_CTRL_LATENCY = 0x0B, } audio_reverberation_effect_control_selector_t; /// A.17.8.3 Modulation Delay Effect Unit Control Selectors -typedef enum -{ - AUDIO_MD_CTRL_UNDEF = 0x00, - AUDIO_MD_CTRL_ENABLE = 0x01, - AUDIO_MD_CTRL_BALANCE = 0x02, - AUDIO_MD_CTRL_RATE = 0x03, - AUDIO_MD_CTRL_DEPTH = 0x04, - AUDIO_MD_CTRL_TIME = 0x05, - AUDIO_MD_CTRL_FEEDBACK = 0x06, - AUDIO_MD_CTRL_UNDERFLOW = 0x07, - AUDIO_MD_CTRL_OVERFLOW = 0x08, - AUDIO_MD_CTRL_LATENCY = 0x09, +typedef enum { + AUDIO_MD_CTRL_UNDEF = 0x00, + AUDIO_MD_CTRL_ENABLE = 0x01, + AUDIO_MD_CTRL_BALANCE = 0x02, + AUDIO_MD_CTRL_RATE = 0x03, + AUDIO_MD_CTRL_DEPTH = 0x04, + AUDIO_MD_CTRL_TIME = 0x05, + AUDIO_MD_CTRL_FEEDBACK = 0x06, + AUDIO_MD_CTRL_UNDERFLOW = 0x07, + AUDIO_MD_CTRL_OVERFLOW = 0x08, + AUDIO_MD_CTRL_LATENCY = 0x09, } audio_modulation_delay_control_selector_t; /// A.17.8.4 Dynamic Range Compressor Effect Unit Control Selectors -typedef enum -{ - AUDIO_DR_CTRL_UNDEF = 0x00, - AUDIO_DR_CTRL_ENABLE = 0x01, - AUDIO_DR_CTRL_COMPRESSION_RATE = 0x02, - AUDIO_DR_CTRL_MAXAMPL = 0x03, - AUDIO_DR_CTRL_THRESHOLD = 0x04, - AUDIO_DR_CTRL_ATTACK_TIME = 0x05, - AUDIO_DR_CTRL_RELEASE_TIME = 0x06, - AUDIO_DR_CTRL_UNDERFLOW = 0x07, - AUDIO_DR_CTRL_OVERFLOW = 0x08, - AUDIO_DR_CTRL_LATENCY = 0x09, +typedef enum { + AUDIO_DR_CTRL_UNDEF = 0x00, + AUDIO_DR_CTRL_ENABLE = 0x01, + AUDIO_DR_CTRL_COMPRESSION_RATE = 0x02, + AUDIO_DR_CTRL_MAXAMPL = 0x03, + AUDIO_DR_CTRL_THRESHOLD = 0x04, + AUDIO_DR_CTRL_ATTACK_TIME = 0x05, + AUDIO_DR_CTRL_RELEASE_TIME = 0x06, + AUDIO_DR_CTRL_UNDERFLOW = 0x07, + AUDIO_DR_CTRL_OVERFLOW = 0x08, + AUDIO_DR_CTRL_LATENCY = 0x09, } audio_dynamic_range_compression_control_selector_t; /// A.17.9 Processing Unit Control Selectors /// A.17.9.1 Up/Down-mix Processing Unit Control Selectors -typedef enum -{ - AUDIO_UD_CTRL_UNDEF = 0x00, - AUDIO_UD_CTRL_ENABLE = 0x01, - AUDIO_UD_CTRL_MODE_SELECT = 0x02, - AUDIO_UD_CTRL_CLUSTER = 0x03, - AUDIO_UD_CTRL_UNDERFLOW = 0x04, - AUDIO_UD_CTRL_OVERFLOW = 0x05, - AUDIO_UD_CTRL_LATENCY = 0x06, +typedef enum { + AUDIO_UD_CTRL_UNDEF = 0x00, + AUDIO_UD_CTRL_ENABLE = 0x01, + AUDIO_UD_CTRL_MODE_SELECT = 0x02, + AUDIO_UD_CTRL_CLUSTER = 0x03, + AUDIO_UD_CTRL_UNDERFLOW = 0x04, + AUDIO_UD_CTRL_OVERFLOW = 0x05, + AUDIO_UD_CTRL_LATENCY = 0x06, } audio_up_down_mix_control_selector_t; /// A.17.9.2 Dolby Prologic ™ Processing Unit Control Selectors -typedef enum -{ - AUDIO_DP_CTRL_UNDEF = 0x00, - AUDIO_DP_CTRL_ENABLE = 0x01, - AUDIO_DP_CTRL_MODE_SELECT = 0x02, - AUDIO_DP_CTRL_CLUSTER = 0x03, - AUDIO_DP_CTRL_UNDERFLOW = 0x04, - AUDIO_DP_CTRL_OVERFLOW = 0x05, - AUDIO_DP_CTRL_LATENCY = 0x06, +typedef enum { + AUDIO_DP_CTRL_UNDEF = 0x00, + AUDIO_DP_CTRL_ENABLE = 0x01, + AUDIO_DP_CTRL_MODE_SELECT = 0x02, + AUDIO_DP_CTRL_CLUSTER = 0x03, + AUDIO_DP_CTRL_UNDERFLOW = 0x04, + AUDIO_DP_CTRL_OVERFLOW = 0x05, + AUDIO_DP_CTRL_LATENCY = 0x06, } audio_dolby_prologic_control_selector_t; /// A.17.9.3 Stereo Extender Processing Unit Control Selectors -typedef enum -{ - AUDIO_ST_EXT_CTRL_UNDEF = 0x00, - AUDIO_ST_EXT_CTRL_ENABLE = 0x01, - AUDIO_ST_EXT_CTRL_WIDTH = 0x02, - AUDIO_ST_EXT_CTRL_UNDERFLOW = 0x03, - AUDIO_ST_EXT_CTRL_OVERFLOW = 0x04, - AUDIO_ST_EXT_CTRL_LATENCY = 0x05, +typedef enum { + AUDIO_ST_EXT_CTRL_UNDEF = 0x00, + AUDIO_ST_EXT_CTRL_ENABLE = 0x01, + AUDIO_ST_EXT_CTRL_WIDTH = 0x02, + AUDIO_ST_EXT_CTRL_UNDERFLOW = 0x03, + AUDIO_ST_EXT_CTRL_OVERFLOW = 0x04, + AUDIO_ST_EXT_CTRL_LATENCY = 0x05, } audio_stereo_extender_control_selector_t; /// A.17.10 Extension Unit Control Selectors -typedef enum -{ - AUDIO_XU_CTRL_UNDEF = 0x00, - AUDIO_XU_CTRL_ENABLE = 0x01, - AUDIO_XU_CTRL_CLUSTER = 0x02, - AUDIO_XU_CTRL_UNDERFLOW = 0x03, - AUDIO_XU_CTRL_OVERFLOW = 0x04, - AUDIO_XU_CTRL_LATENCY = 0x05, +typedef enum { + AUDIO_XU_CTRL_UNDEF = 0x00, + AUDIO_XU_CTRL_ENABLE = 0x01, + AUDIO_XU_CTRL_CLUSTER = 0x02, + AUDIO_XU_CTRL_UNDERFLOW = 0x03, + AUDIO_XU_CTRL_OVERFLOW = 0x04, + AUDIO_XU_CTRL_LATENCY = 0x05, } audio_extension_unit_control_selector_t; /// A.17.11 AudioStreaming Interface Control Selectors -typedef enum -{ - AUDIO_AS_CTRL_UNDEF = 0x00, - AUDIO_AS_CTRL_ACT_ALT_SETTING = 0x01, - AUDIO_AS_CTRL_VAL_ALT_SETTINGS = 0x02, - AUDIO_AS_CTRL_AUDIO_DATA_FORMAT = 0x03, +typedef enum { + AUDIO_AS_CTRL_UNDEF = 0x00, + AUDIO_AS_CTRL_ACT_ALT_SETTING = 0x01, + AUDIO_AS_CTRL_VAL_ALT_SETTINGS = 0x02, + AUDIO_AS_CTRL_AUDIO_DATA_FORMAT = 0x03, } audio_audiostreaming_interface_control_selector_t; /// A.17.12 Encoder Control Selectors -typedef enum -{ - AUDIO_EN_CTRL_UNDEF = 0x00, - AUDIO_EN_CTRL_BIT_RATE = 0x01, - AUDIO_EN_CTRL_QUALITY = 0x02, - AUDIO_EN_CTRL_VBR = 0x03, - AUDIO_EN_CTRL_TYPE = 0x04, - AUDIO_EN_CTRL_UNDERFLOW = 0x05, - AUDIO_EN_CTRL_OVERFLOW = 0x06, - AUDIO_EN_CTRL_ENCODER_ERROR = 0x07, - AUDIO_EN_CTRL_PARAM1 = 0x08, - AUDIO_EN_CTRL_PARAM2 = 0x09, - AUDIO_EN_CTRL_PARAM3 = 0x0A, - AUDIO_EN_CTRL_PARAM4 = 0x0B, - AUDIO_EN_CTRL_PARAM5 = 0x0C, - AUDIO_EN_CTRL_PARAM6 = 0x0D, - AUDIO_EN_CTRL_PARAM7 = 0x0E, - AUDIO_EN_CTRL_PARAM8 = 0x0F, +typedef enum { + AUDIO_EN_CTRL_UNDEF = 0x00, + AUDIO_EN_CTRL_BIT_RATE = 0x01, + AUDIO_EN_CTRL_QUALITY = 0x02, + AUDIO_EN_CTRL_VBR = 0x03, + AUDIO_EN_CTRL_TYPE = 0x04, + AUDIO_EN_CTRL_UNDERFLOW = 0x05, + AUDIO_EN_CTRL_OVERFLOW = 0x06, + AUDIO_EN_CTRL_ENCODER_ERROR = 0x07, + AUDIO_EN_CTRL_PARAM1 = 0x08, + AUDIO_EN_CTRL_PARAM2 = 0x09, + AUDIO_EN_CTRL_PARAM3 = 0x0A, + AUDIO_EN_CTRL_PARAM4 = 0x0B, + AUDIO_EN_CTRL_PARAM5 = 0x0C, + AUDIO_EN_CTRL_PARAM6 = 0x0D, + AUDIO_EN_CTRL_PARAM7 = 0x0E, + AUDIO_EN_CTRL_PARAM8 = 0x0F, } audio_encoder_control_selector_t; /// A.17.13 Decoder Control Selectors /// A.17.13.1 MPEG Decoder Control Selectors -typedef enum -{ - AUDIO_MPD_CTRL_UNDEF = 0x00, - AUDIO_MPD_CTRL_DUAL_CHANNEL = 0x01, - AUDIO_MPD_CTRL_SECOND_STEREO = 0x02, - AUDIO_MPD_CTRL_MULTILINGUAL = 0x03, - AUDIO_MPD_CTRL_DYN_RANGE = 0x04, - AUDIO_MPD_CTRL_SCALING = 0x05, - AUDIO_MPD_CTRL_HILO_SCALING = 0x06, - AUDIO_MPD_CTRL_UNDERFLOW = 0x07, - AUDIO_MPD_CTRL_OVERFLOW = 0x08, - AUDIO_MPD_CTRL_DECODER_ERROR = 0x09, +typedef enum { + AUDIO_MPD_CTRL_UNDEF = 0x00, + AUDIO_MPD_CTRL_DUAL_CHANNEL = 0x01, + AUDIO_MPD_CTRL_SECOND_STEREO = 0x02, + AUDIO_MPD_CTRL_MULTILINGUAL = 0x03, + AUDIO_MPD_CTRL_DYN_RANGE = 0x04, + AUDIO_MPD_CTRL_SCALING = 0x05, + AUDIO_MPD_CTRL_HILO_SCALING = 0x06, + AUDIO_MPD_CTRL_UNDERFLOW = 0x07, + AUDIO_MPD_CTRL_OVERFLOW = 0x08, + AUDIO_MPD_CTRL_DECODER_ERROR = 0x09, } audio_MPEG_decoder_control_selector_t; /// A.17.13.2 AC-3 Decoder Control Selectors -typedef enum -{ - AUDIO_AD_CTRL_UNDEF = 0x00, - AUDIO_AD_CTRL_MODE = 0x01, - AUDIO_AD_CTRL_DYN_RANGE = 0x02, - AUDIO_AD_CTRL_SCALING = 0x03, - AUDIO_AD_CTRL_HILO_SCALING = 0x04, - AUDIO_AD_CTRL_UNDERFLOW = 0x05, - AUDIO_AD_CTRL_OVERFLOW = 0x06, - AUDIO_AD_CTRL_DECODER_ERROR = 0x07, +typedef enum { + AUDIO_AD_CTRL_UNDEF = 0x00, + AUDIO_AD_CTRL_MODE = 0x01, + AUDIO_AD_CTRL_DYN_RANGE = 0x02, + AUDIO_AD_CTRL_SCALING = 0x03, + AUDIO_AD_CTRL_HILO_SCALING = 0x04, + AUDIO_AD_CTRL_UNDERFLOW = 0x05, + AUDIO_AD_CTRL_OVERFLOW = 0x06, + AUDIO_AD_CTRL_DECODER_ERROR = 0x07, } audio_AC3_decoder_control_selector_t; /// A.17.13.3 WMA Decoder Control Selectors -typedef enum -{ - AUDIO_WD_CTRL_UNDEF = 0x00, - AUDIO_WD_CTRL_UNDERFLOW = 0x01, - AUDIO_WD_CTRL_OVERFLOW = 0x02, - AUDIO_WD_CTRL_DECODER_ERROR = 0x03, +typedef enum { + AUDIO_WD_CTRL_UNDEF = 0x00, + AUDIO_WD_CTRL_UNDERFLOW = 0x01, + AUDIO_WD_CTRL_OVERFLOW = 0x02, + AUDIO_WD_CTRL_DECODER_ERROR = 0x03, } audio_WMA_decoder_control_selector_t; /// A.17.13.4 DTS Decoder Control Selectors -typedef enum -{ - AUDIO_DD_CTRL_UNDEF = 0x00, - AUDIO_DD_CTRL_UNDERFLOW = 0x01, - AUDIO_DD_CTRL_OVERFLOW = 0x02, - AUDIO_DD_CTRL_DECODER_ERROR = 0x03, +typedef enum { + AUDIO_DD_CTRL_UNDEF = 0x00, + AUDIO_DD_CTRL_UNDERFLOW = 0x01, + AUDIO_DD_CTRL_OVERFLOW = 0x02, + AUDIO_DD_CTRL_DECODER_ERROR = 0x03, } audio_DTS_decoder_control_selector_t; /// A.17.14 Endpoint Control Selectors -typedef enum -{ - AUDIO_EP_CTRL_UNDEF = 0x00, - AUDIO_EP_CTRL_PITCH = 0x01, - AUDIO_EP_CTRL_DATA_OVERRUN = 0x02, - AUDIO_EP_CTRL_DATA_UNDERRUN = 0x03, +typedef enum { + AUDIO_EP_CTRL_UNDEF = 0x00, + AUDIO_EP_CTRL_PITCH = 0x01, + AUDIO_EP_CTRL_DATA_OVERRUN = 0x02, + AUDIO_EP_CTRL_DATA_UNDERRUN = 0x03, } audio_EP_control_selector_t; /// Terminal Types /// 2.1 - Audio Class-Terminal Types UAC2 -typedef enum -{ - AUDIO_TERM_TYPE_USB_UNDEFINED = 0x0100, - AUDIO_TERM_TYPE_USB_STREAMING = 0x0101, - AUDIO_TERM_TYPE_USB_VENDOR_SPEC = 0x01FF, +typedef enum { + AUDIO_TERM_TYPE_USB_UNDEFINED = 0x0100, + AUDIO_TERM_TYPE_USB_STREAMING = 0x0101, + AUDIO_TERM_TYPE_USB_VENDOR_SPEC = 0x01FF, } audio_terminal_type_t; /// 2.2 - Audio Class-Input Terminal Types UAC2 -typedef enum -{ - AUDIO_TERM_TYPE_IN_UNDEFINED = 0x0200, - AUDIO_TERM_TYPE_IN_GENERIC_MIC = 0x0201, - AUDIO_TERM_TYPE_IN_DESKTOP_MIC = 0x0202, - AUDIO_TERM_TYPE_IN_PERSONAL_MIC = 0x0203, - AUDIO_TERM_TYPE_IN_OMNI_MIC = 0x0204, - AUDIO_TERM_TYPE_IN_ARRAY_MIC = 0x0205, - AUDIO_TERM_TYPE_IN_PROC_ARRAY_MIC = 0x0206, +typedef enum { + AUDIO_TERM_TYPE_IN_UNDEFINED = 0x0200, + AUDIO_TERM_TYPE_IN_GENERIC_MIC = 0x0201, + AUDIO_TERM_TYPE_IN_DESKTOP_MIC = 0x0202, + AUDIO_TERM_TYPE_IN_PERSONAL_MIC = 0x0203, + AUDIO_TERM_TYPE_IN_OMNI_MIC = 0x0204, + AUDIO_TERM_TYPE_IN_ARRAY_MIC = 0x0205, + AUDIO_TERM_TYPE_IN_PROC_ARRAY_MIC = 0x0206, } audio_terminal_input_type_t; /// 2.3 - Audio Class-Output Terminal Types UAC2 -typedef enum -{ - AUDIO_TERM_TYPE_OUT_UNDEFINED = 0x0300, - AUDIO_TERM_TYPE_OUT_GENERIC_SPEAKER = 0x0301, - AUDIO_TERM_TYPE_OUT_HEADPHONES = 0x0302, - AUDIO_TERM_TYPE_OUT_HEAD_MNT_DISP_AUIDO = 0x0303, - AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER = 0x0304, - AUDIO_TERM_TYPE_OUT_ROOM_SPEAKER = 0x0305, - AUDIO_TERM_TYPE_OUT_COMMUNICATION_SPEAKER = 0x0306, - AUDIO_TERM_TYPE_OUT_LOW_FRQ_EFFECTS_SPEAKER = 0x0307, +typedef enum { + AUDIO_TERM_TYPE_OUT_UNDEFINED = 0x0300, + AUDIO_TERM_TYPE_OUT_GENERIC_SPEAKER = 0x0301, + AUDIO_TERM_TYPE_OUT_HEADPHONES = 0x0302, + AUDIO_TERM_TYPE_OUT_HEAD_MNT_DISP_AUIDO = 0x0303, + AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER = 0x0304, + AUDIO_TERM_TYPE_OUT_ROOM_SPEAKER = 0x0305, + AUDIO_TERM_TYPE_OUT_COMMUNICATION_SPEAKER = 0x0306, + AUDIO_TERM_TYPE_OUT_LOW_FRQ_EFFECTS_SPEAKER = 0x0307, } audio_terminal_output_type_t; /// Rest is yet to be implemented @@ -469,370 +433,370 @@ typedef enum /// Additional Audio Device Class Codes - Source: Audio Data Formats /// A.1 - Audio Class-Format Type Codes UAC2 -typedef enum -{ - AUDIO_FORMAT_TYPE_UNDEFINED = 0x00, - AUDIO_FORMAT_TYPE_I = 0x01, - AUDIO_FORMAT_TYPE_II = 0x02, - AUDIO_FORMAT_TYPE_III = 0x03, - AUDIO_FORMAT_TYPE_IV = 0x04, - AUDIO_EXT_FORMAT_TYPE_I = 0x81, - AUDIO_EXT_FORMAT_TYPE_II = 0x82, - AUDIO_EXT_FORMAT_TYPE_III = 0x83, +typedef enum { + AUDIO_FORMAT_TYPE_UNDEFINED = 0x00, + AUDIO_FORMAT_TYPE_I = 0x01, + AUDIO_FORMAT_TYPE_II = 0x02, + AUDIO_FORMAT_TYPE_III = 0x03, + AUDIO_FORMAT_TYPE_IV = 0x04, + AUDIO_EXT_FORMAT_TYPE_I = 0x81, + AUDIO_EXT_FORMAT_TYPE_II = 0x82, + AUDIO_EXT_FORMAT_TYPE_III = 0x83, } audio_format_type_t; // A.2.1 - Audio Class-Audio Data Format Type I UAC2 -typedef enum -{ - AUDIO_DATA_FORMAT_TYPE_I_PCM = (uint32_t) (1 << 0), - AUDIO_DATA_FORMAT_TYPE_I_PCM8 = (uint32_t) (1 << 1), - AUDIO_DATA_FORMAT_TYPE_I_IEEE_FLOAT = (uint32_t) (1 << 2), - AUDIO_DATA_FORMAT_TYPE_I_ALAW = (uint32_t) (1 << 3), - AUDIO_DATA_FORMAT_TYPE_I_MULAW = (uint32_t) (1 << 4), - AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA = 0x80000000u, +typedef enum { + AUDIO_DATA_FORMAT_TYPE_I_PCM = (uint32_t)(1 << 0), + AUDIO_DATA_FORMAT_TYPE_I_PCM8 = (uint32_t)(1 << 1), + AUDIO_DATA_FORMAT_TYPE_I_IEEE_FLOAT = (uint32_t)(1 << 2), + AUDIO_DATA_FORMAT_TYPE_I_ALAW = (uint32_t)(1 << 3), + AUDIO_DATA_FORMAT_TYPE_I_MULAW = (uint32_t)(1 << 4), + AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA = 0x80000000u, } audio_data_format_type_I_t; /// All remaining definitions are taken from the descriptor descriptions in the UAC2 main specification /// Audio Class-Control Values UAC2 -typedef enum -{ - AUDIO_CTRL_NONE = 0x00, ///< No Host access - AUDIO_CTRL_R = 0x01, ///< Host read access only - AUDIO_CTRL_RW = 0x03, ///< Host read write access +typedef enum { + AUDIO_CTRL_NONE = 0x00, ///< No Host access + AUDIO_CTRL_R = 0x01, ///< Host read access only + AUDIO_CTRL_RW = 0x03, ///< Host read write access } audio_control_t; /// Audio Class-Specific AC Interface Descriptor Controls UAC2 -typedef enum -{ - AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS = 0, +typedef enum { + AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS = 0, } audio_cs_ac_interface_control_pos_t; /// Audio Class-Specific AS Interface Descriptor Controls UAC2 -typedef enum -{ - AUDIO_CS_AS_INTERFACE_CTRL_ACTIVE_ALT_SET_POS = 0, - AUDIO_CS_AS_INTERFACE_CTRL_VALID_ALT_SET_POS = 2, +typedef enum { + AUDIO_CS_AS_INTERFACE_CTRL_ACTIVE_ALT_SET_POS = 0, + AUDIO_CS_AS_INTERFACE_CTRL_VALID_ALT_SET_POS = 2, } audio_cs_as_interface_control_pos_t; /// Audio Class-Specific AS Isochronous Data EP Attributes UAC2 -typedef enum -{ - AUDIO_CS_AS_ISO_DATA_EP_ATT_MAX_PACKETS_ONLY = 0x80, - AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK = 0x00, +typedef enum { + AUDIO_CS_AS_ISO_DATA_EP_ATT_MAX_PACKETS_ONLY = 0x80, + AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK = 0x00, } audio_cs_as_iso_data_ep_attribute_t; /// Audio Class-Specific AS Isochronous Data EP Controls UAC2 -typedef enum -{ - AUDIO_CS_AS_ISO_DATA_EP_CTRL_PITCH_POS = 0, - AUDIO_CS_AS_ISO_DATA_EP_CTRL_DATA_OVERRUN_POS = 2, - AUDIO_CS_AS_ISO_DATA_EP_CTRL_DATA_UNDERRUN_POS = 4, +typedef enum { + AUDIO_CS_AS_ISO_DATA_EP_CTRL_PITCH_POS = 0, + AUDIO_CS_AS_ISO_DATA_EP_CTRL_DATA_OVERRUN_POS = 2, + AUDIO_CS_AS_ISO_DATA_EP_CTRL_DATA_UNDERRUN_POS = 4, } audio_cs_as_iso_data_ep_control_pos_t; /// Audio Class-Specific AS Isochronous Data EP Lock Delay Units UAC2 -typedef enum -{ - AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED = 0x00, - AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC = 0x01, - AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_PCM_SAMPLES = 0x02, +typedef enum { + AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED = 0x00, + AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC = 0x01, + AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_PCM_SAMPLES = 0x02, } audio_cs_as_iso_data_ep_lock_delay_unit_t; /// Audio Class-Clock Source Attributes UAC2 -typedef enum -{ - AUDIO_CLOCK_SOURCE_ATT_EXT_CLK = 0x00, - AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK = 0x01, - AUDIO_CLOCK_SOURCE_ATT_INT_VAR_CLK = 0x02, - AUDIO_CLOCK_SOURCE_ATT_INT_PRO_CLK = 0x03, - AUDIO_CLOCK_SOURCE_ATT_CLK_SYC_SOF = 0x04, +typedef enum { + AUDIO_CLOCK_SOURCE_ATT_EXT_CLK = 0x00, + AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK = 0x01, + AUDIO_CLOCK_SOURCE_ATT_INT_VAR_CLK = 0x02, + AUDIO_CLOCK_SOURCE_ATT_INT_PRO_CLK = 0x03, + AUDIO_CLOCK_SOURCE_ATT_CLK_SYC_SOF = 0x04, } audio_clock_source_attribute_t; /// Audio Class-Clock Source Controls UAC2 -typedef enum -{ - AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS = 0, - AUDIO_CLOCK_SOURCE_CTRL_CLK_VAL_POS = 2, +typedef enum { + AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS = 0, + AUDIO_CLOCK_SOURCE_CTRL_CLK_VAL_POS = 2, } audio_clock_source_control_pos_t; /// Audio Class-Clock Selector Controls UAC2 -typedef enum -{ - AUDIO_CLOCK_SELECTOR_CTRL_POS = 0, +typedef enum { + AUDIO_CLOCK_SELECTOR_CTRL_POS = 0, } audio_clock_selector_control_pos_t; /// Audio Class-Clock Multiplier Controls UAC2 -typedef enum -{ - AUDIO_CLOCK_MULTIPLIER_CTRL_NUMERATOR_POS = 0, - AUDIO_CLOCK_MULTIPLIER_CTRL_DENOMINATOR_POS = 2, +typedef enum { + AUDIO_CLOCK_MULTIPLIER_CTRL_NUMERATOR_POS = 0, + AUDIO_CLOCK_MULTIPLIER_CTRL_DENOMINATOR_POS = 2, } audio_clock_multiplier_control_pos_t; /// Audio Class-Input Terminal Controls UAC2 -typedef enum -{ - AUDIO_IN_TERM_CTRL_CPY_PROT_POS = 0, - AUDIO_IN_TERM_CTRL_CONNECTOR_POS = 2, - AUDIO_IN_TERM_CTRL_OVERLOAD_POS = 4, - AUDIO_IN_TERM_CTRL_CLUSTER_POS = 6, - AUDIO_IN_TERM_CTRL_UNDERFLOW_POS = 8, - AUDIO_IN_TERM_CTRL_OVERFLOW_POS = 10, +typedef enum { + AUDIO_IN_TERM_CTRL_CPY_PROT_POS = 0, + AUDIO_IN_TERM_CTRL_CONNECTOR_POS = 2, + AUDIO_IN_TERM_CTRL_OVERLOAD_POS = 4, + AUDIO_IN_TERM_CTRL_CLUSTER_POS = 6, + AUDIO_IN_TERM_CTRL_UNDERFLOW_POS = 8, + AUDIO_IN_TERM_CTRL_OVERFLOW_POS = 10, } audio_terminal_input_control_pos_t; /// Audio Class-Output Terminal Controls UAC2 -typedef enum -{ - AUDIO_OUT_TERM_CTRL_CPY_PROT_POS = 0, - AUDIO_OUT_TERM_CTRL_CONNECTOR_POS = 2, - AUDIO_OUT_TERM_CTRL_OVERLOAD_POS = 4, - AUDIO_OUT_TERM_CTRL_UNDERFLOW_POS = 6, - AUDIO_OUT_TERM_CTRL_OVERFLOW_POS = 8, +typedef enum { + AUDIO_OUT_TERM_CTRL_CPY_PROT_POS = 0, + AUDIO_OUT_TERM_CTRL_CONNECTOR_POS = 2, + AUDIO_OUT_TERM_CTRL_OVERLOAD_POS = 4, + AUDIO_OUT_TERM_CTRL_UNDERFLOW_POS = 6, + AUDIO_OUT_TERM_CTRL_OVERFLOW_POS = 8, } audio_terminal_output_control_pos_t; /// Audio Class-Feature Unit Controls UAC2 -typedef enum -{ - AUDIO_FEATURE_UNIT_CTRL_MUTE_POS = 0, - AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS = 2, - AUDIO_FEATURE_UNIT_CTRL_BASS_POS = 4, - AUDIO_FEATURE_UNIT_CTRL_MID_POS = 6, - AUDIO_FEATURE_UNIT_CTRL_TREBLE_POS = 8, - AUDIO_FEATURE_UNIT_CTRL_GRAPHIC_EQU_POS = 10, - AUDIO_FEATURE_UNIT_CTRL_AGC_POS = 12, - AUDIO_FEATURE_UNIT_CTRL_DELAY_POS = 14, - AUDIO_FEATURE_UNIT_CTRL_BASS_BOOST_POS = 16, - AUDIO_FEATURE_UNIT_CTRL_LOUDNESS_POS = 18, - AUDIO_FEATURE_UNIT_CTRL_INPUT_GAIN_POS = 20, - AUDIO_FEATURE_UNIT_CTRL_INPUT_GAIN_PAD_POS = 22, - AUDIO_FEATURE_UNIT_CTRL_PHASE_INV_POS = 24, - AUDIO_FEATURE_UNIT_CTRL_UNDERFLOW_POS = 26, - AUDIO_FEATURE_UNIT_CTRL_OVERFLOW_POS = 28, +typedef enum { + AUDIO_FEATURE_UNIT_CTRL_MUTE_POS = 0, + AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS = 2, + AUDIO_FEATURE_UNIT_CTRL_BASS_POS = 4, + AUDIO_FEATURE_UNIT_CTRL_MID_POS = 6, + AUDIO_FEATURE_UNIT_CTRL_TREBLE_POS = 8, + AUDIO_FEATURE_UNIT_CTRL_GRAPHIC_EQU_POS = 10, + AUDIO_FEATURE_UNIT_CTRL_AGC_POS = 12, + AUDIO_FEATURE_UNIT_CTRL_DELAY_POS = 14, + AUDIO_FEATURE_UNIT_CTRL_BASS_BOOST_POS = 16, + AUDIO_FEATURE_UNIT_CTRL_LOUDNESS_POS = 18, + AUDIO_FEATURE_UNIT_CTRL_INPUT_GAIN_POS = 20, + AUDIO_FEATURE_UNIT_CTRL_INPUT_GAIN_PAD_POS = 22, + AUDIO_FEATURE_UNIT_CTRL_PHASE_INV_POS = 24, + AUDIO_FEATURE_UNIT_CTRL_UNDERFLOW_POS = 26, + AUDIO_FEATURE_UNIT_CTRL_OVERFLOW_POS = 28, } audio_feature_unit_control_pos_t; /// Audio Class-Audio Channel Configuration UAC2 -typedef enum -{ - AUDIO_CHANNEL_CONFIG_NON_PREDEFINED = 0x00000000, - AUDIO_CHANNEL_CONFIG_FRONT_LEFT = 0x00000001, - AUDIO_CHANNEL_CONFIG_FRONT_RIGHT = 0x00000002, - AUDIO_CHANNEL_CONFIG_FRONT_CENTER = 0x00000004, - AUDIO_CHANNEL_CONFIG_LOW_FRQ_EFFECTS = 0x00000008, - AUDIO_CHANNEL_CONFIG_BACK_LEFT = 0x00000010, - AUDIO_CHANNEL_CONFIG_BACK_RIGHT = 0x00000020, - AUDIO_CHANNEL_CONFIG_FRONT_LEFT_OF_CENTER = 0x00000040, - AUDIO_CHANNEL_CONFIG_FRONT_RIGHT_OF_CENTER = 0x00000080, - AUDIO_CHANNEL_CONFIG_BACK_CENTER = 0x00000100, - AUDIO_CHANNEL_CONFIG_SIDE_LEFT = 0x00000200, - AUDIO_CHANNEL_CONFIG_SIDE_RIGHT = 0x00000400, - AUDIO_CHANNEL_CONFIG_TOP_CENTER = 0x00000800, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_LEFT = 0x00001000, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_CENTER = 0x00002000, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_RIGHT = 0x00004000, - AUDIO_CHANNEL_CONFIG_TOP_BACK_LEFT = 0x00008000, - AUDIO_CHANNEL_CONFIG_TOP_BACK_CENTER = 0x00010000, - AUDIO_CHANNEL_CONFIG_TOP_BACK_RIGHT = 0x00020000, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_LEFT_OF_CENTER = 0x00040000, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_RIGHT_OF_CENTER = 0x00080000, - AUDIO_CHANNEL_CONFIG_LEFT_LOW_FRQ_EFFECTS = 0x00100000, - AUDIO_CHANNEL_CONFIG_RIGHT_LOW_FRQ_EFFECTS = 0x00200000, - AUDIO_CHANNEL_CONFIG_TOP_SIDE_LEFT = 0x00400000, - AUDIO_CHANNEL_CONFIG_TOP_SIDE_RIGHT = 0x00800000, - AUDIO_CHANNEL_CONFIG_BOTTOM_CENTER = 0x01000000, - AUDIO_CHANNEL_CONFIG_BACK_LEFT_OF_CENTER = 0x02000000, - AUDIO_CHANNEL_CONFIG_BACK_RIGHT_OF_CENTER = 0x04000000, - AUDIO_CHANNEL_CONFIG_RAW_DATA = 0x80000000u, +typedef enum { + AUDIO_CHANNEL_CONFIG_NON_PREDEFINED = 0x00000000, + AUDIO_CHANNEL_CONFIG_FRONT_LEFT = 0x00000001, + AUDIO_CHANNEL_CONFIG_FRONT_RIGHT = 0x00000002, + AUDIO_CHANNEL_CONFIG_FRONT_CENTER = 0x00000004, + AUDIO_CHANNEL_CONFIG_LOW_FRQ_EFFECTS = 0x00000008, + AUDIO_CHANNEL_CONFIG_BACK_LEFT = 0x00000010, + AUDIO_CHANNEL_CONFIG_BACK_RIGHT = 0x00000020, + AUDIO_CHANNEL_CONFIG_FRONT_LEFT_OF_CENTER = 0x00000040, + AUDIO_CHANNEL_CONFIG_FRONT_RIGHT_OF_CENTER = 0x00000080, + AUDIO_CHANNEL_CONFIG_BACK_CENTER = 0x00000100, + AUDIO_CHANNEL_CONFIG_SIDE_LEFT = 0x00000200, + AUDIO_CHANNEL_CONFIG_SIDE_RIGHT = 0x00000400, + AUDIO_CHANNEL_CONFIG_TOP_CENTER = 0x00000800, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_LEFT = 0x00001000, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_CENTER = 0x00002000, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_RIGHT = 0x00004000, + AUDIO_CHANNEL_CONFIG_TOP_BACK_LEFT = 0x00008000, + AUDIO_CHANNEL_CONFIG_TOP_BACK_CENTER = 0x00010000, + AUDIO_CHANNEL_CONFIG_TOP_BACK_RIGHT = 0x00020000, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_LEFT_OF_CENTER = 0x00040000, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_RIGHT_OF_CENTER = 0x00080000, + AUDIO_CHANNEL_CONFIG_LEFT_LOW_FRQ_EFFECTS = 0x00100000, + AUDIO_CHANNEL_CONFIG_RIGHT_LOW_FRQ_EFFECTS = 0x00200000, + AUDIO_CHANNEL_CONFIG_TOP_SIDE_LEFT = 0x00400000, + AUDIO_CHANNEL_CONFIG_TOP_SIDE_RIGHT = 0x00800000, + AUDIO_CHANNEL_CONFIG_BOTTOM_CENTER = 0x01000000, + AUDIO_CHANNEL_CONFIG_BACK_LEFT_OF_CENTER = 0x02000000, + AUDIO_CHANNEL_CONFIG_BACK_RIGHT_OF_CENTER = 0x04000000, + AUDIO_CHANNEL_CONFIG_RAW_DATA = 0x80000000u, } audio_channel_config_t; /// AUDIO Channel Cluster Descriptor (4.1) typedef struct TU_ATTR_PACKED { - uint8_t bNrChannels; ///< Number of channels currently connected. - audio_channel_config_t bmChannelConfig; ///< Bitmap according to 'audio_channel_config_t' with a 1 set if channel is connected and 0 else. In case channels are non-predefined ignore them here (see UAC2 specification 4.1 Audio Channel Cluster Descriptor. - uint8_t iChannelNames; ///< Index of a string descriptor, describing the name of the first inserted channel with a non-predefined spatial location. + uint8_t bNrChannels; ///< Number of channels currently connected. + audio_channel_config_t + bmChannelConfig; ///< Bitmap according to 'audio_channel_config_t' with a 1 set if channel is connected and 0 else. In case channels are non-predefined ignore them here (see UAC2 specification 4.1 Audio Channel Cluster Descriptor. + uint8_t + iChannelNames; ///< Index of a string descriptor, describing the name of the first inserted channel with a non-predefined spatial location. } audio_desc_channel_cluster_t; /// AUDIO Class-Specific AC Interface Header Descriptor (4.7.2) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes: 9. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_HEADER. - uint16_t bcdADC ; ///< Audio Device Class Specification Release Number in Binary-Coded Decimal. Value: U16_TO_U8S_LE(0x0200). - uint8_t bCategory ; ///< Constant, indicating the primary use of this audio function, as intended by the manufacturer. See: audio_function_t. - uint16_t wTotalLength ; ///< Total number of bytes returned for the class-specific AudioControl interface descriptor. Includes the combined length of this descriptor header and all Clock Source, Unit and Terminal descriptors. - uint8_t bmControls ; ///< See: audio_cs_ac_interface_control_pos_t. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes: 9. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_HEADER. + uint16_t + bcdADC; ///< Audio Device Class Specification Release Number in Binary-Coded Decimal. Value: U16_TO_U8S_LE(0x0200). + uint8_t + bCategory; ///< Constant, indicating the primary use of this audio function, as intended by the manufacturer. See: audio_function_t. + uint16_t + wTotalLength; ///< Total number of bytes returned for the class-specific AudioControl interface descriptor. Includes the combined length of this descriptor header and all Clock Source, Unit and Terminal descriptors. + uint8_t bmControls; ///< See: audio_cs_ac_interface_control_pos_t. } audio_desc_cs_ac_interface_t; /// AUDIO Clock Source Descriptor (4.7.2.1) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes: 8. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE. - uint8_t bClockID ; ///< Constant uniquely identifying the Clock Source Entity within the audio function. This value is used in all requests to address this Entity. - uint8_t bmAttributes ; ///< See: audio_clock_source_attribute_t. - uint8_t bmControls ; ///< See: audio_clock_source_control_pos_t. - uint8_t bAssocTerminal ; ///< Terminal ID of the Terminal that is associated with this Clock Source. - uint8_t iClockSource ; ///< Index of a string descriptor, describing the Clock Source Entity. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes: 8. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE. + uint8_t + bClockID; ///< Constant uniquely identifying the Clock Source Entity within the audio function. This value is used in all requests to address this Entity. + uint8_t bmAttributes; ///< See: audio_clock_source_attribute_t. + uint8_t bmControls; ///< See: audio_clock_source_control_pos_t. + uint8_t + bAssocTerminal; ///< Terminal ID of the Terminal that is associated with this Clock Source. + uint8_t iClockSource; ///< Index of a string descriptor, describing the Clock Source Entity. } audio_desc_clock_source_t; /// AUDIO Clock Selector Descriptor (4.7.2.2) for ONE pin -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor, in bytes: 7+p. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_SELECTOR. - uint8_t bClockID ; ///< Constant uniquely identifying the Clock Selector Entity within the audio function. This value is used in all requests to address this Entity. - uint8_t bNrInPins ; ///< Number of Input Pins of this Unit: p = 1 thus bNrInPins = 1. - uint8_t baCSourceID ; ///< ID of the Clock Entity to which the first Clock Input Pin of this Clock Selector Entity is connected.. - uint8_t bmControls ; ///< See: audio_clock_selector_control_pos_t. - uint8_t iClockSource ; ///< Index of a string descriptor, describing the Clock Selector Entity. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor, in bytes: 7+p. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_SELECTOR. + uint8_t + bClockID; ///< Constant uniquely identifying the Clock Selector Entity within the audio function. This value is used in all requests to address this Entity. + uint8_t bNrInPins; ///< Number of Input Pins of this Unit: p = 1 thus bNrInPins = 1. + uint8_t + baCSourceID; ///< ID of the Clock Entity to which the first Clock Input Pin of this Clock Selector Entity is connected.. + uint8_t bmControls; ///< See: audio_clock_selector_control_pos_t. + uint8_t iClockSource; ///< Index of a string descriptor, describing the Clock Selector Entity. } audio_desc_clock_selector_t; /// AUDIO Clock Selector Descriptor (4.7.2.2) for multiple pins #define audio_desc_clock_selector_n_t(source_num) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength ; \ - uint8_t bDescriptorType ; \ - uint8_t bDescriptorSubType ; \ - uint8_t bClockID ; \ - uint8_t bNrInPins ; \ - struct TU_ATTR_PACKED { \ - uint8_t baSourceID ; \ - } sourceID[source_num] ; \ - uint8_t bmControls ; \ - uint8_t iClockSource ; \ -} + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bClockID; \ + uint8_t bNrInPins; \ + struct TU_ATTR_PACKED { \ + uint8_t baSourceID; \ + } sourceID[source_num]; \ + uint8_t bmControls; \ + uint8_t iClockSource; \ + } /// AUDIO Clock Multiplier Descriptor (4.7.2.3) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor, in bytes: 7. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_MULTIPLIER. - uint8_t bClockID ; ///< Constant uniquely identifying the Clock Multiplier Entity within the audio function. This value is used in all requests to address this Entity. - uint8_t bCSourceID ; ///< ID of the Clock Entity to which the last Clock Input Pin of this Clock Selector Entity is connected. - uint8_t bmControls ; ///< See: audio_clock_multiplier_control_pos_t. - uint8_t iClockSource ; ///< Index of a string descriptor, describing the Clock Multiplier Entity. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor, in bytes: 7. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t + bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_MULTIPLIER. + uint8_t + bClockID; ///< Constant uniquely identifying the Clock Multiplier Entity within the audio function. This value is used in all requests to address this Entity. + uint8_t + bCSourceID; ///< ID of the Clock Entity to which the last Clock Input Pin of this Clock Selector Entity is connected. + uint8_t bmControls; ///< See: audio_clock_multiplier_control_pos_t. + uint8_t iClockSource; ///< Index of a string descriptor, describing the Clock Multiplier Entity. } audio_desc_clock_multiplier_t; /// AUDIO Input Terminal Descriptor(4.7.2.4) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor, in bytes: 17. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL. - uint8_t bTerminalID ; ///< Constant uniquely identifying the Terminal within the audio function. This value is used in all requests to address this terminal. - uint16_t wTerminalType ; ///< Constant characterizing the type of Terminal. See: audio_terminal_type_t for USB streaming and audio_terminal_input_type_t for other input types. - uint8_t bAssocTerminal ; ///< ID of the Output Terminal to which this Input Terminal is associated. - uint8_t bCSourceID ; ///< ID of the Clock Entity to which this Input Terminal is connected. - uint8_t bNrChannels ; ///< Number of logical output channels in the Terminal’s output audio channel cluster. - uint32_t bmChannelConfig ; ///< Describes the spatial location of the logical channels. See:audio_channel_config_t. - uint8_t iChannelNames ; ///< Index of a string descriptor, describing the name of the first logical channel. - uint16_t bmControls ; ///< See: audio_terminal_input_control_pos_t. - uint8_t iTerminal ; ///< Index of a string descriptor, describing the Input Terminal. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor, in bytes: 17. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL. + uint8_t + bTerminalID; ///< Constant uniquely identifying the Terminal within the audio function. This value is used in all requests to address this terminal. + uint16_t + wTerminalType; ///< Constant characterizing the type of Terminal. See: audio_terminal_type_t for USB streaming and audio_terminal_input_type_t for other input types. + uint8_t bAssocTerminal; ///< ID of the Output Terminal to which this Input Terminal is associated. + uint8_t bCSourceID; ///< ID of the Clock Entity to which this Input Terminal is connected. + uint8_t + bNrChannels; ///< Number of logical output channels in the Terminal’s output audio channel cluster. + uint32_t + bmChannelConfig; ///< Describes the spatial location of the logical channels. See:audio_channel_config_t. + uint8_t + iChannelNames; ///< Index of a string descriptor, describing the name of the first logical channel. + uint16_t bmControls; ///< See: audio_terminal_input_control_pos_t. + uint8_t iTerminal; ///< Index of a string descriptor, describing the Input Terminal. } audio_desc_input_terminal_t; /// AUDIO Output Terminal Descriptor(4.7.2.5) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor, in bytes: 12. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL. - uint8_t bTerminalID ; ///< Constant uniquely identifying the Terminal within the audio function. This value is used in all requests to address this Terminal. - uint16_t wTerminalType ; ///< Constant characterizing the type of Terminal. See: audio_terminal_type_t for USB streaming and audio_terminal_output_type_t for other output types. - uint8_t bAssocTerminal ; ///< Constant, identifying the Input Terminal to which this Output Terminal is associated. - uint8_t bSourceID ; ///< ID of the Unit or Terminal to which this Terminal is connected. - uint8_t bCSourceID ; ///< ID of the Clock Entity to which this Output Terminal is connected. - uint16_t bmControls ; ///< See: audio_terminal_output_type_t. - uint8_t iTerminal ; ///< Index of a string descriptor, describing the Output Terminal. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor, in bytes: 12. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL. + uint8_t + bTerminalID; ///< Constant uniquely identifying the Terminal within the audio function. This value is used in all requests to address this Terminal. + uint16_t + wTerminalType; ///< Constant characterizing the type of Terminal. See: audio_terminal_type_t for USB streaming and audio_terminal_output_type_t for other output types. + uint8_t + bAssocTerminal; ///< Constant, identifying the Input Terminal to which this Output Terminal is associated. + uint8_t bSourceID; ///< ID of the Unit or Terminal to which this Terminal is connected. + uint8_t bCSourceID; ///< ID of the Clock Entity to which this Output Terminal is connected. + uint16_t bmControls; ///< See: audio_terminal_output_type_t. + uint8_t iTerminal; ///< Index of a string descriptor, describing the Output Terminal. } audio_desc_output_terminal_t; /// AUDIO Feature Unit Descriptor(4.7.2.8) for ONE channel -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor, in bytes: 14. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_FEATURE_UNIT. - uint8_t bUnitID ; ///< Constant uniquely identifying the Unit within the audio function. This value is used in all requests to address this Unit. - uint8_t bSourceID ; ///< ID of the Unit or Terminal to which this Feature Unit is connected. - struct TU_ATTR_PACKED { - uint32_t bmaControls ; ///< See: audio_feature_unit_control_pos_t. Controls0 is master channel 0 (always present) and Controls1 is logical channel 1. - } controls[2] ; - uint8_t iTerminal ; ///< Index of a string descriptor, describing this Feature Unit. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor, in bytes: 14. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_FEATURE_UNIT. + uint8_t + bUnitID; ///< Constant uniquely identifying the Unit within the audio function. This value is used in all requests to address this Unit. + uint8_t bSourceID; ///< ID of the Unit or Terminal to which this Feature Unit is connected. + struct TU_ATTR_PACKED { + uint32_t + bmaControls; ///< See: audio_feature_unit_control_pos_t. Controls0 is master channel 0 (always present) and Controls1 is logical channel 1. + } controls[2]; + uint8_t iTerminal; ///< Index of a string descriptor, describing this Feature Unit. } audio_desc_feature_unit_t; /// AUDIO Feature Unit Descriptor(4.7.2.8) for multiple channels -#define audio_desc_feature_unit_n_t(ch_num)\ - struct TU_ATTR_PACKED { \ - uint8_t bLength ; /* 6+(ch_num+1)*4 */\ - uint8_t bDescriptorType ; \ - uint8_t bDescriptorSubType ; \ - uint8_t bUnitID ; \ - uint8_t bSourceID ; \ - struct TU_ATTR_PACKED { \ - uint32_t bmaControls ; \ - } controls[ch_num+1] ; \ - uint8_t iTerminal ; \ -} +#define audio_desc_feature_unit_n_t(ch_num) \ + struct TU_ATTR_PACKED { \ + uint8_t bLength; /* 6+(ch_num+1)*4 */ \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bUnitID; \ + uint8_t bSourceID; \ + struct TU_ATTR_PACKED { \ + uint32_t bmaControls; \ + } controls[ch_num + 1]; \ + uint8_t iTerminal; \ + } /// AUDIO Class-Specific AS Interface Descriptor(4.9.2) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor, in bytes: 16. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AS_INTERFACE_AS_GENERAL. - uint8_t bTerminalLink ; ///< The Terminal ID of the Terminal to which this interface is connected. - uint8_t bmControls ; ///< See: audio_cs_as_interface_control_pos_t. - uint8_t bFormatType ; ///< Constant identifying the Format Type the AudioStreaming interface is using. See: audio_format_type_t. - uint32_t bmFormats ; ///< The Audio Data Format(s) that can be used to communicate with this interface.See: audio_data_format_type_I_t. - uint8_t bNrChannels ; ///< Number of physical channels in the AS Interface audio channel cluster. - uint32_t bmChannelConfig ; ///< Describes the spatial location of the physical channels. See: audio_channel_config_t. - uint8_t iChannelNames ; ///< Index of a string descriptor, describing the name of the first physical channel. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor, in bytes: 16. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AS_INTERFACE_AS_GENERAL. + uint8_t bTerminalLink; ///< The Terminal ID of the Terminal to which this interface is connected. + uint8_t bmControls; ///< See: audio_cs_as_interface_control_pos_t. + uint8_t + bFormatType; ///< Constant identifying the Format Type the AudioStreaming interface is using. See: audio_format_type_t. + uint32_t + bmFormats; ///< The Audio Data Format(s) that can be used to communicate with this interface.See: audio_data_format_type_I_t. + uint8_t bNrChannels; ///< Number of physical channels in the AS Interface audio channel cluster. + uint32_t + bmChannelConfig; ///< Describes the spatial location of the physical channels. See: audio_channel_config_t. + uint8_t + iChannelNames; ///< Index of a string descriptor, describing the name of the first physical channel. } audio_desc_cs_as_interface_t; /// AUDIO Type I Format Type Descriptor(2.3.1.6 - Audio Formats) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor, in bytes: 6. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AS_INTERFACE_FORMAT_TYPE. - uint8_t bFormatType ; ///< Constant identifying the Format Type the AudioStreaming interface is using. Value: AUDIO_FORMAT_TYPE_I. - uint8_t bSubslotSize ; ///< The number of bytes occupied by one audio subslot. Can be 1, 2, 3 or 4. - uint8_t bBitResolution ; ///< The number of effectively used bits from the available bits in an audio subslot. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor, in bytes: 6. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AS_INTERFACE_FORMAT_TYPE. + uint8_t + bFormatType; ///< Constant identifying the Format Type the AudioStreaming interface is using. Value: AUDIO_FORMAT_TYPE_I. + uint8_t bSubslotSize; ///< The number of bytes occupied by one audio subslot. Can be 1, 2, 3 or 4. + uint8_t + bBitResolution; ///< The number of effectively used bits from the available bits in an audio subslot. } audio_desc_type_I_format_t; /// AUDIO Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor, in bytes: 8. - uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_ENDPOINT. - uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_EP_SUBTYPE_GENERAL. - uint8_t bmAttributes ; ///< See: audio_cs_as_iso_data_ep_attribute_t. - uint8_t bmControls ; ///< See: audio_cs_as_iso_data_ep_control_pos_t. - uint8_t bLockDelayUnits ; ///< Indicates the units used for the wLockDelay field. See: audio_cs_as_iso_data_ep_lock_delay_unit_t. - uint16_t wLockDelay ; ///< Indicates the time it takes this endpoint to reliably lock its internal clock recovery circuitry. Units used depend on the value of the bLockDelayUnits field. +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor, in bytes: 8. + uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_ENDPOINT. + uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_EP_SUBTYPE_GENERAL. + uint8_t bmAttributes; ///< See: audio_cs_as_iso_data_ep_attribute_t. + uint8_t bmControls; ///< See: audio_cs_as_iso_data_ep_control_pos_t. + uint8_t + bLockDelayUnits; ///< Indicates the units used for the wLockDelay field. See: audio_cs_as_iso_data_ep_lock_delay_unit_t. + uint16_t + wLockDelay; ///< Indicates the time it takes this endpoint to reliably lock its internal clock recovery circuitry. Units used depend on the value of the bLockDelayUnits field. } audio_desc_cs_as_iso_data_ep_t; // 5.2.2 Control Request Layout -typedef struct TU_ATTR_PACKED -{ - union - { - struct TU_ATTR_PACKED - { - uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. - uint8_t type : 2; ///< Request type tusb_request_type_t. - uint8_t direction : 1; ///< Direction type. tusb_dir_t +typedef struct TU_ATTR_PACKED { + union { + struct TU_ATTR_PACKED { + uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. + uint8_t type : 2; ///< Request type tusb_request_type_t. + uint8_t direction : 1; ///< Direction type. tusb_dir_t } bmRequestType_bit; uint8_t bmRequestType; }; - uint8_t bRequest; ///< Request type audio_cs_req_t + uint8_t bRequest; ///< Request type audio_cs_req_t uint8_t bChannelNumber; uint8_t bControlSelector; - union - { + union { uint8_t bInterface; uint8_t bEndpoint; }; @@ -843,110 +807,120 @@ typedef struct TU_ATTR_PACKED //// 5.2.3 Control Request Parameter Block Layout // 5.2.3.1 1-byte Control CUR Parameter Block -typedef struct TU_ATTR_PACKED -{ - int8_t bCur ; ///< The setting for the CUR attribute of the addressed Control +typedef struct TU_ATTR_PACKED { + int8_t bCur; ///< The setting for the CUR attribute of the addressed Control } audio_control_cur_1_t; // 5.2.3.2 2-byte Control CUR Parameter Block -typedef struct TU_ATTR_PACKED -{ - int16_t bCur ; ///< The setting for the CUR attribute of the addressed Control +typedef struct TU_ATTR_PACKED { + int16_t bCur; ///< The setting for the CUR attribute of the addressed Control } audio_control_cur_2_t; // 5.2.3.3 4-byte Control CUR Parameter Block -typedef struct TU_ATTR_PACKED -{ - int32_t bCur ; ///< The setting for the CUR attribute of the addressed Control +typedef struct TU_ATTR_PACKED { + int32_t bCur; ///< The setting for the CUR attribute of the addressed Control } audio_control_cur_4_t; // Use the following ONLY for RECEIVED data - compiler does not know how many subranges are defined! Use the one below for predefined lengths - or if you know what you are doing do what you like // 5.2.3.1 1-byte Control RANGE Parameter Block typedef struct TU_ATTR_PACKED { - uint16_t wNumSubRanges; - struct TU_ATTR_PACKED { - int8_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ - int8_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ - uint8_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ - } subrange[] ; + uint16_t wNumSubRanges; + struct TU_ATTR_PACKED { + int8_t + bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ + int8_t + bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ + uint8_t + bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ + } subrange[]; } audio_control_range_1_t; // 5.2.3.2 2-byte Control RANGE Parameter Block typedef struct TU_ATTR_PACKED { - uint16_t wNumSubRanges; - struct TU_ATTR_PACKED { - int16_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ - int16_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ - uint16_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ - } subrange[] ; + uint16_t wNumSubRanges; + struct TU_ATTR_PACKED { + int16_t + bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ + int16_t + bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ + uint16_t + bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ + } subrange[]; } audio_control_range_2_t; // 5.2.3.3 4-byte Control RANGE Parameter Block typedef struct TU_ATTR_PACKED { - uint16_t wNumSubRanges; - struct TU_ATTR_PACKED { - int32_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ - int32_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ - uint32_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ - } subrange[] ; + uint16_t wNumSubRanges; + struct TU_ATTR_PACKED { + int32_t + bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ + int32_t + bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ + uint32_t + bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ + } subrange[]; } audio_control_range_4_t; // 5.2.3.1 1-byte Control RANGE Parameter Block -#define audio_control_range_1_n_t(numSubRanges) \ - struct TU_ATTR_PACKED { \ - uint16_t wNumSubRanges; \ - struct TU_ATTR_PACKED { \ - int8_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ - int8_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ - uint8_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/\ - } subrange[numSubRanges] ; \ -} +#define audio_control_range_1_n_t(numSubRanges) \ + struct TU_ATTR_PACKED { \ + uint16_t wNumSubRanges; \ + struct TU_ATTR_PACKED { \ + int8_t \ + bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ \ + int8_t \ + bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ \ + uint8_t \ + bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ \ + } subrange[numSubRanges]; \ + } /// 5.2.3.2 2-byte Control RANGE Parameter Block -#define audio_control_range_2_n_t(numSubRanges) \ - struct TU_ATTR_PACKED { \ - uint16_t wNumSubRanges; \ - struct TU_ATTR_PACKED { \ - int16_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ - int16_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ - uint16_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/\ - } subrange[numSubRanges]; \ -} +#define audio_control_range_2_n_t(numSubRanges) \ + struct TU_ATTR_PACKED { \ + uint16_t wNumSubRanges; \ + struct TU_ATTR_PACKED { \ + int16_t \ + bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ \ + int16_t \ + bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ \ + uint16_t \ + bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ \ + } subrange[numSubRanges]; \ + } // 5.2.3.3 4-byte Control RANGE Parameter Block -#define audio_control_range_4_n_t(numSubRanges) \ - struct TU_ATTR_PACKED { \ - uint16_t wNumSubRanges; \ - struct TU_ATTR_PACKED { \ - int32_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ - int32_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ - uint32_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/\ - } subrange[numSubRanges]; \ -} +#define audio_control_range_4_n_t(numSubRanges) \ + struct TU_ATTR_PACKED { \ + uint16_t wNumSubRanges; \ + struct TU_ATTR_PACKED { \ + int32_t \ + bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ \ + int32_t \ + bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ \ + uint32_t \ + bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ \ + } subrange[numSubRanges]; \ + } // 6.1 Interrupt Data Message Format -typedef struct TU_ATTR_PACKED -{ - uint8_t bInfo; - uint8_t bAttribute; - union - { - uint16_t wValue; - struct - { - uint8_t wValue_cn_or_mcn; - uint8_t wValue_cs; +typedef struct TU_ATTR_PACKED { + uint8_t bInfo; + uint8_t bAttribute; + union { + uint16_t wValue; + struct { + uint8_t wValue_cn_or_mcn; + uint8_t wValue_cs; + }; }; - }; - union - { - uint16_t wIndex; - struct - { - uint8_t wIndex_ep_or_int; - uint8_t wIndex_entity_id; + union { + uint16_t wIndex; + struct { + uint8_t wIndex_ep_or_int; + uint8_t wIndex_entity_id; + }; }; - }; } audio_interrupt_data_t; /** @} */ diff --git a/Libraries/tinyusb/src/class/audio/audio_device.c b/Libraries/tinyusb/src/class/audio/audio_device.c index 8c86de4337d..3f7f7f033da 100644 --- a/Libraries/tinyusb/src/class/audio/audio_device.c +++ b/Libraries/tinyusb/src/class/audio/audio_device.c @@ -68,12 +68,12 @@ // Use ring buffer if it's available, some MCUs need extra RAM requirements // For DWC2 enable ring buffer will disable DMA (if available) #ifndef TUD_AUDIO_PREFER_RING_BUFFER - #if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \ - defined(TUP_USBIP_DWC2) - #define TUD_AUDIO_PREFER_RING_BUFFER 0 - #else - #define TUD_AUDIO_PREFER_RING_BUFFER 1 - #endif +#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || \ + CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || defined(TUP_USBIP_DWC2) +#define TUD_AUDIO_PREFER_RING_BUFFER 0 +#else +#define TUD_AUDIO_PREFER_RING_BUFFER 1 +#endif #endif // Linear buffer in case target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer @@ -81,22 +81,18 @@ // Only STM32 and dcd_transdimension use non-linear buffer for now // dwc2 except esp32sx (since it may use dcd_esp32sx) -#if (defined(TUP_USBIP_DWC2) && !TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)) || \ - defined(TUP_USBIP_FSDEV) || \ - CFG_TUSB_MCU == OPT_MCU_RX63X || \ - CFG_TUSB_MCU == OPT_MCU_RX65X || \ - CFG_TUSB_MCU == OPT_MCU_RX72N || \ - CFG_TUSB_MCU == OPT_MCU_LPC18XX || \ - CFG_TUSB_MCU == OPT_MCU_LPC43XX || \ - CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \ +#if (defined(TUP_USBIP_DWC2) && !TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)) || \ + defined(TUP_USBIP_FSDEV) || CFG_TUSB_MCU == OPT_MCU_RX63X || CFG_TUSB_MCU == OPT_MCU_RX65X || \ + CFG_TUSB_MCU == OPT_MCU_RX72N || CFG_TUSB_MCU == OPT_MCU_LPC18XX || \ + CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \ CFG_TUSB_MCU == OPT_MCU_MSP432E4 - #if TUD_AUDIO_PREFER_RING_BUFFER - #define USE_LINEAR_BUFFER 0 - #else - #define USE_LINEAR_BUFFER 1 - #endif +#if TUD_AUDIO_PREFER_RING_BUFFER +#define USE_LINEAR_BUFFER 0 +#else +#define USE_LINEAR_BUFFER 1 +#endif #else - #define USE_LINEAR_BUFFER 1 +#define USE_LINEAR_BUFFER 1 #endif // Declaration of buffers @@ -120,95 +116,116 @@ // EP IN software buffers and mutexes #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING - #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 - tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t ep_in_ff_mutex_wr_1; // No need for read mutex as only USB driver reads from FIFO - #endif - #endif // CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 - - #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 - tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t ep_in_ff_mutex_wr_2; // No need for read mutex as only USB driver reads from FIFO - #endif - #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 - - #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 - tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t ep_in_ff_mutex_wr_3; // No need for read mutex as only USB driver reads from FIFO - #endif - #endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 +#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 +tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + audio_ep_in_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t + ep_in_ff_mutex_wr_1; // No need for read mutex as only USB driver reads from FIFO +#endif +#endif // CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 + +#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 +tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + audio_ep_in_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t + ep_in_ff_mutex_wr_2; // No need for read mutex as only USB driver reads from FIFO +#endif +#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 + +#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 +tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + audio_ep_in_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t + ep_in_ff_mutex_wr_3; // No need for read mutex as only USB driver reads from FIFO +#endif +#endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING // Linear buffer TX in case: // - target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR // - the software encoding is used - in this case the linear buffers serve as a target memory where logical channels are encoded into #if CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_ENCODING) - #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0 - tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX]; - #endif +#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0 +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + lin_buf_in_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX]; +#endif - #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0 - tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX]; - #endif +#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0 +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + lin_buf_in_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX]; +#endif - #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0 - tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX]; - #endif +#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0 +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + lin_buf_in_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX]; +#endif #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING) // EP OUT software buffers and mutexes #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 - tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t ep_out_ff_mutex_rd_1; // No need for write mutex as only USB driver writes into FIFO - #endif - #endif // CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 - - #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 - tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t ep_out_ff_mutex_rd_2; // No need for write mutex as only USB driver writes into FIFO - #endif - #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 - - #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 - tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t ep_out_ff_mutex_rd_3; // No need for write mutex as only USB driver writes into FIFO - #endif - #endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 +#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 +tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + audio_ep_out_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t + ep_out_ff_mutex_rd_1; // No need for write mutex as only USB driver writes into FIFO +#endif +#endif // CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 + +#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 +tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + audio_ep_out_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t + ep_out_ff_mutex_rd_2; // No need for write mutex as only USB driver writes into FIFO +#endif +#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 + +#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 +tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + audio_ep_out_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t + ep_out_ff_mutex_rd_3; // No need for write mutex as only USB driver writes into FIFO +#endif +#endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING // Linear buffer RX in case: // - target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR // - the software encoding is used - in this case the linear buffers serve as a target memory where logical channels are encoded into #if CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING) - #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0 - tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX]; - #endif +#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0 +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + lin_buf_out_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX]; +#endif - #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0 - tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX]; - #endif +#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0 +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + lin_buf_out_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX]; +#endif - #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0 - tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX]; - #endif +#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0 +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + lin_buf_out_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX]; +#endif #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING) // Control buffers -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_1[CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ]; +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + ctrl_buf_1[CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ]; #if CFG_TUD_AUDIO > 1 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_2[CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ]; +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + ctrl_buf_2[CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ]; #endif #if CFG_TUD_AUDIO > 2 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_3[CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ]; +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t + ctrl_buf_3[CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ]; #endif // Active alternate setting of interfaces @@ -224,349 +241,396 @@ tu_static uint8_t alt_setting_3[CFG_TUD_AUDIO_FUNC_3_N_AS_INT]; // Software encoding/decoding support FIFOs #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - #if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 - tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ]; - tu_static tu_fifo_t tx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO - #endif - #endif - - #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 - tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ]; - tu_static tu_fifo_t tx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO - #endif - #endif - - #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0 - tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ]; - tu_static tu_fifo_t tx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO - #endif - #endif +#if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 +tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO] + [CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ]; +tu_static tu_fifo_t tx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_1 + [CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO +#endif +#endif + +#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 +tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO] + [CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ]; +tu_static tu_fifo_t tx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_2 + [CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO +#endif +#endif + +#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0 +tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO] + [CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ]; +tu_static tu_fifo_t tx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_3 + [CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO +#endif +#endif #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - #if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 - tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ]; - tu_static tu_fifo_t rx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO - #endif - #endif - - #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 - tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ]; - tu_static tu_fifo_t rx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO - #endif - #endif - - #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0 - tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ]; - tu_static tu_fifo_t rx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; - #if CFG_FIFO_MUTEX - tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO - #endif - #endif -#endif - -typedef struct -{ - uint8_t rhport; - uint8_t const * p_desc; // Pointer pointing to Standard AC Interface Descriptor(4.7.1) - Audio Control descriptor defining audio function +#if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 +tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO] + [CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ]; +tu_static tu_fifo_t rx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_1 + [CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO +#endif +#endif + +#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 +tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO] + [CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ]; +tu_static tu_fifo_t rx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_2 + [CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO +#endif +#endif + +#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0 +tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO] + [CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ]; +tu_static tu_fifo_t rx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; +#if CFG_FIFO_MUTEX +tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_3 + [CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO +#endif +#endif +#endif + +typedef struct { + uint8_t rhport; + uint8_t const * + p_desc; // Pointer pointing to Standard AC Interface Descriptor(4.7.1) - Audio Control descriptor defining audio function #if CFG_TUD_AUDIO_ENABLE_EP_IN - uint8_t ep_in; // TX audio data EP. - uint16_t ep_in_sz; // Current size of TX EP - uint8_t ep_in_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to output terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero) + uint8_t ep_in; // TX audio data EP. + uint16_t ep_in_sz; // Current size of TX EP + uint8_t + ep_in_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to output terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero) #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT - uint8_t ep_out; // Incoming (into uC) audio data EP. - uint16_t ep_out_sz; // Current size of RX EP - uint8_t ep_out_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to input terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero) + uint8_t ep_out; // Incoming (into uC) audio data EP. + uint16_t ep_out_sz; // Current size of RX EP + uint8_t + ep_out_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to input terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero) #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - uint8_t ep_fb; // Feedback EP. + uint8_t ep_fb; // Feedback EP. #endif #endif #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP - uint8_t ep_int; // Audio control interrupt EP. + uint8_t ep_int; // Audio control interrupt EP. #endif - bool mounted; // Device opened + bool mounted; // Device opened - uint16_t desc_length; // Length of audio function descriptor + uint16_t desc_length; // Length of audio function descriptor #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - struct { - CFG_TUSB_MEM_ALIGN uint32_t send_buf; - uint32_t value; // Feedback value for asynchronous mode (in 16.16 format). - uint32_t min_value; // min value according to UAC2 FMT-2.0 section 2.3.1.1. - uint32_t max_value; // max value according to UAC2 FMT-2.0 section 2.3.1.1. - - uint8_t frame_shift; // bInterval-1 in unit of frame (FS), micro-frame (HS) - uint8_t compute_method; - bool format_correction; - union { - uint8_t power_of_2; // pre-computed power of 2 shift - float float_const; // pre-computed float constant - - struct { - uint32_t sample_freq; - uint32_t mclk_freq; - }fixed; - - struct { - uint32_t nom_value; // In 16.16 format - uint32_t fifo_lvl_avg; // In 16.16 format - uint16_t fifo_lvl_thr; // fifo level threshold - uint16_t rate_const[2]; // pre-computed feedback/fifo_depth rate - }fifo_count; - }compute; - - } feedback; + struct { + CFG_TUSB_MEM_ALIGN uint32_t send_buf; + uint32_t value; // Feedback value for asynchronous mode (in 16.16 format). + uint32_t min_value; // min value according to UAC2 FMT-2.0 section 2.3.1.1. + uint32_t max_value; // max value according to UAC2 FMT-2.0 section 2.3.1.1. + + uint8_t frame_shift; // bInterval-1 in unit of frame (FS), micro-frame (HS) + uint8_t compute_method; + bool format_correction; + union { + uint8_t power_of_2; // pre-computed power of 2 shift + float float_const; // pre-computed float constant + + struct { + uint32_t sample_freq; + uint32_t mclk_freq; + } fixed; + + struct { + uint32_t nom_value; // In 16.16 format + uint32_t fifo_lvl_avg; // In 16.16 format + uint16_t fifo_lvl_thr; // fifo level threshold + uint16_t rate_const[2]; // pre-computed feedback/fifo_depth rate + } fifo_count; + } compute; + + } feedback; #endif // CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Decoding parameters - parameters are set when alternate AS interface is set by host - // Coding is currently only supported for EP. Software coding corresponding to AS interfaces without EPs are not supported currently. + // Decoding parameters - parameters are set when alternate AS interface is set by host + // Coding is currently only supported for EP. Software coding corresponding to AS interfaces without EPs are not supported currently. #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - audio_format_type_t format_type_rx; - uint8_t n_channels_rx; + audio_format_type_t format_type_rx; + uint8_t n_channels_rx; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - audio_data_format_type_I_t format_type_I_rx; - uint8_t n_bytes_per_sample_rx; - uint8_t n_ff_used_rx; + audio_data_format_type_I_t format_type_I_rx; + uint8_t n_bytes_per_sample_rx; + uint8_t n_ff_used_rx; #endif #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - uint32_t sample_rate_tx; - uint16_t packet_sz_tx[3]; - uint8_t bclock_id_tx; - uint8_t interval_tx; + uint32_t sample_rate_tx; + uint16_t packet_sz_tx[3]; + uint8_t bclock_id_tx; + uint8_t interval_tx; #endif - // Encoding parameters - parameters are set when alternate AS interface is set by host -#if CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL) - audio_format_type_t format_type_tx; - uint8_t n_channels_tx; - uint8_t n_bytes_per_sample_tx; + // Encoding parameters - parameters are set when alternate AS interface is set by host +#if CFG_TUD_AUDIO_ENABLE_EP_IN && \ + (CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL) + audio_format_type_t format_type_tx; + uint8_t n_channels_tx; + uint8_t n_bytes_per_sample_tx; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - audio_data_format_type_I_t format_type_I_tx; - uint8_t n_ff_used_tx; + audio_data_format_type_I_t format_type_I_tx; + uint8_t n_ff_used_tx; #endif #endif - /*------------- From this point, data is not cleared by bus reset -------------*/ + /*------------- From this point, data is not cleared by bus reset -------------*/ - // Buffer for control requests - uint8_t * ctrl_buf; - uint8_t ctrl_buf_sz; + // Buffer for control requests + uint8_t *ctrl_buf; + uint8_t ctrl_buf_sz; - // Current active alternate settings - uint8_t * alt_setting; // We need to save the current alternate setting this way, because it is possible that there are AS interfaces which do not have an EP! + // Current active alternate settings + uint8_t * + alt_setting; // We need to save the current alternate setting this way, because it is possible that there are AS interfaces which do not have an EP! - // EP Transfer buffers and FIFOs + // EP Transfer buffers and FIFOs #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - tu_fifo_t ep_out_ff; + tu_fifo_t ep_out_ff; #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING - tu_fifo_t ep_in_ff; + tu_fifo_t ep_in_ff; #endif - // Audio control interrupt buffer - no FIFO - 6 Bytes according to UAC 2 specification (p. 74) + // Audio control interrupt buffer - no FIFO - 6 Bytes according to UAC 2 specification (p. 74) #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP - CFG_TUSB_MEM_ALIGN uint8_t ep_int_buf[6]; + CFG_TUSB_MEM_ALIGN uint8_t ep_int_buf[6]; #endif - // Support FIFOs for software encoding and decoding + // Support FIFOs for software encoding and decoding #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - tu_fifo_t * rx_supp_ff; - uint8_t n_rx_supp_ff; - uint16_t rx_supp_ff_sz_max; + tu_fifo_t *rx_supp_ff; + uint8_t n_rx_supp_ff; + uint16_t rx_supp_ff_sz_max; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - uint8_t n_channels_per_ff_rx; + uint8_t n_channels_per_ff_rx; #endif #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - tu_fifo_t * tx_supp_ff; - uint8_t n_tx_supp_ff; - uint16_t tx_supp_ff_sz_max; + tu_fifo_t *tx_supp_ff; + uint8_t n_tx_supp_ff; + uint16_t tx_supp_ff_sz_max; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - uint8_t n_channels_per_ff_tx; + uint8_t n_channels_per_ff_tx; #endif #endif - // Linear buffer in case target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR the support FIFOs are used + // Linear buffer in case target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR the support FIFOs are used #if CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING) - uint8_t * lin_buf_out; -#define USE_LINEAR_BUFFER_RX 1 + uint8_t *lin_buf_out; +#define USE_LINEAR_BUFFER_RX 1 #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_ENCODING) - uint8_t * lin_buf_in; -#define USE_LINEAR_BUFFER_TX 1 + uint8_t *lin_buf_in; +#define USE_LINEAR_BUFFER_TX 1 #endif } audiod_function_t; #ifndef USE_LINEAR_BUFFER_TX -#define USE_LINEAR_BUFFER_TX 0 +#define USE_LINEAR_BUFFER_TX 0 #endif #ifndef USE_LINEAR_BUFFER_RX -#define USE_LINEAR_BUFFER_RX 0 +#define USE_LINEAR_BUFFER_RX 0 #endif -#define ITF_MEM_RESET_SIZE offsetof(audiod_function_t, ctrl_buf) +#define ITF_MEM_RESET_SIZE offsetof(audiod_function_t, ctrl_buf) //--------------------------------------------------------------------+ // WEAK FUNCTION STUBS //--------------------------------------------------------------------+ #if CFG_TUD_AUDIO_ENABLE_EP_IN -TU_ATTR_WEAK bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t func_id, uint8_t ep_in, uint8_t cur_alt_setting) { - (void) rhport; - (void) func_id; - (void) ep_in; - (void) cur_alt_setting; - return true; +TU_ATTR_WEAK bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t func_id, uint8_t ep_in, + uint8_t cur_alt_setting) +{ + (void)rhport; + (void)func_id; + (void)ep_in; + (void)cur_alt_setting; + return true; } -TU_ATTR_WEAK bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t func_id, uint8_t ep_in, uint8_t cur_alt_setting) { - (void) rhport; - (void) n_bytes_copied; - (void) func_id; - (void) ep_in; - (void) cur_alt_setting; - return true; +TU_ATTR_WEAK bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, + uint8_t func_id, uint8_t ep_in, + uint8_t cur_alt_setting) +{ + (void)rhport; + (void)n_bytes_copied; + (void)func_id; + (void)ep_in; + (void)cur_alt_setting; + return true; } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT -TU_ATTR_WEAK bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) { - (void) rhport; - (void) n_bytes_received; - (void) func_id; - (void) ep_out; - (void) cur_alt_setting; - return true; +TU_ATTR_WEAK bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, + uint8_t func_id, uint8_t ep_out, + uint8_t cur_alt_setting) +{ + (void)rhport; + (void)n_bytes_received; + (void)func_id; + (void)ep_out; + (void)cur_alt_setting; + return true; } -TU_ATTR_WEAK bool tud_audio_rx_done_post_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) { - (void) rhport; - (void) n_bytes_received; - (void) func_id; - (void) ep_out; - (void) cur_alt_setting; - return true; +TU_ATTR_WEAK bool tud_audio_rx_done_post_read_cb(uint8_t rhport, uint16_t n_bytes_received, + uint8_t func_id, uint8_t ep_out, + uint8_t cur_alt_setting) +{ + (void)rhport; + (void)n_bytes_received; + (void)func_id; + (void)ep_out; + (void)cur_alt_setting; + return true; } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -TU_ATTR_WEAK void tud_audio_fb_done_cb(uint8_t func_id) { - (void) func_id; +TU_ATTR_WEAK void tud_audio_fb_done_cb(uint8_t func_id) +{ + (void)func_id; } -TU_ATTR_WEAK void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, audio_feedback_params_t* feedback_param) { - (void) func_id; - (void) alt_itf; - feedback_param->method = AUDIO_FEEDBACK_METHOD_DISABLED; +TU_ATTR_WEAK void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, + audio_feedback_params_t *feedback_param) +{ + (void)func_id; + (void)alt_itf; + feedback_param->method = AUDIO_FEEDBACK_METHOD_DISABLED; } -TU_ATTR_WEAK bool tud_audio_feedback_format_correction_cb(uint8_t func_id) { - (void) func_id; - return CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION; +TU_ATTR_WEAK bool tud_audio_feedback_format_correction_cb(uint8_t func_id) +{ + (void)func_id; + return CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION; } #endif -TU_ATTR_WEAK TU_ATTR_FAST_FUNC void tud_audio_feedback_interval_isr(uint8_t func_id, uint32_t frame_number, uint8_t interval_shift) { - (void) func_id; - (void) frame_number; - (void) interval_shift; +TU_ATTR_WEAK TU_ATTR_FAST_FUNC void +tud_audio_feedback_interval_isr(uint8_t func_id, uint32_t frame_number, uint8_t interval_shift) +{ + (void)func_id; + (void)frame_number; + (void)interval_shift; } #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -TU_ATTR_WEAK void tud_audio_int_done_cb(uint8_t rhport) { - (void) rhport; +TU_ATTR_WEAK void tud_audio_int_done_cb(uint8_t rhport) +{ + (void)rhport; } #endif // Invoked when audio set interface request received -TU_ATTR_WEAK bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void) rhport; - (void) p_request; - return true; +TU_ATTR_WEAK bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +{ + (void)rhport; + (void)p_request; + return true; } // Invoked when audio set interface request received which closes an EP -TU_ATTR_WEAK bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void) rhport; - (void) p_request; - return true; +TU_ATTR_WEAK bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, + tusb_control_request_t const *p_request) +{ + (void)rhport; + (void)p_request; + return true; } // Invoked when audio class specific set request received for an EP -TU_ATTR_WEAK bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void) rhport; - (void) p_request; - (void) pBuff; - TU_LOG2(" No EP set request callback available!\r\n"); - return false; // In case no callback function is present or request can not be conducted we stall it +TU_ATTR_WEAK bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) +{ + (void)rhport; + (void)p_request; + (void)pBuff; + TU_LOG2(" No EP set request callback available!\r\n"); + return false; // In case no callback function is present or request can not be conducted we stall it } // Invoked when audio class specific set request received for an interface -TU_ATTR_WEAK bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void) rhport; - (void) p_request; - (void) pBuff; - TU_LOG2(" No interface set request callback available!\r\n"); - return false; // In case no callback function is present or request can not be conducted we stall it +TU_ATTR_WEAK bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff) +{ + (void)rhport; + (void)p_request; + (void)pBuff; + TU_LOG2(" No interface set request callback available!\r\n"); + return false; // In case no callback function is present or request can not be conducted we stall it } // Invoked when audio class specific set request received for an entity -TU_ATTR_WEAK bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void) rhport; - (void) p_request; - (void) pBuff; - TU_LOG2(" No entity set request callback available!\r\n"); - return false; // In case no callback function is present or request can not be conducted we stall it +TU_ATTR_WEAK bool +tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *pBuff) +{ + (void)rhport; + (void)p_request; + (void)pBuff; + TU_LOG2(" No entity set request callback available!\r\n"); + return false; // In case no callback function is present or request can not be conducted we stall it } // Invoked when audio class specific get request received for an EP -TU_ATTR_WEAK bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void) rhport; - (void) p_request; - TU_LOG2(" No EP get request callback available!\r\n"); - return false; // Stall +TU_ATTR_WEAK bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) +{ + (void)rhport; + (void)p_request; + TU_LOG2(" No EP get request callback available!\r\n"); + return false; // Stall } // Invoked when audio class specific get request received for an interface -TU_ATTR_WEAK bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void) rhport; - (void) p_request; - TU_LOG2(" No interface get request callback available!\r\n"); - return false; // Stall +TU_ATTR_WEAK bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +{ + (void)rhport; + (void)p_request; + TU_LOG2(" No interface get request callback available!\r\n"); + return false; // Stall } // Invoked when audio class specific get request received for an entity -TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void) rhport; - (void) p_request; - TU_LOG2(" No entity get request callback available!\r\n"); - return false; // Stall +TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, + tusb_control_request_t const *p_request) +{ + (void)rhport; + (void)p_request; + TU_LOG2(" No entity get request callback available!\r\n"); + return false; // Stall } //--------------------------------------------------------------------+ @@ -575,56 +639,64 @@ TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_reque tu_static CFG_TUD_MEM_SECTION audiod_function_t _audiod_fct[CFG_TUD_AUDIO]; #if CFG_TUD_AUDIO_ENABLE_EP_OUT -static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received); +static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t *audio, uint16_t n_bytes_received); #endif #if CFG_TUD_AUDIO_ENABLE_DECODING && CFG_TUD_AUDIO_ENABLE_EP_OUT -static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received); +static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t *audio, + uint16_t n_bytes_received); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN -static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t* audio); +static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t *audio); #endif #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN -static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audio); +static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t *audio); #endif -static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const * p_request); -static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * p_request); +static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const *p_request); +static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *p_request); -static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, uint8_t const **pp_desc_int); -static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t * audio, uint8_t *idxItf, uint8_t const **pp_desc_int); +static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, + uint8_t const **pp_desc_int); +static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t *audio, uint8_t *idxItf, + uint8_t const **pp_desc_int); static bool audiod_verify_entity_exists(uint8_t itf, uint8_t entityID, uint8_t *func_id); static bool audiod_verify_itf_exists(uint8_t itf, uint8_t *func_id); static bool audiod_verify_ep_exists(uint8_t ep, uint8_t *func_id); -static uint8_t audiod_get_audio_fct_idx(audiod_function_t * audio); +static uint8_t audiod_get_audio_fct_idx(audiod_function_t *audio); -#if (CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) -static void audiod_parse_for_AS_params(audiod_function_t* audio, uint8_t const * p_desc, uint8_t const * p_desc_end, uint8_t const as_itf); +#if (CFG_TUD_AUDIO_ENABLE_EP_IN && \ + (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || \ + (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) +static void audiod_parse_for_AS_params(audiod_function_t *audio, uint8_t const *p_desc, + uint8_t const *p_desc_end, uint8_t const as_itf); -static inline uint8_t tu_desc_subtype(void const* desc) +static inline uint8_t tu_desc_subtype(void const *desc) { - return ((uint8_t const*) desc)[2]; + return ((uint8_t const *)desc)[2]; } #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL -static bool audiod_calc_tx_packet_sz(audiod_function_t* audio); -static uint16_t audiod_tx_packet_size(const uint16_t* norminal_size, uint16_t data_count, uint16_t fifo_depth, uint16_t max_size); +static bool audiod_calc_tx_packet_sz(audiod_function_t *audio); +static uint16_t audiod_tx_packet_size(const uint16_t *norminal_size, uint16_t data_count, + uint16_t fifo_depth, uint16_t max_size); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -static bool audiod_set_fb_params_freq(audiod_function_t* audio, uint32_t sample_freq, uint32_t mclk_freq); -static void audiod_fb_fifo_count_update(audiod_function_t* audio, uint16_t lvl_new); +static bool audiod_set_fb_params_freq(audiod_function_t *audio, uint32_t sample_freq, + uint32_t mclk_freq); +static void audiod_fb_fifo_count_update(audiod_function_t *audio, uint16_t lvl_new); #endif bool tud_audio_n_mounted(uint8_t func_id) { - TU_VERIFY(func_id < CFG_TUD_AUDIO); - audiod_function_t* audio = &_audiod_fct[func_id]; + TU_VERIFY(func_id < CFG_TUD_AUDIO); + audiod_function_t *audio = &_audiod_fct[func_id]; - return audio->mounted; + return audio->mounted; } //--------------------------------------------------------------------+ @@ -635,26 +707,27 @@ bool tud_audio_n_mounted(uint8_t func_id) uint16_t tud_audio_n_available(uint8_t func_id) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_count(&_audiod_fct[func_id].ep_out_ff); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_count(&_audiod_fct[func_id].ep_out_ff); } -uint16_t tud_audio_n_read(uint8_t func_id, void* buffer, uint16_t bufsize) +uint16_t tud_audio_n_read(uint8_t func_id, void *buffer, uint16_t bufsize) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_read_n(&_audiod_fct[func_id].ep_out_ff, buffer, bufsize); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_read_n(&_audiod_fct[func_id].ep_out_ff, buffer, bufsize); } bool tud_audio_n_clear_ep_out_ff(uint8_t func_id) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_clear(&_audiod_fct[func_id].ep_out_ff); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_clear(&_audiod_fct[func_id].ep_out_ff); } -tu_fifo_t* tud_audio_n_get_ep_out_ff(uint8_t func_id) +tu_fifo_t *tud_audio_n_get_ep_out_ff(uint8_t func_id) { - if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) return &_audiod_fct[func_id].ep_out_ff; - return NULL; + if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) + return &_audiod_fct[func_id].ep_out_ff; + return NULL; } #endif @@ -663,26 +736,32 @@ tu_fifo_t* tud_audio_n_get_ep_out_ff(uint8_t func_id) // Delete all content in the support RX FIFOs bool tud_audio_n_clear_rx_support_ff(uint8_t func_id, uint8_t ff_idx) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff); - return tu_fifo_clear(&_audiod_fct[func_id].rx_supp_ff[ff_idx]); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && + ff_idx < _audiod_fct[func_id].n_rx_supp_ff); + return tu_fifo_clear(&_audiod_fct[func_id].rx_supp_ff[ff_idx]); } uint16_t tud_audio_n_available_support_ff(uint8_t func_id, uint8_t ff_idx) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff); - return tu_fifo_count(&_audiod_fct[func_id].rx_supp_ff[ff_idx]); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && + ff_idx < _audiod_fct[func_id].n_rx_supp_ff); + return tu_fifo_count(&_audiod_fct[func_id].rx_supp_ff[ff_idx]); } -uint16_t tud_audio_n_read_support_ff(uint8_t func_id, uint8_t ff_idx, void* buffer, uint16_t bufsize) +uint16_t tud_audio_n_read_support_ff(uint8_t func_id, uint8_t ff_idx, void *buffer, + uint16_t bufsize) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff); - return tu_fifo_read_n(&_audiod_fct[func_id].rx_supp_ff[ff_idx], buffer, bufsize); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && + ff_idx < _audiod_fct[func_id].n_rx_supp_ff); + return tu_fifo_read_n(&_audiod_fct[func_id].rx_supp_ff[ff_idx], buffer, bufsize); } -tu_fifo_t* tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx) +tu_fifo_t *tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx) { - if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff) return &_audiod_fct[func_id].rx_supp_ff[ff_idx]; - return NULL; + if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && + ff_idx < _audiod_fct[func_id].n_rx_supp_ff) + return &_audiod_fct[func_id].rx_supp_ff[ff_idx]; + return NULL; } #endif @@ -691,80 +770,80 @@ tu_fifo_t* tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx) #if CFG_TUD_AUDIO_ENABLE_EP_OUT -static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received) +static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t *audio, uint16_t n_bytes_received) { - uint8_t idxItf = 0; - uint8_t const *dummy2; - uint8_t idx_audio_fct = 0; + uint8_t idxItf = 0; + uint8_t const *dummy2; + uint8_t idx_audio_fct = 0; - idx_audio_fct = audiod_get_audio_fct_idx(audio); - TU_VERIFY(audiod_get_AS_interface_index(audio->ep_out_as_intf_num, audio, &idxItf, &dummy2)); + idx_audio_fct = audiod_get_audio_fct_idx(audio); + TU_VERIFY(audiod_get_AS_interface_index(audio->ep_out_as_intf_num, audio, &idxItf, &dummy2)); - // Call a weak callback here - a possibility for user to get informed an audio packet was received and data gets now loaded into EP FIFO (or decoded into support RX software FIFO) - TU_VERIFY(tud_audio_rx_done_pre_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, audio->alt_setting[idxItf])); + // Call a weak callback here - a possibility for user to get informed an audio packet was received and data gets now loaded into EP FIFO (or decoded into support RX software FIFO) + TU_VERIFY(tud_audio_rx_done_pre_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, + audio->alt_setting[idxItf])); #if CFG_TUD_AUDIO_ENABLE_DECODING - switch (audio->format_type_rx) - { + switch (audio->format_type_rx) { case AUDIO_FORMAT_TYPE_UNDEFINED: - // INDIVIDUAL DECODING PROCEDURE REQUIRED HERE! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n"); - TU_BREAKPOINT(); - break; + // INDIVIDUAL DECODING PROCEDURE REQUIRED HERE! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n"); + TU_BREAKPOINT(); + break; case AUDIO_FORMAT_TYPE_I: - switch (audio->format_type_I_rx) - { + switch (audio->format_type_I_rx) { case AUDIO_DATA_FORMAT_TYPE_I_PCM: - TU_VERIFY(audiod_decode_type_I_pcm(rhport, audio, n_bytes_received)); - break; + TU_VERIFY(audiod_decode_type_I_pcm(rhport, audio, n_bytes_received)); + break; default: - // DESIRED CFG_TUD_AUDIO_FORMAT_TYPE_I_RX NOT IMPLEMENTED! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_I_RX encoding not implemented!\r\n"); - TU_BREAKPOINT(); - break; - } - break; + // DESIRED CFG_TUD_AUDIO_FORMAT_TYPE_I_RX NOT IMPLEMENTED! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_I_RX encoding not implemented!\r\n"); + TU_BREAKPOINT(); + break; + } + break; - default: - // Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented!\r\n"); - TU_BREAKPOINT(); - break; - } + default: + // Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented!\r\n"); + TU_BREAKPOINT(); + break; + } - // Prepare for next transmission - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); + // Prepare for next transmission + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); #else #if USE_LINEAR_BUFFER_RX - // Data currently is in linear buffer, copy into EP OUT FIFO - TU_VERIFY(tu_fifo_write_n(&audio->ep_out_ff, audio->lin_buf_out, n_bytes_received)); + // Data currently is in linear buffer, copy into EP OUT FIFO + TU_VERIFY(tu_fifo_write_n(&audio->ep_out_ff, audio->lin_buf_out, n_bytes_received)); - // Schedule for next receive - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); + // Schedule for next receive + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); #else - // Data is already placed in EP FIFO, schedule for next receive - TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, audio->ep_out_sz), false); + // Data is already placed in EP FIFO, schedule for next receive + TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, audio->ep_out_sz), + false); #endif #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - if(audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) - { - audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->ep_out_ff)); - } + if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) { + audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->ep_out_ff)); + } #endif #endif - // Call a weak callback here - a possibility for user to get informed decoding was completed - TU_VERIFY(tud_audio_rx_done_post_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, audio->alt_setting[idxItf])); + // Call a weak callback here - a possibility for user to get informed decoding was completed + TU_VERIFY(tud_audio_rx_done_post_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, + audio->alt_setting[idxItf])); - return true; + return true; } #endif //CFG_TUD_AUDIO_ENABLE_EP_OUT @@ -775,105 +854,97 @@ static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t // Decoding according to 2.3.1.5 Audio Streams // Helper function -static inline void * audiod_interleaved_copy_bytes_fast_decode(uint16_t const nBytesPerSample, void * dst, const void * dst_end, void * src, uint8_t const n_ff_used) -{ - // Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2) - uint16_t * dst16 = dst; - uint16_t * src16 = src; - const uint16_t * dst_end16 = dst_end; - uint32_t * dst32 = dst; - uint32_t * src32 = src; - const uint32_t * dst_end32 = dst_end; - - if (nBytesPerSample == 1) - { - while(dst16 < dst_end16) - { - *dst16++ = *src16++; - src16 += n_ff_used - 1; - } - return src16; - } - else if (nBytesPerSample == 2) - { - while(dst32 < dst_end32) - { - *dst32++ = *src32++; - src32 += n_ff_used - 1; - } - return src32; - } - else if (nBytesPerSample == 3) - { - while(dst16 < dst_end16) - { - *dst16++ = *src16++; - *dst16++ = *src16++; - *dst16++ = *src16++; - src16 += 3 * (n_ff_used - 1); - } - return src16; - } - else // nBytesPerSample == 4 - { - while(dst32 < dst_end32) +static inline void *audiod_interleaved_copy_bytes_fast_decode(uint16_t const nBytesPerSample, + void *dst, const void *dst_end, + void *src, uint8_t const n_ff_used) +{ + // Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2) + uint16_t *dst16 = dst; + uint16_t *src16 = src; + const uint16_t *dst_end16 = dst_end; + uint32_t *dst32 = dst; + uint32_t *src32 = src; + const uint32_t *dst_end32 = dst_end; + + if (nBytesPerSample == 1) { + while (dst16 < dst_end16) { + *dst16++ = *src16++; + src16 += n_ff_used - 1; + } + return src16; + } else if (nBytesPerSample == 2) { + while (dst32 < dst_end32) { + *dst32++ = *src32++; + src32 += n_ff_used - 1; + } + return src32; + } else if (nBytesPerSample == 3) { + while (dst16 < dst_end16) { + *dst16++ = *src16++; + *dst16++ = *src16++; + *dst16++ = *src16++; + src16 += 3 * (n_ff_used - 1); + } + return src16; + } else // nBytesPerSample == 4 { - *dst32++ = *src32++; - *dst32++ = *src32++; - src32 += 2 * (n_ff_used - 1); + while (dst32 < dst_end32) { + *dst32++ = *src32++; + *dst32++ = *src32++; + src32 += 2 * (n_ff_used - 1); + } + return src32; } - return src32; - } } -static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received) +static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t *audio, + uint16_t n_bytes_received) { - (void) rhport; - - // Determine amount of samples - uint8_t const n_ff_used = audio->n_ff_used_rx; - uint16_t const nBytesPerFFToRead = n_bytes_received / n_ff_used; - uint8_t cnt_ff; - - // Decode - uint8_t * src; - uint8_t * dst_end; - - tu_fifo_buffer_info_t info; - - for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) - { - tu_fifo_get_write_info(&audio->rx_supp_ff[cnt_ff], &info); - - if (info.len_lin != 0) - { - info.len_lin = tu_min16(nBytesPerFFToRead, info.len_lin); - src = &audio->lin_buf_out[cnt_ff*audio->n_channels_per_ff_rx * audio->n_bytes_per_sample_rx]; - dst_end = info.ptr_lin + info.len_lin; - src = audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, info.ptr_lin, dst_end, src, n_ff_used); - - // Handle wrapped part of FIFO - info.len_wrap = tu_min16(nBytesPerFFToRead - info.len_lin, info.len_wrap); - if (info.len_wrap != 0) - { - dst_end = info.ptr_wrap + info.len_wrap; - audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, info.ptr_wrap, dst_end, src, n_ff_used); - } - tu_fifo_advance_write_pointer(&audio->rx_supp_ff[cnt_ff], info.len_lin + info.len_wrap); + (void)rhport; + + // Determine amount of samples + uint8_t const n_ff_used = audio->n_ff_used_rx; + uint16_t const nBytesPerFFToRead = n_bytes_received / n_ff_used; + uint8_t cnt_ff; + + // Decode + uint8_t *src; + uint8_t *dst_end; + + tu_fifo_buffer_info_t info; + + for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) { + tu_fifo_get_write_info(&audio->rx_supp_ff[cnt_ff], &info); + + if (info.len_lin != 0) { + info.len_lin = tu_min16(nBytesPerFFToRead, info.len_lin); + src = &audio->lin_buf_out[cnt_ff * audio->n_channels_per_ff_rx * + audio->n_bytes_per_sample_rx]; + dst_end = info.ptr_lin + info.len_lin; + src = audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, + info.ptr_lin, dst_end, src, n_ff_used); + + // Handle wrapped part of FIFO + info.len_wrap = tu_min16(nBytesPerFFToRead - info.len_lin, info.len_wrap); + if (info.len_wrap != 0) { + dst_end = info.ptr_wrap + info.len_wrap; + audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, + info.ptr_wrap, dst_end, src, n_ff_used); + } + tu_fifo_advance_write_pointer(&audio->rx_supp_ff[cnt_ff], info.len_lin + info.len_wrap); + } } - } - // Number of bytes should be a multiple of CFG_TUD_AUDIO_N_BYTES_PER_SAMPLE_RX * CFG_TUD_AUDIO_N_CHANNELS_RX but checking makes no sense - no way to correct it - // TU_VERIFY(cnt != n_bytes); + // Number of bytes should be a multiple of CFG_TUD_AUDIO_N_BYTES_PER_SAMPLE_RX * CFG_TUD_AUDIO_N_CHANNELS_RX but checking makes no sense - no way to correct it + // TU_VERIFY(cnt != n_bytes); #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - if(audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) - { - audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->rx_supp_ff[0])); - } + if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) { + audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->rx_supp_ff[0])); + } #endif - return true; + return true; } #endif //CFG_TUD_AUDIO_ENABLE_DECODING @@ -894,87 +965,96 @@ static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, u * \param[in] len: # of array elements to copy * \return Number of bytes actually written */ -uint16_t tud_audio_n_write(uint8_t func_id, const void * data, uint16_t len) +uint16_t tud_audio_n_write(uint8_t func_id, const void *data, uint16_t len) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_write_n(&_audiod_fct[func_id].ep_in_ff, data, len); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_write_n(&_audiod_fct[func_id].ep_in_ff, data, len); } -bool tud_audio_n_clear_ep_in_ff(uint8_t func_id) // Delete all content in the EP IN FIFO +bool tud_audio_n_clear_ep_in_ff(uint8_t func_id) // Delete all content in the EP IN FIFO { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_clear(&_audiod_fct[func_id].ep_in_ff); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_clear(&_audiod_fct[func_id].ep_in_ff); } -tu_fifo_t* tud_audio_n_get_ep_in_ff(uint8_t func_id) +tu_fifo_t *tud_audio_n_get_ep_in_ff(uint8_t func_id) { - if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) return &_audiod_fct[func_id].ep_in_ff; - return NULL; + if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) + return &_audiod_fct[func_id].ep_in_ff; + return NULL; } #endif #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN -uint16_t tud_audio_n_flush_tx_support_ff(uint8_t func_id) // Force all content in the support TX FIFOs to be written into linear buffer and schedule a transmit +uint16_t tud_audio_n_flush_tx_support_ff( + uint8_t + func_id) // Force all content in the support TX FIFOs to be written into linear buffer and schedule a transmit { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - audiod_function_t* audio = &_audiod_fct[func_id]; + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + audiod_function_t *audio = &_audiod_fct[func_id]; - uint16_t n_bytes_copied = tu_fifo_count(&audio->tx_supp_ff[0]); + uint16_t n_bytes_copied = tu_fifo_count(&audio->tx_supp_ff[0]); - TU_VERIFY(audiod_tx_done_cb(audio->rhport, audio)); + TU_VERIFY(audiod_tx_done_cb(audio->rhport, audio)); - n_bytes_copied -= tu_fifo_count(&audio->tx_supp_ff[0]); - n_bytes_copied = n_bytes_copied*audio->tx_supp_ff[0].item_size; + n_bytes_copied -= tu_fifo_count(&audio->tx_supp_ff[0]); + n_bytes_copied = n_bytes_copied * audio->tx_supp_ff[0].item_size; - return n_bytes_copied; + return n_bytes_copied; } bool tud_audio_n_clear_tx_support_ff(uint8_t func_id, uint8_t ff_idx) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff); - return tu_fifo_clear(&_audiod_fct[func_id].tx_supp_ff[ff_idx]); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && + ff_idx < _audiod_fct[func_id].n_tx_supp_ff); + return tu_fifo_clear(&_audiod_fct[func_id].tx_supp_ff[ff_idx]); } -uint16_t tud_audio_n_write_support_ff(uint8_t func_id, uint8_t ff_idx, const void * data, uint16_t len) +uint16_t tud_audio_n_write_support_ff(uint8_t func_id, uint8_t ff_idx, const void *data, + uint16_t len) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff); - return tu_fifo_write_n(&_audiod_fct[func_id].tx_supp_ff[ff_idx], data, len); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && + ff_idx < _audiod_fct[func_id].n_tx_supp_ff); + return tu_fifo_write_n(&_audiod_fct[func_id].tx_supp_ff[ff_idx], data, len); } -tu_fifo_t* tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx) +tu_fifo_t *tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx) { - if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff) return &_audiod_fct[func_id].tx_supp_ff[ff_idx]; - return NULL; + if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && + ff_idx < _audiod_fct[func_id].n_tx_supp_ff) + return &_audiod_fct[func_id].tx_supp_ff[ff_idx]; + return NULL; } #endif - #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP // If no interrupt transmit is pending bytes get written into buffer and a transmit is scheduled - once transmit completed tud_audio_int_done_cb() is called in inform user -bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t * data) +bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t *data) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - - TU_VERIFY(_audiod_fct[func_id].ep_int != 0); - - // We write directly into the EP's buffer - abort if previous transfer not complete - TU_VERIFY(usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int)); - - // Check length - if (tu_memcpy_s(_audiod_fct[func_id].ep_int_buf, sizeof(_audiod_fct[func_id].ep_int_buf), data, sizeof(audio_interrupt_data_t)) == 0) - { - // Schedule transmit - TU_ASSERT(usbd_edpt_xfer(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int, _audiod_fct[func_id].ep_int_buf, sizeof(_audiod_fct[func_id].ep_int_buf)), 0); - } else - { - // Release endpoint since we don't make any transfer - usbd_edpt_release(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int); - } + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + + TU_VERIFY(_audiod_fct[func_id].ep_int != 0); + + // We write directly into the EP's buffer - abort if previous transfer not complete + TU_VERIFY(usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int)); + + // Check length + if (tu_memcpy_s(_audiod_fct[func_id].ep_int_buf, sizeof(_audiod_fct[func_id].ep_int_buf), data, + sizeof(audio_interrupt_data_t)) == 0) { + // Schedule transmit + TU_ASSERT(usbd_edpt_xfer(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int, + _audiod_fct[func_id].ep_int_buf, + sizeof(_audiod_fct[func_id].ep_int_buf)), + 0); + } else { + // Release endpoint since we don't make any transfer + usbd_edpt_release(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int); + } - return true; + return true; } #endif @@ -983,85 +1063,89 @@ bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t * data) // n_bytes_copied - Informs caller how many bytes were loaded. In case n_bytes_copied = 0, a ZLP is scheduled to inform host no data is available for current frame. #if CFG_TUD_AUDIO_ENABLE_EP_IN -static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t * audio) +static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t *audio) { - uint8_t idxItf; - uint8_t const *dummy2; + uint8_t idxItf; + uint8_t const *dummy2; - uint8_t idx_audio_fct = audiod_get_audio_fct_idx(audio); - TU_VERIFY(audiod_get_AS_interface_index(audio->ep_in_as_intf_num, audio, &idxItf, &dummy2)); + uint8_t idx_audio_fct = audiod_get_audio_fct_idx(audio); + TU_VERIFY(audiod_get_AS_interface_index(audio->ep_in_as_intf_num, audio, &idxItf, &dummy2)); - // Only send something if current alternate interface is not 0 as in this case nothing is to be sent due to UAC2 specifications - if (audio->alt_setting[idxItf] == 0) return false; + // Only send something if current alternate interface is not 0 as in this case nothing is to be sent due to UAC2 specifications + if (audio->alt_setting[idxItf] == 0) + return false; - // Call a weak callback here - a possibility for user to get informed former TX was completed and data gets now loaded into EP in buffer (in case FIFOs are used) or - // if no FIFOs are used the user may use this call back to load its data into the EP IN buffer by use of tud_audio_n_write_ep_in_buffer(). - TU_VERIFY(tud_audio_tx_done_pre_load_cb(rhport, idx_audio_fct, audio->ep_in, audio->alt_setting[idxItf])); + // Call a weak callback here - a possibility for user to get informed former TX was completed and data gets now loaded into EP in buffer (in case FIFOs are used) or + // if no FIFOs are used the user may use this call back to load its data into the EP IN buffer by use of tud_audio_n_write_ep_in_buffer(). + TU_VERIFY(tud_audio_tx_done_pre_load_cb(rhport, idx_audio_fct, audio->ep_in, + audio->alt_setting[idxItf])); - // Send everything in ISO EP FIFO - uint16_t n_bytes_tx; + // Send everything in ISO EP FIFO + uint16_t n_bytes_tx; - // If support FIFOs are used, encode and schedule transmit + // If support FIFOs are used, encode and schedule transmit #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN - switch (audio->format_type_tx) - { + switch (audio->format_type_tx) { case AUDIO_FORMAT_TYPE_UNDEFINED: - // INDIVIDUAL ENCODING PROCEDURE REQUIRED HERE! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n"); - TU_BREAKPOINT(); - n_bytes_tx = 0; - break; + // INDIVIDUAL ENCODING PROCEDURE REQUIRED HERE! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n"); + TU_BREAKPOINT(); + n_bytes_tx = 0; + break; case AUDIO_FORMAT_TYPE_I: - switch (audio->format_type_I_tx) - { + switch (audio->format_type_I_tx) { case AUDIO_DATA_FORMAT_TYPE_I_PCM: - n_bytes_tx = audiod_encode_type_I_pcm(rhport, audio); - break; + n_bytes_tx = audiod_encode_type_I_pcm(rhport, audio); + break; default: - // YOUR ENCODING IS REQUIRED HERE! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_I_TX encoding not implemented!\r\n"); - TU_BREAKPOINT(); - n_bytes_tx = 0; - break; - } - break; + // YOUR ENCODING IS REQUIRED HERE! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_I_TX encoding not implemented!\r\n"); + TU_BREAKPOINT(); + n_bytes_tx = 0; + break; + } + break; - default: - // Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented!\r\n"); - TU_BREAKPOINT(); - n_bytes_tx = 0; - break; - } + default: + // Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented!\r\n"); + TU_BREAKPOINT(); + n_bytes_tx = 0; + break; + } - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx)); + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx)); #else - // No support FIFOs, if no linear buffer required schedule transmit, else put data into linear buffer and schedule + // No support FIFOs, if no linear buffer required schedule transmit, else put data into linear buffer and schedule #if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - // packet_sz_tx is based on total packet size, here we want size for each support buffer. - n_bytes_tx = audiod_tx_packet_size(audio->packet_sz_tx, tu_fifo_count(&audio->ep_in_ff), audio->ep_in_ff.depth, audio->ep_in_sz); + // packet_sz_tx is based on total packet size, here we want size for each support buffer. + n_bytes_tx = audiod_tx_packet_size(audio->packet_sz_tx, tu_fifo_count(&audio->ep_in_ff), + audio->ep_in_ff.depth, audio->ep_in_sz); #else - n_bytes_tx = tu_min16(tu_fifo_count(&audio->ep_in_ff), audio->ep_in_sz); // Limit up to max packet size, more can not be done for ISO + n_bytes_tx = + tu_min16(tu_fifo_count(&audio->ep_in_ff), + audio->ep_in_sz); // Limit up to max packet size, more can not be done for ISO #endif #if USE_LINEAR_BUFFER_TX - tu_fifo_read_n(&audio->ep_in_ff, audio->lin_buf_in, n_bytes_tx); - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx)); + tu_fifo_read_n(&audio->ep_in_ff, audio->lin_buf_in, n_bytes_tx); + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx)); #else - // Send everything in ISO EP FIFO - TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_in, &audio->ep_in_ff, n_bytes_tx)); + // Send everything in ISO EP FIFO + TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_in, &audio->ep_in_ff, n_bytes_tx)); #endif #endif - // Call a weak callback here - a possibility for user to get informed former TX was completed and how many bytes were loaded for the next frame - TU_VERIFY(tud_audio_tx_done_post_load_cb(rhport, n_bytes_tx, idx_audio_fct, audio->ep_in, audio->alt_setting[idxItf])); + // Call a weak callback here - a possibility for user to get informed former TX was completed and how many bytes were loaded for the next frame + TU_VERIFY(tud_audio_tx_done_post_load_cb(rhport, n_bytes_tx, idx_audio_fct, audio->ep_in, + audio->alt_setting[idxItf])); - return true; + return true; } #endif //CFG_TUD_AUDIO_ENABLE_EP_IN @@ -1085,130 +1169,124 @@ range [-1, +1) * */ // Helper function -static inline void * audiod_interleaved_copy_bytes_fast_encode(uint16_t const nBytesPerSample, void * src, const void * src_end, void * dst, uint8_t const n_ff_used) -{ - // Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2) - uint16_t * dst16 = dst; - uint16_t * src16 = src; - const uint16_t * src_end16 = src_end; - uint32_t * dst32 = dst; - uint32_t * src32 = src; - const uint32_t * src_end32 = src_end; - - if (nBytesPerSample == 1) - { - while(src16 < src_end16) - { - *dst16++ = *src16++; - dst16 += n_ff_used - 1; - } - return dst16; - } - else if (nBytesPerSample == 2) - { - while(src32 < src_end32) - { - *dst32++ = *src32++; - dst32 += n_ff_used - 1; - } - return dst32; - } - else if (nBytesPerSample == 3) - { - while(src16 < src_end16) - { - *dst16++ = *src16++; - *dst16++ = *src16++; - *dst16++ = *src16++; - dst16 += 3 * (n_ff_used - 1); - } - return dst16; - } - else // nBytesPerSample == 4 - { - while(src32 < src_end32) +static inline void *audiod_interleaved_copy_bytes_fast_encode(uint16_t const nBytesPerSample, + void *src, const void *src_end, + void *dst, uint8_t const n_ff_used) +{ + // Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2) + uint16_t *dst16 = dst; + uint16_t *src16 = src; + const uint16_t *src_end16 = src_end; + uint32_t *dst32 = dst; + uint32_t *src32 = src; + const uint32_t *src_end32 = src_end; + + if (nBytesPerSample == 1) { + while (src16 < src_end16) { + *dst16++ = *src16++; + dst16 += n_ff_used - 1; + } + return dst16; + } else if (nBytesPerSample == 2) { + while (src32 < src_end32) { + *dst32++ = *src32++; + dst32 += n_ff_used - 1; + } + return dst32; + } else if (nBytesPerSample == 3) { + while (src16 < src_end16) { + *dst16++ = *src16++; + *dst16++ = *src16++; + *dst16++ = *src16++; + dst16 += 3 * (n_ff_used - 1); + } + return dst16; + } else // nBytesPerSample == 4 { - *dst32++ = *src32++; - *dst32++ = *src32++; - dst32 += 2 * (n_ff_used - 1); + while (src32 < src_end32) { + *dst32++ = *src32++; + *dst32++ = *src32++; + dst32 += 2 * (n_ff_used - 1); + } + return dst32; } - return dst32; - } } -static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audio) +static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t *audio) { - // This function relies on the fact that the length of the support FIFOs was configured to be a multiple of the active sample size in bytes s.t. no sample is split within a wrap - // This is ensured within set_interface, where the FIFOs are reconfigured according to this size + // This function relies on the fact that the length of the support FIFOs was configured to be a multiple of the active sample size in bytes s.t. no sample is split within a wrap + // This is ensured within set_interface, where the FIFOs are reconfigured according to this size - // We encode directly into IN EP's linear buffer - abort if previous transfer not complete - TU_VERIFY(!usbd_edpt_busy(rhport, audio->ep_in)); + // We encode directly into IN EP's linear buffer - abort if previous transfer not complete + TU_VERIFY(!usbd_edpt_busy(rhport, audio->ep_in)); - // Determine amount of samples - uint8_t const n_ff_used = audio->n_ff_used_tx; - uint16_t nBytesPerFFToSend = tu_fifo_count(&audio->tx_supp_ff[0]); - uint8_t cnt_ff; + // Determine amount of samples + uint8_t const n_ff_used = audio->n_ff_used_tx; + uint16_t nBytesPerFFToSend = tu_fifo_count(&audio->tx_supp_ff[0]); + uint8_t cnt_ff; - for (cnt_ff = 1; cnt_ff < n_ff_used; cnt_ff++) - { - uint16_t const count = tu_fifo_count(&audio->tx_supp_ff[cnt_ff]); - if (count < nBytesPerFFToSend) - { - nBytesPerFFToSend = count; + for (cnt_ff = 1; cnt_ff < n_ff_used; cnt_ff++) { + uint16_t const count = tu_fifo_count(&audio->tx_supp_ff[cnt_ff]); + if (count < nBytesPerFFToSend) { + nBytesPerFFToSend = count; + } } - } #if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - const uint16_t norm_packet_sz_tx[3] = {audio->packet_sz_tx[0] / n_ff_used, - audio->packet_sz_tx[1] / n_ff_used, - audio->packet_sz_tx[2] / n_ff_used}; - // packet_sz_tx is based on total packet size, here we want size for each support buffer. - nBytesPerFFToSend = audiod_tx_packet_size(norm_packet_sz_tx, nBytesPerFFToSend, audio->tx_supp_ff[0].depth, audio->ep_in_sz / n_ff_used); - // Check if there is enough data - if (nBytesPerFFToSend == 0) return 0; + const uint16_t norm_packet_sz_tx[3] = { audio->packet_sz_tx[0] / n_ff_used, + audio->packet_sz_tx[1] / n_ff_used, + audio->packet_sz_tx[2] / n_ff_used }; + // packet_sz_tx is based on total packet size, here we want size for each support buffer. + nBytesPerFFToSend = audiod_tx_packet_size(norm_packet_sz_tx, nBytesPerFFToSend, + audio->tx_supp_ff[0].depth, + audio->ep_in_sz / n_ff_used); + // Check if there is enough data + if (nBytesPerFFToSend == 0) + return 0; #else - // Check if there is enough data - if (nBytesPerFFToSend == 0) return 0; - // Limit to maximum sample number - THIS IS A POSSIBLE ERROR SOURCE IF TOO MANY SAMPLE WOULD NEED TO BE SENT BUT CAN NOT! - nBytesPerFFToSend = tu_min16(nBytesPerFFToSend, audio->ep_in_sz / n_ff_used); - // Round to full number of samples (flooring) - uint16_t const nSlotSize = audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx; - nBytesPerFFToSend = (nBytesPerFFToSend / nSlotSize) * nSlotSize; -#endif - - // Encode - uint8_t * dst; - uint8_t * src_end; - - tu_fifo_buffer_info_t info; - - for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) - { - dst = &audio->lin_buf_in[cnt_ff*audio->n_channels_per_ff_tx*audio->n_bytes_per_sample_tx]; - - tu_fifo_get_read_info(&audio->tx_supp_ff[cnt_ff], &info); - - if (info.len_lin != 0) - { - info.len_lin = tu_min16(nBytesPerFFToSend, info.len_lin); // Limit up to desired length - src_end = (uint8_t *)info.ptr_lin + info.len_lin; - dst = audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, info.ptr_lin, src_end, dst, n_ff_used); - - // Limit up to desired length - info.len_wrap = tu_min16(nBytesPerFFToSend - info.len_lin, info.len_wrap); - - // Handle wrapped part of FIFO - if (info.len_wrap != 0) - { - src_end = (uint8_t *)info.ptr_wrap + info.len_wrap; - audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, info.ptr_wrap, src_end, dst, n_ff_used); - } + // Check if there is enough data + if (nBytesPerFFToSend == 0) + return 0; + // Limit to maximum sample number - THIS IS A POSSIBLE ERROR SOURCE IF TOO MANY SAMPLE WOULD NEED TO BE SENT BUT CAN NOT! + nBytesPerFFToSend = tu_min16(nBytesPerFFToSend, audio->ep_in_sz / n_ff_used); + // Round to full number of samples (flooring) + uint16_t const nSlotSize = audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx; + nBytesPerFFToSend = (nBytesPerFFToSend / nSlotSize) * nSlotSize; +#endif + + // Encode + uint8_t *dst; + uint8_t *src_end; + + tu_fifo_buffer_info_t info; + + for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) { + dst = + &audio->lin_buf_in[cnt_ff * audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx]; + + tu_fifo_get_read_info(&audio->tx_supp_ff[cnt_ff], &info); + + if (info.len_lin != 0) { + info.len_lin = tu_min16(nBytesPerFFToSend, info.len_lin); // Limit up to desired length + src_end = (uint8_t *)info.ptr_lin + info.len_lin; + dst = audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, + info.ptr_lin, src_end, dst, n_ff_used); + + // Limit up to desired length + info.len_wrap = tu_min16(nBytesPerFFToSend - info.len_lin, info.len_wrap); + + // Handle wrapped part of FIFO + if (info.len_wrap != 0) { + src_end = (uint8_t *)info.ptr_wrap + info.len_wrap; + audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, + info.ptr_wrap, src_end, dst, n_ff_used); + } - tu_fifo_advance_read_pointer(&audio->tx_supp_ff[cnt_ff], info.len_lin + info.len_wrap); + tu_fifo_advance_read_pointer(&audio->tx_supp_ff[cnt_ff], info.len_lin + info.len_wrap); + } } - } - return nBytesPerFFToSend * n_ff_used; + return nBytesPerFFToSend * n_ff_used; } #endif //CFG_TUD_AUDIO_ENABLE_ENCODING @@ -1217,36 +1295,36 @@ static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audi #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP static inline bool audiod_fb_send(audiod_function_t *audio) { - bool apply_correction = (TUSB_SPEED_FULL == tud_speed_get()) && audio->feedback.format_correction; - // Format the feedback value - if (apply_correction) - { - uint8_t * fb = (uint8_t *) &audio->feedback.send_buf; - - // For FS format is 10.14 - *(fb++) = (audio->feedback.value >> 2) & 0xFF; - *(fb++) = (audio->feedback.value >> 10) & 0xFF; - *(fb++) = (audio->feedback.value >> 18) & 0xFF; - *fb = 0; - } else - { - audio->feedback.send_buf = audio->feedback.value; - } - - // About feedback format on FS - // - // 3 variables: Format | packetSize | sendSize | Working OS: - // 16.16 4 4 Linux, Windows - // 16.16 4 3 Linux - // 16.16 3 4 Linux - // 16.16 3 3 Linux - // 10.14 4 4 Linux - // 10.14 4 3 Linux - // 10.14 3 4 Linux, OSX - // 10.14 3 3 Linux, OSX - // - // We send 3 bytes since sending packet larger than wMaxPacketSize is pretty ugly - return usbd_edpt_xfer(audio->rhport, audio->ep_fb, (uint8_t *) &audio->feedback.send_buf, apply_correction ? 3 : 4); + bool apply_correction = (TUSB_SPEED_FULL == tud_speed_get()) && + audio->feedback.format_correction; + // Format the feedback value + if (apply_correction) { + uint8_t *fb = (uint8_t *)&audio->feedback.send_buf; + + // For FS format is 10.14 + *(fb++) = (audio->feedback.value >> 2) & 0xFF; + *(fb++) = (audio->feedback.value >> 10) & 0xFF; + *(fb++) = (audio->feedback.value >> 18) & 0xFF; + *fb = 0; + } else { + audio->feedback.send_buf = audio->feedback.value; + } + + // About feedback format on FS + // + // 3 variables: Format | packetSize | sendSize | Working OS: + // 16.16 4 4 Linux, Windows + // 16.16 4 3 Linux + // 16.16 3 4 Linux + // 16.16 3 3 Linux + // 10.14 4 4 Linux + // 10.14 4 3 Linux + // 10.14 3 4 Linux, OSX + // 10.14 3 3 Linux, OSX + // + // We send 3 bytes since sending packet larger than wMaxPacketSize is pretty ugly + return usbd_edpt_xfer(audio->rhport, audio->ep_fb, (uint8_t *)&audio->feedback.send_buf, + apply_correction ? 3 : 4); } #endif @@ -1255,1647 +1333,1613 @@ static inline bool audiod_fb_send(audiod_function_t *audio) //--------------------------------------------------------------------+ void audiod_init(void) { - tu_memclr(_audiod_fct, sizeof(_audiod_fct)); + tu_memclr(_audiod_fct, sizeof(_audiod_fct)); - for(uint8_t i=0; ictrl_buf = ctrl_buf_1; - audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ; - break; + // Initialize control buffers + switch (i) { + case 0: + audio->ctrl_buf = ctrl_buf_1; + audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ; + break; #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ > 0 - case 1: - audio->ctrl_buf = ctrl_buf_2; - audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ; - break; + case 1: + audio->ctrl_buf = ctrl_buf_2; + audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ > 0 - case 2: - audio->ctrl_buf = ctrl_buf_3; - audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ; - break; + case 2: + audio->ctrl_buf = ctrl_buf_3; + audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ; + break; #endif - } + } - // Initialize active alternate interface buffers - switch (i) - { + // Initialize active alternate interface buffers + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_N_AS_INT > 0 - case 0: - audio->alt_setting = alt_setting_1; - break; + case 0: + audio->alt_setting = alt_setting_1; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_N_AS_INT > 0 - case 1: - audio->alt_setting = alt_setting_2; - break; + case 1: + audio->alt_setting = alt_setting_2; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_N_AS_INT > 0 - case 2: - audio->alt_setting = alt_setting_3; - break; + case 2: + audio->alt_setting = alt_setting_3; + break; #endif - } + } - // Initialize IN EP FIFO if required + // Initialize IN EP FIFO if required #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING - switch (i) - { + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 - case 0: - tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_1, CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ, 1, true); + case 0: + tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_1, + CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_1), NULL); + tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_1), NULL); #endif - break; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 - case 1: - tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_2, CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ, 1, true); + case 1: + tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_2, + CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_2), NULL); + tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_2), NULL); #endif - break; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 - case 2: - tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_3, CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ, 1, true); + case 2: + tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_3, + CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_3), NULL); + tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_3), NULL); #endif - break; + break; #endif - } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING - // Initialize linear buffers + // Initialize linear buffers #if USE_LINEAR_BUFFER_TX - switch (i) - { + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0 - case 0: - audio->lin_buf_in = lin_buf_in_1; - break; + case 0: + audio->lin_buf_in = lin_buf_in_1; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0 - case 1: - audio->lin_buf_in = lin_buf_in_2; - break; + case 1: + audio->lin_buf_in = lin_buf_in_2; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0 - case 2: - audio->lin_buf_in = lin_buf_in_3; - break; + case 2: + audio->lin_buf_in = lin_buf_in_3; + break; #endif - } + } #endif // USE_LINEAR_BUFFER_TX - // Initialize OUT EP FIFO if required + // Initialize OUT EP FIFO if required #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - switch (i) - { + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 - case 0: - tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_1, CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ, 1, true); + case 0: + tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_1, + CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_1)); + tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_1)); #endif - break; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 - case 1: - tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_2, CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ, 1, true); + case 1: + tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_2, + CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_2)); + tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_2)); #endif - break; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 - case 2: - tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_3, CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ, 1, true); + case 2: + tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_3, + CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_3)); + tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_3)); #endif - break; + break; #endif - } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - // Initialize linear buffers + // Initialize linear buffers #if USE_LINEAR_BUFFER_RX - switch (i) - { + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0 - case 0: - audio->lin_buf_out = lin_buf_out_1; - break; + case 0: + audio->lin_buf_out = lin_buf_out_1; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0 - case 1: - audio->lin_buf_out = lin_buf_out_2; - break; + case 1: + audio->lin_buf_out = lin_buf_out_2; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0 - case 2: - audio->lin_buf_out = lin_buf_out_3; - break; + case 2: + audio->lin_buf_out = lin_buf_out_3; + break; #endif - } + } #endif // USE_LINEAR_BUFFER_TX - // Initialize TX support FIFOs if required + // Initialize TX support FIFOs if required #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - switch (i) - { + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 - case 0: - audio->tx_supp_ff = tx_supp_ff_1; - audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; - audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++) - { - tu_fifo_config(&tx_supp_ff_1[cnt], tx_supp_ff_buf_1[cnt], CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ, 1, true); + case 0: + audio->tx_supp_ff = tx_supp_ff_1; + audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; + audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++) { + tu_fifo_config(&tx_supp_ff_1[cnt], tx_supp_ff_buf_1[cnt], + CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&tx_supp_ff_1[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_1[cnt]), NULL); + tu_fifo_config_mutex(&tx_supp_ff_1[cnt], + osal_mutex_create(&tx_supp_ff_mutex_wr_1[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 - case 1: - audio->tx_supp_ff = tx_supp_ff_2; - audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; - audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; cnt++) - { - tu_fifo_config(&tx_supp_ff_2[cnt], tx_supp_ff_buf_2[cnt], CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ, 1, true); + case 1: + audio->tx_supp_ff = tx_supp_ff_2; + audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; + audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; cnt++) { + tu_fifo_config(&tx_supp_ff_2[cnt], tx_supp_ff_buf_2[cnt], + CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&tx_supp_ff_2[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_2[cnt]), NULL); + tu_fifo_config_mutex(&tx_supp_ff_2[cnt], + osal_mutex_create(&tx_supp_ff_mutex_wr_2[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0 - case 2: - audio->tx_supp_ff = tx_supp_ff_3; - audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; - audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; cnt++) - { - tu_fifo_config(&tx_supp_ff_3[cnt], tx_supp_ff_buf_3[cnt], CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ, 1, true); + case 2: + audio->tx_supp_ff = tx_supp_ff_3; + audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; + audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; cnt++) { + tu_fifo_config(&tx_supp_ff_3[cnt], tx_supp_ff_buf_3[cnt], + CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&tx_supp_ff_3[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_3[cnt]), NULL); + tu_fifo_config_mutex(&tx_supp_ff_3[cnt], + osal_mutex_create(&tx_supp_ff_mutex_wr_3[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 - } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - // Set encoding parameters for Type_I formats + // Set encoding parameters for Type_I formats #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - switch (i) - { + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 - case 0: - audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX; - break; + case 0: + audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 - case 1: - audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_TX; - break; + case 1: + audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_TX; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0 - case 2: - audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_TX; - break; + case 2: + audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_TX; + break; #endif - } + } #endif // CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - // Initialize RX support FIFOs if required + // Initialize RX support FIFOs if required #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - switch (i) - { + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 - case 0: - audio->rx_supp_ff = rx_supp_ff_1; - audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; - audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; cnt++) - { - tu_fifo_config(&rx_supp_ff_1[cnt], rx_supp_ff_buf_1[cnt], CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ, 1, true); + case 0: + audio->rx_supp_ff = rx_supp_ff_1; + audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; + audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; cnt++) { + tu_fifo_config(&rx_supp_ff_1[cnt], rx_supp_ff_buf_1[cnt], + CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&rx_supp_ff_1[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_1[cnt]), NULL); + tu_fifo_config_mutex(&rx_supp_ff_1[cnt], + osal_mutex_create(&rx_supp_ff_mutex_rd_1[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 - case 1: - audio->rx_supp_ff = rx_supp_ff_2; - audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; - audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; cnt++) - { - tu_fifo_config(&rx_supp_ff_2[cnt], rx_supp_ff_buf_2[cnt], CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ, 1, true); + case 1: + audio->rx_supp_ff = rx_supp_ff_2; + audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; + audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; cnt++) { + tu_fifo_config(&rx_supp_ff_2[cnt], rx_supp_ff_buf_2[cnt], + CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&rx_supp_ff_2[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_2[cnt]), NULL); + tu_fifo_config_mutex(&rx_supp_ff_2[cnt], + osal_mutex_create(&rx_supp_ff_mutex_rd_2[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0 - case 2: - audio->rx_supp_ff = rx_supp_ff_3; - audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; - audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; cnt++) - { - tu_fifo_config(&rx_supp_ff_3[cnt], rx_supp_ff_buf_3[cnt], CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ, 1, true); + case 2: + audio->rx_supp_ff = rx_supp_ff_3; + audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; + audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; cnt++) { + tu_fifo_config(&rx_supp_ff_3[cnt], rx_supp_ff_buf_3[cnt], + CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&rx_supp_ff_3[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_3[cnt]), NULL); + tu_fifo_config_mutex(&rx_supp_ff_3[cnt], + osal_mutex_create(&rx_supp_ff_mutex_rd_3[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 - } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - // Set encoding parameters for Type_I formats + // Set encoding parameters for Type_I formats #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - switch (i) - { + switch (i) { #if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 - case 0: - audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_RX; - break; + case 0: + audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_RX; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 - case 1: - audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_RX; - break; + case 1: + audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_RX; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0 - case 2: - audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_RX; - break; + case 2: + audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_RX; + break; #endif - } + } #endif // CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - } + } } -bool audiod_deinit(void) { - return false; // TODO not implemented yet +bool audiod_deinit(void) +{ + return false; // TODO not implemented yet } void audiod_reset(uint8_t rhport) { - (void) rhport; + (void)rhport; - for(uint8_t i=0; iep_in_ff); + tu_fifo_clear(&audio->ep_in_ff); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - tu_fifo_clear(&audio->ep_out_ff); + tu_fifo_clear(&audio->ep_out_ff); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) - { - tu_fifo_clear(&audio->tx_supp_ff[cnt]); - } + for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) { + tu_fifo_clear(&audio->tx_supp_ff[cnt]); + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) - { - tu_fifo_clear(&audio->rx_supp_ff[cnt]); - } + for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) { + tu_fifo_clear(&audio->rx_supp_ff[cnt]); + } #endif - } + } } -uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) +uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - (void) max_len; - - TU_VERIFY ( TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass && - AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass); - - // Verify version is correct - this check can be omitted - TU_VERIFY(itf_desc->bInterfaceProtocol == AUDIO_INT_PROTOCOL_CODE_V2); + (void)max_len; - // Verify interrupt control EP is enabled if demanded by descriptor - TU_ASSERT(itf_desc->bNumEndpoints <= 1); // 0 or 1 EPs are allowed - if (itf_desc->bNumEndpoints == 1) - { - TU_ASSERT(CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP); - } + TU_VERIFY(TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass && + AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass); - // Alternate setting MUST be zero - this check can be omitted - TU_VERIFY(itf_desc->bAlternateSetting == 0); + // Verify version is correct - this check can be omitted + TU_VERIFY(itf_desc->bInterfaceProtocol == AUDIO_INT_PROTOCOL_CODE_V2); - // Find available audio driver interface - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) - { - if (!_audiod_fct[i].p_desc) - { - _audiod_fct[i].p_desc = (uint8_t const *)itf_desc; // Save pointer to AC descriptor which is by specification always the first one - _audiod_fct[i].rhport = rhport; + // Verify interrupt control EP is enabled if demanded by descriptor + TU_ASSERT(itf_desc->bNumEndpoints <= 1); // 0 or 1 EPs are allowed + if (itf_desc->bNumEndpoints == 1) { + TU_ASSERT(CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP); + } - // Setup descriptor lengths - switch (i) - { - case 0: - _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_1_DESC_LEN; - break; + // Alternate setting MUST be zero - this check can be omitted + TU_VERIFY(itf_desc->bAlternateSetting == 0); + + // Find available audio driver interface + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) { + if (!_audiod_fct[i].p_desc) { + _audiod_fct[i].p_desc = (uint8_t const *) + itf_desc; // Save pointer to AC descriptor which is by specification always the first one + _audiod_fct[i].rhport = rhport; + + // Setup descriptor lengths + switch (i) { + case 0: + _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_1_DESC_LEN; + break; #if CFG_TUD_AUDIO > 1 - case 1: - _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_2_DESC_LEN; - break; + case 1: + _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_2_DESC_LEN; + break; #endif #if CFG_TUD_AUDIO > 2 - case 2: - _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_3_DESC_LEN; - break; + case 2: + _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_3_DESC_LEN; + break; #endif - } + } #ifdef TUP_DCD_EDPT_ISO_ALLOC - { - #if CFG_TUD_AUDIO_ENABLE_EP_IN - uint8_t ep_in = 0; - uint16_t ep_in_size = 0; - #endif - - #if CFG_TUD_AUDIO_ENABLE_EP_OUT - uint8_t ep_out = 0; - uint16_t ep_out_size = 0; - #endif - - #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - uint8_t ep_fb = 0; - #endif - uint8_t const *p_desc = _audiod_fct[i].p_desc; - uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) - { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc; - if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Explicit feedback EP - if (desc_ep->bmAttributes.usage == 1) - { - ep_fb = desc_ep->bEndpointAddress; - } - #endif - // Data EP - if (desc_ep->bmAttributes.usage == 0) - { - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) - { - #if CFG_TUD_AUDIO_ENABLE_EP_IN - ep_in = desc_ep->bEndpointAddress; - ep_in_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_in_size); - #endif - } else - { - #if CFG_TUD_AUDIO_ENABLE_EP_OUT - ep_out = desc_ep->bEndpointAddress; - ep_out_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_out_size); - #endif - } - } +#if CFG_TUD_AUDIO_ENABLE_EP_IN + uint8_t ep_in = 0; + uint16_t ep_in_size = 0; +#endif - } - } +#if CFG_TUD_AUDIO_ENABLE_EP_OUT + uint8_t ep_out = 0; + uint16_t ep_out_size = 0; +#endif - p_desc = tu_desc_next(p_desc); - } +#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + uint8_t ep_fb = 0; +#endif + uint8_t const *p_desc = _audiod_fct[i].p_desc; + uint8_t const *p_desc_end = + p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { +#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + // Explicit feedback EP + if (desc_ep->bmAttributes.usage == 1) { + ep_fb = desc_ep->bEndpointAddress; + } +#endif + // Data EP + if (desc_ep->bmAttributes.usage == 0) { + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { +#if CFG_TUD_AUDIO_ENABLE_EP_IN + ep_in = desc_ep->bEndpointAddress; + ep_in_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_in_size); +#endif + } else { +#if CFG_TUD_AUDIO_ENABLE_EP_OUT + ep_out = desc_ep->bEndpointAddress; + ep_out_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_out_size); +#endif + } + } + } + } - #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (ep_in) - { - usbd_edpt_iso_alloc(rhport, ep_in, ep_in_size); - } - #endif + p_desc = tu_desc_next(p_desc); + } - #if CFG_TUD_AUDIO_ENABLE_EP_OUT - if (ep_out) - { - usbd_edpt_iso_alloc(rhport, ep_out, ep_out_size); - } - #endif +#if CFG_TUD_AUDIO_ENABLE_EP_IN + if (ep_in) { + usbd_edpt_iso_alloc(rhport, ep_in, ep_in_size); + } +#endif - #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - if (ep_fb) - { - usbd_edpt_iso_alloc(rhport, ep_fb, 4); - } - #endif - } +#if CFG_TUD_AUDIO_ENABLE_EP_OUT + if (ep_out) { + usbd_edpt_iso_alloc(rhport, ep_out, ep_out_size); + } +#endif + +#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + if (ep_fb) { + usbd_edpt_iso_alloc(rhport, ep_fb, 4); + } +#endif + } #endif // TUP_DCD_EDPT_ISO_ALLOC #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - { - uint8_t const *p_desc = _audiod_fct[i].p_desc; - uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) - { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc; - if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - if (desc_ep->bmAttributes.usage == 0) - { - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) - { - _audiod_fct[i].interval_tx = desc_ep->bInterval; + uint8_t const *p_desc = _audiod_fct[i].p_desc; + uint8_t const *p_desc_end = + p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { + if (desc_ep->bmAttributes.usage == 0) { + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { + _audiod_fct[i].interval_tx = desc_ep->bInterval; + } + } + } + } else if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && + tu_desc_subtype(p_desc) == AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL) { + if (tu_unaligned_read16(p_desc + 4) == AUDIO_TERM_TYPE_USB_STREAMING) { + _audiod_fct[i].bclock_id_tx = p_desc[8]; + } + } + p_desc = tu_desc_next(p_desc); } - } - } - } else - if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL) - { - if(tu_unaligned_read16(p_desc + 4) == AUDIO_TERM_TYPE_USB_STREAMING) - { - _audiod_fct[i].bclock_id_tx = p_desc[8]; } - } - p_desc = tu_desc_next(p_desc); - } - } #endif // CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP - { - uint8_t const *p_desc = _audiod_fct[i].p_desc; - uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - // For each endpoint - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) - { - tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const *) p_desc; - uint8_t const ep_addr = desc_ep->bEndpointAddress; - // If endpoint is input-direction and interrupt-type - if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.xfer == TUSB_XFER_INTERRUPT) { - // Store endpoint number and open endpoint - _audiod_fct[i].ep_int = ep_addr; - TU_ASSERT(usbd_edpt_open(_audiod_fct[i].rhport, desc_ep)); + uint8_t const *p_desc = _audiod_fct[i].p_desc; + uint8_t const *p_desc_end = + p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + // For each endpoint + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + uint8_t const ep_addr = desc_ep->bEndpointAddress; + // If endpoint is input-direction and interrupt-type + if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && + desc_ep->bmAttributes.xfer == TUSB_XFER_INTERRUPT) { + // Store endpoint number and open endpoint + _audiod_fct[i].ep_int = ep_addr; + TU_ASSERT(usbd_edpt_open(_audiod_fct[i].rhport, desc_ep)); + } + } + p_desc = tu_desc_next(p_desc); + } } - } - p_desc = tu_desc_next(p_desc); - } - } #endif - _audiod_fct[i].mounted = true; - break; + _audiod_fct[i].mounted = true; + break; + } } - } - // Verify we found a free one - TU_ASSERT( i < CFG_TUD_AUDIO ); + // Verify we found a free one + TU_ASSERT(i < CFG_TUD_AUDIO); - // This is all we need so far - the EPs are setup by a later set_interface request (as per UAC2 specification) - uint16_t drv_len = _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; // - TUD_AUDIO_DESC_IAD_LEN since tinyUSB already handles the IAD descriptor + // This is all we need so far - the EPs are setup by a later set_interface request (as per UAC2 specification) + uint16_t drv_len = + _audiod_fct[i].desc_length - + TUD_AUDIO_DESC_IAD_LEN; // - TUD_AUDIO_DESC_IAD_LEN since tinyUSB already handles the IAD descriptor - return drv_len; + return drv_len; } -static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const * p_request) +static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const *p_request) { - uint8_t const itf = tu_u16_low(p_request->wIndex); + uint8_t const itf = tu_u16_low(p_request->wIndex); - // Find index of audio streaming interface - uint8_t func_id, idxItf; - uint8_t const *dummy; + // Find index of audio streaming interface + uint8_t func_id, idxItf; + uint8_t const *dummy; - TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &dummy)); - TU_VERIFY(tud_control_xfer(rhport, p_request, &_audiod_fct[func_id].alt_setting[idxItf], 1)); + TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &dummy)); + TU_VERIFY(tud_control_xfer(rhport, p_request, &_audiod_fct[func_id].alt_setting[idxItf], 1)); - TU_LOG2(" Get itf: %u - current alt: %u\r\n", itf, _audiod_fct[func_id].alt_setting[idxItf]); + TU_LOG2(" Get itf: %u - current alt: %u\r\n", itf, _audiod_fct[func_id].alt_setting[idxItf]); - return true; + return true; } -static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * p_request) +static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Here we need to do the following: + // Here we need to do the following: - // 1. Find the audio driver assigned to the given interface to be set - // Since one audio driver interface has to be able to cover an unknown number of interfaces (AC, AS + its alternate settings), the best memory efficient way to solve this is to always search through the descriptors. - // The audio driver is mapped to an audio function by a reference pointer to the corresponding AC interface of this audio function which serves as a starting point for searching + // 1. Find the audio driver assigned to the given interface to be set + // Since one audio driver interface has to be able to cover an unknown number of interfaces (AC, AS + its alternate settings), the best memory efficient way to solve this is to always search through the descriptors. + // The audio driver is mapped to an audio function by a reference pointer to the corresponding AC interface of this audio function which serves as a starting point for searching - // 2. Close EPs which are currently open - // To do so it is not necessary to know the current active alternate interface since we already save the current EP addresses - we simply close them + // 2. Close EPs which are currently open + // To do so it is not necessary to know the current active alternate interface since we already save the current EP addresses - we simply close them - // 3. Open new EP + // 3. Open new EP - uint8_t const itf = tu_u16_low(p_request->wIndex); - uint8_t const alt = tu_u16_low(p_request->wValue); + uint8_t const itf = tu_u16_low(p_request->wIndex); + uint8_t const alt = tu_u16_low(p_request->wValue); - TU_LOG2(" Set itf: %u - alt: %u\r\n", itf, alt); + TU_LOG2(" Set itf: %u - alt: %u\r\n", itf, alt); - // Find index of audio streaming interface and index of interface - uint8_t func_id, idxItf; - uint8_t const *p_desc; - TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &p_desc)); + // Find index of audio streaming interface and index of interface + uint8_t func_id, idxItf; + uint8_t const *p_desc; + TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &p_desc)); - audiod_function_t* audio = &_audiod_fct[func_id]; + audiod_function_t *audio = &_audiod_fct[func_id]; - // Look if there is an EP to be closed - for this driver, there are only 3 possible EPs which may be closed (only AS related EPs can be closed, AC EP (if present) is always open) + // Look if there is an EP to be closed - for this driver, there are only 3 possible EPs which may be closed (only AS related EPs can be closed, AC EP (if present) is always open) #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (audio->ep_in_as_intf_num == itf) - { - audio->ep_in_as_intf_num = 0; - #ifndef TUP_DCD_EDPT_ISO_ALLOC - usbd_edpt_close(rhport, audio->ep_in); - #endif - - // Clear FIFOs, since data is no longer valid - #if !CFG_TUD_AUDIO_ENABLE_ENCODING - tu_fifo_clear(&audio->ep_in_ff); - #else - for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) - { - tu_fifo_clear(&audio->tx_supp_ff[cnt]); - } - #endif + if (audio->ep_in_as_intf_num == itf) { + audio->ep_in_as_intf_num = 0; +#ifndef TUP_DCD_EDPT_ISO_ALLOC + usbd_edpt_close(rhport, audio->ep_in); +#endif + + // Clear FIFOs, since data is no longer valid +#if !CFG_TUD_AUDIO_ENABLE_ENCODING + tu_fifo_clear(&audio->ep_in_ff); +#else + for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) { + tu_fifo_clear(&audio->tx_supp_ff[cnt]); + } +#endif - // Invoke callback - can be used to stop data sampling - TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request)); + // Invoke callback - can be used to stop data sampling + TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request)); - audio->ep_in = 0; // Necessary? + audio->ep_in = 0; // Necessary? - #if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - audio->packet_sz_tx[0] = 0; - audio->packet_sz_tx[1] = 0; - audio->packet_sz_tx[2] = 0; - #endif - } +#if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL + audio->packet_sz_tx[0] = 0; + audio->packet_sz_tx[1] = 0; + audio->packet_sz_tx[2] = 0; +#endif + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN #if CFG_TUD_AUDIO_ENABLE_EP_OUT - if (audio->ep_out_as_intf_num == itf) - { - audio->ep_out_as_intf_num = 0; - #ifndef TUP_DCD_EDPT_ISO_ALLOC - usbd_edpt_close(rhport, audio->ep_out); - #endif - - // Clear FIFOs, since data is no longer valid - #if !CFG_TUD_AUDIO_ENABLE_DECODING - tu_fifo_clear(&audio->ep_out_ff); - #else - for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) - { - tu_fifo_clear(&audio->rx_supp_ff[cnt]); + if (audio->ep_out_as_intf_num == itf) { + audio->ep_out_as_intf_num = 0; +#ifndef TUP_DCD_EDPT_ISO_ALLOC + usbd_edpt_close(rhport, audio->ep_out); +#endif + + // Clear FIFOs, since data is no longer valid +#if !CFG_TUD_AUDIO_ENABLE_DECODING + tu_fifo_clear(&audio->ep_out_ff); +#else + for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) { + tu_fifo_clear(&audio->rx_supp_ff[cnt]); + } +#endif + + // Invoke callback - can be used to stop data sampling + TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request)); + + audio->ep_out = 0; // Necessary? + + // Close corresponding feedback EP +#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP +#ifndef TUP_DCD_EDPT_ISO_ALLOC + usbd_edpt_close(rhport, audio->ep_fb); +#endif + audio->ep_fb = 0; + tu_memclr(&audio->feedback, sizeof(audio->feedback)); +#endif } - #endif - - // Invoke callback - can be used to stop data sampling - TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request)); - - audio->ep_out = 0; // Necessary? - - // Close corresponding feedback EP - #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - #ifndef TUP_DCD_EDPT_ISO_ALLOC - usbd_edpt_close(rhport, audio->ep_fb); - #endif - audio->ep_fb = 0; - tu_memclr(&audio->feedback, sizeof(audio->feedback)); - #endif - } #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT - // Save current alternative interface setting - audio->alt_setting[idxItf] = alt; + // Save current alternative interface setting + audio->alt_setting[idxItf] = alt; - // Open new EP if necessary - EPs are only to be closed or opened for AS interfaces - Look for AS interface with correct alternate interface - // Get pointer at end - uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Open new EP if necessary - EPs are only to be closed or opened for AS interfaces - Look for AS interface with correct alternate interface + // Get pointer at end + uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN; - // p_desc starts at required interface with alternate setting zero - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - // Find correct interface - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const * )p_desc)->bInterfaceNumber == itf && ((tusb_desc_interface_t const * )p_desc)->bAlternateSetting == alt) - { -#if (CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) - uint8_t const * p_desc_parse_for_params = p_desc; -#endif - // From this point forward follow the EP descriptors associated to the current alternate setting interface - Open EPs if necessary - uint8_t foundEPs = 0, nEps = ((tusb_desc_interface_t const * )p_desc)->bNumEndpoints; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (foundEPs < nEps && (p_desc_end - p_desc > 0)) - { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) - { - tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const *) p_desc; + // p_desc starts at required interface with alternate setting zero + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + // Find correct interface + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && + ((tusb_desc_interface_t const *)p_desc)->bInterfaceNumber == itf && + ((tusb_desc_interface_t const *)p_desc)->bAlternateSetting == alt) { +#if (CFG_TUD_AUDIO_ENABLE_EP_IN && \ + (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || \ + (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) + uint8_t const *p_desc_parse_for_params = p_desc; +#endif + // From this point forward follow the EP descriptors associated to the current alternate setting interface - Open EPs if necessary + uint8_t foundEPs = 0, nEps = ((tusb_desc_interface_t const *)p_desc)->bNumEndpoints; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (foundEPs < nEps && (p_desc_end - p_desc > 0)) { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; #ifdef TUP_DCD_EDPT_ISO_ALLOC - TU_ASSERT(usbd_edpt_iso_activate(rhport, desc_ep)); + TU_ASSERT(usbd_edpt_iso_activate(rhport, desc_ep)); #else - TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); + TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); #endif - uint8_t const ep_addr = desc_ep->bEndpointAddress; + uint8_t const ep_addr = desc_ep->bEndpointAddress; - //TODO: We need to set EP non busy since this is not taken care of right now in ep_close() - THIS IS A WORKAROUND! - usbd_edpt_clear_stall(rhport, ep_addr); + //TODO: We need to set EP non busy since this is not taken care of right now in ep_close() - THIS IS A WORKAROUND! + usbd_edpt_clear_stall(rhport, ep_addr); #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 0x00) // Check if usage is data EP - { - // Save address - audio->ep_in = ep_addr; - audio->ep_in_as_intf_num = itf; - audio->ep_in_sz = tu_edpt_packet_size(desc_ep); - - // If software encoding is enabled, parse for the corresponding parameters - doing this here means only AS interfaces with EPs get scanned for parameters - #if CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf); - - // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap - #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - const uint16_t active_fifo_depth = (uint16_t) ((audio->tx_supp_ff_sz_max / (audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx)) - * (audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx)); - for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) - { - tu_fifo_config(&audio->tx_supp_ff[cnt], audio->tx_supp_ff[cnt].buffer, active_fifo_depth, 1, true); - } - audio->n_ff_used_tx = audio->n_channels_tx / audio->n_channels_per_ff_tx; - TU_ASSERT( audio->n_ff_used_tx <= audio->n_tx_supp_ff ); - #endif - #endif - - // Schedule first transmit if alternate interface is not zero i.e. streaming is disabled - in case no sample data is available a ZLP is loaded - // It is necessary to trigger this here since the refill is done with an RX FIFO empty interrupt which can only trigger if something was in there - TU_VERIFY(audiod_tx_done_cb(rhport, &_audiod_fct[func_id])); - } + if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && + desc_ep->bmAttributes.usage == 0x00) // Check if usage is data EP + { + // Save address + audio->ep_in = ep_addr; + audio->ep_in_as_intf_num = itf; + audio->ep_in_sz = tu_edpt_packet_size(desc_ep); + + // If software encoding is enabled, parse for the corresponding parameters - doing this here means only AS interfaces with EPs get scanned for parameters +#if CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL + audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf); + + // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap +#if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING + const uint16_t active_fifo_depth = + (uint16_t)((audio->tx_supp_ff_sz_max / (audio->n_channels_per_ff_tx * + audio->n_bytes_per_sample_tx)) * + (audio->n_channels_per_ff_tx * + audio->n_bytes_per_sample_tx)); + for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) { + tu_fifo_config(&audio->tx_supp_ff[cnt], audio->tx_supp_ff[cnt].buffer, + active_fifo_depth, 1, true); + } + audio->n_ff_used_tx = audio->n_channels_tx / audio->n_channels_per_ff_tx; + TU_ASSERT(audio->n_ff_used_tx <= audio->n_tx_supp_ff); +#endif +#endif + + // Schedule first transmit if alternate interface is not zero i.e. streaming is disabled - in case no sample data is available a ZLP is loaded + // It is necessary to trigger this here since the refill is done with an RX FIFO empty interrupt which can only trigger if something was in there + TU_VERIFY(audiod_tx_done_cb(rhport, &_audiod_fct[func_id])); + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN #if CFG_TUD_AUDIO_ENABLE_EP_OUT - if (tu_edpt_dir(ep_addr) == TUSB_DIR_OUT) // Checking usage not necessary - { - // Save address - audio->ep_out = ep_addr; - audio->ep_out_as_intf_num = itf; - audio->ep_out_sz = tu_edpt_packet_size(desc_ep); + if (tu_edpt_dir(ep_addr) == TUSB_DIR_OUT) // Checking usage not necessary + { + // Save address + audio->ep_out = ep_addr; + audio->ep_out_as_intf_num = itf; + audio->ep_out_sz = tu_edpt_packet_size(desc_ep); - #if CFG_TUD_AUDIO_ENABLE_DECODING - audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf); +#if CFG_TUD_AUDIO_ENABLE_DECODING + audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf); - // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap - #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - const uint16_t active_fifo_depth = (audio->rx_supp_ff_sz_max / audio->n_bytes_per_sample_rx) * audio->n_bytes_per_sample_rx; - for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) - { - tu_fifo_config(&audio->rx_supp_ff[cnt], audio->rx_supp_ff[cnt].buffer, active_fifo_depth, 1, true); - } - audio->n_ff_used_rx = audio->n_channels_rx / audio->n_channels_per_ff_rx; - TU_ASSERT( audio->n_ff_used_rx <= audio->n_rx_supp_ff ); - #endif - #endif - - // Prepare for incoming data - #if USE_LINEAR_BUFFER_RX - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); - #else - TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, audio->ep_out_sz), false); - #endif - } - - #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 1) // Check if usage is explicit data feedback - { - audio->ep_fb = ep_addr; - audio->feedback.frame_shift = desc_ep->bInterval -1; - } - #endif + // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap +#if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING + const uint16_t active_fifo_depth = + (audio->rx_supp_ff_sz_max / audio->n_bytes_per_sample_rx) * + audio->n_bytes_per_sample_rx; + for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) { + tu_fifo_config(&audio->rx_supp_ff[cnt], audio->rx_supp_ff[cnt].buffer, + active_fifo_depth, 1, true); + } + audio->n_ff_used_rx = audio->n_channels_rx / audio->n_channels_per_ff_rx; + TU_ASSERT(audio->n_ff_used_rx <= audio->n_rx_supp_ff); +#endif +#endif + + // Prepare for incoming data +#if USE_LINEAR_BUFFER_RX + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, + audio->ep_out_sz), + false); +#else + TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, + audio->ep_out_sz), + false); +#endif + } + +#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && + desc_ep->bmAttributes.usage == + 1) // Check if usage is explicit data feedback + { + audio->ep_fb = ep_addr; + audio->feedback.frame_shift = desc_ep->bInterval - 1; + } +#endif #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT - foundEPs += 1; - } - p_desc = tu_desc_next(p_desc); - } + foundEPs += 1; + } + p_desc = tu_desc_next(p_desc); + } - TU_VERIFY(foundEPs == nEps); + TU_VERIFY(foundEPs == nEps); - // Invoke one callback for a final set interface - TU_VERIFY(tud_audio_set_itf_cb(rhport, p_request)); + // Invoke one callback for a final set interface + TU_VERIFY(tud_audio_set_itf_cb(rhport, p_request)); #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Prepare feedback computation if endpoint is available - if(audio->ep_fb != 0) - { - audio_feedback_params_t fb_param; - - tud_audio_feedback_params_cb(func_id, alt, &fb_param); - audio->feedback.compute_method = fb_param.method; - - if(TUSB_SPEED_FULL == tud_speed_get()) - audio->feedback.format_correction = tud_audio_feedback_format_correction_cb(func_id); - - // Minimal/Maximum value in 16.16 format for full speed (1ms per frame) or high speed (125 us per frame) - uint32_t const frame_div = (TUSB_SPEED_FULL == tud_speed_get()) ? 1000 : 8000; - audio->feedback.min_value = ((fb_param.sample_freq - 1)/frame_div) << 16; - audio->feedback.max_value = (fb_param.sample_freq/frame_div + 1) << 16; - - switch(fb_param.method) - { - case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: - case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT: - case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2: - audiod_set_fb_params_freq(audio, fb_param.sample_freq, fb_param.frequency.mclk_freq); - break; - - case AUDIO_FEEDBACK_METHOD_FIFO_COUNT: - { - // Initialize the threshold level to half filled - uint16_t fifo_lvl_thr; + // Prepare feedback computation if endpoint is available + if (audio->ep_fb != 0) { + audio_feedback_params_t fb_param; + + tud_audio_feedback_params_cb(func_id, alt, &fb_param); + audio->feedback.compute_method = fb_param.method; + + if (TUSB_SPEED_FULL == tud_speed_get()) + audio->feedback.format_correction = + tud_audio_feedback_format_correction_cb(func_id); + + // Minimal/Maximum value in 16.16 format for full speed (1ms per frame) or high speed (125 us per frame) + uint32_t const frame_div = (TUSB_SPEED_FULL == tud_speed_get()) ? 1000 : 8000; + audio->feedback.min_value = ((fb_param.sample_freq - 1) / frame_div) << 16; + audio->feedback.max_value = (fb_param.sample_freq / frame_div + 1) << 16; + + switch (fb_param.method) { + case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: + case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT: + case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2: + audiod_set_fb_params_freq(audio, fb_param.sample_freq, + fb_param.frequency.mclk_freq); + break; + + case AUDIO_FEEDBACK_METHOD_FIFO_COUNT: { + // Initialize the threshold level to half filled + uint16_t fifo_lvl_thr; #if CFG_TUD_AUDIO_ENABLE_DECODING - fifo_lvl_thr = tu_fifo_depth(&audio->rx_supp_ff[0]) / 2; + fifo_lvl_thr = tu_fifo_depth(&audio->rx_supp_ff[0]) / 2; #else - fifo_lvl_thr = tu_fifo_depth(&audio->ep_out_ff) / 2; -#endif - audio->feedback.compute.fifo_count.fifo_lvl_thr = fifo_lvl_thr; - audio->feedback.compute.fifo_count.fifo_lvl_avg = ((uint32_t)fifo_lvl_thr) << 16; - // Avoid 64bit division - uint32_t nominal = ((fb_param.sample_freq / 100) << 16) / (frame_div / 100); - audio->feedback.compute.fifo_count.nom_value = nominal; - audio->feedback.compute.fifo_count.rate_const[0] = (audio->feedback.max_value - nominal) / fifo_lvl_thr; - audio->feedback.compute.fifo_count.rate_const[1] = (nominal - audio->feedback.min_value) / fifo_lvl_thr; - // On HS feedback is more sensitive since packet size can vary every MSOF, could cause instability - if(tud_speed_get() == TUSB_SPEED_HIGH) { - audio->feedback.compute.fifo_count.rate_const[0] /= 8; - audio->feedback.compute.fifo_count.rate_const[1] /= 8; + fifo_lvl_thr = tu_fifo_depth(&audio->ep_out_ff) / 2; +#endif + audio->feedback.compute.fifo_count.fifo_lvl_thr = fifo_lvl_thr; + audio->feedback.compute.fifo_count.fifo_lvl_avg = ((uint32_t)fifo_lvl_thr) + << 16; + // Avoid 64bit division + uint32_t nominal = ((fb_param.sample_freq / 100) << 16) / (frame_div / 100); + audio->feedback.compute.fifo_count.nom_value = nominal; + audio->feedback.compute.fifo_count.rate_const[0] = + (audio->feedback.max_value - nominal) / fifo_lvl_thr; + audio->feedback.compute.fifo_count.rate_const[1] = + (nominal - audio->feedback.min_value) / fifo_lvl_thr; + // On HS feedback is more sensitive since packet size can vary every MSOF, could cause instability + if (tud_speed_get() == TUSB_SPEED_HIGH) { + audio->feedback.compute.fifo_count.rate_const[0] /= 8; + audio->feedback.compute.fifo_count.rate_const[1] /= 8; + } + } break; + + // nothing to do + default: + break; + } } - } - break; +#endif // CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // nothing to do - default: break; + // We are done - abort loop + break; } - } -#endif // CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // We are done - abort loop - break; + // Moving forward + p_desc = tu_desc_next(p_desc); } - // Moving forward - p_desc = tu_desc_next(p_desc); - } - #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Disable SOF interrupt if no driver has any enabled feedback EP - bool enable_sof = false; - for(uint8_t i=0; i < CFG_TUD_AUDIO; i++) - { - if (_audiod_fct[i].ep_fb != 0 && - (_audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED || - _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT || - _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2 )) - { - enable_sof = true; - break; + // Disable SOF interrupt if no driver has any enabled feedback EP + bool enable_sof = false; + for (uint8_t i = 0; i < CFG_TUD_AUDIO; i++) { + if (_audiod_fct[i].ep_fb != 0 && + (_audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED || + _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT || + _audiod_fct[i].feedback.compute_method == + AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2)) { + enable_sof = true; + break; + } } - } - usbd_sof_enable(rhport, SOF_CONSUMER_AUDIO, enable_sof); + usbd_sof_enable(rhport, SOF_CONSUMER_AUDIO, enable_sof); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - audiod_calc_tx_packet_sz(audio); + audiod_calc_tx_packet_sz(audio); #endif - tud_control_status(rhport, p_request); + tud_control_status(rhport, p_request); - return true; + return true; } // Invoked when class request DATA stage is finished. // return false to stall control EP (e.g Host send non-sense DATA) -static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const * p_request) +static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const *p_request) { - // Handle audio class specific set requests - if(p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) - { - uint8_t func_id; - - switch (p_request->bmRequestType_bit.recipient) - { - case TUSB_REQ_RCPT_INTERFACE: - { - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Handle audio class specific set requests + if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && + p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) { + uint8_t func_id; + + switch (p_request->bmRequestType_bit.recipient) { + case TUSB_REQ_RCPT_INTERFACE: { + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + if (entityID != 0) { + // Check if entity is present and get corresponding driver index + TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); + + // Invoke callback + return tud_audio_set_req_entity_cb(rhport, p_request, + _audiod_fct[func_id].ctrl_buf); + } else { + // Find index of audio driver structure and verify interface really exists + TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); + + // Invoke callback + return tud_audio_set_req_itf_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); + } + } break; - if (entityID != 0) - { - // Check if entity is present and get corresponding driver index - TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); + case TUSB_REQ_RCPT_ENDPOINT: { + uint8_t ep = TU_U16_LOW(p_request->wIndex); - // Invoke callback - return tud_audio_set_req_entity_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); - } - else - { - // Find index of audio driver structure and verify interface really exists - TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); + // Check if entity is present and get corresponding driver index + TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); - // Invoke callback - return tud_audio_set_req_itf_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); + // Invoke callback + return tud_audio_set_req_ep_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); + } break; + // Unknown/Unsupported recipient + default: + TU_BREAKPOINT(); + return false; } - } - break; - - case TUSB_REQ_RCPT_ENDPOINT: - { - uint8_t ep = TU_U16_LOW(p_request->wIndex); - - // Check if entity is present and get corresponding driver index - TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); - - // Invoke callback - return tud_audio_set_req_ep_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); - } - break; - // Unknown/Unsupported recipient - default: TU_BREAKPOINT(); return false; } - } - return true; + return true; } // Handle class control request // return false to stall control endpoint (e.g unsupported request) -static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const * p_request) +static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const *p_request) { - (void) rhport; + (void)rhport; - // Handle standard requests - standard set requests usually have no data stage so we also handle set requests here - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) - { - switch (p_request->bRequest) - { - case TUSB_REQ_GET_INTERFACE: - return audiod_get_interface(rhport, p_request); + // Handle standard requests - standard set requests usually have no data stage so we also handle set requests here + if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { + switch (p_request->bRequest) { + case TUSB_REQ_GET_INTERFACE: + return audiod_get_interface(rhport, p_request); - case TUSB_REQ_SET_INTERFACE: - return audiod_set_interface(rhport, p_request); + case TUSB_REQ_SET_INTERFACE: + return audiod_set_interface(rhport, p_request); - case TUSB_REQ_CLEAR_FEATURE: - return true; + case TUSB_REQ_CLEAR_FEATURE: + return true; - // Unknown/Unsupported request - default: TU_BREAKPOINT(); return false; + // Unknown/Unsupported request + default: + TU_BREAKPOINT(); + return false; + } } - } - // Handle class requests - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) - { - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t func_id; + // Handle class requests + if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t func_id; - // Conduct checks which depend on the recipient - switch (p_request->bmRequestType_bit.recipient) - { - case TUSB_REQ_RCPT_INTERFACE: - { - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Conduct checks which depend on the recipient + switch (p_request->bmRequestType_bit.recipient) { + case TUSB_REQ_RCPT_INTERFACE: { + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - // Verify if entity is present - if (entityID != 0) - { - // Find index of audio driver structure and verify entity really exists - TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); - - // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests - if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) - { - return tud_audio_get_req_entity_cb(rhport, p_request); - } - } - else - { - // Find index of audio driver structure and verify interface really exists - TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); - - // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests - if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) - { - return tud_audio_get_req_itf_cb(rhport, p_request); - } - } - } - break; + // Verify if entity is present + if (entityID != 0) { + // Find index of audio driver structure and verify entity really exists + TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); - case TUSB_REQ_RCPT_ENDPOINT: - { - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests + if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) { + return tud_audio_get_req_entity_cb(rhport, p_request); + } + } else { + // Find index of audio driver structure and verify interface really exists + TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); - // Find index of audio driver structure and verify EP really exists - TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); + // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests + if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) { + return tud_audio_get_req_itf_cb(rhport, p_request); + } + } + } break; + + case TUSB_REQ_RCPT_ENDPOINT: { + uint8_t ep = TU_U16_LOW(p_request->wIndex); + + // Find index of audio driver structure and verify EP really exists + TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); - // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests - if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) - { - return tud_audio_get_req_ep_cb(rhport, p_request); + // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests + if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) { + return tud_audio_get_req_ep_cb(rhport, p_request); + } + } break; + + // Unknown/Unsupported recipient + default: + TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); + TU_BREAKPOINT(); + return false; } - } - break; - // Unknown/Unsupported recipient - default: TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); TU_BREAKPOINT(); return false; + // If we end here, the received request is a set request - we schedule a receive for the data stage and return true here. We handle the rest later in audiod_control_complete() once the data stage was finished + TU_VERIFY(tud_control_xfer(rhport, p_request, _audiod_fct[func_id].ctrl_buf, + _audiod_fct[func_id].ctrl_buf_sz)); + return true; } - // If we end here, the received request is a set request - we schedule a receive for the data stage and return true here. We handle the rest later in audiod_control_complete() once the data stage was finished - TU_VERIFY(tud_control_xfer(rhport, p_request, _audiod_fct[func_id].ctrl_buf, _audiod_fct[func_id].ctrl_buf_sz)); - return true; - } - - // There went something wrong - unsupported control request type - TU_BREAKPOINT(); - return false; + // There went something wrong - unsupported control request type + TU_BREAKPOINT(); + return false; } -bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - if ( stage == CONTROL_STAGE_SETUP ) - { - return audiod_control_request(rhport, request); - } - else if ( stage == CONTROL_STAGE_DATA ) - { - return audiod_control_complete(rhport, request); - } + if (stage == CONTROL_STAGE_SETUP) { + return audiod_control_request(rhport, request); + } else if (stage == CONTROL_STAGE_DATA) { + return audiod_control_complete(rhport, request); + } - return true; + return true; } bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) result; - (void) xferred_bytes; + (void)result; + (void)xferred_bytes; - // Search for interface belonging to given end point address and proceed as required - for (uint8_t func_id = 0; func_id < CFG_TUD_AUDIO; func_id++) - { - audiod_function_t* audio = &_audiod_fct[func_id]; + // Search for interface belonging to given end point address and proceed as required + for (uint8_t func_id = 0; func_id < CFG_TUD_AUDIO; func_id++) { + audiod_function_t *audio = &_audiod_fct[func_id]; #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP - // Data transmission of control interrupt finished - if (audio->ep_int == ep_addr) - { - // According to USB2 specification, maximum payload of interrupt EP is 8 bytes on low speed, 64 bytes on full speed, and 1024 bytes on high speed (but only if an alternate interface other than 0 is used - see specification p. 49) - // In case there is nothing to send we have to return a NAK - this is taken care of by PHY ??? - // In case of an erroneous transmission a retransmission is conducted - this is taken care of by PHY ??? + // Data transmission of control interrupt finished + if (audio->ep_int == ep_addr) { + // According to USB2 specification, maximum payload of interrupt EP is 8 bytes on low speed, 64 bytes on full speed, and 1024 bytes on high speed (but only if an alternate interface other than 0 is used - see specification p. 49) + // In case there is nothing to send we have to return a NAK - this is taken care of by PHY ??? + // In case of an erroneous transmission a retransmission is conducted - this is taken care of by PHY ??? - // I assume here, that things above are handled by PHY - // All transmission is done - what remains to do is to inform job was completed + // I assume here, that things above are handled by PHY + // All transmission is done - what remains to do is to inform job was completed - tud_audio_int_done_cb(rhport); - return true; - } + tud_audio_int_done_cb(rhport); + return true; + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN - // Data transmission of audio packet finished - if (audio->ep_in == ep_addr && audio->alt_setting != 0) - { - // USB 2.0, section 5.6.4, third paragraph, states "An isochronous endpoint must specify its required bus access period. However, an isochronous endpoint must be prepared to handle poll rates faster than the one specified." - // That paragraph goes on to say "An isochronous IN endpoint must return a zero-length packet whenever data is requested at a faster interval than the specified interval and data is not available." - // This can only be solved reliably if we load a ZLP after every IN transmission since we can not say if the host requests samples earlier than we declared! Once all samples are collected we overwrite the loaded ZLP. + // Data transmission of audio packet finished + if (audio->ep_in == ep_addr && audio->alt_setting != 0) { + // USB 2.0, section 5.6.4, third paragraph, states "An isochronous endpoint must specify its required bus access period. However, an isochronous endpoint must be prepared to handle poll rates faster than the one specified." + // That paragraph goes on to say "An isochronous IN endpoint must return a zero-length packet whenever data is requested at a faster interval than the specified interval and data is not available." + // This can only be solved reliably if we load a ZLP after every IN transmission since we can not say if the host requests samples earlier than we declared! Once all samples are collected we overwrite the loaded ZLP. - // Check if there is data to load into EPs buffer - if not load it with ZLP - // Be aware - we as a device are not able to know if the host polls for data with a faster rate as we stated this in the descriptors. Therefore we always have to put something into the EPs buffer. However, once we did that, there is no way of aborting this or replacing what we put into the buffer before! - // This is the only place where we can fill something into the EPs buffer! + // Check if there is data to load into EPs buffer - if not load it with ZLP + // Be aware - we as a device are not able to know if the host polls for data with a faster rate as we stated this in the descriptors. Therefore we always have to put something into the EPs buffer. However, once we did that, there is no way of aborting this or replacing what we put into the buffer before! + // This is the only place where we can fill something into the EPs buffer! - // Load new data - TU_VERIFY(audiod_tx_done_cb(rhport, audio)); + // Load new data + TU_VERIFY(audiod_tx_done_cb(rhport, audio)); - // Transmission of ZLP is done by audiod_tx_done_cb() - return true; - } + // Transmission of ZLP is done by audiod_tx_done_cb() + return true; + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT - // New audio packet received - if (audio->ep_out == ep_addr) - { - TU_VERIFY(audiod_rx_done_cb(rhport, audio, (uint16_t) xferred_bytes)); - return true; - } - + // New audio packet received + if (audio->ep_out == ep_addr) { + TU_VERIFY(audiod_rx_done_cb(rhport, audio, (uint16_t)xferred_bytes)); + return true; + } #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Transmission of feedback EP finished - if (audio->ep_fb == ep_addr) - { - tud_audio_fb_done_cb(func_id); - - // Schedule a transmit with the new value if EP is not busy - if (usbd_edpt_claim(rhport, audio->ep_fb)) - { - // Schedule next transmission - value is changed bytud_audio_n_fb_set() in the meantime or the old value gets sent - return audiod_fb_send(audio); - } - } + // Transmission of feedback EP finished + if (audio->ep_fb == ep_addr) { + tud_audio_fb_done_cb(func_id); + + // Schedule a transmit with the new value if EP is not busy + if (usbd_edpt_claim(rhport, audio->ep_fb)) { + // Schedule next transmission - value is changed bytud_audio_n_fb_set() in the meantime or the old value gets sent + return audiod_fb_send(audio); + } + } #endif #endif - } + } - return false; + return false; } #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -static bool audiod_set_fb_params_freq(audiod_function_t* audio, uint32_t sample_freq, uint32_t mclk_freq) +static bool audiod_set_fb_params_freq(audiod_function_t *audio, uint32_t sample_freq, + uint32_t mclk_freq) { - // Check if frame interval is within sane limits - // The interval value n_frames was taken from the descriptors within audiod_set_interface() - - // n_frames_min is ceil(2^10 * f_s / f_m) for full speed and ceil(2^13 * f_s / f_m) for high speed - // this lower limit ensures the measures feedback value has sufficient precision - uint32_t const k = (TUSB_SPEED_FULL == tud_speed_get()) ? 10 : 13; - uint32_t const n_frame = (1UL << audio->feedback.frame_shift); - - if ( (((1UL << k) * sample_freq / mclk_freq) + 1) > n_frame ) - { - TU_LOG1(" UAC2 feedback interval too small\r\n"); TU_BREAKPOINT(); return false; - } + // Check if frame interval is within sane limits + // The interval value n_frames was taken from the descriptors within audiod_set_interface() + + // n_frames_min is ceil(2^10 * f_s / f_m) for full speed and ceil(2^13 * f_s / f_m) for high speed + // this lower limit ensures the measures feedback value has sufficient precision + uint32_t const k = (TUSB_SPEED_FULL == tud_speed_get()) ? 10 : 13; + uint32_t const n_frame = (1UL << audio->feedback.frame_shift); + + if ((((1UL << k) * sample_freq / mclk_freq) + 1) > n_frame) { + TU_LOG1(" UAC2 feedback interval too small\r\n"); + TU_BREAKPOINT(); + return false; + } - // Check if parameters really allow for a power of two division - if ((mclk_freq % sample_freq) == 0 && tu_is_power_of_two(mclk_freq / sample_freq)) - { - audio->feedback.compute_method = AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2; - audio->feedback.compute.power_of_2 = 16 - (audio->feedback.frame_shift - 1) - tu_log2(mclk_freq / sample_freq); - } - else if ( audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT) - { - audio->feedback.compute.float_const = (float)sample_freq / mclk_freq * (1UL << (16 - (audio->feedback.frame_shift - 1))); - } - else - { - audio->feedback.compute.fixed.sample_freq = sample_freq; - audio->feedback.compute.fixed.mclk_freq = mclk_freq; - } + // Check if parameters really allow for a power of two division + if ((mclk_freq % sample_freq) == 0 && tu_is_power_of_two(mclk_freq / sample_freq)) { + audio->feedback.compute_method = AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2; + audio->feedback.compute.power_of_2 = + 16 - (audio->feedback.frame_shift - 1) - tu_log2(mclk_freq / sample_freq); + } else if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT) { + audio->feedback.compute.float_const = + (float)sample_freq / mclk_freq * (1UL << (16 - (audio->feedback.frame_shift - 1))); + } else { + audio->feedback.compute.fixed.sample_freq = sample_freq; + audio->feedback.compute.fixed.mclk_freq = mclk_freq; + } - return true; + return true; } -static void audiod_fb_fifo_count_update(audiod_function_t* audio, uint16_t lvl_new) +static void audiod_fb_fifo_count_update(audiod_function_t *audio, uint16_t lvl_new) { - /* Low-pass (averaging) filter */ - uint32_t lvl = audio->feedback.compute.fifo_count.fifo_lvl_avg; - lvl = (uint32_t)(((uint64_t)lvl * 63 + ((uint32_t)lvl_new << 16)) >> 6); - audio->feedback.compute.fifo_count.fifo_lvl_avg = lvl; + /* Low-pass (averaging) filter */ + uint32_t lvl = audio->feedback.compute.fifo_count.fifo_lvl_avg; + lvl = (uint32_t)(((uint64_t)lvl * 63 + ((uint32_t)lvl_new << 16)) >> 6); + audio->feedback.compute.fifo_count.fifo_lvl_avg = lvl; - uint32_t const ff_lvl = lvl >> 16; - uint16_t const ff_thr = audio->feedback.compute.fifo_count.fifo_lvl_thr; - uint16_t const *rate = audio->feedback.compute.fifo_count.rate_const; + uint32_t const ff_lvl = lvl >> 16; + uint16_t const ff_thr = audio->feedback.compute.fifo_count.fifo_lvl_thr; + uint16_t const *rate = audio->feedback.compute.fifo_count.rate_const; - uint32_t feedback; + uint32_t feedback; - if(ff_lvl < ff_thr) - { - feedback = audio->feedback.compute.fifo_count.nom_value + (ff_thr - ff_lvl) * rate[0]; - } else - { - feedback = audio->feedback.compute.fifo_count.nom_value - (ff_lvl - ff_thr) * rate[1]; - } + if (ff_lvl < ff_thr) { + feedback = audio->feedback.compute.fifo_count.nom_value + (ff_thr - ff_lvl) * rate[0]; + } else { + feedback = audio->feedback.compute.fifo_count.nom_value - (ff_lvl - ff_thr) * rate[1]; + } - if ( feedback > audio->feedback.max_value ) feedback = audio->feedback.max_value; - if ( feedback < audio->feedback.min_value ) feedback = audio->feedback.min_value; - audio->feedback.value = feedback; + if (feedback > audio->feedback.max_value) + feedback = audio->feedback.max_value; + if (feedback < audio->feedback.min_value) + feedback = audio->feedback.min_value; + audio->feedback.value = feedback; - // Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value - if (usbd_edpt_claim(audio->rhport, audio->ep_fb)) - { - audiod_fb_send(audio); - } + // Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value + if (usbd_edpt_claim(audio->rhport, audio->ep_fb)) { + audiod_fb_send(audio); + } } uint32_t tud_audio_feedback_update(uint8_t func_id, uint32_t cycles) { - audiod_function_t* audio = &_audiod_fct[func_id]; - uint32_t feedback; + audiod_function_t *audio = &_audiod_fct[func_id]; + uint32_t feedback; - switch (audio->feedback.compute_method) - { + switch (audio->feedback.compute_method) { case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2: - feedback = (cycles << audio->feedback.compute.power_of_2); - break; + feedback = (cycles << audio->feedback.compute.power_of_2); + break; case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT: - feedback = (uint32_t) ((float) cycles * audio->feedback.compute.float_const); - break; + feedback = (uint32_t)((float)cycles * audio->feedback.compute.float_const); + break; - case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: - { - uint64_t fb64 = (((uint64_t) cycles) * audio->feedback.compute.fixed.sample_freq) << (16 - (audio->feedback.frame_shift - 1)); - feedback = (uint32_t) (fb64 / audio->feedback.compute.fixed.mclk_freq); - } - break; + case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: { + uint64_t fb64 = (((uint64_t)cycles) * audio->feedback.compute.fixed.sample_freq) + << (16 - (audio->feedback.frame_shift - 1)); + feedback = (uint32_t)(fb64 / audio->feedback.compute.fixed.mclk_freq); + } break; - default: return 0; - } + default: + return 0; + } - // For Windows: https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/usb-2-0-audio-drivers - // The size of isochronous packets created by the device must be within the limits specified in FMT-2.0 section 2.3.1.1. - // This means that the deviation of actual packet size from nominal size must not exceed +/- one audio slot - // (audio slot = channel count samples). - if ( feedback > audio->feedback.max_value ) feedback = audio->feedback.max_value; - if ( feedback < audio->feedback.min_value ) feedback = audio->feedback.min_value; + // For Windows: https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/usb-2-0-audio-drivers + // The size of isochronous packets created by the device must be within the limits specified in FMT-2.0 section 2.3.1.1. + // This means that the deviation of actual packet size from nominal size must not exceed +/- one audio slot + // (audio slot = channel count samples). + if (feedback > audio->feedback.max_value) + feedback = audio->feedback.max_value; + if (feedback < audio->feedback.min_value) + feedback = audio->feedback.min_value; - tud_audio_n_fb_set(func_id, feedback); + tud_audio_n_fb_set(func_id, feedback); - return feedback; + return feedback; } bool tud_audio_n_fb_set(uint8_t func_id, uint32_t feedback) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - _audiod_fct[func_id].feedback.value = feedback; + _audiod_fct[func_id].feedback.value = feedback; - // Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value - if (usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_fb)) - { - return audiod_fb_send(&_audiod_fct[func_id]); - } + // Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value + if (usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_fb)) { + return audiod_fb_send(&_audiod_fct[func_id]); + } - return true; + return true; } #endif -TU_ATTR_FAST_FUNC void audiod_sof_isr (uint8_t rhport, uint32_t frame_count) +TU_ATTR_FAST_FUNC void audiod_sof_isr(uint8_t rhport, uint32_t frame_count) { - (void) rhport; - (void) frame_count; + (void)rhport; + (void)frame_count; #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Determine feedback value - The feedback method is described in 5.12.4.2 of the USB 2.0 spec - // Boiled down, the feedback value Ff = n_samples / (micro)frame. - // Since an accuracy of less than 1 Sample / second is desired, at least n_frames = ceil(2^K * f_s / f_m) frames need to be measured, where K = 10 for full speed and K = 13 for high speed, f_s is the sampling frequency e.g. 48 kHz and f_m is the cpu clock frequency e.g. 100 MHz (or any other master clock whose clock count is available and locked to f_s) - // The update interval in the (4.10.2.1) Feedback Endpoint Descriptor must be less or equal to 2^(K - P), where P = min( ceil(log2(f_m / f_s)), K) - // feedback = n_cycles / n_frames * f_s / f_m in 16.16 format, where n_cycles are the number of main clock cycles within fb_n_frames - - // Iterate over audio functions and set feedback value - for(uint8_t i=0; i < CFG_TUD_AUDIO; i++) - { - audiod_function_t* audio = &_audiod_fct[i]; - - if (audio->ep_fb != 0) - { - // HS shift need to be adjusted since SOF event is generated for frame only - uint8_t const hs_adjust = (TUSB_SPEED_HIGH == tud_speed_get()) ? 3 : 0; - uint32_t const interval = 1UL << (audio->feedback.frame_shift - hs_adjust); - if ( 0 == (frame_count & (interval-1)) ) - { - tud_audio_feedback_interval_isr(i, frame_count, audio->feedback.frame_shift); - } + // Determine feedback value - The feedback method is described in 5.12.4.2 of the USB 2.0 spec + // Boiled down, the feedback value Ff = n_samples / (micro)frame. + // Since an accuracy of less than 1 Sample / second is desired, at least n_frames = ceil(2^K * f_s / f_m) frames need to be measured, where K = 10 for full speed and K = 13 for high speed, f_s is the sampling frequency e.g. 48 kHz and f_m is the cpu clock frequency e.g. 100 MHz (or any other master clock whose clock count is available and locked to f_s) + // The update interval in the (4.10.2.1) Feedback Endpoint Descriptor must be less or equal to 2^(K - P), where P = min( ceil(log2(f_m / f_s)), K) + // feedback = n_cycles / n_frames * f_s / f_m in 16.16 format, where n_cycles are the number of main clock cycles within fb_n_frames + + // Iterate over audio functions and set feedback value + for (uint8_t i = 0; i < CFG_TUD_AUDIO; i++) { + audiod_function_t *audio = &_audiod_fct[i]; + + if (audio->ep_fb != 0) { + // HS shift need to be adjusted since SOF event is generated for frame only + uint8_t const hs_adjust = (TUSB_SPEED_HIGH == tud_speed_get()) ? 3 : 0; + uint32_t const interval = 1UL << (audio->feedback.frame_shift - hs_adjust); + if (0 == (frame_count & (interval - 1))) { + tud_audio_feedback_interval_isr(i, frame_count, audio->feedback.frame_shift); + } + } } - } #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP } -bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_request_t const * p_request, void* data, uint16_t len) +bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, + tusb_control_request_t const *p_request, void *data, + uint16_t len) { - // Handles only sending of data not receiving - if (p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) return false; + // Handles only sending of data not receiving + if (p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) + return false; - // Get corresponding driver index - uint8_t func_id; - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Get corresponding driver index + uint8_t func_id; + uint8_t itf = TU_U16_LOW(p_request->wIndex); - // Conduct checks which depend on the recipient - switch (p_request->bmRequestType_bit.recipient) - { - case TUSB_REQ_RCPT_INTERFACE: - { - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Verify if entity is present - if (entityID != 0) - { - // Find index of audio driver structure and verify entity really exists - TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); - } - else - { - // Find index of audio driver structure and verify interface really exists - TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); - } - } - break; + // Conduct checks which depend on the recipient + switch (p_request->bmRequestType_bit.recipient) { + case TUSB_REQ_RCPT_INTERFACE: { + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - case TUSB_REQ_RCPT_ENDPOINT: - { - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Verify if entity is present + if (entityID != 0) { + // Find index of audio driver structure and verify entity really exists + TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); + } else { + // Find index of audio driver structure and verify interface really exists + TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); + } + } break; - // Find index of audio driver structure and verify EP really exists - TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); - } - break; + case TUSB_REQ_RCPT_ENDPOINT: { + uint8_t ep = TU_U16_LOW(p_request->wIndex); + + // Find index of audio driver structure and verify EP really exists + TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); + } break; // Unknown/Unsupported recipient - default: TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); TU_BREAKPOINT(); return false; - } + default: + TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); + TU_BREAKPOINT(); + return false; + } - // Crop length - if (len > _audiod_fct[func_id].ctrl_buf_sz) len = _audiod_fct[func_id].ctrl_buf_sz; + // Crop length + if (len > _audiod_fct[func_id].ctrl_buf_sz) + len = _audiod_fct[func_id].ctrl_buf_sz; - // Copy into buffer - TU_VERIFY(0 == tu_memcpy_s(_audiod_fct[func_id].ctrl_buf, _audiod_fct[func_id].ctrl_buf_sz, data, (size_t)len)); + // Copy into buffer + TU_VERIFY(0 == tu_memcpy_s(_audiod_fct[func_id].ctrl_buf, _audiod_fct[func_id].ctrl_buf_sz, + data, (size_t)len)); #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - // Find data for sampling_frequency_control - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && p_request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) - { - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - if (_audiod_fct[func_id].bclock_id_tx == entityID && ctrlSel == AUDIO_CS_CTRL_SAM_FREQ && p_request->bRequest == AUDIO_CS_REQ_CUR) - { - _audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(_audiod_fct[func_id].ctrl_buf); + // Find data for sampling_frequency_control + if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && + p_request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) { + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + if (_audiod_fct[func_id].bclock_id_tx == entityID && ctrlSel == AUDIO_CS_CTRL_SAM_FREQ && + p_request->bRequest == AUDIO_CS_REQ_CUR) { + _audiod_fct[func_id].sample_rate_tx = + tu_unaligned_read32(_audiod_fct[func_id].ctrl_buf); + } } - } #endif - // Schedule transmit - return tud_control_xfer(rhport, p_request, (void*)_audiod_fct[func_id].ctrl_buf, len); + // Schedule transmit + return tud_control_xfer(rhport, p_request, (void *)_audiod_fct[func_id].ctrl_buf, len); } // This helper function finds for a given audio function and AS interface number the index of the attached driver structure, the index of the interface in the audio function // (e.g. the std. AS interface with interface number 15 is the first AS interface for the given audio function and thus gets index zero), and // finally a pointer to the std. AS interface, where the pointer always points to the first alternate setting i.e. alternate interface zero. -static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t * audio, uint8_t *idxItf, uint8_t const **pp_desc_int) +static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t *audio, uint8_t *idxItf, + uint8_t const **pp_desc_int) { - if (audio->p_desc) - { - // Get pointer at end - uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN; + if (audio->p_desc) { + // Get pointer at end + uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Advance past AC descriptors - uint8_t const *p_desc = tu_desc_next(audio->p_desc); - p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength; + // Advance past AC descriptors + uint8_t const *p_desc = tu_desc_next(audio->p_desc); + p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength; - uint8_t tmp = 0; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - // We assume the number of alternate settings is increasing thus we return the index of alternate setting zero! - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const * )p_desc)->bAlternateSetting == 0) - { - if (((tusb_desc_interface_t const * )p_desc)->bInterfaceNumber == itf) - { - *idxItf = tmp; - *pp_desc_int = p_desc; - return true; + uint8_t tmp = 0; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + // We assume the number of alternate settings is increasing thus we return the index of alternate setting zero! + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && + ((tusb_desc_interface_t const *)p_desc)->bAlternateSetting == 0) { + if (((tusb_desc_interface_t const *)p_desc)->bInterfaceNumber == itf) { + *idxItf = tmp; + *pp_desc_int = p_desc; + return true; + } + // Increase index, bytes read, and pointer + tmp++; + } + p_desc = tu_desc_next(p_desc); } - // Increase index, bytes read, and pointer - tmp++; - } - p_desc = tu_desc_next(p_desc); } - } - return false; + return false; } // This helper function finds for a given AS interface number the index of the attached driver structure, the index of the interface in the audio function // (e.g. the std. AS interface with interface number 15 is the first AS interface for the given audio function and thus gets index zero), and // finally a pointer to the std. AS interface, where the pointer always points to the first alternate setting i.e. alternate interface zero. -static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, uint8_t const **pp_desc_int) +static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, + uint8_t const **pp_desc_int) { - // Loop over audio driver interfaces - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) - { - if (audiod_get_AS_interface_index(itf, &_audiod_fct[i], idxItf, pp_desc_int)) - { - *func_id = i; - return true; + // Loop over audio driver interfaces + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) { + if (audiod_get_AS_interface_index(itf, &_audiod_fct[i], idxItf, pp_desc_int)) { + *func_id = i; + return true; + } } - } - return false; + return false; } // Verify an entity with the given ID exists and returns also the corresponding driver index static bool audiod_verify_entity_exists(uint8_t itf, uint8_t entityID, uint8_t *func_id) { - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) - { - // Look for the correct driver by checking if the unique standard AC interface number fits - if (_audiod_fct[i].p_desc && ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == itf) - { - // Get pointers after class specific AC descriptors and end of AC descriptors - entities are defined in between - uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc); // Points to CS AC descriptor - uint8_t const *p_desc_end = ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength + p_desc; - p_desc = tu_desc_next(p_desc); // Get past CS AC descriptor - - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - if (p_desc[3] == entityID) // Entity IDs are always at offset 3 - { - *func_id = i; - return true; + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) { + // Look for the correct driver by checking if the unique standard AC interface number fits + if (_audiod_fct[i].p_desc && + ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == itf) { + // Get pointers after class specific AC descriptors and end of AC descriptors - entities are defined in between + uint8_t const *p_desc = + tu_desc_next(_audiod_fct[i].p_desc); // Points to CS AC descriptor + uint8_t const *p_desc_end = + ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength + p_desc; + p_desc = tu_desc_next(p_desc); // Get past CS AC descriptor + + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + if (p_desc[3] == entityID) // Entity IDs are always at offset 3 + { + *func_id = i; + return true; + } + p_desc = tu_desc_next(p_desc); + } } - p_desc = tu_desc_next(p_desc); - } } - } - return false; + return false; } static bool audiod_verify_itf_exists(uint8_t itf, uint8_t *func_id) { - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) - { - if (_audiod_fct[i].p_desc) - { - // Get pointer at beginning and end - uint8_t const *p_desc = _audiod_fct[i].p_desc; - uint8_t const *p_desc_end = _audiod_fct[i].p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == itf) - { - *func_id = i; - return true; + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) { + if (_audiod_fct[i].p_desc) { + // Get pointer at beginning and end + uint8_t const *p_desc = _audiod_fct[i].p_desc; + uint8_t const *p_desc_end = + _audiod_fct[i].p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && + ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == + itf) { + *func_id = i; + return true; + } + p_desc = tu_desc_next(p_desc); + } } - p_desc = tu_desc_next(p_desc); - } } - } - return false; + return false; } static bool audiod_verify_ep_exists(uint8_t ep, uint8_t *func_id) { - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) - { - if (_audiod_fct[i].p_desc) - { - // Get pointer at end - uint8_t const *p_desc_end = _audiod_fct[i].p_desc + _audiod_fct[i].desc_length; - - // Advance past AC descriptors - EP we look for are streaming EPs - uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc); - p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength; - - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT && ((tusb_desc_endpoint_t const * )p_desc)->bEndpointAddress == ep) - { - *func_id = i; - return true; + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) { + if (_audiod_fct[i].p_desc) { + // Get pointer at end + uint8_t const *p_desc_end = _audiod_fct[i].p_desc + _audiod_fct[i].desc_length; + + // Advance past AC descriptors - EP we look for are streaming EPs + uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc); + p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength; + + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT && + ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress == ep) { + *func_id = i; + return true; + } + p_desc = tu_desc_next(p_desc); + } } - p_desc = tu_desc_next(p_desc); - } } - } - return false; + return false; } -#if (CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) +#if (CFG_TUD_AUDIO_ENABLE_EP_IN && \ + (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || \ + (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) // p_desc points to the AS interface of alternate setting zero // itf is the interface number of the corresponding interface - we check if the interface belongs to EP in or EP out to see if it is a TX or RX parameter // Currently, only AS interfaces with an EP (in or out) are supposed to be parsed for! -static void audiod_parse_for_AS_params(audiod_function_t* audio, uint8_t const * p_desc, uint8_t const * p_desc_end, uint8_t const as_itf) +static void audiod_parse_for_AS_params(audiod_function_t *audio, uint8_t const *p_desc, + uint8_t const *p_desc_end, uint8_t const as_itf) { #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) return; // Abort, this interface has no EP, this driver does not support this currently + if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) + return; // Abort, this interface has no EP, this driver does not support this currently #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_in_as_intf_num) return; + if (as_itf != audio->ep_in_as_intf_num) + return; #endif #if !CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_out_as_intf_num) return; + if (as_itf != audio->ep_out_as_intf_num) + return; #endif - p_desc = tu_desc_next(p_desc); // Exclude standard AS interface descriptor of current alternate interface descriptor - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) - { - // Abort if follow up descriptor is a new standard interface descriptor - indicates the last AS descriptor was already finished - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) break; - - // Look for a Class-Specific AS Interface Descriptor(4.9.2) to verify format type and format and also to get number of physical channels - if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_AS_GENERAL) - { + p_desc = tu_desc_next( + p_desc); // Exclude standard AS interface descriptor of current alternate interface descriptor + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) { + // Abort if follow up descriptor is a new standard interface descriptor - indicates the last AS descriptor was already finished + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) + break; + + // Look for a Class-Specific AS Interface Descriptor(4.9.2) to verify format type and format and also to get number of physical channels + if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && + tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_AS_GENERAL) { #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (as_itf == audio->ep_in_as_intf_num) - { - audio->n_channels_tx = ((audio_desc_cs_as_interface_t const * )p_desc)->bNrChannels; - audio->format_type_tx = (audio_format_type_t)(((audio_desc_cs_as_interface_t const * )p_desc)->bFormatType); + if (as_itf == audio->ep_in_as_intf_num) { + audio->n_channels_tx = ((audio_desc_cs_as_interface_t const *)p_desc)->bNrChannels; + audio->format_type_tx = + (audio_format_type_t)(((audio_desc_cs_as_interface_t const *)p_desc) + ->bFormatType); #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - audio->format_type_I_tx = (audio_data_format_type_I_t)(((audio_desc_cs_as_interface_t const * )p_desc)->bmFormats); + audio->format_type_I_tx = + (audio_data_format_type_I_t)(((audio_desc_cs_as_interface_t const *)p_desc) + ->bmFormats); #endif - } + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - if (as_itf == audio->ep_out_as_intf_num) - { - audio->n_channels_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bNrChannels; - audio->format_type_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bFormatType; + if (as_itf == audio->ep_out_as_intf_num) { + audio->n_channels_rx = ((audio_desc_cs_as_interface_t const *)p_desc)->bNrChannels; + audio->format_type_rx = ((audio_desc_cs_as_interface_t const *)p_desc)->bFormatType; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - audio->format_type_I_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bmFormats; + audio->format_type_I_rx = ((audio_desc_cs_as_interface_t const *)p_desc)->bmFormats; #endif - } + } #endif - } + } - // Look for a Type I Format Type Descriptor(2.3.1.6 - Audio Formats) -#if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_FORMAT_TYPE && ((audio_desc_type_I_format_t const * )p_desc)->bFormatType == AUDIO_FORMAT_TYPE_I) - { + // Look for a Type I Format Type Descriptor(2.3.1.6 - Audio Formats) +#if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || \ + CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING + if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && + tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_FORMAT_TYPE && + ((audio_desc_type_I_format_t const *)p_desc)->bFormatType == AUDIO_FORMAT_TYPE_I) { #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) break; // Abort loop, this interface has no EP, this driver does not support this currently + if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) + break; // Abort loop, this interface has no EP, this driver does not support this currently #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_in_as_intf_num) break; + if (as_itf != audio->ep_in_as_intf_num) + break; #endif #if !CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_out_as_intf_num) break; + if (as_itf != audio->ep_out_as_intf_num) + break; #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (as_itf == audio->ep_in_as_intf_num) - { - audio->n_bytes_per_sample_tx = ((audio_desc_type_I_format_t const * )p_desc)->bSubslotSize; - } + if (as_itf == audio->ep_in_as_intf_num) { + audio->n_bytes_per_sample_tx = + ((audio_desc_type_I_format_t const *)p_desc)->bSubslotSize; + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - if (as_itf == audio->ep_out_as_intf_num) - { - audio->n_bytes_per_sample_rx = ((audio_desc_type_I_format_t const * )p_desc)->bSubslotSize; - } + if (as_itf == audio->ep_out_as_intf_num) { + audio->n_bytes_per_sample_rx = + ((audio_desc_type_I_format_t const *)p_desc)->bSubslotSize; + } #endif - } + } #endif - // Other format types are not supported yet + // Other format types are not supported yet - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + } } #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL -static bool audiod_calc_tx_packet_sz(audiod_function_t* audio) -{ - TU_VERIFY(audio->format_type_tx == AUDIO_FORMAT_TYPE_I); - TU_VERIFY(audio->n_channels_tx); - TU_VERIFY(audio->n_bytes_per_sample_tx); - TU_VERIFY(audio->interval_tx); - TU_VERIFY(audio->sample_rate_tx); - - const uint8_t interval = (tud_speed_get() == TUSB_SPEED_FULL) ? audio->interval_tx : 1 << (audio->interval_tx - 1); - - const uint16_t sample_normimal = (uint16_t)(audio->sample_rate_tx * interval / ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000)); - const uint16_t sample_reminder = (uint16_t)(audio->sample_rate_tx * interval % ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000)); - - const uint16_t packet_sz_tx_min = (uint16_t)((sample_normimal - 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx); - const uint16_t packet_sz_tx_norm = (uint16_t)(sample_normimal * audio->n_channels_tx * audio->n_bytes_per_sample_tx); - const uint16_t packet_sz_tx_max = (uint16_t)((sample_normimal + 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx); - - // Endpoint size must larger than packet size - TU_ASSERT(packet_sz_tx_max <= audio->ep_in_sz); - - // Frmt20.pdf 2.3.1.1 USB Packets - if (sample_reminder) - { - // All virtual frame packets must either contain INT(nav) audio slots (small VFP) or INT(nav)+1 (large VFP) audio slots - audio->packet_sz_tx[0] = packet_sz_tx_norm; - audio->packet_sz_tx[1] = packet_sz_tx_norm; - audio->packet_sz_tx[2] = packet_sz_tx_max; - } else - { - // In the case where nav = INT(nav), ni may vary between INT(nav)-1 (small VFP), INT(nav) - // (medium VFP) and INT(nav)+1 (large VFP). - audio->packet_sz_tx[0] = packet_sz_tx_min; - audio->packet_sz_tx[1] = packet_sz_tx_norm; - audio->packet_sz_tx[2] = packet_sz_tx_max; - } - - return true; -} - -static uint16_t audiod_tx_packet_size(const uint16_t* norminal_size, uint16_t data_count, uint16_t fifo_depth, uint16_t max_depth) -{ - // Flow control need a FIFO size of at least 4*Navg - if(norminal_size[1] && norminal_size[1] <= fifo_depth * 4) - { - // Use blackout to prioritize normal size packet - static int ctrl_blackout = 0; - uint16_t packet_size; - uint16_t slot_size = norminal_size[2] - norminal_size[1]; - if (data_count < norminal_size[0]) - { - // If you get here frequently, then your I2S clock deviation is too big ! - packet_size = 0; - } else - if (data_count < fifo_depth / 2 - slot_size && !ctrl_blackout) - { - packet_size = norminal_size[0]; - ctrl_blackout = 10; - } else - if (data_count > fifo_depth / 2 + slot_size && !ctrl_blackout) - { - packet_size = norminal_size[2]; - if(norminal_size[0] == norminal_size[1]) - { - // nav > INT(nav), eg. 44.1k, 88.2k - ctrl_blackout = 0; - } else - { - // nav = INT(nav), eg. 48k, 96k - ctrl_blackout = 10; - } - } else - { - packet_size = norminal_size[1]; - if (ctrl_blackout) - { - ctrl_blackout--; - } +static bool audiod_calc_tx_packet_sz(audiod_function_t *audio) +{ + TU_VERIFY(audio->format_type_tx == AUDIO_FORMAT_TYPE_I); + TU_VERIFY(audio->n_channels_tx); + TU_VERIFY(audio->n_bytes_per_sample_tx); + TU_VERIFY(audio->interval_tx); + TU_VERIFY(audio->sample_rate_tx); + + const uint8_t interval = (tud_speed_get() == TUSB_SPEED_FULL) ? audio->interval_tx : + 1 << (audio->interval_tx - 1); + + const uint16_t sample_normimal = + (uint16_t)(audio->sample_rate_tx * interval / + ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000)); + const uint16_t sample_reminder = + (uint16_t)(audio->sample_rate_tx * interval % + ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000)); + + const uint16_t packet_sz_tx_min = + (uint16_t)((sample_normimal - 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx); + const uint16_t packet_sz_tx_norm = + (uint16_t)(sample_normimal * audio->n_channels_tx * audio->n_bytes_per_sample_tx); + const uint16_t packet_sz_tx_max = + (uint16_t)((sample_normimal + 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx); + + // Endpoint size must larger than packet size + TU_ASSERT(packet_sz_tx_max <= audio->ep_in_sz); + + // Frmt20.pdf 2.3.1.1 USB Packets + if (sample_reminder) { + // All virtual frame packets must either contain INT(nav) audio slots (small VFP) or INT(nav)+1 (large VFP) audio slots + audio->packet_sz_tx[0] = packet_sz_tx_norm; + audio->packet_sz_tx[1] = packet_sz_tx_norm; + audio->packet_sz_tx[2] = packet_sz_tx_max; + } else { + // In the case where nav = INT(nav), ni may vary between INT(nav)-1 (small VFP), INT(nav) + // (medium VFP) and INT(nav)+1 (large VFP). + audio->packet_sz_tx[0] = packet_sz_tx_min; + audio->packet_sz_tx[1] = packet_sz_tx_norm; + audio->packet_sz_tx[2] = packet_sz_tx_max; + } + + return true; +} + +static uint16_t audiod_tx_packet_size(const uint16_t *norminal_size, uint16_t data_count, + uint16_t fifo_depth, uint16_t max_depth) +{ + // Flow control need a FIFO size of at least 4*Navg + if (norminal_size[1] && norminal_size[1] <= fifo_depth * 4) { + // Use blackout to prioritize normal size packet + static int ctrl_blackout = 0; + uint16_t packet_size; + uint16_t slot_size = norminal_size[2] - norminal_size[1]; + if (data_count < norminal_size[0]) { + // If you get here frequently, then your I2S clock deviation is too big ! + packet_size = 0; + } else if (data_count < fifo_depth / 2 - slot_size && !ctrl_blackout) { + packet_size = norminal_size[0]; + ctrl_blackout = 10; + } else if (data_count > fifo_depth / 2 + slot_size && !ctrl_blackout) { + packet_size = norminal_size[2]; + if (norminal_size[0] == norminal_size[1]) { + // nav > INT(nav), eg. 44.1k, 88.2k + ctrl_blackout = 0; + } else { + // nav = INT(nav), eg. 48k, 96k + ctrl_blackout = 10; + } + } else { + packet_size = norminal_size[1]; + if (ctrl_blackout) { + ctrl_blackout--; + } + } + // Normally this cap is not necessary + return tu_min16(packet_size, max_depth); + } else { + return tu_min16(data_count, max_depth); } - // Normally this cap is not necessary - return tu_min16(packet_size, max_depth); - } else - { - return tu_min16(data_count, max_depth); - } } #endif // No security checks here - internal function only which should always succeed -static uint8_t audiod_get_audio_fct_idx(audiod_function_t * audio) +static uint8_t audiod_get_audio_fct_idx(audiod_function_t *audio) { - for (uint8_t cnt=0; cnt < CFG_TUD_AUDIO; cnt++) - { - if (&_audiod_fct[cnt] == audio) return cnt; - } - return 0; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO; cnt++) { + if (&_audiod_fct[cnt] == audio) + return cnt; + } + return 0; } #endif //CFG_TUD_ENABLED && CFG_TUD_AUDIO diff --git a/Libraries/tinyusb/src/class/audio/audio_device.h b/Libraries/tinyusb/src/class/audio/audio_device.h index ae253f49d2c..425cf56f6e7 100644 --- a/Libraries/tinyusb/src/class/audio/audio_device.h +++ b/Libraries/tinyusb/src/class/audio/audio_device.h @@ -85,11 +85,11 @@ // End point sizes IN BYTES - Limits: Full Speed <= 1023, High Speed <= 1024 #ifndef CFG_TUD_AUDIO_ENABLE_EP_IN -#define CFG_TUD_AUDIO_ENABLE_EP_IN 0 // TX +#define CFG_TUD_AUDIO_ENABLE_EP_IN 0 // TX #endif #ifndef CFG_TUD_AUDIO_ENABLE_EP_OUT -#define CFG_TUD_AUDIO_ENABLE_EP_OUT 0 // RX +#define CFG_TUD_AUDIO_ENABLE_EP_OUT 0 // RX #endif // Maximum EP sizes for all alternate AS interface settings - used for checks and buffer allocation @@ -127,23 +127,23 @@ // Software EP FIFO buffer sizes - must be >= max EP SIZEs! #ifndef CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ 0 #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN @@ -184,23 +184,23 @@ // (For TYPE-I format only) Flow control is necessary to allow IN ep send correct amount of data, unless it's a virtual device where data is perfectly synchronized to USB clock. #ifndef CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL -#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 +#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 #endif // Enable/disable feedback EP (required for asynchronous RX applications) #ifndef CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP 0 // Feedback - 0 or 1 +#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP 0 // Feedback - 0 or 1 #endif // Enable/disable conversion from 16.16 to 10.14 format on full-speed devices. See tud_audio_n_fb_set(). // Can be override by tud_audio_feedback_format_correction_cb() #ifndef CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION -#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION 0 // 0 or 1 +#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION 0 // 0 or 1 #endif // Enable/disable interrupt EP (required for notifying host of control changes) #ifndef CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 0 // Feedback - 0 or 1 +#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 0 // Feedback - 0 or 1 #endif // Use software encoding/decoding @@ -251,25 +251,26 @@ // For PCM encoding/decoding #ifndef CFG_TUD_AUDIO_ENABLE_ENCODING -#define CFG_TUD_AUDIO_ENABLE_ENCODING 0 +#define CFG_TUD_AUDIO_ENABLE_ENCODING 0 #endif #ifndef CFG_TUD_AUDIO_ENABLE_DECODING -#define CFG_TUD_AUDIO_ENABLE_DECODING 0 +#define CFG_TUD_AUDIO_ENABLE_DECODING 0 #endif // This enabling allows to save the current coding parameters e.g. # of bytes per sample etc. - TYPE_I includes common PCM encoding #ifndef CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING -#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 0 +#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 0 #endif #ifndef CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING -#define CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING 0 +#define CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING 0 #endif // Type I Coding parameters not given within UAC2 descriptors // It would be possible to allow for a more flexible setting and not fix this parameter as done below. However, this is most often not needed and kept for later if really necessary. The more flexible setting could be implemented within set_interface(), however, how the values are saved per alternate setting is to be determined! -#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING +#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING && \ + CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING #ifndef CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX #error You must tell the driver the number of channels per FIFO for the interleaved encoding! E.g. for an I2S interface having two channels, CHANNEL_PER_FIFO = 2 as the I2S stream having two channels is usually saved within one FIFO #endif @@ -285,7 +286,8 @@ #endif #endif -#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING +#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING && \ + CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING #ifndef CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_RX #error You must tell the driver the number of channels per FIFO for the interleaved encoding! E.g. for an I2S interface having two channels, CHANNEL_PER_FIFO = 2 as the I2S stream having two channels is usually saved within one FIFO #endif @@ -305,44 +307,46 @@ // Number of support FIFOs to set up - multiple channels can be handled by one FIFO - very common is two channels per FIFO stemming from one I2S interface #ifndef CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO 0 #endif // Size of support FIFOs IN BYTES - if size > 0 there are as many FIFOs set up as CFG_TUD_AUDIO_FUNC_X_N_TX_SUPP_SW_FIFO and CFG_TUD_AUDIO_FUNC_X_N_RX_SUPP_SW_FIFO #ifndef CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ 0 // FIFO size - minimum size: ceil(f_s/1000) * max(# of TX channels) / (# of TX support FIFOs) * max(# of bytes per sample) +#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ \ + 0 // FIFO size - minimum size: ceil(f_s/1000) * max(# of TX channels) / (# of TX support FIFOs) * max(# of bytes per sample) #endif #ifndef CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ 0 +#define CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ 0 // FIFO size - minimum size: ceil(f_s/1000) * max(# of RX channels) / (# of RX support FIFOs) * max(# of bytes per sample) +#define CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ \ + 0 // FIFO size - minimum size: ceil(f_s/1000) * max(# of RX channels) / (# of RX support FIFOs) * max(# of bytes per sample) #endif #ifndef CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ 0 +#define CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ 0 #endif //static_assert(sizeof(tud_audio_desc_lengths) != CFG_TUD_AUDIO, "Supply audio function descriptor pack length!"); @@ -363,81 +367,84 @@ extern "C" { // Application API (Multiple Interfaces) // CFG_TUD_AUDIO > 1 //--------------------------------------------------------------------+ -bool tud_audio_n_mounted (uint8_t func_id); +bool tud_audio_n_mounted(uint8_t func_id); #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING -uint16_t tud_audio_n_available (uint8_t func_id); -uint16_t tud_audio_n_read (uint8_t func_id, void* buffer, uint16_t bufsize); -bool tud_audio_n_clear_ep_out_ff (uint8_t func_id); // Delete all content in the EP OUT FIFO -tu_fifo_t* tud_audio_n_get_ep_out_ff (uint8_t func_id); +uint16_t tud_audio_n_available(uint8_t func_id); +uint16_t tud_audio_n_read(uint8_t func_id, void *buffer, uint16_t bufsize); +bool tud_audio_n_clear_ep_out_ff(uint8_t func_id); // Delete all content in the EP OUT FIFO +tu_fifo_t *tud_audio_n_get_ep_out_ff(uint8_t func_id); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING -bool tud_audio_n_clear_rx_support_ff (uint8_t func_id, uint8_t ff_idx); // Delete all content in the support RX FIFOs -uint16_t tud_audio_n_available_support_ff (uint8_t func_id, uint8_t ff_idx); -uint16_t tud_audio_n_read_support_ff (uint8_t func_id, uint8_t ff_idx, void* buffer, uint16_t bufsize); -tu_fifo_t* tud_audio_n_get_rx_support_ff (uint8_t func_id, uint8_t ff_idx); +bool tud_audio_n_clear_rx_support_ff(uint8_t func_id, + uint8_t ff_idx); // Delete all content in the support RX FIFOs +uint16_t tud_audio_n_available_support_ff(uint8_t func_id, uint8_t ff_idx); +uint16_t tud_audio_n_read_support_ff(uint8_t func_id, uint8_t ff_idx, void *buffer, + uint16_t bufsize); +tu_fifo_t *tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING -uint16_t tud_audio_n_write (uint8_t func_id, const void * data, uint16_t len); -bool tud_audio_n_clear_ep_in_ff (uint8_t func_id); // Delete all content in the EP IN FIFO -tu_fifo_t* tud_audio_n_get_ep_in_ff (uint8_t func_id); +uint16_t tud_audio_n_write(uint8_t func_id, const void *data, uint16_t len); +bool tud_audio_n_clear_ep_in_ff(uint8_t func_id); // Delete all content in the EP IN FIFO +tu_fifo_t *tud_audio_n_get_ep_in_ff(uint8_t func_id); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING -uint16_t tud_audio_n_flush_tx_support_ff (uint8_t func_id); // Force all content in the support TX FIFOs to be written into EP SW FIFO -bool tud_audio_n_clear_tx_support_ff (uint8_t func_id, uint8_t ff_idx); -uint16_t tud_audio_n_write_support_ff (uint8_t func_id, uint8_t ff_idx, const void * data, uint16_t len); -tu_fifo_t* tud_audio_n_get_tx_support_ff (uint8_t func_id, uint8_t ff_idx); +uint16_t tud_audio_n_flush_tx_support_ff( + uint8_t func_id); // Force all content in the support TX FIFOs to be written into EP SW FIFO +bool tud_audio_n_clear_tx_support_ff(uint8_t func_id, uint8_t ff_idx); +uint16_t tud_audio_n_write_support_ff(uint8_t func_id, uint8_t ff_idx, const void *data, + uint16_t len); +tu_fifo_t *tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx); #endif #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -bool tud_audio_int_n_write (uint8_t func_id, const audio_interrupt_data_t * data); +bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t *data); #endif - //--------------------------------------------------------------------+ // Application API (Interface0) //--------------------------------------------------------------------+ -static inline bool tud_audio_mounted (void); +static inline bool tud_audio_mounted(void); // RX API #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING -static inline uint16_t tud_audio_available (void); -static inline bool tud_audio_clear_ep_out_ff (void); // Delete all content in the EP OUT FIFO -static inline uint16_t tud_audio_read (void* buffer, uint16_t bufsize); -static inline tu_fifo_t* tud_audio_get_ep_out_ff (void); +static inline uint16_t tud_audio_available(void); +static inline bool tud_audio_clear_ep_out_ff(void); // Delete all content in the EP OUT FIFO +static inline uint16_t tud_audio_read(void *buffer, uint16_t bufsize); +static inline tu_fifo_t *tud_audio_get_ep_out_ff(void); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING -static inline bool tud_audio_clear_rx_support_ff (uint8_t ff_idx); -static inline uint16_t tud_audio_available_support_ff (uint8_t ff_idx); -static inline uint16_t tud_audio_read_support_ff (uint8_t ff_idx, void* buffer, uint16_t bufsize); -static inline tu_fifo_t* tud_audio_get_rx_support_ff (uint8_t ff_idx); +static inline bool tud_audio_clear_rx_support_ff(uint8_t ff_idx); +static inline uint16_t tud_audio_available_support_ff(uint8_t ff_idx); +static inline uint16_t tud_audio_read_support_ff(uint8_t ff_idx, void *buffer, uint16_t bufsize); +static inline tu_fifo_t *tud_audio_get_rx_support_ff(uint8_t ff_idx); #endif // TX API #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING -static inline uint16_t tud_audio_write (const void * data, uint16_t len); -static inline bool tud_audio_clear_ep_in_ff (void); -static inline tu_fifo_t* tud_audio_get_ep_in_ff (void); +static inline uint16_t tud_audio_write(const void *data, uint16_t len); +static inline bool tud_audio_clear_ep_in_ff(void); +static inline tu_fifo_t *tud_audio_get_ep_in_ff(void); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING -static inline uint16_t tud_audio_flush_tx_support_ff (void); -static inline uint16_t tud_audio_clear_tx_support_ff (uint8_t ff_idx); -static inline uint16_t tud_audio_write_support_ff (uint8_t ff_idx, const void * data, uint16_t len); -static inline tu_fifo_t* tud_audio_get_tx_support_ff (uint8_t ff_idx); +static inline uint16_t tud_audio_flush_tx_support_ff(void); +static inline uint16_t tud_audio_clear_tx_support_ff(uint8_t ff_idx); +static inline uint16_t tud_audio_write_support_ff(uint8_t ff_idx, const void *data, uint16_t len); +static inline tu_fifo_t *tud_audio_get_tx_support_ff(uint8_t ff_idx); #endif // INT CTR API #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -static inline bool tud_audio_int_write (const audio_interrupt_data_t * data); +static inline bool tud_audio_int_write(const audio_interrupt_data_t *data); #endif // Buffer control EP data and schedule a transmit @@ -446,26 +453,31 @@ static inline bool tud_audio_int_write (const audio_interru // Since transmission is triggered via interrupts, a persistent memory location is required onto which the buffer pointer in pointing. If you already have such // available you may directly use 'tud_control_xfer(...)'. In this case data does not need to be copied into an additional buffer and you save some time. // If the request's wLength is zero, a status packet is sent instead. -bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_request_t const * p_request, void* data, uint16_t len); +bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, + tusb_control_request_t const *p_request, void *data, + uint16_t len); //--------------------------------------------------------------------+ // Application Callback API //--------------------------------------------------------------------+ #if CFG_TUD_AUDIO_ENABLE_EP_IN -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t func_id, uint8_t ep_in, uint8_t cur_alt_setting); -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t func_id, uint8_t ep_in, uint8_t cur_alt_setting); +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t func_id, uint8_t ep_in, + uint8_t cur_alt_setting); +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t func_id, + uint8_t ep_in, uint8_t cur_alt_setting); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT -bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting); -bool tud_audio_rx_done_post_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting); +bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, + uint8_t ep_out, uint8_t cur_alt_setting); +bool tud_audio_rx_done_post_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, + uint8_t ep_out, uint8_t cur_alt_setting); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP void tud_audio_fb_done_cb(uint8_t func_id); - // Note about feedback calculation // // Option 1 - AUDIO_FEEDBACK_METHOD_FIFO_COUNT @@ -488,7 +500,6 @@ void tud_audio_fb_done_cb(uint8_t func_id); // Advantage: No ISR interrupt is enabled, hence the CPU need not to handle an ISR every 1ms or 125us and thus less CPU load. // Disadvantage: typically a larger FIFO is needed to compensate for jitter (e.g. 6 frames), i.e. a larger delay is introduced. - // This function is used to provide data rate feedback from an asynchronous sink. Feedback value will be sent at FB endpoint interval till it's changed. // // The feedback format is specified to be 16.16 for HS and 10.14 for FS devices (see Universal Serial Bus Specification Revision 2.0 5.12.4.2). By default, @@ -518,33 +529,35 @@ bool tud_audio_n_fb_set(uint8_t func_id, uint32_t feedback); uint32_t tud_audio_feedback_update(uint8_t func_id, uint32_t cycles); enum { - AUDIO_FEEDBACK_METHOD_DISABLED, - AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED, - AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT, - AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2, // For driver internal use only - AUDIO_FEEDBACK_METHOD_FIFO_COUNT + AUDIO_FEEDBACK_METHOD_DISABLED, + AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED, + AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT, + AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2, // For driver internal use only + AUDIO_FEEDBACK_METHOD_FIFO_COUNT }; typedef struct { - uint8_t method; - uint32_t sample_freq; // sample frequency in Hz - - union { - struct { - uint32_t mclk_freq; // Main clock frequency in Hz i.e. master clock to which sample clock is based on - }frequency; + uint8_t method; + uint32_t sample_freq; // sample frequency in Hz - }; -}audio_feedback_params_t; + union { + struct { + uint32_t + mclk_freq; // Main clock frequency in Hz i.e. master clock to which sample clock is based on + } frequency; + }; +} audio_feedback_params_t; // Invoked when needed to set feedback parameters -void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, audio_feedback_params_t* feedback_param); +void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, + audio_feedback_params_t *feedback_param); // Callback in ISR context, invoked periodically according to feedback endpoint bInterval. // Could be used to compute and update feedback value, should be placed in RAM if possible // frame_number : current SOF count // interval_shift: number of bit shift i.e log2(interval) from Feedback endpoint descriptor -TU_ATTR_FAST_FUNC void tud_audio_feedback_interval_isr(uint8_t func_id, uint32_t frame_number, uint8_t interval_shift); +TU_ATTR_FAST_FUNC void tud_audio_feedback_interval_isr(uint8_t func_id, uint32_t frame_number, + uint8_t interval_shift); // (Full-Speed only) Callback to set feedback format correction is applied or not, // default to CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION if not implemented. @@ -556,28 +569,31 @@ void tud_audio_int_done_cb(uint8_t rhport); #endif // Invoked when audio set interface request received -bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request); +bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request); // Invoked when audio set interface request received which closes an EP -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request); +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request); // Invoked when audio class specific set request received for an EP -bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff); +bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff); // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff); +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff); // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff); +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, + uint8_t *pBuff); // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request); +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request); // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request); +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request); // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request); +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request); //--------------------------------------------------------------------+ // Inline Functions @@ -585,7 +601,7 @@ bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * static inline bool tud_audio_mounted(void) { - return tud_audio_n_mounted(0); + return tud_audio_n_mounted(0); } // RX API @@ -594,22 +610,22 @@ static inline bool tud_audio_mounted(void) static inline uint16_t tud_audio_available(void) { - return tud_audio_n_available(0); + return tud_audio_n_available(0); } -static inline uint16_t tud_audio_read(void* buffer, uint16_t bufsize) +static inline uint16_t tud_audio_read(void *buffer, uint16_t bufsize) { - return tud_audio_n_read(0, buffer, bufsize); + return tud_audio_n_read(0, buffer, bufsize); } static inline bool tud_audio_clear_ep_out_ff(void) { - return tud_audio_n_clear_ep_out_ff(0); + return tud_audio_n_clear_ep_out_ff(0); } -static inline tu_fifo_t* tud_audio_get_ep_out_ff(void) +static inline tu_fifo_t *tud_audio_get_ep_out_ff(void) { - return tud_audio_n_get_ep_out_ff(0); + return tud_audio_n_get_ep_out_ff(0); } #endif @@ -618,22 +634,22 @@ static inline tu_fifo_t* tud_audio_get_ep_out_ff(void) static inline bool tud_audio_clear_rx_support_ff(uint8_t ff_idx) { - return tud_audio_n_clear_rx_support_ff(0, ff_idx); + return tud_audio_n_clear_rx_support_ff(0, ff_idx); } static inline uint16_t tud_audio_available_support_ff(uint8_t ff_idx) { - return tud_audio_n_available_support_ff(0, ff_idx); + return tud_audio_n_available_support_ff(0, ff_idx); } -static inline uint16_t tud_audio_read_support_ff(uint8_t ff_idx, void* buffer, uint16_t bufsize) +static inline uint16_t tud_audio_read_support_ff(uint8_t ff_idx, void *buffer, uint16_t bufsize) { - return tud_audio_n_read_support_ff(0, ff_idx, buffer, bufsize); + return tud_audio_n_read_support_ff(0, ff_idx, buffer, bufsize); } -static inline tu_fifo_t* tud_audio_get_rx_support_ff(uint8_t ff_idx) +static inline tu_fifo_t *tud_audio_get_rx_support_ff(uint8_t ff_idx) { - return tud_audio_n_get_rx_support_ff(0, ff_idx); + return tud_audio_n_get_rx_support_ff(0, ff_idx); } #endif @@ -642,19 +658,19 @@ static inline tu_fifo_t* tud_audio_get_rx_support_ff(uint8_t ff_idx) #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING -static inline uint16_t tud_audio_write(const void * data, uint16_t len) +static inline uint16_t tud_audio_write(const void *data, uint16_t len) { - return tud_audio_n_write(0, data, len); + return tud_audio_n_write(0, data, len); } static inline bool tud_audio_clear_ep_in_ff(void) { - return tud_audio_n_clear_ep_in_ff(0); + return tud_audio_n_clear_ep_in_ff(0); } -static inline tu_fifo_t* tud_audio_get_ep_in_ff(void) +static inline tu_fifo_t *tud_audio_get_ep_in_ff(void) { - return tud_audio_n_get_ep_in_ff(0); + return tud_audio_n_get_ep_in_ff(0); } #endif @@ -663,30 +679,30 @@ static inline tu_fifo_t* tud_audio_get_ep_in_ff(void) static inline uint16_t tud_audio_flush_tx_support_ff(void) { - return tud_audio_n_flush_tx_support_ff(0); + return tud_audio_n_flush_tx_support_ff(0); } static inline uint16_t tud_audio_clear_tx_support_ff(uint8_t ff_idx) { - return tud_audio_n_clear_tx_support_ff(0, ff_idx); + return tud_audio_n_clear_tx_support_ff(0, ff_idx); } -static inline uint16_t tud_audio_write_support_ff(uint8_t ff_idx, const void * data, uint16_t len) +static inline uint16_t tud_audio_write_support_ff(uint8_t ff_idx, const void *data, uint16_t len) { - return tud_audio_n_write_support_ff(0, ff_idx, data, len); + return tud_audio_n_write_support_ff(0, ff_idx, data, len); } -static inline tu_fifo_t* tud_audio_get_tx_support_ff(uint8_t ff_idx) +static inline tu_fifo_t *tud_audio_get_tx_support_ff(uint8_t ff_idx) { - return tud_audio_n_get_tx_support_ff(0, ff_idx); + return tud_audio_n_get_tx_support_ff(0, ff_idx); } #endif #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -static inline bool tud_audio_int_write(const audio_interrupt_data_t * data) +static inline bool tud_audio_int_write(const audio_interrupt_data_t *data) { - return tud_audio_int_n_write(0, data); + return tud_audio_int_n_write(0, data); } #endif @@ -694,7 +710,7 @@ static inline bool tud_audio_int_write(const audio_interrupt_data_t * data) static inline bool tud_audio_fb_set(uint32_t feedback) { - return tud_audio_n_fb_set(0, feedback); + return tud_audio_n_fb_set(0, feedback); } #endif @@ -702,13 +718,14 @@ static inline bool tud_audio_fb_set(uint32_t feedback) //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void audiod_init (void); -bool audiod_deinit (void); -void audiod_reset (uint8_t rhport); -uint16_t audiod_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); -bool audiod_xfer_cb (uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); -void audiod_sof_isr (uint8_t rhport, uint32_t frame_count); +void audiod_init(void); +bool audiod_deinit(void); +void audiod_reset(uint8_t rhport); +uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +bool audiod_xfer_cb(uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, + uint32_t xferred_bytes); +void audiod_sof_isr(uint8_t rhport, uint32_t frame_count); #ifdef __cplusplus } diff --git a/Libraries/tinyusb/src/class/bth/bth_device.c b/Libraries/tinyusb/src/class/bth/bth_device.c index cbf6e13321b..88f2c65f9a6 100644 --- a/Libraries/tinyusb/src/class/bth/bth_device.c +++ b/Libraries/tinyusb/src/class/bth/bth_device.c @@ -37,18 +37,17 @@ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -typedef struct -{ - uint8_t itf_num; - uint8_t ep_ev; - uint8_t ep_acl_in; - uint8_t ep_acl_out; - uint8_t ep_voice[2]; // Not used yet - uint8_t ep_voice_size[2][CFG_TUD_BTH_ISO_ALT_COUNT]; - - // Endpoint Transfer buffer - CFG_TUSB_MEM_ALIGN bt_hci_cmd_t hci_cmd; - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_BTH_DATA_EPSIZE]; +typedef struct { + uint8_t itf_num; + uint8_t ep_ev; + uint8_t ep_acl_in; + uint8_t ep_acl_out; + uint8_t ep_voice[2]; // Not used yet + uint8_t ep_voice_size[2][CFG_TUD_BTH_ISO_ALT_COUNT]; + + // Endpoint Transfer buffer + CFG_TUSB_MEM_ALIGN bt_hci_cmd_t hci_cmd; + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_BTH_DATA_EPSIZE]; } btd_interface_t; @@ -59,139 +58,153 @@ CFG_TUD_MEM_SECTION btd_interface_t _btd_itf; static bool bt_tx_data(uint8_t ep, void *data, uint16_t len) { - uint8_t const rhport = 0; + uint8_t const rhport = 0; - // skip if previous transfer not complete - TU_VERIFY(!usbd_edpt_busy(rhport, ep)); + // skip if previous transfer not complete + TU_VERIFY(!usbd_edpt_busy(rhport, ep)); - TU_ASSERT(usbd_edpt_xfer(rhport, ep, data, len)); + TU_ASSERT(usbd_edpt_xfer(rhport, ep, data, len)); - return true; + return true; } //--------------------------------------------------------------------+ // READ API //--------------------------------------------------------------------+ - //--------------------------------------------------------------------+ // WRITE API //--------------------------------------------------------------------+ bool tud_bt_event_send(void *event, uint16_t event_len) { - return bt_tx_data(_btd_itf.ep_ev, event, event_len); + return bt_tx_data(_btd_itf.ep_ev, event, event_len); } bool tud_bt_acl_data_send(void *event, uint16_t event_len) { - return bt_tx_data(_btd_itf.ep_acl_in, event, event_len); + return bt_tx_data(_btd_itf.ep_acl_in, event, event_len); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void btd_init(void) { - tu_memclr(&_btd_itf, sizeof(_btd_itf)); +void btd_init(void) +{ + tu_memclr(&_btd_itf, sizeof(_btd_itf)); } -bool btd_deinit(void) { - return true; +bool btd_deinit(void) +{ + return true; } void btd_reset(uint8_t rhport) { - (void)rhport; + (void)rhport; } uint16_t btd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - tusb_desc_endpoint_t const *desc_ep; - uint16_t drv_len = 0; - // Size of single alternative of ISO interface - const uint16_t iso_alt_itf_size = sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t); - // Size of hci interface - const uint16_t hci_itf_size = sizeof(tusb_desc_interface_t) + 3 * sizeof(tusb_desc_endpoint_t); - // Ensure this is BT Primary Controller - TU_VERIFY(TUSB_CLASS_WIRELESS_CONTROLLER == itf_desc->bInterfaceClass && - TUD_BT_APP_SUBCLASS == itf_desc->bInterfaceSubClass && - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER == itf_desc->bInterfaceProtocol, 0); - - TU_ASSERT(itf_desc->bNumEndpoints == 3 && max_len >= hci_itf_size); - - _btd_itf.itf_num = itf_desc->bInterfaceNumber; - - desc_ep = (tusb_desc_endpoint_t const *) tu_desc_next(itf_desc); - - TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer, 0); - TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0); - _btd_itf.ep_ev = desc_ep->bEndpointAddress; - - // Open endpoint pair - TU_ASSERT(usbd_open_edpt_pair(rhport, tu_desc_next(desc_ep), 2, TUSB_XFER_BULK, &_btd_itf.ep_acl_out, - &_btd_itf.ep_acl_in), 0); - - itf_desc = (tusb_desc_interface_t const *)tu_desc_next(tu_desc_next(tu_desc_next(desc_ep))); - - // Prepare for incoming data from host - TU_ASSERT(usbd_edpt_xfer(rhport, _btd_itf.ep_acl_out, _btd_itf.epout_buf, CFG_TUD_BTH_DATA_EPSIZE), 0); - - drv_len = hci_itf_size; - - // Ensure this is still BT Primary Controller - TU_ASSERT(TUSB_CLASS_WIRELESS_CONTROLLER == itf_desc->bInterfaceClass && - TUD_BT_APP_SUBCLASS == itf_desc->bInterfaceSubClass && - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER == itf_desc->bInterfaceProtocol, 0); - TU_ASSERT(itf_desc->bNumEndpoints == 2 && max_len >= iso_alt_itf_size + drv_len); - - uint8_t dir; - - desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); - TU_ASSERT(itf_desc->bAlternateSetting < CFG_TUD_BTH_ISO_ALT_COUNT, 0); - TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT, 0); - dir = tu_edpt_dir(desc_ep->bEndpointAddress); - _btd_itf.ep_voice[dir] = desc_ep->bEndpointAddress; - // Store endpoint size for alternative - _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = (uint8_t) tu_edpt_packet_size(desc_ep); - - desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(desc_ep); - TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT, 0); - dir = tu_edpt_dir(desc_ep->bEndpointAddress); - _btd_itf.ep_voice[dir] = desc_ep->bEndpointAddress; - // Store endpoint size for alternative - _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = (uint8_t) tu_edpt_packet_size(desc_ep); - drv_len += iso_alt_itf_size; - - for (int i = 1; i < CFG_TUD_BTH_ISO_ALT_COUNT && drv_len + iso_alt_itf_size <= max_len; ++i) { - // Make sure rest of alternatives matches - itf_desc = (tusb_desc_interface_t const *)tu_desc_next(desc_ep); - if (itf_desc->bDescriptorType != TUSB_DESC_INTERFACE || - TUSB_CLASS_WIRELESS_CONTROLLER != itf_desc->bInterfaceClass || - TUD_BT_APP_SUBCLASS != itf_desc->bInterfaceSubClass || - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER != itf_desc->bInterfaceProtocol) - { - // Not an Iso interface instance - break; - } - TU_ASSERT(itf_desc->bAlternateSetting < CFG_TUD_BTH_ISO_ALT_COUNT, 0); + tusb_desc_endpoint_t const *desc_ep; + uint16_t drv_len = 0; + // Size of single alternative of ISO interface + const uint16_t iso_alt_itf_size = + sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t); + // Size of hci interface + const uint16_t hci_itf_size = sizeof(tusb_desc_interface_t) + 3 * sizeof(tusb_desc_endpoint_t); + // Ensure this is BT Primary Controller + TU_VERIFY(TUSB_CLASS_WIRELESS_CONTROLLER == itf_desc->bInterfaceClass && + TUD_BT_APP_SUBCLASS == itf_desc->bInterfaceSubClass && + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER == itf_desc->bInterfaceProtocol, + 0); + + TU_ASSERT(itf_desc->bNumEndpoints == 3 && max_len >= hci_itf_size); + + _btd_itf.itf_num = itf_desc->bInterfaceNumber; + + desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); + + TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && + TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer, + 0); + TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0); + _btd_itf.ep_ev = desc_ep->bEndpointAddress; + + // Open endpoint pair + TU_ASSERT(usbd_open_edpt_pair(rhport, tu_desc_next(desc_ep), 2, TUSB_XFER_BULK, + &_btd_itf.ep_acl_out, &_btd_itf.ep_acl_in), + 0); + + itf_desc = (tusb_desc_interface_t const *)tu_desc_next(tu_desc_next(tu_desc_next(desc_ep))); + + // Prepare for incoming data from host + TU_ASSERT(usbd_edpt_xfer(rhport, _btd_itf.ep_acl_out, _btd_itf.epout_buf, + CFG_TUD_BTH_DATA_EPSIZE), + 0); + + drv_len = hci_itf_size; + + // Ensure this is still BT Primary Controller + TU_ASSERT(TUSB_CLASS_WIRELESS_CONTROLLER == itf_desc->bInterfaceClass && + TUD_BT_APP_SUBCLASS == itf_desc->bInterfaceSubClass && + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER == itf_desc->bInterfaceProtocol, + 0); + TU_ASSERT(itf_desc->bNumEndpoints == 2 && max_len >= iso_alt_itf_size + drv_len); + + uint8_t dir; desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); + TU_ASSERT(itf_desc->bAlternateSetting < CFG_TUD_BTH_ISO_ALT_COUNT, 0); + TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT, 0); dir = tu_edpt_dir(desc_ep->bEndpointAddress); - // Verify that alternative endpoint are same as first ones - TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT && - _btd_itf.ep_voice[dir] == desc_ep->bEndpointAddress, 0); - _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = (uint8_t) tu_edpt_packet_size(desc_ep); + _btd_itf.ep_voice[dir] = desc_ep->bEndpointAddress; + // Store endpoint size for alternative + _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = + (uint8_t)tu_edpt_packet_size(desc_ep); desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(desc_ep); + TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT, 0); dir = tu_edpt_dir(desc_ep->bEndpointAddress); - // Verify that alternative endpoint are same as first ones - TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT && - _btd_itf.ep_voice[dir] == desc_ep->bEndpointAddress, 0); - _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = (uint8_t) tu_edpt_packet_size(desc_ep); + _btd_itf.ep_voice[dir] = desc_ep->bEndpointAddress; + // Store endpoint size for alternative + _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = + (uint8_t)tu_edpt_packet_size(desc_ep); drv_len += iso_alt_itf_size; - } - return drv_len; + for (int i = 1; i < CFG_TUD_BTH_ISO_ALT_COUNT && drv_len + iso_alt_itf_size <= max_len; ++i) { + // Make sure rest of alternatives matches + itf_desc = (tusb_desc_interface_t const *)tu_desc_next(desc_ep); + if (itf_desc->bDescriptorType != TUSB_DESC_INTERFACE || + TUSB_CLASS_WIRELESS_CONTROLLER != itf_desc->bInterfaceClass || + TUD_BT_APP_SUBCLASS != itf_desc->bInterfaceSubClass || + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER != itf_desc->bInterfaceProtocol) { + // Not an Iso interface instance + break; + } + TU_ASSERT(itf_desc->bAlternateSetting < CFG_TUD_BTH_ISO_ALT_COUNT, 0); + + desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); + dir = tu_edpt_dir(desc_ep->bEndpointAddress); + // Verify that alternative endpoint are same as first ones + TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT && + _btd_itf.ep_voice[dir] == desc_ep->bEndpointAddress, + 0); + _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = + (uint8_t)tu_edpt_packet_size(desc_ep); + + desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(desc_ep); + dir = tu_edpt_dir(desc_ep->bEndpointAddress); + // Verify that alternative endpoint are same as first ones + TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT && + _btd_itf.ep_voice[dir] == desc_ep->bEndpointAddress, + 0); + _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = + (uint8_t)tu_edpt_packet_size(desc_ep); + drv_len += iso_alt_itf_size; + } + + return drv_len; } // Invoked when a control transfer occurred on an interface of this class @@ -199,67 +212,61 @@ uint16_t btd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_ // return false to stall control endpoint (e.g unsupported request) bool btd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - (void)rhport; - - if ( stage == CONTROL_STAGE_SETUP ) - { - if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && - request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE) - { - // HCI command packet addressing for single function Primary Controllers - // also compatible with historical mode if enabled - TU_VERIFY((request->bRequest == 0 && request->wValue == 0 && request->wIndex == 0) || - (CFG_TUD_BTH_HISTORICAL_COMPATIBLE && request->bRequest == 0xe0)); - } - else if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) - { - if (request->bRequest == TUSB_REQ_SET_INTERFACE && _btd_itf.itf_num + 1 == request->wIndex) - { - // TODO: Set interface it would involve changing size of endpoint size - } - else - { - // HCI command packet for Primary Controller function in a composite device - TU_VERIFY(request->bRequest == 0 && request->wValue == 0 && request->wIndex == _btd_itf.itf_num); - } + (void)rhport; + + if (stage == CONTROL_STAGE_SETUP) { + if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && + request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE) { + // HCI command packet addressing for single function Primary Controllers + // also compatible with historical mode if enabled + TU_VERIFY((request->bRequest == 0 && request->wValue == 0 && request->wIndex == 0) || + (CFG_TUD_BTH_HISTORICAL_COMPATIBLE && request->bRequest == 0xe0)); + } else if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) { + if (request->bRequest == TUSB_REQ_SET_INTERFACE && + _btd_itf.itf_num + 1 == request->wIndex) { + // TODO: Set interface it would involve changing size of endpoint size + } else { + // HCI command packet for Primary Controller function in a composite device + TU_VERIFY(request->bRequest == 0 && request->wValue == 0 && + request->wIndex == _btd_itf.itf_num); + } + } else + return false; + + return tud_control_xfer(rhport, request, &_btd_itf.hci_cmd, sizeof(_btd_itf.hci_cmd)); + } else if (stage == CONTROL_STAGE_DATA) { + // Handle class request only + TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); + + if (tud_bt_hci_cmd_cb) + tud_bt_hci_cmd_cb(&_btd_itf.hci_cmd, + tu_min16(request->wLength, sizeof(_btd_itf.hci_cmd))); } - else return false; - - return tud_control_xfer(rhport, request, &_btd_itf.hci_cmd, sizeof(_btd_itf.hci_cmd)); - } - else if ( stage == CONTROL_STAGE_DATA ) - { - // Handle class request only - TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - if (tud_bt_hci_cmd_cb) tud_bt_hci_cmd_cb(&_btd_itf.hci_cmd, tu_min16(request->wLength, sizeof(_btd_itf.hci_cmd))); - } - - return true; + return true; } bool btd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void)result; - - // received new data from host - if (ep_addr == _btd_itf.ep_acl_out) - { - if (tud_bt_acl_data_received_cb) tud_bt_acl_data_received_cb(_btd_itf.epout_buf, xferred_bytes); - - // prepare for next data - TU_ASSERT(usbd_edpt_xfer(rhport, _btd_itf.ep_acl_out, _btd_itf.epout_buf, CFG_TUD_BTH_DATA_EPSIZE)); - } - else if (ep_addr == _btd_itf.ep_ev) - { - if (tud_bt_event_sent_cb) tud_bt_event_sent_cb((uint16_t)xferred_bytes); - } - else if (ep_addr == _btd_itf.ep_acl_in) - { - if (tud_bt_acl_data_sent_cb) tud_bt_acl_data_sent_cb((uint16_t)xferred_bytes); - } - - return true; + (void)result; + + // received new data from host + if (ep_addr == _btd_itf.ep_acl_out) { + if (tud_bt_acl_data_received_cb) + tud_bt_acl_data_received_cb(_btd_itf.epout_buf, xferred_bytes); + + // prepare for next data + TU_ASSERT(usbd_edpt_xfer(rhport, _btd_itf.ep_acl_out, _btd_itf.epout_buf, + CFG_TUD_BTH_DATA_EPSIZE)); + } else if (ep_addr == _btd_itf.ep_ev) { + if (tud_bt_event_sent_cb) + tud_bt_event_sent_cb((uint16_t)xferred_bytes); + } else if (ep_addr == _btd_itf.ep_acl_in) { + if (tud_bt_acl_data_sent_cb) + tud_bt_acl_data_sent_cb((uint16_t)xferred_bytes); + } + + return true; } #endif diff --git a/Libraries/tinyusb/src/class/bth/bth_device.h b/Libraries/tinyusb/src/class/bth/bth_device.h index 4f63508393e..960fa181af2 100644 --- a/Libraries/tinyusb/src/class/bth/bth_device.h +++ b/Libraries/tinyusb/src/class/bth/bth_device.h @@ -34,11 +34,11 @@ // Class Driver Configuration //--------------------------------------------------------------------+ #ifndef CFG_TUD_BTH_EVENT_EPSIZE -#define CFG_TUD_BTH_EVENT_EPSIZE 16 +#define CFG_TUD_BTH_EVENT_EPSIZE 16 #endif #ifndef CFG_TUD_BTH_DATA_EPSIZE -#define CFG_TUD_BTH_DATA_EPSIZE 64 +#define CFG_TUD_BTH_DATA_EPSIZE 64 #endif // Allow BTH class to work in historically compatibility mode where the bRequest is always 0xe0. @@ -47,15 +47,14 @@ #define CFG_TUD_BTH_HISTORICAL_COMPATIBLE 0 #endif -typedef struct TU_ATTR_PACKED -{ - uint16_t op_code; - uint8_t param_length; - uint8_t param[255]; +typedef struct TU_ATTR_PACKED { + uint16_t op_code; + uint8_t param_length; + uint8_t param[255]; } bt_hci_cmd_t; #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -103,15 +102,15 @@ bool tud_bt_acl_data_send(void *acl_data, uint16_t data_len); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void btd_init (void); -bool btd_deinit (void); -void btd_reset (uint8_t rhport); -uint16_t btd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool btd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); -bool btd_xfer_cb (uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); +void btd_init(void); +bool btd_deinit(void); +void btd_reset(uint8_t rhport); +uint16_t btd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool btd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +bool btd_xfer_cb(uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_BTH_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/cdc.h b/Libraries/tinyusb/src/class/cdc/cdc.h index 5cbd658fe24..9353eaae3b8 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc.h +++ b/Libraries/tinyusb/src/class/cdc/cdc.h @@ -35,7 +35,7 @@ #include "common/tusb_common.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif /** \defgroup ClassDriver_CDC_Common Common Definitions @@ -46,68 +46,82 @@ //--------------------------------------------------------------------+ /// Communication Interface Subclass Codes -typedef enum -{ - CDC_COMM_SUBCLASS_DIRECT_LINE_CONTROL_MODEL = 0x01 , ///< Direct Line Control Model [USBPSTN1.2] - CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL = 0x02 , ///< Abstract Control Model [USBPSTN1.2] - CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL = 0x03 , ///< Telephone Control Model [USBPSTN1.2] - CDC_COMM_SUBCLASS_MULTICHANNEL_CONTROL_MODEL = 0x04 , ///< Multi-Channel Control Model [USBISDN1.2] - CDC_COMM_SUBCLASS_CAPI_CONTROL_MODEL = 0x05 , ///< CAPI Control Model [USBISDN1.2] - CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL = 0x06 , ///< Ethernet Networking Control Model [USBECM1.2] - CDC_COMM_SUBCLASS_ATM_NETWORKING_CONTROL_MODEL = 0x07 , ///< ATM Networking Control Model [USBATM1.2] - CDC_COMM_SUBCLASS_WIRELESS_HANDSET_CONTROL_MODEL = 0x08 , ///< Wireless Handset Control Model [USBWMC1.1] - CDC_COMM_SUBCLASS_DEVICE_MANAGEMENT = 0x09 , ///< Device Management [USBWMC1.1] - CDC_COMM_SUBCLASS_MOBILE_DIRECT_LINE_MODEL = 0x0A , ///< Mobile Direct Line Model [USBWMC1.1] - CDC_COMM_SUBCLASS_OBEX = 0x0B , ///< OBEX [USBWMC1.1] - CDC_COMM_SUBCLASS_ETHERNET_EMULATION_MODEL = 0x0C , ///< Ethernet Emulation Model [USBEEM1.0] - CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL = 0x0D ///< Network Control Model [USBNCM1.0] +typedef enum { + CDC_COMM_SUBCLASS_DIRECT_LINE_CONTROL_MODEL = + 0x01, ///< Direct Line Control Model [USBPSTN1.2] + CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL = + 0x02, ///< Abstract Control Model [USBPSTN1.2] + CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL = + 0x03, ///< Telephone Control Model [USBPSTN1.2] + CDC_COMM_SUBCLASS_MULTICHANNEL_CONTROL_MODEL = + 0x04, ///< Multi-Channel Control Model [USBISDN1.2] + CDC_COMM_SUBCLASS_CAPI_CONTROL_MODEL = 0x05, ///< CAPI Control Model [USBISDN1.2] + CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL = + 0x06, ///< Ethernet Networking Control Model [USBECM1.2] + CDC_COMM_SUBCLASS_ATM_NETWORKING_CONTROL_MODEL = + 0x07, ///< ATM Networking Control Model [USBATM1.2] + CDC_COMM_SUBCLASS_WIRELESS_HANDSET_CONTROL_MODEL = + 0x08, ///< Wireless Handset Control Model [USBWMC1.1] + CDC_COMM_SUBCLASS_DEVICE_MANAGEMENT = 0x09, ///< Device Management [USBWMC1.1] + CDC_COMM_SUBCLASS_MOBILE_DIRECT_LINE_MODEL = + 0x0A, ///< Mobile Direct Line Model [USBWMC1.1] + CDC_COMM_SUBCLASS_OBEX = 0x0B, ///< OBEX [USBWMC1.1] + CDC_COMM_SUBCLASS_ETHERNET_EMULATION_MODEL = + 0x0C, ///< Ethernet Emulation Model [USBEEM1.0] + CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL = + 0x0D ///< Network Control Model [USBNCM1.0] } cdc_comm_sublcass_type_t; /// Communication Interface Protocol Codes -typedef enum -{ - CDC_COMM_PROTOCOL_NONE = 0x00 , ///< No specific protocol - CDC_COMM_PROTOCOL_ATCOMMAND = 0x01 , ///< AT Commands: V.250 etc - CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101 = 0x02 , ///< AT Commands defined by PCCA-101 - CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101_AND_ANNEXO = 0x03 , ///< AT Commands defined by PCCA-101 & Annex O - CDC_COMM_PROTOCOL_ATCOMMAND_GSM_707 = 0x04 , ///< AT Commands defined by GSM 07.07 - CDC_COMM_PROTOCOL_ATCOMMAND_3GPP_27007 = 0x05 , ///< AT Commands defined by 3GPP 27.007 - CDC_COMM_PROTOCOL_ATCOMMAND_CDMA = 0x06 , ///< AT Commands defined by TIA for CDMA - CDC_COMM_PROTOCOL_ETHERNET_EMULATION_MODEL = 0x07 ///< Ethernet Emulation Model +typedef enum { + CDC_COMM_PROTOCOL_NONE = 0x00, ///< No specific protocol + CDC_COMM_PROTOCOL_ATCOMMAND = 0x01, ///< AT Commands: V.250 etc + CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101 = 0x02, ///< AT Commands defined by PCCA-101 + CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101_AND_ANNEXO = + 0x03, ///< AT Commands defined by PCCA-101 & Annex O + CDC_COMM_PROTOCOL_ATCOMMAND_GSM_707 = 0x04, ///< AT Commands defined by GSM 07.07 + CDC_COMM_PROTOCOL_ATCOMMAND_3GPP_27007 = 0x05, ///< AT Commands defined by 3GPP 27.007 + CDC_COMM_PROTOCOL_ATCOMMAND_CDMA = 0x06, ///< AT Commands defined by TIA for CDMA + CDC_COMM_PROTOCOL_ETHERNET_EMULATION_MODEL = 0x07 ///< Ethernet Emulation Model } cdc_comm_protocol_type_t; //------------- SubType Descriptor in COMM Functional Descriptor -------------// /// Communication Interface SubType Descriptor -typedef enum -{ - CDC_FUNC_DESC_HEADER = 0x00 , ///< Header Functional Descriptor, which marks the beginning of the concatenated set of functional descriptors for the interface. - CDC_FUNC_DESC_CALL_MANAGEMENT = 0x01 , ///< Call Management Functional Descriptor. - CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT = 0x02 , ///< Abstract Control Management Functional Descriptor. - CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT = 0x03 , ///< Direct Line Management Functional Descriptor. - CDC_FUNC_DESC_TELEPHONE_RINGER = 0x04 , ///< Telephone Ringer Functional Descriptor. - CDC_FUNC_DESC_TELEPHONE_CALL_AND_LINE_STATE_REPORTING_CAPACITY = 0x05 , ///< Telephone Call and Line State Reporting Capabilities Functional Descriptor. - CDC_FUNC_DESC_UNION = 0x06 , ///< Union Functional Descriptor - CDC_FUNC_DESC_COUNTRY_SELECTION = 0x07 , ///< Country Selection Functional Descriptor - CDC_FUNC_DESC_TELEPHONE_OPERATIONAL_MODES = 0x08 , ///< Telephone Operational ModesFunctional Descriptor - CDC_FUNC_DESC_USB_TERMINAL = 0x09 , ///< USB Terminal Functional Descriptor - CDC_FUNC_DESC_NETWORK_CHANNEL_TERMINAL = 0x0A , ///< Network Channel Terminal Descriptor - CDC_FUNC_DESC_PROTOCOL_UNIT = 0x0B , ///< Protocol Unit Functional Descriptor - CDC_FUNC_DESC_EXTENSION_UNIT = 0x0C , ///< Extension Unit Functional Descriptor - CDC_FUNC_DESC_MULTICHANEL_MANAGEMENT = 0x0D , ///< Multi-Channel Management Functional Descriptor - CDC_FUNC_DESC_CAPI_CONTROL_MANAGEMENT = 0x0E , ///< CAPI Control Management Functional Descriptor - CDC_FUNC_DESC_ETHERNET_NETWORKING = 0x0F , ///< Ethernet Networking Functional Descriptor - CDC_FUNC_DESC_ATM_NETWORKING = 0x10 , ///< ATM Networking Functional Descriptor - CDC_FUNC_DESC_WIRELESS_HANDSET_CONTROL_MODEL = 0x11 , ///< Wireless Handset Control Model Functional Descriptor - CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL = 0x12 , ///< Mobile Direct Line Model Functional Descriptor - CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL_DETAIL = 0x13 , ///< MDLM Detail Functional Descriptor - CDC_FUNC_DESC_DEVICE_MANAGEMENT_MODEL = 0x14 , ///< Device Management Model Functional Descriptor - CDC_FUNC_DESC_OBEX = 0x15 , ///< OBEX Functional Descriptor - CDC_FUNC_DESC_COMMAND_SET = 0x16 , ///< Command Set Functional Descriptor - CDC_FUNC_DESC_COMMAND_SET_DETAIL = 0x17 , ///< Command Set Detail Functional Descriptor - CDC_FUNC_DESC_TELEPHONE_CONTROL_MODEL = 0x18 , ///< Telephone Control Model Functional Descriptor - CDC_FUNC_DESC_OBEX_SERVICE_IDENTIFIER = 0x19 , ///< OBEX Service Identifier Functional Descriptor - CDC_FUNC_DESC_NCM = 0x1A , ///< NCM Functional Descriptor -}cdc_func_desc_type_t; +typedef enum { + CDC_FUNC_DESC_HEADER = + 0x00, ///< Header Functional Descriptor, which marks the beginning of the concatenated set of functional descriptors for the interface. + CDC_FUNC_DESC_CALL_MANAGEMENT = 0x01, ///< Call Management Functional Descriptor. + CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT = + 0x02, ///< Abstract Control Management Functional Descriptor. + CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT = 0x03, ///< Direct Line Management Functional Descriptor. + CDC_FUNC_DESC_TELEPHONE_RINGER = 0x04, ///< Telephone Ringer Functional Descriptor. + CDC_FUNC_DESC_TELEPHONE_CALL_AND_LINE_STATE_REPORTING_CAPACITY = + 0x05, ///< Telephone Call and Line State Reporting Capabilities Functional Descriptor. + CDC_FUNC_DESC_UNION = 0x06, ///< Union Functional Descriptor + CDC_FUNC_DESC_COUNTRY_SELECTION = 0x07, ///< Country Selection Functional Descriptor + CDC_FUNC_DESC_TELEPHONE_OPERATIONAL_MODES = + 0x08, ///< Telephone Operational ModesFunctional Descriptor + CDC_FUNC_DESC_USB_TERMINAL = 0x09, ///< USB Terminal Functional Descriptor + CDC_FUNC_DESC_NETWORK_CHANNEL_TERMINAL = 0x0A, ///< Network Channel Terminal Descriptor + CDC_FUNC_DESC_PROTOCOL_UNIT = 0x0B, ///< Protocol Unit Functional Descriptor + CDC_FUNC_DESC_EXTENSION_UNIT = 0x0C, ///< Extension Unit Functional Descriptor + CDC_FUNC_DESC_MULTICHANEL_MANAGEMENT = 0x0D, ///< Multi-Channel Management Functional Descriptor + CDC_FUNC_DESC_CAPI_CONTROL_MANAGEMENT = 0x0E, ///< CAPI Control Management Functional Descriptor + CDC_FUNC_DESC_ETHERNET_NETWORKING = 0x0F, ///< Ethernet Networking Functional Descriptor + CDC_FUNC_DESC_ATM_NETWORKING = 0x10, ///< ATM Networking Functional Descriptor + CDC_FUNC_DESC_WIRELESS_HANDSET_CONTROL_MODEL = + 0x11, ///< Wireless Handset Control Model Functional Descriptor + CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL = + 0x12, ///< Mobile Direct Line Model Functional Descriptor + CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL_DETAIL = 0x13, ///< MDLM Detail Functional Descriptor + CDC_FUNC_DESC_DEVICE_MANAGEMENT_MODEL = 0x14, ///< Device Management Model Functional Descriptor + CDC_FUNC_DESC_OBEX = 0x15, ///< OBEX Functional Descriptor + CDC_FUNC_DESC_COMMAND_SET = 0x16, ///< Command Set Functional Descriptor + CDC_FUNC_DESC_COMMAND_SET_DETAIL = 0x17, ///< Command Set Detail Functional Descriptor + CDC_FUNC_DESC_TELEPHONE_CONTROL_MODEL = 0x18, ///< Telephone Control Model Functional Descriptor + CDC_FUNC_DESC_OBEX_SERVICE_IDENTIFIER = 0x19, ///< OBEX Service Identifier Functional Descriptor + CDC_FUNC_DESC_NCM = 0x1A, ///< NCM Functional Descriptor +} cdc_func_desc_type_t; //--------------------------------------------------------------------+ // CDC Data Interface Class @@ -116,20 +130,22 @@ typedef enum // SUBCLASS code of Data Interface is not used and should/must be zero // Data Interface Protocol Codes -typedef enum{ - CDC_DATA_PROTOCOL_ISDN_BRI = 0x30, ///< Physical interface protocol for ISDN BRI - CDC_DATA_PROTOCOL_HDLC = 0x31, ///< HDLC - CDC_DATA_PROTOCOL_TRANSPARENT = 0x32, ///< Transparent - CDC_DATA_PROTOCOL_Q921_MANAGEMENT = 0x50, ///< Management protocol for Q.921 data link protocol - CDC_DATA_PROTOCOL_Q921_DATA_LINK = 0x51, ///< Data link protocol for Q.931 - CDC_DATA_PROTOCOL_Q921_TEI_MULTIPLEXOR = 0x52, ///< TEI-multiplexor for Q.921 data link protocol - CDC_DATA_PROTOCOL_V42BIS_DATA_COMPRESSION = 0x90, ///< Data compression procedures - CDC_DATA_PROTOCOL_EURO_ISDN = 0x91, ///< Euro-ISDN protocol control - CDC_DATA_PROTOCOL_V24_RATE_ADAPTION_TO_ISDN = 0x92, ///< V.24 rate adaptation to ISDN - CDC_DATA_PROTOCOL_CAPI_COMMAND = 0x93, ///< CAPI Commands - CDC_DATA_PROTOCOL_HOST_BASED_DRIVER = 0xFD, ///< Host based driver. Note: This protocol code should only be used in messages between host and device to identify the host driver portion of a protocol stack. - CDC_DATA_PROTOCOL_IN_PROTOCOL_UNIT_FUNCTIONAL_DESCRIPTOR = 0xFE ///< The protocol(s) are described using a ProtocolUnit Functional Descriptors on Communications Class Interface -}cdc_data_protocol_type_t; +typedef enum { + CDC_DATA_PROTOCOL_ISDN_BRI = 0x30, ///< Physical interface protocol for ISDN BRI + CDC_DATA_PROTOCOL_HDLC = 0x31, ///< HDLC + CDC_DATA_PROTOCOL_TRANSPARENT = 0x32, ///< Transparent + CDC_DATA_PROTOCOL_Q921_MANAGEMENT = 0x50, ///< Management protocol for Q.921 data link protocol + CDC_DATA_PROTOCOL_Q921_DATA_LINK = 0x51, ///< Data link protocol for Q.931 + CDC_DATA_PROTOCOL_Q921_TEI_MULTIPLEXOR = 0x52, ///< TEI-multiplexor for Q.921 data link protocol + CDC_DATA_PROTOCOL_V42BIS_DATA_COMPRESSION = 0x90, ///< Data compression procedures + CDC_DATA_PROTOCOL_EURO_ISDN = 0x91, ///< Euro-ISDN protocol control + CDC_DATA_PROTOCOL_V24_RATE_ADAPTION_TO_ISDN = 0x92, ///< V.24 rate adaptation to ISDN + CDC_DATA_PROTOCOL_CAPI_COMMAND = 0x93, ///< CAPI Commands + CDC_DATA_PROTOCOL_HOST_BASED_DRIVER = + 0xFD, ///< Host based driver. Note: This protocol code should only be used in messages between host and device to identify the host driver portion of a protocol stack. + CDC_DATA_PROTOCOL_IN_PROTOCOL_UNIT_FUNCTIONAL_DESCRIPTOR = + 0xFE ///< The protocol(s) are described using a ProtocolUnit Functional Descriptors on Communications Class Interface +} cdc_data_protocol_type_t; //--------------------------------------------------------------------+ // Management Element Request (Control Endpoint) @@ -137,72 +153,74 @@ typedef enum{ /// Communication Interface Management Element Request Codes typedef enum { - CDC_REQUEST_SEND_ENCAPSULATED_COMMAND = 0x00, ///< is used to issue a command in the format of the supported control protocol of the Communications Class interface - CDC_REQUEST_GET_ENCAPSULATED_RESPONSE = 0x01, ///< is used to request a response in the format of the supported control protocol of the Communications Class interface. - CDC_REQUEST_SET_COMM_FEATURE = 0x02, - CDC_REQUEST_GET_COMM_FEATURE = 0x03, - CDC_REQUEST_CLEAR_COMM_FEATURE = 0x04, - - CDC_REQUEST_SET_AUX_LINE_STATE = 0x10, - CDC_REQUEST_SET_HOOK_STATE = 0x11, - CDC_REQUEST_PULSE_SETUP = 0x12, - CDC_REQUEST_SEND_PULSE = 0x13, - CDC_REQUEST_SET_PULSE_TIME = 0x14, - CDC_REQUEST_RING_AUX_JACK = 0x15, - - CDC_REQUEST_SET_LINE_CODING = 0x20, - CDC_REQUEST_GET_LINE_CODING = 0x21, - CDC_REQUEST_SET_CONTROL_LINE_STATE = 0x22, - CDC_REQUEST_SEND_BREAK = 0x23, - - CDC_REQUEST_SET_RINGER_PARMS = 0x30, - CDC_REQUEST_GET_RINGER_PARMS = 0x31, - CDC_REQUEST_SET_OPERATION_PARMS = 0x32, - CDC_REQUEST_GET_OPERATION_PARMS = 0x33, - CDC_REQUEST_SET_LINE_PARMS = 0x34, - CDC_REQUEST_GET_LINE_PARMS = 0x35, - CDC_REQUEST_DIAL_DIGITS = 0x36, - CDC_REQUEST_SET_UNIT_PARAMETER = 0x37, - CDC_REQUEST_GET_UNIT_PARAMETER = 0x38, - CDC_REQUEST_CLEAR_UNIT_PARAMETER = 0x39, - CDC_REQUEST_GET_PROFILE = 0x3A, - - CDC_REQUEST_SET_ETHERNET_MULTICAST_FILTERS = 0x40, - CDC_REQUEST_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, - CDC_REQUEST_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, - CDC_REQUEST_SET_ETHERNET_PACKET_FILTER = 0x43, - CDC_REQUEST_GET_ETHERNET_STATISTIC = 0x44, - - CDC_REQUEST_SET_ATM_DATA_FORMAT = 0x50, - CDC_REQUEST_GET_ATM_DEVICE_STATISTICS = 0x51, - CDC_REQUEST_SET_ATM_DEFAULT_VC = 0x52, - CDC_REQUEST_GET_ATM_VC_STATISTICS = 0x53, - - CDC_REQUEST_MDLM_SEMANTIC_MODEL = 0x60, + CDC_REQUEST_SEND_ENCAPSULATED_COMMAND = + 0x00, ///< is used to issue a command in the format of the supported control protocol of the Communications Class interface + CDC_REQUEST_GET_ENCAPSULATED_RESPONSE = + 0x01, ///< is used to request a response in the format of the supported control protocol of the Communications Class interface. + CDC_REQUEST_SET_COMM_FEATURE = 0x02, + CDC_REQUEST_GET_COMM_FEATURE = 0x03, + CDC_REQUEST_CLEAR_COMM_FEATURE = 0x04, + + CDC_REQUEST_SET_AUX_LINE_STATE = 0x10, + CDC_REQUEST_SET_HOOK_STATE = 0x11, + CDC_REQUEST_PULSE_SETUP = 0x12, + CDC_REQUEST_SEND_PULSE = 0x13, + CDC_REQUEST_SET_PULSE_TIME = 0x14, + CDC_REQUEST_RING_AUX_JACK = 0x15, + + CDC_REQUEST_SET_LINE_CODING = 0x20, + CDC_REQUEST_GET_LINE_CODING = 0x21, + CDC_REQUEST_SET_CONTROL_LINE_STATE = 0x22, + CDC_REQUEST_SEND_BREAK = 0x23, + + CDC_REQUEST_SET_RINGER_PARMS = 0x30, + CDC_REQUEST_GET_RINGER_PARMS = 0x31, + CDC_REQUEST_SET_OPERATION_PARMS = 0x32, + CDC_REQUEST_GET_OPERATION_PARMS = 0x33, + CDC_REQUEST_SET_LINE_PARMS = 0x34, + CDC_REQUEST_GET_LINE_PARMS = 0x35, + CDC_REQUEST_DIAL_DIGITS = 0x36, + CDC_REQUEST_SET_UNIT_PARAMETER = 0x37, + CDC_REQUEST_GET_UNIT_PARAMETER = 0x38, + CDC_REQUEST_CLEAR_UNIT_PARAMETER = 0x39, + CDC_REQUEST_GET_PROFILE = 0x3A, + + CDC_REQUEST_SET_ETHERNET_MULTICAST_FILTERS = 0x40, + CDC_REQUEST_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, + CDC_REQUEST_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, + CDC_REQUEST_SET_ETHERNET_PACKET_FILTER = 0x43, + CDC_REQUEST_GET_ETHERNET_STATISTIC = 0x44, + + CDC_REQUEST_SET_ATM_DATA_FORMAT = 0x50, + CDC_REQUEST_GET_ATM_DEVICE_STATISTICS = 0x51, + CDC_REQUEST_SET_ATM_DEFAULT_VC = 0x52, + CDC_REQUEST_GET_ATM_VC_STATISTICS = 0x53, + + CDC_REQUEST_MDLM_SEMANTIC_MODEL = 0x60, } cdc_management_request_t; typedef enum { - CDC_CONTROL_LINE_STATE_DTR = 0x01, - CDC_CONTROL_LINE_STATE_RTS = 0x02, + CDC_CONTROL_LINE_STATE_DTR = 0x01, + CDC_CONTROL_LINE_STATE_RTS = 0x02, } cdc_control_line_state_t; typedef enum { - CDC_LINE_CODING_STOP_BITS_1 = 0, // 1 bit - CDC_LINE_CODING_STOP_BITS_1_5 = 1, // 1.5 bits - CDC_LINE_CODING_STOP_BITS_2 = 2, // 2 bits + CDC_LINE_CODING_STOP_BITS_1 = 0, // 1 bit + CDC_LINE_CODING_STOP_BITS_1_5 = 1, // 1.5 bits + CDC_LINE_CODING_STOP_BITS_2 = 2, // 2 bits } cdc_line_coding_stopbits_t; // TODO Backward compatible for typos. Maybe removed in the future release -#define CDC_LINE_CONDING_STOP_BITS_1 CDC_LINE_CODING_STOP_BITS_1 +#define CDC_LINE_CONDING_STOP_BITS_1 CDC_LINE_CODING_STOP_BITS_1 #define CDC_LINE_CONDING_STOP_BITS_1_5 CDC_LINE_CODING_STOP_BITS_1_5 -#define CDC_LINE_CONDING_STOP_BITS_2 CDC_LINE_CODING_STOP_BITS_2 +#define CDC_LINE_CONDING_STOP_BITS_2 CDC_LINE_CODING_STOP_BITS_2 typedef enum { - CDC_LINE_CODING_PARITY_NONE = 0, - CDC_LINE_CODING_PARITY_ODD = 1, - CDC_LINE_CODING_PARITY_EVEN = 2, - CDC_LINE_CODING_PARITY_MARK = 3, - CDC_LINE_CODING_PARITY_SPACE = 4, + CDC_LINE_CODING_PARITY_NONE = 0, + CDC_LINE_CODING_PARITY_ODD = 1, + CDC_LINE_CODING_PARITY_EVEN = 2, + CDC_LINE_CODING_PARITY_MARK = 3, + CDC_LINE_CODING_PARITY_SPACE = 4, } cdc_line_coding_parity_t; //--------------------------------------------------------------------+ @@ -211,16 +229,19 @@ typedef enum { /// 6.3 Notification Codes typedef enum { - CDC_NOTIF_NETWORK_CONNECTION = 0x00, ///< This notification allows the device to notify the host about network connection status. - CDC_NOTIF_RESPONSE_AVAILABLE = 0x01, ///< This notification allows the device to notify the hostthat a response is available. This response can be retrieved with a subsequent \ref CDC_REQUEST_GET_ENCAPSULATED_RESPONSE request. - CDC_NOTIF_AUX_JACK_HOOK_STATE = 0x08, - CDC_NOTIF_RING_DETECT = 0x09, - CDC_NOTIF_SERIAL_STATE = 0x20, - CDC_NOTIF_CALL_STATE_CHANGE = 0x28, - CDC_NOTIF_LINE_STATE_CHANGE = 0x29, - CDC_NOTIF_CONNECTION_SPEED_CHANGE = 0x2A, ///< This notification allows the device to inform the host-networking driver that a change in either the upstream or the downstream bit rate of the connection has occurred - CDC_NOTIF_MDLM_SEMANTIC_MODEL_NOTIFICATION = 0x40, -}cdc_notification_request_t; + CDC_NOTIF_NETWORK_CONNECTION = + 0x00, ///< This notification allows the device to notify the host about network connection status. + CDC_NOTIF_RESPONSE_AVAILABLE = + 0x01, ///< This notification allows the device to notify the hostthat a response is available. This response can be retrieved with a subsequent \ref CDC_REQUEST_GET_ENCAPSULATED_RESPONSE request. + CDC_NOTIF_AUX_JACK_HOOK_STATE = 0x08, + CDC_NOTIF_RING_DETECT = 0x09, + CDC_NOTIF_SERIAL_STATE = 0x20, + CDC_NOTIF_CALL_STATE_CHANGE = 0x28, + CDC_NOTIF_LINE_STATE_CHANGE = 0x29, + CDC_NOTIF_CONNECTION_SPEED_CHANGE = + 0x2A, ///< This notification allows the device to inform the host-networking driver that a change in either the upstream or the downstream bit rate of the connection has occurred + CDC_NOTIF_MDLM_SEMANTIC_MODEL_NOTIFICATION = 0x40, +} cdc_notification_request_t; //--------------------------------------------------------------------+ // Class Specific Functional Descriptor (Communication Interface) @@ -231,51 +252,50 @@ TU_ATTR_PACKED_BEGIN TU_ATTR_BIT_FIELD_ORDER_BEGIN /// Header Functional Descriptor (Communication Interface) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUNC_DESC_ - uint16_t bcdCDC ; ///< CDC release number in Binary-Coded Decimal -}cdc_desc_func_header_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUNC_DESC_ + uint16_t bcdCDC; ///< CDC release number in Binary-Coded Decimal +} cdc_desc_func_header_t; /// Union Functional Descriptor (Communication Interface) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - uint8_t bControlInterface ; ///< Interface number of Communication Interface - uint8_t bSubordinateInterface ; ///< Array of Interface number of Data Interface -}cdc_desc_func_union_t; - -#define cdc_desc_func_union_n_t(no_slave)\ - struct TU_ATTR_PACKED { \ - uint8_t bLength ;\ - uint8_t bDescriptorType ;\ - uint8_t bDescriptorSubType ;\ - uint8_t bControlInterface ;\ - uint8_t bSubordinateInterface[no_slave] ;\ -} +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + uint8_t bControlInterface; ///< Interface number of Communication Interface + uint8_t bSubordinateInterface; ///< Array of Interface number of Data Interface +} cdc_desc_func_union_t; + +#define cdc_desc_func_union_n_t(no_slave) \ + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bControlInterface; \ + uint8_t bSubordinateInterface[no_slave]; \ + } /// Country Selection Functional Descriptor (Communication Interface) -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - uint8_t iCountryCodeRelDate ; ///< Index of a string giving the release date for the implemented ISO 3166 Country Codes. - uint16_t wCountryCode ; ///< Country code in the format as defined in [ISO3166], release date as specified inoffset 3 for the first supported country. -}cdc_desc_func_country_selection_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + uint8_t + iCountryCodeRelDate; ///< Index of a string giving the release date for the implemented ISO 3166 Country Codes. + uint16_t + wCountryCode; ///< Country code in the format as defined in [ISO3166], release date as specified inoffset 3 for the first supported country. +} cdc_desc_func_country_selection_t; #define cdc_desc_func_country_selection_n_t(no_country) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength ;\ - uint8_t bDescriptorType ;\ - uint8_t bDescriptorSubType ;\ - uint8_t iCountryCodeRelDate ;\ - uint16_t wCountryCode[no_country] ;\ -} + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t iCountryCodeRelDate; \ + uint16_t wCountryCode[no_country]; \ + } //--------------------------------------------------------------------+ // PUBLIC SWITCHED TELEPHONE NETWORK (PSTN) SUBCLASS @@ -283,140 +303,144 @@ typedef struct TU_ATTR_PACKED /// \brief Call Management Functional Descriptor /// \details This functional descriptor describes the processing of calls for the Communications Class interface. -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - - struct { - uint8_t handle_call : 1; ///< 0 - Device sends/receives call management information only over the Communications Class interface. 1 - Device can send/receive call management information over a Data Class interface. - uint8_t send_recv_call : 1; ///< 0 - Device does not handle call management itself. 1 - Device handles call management itself. - uint8_t TU_RESERVED : 6; - } bmCapabilities; - - uint8_t bDataInterface; -}cdc_desc_func_call_management_t; - -typedef struct TU_ATTR_PACKED -{ - uint8_t support_comm_request : 1; ///< Device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and Get_Comm_Feature. - uint8_t support_line_request : 1; ///< Device supports the request combination of Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State. - uint8_t support_send_break : 1; ///< Device supports the request Send_Break - uint8_t support_notification_network_connection : 1; ///< Device supports the notification Network_Connection. - uint8_t TU_RESERVED : 4; -}cdc_acm_capability_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + + struct { + uint8_t + handle_call : 1; ///< 0 - Device sends/receives call management information only over the Communications Class interface. 1 - Device can send/receive call management information over a Data Class interface. + uint8_t + send_recv_call : 1; ///< 0 - Device does not handle call management itself. 1 - Device handles call management itself. + uint8_t TU_RESERVED : 6; + } bmCapabilities; + + uint8_t bDataInterface; +} cdc_desc_func_call_management_t; + +typedef struct TU_ATTR_PACKED { + uint8_t + support_comm_request : 1; ///< Device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and Get_Comm_Feature. + uint8_t + support_line_request : 1; ///< Device supports the request combination of Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State. + uint8_t support_send_break : 1; ///< Device supports the request Send_Break + uint8_t + support_notification_network_connection : 1; ///< Device supports the notification Network_Connection. + uint8_t TU_RESERVED : 4; +} cdc_acm_capability_t; TU_VERIFY_STATIC(sizeof(cdc_acm_capability_t) == 1, "mostly problem with compiler"); /// Abstract Control Management Functional Descriptor /// This functional descriptor describes the commands supported by by the Communications Class interface with SubClass code of \ref CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - cdc_acm_capability_t bmCapabilities ; -}cdc_desc_func_acm_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + cdc_acm_capability_t bmCapabilities; +} cdc_desc_func_acm_t; /// \brief Direct Line Management Functional Descriptor /// \details This functional descriptor describes the commands supported by the Communications Class interface with SubClass code of \ref CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - struct { - uint8_t require_pulse_setup : 1; ///< Device requires extra Pulse_Setup request during pulse dialing sequence to disengage holding circuit. - uint8_t support_aux_request : 1; ///< Device supports the request combination of Set_Aux_Line_State, Ring_Aux_Jack, and notification Aux_Jack_Hook_State. - uint8_t support_pulse_request : 1; ///< Device supports the request combination of Pulse_Setup, Send_Pulse, and Set_Pulse_Time. - uint8_t TU_RESERVED : 5; - } bmCapabilities; -}cdc_desc_func_direct_line_management_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + struct { + uint8_t + require_pulse_setup : 1; ///< Device requires extra Pulse_Setup request during pulse dialing sequence to disengage holding circuit. + uint8_t + support_aux_request : 1; ///< Device supports the request combination of Set_Aux_Line_State, Ring_Aux_Jack, and notification Aux_Jack_Hook_State. + uint8_t + support_pulse_request : 1; ///< Device supports the request combination of Pulse_Setup, Send_Pulse, and Set_Pulse_Time. + uint8_t TU_RESERVED : 5; + } bmCapabilities; +} cdc_desc_func_direct_line_management_t; /// \brief Telephone Ringer Functional Descriptor /// \details The Telephone Ringer functional descriptor describes the ringer capabilities supported by the Communications Class interface, /// with the SubClass code of \ref CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - uint8_t bRingerVolSteps ; - uint8_t bNumRingerPatterns ; -}cdc_desc_func_telephone_ringer_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + uint8_t bRingerVolSteps; + uint8_t bNumRingerPatterns; +} cdc_desc_func_telephone_ringer_t; /// \brief Telephone Operational Modes Functional Descriptor /// \details The Telephone Operational Modes functional descriptor describes the operational modes supported by /// the Communications Class interface, with the SubClass code of \ref CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - struct { - uint8_t simple_mode : 1; - uint8_t standalone_mode : 1; - uint8_t computer_centric_mode : 1; - uint8_t TU_RESERVED : 5; - } bmCapabilities; -}cdc_desc_func_telephone_operational_modes_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + struct { + uint8_t simple_mode : 1; + uint8_t standalone_mode : 1; + uint8_t computer_centric_mode : 1; + uint8_t TU_RESERVED : 5; + } bmCapabilities; +} cdc_desc_func_telephone_operational_modes_t; /// \brief Telephone Call and Line State Reporting Capabilities Descriptor /// \details The Telephone Call and Line State Reporting Capabilities functional descriptor describes the abilities of a /// telephone device to report optional call and line states. -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - struct { - uint32_t interrupted_dialtone : 1; ///< 0 : Reports only dialtone (does not differentiate between normal and interrupted dialtone). 1 : Reports interrupted dialtone in addition to normal dialtone - uint32_t ringback_busy_fastbusy : 1; ///< 0 : Reports only dialing state. 1 : Reports ringback, busy, and fast busy states. - uint32_t caller_id : 1; ///< 0 : Does not report caller ID. 1 : Reports caller ID information. - uint32_t incoming_distinctive : 1; ///< 0 : Reports only incoming ringing. 1 : Reports incoming distinctive ringing patterns. - uint32_t dual_tone_multi_freq : 1; ///< 0 : Cannot report dual tone multi-frequency (DTMF) digits input remotely over the telephone line. 1 : Can report DTMF digits input remotely over the telephone line. - uint32_t line_state_change : 1; ///< 0 : Does not support line state change notification. 1 : Does support line state change notification - uint32_t TU_RESERVED0 : 2; - uint32_t TU_RESERVED1 : 16; - uint32_t TU_RESERVED2 : 8; - } bmCapabilities; -}cdc_desc_func_telephone_call_state_reporting_capabilities_t; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + struct { + uint32_t + interrupted_dialtone : 1; ///< 0 : Reports only dialtone (does not differentiate between normal and interrupted dialtone). 1 : Reports interrupted dialtone in addition to normal dialtone + uint32_t + ringback_busy_fastbusy : 1; ///< 0 : Reports only dialing state. 1 : Reports ringback, busy, and fast busy states. + uint32_t caller_id : 1; ///< 0 : Does not report caller ID. 1 : Reports caller ID information. + uint32_t + incoming_distinctive : 1; ///< 0 : Reports only incoming ringing. 1 : Reports incoming distinctive ringing patterns. + uint32_t + dual_tone_multi_freq : 1; ///< 0 : Cannot report dual tone multi-frequency (DTMF) digits input remotely over the telephone line. 1 : Can report DTMF digits input remotely over the telephone line. + uint32_t + line_state_change : 1; ///< 0 : Does not support line state change notification. 1 : Does support line state change notification + uint32_t TU_RESERVED0 : 2; + uint32_t TU_RESERVED1 : 16; + uint32_t TU_RESERVED2 : 8; + } bmCapabilities; +} cdc_desc_func_telephone_call_state_reporting_capabilities_t; // TODO remove -static inline uint8_t cdc_functional_desc_typeof(uint8_t const * p_desc) +static inline uint8_t cdc_functional_desc_typeof(uint8_t const *p_desc) { - return p_desc[2]; + return p_desc[2]; } //--------------------------------------------------------------------+ // Requests //--------------------------------------------------------------------+ -typedef struct TU_ATTR_PACKED -{ - uint32_t bit_rate; - uint8_t stop_bits; ///< 0: 1 stop bit - 1: 1.5 stop bits - 2: 2 stop bits - uint8_t parity; ///< 0: None - 1: Odd - 2: Even - 3: Mark - 4: Space - uint8_t data_bits; ///< can be 5, 6, 7, 8 or 16 +typedef struct TU_ATTR_PACKED { + uint32_t bit_rate; + uint8_t stop_bits; ///< 0: 1 stop bit - 1: 1.5 stop bits - 2: 2 stop bits + uint8_t parity; ///< 0: None - 1: Odd - 2: Even - 3: Mark - 4: Space + uint8_t data_bits; ///< can be 5, 6, 7, 8 or 16 } cdc_line_coding_t; TU_VERIFY_STATIC(sizeof(cdc_line_coding_t) == 7, "size is not correct"); -typedef struct TU_ATTR_PACKED -{ - uint16_t dtr : 1; - uint16_t rts : 1; - uint16_t : 6; - uint16_t : 8; +typedef struct TU_ATTR_PACKED { + uint16_t dtr : 1; + uint16_t rts : 1; + uint16_t : 6; + uint16_t : 8; } cdc_line_control_state_t; TU_VERIFY_STATIC(sizeof(cdc_line_control_state_t) == 2, "size is not correct"); -TU_ATTR_PACKED_END // End of all packed definitions -TU_ATTR_BIT_FIELD_ORDER_END +TU_ATTR_PACKED_END // End of all packed definitions + TU_ATTR_BIT_FIELD_ORDER_END #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/class/cdc/cdc_device.c b/Libraries/tinyusb/src/class/cdc/cdc_device.c index ebc408f5a88..e403a6786f6 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_device.c +++ b/Libraries/tinyusb/src/class/cdc/cdc_device.c @@ -35,10 +35,10 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_CDC_LOG_LEVEL - #define CFG_TUD_CDC_LOG_LEVEL CFG_TUD_LOG_LEVEL +#define CFG_TUD_CDC_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_CDC_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_CDC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF @@ -46,34 +46,34 @@ #define BULK_PACKET_SIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) typedef struct { - uint8_t itf_num; - uint8_t ep_notif; - uint8_t ep_in; - uint8_t ep_out; + uint8_t itf_num; + uint8_t ep_notif; + uint8_t ep_in; + uint8_t ep_out; - // Bit 0: DTR (Data Terminal Ready), Bit 1: RTS (Request to Send) - uint8_t line_state; + // Bit 0: DTR (Data Terminal Ready), Bit 1: RTS (Request to Send) + uint8_t line_state; - /*------------- From this point, data is not cleared by bus reset -------------*/ - char wanted_char; - TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; + /*------------- From this point, data is not cleared by bus reset -------------*/ + char wanted_char; + TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; - // FIFO - tu_fifo_t rx_ff; - tu_fifo_t tx_ff; + // FIFO + tu_fifo_t rx_ff; + tu_fifo_t tx_ff; - uint8_t rx_ff_buf[CFG_TUD_CDC_RX_BUFSIZE]; - uint8_t tx_ff_buf[CFG_TUD_CDC_TX_BUFSIZE]; + uint8_t rx_ff_buf[CFG_TUD_CDC_RX_BUFSIZE]; + uint8_t tx_ff_buf[CFG_TUD_CDC_TX_BUFSIZE]; - OSAL_MUTEX_DEF(rx_ff_mutex); - OSAL_MUTEX_DEF(tx_ff_mutex); + OSAL_MUTEX_DEF(rx_ff_mutex); + OSAL_MUTEX_DEF(tx_ff_mutex); - // Endpoint Transfer buffer - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_CDC_EP_BUFSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_CDC_EP_BUFSIZE]; + // Endpoint Transfer buffer + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_CDC_EP_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_CDC_EP_BUFSIZE]; } cdcd_interface_t; -#define ITF_MEM_RESET_SIZE offsetof(cdcd_interface_t, wanted_char) +#define ITF_MEM_RESET_SIZE offsetof(cdcd_interface_t, wanted_char) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION @@ -81,402 +81,439 @@ typedef struct { CFG_TUD_MEM_SECTION static cdcd_interface_t _cdcd_itf[CFG_TUD_CDC]; static tud_cdc_configure_fifo_t _cdcd_fifo_cfg; -static bool _prep_out_transaction (cdcd_interface_t* p_cdc) { - uint8_t const rhport = 0; +static bool _prep_out_transaction(cdcd_interface_t *p_cdc) +{ + uint8_t const rhport = 0; - // Skip if usb is not ready yet - TU_VERIFY(tud_ready() && p_cdc->ep_out); + // Skip if usb is not ready yet + TU_VERIFY(tud_ready() && p_cdc->ep_out); - uint16_t available = tu_fifo_remaining(&p_cdc->rx_ff); + uint16_t available = tu_fifo_remaining(&p_cdc->rx_ff); - // Prepare for incoming data but only allow what we can store in the ring buffer. - // TODO Actually we can still carry out the transfer, keeping count of received bytes - // and slowly move it to the FIFO when read(). - // This pre-check reduces endpoint claiming - TU_VERIFY(available >= sizeof(p_cdc->epout_buf)); + // Prepare for incoming data but only allow what we can store in the ring buffer. + // TODO Actually we can still carry out the transfer, keeping count of received bytes + // and slowly move it to the FIFO when read(). + // This pre-check reduces endpoint claiming + TU_VERIFY(available >= sizeof(p_cdc->epout_buf)); - // claim endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_out)); + // claim endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_out)); - // fifo can be changed before endpoint is claimed - available = tu_fifo_remaining(&p_cdc->rx_ff); + // fifo can be changed before endpoint is claimed + available = tu_fifo_remaining(&p_cdc->rx_ff); - if ( available >= sizeof(p_cdc->epout_buf) ) { - return usbd_edpt_xfer(rhport, p_cdc->ep_out, p_cdc->epout_buf, sizeof(p_cdc->epout_buf)); - }else { - // Release endpoint since we don't make any transfer - usbd_edpt_release(rhport, p_cdc->ep_out); - return false; - } + if (available >= sizeof(p_cdc->epout_buf)) { + return usbd_edpt_xfer(rhport, p_cdc->ep_out, p_cdc->epout_buf, sizeof(p_cdc->epout_buf)); + } else { + // Release endpoint since we don't make any transfer + usbd_edpt_release(rhport, p_cdc->ep_out); + return false; + } } //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ -bool tud_cdc_configure_fifo(tud_cdc_configure_fifo_t const* cfg) { - TU_VERIFY(cfg); - _cdcd_fifo_cfg = (*cfg); - return true; +bool tud_cdc_configure_fifo(tud_cdc_configure_fifo_t const *cfg) +{ + TU_VERIFY(cfg); + _cdcd_fifo_cfg = (*cfg); + return true; } -bool tud_cdc_n_ready(uint8_t itf) { - return tud_ready() && _cdcd_itf[itf].ep_in != 0 && _cdcd_itf[itf].ep_out != 0; +bool tud_cdc_n_ready(uint8_t itf) +{ + return tud_ready() && _cdcd_itf[itf].ep_in != 0 && _cdcd_itf[itf].ep_out != 0; } -bool tud_cdc_n_connected(uint8_t itf) { - // DTR (bit 0) active is considered as connected - return tud_ready() && tu_bit_test(_cdcd_itf[itf].line_state, 0); +bool tud_cdc_n_connected(uint8_t itf) +{ + // DTR (bit 0) active is considered as connected + return tud_ready() && tu_bit_test(_cdcd_itf[itf].line_state, 0); } -uint8_t tud_cdc_n_get_line_state(uint8_t itf) { - return _cdcd_itf[itf].line_state; +uint8_t tud_cdc_n_get_line_state(uint8_t itf) +{ + return _cdcd_itf[itf].line_state; } -void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t* coding) { - (*coding) = _cdcd_itf[itf].line_coding; +void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t *coding) +{ + (*coding) = _cdcd_itf[itf].line_coding; } -void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted) { - _cdcd_itf[itf].wanted_char = wanted; +void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted) +{ + _cdcd_itf[itf].wanted_char = wanted; } //--------------------------------------------------------------------+ // READ API //--------------------------------------------------------------------+ -uint32_t tud_cdc_n_available(uint8_t itf) { - return tu_fifo_count(&_cdcd_itf[itf].rx_ff); +uint32_t tud_cdc_n_available(uint8_t itf) +{ + return tu_fifo_count(&_cdcd_itf[itf].rx_ff); } -uint32_t tud_cdc_n_read(uint8_t itf, void* buffer, uint32_t bufsize) { - cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; - uint32_t num_read = tu_fifo_read_n(&p_cdc->rx_ff, buffer, (uint16_t) TU_MIN(bufsize, UINT16_MAX)); - _prep_out_transaction(p_cdc); - return num_read; +uint32_t tud_cdc_n_read(uint8_t itf, void *buffer, uint32_t bufsize) +{ + cdcd_interface_t *p_cdc = &_cdcd_itf[itf]; + uint32_t num_read = + tu_fifo_read_n(&p_cdc->rx_ff, buffer, (uint16_t)TU_MIN(bufsize, UINT16_MAX)); + _prep_out_transaction(p_cdc); + return num_read; } -bool tud_cdc_n_peek(uint8_t itf, uint8_t* chr) { - return tu_fifo_peek(&_cdcd_itf[itf].rx_ff, chr); +bool tud_cdc_n_peek(uint8_t itf, uint8_t *chr) +{ + return tu_fifo_peek(&_cdcd_itf[itf].rx_ff, chr); } -void tud_cdc_n_read_flush(uint8_t itf) { - cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; - tu_fifo_clear(&p_cdc->rx_ff); - _prep_out_transaction(p_cdc); +void tud_cdc_n_read_flush(uint8_t itf) +{ + cdcd_interface_t *p_cdc = &_cdcd_itf[itf]; + tu_fifo_clear(&p_cdc->rx_ff); + _prep_out_transaction(p_cdc); } //--------------------------------------------------------------------+ // WRITE API //--------------------------------------------------------------------+ -uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize) { - cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; - uint16_t ret = tu_fifo_write_n(&p_cdc->tx_ff, buffer, (uint16_t) TU_MIN(bufsize, UINT16_MAX)); - - // flush if queue more than packet size - if (tu_fifo_count(&p_cdc->tx_ff) >= BULK_PACKET_SIZE - #if CFG_TUD_CDC_TX_BUFSIZE < BULK_PACKET_SIZE - || tu_fifo_full(&p_cdc->tx_ff) // check full if fifo size is less than packet size - #endif - ) { - tud_cdc_n_write_flush(itf); - } - - return ret; +uint32_t tud_cdc_n_write(uint8_t itf, void const *buffer, uint32_t bufsize) +{ + cdcd_interface_t *p_cdc = &_cdcd_itf[itf]; + uint16_t ret = tu_fifo_write_n(&p_cdc->tx_ff, buffer, (uint16_t)TU_MIN(bufsize, UINT16_MAX)); + + // flush if queue more than packet size + if (tu_fifo_count(&p_cdc->tx_ff) >= BULK_PACKET_SIZE +#if CFG_TUD_CDC_TX_BUFSIZE < BULK_PACKET_SIZE + || tu_fifo_full(&p_cdc->tx_ff) // check full if fifo size is less than packet size +#endif + ) { + tud_cdc_n_write_flush(itf); + } + + return ret; } -uint32_t tud_cdc_n_write_flush(uint8_t itf) { - cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; +uint32_t tud_cdc_n_write_flush(uint8_t itf) +{ + cdcd_interface_t *p_cdc = &_cdcd_itf[itf]; - // Skip if usb is not ready yet - TU_VERIFY(tud_ready(), 0); + // Skip if usb is not ready yet + TU_VERIFY(tud_ready(), 0); - // No data to send - if (!tu_fifo_count(&p_cdc->tx_ff)) return 0; + // No data to send + if (!tu_fifo_count(&p_cdc->tx_ff)) + return 0; - uint8_t const rhport = 0; + uint8_t const rhport = 0; - // Claim the endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_in), 0); + // Claim the endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_in), 0); - // Pull data from FIFO - uint16_t const count = tu_fifo_read_n(&p_cdc->tx_ff, p_cdc->epin_buf, sizeof(p_cdc->epin_buf)); + // Pull data from FIFO + uint16_t const count = tu_fifo_read_n(&p_cdc->tx_ff, p_cdc->epin_buf, sizeof(p_cdc->epin_buf)); - if (count) { - TU_ASSERT(usbd_edpt_xfer(rhport, p_cdc->ep_in, p_cdc->epin_buf, count), 0); - return count; - } else { - // Release endpoint since we don't make any transfer - // Note: data is dropped if terminal is not connected - usbd_edpt_release(rhport, p_cdc->ep_in); - return 0; - } + if (count) { + TU_ASSERT(usbd_edpt_xfer(rhport, p_cdc->ep_in, p_cdc->epin_buf, count), 0); + return count; + } else { + // Release endpoint since we don't make any transfer + // Note: data is dropped if terminal is not connected + usbd_edpt_release(rhport, p_cdc->ep_in); + return 0; + } } -uint32_t tud_cdc_n_write_available(uint8_t itf) { - return tu_fifo_remaining(&_cdcd_itf[itf].tx_ff); +uint32_t tud_cdc_n_write_available(uint8_t itf) +{ + return tu_fifo_remaining(&_cdcd_itf[itf].tx_ff); } -bool tud_cdc_n_write_clear(uint8_t itf) { - return tu_fifo_clear(&_cdcd_itf[itf].tx_ff); +bool tud_cdc_n_write_clear(uint8_t itf) +{ + return tu_fifo_clear(&_cdcd_itf[itf].tx_ff); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void cdcd_init(void) { - tu_memclr(_cdcd_itf, sizeof(_cdcd_itf)); - tu_memclr(&_cdcd_fifo_cfg, sizeof(_cdcd_fifo_cfg)); - - for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { - cdcd_interface_t* p_cdc = &_cdcd_itf[i]; - - p_cdc->wanted_char = (char) -1; - - // default line coding is : stop bit = 1, parity = none, data bits = 8 - p_cdc->line_coding.bit_rate = 115200; - p_cdc->line_coding.stop_bits = 0; - p_cdc->line_coding.parity = 0; - p_cdc->line_coding.data_bits = 8; - - // Config RX fifo - tu_fifo_config(&p_cdc->rx_ff, p_cdc->rx_ff_buf, TU_ARRAY_SIZE(p_cdc->rx_ff_buf), 1, false); - - // Config TX fifo as overwritable at initialization and will be changed to non-overwritable - // if terminal supports DTR bit. Without DTR we do not know if data is actually polled by terminal. - // In this way, the most current data is prioritized. - tu_fifo_config(&p_cdc->tx_ff, p_cdc->tx_ff_buf, TU_ARRAY_SIZE(p_cdc->tx_ff_buf), 1, true); - - #if OSAL_MUTEX_REQUIRED - osal_mutex_t mutex_rd = osal_mutex_create(&p_cdc->rx_ff_mutex); - osal_mutex_t mutex_wr = osal_mutex_create(&p_cdc->tx_ff_mutex); - TU_ASSERT(mutex_rd != NULL && mutex_wr != NULL, ); - - tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, mutex_rd); - tu_fifo_config_mutex(&p_cdc->tx_ff, mutex_wr, NULL); - #endif - } -} +void cdcd_init(void) +{ + tu_memclr(_cdcd_itf, sizeof(_cdcd_itf)); + tu_memclr(&_cdcd_fifo_cfg, sizeof(_cdcd_fifo_cfg)); + + for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { + cdcd_interface_t *p_cdc = &_cdcd_itf[i]; + + p_cdc->wanted_char = (char)-1; -bool cdcd_deinit(void) { - #if OSAL_MUTEX_REQUIRED - for(uint8_t i=0; irx_ff.mutex_rd; - osal_mutex_t mutex_wr = p_cdc->tx_ff.mutex_wr; + // default line coding is : stop bit = 1, parity = none, data bits = 8 + p_cdc->line_coding.bit_rate = 115200; + p_cdc->line_coding.stop_bits = 0; + p_cdc->line_coding.parity = 0; + p_cdc->line_coding.data_bits = 8; - if (mutex_rd) { - osal_mutex_delete(mutex_rd); - tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, NULL); + // Config RX fifo + tu_fifo_config(&p_cdc->rx_ff, p_cdc->rx_ff_buf, TU_ARRAY_SIZE(p_cdc->rx_ff_buf), 1, false); + + // Config TX fifo as overwritable at initialization and will be changed to non-overwritable + // if terminal supports DTR bit. Without DTR we do not know if data is actually polled by terminal. + // In this way, the most current data is prioritized. + tu_fifo_config(&p_cdc->tx_ff, p_cdc->tx_ff_buf, TU_ARRAY_SIZE(p_cdc->tx_ff_buf), 1, true); + +#if OSAL_MUTEX_REQUIRED + osal_mutex_t mutex_rd = osal_mutex_create(&p_cdc->rx_ff_mutex); + osal_mutex_t mutex_wr = osal_mutex_create(&p_cdc->tx_ff_mutex); + TU_ASSERT(mutex_rd != NULL && mutex_wr != NULL, ); + + tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, mutex_rd); + tu_fifo_config_mutex(&p_cdc->tx_ff, mutex_wr, NULL); +#endif } +} - if (mutex_wr) { - osal_mutex_delete(mutex_wr); - tu_fifo_config_mutex(&p_cdc->tx_ff, NULL, NULL); +bool cdcd_deinit(void) +{ +#if OSAL_MUTEX_REQUIRED + for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { + cdcd_interface_t *p_cdc = &_cdcd_itf[i]; + osal_mutex_t mutex_rd = p_cdc->rx_ff.mutex_rd; + osal_mutex_t mutex_wr = p_cdc->tx_ff.mutex_wr; + + if (mutex_rd) { + osal_mutex_delete(mutex_rd); + tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, NULL); + } + + if (mutex_wr) { + osal_mutex_delete(mutex_wr); + tu_fifo_config_mutex(&p_cdc->tx_ff, NULL, NULL); + } } - } - #endif +#endif - return true; + return true; } -void cdcd_reset(uint8_t rhport) { - (void) rhport; +void cdcd_reset(uint8_t rhport) +{ + (void)rhport; - for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { - cdcd_interface_t* p_cdc = &_cdcd_itf[i]; + for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { + cdcd_interface_t *p_cdc = &_cdcd_itf[i]; - tu_memclr(p_cdc, ITF_MEM_RESET_SIZE); - if (!_cdcd_fifo_cfg.rx_persistent) tu_fifo_clear(&p_cdc->rx_ff); - if (!_cdcd_fifo_cfg.tx_persistent) tu_fifo_clear(&p_cdc->tx_ff); - tu_fifo_set_overwritable(&p_cdc->tx_ff, true); - } + tu_memclr(p_cdc, ITF_MEM_RESET_SIZE); + if (!_cdcd_fifo_cfg.rx_persistent) + tu_fifo_clear(&p_cdc->rx_ff); + if (!_cdcd_fifo_cfg.tx_persistent) + tu_fifo_clear(&p_cdc->tx_ff); + tu_fifo_set_overwritable(&p_cdc->tx_ff, true); + } } -uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { - // Only support ACM subclass - TU_VERIFY( TUSB_CLASS_CDC == itf_desc->bInterfaceClass && - CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass, 0); - - // Find available interface - cdcd_interface_t* p_cdc = NULL; - for (uint8_t cdc_id = 0; cdc_id < CFG_TUD_CDC; cdc_id++) { - if (_cdcd_itf[cdc_id].ep_in == 0) { - p_cdc = &_cdcd_itf[cdc_id]; - break; +uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +{ + // Only support ACM subclass + TU_VERIFY(TUSB_CLASS_CDC == itf_desc->bInterfaceClass && + CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass, + 0); + + // Find available interface + cdcd_interface_t *p_cdc = NULL; + for (uint8_t cdc_id = 0; cdc_id < CFG_TUD_CDC; cdc_id++) { + if (_cdcd_itf[cdc_id].ep_in == 0) { + p_cdc = &_cdcd_itf[cdc_id]; + break; + } } - } - TU_ASSERT(p_cdc, 0); + TU_ASSERT(p_cdc, 0); - //------------- Control Interface -------------// - p_cdc->itf_num = itf_desc->bInterfaceNumber; + //------------- Control Interface -------------// + p_cdc->itf_num = itf_desc->bInterfaceNumber; - uint16_t drv_len = sizeof(tusb_desc_interface_t); - uint8_t const* p_desc = tu_desc_next(itf_desc); + uint16_t drv_len = sizeof(tusb_desc_interface_t); + uint8_t const *p_desc = tu_desc_next(itf_desc); - // Communication Functional Descriptors - while (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len) { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + // Communication Functional Descriptors + while (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len) { + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { - // notification endpoint - tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) p_desc; + if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { + // notification endpoint + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; - TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0); - p_cdc->ep_notif = desc_ep->bEndpointAddress; + TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0); + p_cdc->ep_notif = desc_ep->bEndpointAddress; - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - //------------- Data Interface (if any) -------------// - if ((TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && - (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const*) p_desc)->bInterfaceClass)) { - // next to endpoint descriptor - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); + //------------- Data Interface (if any) -------------// + if ((TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && + (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const *)p_desc)->bInterfaceClass)) { + // next to endpoint descriptor + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); - // Open endpoint pair - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &p_cdc->ep_out, &p_cdc->ep_in), 0); + // Open endpoint pair + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &p_cdc->ep_out, + &p_cdc->ep_in), + 0); - drv_len += 2 * sizeof(tusb_desc_endpoint_t); - } + drv_len += 2 * sizeof(tusb_desc_endpoint_t); + } - // Prepare for incoming data - _prep_out_transaction(p_cdc); + // Prepare for incoming data + _prep_out_transaction(p_cdc); - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool cdcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const* request) { - // Handle class request only - TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); +bool cdcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +{ + // Handle class request only + TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - uint8_t itf = 0; - cdcd_interface_t* p_cdc = _cdcd_itf; + uint8_t itf = 0; + cdcd_interface_t *p_cdc = _cdcd_itf; - // Identify which interface to use - for (;; itf++, p_cdc++) { - if (itf >= TU_ARRAY_SIZE(_cdcd_itf)) return false; + // Identify which interface to use + for (;; itf++, p_cdc++) { + if (itf >= TU_ARRAY_SIZE(_cdcd_itf)) + return false; - if (p_cdc->itf_num == request->wIndex) break; - } + if (p_cdc->itf_num == request->wIndex) + break; + } - switch (request->bRequest) { + switch (request->bRequest) { case CDC_REQUEST_SET_LINE_CODING: - if (stage == CONTROL_STAGE_SETUP) { - TU_LOG_DRV(" Set Line Coding\r\n"); - tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); - } else if (stage == CONTROL_STAGE_ACK) { - if (tud_cdc_line_coding_cb) tud_cdc_line_coding_cb(itf, &p_cdc->line_coding); - } - break; + if (stage == CONTROL_STAGE_SETUP) { + TU_LOG_DRV(" Set Line Coding\r\n"); + tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); + } else if (stage == CONTROL_STAGE_ACK) { + if (tud_cdc_line_coding_cb) + tud_cdc_line_coding_cb(itf, &p_cdc->line_coding); + } + break; case CDC_REQUEST_GET_LINE_CODING: - if (stage == CONTROL_STAGE_SETUP) { - TU_LOG_DRV(" Get Line Coding\r\n"); - tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); - } - break; + if (stage == CONTROL_STAGE_SETUP) { + TU_LOG_DRV(" Get Line Coding\r\n"); + tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); + } + break; case CDC_REQUEST_SET_CONTROL_LINE_STATE: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_status(rhport, request); - } else if (stage == CONTROL_STAGE_ACK) { - // CDC PSTN v1.2 section 6.3.12 - // Bit 0: Indicates if DTE is present or not. - // This signal corresponds to V.24 signal 108/2 and RS-232 signal DTR (Data Terminal Ready) - // Bit 1: Carrier control for half-duplex modems. - // This signal corresponds to V.24 signal 105 and RS-232 signal RTS (Request to Send) - bool const dtr = tu_bit_test(request->wValue, 0); - bool const rts = tu_bit_test(request->wValue, 1); - - p_cdc->line_state = (uint8_t) request->wValue; - - // Disable fifo overwriting if DTR bit is set - tu_fifo_set_overwritable(&p_cdc->tx_ff, !dtr); - - TU_LOG_DRV(" Set Control Line State: DTR = %d, RTS = %d\r\n", dtr, rts); - - // Invoke callback - if (tud_cdc_line_state_cb) tud_cdc_line_state_cb(itf, dtr, rts); - } - break; + if (stage == CONTROL_STAGE_SETUP) { + tud_control_status(rhport, request); + } else if (stage == CONTROL_STAGE_ACK) { + // CDC PSTN v1.2 section 6.3.12 + // Bit 0: Indicates if DTE is present or not. + // This signal corresponds to V.24 signal 108/2 and RS-232 signal DTR (Data Terminal Ready) + // Bit 1: Carrier control for half-duplex modems. + // This signal corresponds to V.24 signal 105 and RS-232 signal RTS (Request to Send) + bool const dtr = tu_bit_test(request->wValue, 0); + bool const rts = tu_bit_test(request->wValue, 1); + + p_cdc->line_state = (uint8_t)request->wValue; + + // Disable fifo overwriting if DTR bit is set + tu_fifo_set_overwritable(&p_cdc->tx_ff, !dtr); + + TU_LOG_DRV(" Set Control Line State: DTR = %d, RTS = %d\r\n", dtr, rts); + + // Invoke callback + if (tud_cdc_line_state_cb) + tud_cdc_line_state_cb(itf, dtr, rts); + } + break; case CDC_REQUEST_SEND_BREAK: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_status(rhport, request); - } else if (stage == CONTROL_STAGE_ACK) { - TU_LOG_DRV(" Send Break\r\n"); - if (tud_cdc_send_break_cb) tud_cdc_send_break_cb(itf, request->wValue); - } - break; + if (stage == CONTROL_STAGE_SETUP) { + tud_control_status(rhport, request); + } else if (stage == CONTROL_STAGE_ACK) { + TU_LOG_DRV(" Send Break\r\n"); + if (tud_cdc_send_break_cb) + tud_cdc_send_break_cb(itf, request->wValue); + } + break; default: - return false; // stall unsupported request - } + return false; // stall unsupported request + } - return true; + return true; } -bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) result; +bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) +{ + (void)result; - uint8_t itf; - cdcd_interface_t* p_cdc; + uint8_t itf; + cdcd_interface_t *p_cdc; - // Identify which interface to use - for (itf = 0; itf < CFG_TUD_CDC; itf++) { - p_cdc = &_cdcd_itf[itf]; - if ((ep_addr == p_cdc->ep_out) || (ep_addr == p_cdc->ep_in)) break; - } - TU_ASSERT(itf < CFG_TUD_CDC); + // Identify which interface to use + for (itf = 0; itf < CFG_TUD_CDC; itf++) { + p_cdc = &_cdcd_itf[itf]; + if ((ep_addr == p_cdc->ep_out) || (ep_addr == p_cdc->ep_in)) + break; + } + TU_ASSERT(itf < CFG_TUD_CDC); + + // Received new data + if (ep_addr == p_cdc->ep_out) { + tu_fifo_write_n(&p_cdc->rx_ff, p_cdc->epout_buf, (uint16_t)xferred_bytes); + + // Check for wanted char and invoke callback if needed + if (tud_cdc_rx_wanted_cb && (((signed char)p_cdc->wanted_char) != -1)) { + for (uint32_t i = 0; i < xferred_bytes; i++) { + if ((p_cdc->wanted_char == p_cdc->epout_buf[i]) && !tu_fifo_empty(&p_cdc->rx_ff)) { + tud_cdc_rx_wanted_cb(itf, p_cdc->wanted_char); + } + } + } - // Received new data - if (ep_addr == p_cdc->ep_out) { - tu_fifo_write_n(&p_cdc->rx_ff, p_cdc->epout_buf, (uint16_t) xferred_bytes); + // invoke receive callback (if there is still data) + if (tud_cdc_rx_cb && !tu_fifo_empty(&p_cdc->rx_ff)) + tud_cdc_rx_cb(itf); - // Check for wanted char and invoke callback if needed - if (tud_cdc_rx_wanted_cb && (((signed char) p_cdc->wanted_char) != -1)) { - for (uint32_t i = 0; i < xferred_bytes; i++) { - if ((p_cdc->wanted_char == p_cdc->epout_buf[i]) && !tu_fifo_empty(&p_cdc->rx_ff)) { - tud_cdc_rx_wanted_cb(itf, p_cdc->wanted_char); - } - } + // prepare for OUT transaction + _prep_out_transaction(p_cdc); } - // invoke receive callback (if there is still data) - if (tud_cdc_rx_cb && !tu_fifo_empty(&p_cdc->rx_ff)) tud_cdc_rx_cb(itf); - - // prepare for OUT transaction - _prep_out_transaction(p_cdc); - } - - // Data sent to host, we continue to fetch from tx fifo to send. - // Note: This will cause incorrect baudrate set in line coding. - // Though maybe the baudrate is not really important !!! - if (ep_addr == p_cdc->ep_in) { - // invoke transmit callback to possibly refill tx fifo - if (tud_cdc_tx_complete_cb) tud_cdc_tx_complete_cb(itf); - - if (0 == tud_cdc_n_write_flush(itf)) { - // If there is no data left, a ZLP should be sent if - // xferred_bytes is multiple of EP Packet size and not zero - if (!tu_fifo_count(&p_cdc->tx_ff) && xferred_bytes && (0 == (xferred_bytes & (BULK_PACKET_SIZE - 1)))) { - if (usbd_edpt_claim(rhport, p_cdc->ep_in)) { - usbd_edpt_xfer(rhport, p_cdc->ep_in, NULL, 0); + // Data sent to host, we continue to fetch from tx fifo to send. + // Note: This will cause incorrect baudrate set in line coding. + // Though maybe the baudrate is not really important !!! + if (ep_addr == p_cdc->ep_in) { + // invoke transmit callback to possibly refill tx fifo + if (tud_cdc_tx_complete_cb) + tud_cdc_tx_complete_cb(itf); + + if (0 == tud_cdc_n_write_flush(itf)) { + // If there is no data left, a ZLP should be sent if + // xferred_bytes is multiple of EP Packet size and not zero + if (!tu_fifo_count(&p_cdc->tx_ff) && xferred_bytes && + (0 == (xferred_bytes & (BULK_PACKET_SIZE - 1)))) { + if (usbd_edpt_claim(rhport, p_cdc->ep_in)) { + usbd_edpt_xfer(rhport, p_cdc->ep_in, NULL, 0); + } + } } - } } - } - // nothing to do with notif endpoint for now + // nothing to do with notif endpoint for now - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/cdc/cdc_device.h b/Libraries/tinyusb/src/class/cdc/cdc_device.h index 3ad7c8baf55..c593a872056 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_device.h +++ b/Libraries/tinyusb/src/class/cdc/cdc_device.h @@ -33,16 +33,16 @@ // Class Driver Configuration //--------------------------------------------------------------------+ #if !defined(CFG_TUD_CDC_EP_BUFSIZE) && defined(CFG_TUD_CDC_EPSIZE) - #warning CFG_TUD_CDC_EPSIZE is renamed to CFG_TUD_CDC_EP_BUFSIZE, please update to use the new name - #define CFG_TUD_CDC_EP_BUFSIZE CFG_TUD_CDC_EPSIZE +#warning CFG_TUD_CDC_EPSIZE is renamed to CFG_TUD_CDC_EP_BUFSIZE, please update to use the new name +#define CFG_TUD_CDC_EP_BUFSIZE CFG_TUD_CDC_EPSIZE #endif #ifndef CFG_TUD_CDC_EP_BUFSIZE - #define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #endif #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -50,12 +50,12 @@ //--------------------------------------------------------------------+ typedef struct TU_ATTR_PACKED { - uint8_t rx_persistent : 1; // keep rx fifo on bus reset or disconnect - uint8_t tx_persistent : 1; // keep tx fifo on bus reset or disconnect + uint8_t rx_persistent : 1; // keep rx fifo on bus reset or disconnect + uint8_t tx_persistent : 1; // keep tx fifo on bus reset or disconnect } tud_cdc_configure_fifo_t; // Configure CDC FIFOs behavior -bool tud_cdc_configure_fifo(tud_cdc_configure_fifo_t const* cfg); +bool tud_cdc_configure_fifo(tud_cdc_configure_fifo_t const *cfg); //--------------------------------------------------------------------+ // Application API (Multiple Ports) i.e. CFG_TUD_CDC > 1 @@ -71,7 +71,7 @@ bool tud_cdc_n_connected(uint8_t itf); uint8_t tud_cdc_n_get_line_state(uint8_t itf); // Get current line encoding: bit rate, stop bits parity etc .. -void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t* coding); +void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t *coding); // Set special character that will trigger tud_cdc_rx_wanted_cb() callback on receiving void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted); @@ -80,31 +80,34 @@ void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted); uint32_t tud_cdc_n_available(uint8_t itf); // Read received bytes -uint32_t tud_cdc_n_read(uint8_t itf, void* buffer, uint32_t bufsize); +uint32_t tud_cdc_n_read(uint8_t itf, void *buffer, uint32_t bufsize); // Read a byte, return -1 if there is none -TU_ATTR_ALWAYS_INLINE static inline int32_t tud_cdc_n_read_char(uint8_t itf) { - uint8_t ch; - return tud_cdc_n_read(itf, &ch, 1) ? (int32_t) ch : -1; +TU_ATTR_ALWAYS_INLINE static inline int32_t tud_cdc_n_read_char(uint8_t itf) +{ + uint8_t ch; + return tud_cdc_n_read(itf, &ch, 1) ? (int32_t)ch : -1; } // Clear the received FIFO void tud_cdc_n_read_flush(uint8_t itf); // Get a byte from FIFO without removing it -bool tud_cdc_n_peek(uint8_t itf, uint8_t* ui8); +bool tud_cdc_n_peek(uint8_t itf, uint8_t *ui8); // Write bytes to TX FIFO, data may remain in the FIFO for a while -uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize); +uint32_t tud_cdc_n_write(uint8_t itf, void const *buffer, uint32_t bufsize); // Write a byte -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_n_write_char(uint8_t itf, char ch) { - return tud_cdc_n_write(itf, &ch, 1); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_n_write_char(uint8_t itf, char ch) +{ + return tud_cdc_n_write(itf, &ch, 1); } // Write a null-terminated string -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_n_write_str(uint8_t itf, char const* str) { - return tud_cdc_n_write(itf, str, strlen(str)); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_n_write_str(uint8_t itf, char const *str) +{ + return tud_cdc_n_write(itf, str, strlen(str)); } // Force sending data if possible, return number of forced bytes @@ -120,68 +123,84 @@ bool tud_cdc_n_write_clear(uint8_t itf); // Application API (Single Port) //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_ready(void) { - return tud_cdc_n_ready(0); +TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_ready(void) +{ + return tud_cdc_n_ready(0); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_connected(void) { - return tud_cdc_n_connected(0); +TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_connected(void) +{ + return tud_cdc_n_connected(0); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_cdc_get_line_state(void) { - return tud_cdc_n_get_line_state(0); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_cdc_get_line_state(void) +{ + return tud_cdc_n_get_line_state(0); } -TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_get_line_coding(cdc_line_coding_t* coding) { - tud_cdc_n_get_line_coding(0, coding); +TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_get_line_coding(cdc_line_coding_t *coding) +{ + tud_cdc_n_get_line_coding(0, coding); } -TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_set_wanted_char(char wanted) { - tud_cdc_n_set_wanted_char(0, wanted); +TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_set_wanted_char(char wanted) +{ + tud_cdc_n_set_wanted_char(0, wanted); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_available(void) { - return tud_cdc_n_available(0); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_available(void) +{ + return tud_cdc_n_available(0); } -TU_ATTR_ALWAYS_INLINE static inline int32_t tud_cdc_read_char(void) { - return tud_cdc_n_read_char(0); +TU_ATTR_ALWAYS_INLINE static inline int32_t tud_cdc_read_char(void) +{ + return tud_cdc_n_read_char(0); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_read(void* buffer, uint32_t bufsize) { - return tud_cdc_n_read(0, buffer, bufsize); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_read(void *buffer, uint32_t bufsize) +{ + return tud_cdc_n_read(0, buffer, bufsize); } -TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_read_flush(void) { - tud_cdc_n_read_flush(0); +TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_read_flush(void) +{ + tud_cdc_n_read_flush(0); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_peek(uint8_t* ui8) { - return tud_cdc_n_peek(0, ui8); +TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_peek(uint8_t *ui8) +{ + return tud_cdc_n_peek(0, ui8); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_char(char ch) { - return tud_cdc_n_write_char(0, ch); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_char(char ch) +{ + return tud_cdc_n_write_char(0, ch); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write(void const* buffer, uint32_t bufsize) { - return tud_cdc_n_write(0, buffer, bufsize); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write(void const *buffer, uint32_t bufsize) +{ + return tud_cdc_n_write(0, buffer, bufsize); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_str(char const* str) { - return tud_cdc_n_write_str(0, str); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_str(char const *str) +{ + return tud_cdc_n_write_str(0, str); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_flush(void) { - return tud_cdc_n_write_flush(0); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_flush(void) +{ + return tud_cdc_n_write_flush(0); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_available(void) { - return tud_cdc_n_write_available(0); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_available(void) +{ + return tud_cdc_n_write_available(0); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_write_clear(void) { - return tud_cdc_n_write_clear(0); +TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_write_clear(void) +{ + return tud_cdc_n_write_clear(0); } //--------------------------------------------------------------------+ @@ -201,7 +220,7 @@ TU_ATTR_WEAK void tud_cdc_tx_complete_cb(uint8_t itf); TU_ATTR_WEAK void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts); // Invoked when line coding is change via SET_LINE_CODING -TU_ATTR_WEAK void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const* p_line_coding); +TU_ATTR_WEAK void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const *p_line_coding); // Invoked when received send break TU_ATTR_WEAK void tud_cdc_send_break_cb(uint8_t itf, uint16_t duration_ms); @@ -209,15 +228,15 @@ TU_ATTR_WEAK void tud_cdc_send_break_cb(uint8_t itf, uint16_t duration_ms); //--------------------------------------------------------------------+ // INTERNAL USBD-CLASS DRIVER API //--------------------------------------------------------------------+ -void cdcd_init (void); -bool cdcd_deinit (void); -void cdcd_reset (uint8_t rhport); -uint16_t cdcd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool cdcd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); -bool cdcd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); +void cdcd_init(void); +bool cdcd_deinit(void); +void cdcd_reset(uint8_t rhport); +uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool cdcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CDC_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/cdc_host.c b/Libraries/tinyusb/src/class/cdc/cdc_host.c index 133a10f6ecf..7707398b4e9 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_host.c +++ b/Libraries/tinyusb/src/class/cdc/cdc_host.c @@ -38,46 +38,46 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUH_CDC_LOG_LEVEL - #define CFG_TUH_CDC_LOG_LEVEL CFG_TUH_LOG_LEVEL +#define CFG_TUH_CDC_LOG_LEVEL CFG_TUH_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_CDC_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_CDC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // Host CDC Interface //--------------------------------------------------------------------+ typedef struct { - uint8_t daddr; - uint8_t bInterfaceNumber; - uint8_t bInterfaceSubClass; - uint8_t bInterfaceProtocol; - - uint8_t ep_notif; - uint8_t serial_drid; // Serial Driver ID - bool mounted; // Enumeration is complete - cdc_acm_capability_t acm_capability; - - TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; // Baudrate, stop bits, parity, data width - uint8_t line_state; // DTR (bit0), RTS (bit1) - - #if CFG_TUH_CDC_FTDI || CFG_TUH_CDC_CP210X || CFG_TUH_CDC_CH34X - cdc_line_coding_t requested_line_coding; - // 1 byte padding - #endif + uint8_t daddr; + uint8_t bInterfaceNumber; + uint8_t bInterfaceSubClass; + uint8_t bInterfaceProtocol; + + uint8_t ep_notif; + uint8_t serial_drid; // Serial Driver ID + bool mounted; // Enumeration is complete + cdc_acm_capability_t acm_capability; + + TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; // Baudrate, stop bits, parity, data width + uint8_t line_state; // DTR (bit0), RTS (bit1) + +#if CFG_TUH_CDC_FTDI || CFG_TUH_CDC_CP210X || CFG_TUH_CDC_CH34X + cdc_line_coding_t requested_line_coding; +// 1 byte padding +#endif - tuh_xfer_cb_t user_control_cb; + tuh_xfer_cb_t user_control_cb; - struct { - tu_edpt_stream_t tx; - tu_edpt_stream_t rx; + struct { + tu_edpt_stream_t tx; + tu_edpt_stream_t rx; - uint8_t tx_ff_buf[CFG_TUH_CDC_TX_BUFSIZE]; - CFG_TUH_MEM_ALIGN uint8_t tx_ep_buf[CFG_TUH_CDC_TX_EPSIZE]; + uint8_t tx_ff_buf[CFG_TUH_CDC_TX_BUFSIZE]; + CFG_TUH_MEM_ALIGN uint8_t tx_ep_buf[CFG_TUH_CDC_TX_EPSIZE]; - uint8_t rx_ff_buf[CFG_TUH_CDC_TX_BUFSIZE]; - CFG_TUH_MEM_ALIGN uint8_t rx_ep_buf[CFG_TUH_CDC_TX_EPSIZE]; - } stream; + uint8_t rx_ff_buf[CFG_TUH_CDC_TX_BUFSIZE]; + CFG_TUH_MEM_ALIGN uint8_t rx_ep_buf[CFG_TUH_CDC_TX_EPSIZE]; + } stream; } cdch_interface_t; CFG_TUH_MEM_SECTION @@ -89,703 +89,765 @@ static cdch_interface_t cdch_data[CFG_TUH_CDC]; //------------- ACM prototypes -------------// static bool acm_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -static void acm_process_config(tuh_xfer_t* xfer); +static void acm_process_config(tuh_xfer_t *xfer); -static bool acm_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool acm_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool acm_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool acm_set_control_line_state(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool acm_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, + uintptr_t user_data); +static bool acm_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool acm_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool acm_set_control_line_state(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); //------------- FTDI prototypes -------------// #if CFG_TUH_CDC_FTDI #include "serial/ftdi_sio.h" -static uint16_t const ftdi_vid_pid_list[][2] = {CFG_TUH_CDC_FTDI_VID_PID_LIST}; +static uint16_t const ftdi_vid_pid_list[][2] = { CFG_TUH_CDC_FTDI_VID_PID_LIST }; static bool ftdi_open(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len); -static void ftdi_process_config(tuh_xfer_t* xfer); - -static bool ftdi_sio_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ftdi_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ftdi_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ftdi_sio_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static void ftdi_process_config(tuh_xfer_t *xfer); + +static bool ftdi_sio_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ftdi_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ftdi_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ftdi_sio_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); #endif //------------- CP210X prototypes -------------// #if CFG_TUH_CDC_CP210X #include "serial/cp210x.h" -static uint16_t const cp210x_vid_pid_list[][2] = {CFG_TUH_CDC_CP210X_VID_PID_LIST}; +static uint16_t const cp210x_vid_pid_list[][2] = { CFG_TUH_CDC_CP210X_VID_PID_LIST }; static bool cp210x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -static void cp210x_process_config(tuh_xfer_t* xfer); - -static bool cp210x_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool cp210x_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool cp210x_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool cp210x_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static void cp210x_process_config(tuh_xfer_t *xfer); + +static bool cp210x_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool cp210x_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, + uintptr_t user_data); +static bool cp210x_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool cp210x_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); #endif //------------- CH34x prototypes -------------// #if CFG_TUH_CDC_CH34X #include "serial/ch34x.h" -static uint16_t const ch34x_vid_pid_list[][2] = {CFG_TUH_CDC_CH34X_VID_PID_LIST}; +static uint16_t const ch34x_vid_pid_list[][2] = { CFG_TUH_CDC_CH34X_VID_PID_LIST }; -static bool ch34x_open(uint8_t daddr, tusb_desc_interface_t const* itf_desc, uint16_t max_len); -static void ch34x_process_config(tuh_xfer_t* xfer); +static bool ch34x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +static void ch34x_process_config(tuh_xfer_t *xfer); -static bool ch34x_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ch34x_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ch34x_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ch34x_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ch34x_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ch34x_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, + uintptr_t user_data); +static bool ch34x_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ch34x_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); #endif //------------- Common -------------// enum { - SERIAL_DRIVER_ACM = 0, + SERIAL_DRIVER_ACM = 0, #if CFG_TUH_CDC_FTDI - SERIAL_DRIVER_FTDI, + SERIAL_DRIVER_FTDI, #endif #if CFG_TUH_CDC_CP210X - SERIAL_DRIVER_CP210X, + SERIAL_DRIVER_CP210X, #endif #if CFG_TUH_CDC_CH34X - SERIAL_DRIVER_CH34X, + SERIAL_DRIVER_CH34X, #endif - SERIAL_DRIVER_COUNT + SERIAL_DRIVER_COUNT }; typedef struct { - uint16_t const (*vid_pid_list)[2]; - uint16_t const vid_pid_count; - bool (*const open)(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len); - void (*const process_set_config)(tuh_xfer_t* xfer); - bool (*const set_control_line_state)(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); - bool (*const set_baudrate)(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); - bool (*const set_data_format)(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); - bool (*const set_line_coding)(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); + uint16_t const (*vid_pid_list)[2]; + uint16_t const vid_pid_count; + bool (*const open)(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len); + void (*const process_set_config)(tuh_xfer_t *xfer); + bool (*const set_control_line_state)(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); + bool (*const set_baudrate)(cdch_interface_t *p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); + bool (*const set_data_format)(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, + uintptr_t user_data); + bool (*const set_line_coding)(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); } cdch_serial_driver_t; // Note driver list must be in the same order as SERIAL_DRIVER enum static const cdch_serial_driver_t serial_drivers[] = { - { - .vid_pid_list = NULL, - .vid_pid_count = 0, - .open = acm_open, - .process_set_config = acm_process_config, + { .vid_pid_list = NULL, + .vid_pid_count = 0, + .open = acm_open, + .process_set_config = acm_process_config, .set_control_line_state = acm_set_control_line_state, - .set_baudrate = acm_set_baudrate, - .set_data_format = acm_set_data_format, - .set_line_coding = acm_set_line_coding - }, - - #if CFG_TUH_CDC_FTDI - { - .vid_pid_list = ftdi_vid_pid_list, - .vid_pid_count = TU_ARRAY_SIZE(ftdi_vid_pid_list), - .open = ftdi_open, - .process_set_config = ftdi_process_config, + .set_baudrate = acm_set_baudrate, + .set_data_format = acm_set_data_format, + .set_line_coding = acm_set_line_coding }, + +#if CFG_TUH_CDC_FTDI + { .vid_pid_list = ftdi_vid_pid_list, + .vid_pid_count = TU_ARRAY_SIZE(ftdi_vid_pid_list), + .open = ftdi_open, + .process_set_config = ftdi_process_config, .set_control_line_state = ftdi_sio_set_modem_ctrl, - .set_baudrate = ftdi_sio_set_baudrate, - .set_data_format = ftdi_set_data_format, - .set_line_coding = ftdi_set_line_coding - }, - #endif - - #if CFG_TUH_CDC_CP210X - { - .vid_pid_list = cp210x_vid_pid_list, - .vid_pid_count = TU_ARRAY_SIZE(cp210x_vid_pid_list), - .open = cp210x_open, - .process_set_config = cp210x_process_config, + .set_baudrate = ftdi_sio_set_baudrate, + .set_data_format = ftdi_set_data_format, + .set_line_coding = ftdi_set_line_coding }, +#endif + +#if CFG_TUH_CDC_CP210X + { .vid_pid_list = cp210x_vid_pid_list, + .vid_pid_count = TU_ARRAY_SIZE(cp210x_vid_pid_list), + .open = cp210x_open, + .process_set_config = cp210x_process_config, .set_control_line_state = cp210x_set_modem_ctrl, - .set_baudrate = cp210x_set_baudrate, - .set_data_format = cp210x_set_data_format, - .set_line_coding = cp210x_set_line_coding - }, - #endif - - #if CFG_TUH_CDC_CH34X - { - .vid_pid_list = ch34x_vid_pid_list, - .vid_pid_count = TU_ARRAY_SIZE(ch34x_vid_pid_list), - .open = ch34x_open, - .process_set_config = ch34x_process_config, + .set_baudrate = cp210x_set_baudrate, + .set_data_format = cp210x_set_data_format, + .set_line_coding = cp210x_set_line_coding }, +#endif + +#if CFG_TUH_CDC_CH34X + { .vid_pid_list = ch34x_vid_pid_list, + .vid_pid_count = TU_ARRAY_SIZE(ch34x_vid_pid_list), + .open = ch34x_open, + .process_set_config = ch34x_process_config, .set_control_line_state = ch34x_set_modem_ctrl, - .set_baudrate = ch34x_set_baudrate, - .set_data_format = ch34x_set_data_format, - .set_line_coding = ch34x_set_line_coding - }, - #endif + .set_baudrate = ch34x_set_baudrate, + .set_data_format = ch34x_set_data_format, + .set_line_coding = ch34x_set_line_coding }, +#endif }; -TU_VERIFY_STATIC(TU_ARRAY_SIZE(serial_drivers) == SERIAL_DRIVER_COUNT, "Serial driver count mismatch"); +TU_VERIFY_STATIC(TU_ARRAY_SIZE(serial_drivers) == SERIAL_DRIVER_COUNT, + "Serial driver count mismatch"); //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -static inline cdch_interface_t* get_itf(uint8_t idx) { - TU_ASSERT(idx < CFG_TUH_CDC, NULL); - cdch_interface_t* p_cdc = &cdch_data[idx]; +static inline cdch_interface_t *get_itf(uint8_t idx) +{ + TU_ASSERT(idx < CFG_TUH_CDC, NULL); + cdch_interface_t *p_cdc = &cdch_data[idx]; - return (p_cdc->daddr != 0) ? p_cdc : NULL; + return (p_cdc->daddr != 0) ? p_cdc : NULL; } -static inline uint8_t get_idx_by_ep_addr(uint8_t daddr, uint8_t ep_addr) { - for(uint8_t i=0; idaddr == daddr) && - (ep_addr == p_cdc->ep_notif || ep_addr == p_cdc->stream.rx.ep_addr || ep_addr == p_cdc->stream.tx.ep_addr)) { - return i; +static inline uint8_t get_idx_by_ep_addr(uint8_t daddr, uint8_t ep_addr) +{ + for (uint8_t i = 0; i < CFG_TUH_CDC; i++) { + cdch_interface_t *p_cdc = &cdch_data[i]; + if ((p_cdc->daddr == daddr) && + (ep_addr == p_cdc->ep_notif || ep_addr == p_cdc->stream.rx.ep_addr || + ep_addr == p_cdc->stream.tx.ep_addr)) { + return i; + } } - } - return TUSB_INDEX_INVALID_8; + return TUSB_INDEX_INVALID_8; } -static cdch_interface_t* make_new_itf(uint8_t daddr, tusb_desc_interface_t const *itf_desc) { - for(uint8_t i=0; idaddr = daddr; - p_cdc->bInterfaceNumber = itf_desc->bInterfaceNumber; - p_cdc->bInterfaceSubClass = itf_desc->bInterfaceSubClass; - p_cdc->bInterfaceProtocol = itf_desc->bInterfaceProtocol; - p_cdc->line_state = 0; - return p_cdc; +static cdch_interface_t *make_new_itf(uint8_t daddr, tusb_desc_interface_t const *itf_desc) +{ + for (uint8_t i = 0; i < CFG_TUH_CDC; i++) { + if (cdch_data[i].daddr == 0) { + cdch_interface_t *p_cdc = &cdch_data[i]; + p_cdc->daddr = daddr; + p_cdc->bInterfaceNumber = itf_desc->bInterfaceNumber; + p_cdc->bInterfaceSubClass = itf_desc->bInterfaceSubClass; + p_cdc->bInterfaceProtocol = itf_desc->bInterfaceProtocol; + p_cdc->line_state = 0; + return p_cdc; + } } - } - return NULL; + return NULL; } -static bool open_ep_stream_pair(cdch_interface_t* p_cdc , tusb_desc_endpoint_t const *desc_ep); -static void set_config_complete(cdch_interface_t * p_cdc, uint8_t idx, uint8_t itf_num); -static void cdch_internal_control_complete(tuh_xfer_t* xfer); +static bool open_ep_stream_pair(cdch_interface_t *p_cdc, tusb_desc_endpoint_t const *desc_ep); +static void set_config_complete(cdch_interface_t *p_cdc, uint8_t idx, uint8_t itf_num); +static void cdch_internal_control_complete(tuh_xfer_t *xfer); //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ -uint8_t tuh_cdc_itf_get_index(uint8_t daddr, uint8_t itf_num) { - for (uint8_t i = 0; i < CFG_TUH_CDC; i++) { - const cdch_interface_t* p_cdc = &cdch_data[i]; - if (p_cdc->daddr == daddr && p_cdc->bInterfaceNumber == itf_num) return i; - } +uint8_t tuh_cdc_itf_get_index(uint8_t daddr, uint8_t itf_num) +{ + for (uint8_t i = 0; i < CFG_TUH_CDC; i++) { + const cdch_interface_t *p_cdc = &cdch_data[i]; + if (p_cdc->daddr == daddr && p_cdc->bInterfaceNumber == itf_num) + return i; + } - return TUSB_INDEX_INVALID_8; + return TUSB_INDEX_INVALID_8; } -bool tuh_cdc_itf_get_info(uint8_t idx, tuh_itf_info_t* info) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && info); +bool tuh_cdc_itf_get_info(uint8_t idx, tuh_itf_info_t *info) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && info); - info->daddr = p_cdc->daddr; + info->daddr = p_cdc->daddr; - // re-construct descriptor - tusb_desc_interface_t* desc = &info->desc; - desc->bLength = sizeof(tusb_desc_interface_t); - desc->bDescriptorType = TUSB_DESC_INTERFACE; + // re-construct descriptor + tusb_desc_interface_t *desc = &info->desc; + desc->bLength = sizeof(tusb_desc_interface_t); + desc->bDescriptorType = TUSB_DESC_INTERFACE; - desc->bInterfaceNumber = p_cdc->bInterfaceNumber; - desc->bAlternateSetting = 0; - desc->bNumEndpoints = 2u + (p_cdc->ep_notif ? 1u : 0u); - desc->bInterfaceClass = TUSB_CLASS_CDC; - desc->bInterfaceSubClass = p_cdc->bInterfaceSubClass; - desc->bInterfaceProtocol = p_cdc->bInterfaceProtocol; - desc->iInterface = 0; // not used yet + desc->bInterfaceNumber = p_cdc->bInterfaceNumber; + desc->bAlternateSetting = 0; + desc->bNumEndpoints = 2u + (p_cdc->ep_notif ? 1u : 0u); + desc->bInterfaceClass = TUSB_CLASS_CDC; + desc->bInterfaceSubClass = p_cdc->bInterfaceSubClass; + desc->bInterfaceProtocol = p_cdc->bInterfaceProtocol; + desc->iInterface = 0; // not used yet - return true; + return true; } -bool tuh_cdc_mounted(uint8_t idx) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); - return p_cdc->mounted; +bool tuh_cdc_mounted(uint8_t idx) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); + return p_cdc->mounted; } -bool tuh_cdc_get_dtr(uint8_t idx) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_get_dtr(uint8_t idx) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return (p_cdc->line_state & CDC_CONTROL_LINE_STATE_DTR) ? true : false; + return (p_cdc->line_state & CDC_CONTROL_LINE_STATE_DTR) ? true : false; } -bool tuh_cdc_get_rts(uint8_t idx) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_get_rts(uint8_t idx) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return (p_cdc->line_state & CDC_CONTROL_LINE_STATE_RTS) ? true : false; + return (p_cdc->line_state & CDC_CONTROL_LINE_STATE_RTS) ? true : false; } -bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t* line_coding) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t *line_coding) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - *line_coding = p_cdc->line_coding; + *line_coding = p_cdc->line_coding; - return true; + return true; } //--------------------------------------------------------------------+ // Write //--------------------------------------------------------------------+ -uint32_t tuh_cdc_write(uint8_t idx, void const* buffer, uint32_t bufsize) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_write(uint8_t idx, void const *buffer, uint32_t bufsize) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_write(&p_cdc->stream.tx, buffer, bufsize); + return tu_edpt_stream_write(&p_cdc->stream.tx, buffer, bufsize); } -uint32_t tuh_cdc_write_flush(uint8_t idx) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_write_flush(uint8_t idx) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_write_xfer(&p_cdc->stream.tx); + return tu_edpt_stream_write_xfer(&p_cdc->stream.tx); } -bool tuh_cdc_write_clear(uint8_t idx) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_write_clear(uint8_t idx) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_clear(&p_cdc->stream.tx); + return tu_edpt_stream_clear(&p_cdc->stream.tx); } -uint32_t tuh_cdc_write_available(uint8_t idx) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_write_available(uint8_t idx) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_write_available(&p_cdc->stream.tx); + return tu_edpt_stream_write_available(&p_cdc->stream.tx); } //--------------------------------------------------------------------+ // Read //--------------------------------------------------------------------+ -uint32_t tuh_cdc_read (uint8_t idx, void* buffer, uint32_t bufsize) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_read(uint8_t idx, void *buffer, uint32_t bufsize) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_read(&p_cdc->stream.rx, buffer, bufsize); + return tu_edpt_stream_read(&p_cdc->stream.rx, buffer, bufsize); } -uint32_t tuh_cdc_read_available(uint8_t idx) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_read_available(uint8_t idx) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_read_available(&p_cdc->stream.rx); + return tu_edpt_stream_read_available(&p_cdc->stream.rx); } -bool tuh_cdc_peek(uint8_t idx, uint8_t* ch) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_peek(uint8_t idx, uint8_t *ch) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_peek(&p_cdc->stream.rx, ch); + return tu_edpt_stream_peek(&p_cdc->stream.rx, ch); } -bool tuh_cdc_read_clear (uint8_t idx) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_read_clear(uint8_t idx) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - bool ret = tu_edpt_stream_clear(&p_cdc->stream.rx); - tu_edpt_stream_read_xfer(&p_cdc->stream.rx); - return ret; + bool ret = tu_edpt_stream_clear(&p_cdc->stream.rx); + tu_edpt_stream_read_xfer(&p_cdc->stream.rx); + return ret; } //--------------------------------------------------------------------+ // Control Endpoint API //--------------------------------------------------------------------+ -static void process_internal_control_complete(tuh_xfer_t* xfer, uint8_t itf_num) { - uint8_t idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t* p_cdc = get_itf(idx); - TU_ASSERT(p_cdc, ); - uint16_t const value = tu_le16toh(xfer->setup->wValue); - - if (xfer->result == XFER_RESULT_SUCCESS) { - switch (p_cdc->serial_drid) { - case SERIAL_DRIVER_ACM: - switch (xfer->setup->bRequest) { - case CDC_REQUEST_SET_CONTROL_LINE_STATE: - p_cdc->line_state = (uint8_t) value; - break; - - case CDC_REQUEST_SET_LINE_CODING: { - uint16_t const len = tu_min16(sizeof(cdc_line_coding_t), tu_le16toh(xfer->setup->wLength)); - memcpy(&p_cdc->line_coding, xfer->buffer, len); - break; - } - - default: break; - } - break; +static void process_internal_control_complete(tuh_xfer_t *xfer, uint8_t itf_num) +{ + uint8_t idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t *p_cdc = get_itf(idx); + TU_ASSERT(p_cdc, ); + uint16_t const value = tu_le16toh(xfer->setup->wValue); + + if (xfer->result == XFER_RESULT_SUCCESS) { + switch (p_cdc->serial_drid) { + case SERIAL_DRIVER_ACM: + switch (xfer->setup->bRequest) { + case CDC_REQUEST_SET_CONTROL_LINE_STATE: + p_cdc->line_state = (uint8_t)value; + break; - #if CFG_TUH_CDC_FTDI - case SERIAL_DRIVER_FTDI: - switch (xfer->setup->bRequest) { - case FTDI_SIO_MODEM_CTRL: - p_cdc->line_state = (uint8_t) value; - break; + case CDC_REQUEST_SET_LINE_CODING: { + uint16_t const len = + tu_min16(sizeof(cdc_line_coding_t), tu_le16toh(xfer->setup->wLength)); + memcpy(&p_cdc->line_coding, xfer->buffer, len); + break; + } - case FTDI_SIO_SET_BAUD_RATE: - p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; + default: + break; + } break; - default: break; - } - break; - #endif +#if CFG_TUH_CDC_FTDI + case SERIAL_DRIVER_FTDI: + switch (xfer->setup->bRequest) { + case FTDI_SIO_MODEM_CTRL: + p_cdc->line_state = (uint8_t)value; + break; - #if CFG_TUH_CDC_CP210X - case SERIAL_DRIVER_CP210X: - switch(xfer->setup->bRequest) { - case CP210X_SET_MHS: - p_cdc->line_state = (uint8_t) value; - break; + case FTDI_SIO_SET_BAUD_RATE: + p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; + break; - case CP210X_SET_BAUDRATE: { - uint32_t baudrate; - memcpy(&baudrate, xfer->buffer, sizeof(uint32_t)); - p_cdc->line_coding.bit_rate = tu_le32toh(baudrate); + default: + break; + } break; - } +#endif - default: break; - } - break; - #endif - - #if CFG_TUH_CDC_CH34X - case SERIAL_DRIVER_CH34X: - switch (xfer->setup->bRequest) { - case CH34X_REQ_WRITE_REG: - // register write request - switch (value) { - case CH34X_REG16_DIVISOR_PRESCALER: - // baudrate - p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; +#if CFG_TUH_CDC_CP210X + case SERIAL_DRIVER_CP210X: + switch (xfer->setup->bRequest) { + case CP210X_SET_MHS: + p_cdc->line_state = (uint8_t)value; break; - case CH32X_REG16_LCR2_LCR: - // data format - p_cdc->line_coding.stop_bits = p_cdc->requested_line_coding.stop_bits; - p_cdc->line_coding.parity = p_cdc->requested_line_coding.parity; - p_cdc->line_coding.data_bits = p_cdc->requested_line_coding.data_bits; + case CP210X_SET_BAUDRATE: { + uint32_t baudrate; + memcpy(&baudrate, xfer->buffer, sizeof(uint32_t)); + p_cdc->line_coding.bit_rate = tu_le32toh(baudrate); break; + } - default: break; + default: + break; } break; +#endif + +#if CFG_TUH_CDC_CH34X + case SERIAL_DRIVER_CH34X: + switch (xfer->setup->bRequest) { + case CH34X_REQ_WRITE_REG: + // register write request + switch (value) { + case CH34X_REG16_DIVISOR_PRESCALER: + // baudrate + p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; + break; + + case CH32X_REG16_LCR2_LCR: + // data format + p_cdc->line_coding.stop_bits = p_cdc->requested_line_coding.stop_bits; + p_cdc->line_coding.parity = p_cdc->requested_line_coding.parity; + p_cdc->line_coding.data_bits = p_cdc->requested_line_coding.data_bits; + break; + + default: + break; + } + break; - case CH34X_REQ_MODEM_CTRL: { - // set modem controls RTS/DTR request. Note: signals are inverted - uint16_t const modem_signal = ~value; - if (modem_signal & CH34X_BIT_RTS) { - p_cdc->line_state |= CDC_CONTROL_LINE_STATE_RTS; - } else { - p_cdc->line_state &= (uint8_t) ~CDC_CONTROL_LINE_STATE_RTS; + case CH34X_REQ_MODEM_CTRL: { + // set modem controls RTS/DTR request. Note: signals are inverted + uint16_t const modem_signal = ~value; + if (modem_signal & CH34X_BIT_RTS) { + p_cdc->line_state |= CDC_CONTROL_LINE_STATE_RTS; + } else { + p_cdc->line_state &= (uint8_t)~CDC_CONTROL_LINE_STATE_RTS; + } + + if (modem_signal & CH34X_BIT_DTR) { + p_cdc->line_state |= CDC_CONTROL_LINE_STATE_DTR; + } else { + p_cdc->line_state &= (uint8_t)~CDC_CONTROL_LINE_STATE_DTR; + } + break; } - if (modem_signal & CH34X_BIT_DTR) { - p_cdc->line_state |= CDC_CONTROL_LINE_STATE_DTR; - } else { - p_cdc->line_state &= (uint8_t) ~CDC_CONTROL_LINE_STATE_DTR; + default: + break; } break; - } +#endif - default: break; + default: + break; } - break; - #endif - - default: break; } - } - xfer->complete_cb = p_cdc->user_control_cb; - if (xfer->complete_cb) { - xfer->complete_cb(xfer); - } + xfer->complete_cb = p_cdc->user_control_cb; + if (xfer->complete_cb) { + xfer->complete_cb(xfer); + } } // internal control complete to update state such as line state, encoding -static void cdch_internal_control_complete(tuh_xfer_t* xfer) { - uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); - process_internal_control_complete(xfer, itf_num); -} - -bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - cdch_serial_driver_t const* driver = &serial_drivers[p_cdc->serial_drid]; - - if (complete_cb) { - return driver->set_control_line_state(p_cdc, line_state, complete_cb, user_data); - } else { - // blocking - xfer_result_t result = XFER_RESULT_INVALID; - bool ret = driver->set_control_line_state(p_cdc, line_state, complete_cb, (uintptr_t) &result); - - if (user_data) { - // user_data is not NULL, return result via user_data - *((xfer_result_t*) user_data) = result; - } - - TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); - p_cdc->line_state = (uint8_t) line_state; - return true; - } +static void cdch_internal_control_complete(tuh_xfer_t *xfer) +{ + uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); + process_internal_control_complete(xfer, itf_num); } -bool tuh_cdc_set_baudrate(uint8_t idx, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - cdch_serial_driver_t const* driver = &serial_drivers[p_cdc->serial_drid]; +bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_cb_t complete_cb, + uintptr_t user_data) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + cdch_serial_driver_t const *driver = &serial_drivers[p_cdc->serial_drid]; - if (complete_cb) { - return driver->set_baudrate(p_cdc, baudrate, complete_cb, user_data); - } else { - // blocking - xfer_result_t result = XFER_RESULT_INVALID; - bool ret = driver->set_baudrate(p_cdc, baudrate, complete_cb, (uintptr_t) &result); + if (complete_cb) { + return driver->set_control_line_state(p_cdc, line_state, complete_cb, user_data); + } else { + // blocking + xfer_result_t result = XFER_RESULT_INVALID; + bool ret = + driver->set_control_line_state(p_cdc, line_state, complete_cb, (uintptr_t)&result); + + if (user_data) { + // user_data is not NULL, return result via user_data + *((xfer_result_t *)user_data) = result; + } - if (user_data) { - // user_data is not NULL, return result via user_data - *((xfer_result_t*) user_data) = result; + TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); + p_cdc->line_state = (uint8_t)line_state; + return true; } +} - TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); - p_cdc->line_coding.bit_rate = baudrate; - return true; - } +bool tuh_cdc_set_baudrate(uint8_t idx, uint32_t baudrate, tuh_xfer_cb_t complete_cb, + uintptr_t user_data) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + cdch_serial_driver_t const *driver = &serial_drivers[p_cdc->serial_drid]; + + if (complete_cb) { + return driver->set_baudrate(p_cdc, baudrate, complete_cb, user_data); + } else { + // blocking + xfer_result_t result = XFER_RESULT_INVALID; + bool ret = driver->set_baudrate(p_cdc, baudrate, complete_cb, (uintptr_t)&result); + + if (user_data) { + // user_data is not NULL, return result via user_data + *((xfer_result_t *)user_data) = result; + } + + TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); + p_cdc->line_coding.bit_rate = baudrate; + return true; + } } bool tuh_cdc_set_data_format(uint8_t idx, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - cdch_serial_driver_t const* driver = &serial_drivers[p_cdc->serial_drid]; - - if (complete_cb) { - return driver->set_data_format(p_cdc, stop_bits, parity, data_bits, complete_cb, user_data); - } else { - // blocking - xfer_result_t result = XFER_RESULT_INVALID; - bool ret = driver->set_data_format(p_cdc, stop_bits, parity, data_bits, complete_cb, (uintptr_t) &result); - - if (user_data) { - // user_data is not NULL, return result via user_data - *((xfer_result_t*) user_data) = result; - } + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + cdch_serial_driver_t const *driver = &serial_drivers[p_cdc->serial_drid]; + + if (complete_cb) { + return driver->set_data_format(p_cdc, stop_bits, parity, data_bits, complete_cb, user_data); + } else { + // blocking + xfer_result_t result = XFER_RESULT_INVALID; + bool ret = driver->set_data_format(p_cdc, stop_bits, parity, data_bits, complete_cb, + (uintptr_t)&result); + + if (user_data) { + // user_data is not NULL, return result via user_data + *((xfer_result_t *)user_data) = result; + } - TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); - p_cdc->line_coding.stop_bits = stop_bits; - p_cdc->line_coding.parity = parity; - p_cdc->line_coding.data_bits = data_bits; - return true; - } + TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); + p_cdc->line_coding.stop_bits = stop_bits; + p_cdc->line_coding.parity = parity; + p_cdc->line_coding.data_bits = data_bits; + return true; + } } -bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - cdch_interface_t* p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - cdch_serial_driver_t const* driver = &serial_drivers[p_cdc->serial_drid]; +bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + cdch_interface_t *p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + cdch_serial_driver_t const *driver = &serial_drivers[p_cdc->serial_drid]; - if ( complete_cb ) { - return driver->set_line_coding(p_cdc, line_coding, complete_cb, user_data); - } else { - // blocking - xfer_result_t result = XFER_RESULT_INVALID; - bool ret = driver->set_line_coding(p_cdc, line_coding, complete_cb, (uintptr_t) &result); + if (complete_cb) { + return driver->set_line_coding(p_cdc, line_coding, complete_cb, user_data); + } else { + // blocking + xfer_result_t result = XFER_RESULT_INVALID; + bool ret = driver->set_line_coding(p_cdc, line_coding, complete_cb, (uintptr_t)&result); - if (user_data) { - // user_data is not NULL, return result via user_data - *((xfer_result_t*) user_data) = result; - } + if (user_data) { + // user_data is not NULL, return result via user_data + *((xfer_result_t *)user_data) = result; + } - TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); - p_cdc->line_coding = *line_coding; - return true; - } + TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); + p_cdc->line_coding = *line_coding; + return true; + } } //--------------------------------------------------------------------+ // CLASS-USBH API //--------------------------------------------------------------------+ -bool cdch_init(void) { - TU_LOG_DRV("sizeof(cdch_interface_t) = %u\r\n", sizeof(cdch_interface_t)); - tu_memclr(cdch_data, sizeof(cdch_data)); - for (size_t i = 0; i < CFG_TUH_CDC; i++) { - cdch_interface_t* p_cdc = &cdch_data[i]; - tu_edpt_stream_init(&p_cdc->stream.tx, true, true, false, - p_cdc->stream.tx_ff_buf, CFG_TUH_CDC_TX_BUFSIZE, - p_cdc->stream.tx_ep_buf, CFG_TUH_CDC_TX_EPSIZE); - - tu_edpt_stream_init(&p_cdc->stream.rx, true, false, false, - p_cdc->stream.rx_ff_buf, CFG_TUH_CDC_RX_BUFSIZE, - p_cdc->stream.rx_ep_buf, CFG_TUH_CDC_RX_EPSIZE); - } - - return true; -} - -bool cdch_deinit(void) { - for (size_t i = 0; i < CFG_TUH_CDC; i++) { - cdch_interface_t* p_cdc = &cdch_data[i]; - tu_edpt_stream_deinit(&p_cdc->stream.tx); - tu_edpt_stream_deinit(&p_cdc->stream.rx); - } - return true; -} - -void cdch_close(uint8_t daddr) { - for (uint8_t idx = 0; idx < CFG_TUH_CDC; idx++) { - cdch_interface_t* p_cdc = &cdch_data[idx]; - if (p_cdc->daddr == daddr) { - TU_LOG_DRV(" CDCh close addr = %u index = %u\r\n", daddr, idx); - - // Invoke application callback - if (tuh_cdc_umount_cb) tuh_cdc_umount_cb(idx); - - p_cdc->daddr = 0; - p_cdc->bInterfaceNumber = 0; - p_cdc->mounted = false; - tu_edpt_stream_close(&p_cdc->stream.tx); - tu_edpt_stream_close(&p_cdc->stream.rx); +bool cdch_init(void) +{ + TU_LOG_DRV("sizeof(cdch_interface_t) = %u\r\n", sizeof(cdch_interface_t)); + tu_memclr(cdch_data, sizeof(cdch_data)); + for (size_t i = 0; i < CFG_TUH_CDC; i++) { + cdch_interface_t *p_cdc = &cdch_data[i]; + tu_edpt_stream_init(&p_cdc->stream.tx, true, true, false, p_cdc->stream.tx_ff_buf, + CFG_TUH_CDC_TX_BUFSIZE, p_cdc->stream.tx_ep_buf, CFG_TUH_CDC_TX_EPSIZE); + + tu_edpt_stream_init(&p_cdc->stream.rx, true, false, false, p_cdc->stream.rx_ff_buf, + CFG_TUH_CDC_RX_BUFSIZE, p_cdc->stream.rx_ep_buf, CFG_TUH_CDC_RX_EPSIZE); } - } + + return true; } -bool cdch_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) { - // TODO handle stall response, retry failed transfer ... - TU_ASSERT(event == XFER_RESULT_SUCCESS); +bool cdch_deinit(void) +{ + for (size_t i = 0; i < CFG_TUH_CDC; i++) { + cdch_interface_t *p_cdc = &cdch_data[i]; + tu_edpt_stream_deinit(&p_cdc->stream.tx); + tu_edpt_stream_deinit(&p_cdc->stream.rx); + } + return true; +} - uint8_t const idx = get_idx_by_ep_addr(daddr, ep_addr); - cdch_interface_t * p_cdc = get_itf(idx); - TU_ASSERT(p_cdc); +void cdch_close(uint8_t daddr) +{ + for (uint8_t idx = 0; idx < CFG_TUH_CDC; idx++) { + cdch_interface_t *p_cdc = &cdch_data[idx]; + if (p_cdc->daddr == daddr) { + TU_LOG_DRV(" CDCh close addr = %u index = %u\r\n", daddr, idx); - if ( ep_addr == p_cdc->stream.tx.ep_addr ) { - // invoke tx complete callback to possibly refill tx fifo - if (tuh_cdc_tx_complete_cb) tuh_cdc_tx_complete_cb(idx); + // Invoke application callback + if (tuh_cdc_umount_cb) + tuh_cdc_umount_cb(idx); - if ( 0 == tu_edpt_stream_write_xfer(&p_cdc->stream.tx) ) { - // If there is no data left, a ZLP should be sent if: - // - xferred_bytes is multiple of EP Packet size and not zero - tu_edpt_stream_write_zlp_if_needed(&p_cdc->stream.tx, xferred_bytes); - } - } else if ( ep_addr == p_cdc->stream.rx.ep_addr ) { - #if CFG_TUH_CDC_FTDI - if (p_cdc->serial_drid == SERIAL_DRIVER_FTDI) { - // FTDI reserve 2 bytes for status - // uint8_t status[2] = {p_cdc->stream.rx.ep_buf[0], p_cdc->stream.rx.ep_buf[1]}; - tu_edpt_stream_read_xfer_complete_offset(&p_cdc->stream.rx, xferred_bytes, 2); - }else - #endif - { - tu_edpt_stream_read_xfer_complete(&p_cdc->stream.rx, xferred_bytes); + p_cdc->daddr = 0; + p_cdc->bInterfaceNumber = 0; + p_cdc->mounted = false; + tu_edpt_stream_close(&p_cdc->stream.tx); + tu_edpt_stream_close(&p_cdc->stream.rx); + } } +} - // invoke receive callback - if (tuh_cdc_rx_cb) tuh_cdc_rx_cb(idx); +bool cdch_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) +{ + // TODO handle stall response, retry failed transfer ... + TU_ASSERT(event == XFER_RESULT_SUCCESS); - // prepare for next transfer if needed - tu_edpt_stream_read_xfer(&p_cdc->stream.rx); - }else if ( ep_addr == p_cdc->ep_notif ) { - // TODO handle notification endpoint - }else { - TU_ASSERT(false); - } + uint8_t const idx = get_idx_by_ep_addr(daddr, ep_addr); + cdch_interface_t *p_cdc = get_itf(idx); + TU_ASSERT(p_cdc); + + if (ep_addr == p_cdc->stream.tx.ep_addr) { + // invoke tx complete callback to possibly refill tx fifo + if (tuh_cdc_tx_complete_cb) + tuh_cdc_tx_complete_cb(idx); + + if (0 == tu_edpt_stream_write_xfer(&p_cdc->stream.tx)) { + // If there is no data left, a ZLP should be sent if: + // - xferred_bytes is multiple of EP Packet size and not zero + tu_edpt_stream_write_zlp_if_needed(&p_cdc->stream.tx, xferred_bytes); + } + } else if (ep_addr == p_cdc->stream.rx.ep_addr) { +#if CFG_TUH_CDC_FTDI + if (p_cdc->serial_drid == SERIAL_DRIVER_FTDI) { + // FTDI reserve 2 bytes for status + // uint8_t status[2] = {p_cdc->stream.rx.ep_buf[0], p_cdc->stream.rx.ep_buf[1]}; + tu_edpt_stream_read_xfer_complete_offset(&p_cdc->stream.rx, xferred_bytes, 2); + } else +#endif + { + tu_edpt_stream_read_xfer_complete(&p_cdc->stream.rx, xferred_bytes); + } + + // invoke receive callback + if (tuh_cdc_rx_cb) + tuh_cdc_rx_cb(idx); + + // prepare for next transfer if needed + tu_edpt_stream_read_xfer(&p_cdc->stream.rx); + } else if (ep_addr == p_cdc->ep_notif) { + // TODO handle notification endpoint + } else { + TU_ASSERT(false); + } - return true; + return true; } //--------------------------------------------------------------------+ // Enumeration //--------------------------------------------------------------------+ -static bool open_ep_stream_pair(cdch_interface_t* p_cdc, tusb_desc_endpoint_t const* desc_ep) { - for (size_t i = 0; i < 2; i++) { - TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && - TUSB_XFER_BULK == desc_ep->bmAttributes.xfer); - TU_ASSERT(tuh_edpt_open(p_cdc->daddr, desc_ep)); +static bool open_ep_stream_pair(cdch_interface_t *p_cdc, tusb_desc_endpoint_t const *desc_ep) +{ + for (size_t i = 0; i < 2; i++) { + TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && + TUSB_XFER_BULK == desc_ep->bmAttributes.xfer); + TU_ASSERT(tuh_edpt_open(p_cdc->daddr, desc_ep)); + + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { + tu_edpt_stream_open(&p_cdc->stream.rx, p_cdc->daddr, desc_ep); + } else { + tu_edpt_stream_open(&p_cdc->stream.tx, p_cdc->daddr, desc_ep); + } - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { - tu_edpt_stream_open(&p_cdc->stream.rx, p_cdc->daddr, desc_ep); - } else { - tu_edpt_stream_open(&p_cdc->stream.tx, p_cdc->daddr, desc_ep); + desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(desc_ep); } - desc_ep = (tusb_desc_endpoint_t const*) tu_desc_next(desc_ep); - } - - return true; + return true; } -bool cdch_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - (void) rhport; - - // For CDC: only support ACM subclass - // Note: Protocol 0xFF can be RNDIS device - if (TUSB_CLASS_CDC == itf_desc->bInterfaceClass && - CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass) { - return acm_open(daddr, itf_desc, max_len); - } - else if (SERIAL_DRIVER_COUNT > 1 && - TUSB_CLASS_VENDOR_SPECIFIC == itf_desc->bInterfaceClass) { - uint16_t vid, pid; - TU_VERIFY(tuh_vid_pid_get(daddr, &vid, &pid)); - - for (size_t dr = 1; dr < SERIAL_DRIVER_COUNT; dr++) { - cdch_serial_driver_t const* driver = &serial_drivers[dr]; - for (size_t i = 0; i < driver->vid_pid_count; i++) { - if (driver->vid_pid_list[i][0] == vid && driver->vid_pid_list[i][1] == pid) { - return driver->open(daddr, itf_desc, max_len); +bool cdch_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const *itf_desc, + uint16_t max_len) +{ + (void)rhport; + + // For CDC: only support ACM subclass + // Note: Protocol 0xFF can be RNDIS device + if (TUSB_CLASS_CDC == itf_desc->bInterfaceClass && + CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass) { + return acm_open(daddr, itf_desc, max_len); + } else if (SERIAL_DRIVER_COUNT > 1 && TUSB_CLASS_VENDOR_SPECIFIC == itf_desc->bInterfaceClass) { + uint16_t vid, pid; + TU_VERIFY(tuh_vid_pid_get(daddr, &vid, &pid)); + + for (size_t dr = 1; dr < SERIAL_DRIVER_COUNT; dr++) { + cdch_serial_driver_t const *driver = &serial_drivers[dr]; + for (size_t i = 0; i < driver->vid_pid_count; i++) { + if (driver->vid_pid_list[i][0] == vid && driver->vid_pid_list[i][1] == pid) { + return driver->open(daddr, itf_desc, max_len); + } + } } - } } - } - return false; + return false; } -static void set_config_complete(cdch_interface_t * p_cdc, uint8_t idx, uint8_t itf_num) { - TU_LOG_DRV("CDCh Set Configure complete\r\n"); - p_cdc->mounted = true; - if (tuh_cdc_mount_cb) tuh_cdc_mount_cb(idx); +static void set_config_complete(cdch_interface_t *p_cdc, uint8_t idx, uint8_t itf_num) +{ + TU_LOG_DRV("CDCh Set Configure complete\r\n"); + p_cdc->mounted = true; + if (tuh_cdc_mount_cb) + tuh_cdc_mount_cb(idx); - // Prepare for incoming data - tu_edpt_stream_read_xfer(&p_cdc->stream.rx); + // Prepare for incoming data + tu_edpt_stream_read_xfer(&p_cdc->stream.rx); - // notify usbh that driver enumeration is complete - usbh_driver_set_config_complete(p_cdc->daddr, itf_num); + // notify usbh that driver enumeration is complete + usbh_driver_set_config_complete(p_cdc->daddr, itf_num); } -bool cdch_set_config(uint8_t daddr, uint8_t itf_num) { - tusb_control_request_t request; - request.wIndex = tu_htole16((uint16_t) itf_num); +bool cdch_set_config(uint8_t daddr, uint8_t itf_num) +{ + tusb_control_request_t request; + request.wIndex = tu_htole16((uint16_t)itf_num); - // fake transfer to kick-off process - tuh_xfer_t xfer; - xfer.daddr = daddr; - xfer.result = XFER_RESULT_SUCCESS; - xfer.setup = &request; - xfer.user_data = 0; // initial state + // fake transfer to kick-off process + tuh_xfer_t xfer; + xfer.daddr = daddr; + xfer.result = XFER_RESULT_SUCCESS; + xfer.setup = &request; + xfer.user_data = 0; // initial state - uint8_t const idx = tuh_cdc_itf_get_index(daddr, itf_num); - cdch_interface_t * p_cdc = get_itf(idx); - TU_ASSERT(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + uint8_t const idx = tuh_cdc_itf_get_index(daddr, itf_num); + cdch_interface_t *p_cdc = get_itf(idx); + TU_ASSERT(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - serial_drivers[p_cdc->serial_drid].process_set_config(&xfer); - return true; + serial_drivers[p_cdc->serial_drid].process_set_config(&xfer); + return true; } //--------------------------------------------------------------------+ @@ -793,174 +855,178 @@ bool cdch_set_config(uint8_t daddr, uint8_t itf_num) { //--------------------------------------------------------------------+ enum { - CONFIG_ACM_SET_CONTROL_LINE_STATE = 0, - CONFIG_ACM_SET_LINE_CODING, - CONFIG_ACM_COMPLETE, + CONFIG_ACM_SET_CONTROL_LINE_STATE = 0, + CONFIG_ACM_SET_LINE_CODING, + CONFIG_ACM_COMPLETE, }; -static bool acm_open(uint8_t daddr, tusb_desc_interface_t const* itf_desc, uint16_t max_len) { - uint8_t const* p_desc_end = ((uint8_t const*) itf_desc) + max_len; +static bool acm_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +{ + uint8_t const *p_desc_end = ((uint8_t const *)itf_desc) + max_len; - cdch_interface_t* p_cdc = make_new_itf(daddr, itf_desc); - TU_VERIFY(p_cdc); - p_cdc->serial_drid = SERIAL_DRIVER_ACM; + cdch_interface_t *p_cdc = make_new_itf(daddr, itf_desc); + TU_VERIFY(p_cdc); + p_cdc->serial_drid = SERIAL_DRIVER_ACM; - //------------- Control Interface -------------// - uint8_t const* p_desc = tu_desc_next(itf_desc); + //------------- Control Interface -------------// + uint8_t const *p_desc = tu_desc_next(itf_desc); - // Communication Functional Descriptors - while ((p_desc < p_desc_end) && (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc))) { - if (CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT == cdc_functional_desc_typeof(p_desc)) { - // save ACM bmCapabilities - p_cdc->acm_capability = ((cdc_desc_func_acm_t const*) p_desc)->bmCapabilities; - } + // Communication Functional Descriptors + while ((p_desc < p_desc_end) && (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc))) { + if (CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT == cdc_functional_desc_typeof(p_desc)) { + // save ACM bmCapabilities + p_cdc->acm_capability = ((cdc_desc_func_acm_t const *)p_desc)->bmCapabilities; + } - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + } - // Open notification endpoint of control interface if any - if (itf_desc->bNumEndpoints == 1) { - TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)); - tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) p_desc; + // Open notification endpoint of control interface if any + if (itf_desc->bNumEndpoints == 1) { + TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)); + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; - TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); - p_cdc->ep_notif = desc_ep->bEndpointAddress; + TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); + p_cdc->ep_notif = desc_ep->bEndpointAddress; - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + } - //------------- Data Interface (if any) -------------// - if ((TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && - (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const*) p_desc)->bInterfaceClass)) { - // next to endpoint descriptor - p_desc = tu_desc_next(p_desc); + //------------- Data Interface (if any) -------------// + if ((TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && + (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const *)p_desc)->bInterfaceClass)) { + // next to endpoint descriptor + p_desc = tu_desc_next(p_desc); - // data endpoints expected to be in pairs - TU_ASSERT(open_ep_stream_pair(p_cdc, (tusb_desc_endpoint_t const*) p_desc)); - } + // data endpoints expected to be in pairs + TU_ASSERT(open_ep_stream_pair(p_cdc, (tusb_desc_endpoint_t const *)p_desc)); + } - return true; + return true; } -static void acm_process_config(tuh_xfer_t* xfer) { - uintptr_t const state = xfer->user_data; - uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t* p_cdc = get_itf(idx); - TU_ASSERT(p_cdc,); +static void acm_process_config(tuh_xfer_t *xfer) +{ + uintptr_t const state = xfer->user_data; + uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t *p_cdc = get_itf(idx); + TU_ASSERT(p_cdc, ); - switch (state) { + switch (state) { case CONFIG_ACM_SET_CONTROL_LINE_STATE: - #if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM - if (p_cdc->acm_capability.support_line_request) { - TU_ASSERT(acm_set_control_line_state(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, acm_process_config, CONFIG_ACM_SET_LINE_CODING),); - break; - } - #endif - TU_ATTR_FALLTHROUGH; +#if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM + if (p_cdc->acm_capability.support_line_request) { + TU_ASSERT(acm_set_control_line_state(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, + acm_process_config, CONFIG_ACM_SET_LINE_CODING), ); + break; + } +#endif + TU_ATTR_FALLTHROUGH; case CONFIG_ACM_SET_LINE_CODING: - #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM - if (p_cdc->acm_capability.support_line_request) { - cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; - TU_ASSERT(acm_set_line_coding(p_cdc, &line_coding, acm_process_config, CONFIG_ACM_COMPLETE),); - break; - } - #endif - TU_ATTR_FALLTHROUGH; +#ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM + if (p_cdc->acm_capability.support_line_request) { + cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; + TU_ASSERT(acm_set_line_coding(p_cdc, &line_coding, acm_process_config, + CONFIG_ACM_COMPLETE), ); + break; + } +#endif + TU_ATTR_FALLTHROUGH; case CONFIG_ACM_COMPLETE: - // itf_num+1 to account for data interface as well - set_config_complete(p_cdc, idx, itf_num + 1); - break; + // itf_num+1 to account for data interface as well + set_config_complete(p_cdc, idx, itf_num + 1); + break; default: - break; - } -} - -static bool acm_set_control_line_state(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - TU_VERIFY(p_cdc->acm_capability.support_line_request); - TU_LOG_DRV("CDC ACM Set Control Line State\r\n"); - - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT - }, - .bRequest = CDC_REQUEST_SET_CONTROL_LINE_STATE, - .wValue = tu_htole16(line_state), - .wIndex = tu_htole16((uint16_t) p_cdc->bInterfaceNumber), - .wLength = 0 - }; - - p_cdc->user_control_cb = complete_cb; - - tuh_xfer_t xfer = { - .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request, - .buffer = NULL, - .complete_cb = complete_cb ? cdch_internal_control_complete : NULL, // complete_cb is NULL for sync call - .user_data = user_data - }; - - TU_ASSERT(tuh_control_xfer(&xfer)); - return true; -} - -static bool acm_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - TU_LOG_DRV("CDC ACM Set Line Conding\r\n"); - - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT - }, - .bRequest = CDC_REQUEST_SET_LINE_CODING, - .wValue = 0, - .wIndex = tu_htole16(p_cdc->bInterfaceNumber), - .wLength = tu_htole16(sizeof(cdc_line_coding_t)) - }; - - // use usbh enum buf to hold line coding since user line_coding variable does not live long enough - uint8_t* enum_buf = usbh_get_enum_buf(); - memcpy(enum_buf, line_coding, sizeof(cdc_line_coding_t)); - - p_cdc->user_control_cb = complete_cb; - tuh_xfer_t xfer = { - .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request, - .buffer = enum_buf, - .complete_cb = complete_cb ? cdch_internal_control_complete : NULL, // complete_cb is NULL for sync call - .user_data = user_data - }; - - TU_ASSERT(tuh_control_xfer(&xfer)); - return true; -} - -static bool acm_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - TU_LOG_DRV("CDC ACM Set Data Format\r\n"); - - cdc_line_coding_t line_coding; - line_coding.bit_rate = p_cdc->line_coding.bit_rate; - line_coding.stop_bits = stop_bits; - line_coding.parity = parity; - line_coding.data_bits = data_bits; - - return acm_set_line_coding(p_cdc, &line_coding, complete_cb, user_data); -} - -static bool acm_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - TU_VERIFY(p_cdc->acm_capability.support_line_request); - cdc_line_coding_t line_coding = p_cdc->line_coding; - line_coding.bit_rate = baudrate; - return acm_set_line_coding(p_cdc, &line_coding, complete_cb, user_data); + break; + } +} + +static bool acm_set_control_line_state(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + TU_VERIFY(p_cdc->acm_capability.support_line_request); + TU_LOG_DRV("CDC ACM Set Control Line State\r\n"); + + tusb_control_request_t const request = { + .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT }, + .bRequest = CDC_REQUEST_SET_CONTROL_LINE_STATE, + .wValue = tu_htole16(line_state), + .wIndex = tu_htole16((uint16_t)p_cdc->bInterfaceNumber), + .wLength = 0 + }; + + p_cdc->user_control_cb = complete_cb; + + tuh_xfer_t xfer = { .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request, + .buffer = NULL, + .complete_cb = complete_cb ? cdch_internal_control_complete : + NULL, // complete_cb is NULL for sync call + .user_data = user_data }; + + TU_ASSERT(tuh_control_xfer(&xfer)); + return true; +} + +static bool acm_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + TU_LOG_DRV("CDC ACM Set Line Conding\r\n"); + + tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = + TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT }, + .bRequest = CDC_REQUEST_SET_LINE_CODING, + .wValue = 0, + .wIndex = tu_htole16(p_cdc->bInterfaceNumber), + .wLength = tu_htole16(sizeof(cdc_line_coding_t)) }; + + // use usbh enum buf to hold line coding since user line_coding variable does not live long enough + uint8_t *enum_buf = usbh_get_enum_buf(); + memcpy(enum_buf, line_coding, sizeof(cdc_line_coding_t)); + + p_cdc->user_control_cb = complete_cb; + tuh_xfer_t xfer = { .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request, + .buffer = enum_buf, + .complete_cb = complete_cb ? cdch_internal_control_complete : + NULL, // complete_cb is NULL for sync call + .user_data = user_data }; + + TU_ASSERT(tuh_control_xfer(&xfer)); + return true; +} + +static bool acm_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + TU_LOG_DRV("CDC ACM Set Data Format\r\n"); + + cdc_line_coding_t line_coding; + line_coding.bit_rate = p_cdc->line_coding.bit_rate; + line_coding.stop_bits = stop_bits; + line_coding.parity = parity; + line_coding.data_bits = data_bits; + + return acm_set_line_coding(p_cdc, &line_coding, complete_cb, user_data); +} + +static bool acm_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, + uintptr_t user_data) +{ + TU_VERIFY(p_cdc->acm_capability.support_line_request); + cdc_line_coding_t line_coding = p_cdc->line_coding; + line_coding.bit_rate = baudrate; + return acm_set_line_coding(p_cdc, &line_coding, complete_cb, user_data); } //--------------------------------------------------------------------+ @@ -969,176 +1035,187 @@ static bool acm_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfe #if CFG_TUH_CDC_FTDI enum { - CONFIG_FTDI_RESET = 0, - CONFIG_FTDI_MODEM_CTRL, - CONFIG_FTDI_SET_BAUDRATE, - CONFIG_FTDI_SET_DATA, - CONFIG_FTDI_COMPLETE + CONFIG_FTDI_RESET = 0, + CONFIG_FTDI_MODEM_CTRL, + CONFIG_FTDI_SET_BAUDRATE, + CONFIG_FTDI_SET_DATA, + CONFIG_FTDI_COMPLETE }; -static bool ftdi_open(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len) { - // FTDI Interface includes 1 vendor interface + 2 bulk endpoints - TU_VERIFY(itf_desc->bInterfaceSubClass == 0xff && itf_desc->bInterfaceProtocol == 0xff && itf_desc->bNumEndpoints == 2); - TU_VERIFY(sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t) <= max_len); +static bool ftdi_open(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len) +{ + // FTDI Interface includes 1 vendor interface + 2 bulk endpoints + TU_VERIFY(itf_desc->bInterfaceSubClass == 0xff && itf_desc->bInterfaceProtocol == 0xff && + itf_desc->bNumEndpoints == 2); + TU_VERIFY(sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t) <= max_len); - cdch_interface_t * p_cdc = make_new_itf(daddr, itf_desc); - TU_VERIFY(p_cdc); + cdch_interface_t *p_cdc = make_new_itf(daddr, itf_desc); + TU_VERIFY(p_cdc); - TU_LOG_DRV("FTDI opened\r\n"); - p_cdc->serial_drid = SERIAL_DRIVER_FTDI; + TU_LOG_DRV("FTDI opened\r\n"); + p_cdc->serial_drid = SERIAL_DRIVER_FTDI; - // endpoint pair - tusb_desc_endpoint_t const * desc_ep = (tusb_desc_endpoint_t const *) tu_desc_next(itf_desc); + // endpoint pair + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); - // data endpoints expected to be in pairs - return open_ep_stream_pair(p_cdc, desc_ep); + // data endpoints expected to be in pairs + return open_ep_stream_pair(p_cdc, desc_ep); } // set request without data -static bool ftdi_sio_set_request(cdch_interface_t* p_cdc, uint8_t command, uint16_t value, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_DEVICE, - .type = TUSB_REQ_TYPE_VENDOR, - .direction = TUSB_DIR_OUT - }, - .bRequest = command, - .wValue = tu_htole16(value), - .wIndex = 0, - .wLength = 0 - }; - - tuh_xfer_t xfer = { - .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request, - .buffer = NULL, - .complete_cb = complete_cb, - .user_data = user_data - }; - - return tuh_control_xfer(&xfer); -} - -static bool ftdi_sio_reset(cdch_interface_t* p_cdc, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - return ftdi_sio_set_request(p_cdc, FTDI_SIO_RESET, FTDI_SIO_RESET_SIO, complete_cb, user_data); -} - -static bool ftdi_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - (void) p_cdc; - (void) stop_bits; - (void) parity; - (void) data_bits; - (void) complete_cb; - (void) user_data; - // TODO not implemented yet - return false; -} - -static bool ftdi_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - (void) p_cdc; - (void) line_coding; - (void) complete_cb; - (void) user_data; - // TODO not implemented yet - return false; -} - -static bool ftdi_sio_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - TU_LOG_DRV("CDC FTDI Set Control Line State\r\n"); - p_cdc->user_control_cb = complete_cb; - TU_ASSERT(ftdi_sio_set_request(p_cdc, FTDI_SIO_MODEM_CTRL, 0x0300 | line_state, - complete_cb ? cdch_internal_control_complete : NULL, user_data)); - return true; -} - -static uint32_t ftdi_232bm_baud_base_to_divisor(uint32_t baud, uint32_t base) { - const uint8_t divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 }; - uint32_t divisor; - - /* divisor shifted 3 bits to the left */ - uint32_t divisor3 = base / (2 * baud); - divisor = (divisor3 >> 3); - divisor |= (uint32_t) divfrac[divisor3 & 0x7] << 14; - - /* Deal with special cases for highest baud rates. */ - if (divisor == 1) { /* 1.0 */ - divisor = 0; - } - else if (divisor == 0x4001) { /* 1.5 */ - divisor = 1; - } - - return divisor; -} - -static uint32_t ftdi_232bm_baud_to_divisor(uint32_t baud) { - return ftdi_232bm_baud_base_to_divisor(baud, 48000000u); -} - -static bool ftdi_sio_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - uint16_t const divisor = (uint16_t) ftdi_232bm_baud_to_divisor(baudrate); - TU_LOG_DRV("CDC FTDI Set BaudRate = %" PRIu32 ", divisor = 0x%04x\r\n", baudrate, divisor); - - p_cdc->user_control_cb = complete_cb; - p_cdc->requested_line_coding.bit_rate = baudrate; - TU_ASSERT(ftdi_sio_set_request(p_cdc, FTDI_SIO_SET_BAUD_RATE, divisor, - complete_cb ? cdch_internal_control_complete : NULL, user_data)); - - return true; -} - -static void ftdi_process_config(tuh_xfer_t* xfer) { - uintptr_t const state = xfer->user_data; - uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t * p_cdc = get_itf(idx); - TU_ASSERT(p_cdc, ); - - switch(state) { +static bool ftdi_sio_set_request(cdch_interface_t *p_cdc, uint8_t command, uint16_t value, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = + TUSB_REQ_RCPT_DEVICE, + .type = TUSB_REQ_TYPE_VENDOR, + .direction = TUSB_DIR_OUT }, + .bRequest = command, + .wValue = tu_htole16(value), + .wIndex = 0, + .wLength = 0 }; + + tuh_xfer_t xfer = { .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request, + .buffer = NULL, + .complete_cb = complete_cb, + .user_data = user_data }; + + return tuh_control_xfer(&xfer); +} + +static bool ftdi_sio_reset(cdch_interface_t *p_cdc, tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + return ftdi_sio_set_request(p_cdc, FTDI_SIO_RESET, FTDI_SIO_RESET_SIO, complete_cb, user_data); +} + +static bool ftdi_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + (void)p_cdc; + (void)stop_bits; + (void)parity; + (void)data_bits; + (void)complete_cb; + (void)user_data; + // TODO not implemented yet + return false; +} + +static bool ftdi_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + (void)p_cdc; + (void)line_coding; + (void)complete_cb; + (void)user_data; + // TODO not implemented yet + return false; +} + +static bool ftdi_sio_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + TU_LOG_DRV("CDC FTDI Set Control Line State\r\n"); + p_cdc->user_control_cb = complete_cb; + TU_ASSERT(ftdi_sio_set_request(p_cdc, FTDI_SIO_MODEM_CTRL, 0x0300 | line_state, + complete_cb ? cdch_internal_control_complete : NULL, user_data)); + return true; +} + +static uint32_t ftdi_232bm_baud_base_to_divisor(uint32_t baud, uint32_t base) +{ + const uint8_t divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 }; + uint32_t divisor; + + /* divisor shifted 3 bits to the left */ + uint32_t divisor3 = base / (2 * baud); + divisor = (divisor3 >> 3); + divisor |= (uint32_t)divfrac[divisor3 & 0x7] << 14; + + /* Deal with special cases for highest baud rates. */ + if (divisor == 1) { /* 1.0 */ + divisor = 0; + } else if (divisor == 0x4001) { /* 1.5 */ + divisor = 1; + } + + return divisor; +} + +static uint32_t ftdi_232bm_baud_to_divisor(uint32_t baud) +{ + return ftdi_232bm_baud_base_to_divisor(baud, 48000000u); +} + +static bool ftdi_sio_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + uint16_t const divisor = (uint16_t)ftdi_232bm_baud_to_divisor(baudrate); + TU_LOG_DRV("CDC FTDI Set BaudRate = %" PRIu32 ", divisor = 0x%04x\r\n", baudrate, divisor); + + p_cdc->user_control_cb = complete_cb; + p_cdc->requested_line_coding.bit_rate = baudrate; + TU_ASSERT(ftdi_sio_set_request(p_cdc, FTDI_SIO_SET_BAUD_RATE, divisor, + complete_cb ? cdch_internal_control_complete : NULL, user_data)); + + return true; +} + +static void ftdi_process_config(tuh_xfer_t *xfer) +{ + uintptr_t const state = xfer->user_data; + uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t *p_cdc = get_itf(idx); + TU_ASSERT(p_cdc, ); + + switch (state) { // Note may need to read FTDI eeprom case CONFIG_FTDI_RESET: - TU_ASSERT(ftdi_sio_reset(p_cdc, ftdi_process_config, CONFIG_FTDI_MODEM_CTRL),); - break; + TU_ASSERT(ftdi_sio_reset(p_cdc, ftdi_process_config, CONFIG_FTDI_MODEM_CTRL), ); + break; case CONFIG_FTDI_MODEM_CTRL: - #if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM - TU_ASSERT(ftdi_sio_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, ftdi_process_config, CONFIG_FTDI_SET_BAUDRATE),); - break; - #else - TU_ATTR_FALLTHROUGH; - #endif +#if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM + TU_ASSERT(ftdi_sio_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, + ftdi_process_config, CONFIG_FTDI_SET_BAUDRATE), ); + break; +#else + TU_ATTR_FALLTHROUGH; +#endif case CONFIG_FTDI_SET_BAUDRATE: { - #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM - cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; - TU_ASSERT(ftdi_sio_set_baudrate(p_cdc, line_coding.bit_rate, ftdi_process_config, CONFIG_FTDI_SET_DATA),); - break; - #else - TU_ATTR_FALLTHROUGH; - #endif +#ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM + cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; + TU_ASSERT(ftdi_sio_set_baudrate(p_cdc, line_coding.bit_rate, ftdi_process_config, + CONFIG_FTDI_SET_DATA), ); + break; +#else + TU_ATTR_FALLTHROUGH; +#endif } case CONFIG_FTDI_SET_DATA: { - #if 0 // TODO set data format - #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM +#if 0 // TODO set data format +#ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; TU_ASSERT(ftdi_sio_set_data(p_cdc, process_ftdi_config, CONFIG_FTDI_COMPLETE),); break; - #endif - #endif +#endif +#endif - TU_ATTR_FALLTHROUGH; + TU_ATTR_FALLTHROUGH; } case CONFIG_FTDI_COMPLETE: - set_config_complete(p_cdc, idx, itf_num); - break; + set_config_complete(p_cdc, idx, itf_num); + break; default: - break; - } + break; + } } #endif @@ -1150,149 +1227,163 @@ static void ftdi_process_config(tuh_xfer_t* xfer) { #if CFG_TUH_CDC_CP210X enum { - CONFIG_CP210X_IFC_ENABLE = 0, - CONFIG_CP210X_SET_BAUDRATE, - CONFIG_CP210X_SET_LINE_CTL, - CONFIG_CP210X_SET_DTR_RTS, - CONFIG_CP210X_COMPLETE + CONFIG_CP210X_IFC_ENABLE = 0, + CONFIG_CP210X_SET_BAUDRATE, + CONFIG_CP210X_SET_LINE_CTL, + CONFIG_CP210X_SET_DTR_RTS, + CONFIG_CP210X_COMPLETE }; -static bool cp210x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - // CP210x Interface includes 1 vendor interface + 2 bulk endpoints - TU_VERIFY(itf_desc->bInterfaceSubClass == 0 && itf_desc->bInterfaceProtocol == 0 && itf_desc->bNumEndpoints == 2); - TU_VERIFY(sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t) <= max_len); - - cdch_interface_t * p_cdc = make_new_itf(daddr, itf_desc); - TU_VERIFY(p_cdc); - - TU_LOG_DRV("CP210x opened\r\n"); - p_cdc->serial_drid = SERIAL_DRIVER_CP210X; - - // endpoint pair - tusb_desc_endpoint_t const * desc_ep = (tusb_desc_endpoint_t const *) tu_desc_next(itf_desc); - - // data endpoints expected to be in pairs - return open_ep_stream_pair(p_cdc, desc_ep); -} - -static bool cp210x_set_request(cdch_interface_t* p_cdc, uint8_t command, uint16_t value, uint8_t* buffer, uint16_t length, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_VENDOR, - .direction = TUSB_DIR_OUT - }, - .bRequest = command, - .wValue = tu_htole16(value), - .wIndex = p_cdc->bInterfaceNumber, - .wLength = tu_htole16(length) - }; - - // use usbh enum buf since application variable does not live long enough - uint8_t* enum_buf = NULL; - - if (buffer && length > 0) { - enum_buf = usbh_get_enum_buf(); - tu_memcpy_s(enum_buf, CFG_TUH_ENUMERATION_BUFSIZE, buffer, length); - } - - tuh_xfer_t xfer = { - .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request, - .buffer = enum_buf, - .complete_cb = complete_cb, - .user_data = user_data - }; - - return tuh_control_xfer(&xfer); -} - -static bool cp210x_ifc_enable(cdch_interface_t* p_cdc, uint16_t enabled, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - return cp210x_set_request(p_cdc, CP210X_IFC_ENABLE, enabled, NULL, 0, complete_cb, user_data); -} - -static bool cp210x_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - // TODO implement later - (void) p_cdc; - (void) line_coding; - (void) complete_cb; - (void) user_data; - return false; -} - -static bool cp210x_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - TU_LOG_DRV("CDC CP210x Set BaudRate = %" PRIu32 "\r\n", baudrate); - uint32_t baud_le = tu_htole32(baudrate); - p_cdc->user_control_cb = complete_cb; - return cp210x_set_request(p_cdc, CP210X_SET_BAUDRATE, 0, (uint8_t *) &baud_le, 4, - complete_cb ? cdch_internal_control_complete : NULL, user_data); -} - -static bool cp210x_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - (void) p_cdc; - (void) stop_bits; - (void) parity; - (void) data_bits; - (void) complete_cb; - (void) user_data; - // TODO not implemented yet - return false; -} - -static bool cp210x_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - TU_LOG_DRV("CDC CP210x Set Control Line State\r\n"); - p_cdc->user_control_cb = complete_cb; - return cp210x_set_request(p_cdc, CP210X_SET_MHS, 0x0300 | line_state, NULL, 0, - complete_cb ? cdch_internal_control_complete : NULL, user_data); -} - -static void cp210x_process_config(tuh_xfer_t* xfer) { - uintptr_t const state = xfer->user_data; - uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t *p_cdc = get_itf(idx); - TU_ASSERT(p_cdc,); - - switch (state) { +static bool cp210x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +{ + // CP210x Interface includes 1 vendor interface + 2 bulk endpoints + TU_VERIFY(itf_desc->bInterfaceSubClass == 0 && itf_desc->bInterfaceProtocol == 0 && + itf_desc->bNumEndpoints == 2); + TU_VERIFY(sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t) <= max_len); + + cdch_interface_t *p_cdc = make_new_itf(daddr, itf_desc); + TU_VERIFY(p_cdc); + + TU_LOG_DRV("CP210x opened\r\n"); + p_cdc->serial_drid = SERIAL_DRIVER_CP210X; + + // endpoint pair + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); + + // data endpoints expected to be in pairs + return open_ep_stream_pair(p_cdc, desc_ep); +} + +static bool cp210x_set_request(cdch_interface_t *p_cdc, uint8_t command, uint16_t value, + uint8_t *buffer, uint16_t length, tuh_xfer_cb_t complete_cb, + uintptr_t user_data) +{ + tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = + TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_VENDOR, + .direction = TUSB_DIR_OUT }, + .bRequest = command, + .wValue = tu_htole16(value), + .wIndex = p_cdc->bInterfaceNumber, + .wLength = tu_htole16(length) }; + + // use usbh enum buf since application variable does not live long enough + uint8_t *enum_buf = NULL; + + if (buffer && length > 0) { + enum_buf = usbh_get_enum_buf(); + tu_memcpy_s(enum_buf, CFG_TUH_ENUMERATION_BUFSIZE, buffer, length); + } + + tuh_xfer_t xfer = { .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request, + .buffer = enum_buf, + .complete_cb = complete_cb, + .user_data = user_data }; + + return tuh_control_xfer(&xfer); +} + +static bool cp210x_ifc_enable(cdch_interface_t *p_cdc, uint16_t enabled, tuh_xfer_cb_t complete_cb, + uintptr_t user_data) +{ + return cp210x_set_request(p_cdc, CP210X_IFC_ENABLE, enabled, NULL, 0, complete_cb, user_data); +} + +static bool cp210x_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + // TODO implement later + (void)p_cdc; + (void)line_coding; + (void)complete_cb; + (void)user_data; + return false; +} + +static bool cp210x_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + TU_LOG_DRV("CDC CP210x Set BaudRate = %" PRIu32 "\r\n", baudrate); + uint32_t baud_le = tu_htole32(baudrate); + p_cdc->user_control_cb = complete_cb; + return cp210x_set_request(p_cdc, CP210X_SET_BAUDRATE, 0, (uint8_t *)&baud_le, 4, + complete_cb ? cdch_internal_control_complete : NULL, user_data); +} + +static bool cp210x_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, + uintptr_t user_data) +{ + (void)p_cdc; + (void)stop_bits; + (void)parity; + (void)data_bits; + (void)complete_cb; + (void)user_data; + // TODO not implemented yet + return false; +} + +static bool cp210x_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + TU_LOG_DRV("CDC CP210x Set Control Line State\r\n"); + p_cdc->user_control_cb = complete_cb; + return cp210x_set_request(p_cdc, CP210X_SET_MHS, 0x0300 | line_state, NULL, 0, + complete_cb ? cdch_internal_control_complete : NULL, user_data); +} + +static void cp210x_process_config(tuh_xfer_t *xfer) +{ + uintptr_t const state = xfer->user_data; + uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t *p_cdc = get_itf(idx); + TU_ASSERT(p_cdc, ); + + switch (state) { case CONFIG_CP210X_IFC_ENABLE: - TU_ASSERT(cp210x_ifc_enable(p_cdc, 1, cp210x_process_config, CONFIG_CP210X_SET_BAUDRATE),); - break; + TU_ASSERT(cp210x_ifc_enable(p_cdc, 1, cp210x_process_config, CONFIG_CP210X_SET_BAUDRATE), ); + break; case CONFIG_CP210X_SET_BAUDRATE: { - #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM - cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; - TU_ASSERT(cp210x_set_baudrate(p_cdc, line_coding.bit_rate, cp210x_process_config, CONFIG_CP210X_SET_LINE_CTL),); - break; - #else - TU_ATTR_FALLTHROUGH; - #endif +#ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM + cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; + TU_ASSERT(cp210x_set_baudrate(p_cdc, line_coding.bit_rate, cp210x_process_config, + CONFIG_CP210X_SET_LINE_CTL), ); + break; +#else + TU_ATTR_FALLTHROUGH; +#endif } case CONFIG_CP210X_SET_LINE_CTL: { - #if defined(CFG_TUH_CDC_LINE_CODING_ON_ENUM) && 0 // skip for now - cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; - break; - #else - TU_ATTR_FALLTHROUGH; - #endif +#if defined(CFG_TUH_CDC_LINE_CODING_ON_ENUM) && 0 // skip for now + cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; + break; +#else + TU_ATTR_FALLTHROUGH; +#endif } case CONFIG_CP210X_SET_DTR_RTS: - #if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM - TU_ASSERT(cp210x_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, cp210x_process_config, CONFIG_CP210X_COMPLETE),); - break; - #else - TU_ATTR_FALLTHROUGH; - #endif +#if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM + TU_ASSERT(cp210x_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, + cp210x_process_config, CONFIG_CP210X_COMPLETE), ); + break; +#else + TU_ATTR_FALLTHROUGH; +#endif case CONFIG_CP210X_COMPLETE: - set_config_complete(p_cdc, idx, itf_num); - break; + set_config_complete(p_cdc, idx, itf_num); + break; - default: break; - } + default: + break; + } } #endif @@ -1308,55 +1399,59 @@ static uint16_t ch34x_get_divisor_prescaler(uint32_t baval); //------------- control request -------------// -static bool ch34x_set_request(cdch_interface_t* p_cdc, uint8_t direction, uint8_t request, uint16_t value, - uint16_t index, uint8_t* buffer, uint16_t length, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - tusb_control_request_t const request_setup = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_DEVICE, - .type = TUSB_REQ_TYPE_VENDOR, - .direction = direction & 0x01u - }, - .bRequest = request, - .wValue = tu_htole16 (value), - .wIndex = tu_htole16 (index), - .wLength = tu_htole16 (length) - }; - - // use usbh enum buf since application variable does not live long enough - uint8_t* enum_buf = NULL; - - if (buffer && length > 0) { - enum_buf = usbh_get_enum_buf(); - if (direction == TUSB_DIR_OUT) { - tu_memcpy_s(enum_buf, CFG_TUH_ENUMERATION_BUFSIZE, buffer, length); +static bool ch34x_set_request(cdch_interface_t *p_cdc, uint8_t direction, uint8_t request, + uint16_t value, uint16_t index, uint8_t *buffer, uint16_t length, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + tusb_control_request_t const request_setup = { + .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_DEVICE, + .type = TUSB_REQ_TYPE_VENDOR, + .direction = direction & 0x01u }, + .bRequest = request, + .wValue = tu_htole16(value), + .wIndex = tu_htole16(index), + .wLength = tu_htole16(length) + }; + + // use usbh enum buf since application variable does not live long enough + uint8_t *enum_buf = NULL; + + if (buffer && length > 0) { + enum_buf = usbh_get_enum_buf(); + if (direction == TUSB_DIR_OUT) { + tu_memcpy_s(enum_buf, CFG_TUH_ENUMERATION_BUFSIZE, buffer, length); + } } - } - tuh_xfer_t xfer = { - .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request_setup, - .buffer = enum_buf, - .complete_cb = complete_cb, - .user_data = user_data - }; + tuh_xfer_t xfer = { .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request_setup, + .buffer = enum_buf, + .complete_cb = complete_cb, + .user_data = user_data }; - return tuh_control_xfer(&xfer); + return tuh_control_xfer(&xfer); } -static inline bool ch34x_control_out(cdch_interface_t* p_cdc, uint8_t request, uint16_t value, uint16_t index, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - return ch34x_set_request(p_cdc, TUSB_DIR_OUT, request, value, index, NULL, 0, complete_cb, user_data); +static inline bool ch34x_control_out(cdch_interface_t *p_cdc, uint8_t request, uint16_t value, + uint16_t index, tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + return ch34x_set_request(p_cdc, TUSB_DIR_OUT, request, value, index, NULL, 0, complete_cb, + user_data); } -static inline bool ch34x_control_in(cdch_interface_t* p_cdc, uint8_t request, uint16_t value, uint16_t index, - uint8_t* buffer, uint16_t buffersize, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - return ch34x_set_request(p_cdc, TUSB_DIR_IN, request, value, index, buffer, buffersize, - complete_cb, user_data); +static inline bool ch34x_control_in(cdch_interface_t *p_cdc, uint8_t request, uint16_t value, + uint16_t index, uint8_t *buffer, uint16_t buffersize, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + return ch34x_set_request(p_cdc, TUSB_DIR_IN, request, value, index, buffer, buffersize, + complete_cb, user_data); } -static inline bool ch34x_write_reg(cdch_interface_t* p_cdc, uint16_t reg, uint16_t reg_value, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - return ch34x_control_out(p_cdc, CH34X_REQ_WRITE_REG, reg, reg_value, complete_cb, user_data); +static inline bool ch34x_write_reg(cdch_interface_t *p_cdc, uint16_t reg, uint16_t reg_value, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + return ch34x_control_out(p_cdc, CH34X_REQ_WRITE_REG, reg, reg_value, complete_cb, user_data); } //static bool ch34x_read_reg_request ( cdch_interface_t* p_cdc, uint16_t reg, @@ -1365,306 +1460,324 @@ static inline bool ch34x_write_reg(cdch_interface_t* p_cdc, uint16_t reg, uint16 // return ch34x_control_in ( p_cdc, CH34X_REQ_READ_REG, reg, 0, buffer, buffersize, complete_cb, user_data ); //} -static bool ch34x_write_reg_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - uint16_t const div_ps = ch34x_get_divisor_prescaler(baudrate); - TU_VERIFY(div_ps); - TU_ASSERT(ch34x_write_reg(p_cdc, CH34X_REG16_DIVISOR_PRESCALER, div_ps, - complete_cb, user_data)); - return true; +static bool ch34x_write_reg_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + uint16_t const div_ps = ch34x_get_divisor_prescaler(baudrate); + TU_VERIFY(div_ps); + TU_ASSERT( + ch34x_write_reg(p_cdc, CH34X_REG16_DIVISOR_PRESCALER, div_ps, complete_cb, user_data)); + return true; } //------------- Driver API -------------// // internal control complete to update state such as line state, encoding -static void ch34x_control_complete(tuh_xfer_t* xfer) { - // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber - process_internal_control_complete(xfer, 0); -} - -static bool ch34x_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - p_cdc->requested_line_coding.stop_bits = stop_bits; - p_cdc->requested_line_coding.parity = parity; - p_cdc->requested_line_coding.data_bits = data_bits; - - uint8_t const lcr = ch34x_get_lcr(stop_bits, parity, data_bits); - TU_VERIFY(lcr); - TU_ASSERT (ch34x_control_out(p_cdc, CH34X_REQ_WRITE_REG, CH32X_REG16_LCR2_LCR, lcr, - complete_cb ? ch34x_control_complete : NULL, user_data)); - return true; -} - -static bool ch34x_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - p_cdc->requested_line_coding.bit_rate = baudrate; - p_cdc->user_control_cb = complete_cb; - TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, baudrate, - complete_cb ? ch34x_control_complete : NULL, user_data)); - return true; -} - -static void ch34x_set_line_coding_stage1_complete(tuh_xfer_t* xfer) { - // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber - uint8_t const itf_num = 0; - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t* p_cdc = get_itf(idx); - TU_ASSERT(p_cdc, ); - - if (xfer->result == XFER_RESULT_SUCCESS) { - // stage 1 success, continue to stage 2 - p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; - TU_ASSERT(ch34x_set_data_format(p_cdc, p_cdc->requested_line_coding.stop_bits, p_cdc->requested_line_coding.parity, - p_cdc->requested_line_coding.data_bits, ch34x_control_complete, xfer->user_data), ); - } else { - // stage 1 failed, notify user - xfer->complete_cb = p_cdc->user_control_cb; - if (xfer->complete_cb) { - xfer->complete_cb(xfer); +static void ch34x_control_complete(tuh_xfer_t *xfer) +{ + // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber + process_internal_control_complete(xfer, 0); +} + +static bool ch34x_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, + uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + p_cdc->requested_line_coding.stop_bits = stop_bits; + p_cdc->requested_line_coding.parity = parity; + p_cdc->requested_line_coding.data_bits = data_bits; + + uint8_t const lcr = ch34x_get_lcr(stop_bits, parity, data_bits); + TU_VERIFY(lcr); + TU_ASSERT(ch34x_control_out(p_cdc, CH34X_REQ_WRITE_REG, CH32X_REG16_LCR2_LCR, lcr, + complete_cb ? ch34x_control_complete : NULL, user_data)); + return true; +} + +static bool ch34x_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + p_cdc->requested_line_coding.bit_rate = baudrate; + p_cdc->user_control_cb = complete_cb; + TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, baudrate, complete_cb ? ch34x_control_complete : NULL, + user_data)); + return true; +} + +static void ch34x_set_line_coding_stage1_complete(tuh_xfer_t *xfer) +{ + // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber + uint8_t const itf_num = 0; + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t *p_cdc = get_itf(idx); + TU_ASSERT(p_cdc, ); + + if (xfer->result == XFER_RESULT_SUCCESS) { + // stage 1 success, continue to stage 2 + p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; + TU_ASSERT(ch34x_set_data_format(p_cdc, p_cdc->requested_line_coding.stop_bits, + p_cdc->requested_line_coding.parity, + p_cdc->requested_line_coding.data_bits, + ch34x_control_complete, xfer->user_data), ); + } else { + // stage 1 failed, notify user + xfer->complete_cb = p_cdc->user_control_cb; + if (xfer->complete_cb) { + xfer->complete_cb(xfer); + } } - } } // 2 stages: set baudrate (stage1) + set data format (stage2) -static bool ch34x_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - p_cdc->requested_line_coding = *line_coding; - p_cdc->user_control_cb = complete_cb; - - if (complete_cb) { - // stage 1 set baudrate - TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, line_coding->bit_rate, - ch34x_set_line_coding_stage1_complete, user_data)); - } else { - // sync call - xfer_result_t result; - - // stage 1 set baudrate - TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, line_coding->bit_rate, NULL, (uintptr_t) &result)); - TU_VERIFY(result == XFER_RESULT_SUCCESS); - p_cdc->line_coding.bit_rate = line_coding->bit_rate; - - // stage 2 set data format - TU_ASSERT(ch34x_set_data_format(p_cdc, line_coding->stop_bits, line_coding->parity, line_coding->data_bits, - NULL, (uintptr_t) &result)); - TU_VERIFY(result == XFER_RESULT_SUCCESS); - p_cdc->line_coding.stop_bits = line_coding->stop_bits; - p_cdc->line_coding.parity = line_coding->parity; - p_cdc->line_coding.data_bits = line_coding->data_bits; - - // update transfer result, user_data is expected to point to xfer_result_t - if (user_data) { - *((xfer_result_t*) user_data) = result; +static bool ch34x_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + p_cdc->requested_line_coding = *line_coding; + p_cdc->user_control_cb = complete_cb; + + if (complete_cb) { + // stage 1 set baudrate + TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, line_coding->bit_rate, + ch34x_set_line_coding_stage1_complete, user_data)); + } else { + // sync call + xfer_result_t result; + + // stage 1 set baudrate + TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, line_coding->bit_rate, NULL, (uintptr_t)&result)); + TU_VERIFY(result == XFER_RESULT_SUCCESS); + p_cdc->line_coding.bit_rate = line_coding->bit_rate; + + // stage 2 set data format + TU_ASSERT(ch34x_set_data_format(p_cdc, line_coding->stop_bits, line_coding->parity, + line_coding->data_bits, NULL, (uintptr_t)&result)); + TU_VERIFY(result == XFER_RESULT_SUCCESS); + p_cdc->line_coding.stop_bits = line_coding->stop_bits; + p_cdc->line_coding.parity = line_coding->parity; + p_cdc->line_coding.data_bits = line_coding->data_bits; + + // update transfer result, user_data is expected to point to xfer_result_t + if (user_data) { + *((xfer_result_t *)user_data) = result; + } } - } - return true; + return true; } -static bool ch34x_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - uint8_t control = 0; - if (line_state & CDC_CONTROL_LINE_STATE_RTS) { - control |= CH34X_BIT_RTS; - } - if (line_state & CDC_CONTROL_LINE_STATE_DTR) { - control |= CH34X_BIT_DTR; - } +static bool ch34x_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + uint8_t control = 0; + if (line_state & CDC_CONTROL_LINE_STATE_RTS) { + control |= CH34X_BIT_RTS; + } + if (line_state & CDC_CONTROL_LINE_STATE_DTR) { + control |= CH34X_BIT_DTR; + } - // CH34x signals are inverted - control = ~control; + // CH34x signals are inverted + control = ~control; - p_cdc->user_control_cb = complete_cb; - TU_ASSERT (ch34x_control_out(p_cdc, CH34X_REQ_MODEM_CTRL, control, 0, - complete_cb ? ch34x_control_complete : NULL, user_data)); - return true; + p_cdc->user_control_cb = complete_cb; + TU_ASSERT(ch34x_control_out(p_cdc, CH34X_REQ_MODEM_CTRL, control, 0, + complete_cb ? ch34x_control_complete : NULL, user_data)); + return true; } //------------- Enumeration -------------// enum { - CONFIG_CH34X_READ_VERSION = 0, - CONFIG_CH34X_SERIAL_INIT, - CONFIG_CH34X_SPECIAL_REG_WRITE, - CONFIG_CH34X_FLOW_CONTROL, - CONFIG_CH34X_MODEM_CONTROL, - CONFIG_CH34X_COMPLETE + CONFIG_CH34X_READ_VERSION = 0, + CONFIG_CH34X_SERIAL_INIT, + CONFIG_CH34X_SPECIAL_REG_WRITE, + CONFIG_CH34X_FLOW_CONTROL, + CONFIG_CH34X_MODEM_CONTROL, + CONFIG_CH34X_COMPLETE }; -static bool ch34x_open(uint8_t daddr, tusb_desc_interface_t const* itf_desc, uint16_t max_len) { - // CH34x Interface includes 1 vendor interface + 2 bulk + 1 interrupt endpoints - TU_VERIFY (itf_desc->bNumEndpoints == 3); - TU_VERIFY (sizeof(tusb_desc_interface_t) + 3 * sizeof(tusb_desc_endpoint_t) <= max_len); +static bool ch34x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +{ + // CH34x Interface includes 1 vendor interface + 2 bulk + 1 interrupt endpoints + TU_VERIFY(itf_desc->bNumEndpoints == 3); + TU_VERIFY(sizeof(tusb_desc_interface_t) + 3 * sizeof(tusb_desc_endpoint_t) <= max_len); - cdch_interface_t* p_cdc = make_new_itf(daddr, itf_desc); - TU_VERIFY (p_cdc); + cdch_interface_t *p_cdc = make_new_itf(daddr, itf_desc); + TU_VERIFY(p_cdc); - TU_LOG_DRV ("CH34x opened\r\n"); - p_cdc->serial_drid = SERIAL_DRIVER_CH34X; + TU_LOG_DRV("CH34x opened\r\n"); + p_cdc->serial_drid = SERIAL_DRIVER_CH34X; - tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) tu_desc_next(itf_desc); + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); - // data endpoints expected to be in pairs - TU_ASSERT(open_ep_stream_pair(p_cdc, desc_ep)); - desc_ep += 2; + // data endpoints expected to be in pairs + TU_ASSERT(open_ep_stream_pair(p_cdc, desc_ep)); + desc_ep += 2; - // Interrupt endpoint: not used for now - TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(desc_ep) && - TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer); - TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); - p_cdc->ep_notif = desc_ep->bEndpointAddress; + // Interrupt endpoint: not used for now + TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(desc_ep) && + TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer); + TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); + p_cdc->ep_notif = desc_ep->bEndpointAddress; - return true; + return true; } -static void ch34x_process_config(tuh_xfer_t* xfer) { - // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber - uint8_t const itf_num = 0; - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t* p_cdc = get_itf(idx); - uintptr_t const state = xfer->user_data; - uint8_t buffer[2]; // TODO remove - TU_ASSERT (p_cdc,); - TU_ASSERT (xfer->result == XFER_RESULT_SUCCESS,); +static void ch34x_process_config(tuh_xfer_t *xfer) +{ + // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber + uint8_t const itf_num = 0; + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t *p_cdc = get_itf(idx); + uintptr_t const state = xfer->user_data; + uint8_t buffer[2]; // TODO remove + TU_ASSERT(p_cdc, ); + TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); - switch (state) { + switch (state) { case CONFIG_CH34X_READ_VERSION: - TU_LOG_DRV("[%u] CDCh CH34x attempt to read Chip Version\r\n", p_cdc->daddr); - TU_ASSERT (ch34x_control_in(p_cdc, CH34X_REQ_READ_VERSION, 0, 0, buffer, 2, ch34x_process_config, CONFIG_CH34X_SERIAL_INIT),); - break; + TU_LOG_DRV("[%u] CDCh CH34x attempt to read Chip Version\r\n", p_cdc->daddr); + TU_ASSERT(ch34x_control_in(p_cdc, CH34X_REQ_READ_VERSION, 0, 0, buffer, 2, + ch34x_process_config, CONFIG_CH34X_SERIAL_INIT), ); + break; case CONFIG_CH34X_SERIAL_INIT: { - // handle version read data, set CH34x line coding (incl. baudrate) - uint8_t const version = xfer->buffer[0]; - TU_LOG_DRV("[%u] CDCh CH34x Chip Version = %02x\r\n", p_cdc->daddr, version); - // only versions >= 0x30 are tested, below 0x30 seems having other programming, see drivers from WCH vendor, Linux kernel and FreeBSD - TU_ASSERT (version >= 0x30,); - // init CH34x with line coding - cdc_line_coding_t const line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X; - uint16_t const div_ps = ch34x_get_divisor_prescaler(line_coding.bit_rate); - TU_ASSERT(div_ps, ); - uint8_t const lcr = ch34x_get_lcr(line_coding.stop_bits, line_coding.parity, line_coding.data_bits); - TU_ASSERT(lcr, ); - TU_ASSERT (ch34x_control_out(p_cdc, CH34X_REQ_SERIAL_INIT, tu_u16(lcr, 0x9c), div_ps, - ch34x_process_config, CONFIG_CH34X_SPECIAL_REG_WRITE),); - break; + // handle version read data, set CH34x line coding (incl. baudrate) + uint8_t const version = xfer->buffer[0]; + TU_LOG_DRV("[%u] CDCh CH34x Chip Version = %02x\r\n", p_cdc->daddr, version); + // only versions >= 0x30 are tested, below 0x30 seems having other programming, see drivers from WCH vendor, Linux kernel and FreeBSD + TU_ASSERT(version >= 0x30, ); + // init CH34x with line coding + cdc_line_coding_t const line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X; + uint16_t const div_ps = ch34x_get_divisor_prescaler(line_coding.bit_rate); + TU_ASSERT(div_ps, ); + uint8_t const lcr = + ch34x_get_lcr(line_coding.stop_bits, line_coding.parity, line_coding.data_bits); + TU_ASSERT(lcr, ); + TU_ASSERT(ch34x_control_out(p_cdc, CH34X_REQ_SERIAL_INIT, tu_u16(lcr, 0x9c), div_ps, + ch34x_process_config, CONFIG_CH34X_SPECIAL_REG_WRITE), ); + break; } case CONFIG_CH34X_SPECIAL_REG_WRITE: - // overtake line coding and do special reg write, purpose unknown, overtaken from WCH driver - p_cdc->line_coding = ((cdc_line_coding_t) CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X); - TU_ASSERT (ch34x_write_reg(p_cdc, TU_U16(CH341_REG_0x0F, CH341_REG_0x2C), 0x0007, ch34x_process_config, CONFIG_CH34X_FLOW_CONTROL),); - break; + // overtake line coding and do special reg write, purpose unknown, overtaken from WCH driver + p_cdc->line_coding = ((cdc_line_coding_t)CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X); + TU_ASSERT(ch34x_write_reg(p_cdc, TU_U16(CH341_REG_0x0F, CH341_REG_0x2C), 0x0007, + ch34x_process_config, CONFIG_CH34X_FLOW_CONTROL), ); + break; case CONFIG_CH34X_FLOW_CONTROL: - // no hardware flow control - TU_ASSERT (ch34x_write_reg(p_cdc, TU_U16(CH341_REG_0x27, CH341_REG_0x27), 0x0000, ch34x_process_config, CONFIG_CH34X_MODEM_CONTROL),); - break; + // no hardware flow control + TU_ASSERT(ch34x_write_reg(p_cdc, TU_U16(CH341_REG_0x27, CH341_REG_0x27), 0x0000, + ch34x_process_config, CONFIG_CH34X_MODEM_CONTROL), ); + break; case CONFIG_CH34X_MODEM_CONTROL: - // !always! set modem controls RTS/DTR (CH34x has no reset state after CH34X_REQ_SERIAL_INIT) - TU_ASSERT (ch34x_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, ch34x_process_config, CONFIG_CH34X_COMPLETE),); - break; + // !always! set modem controls RTS/DTR (CH34x has no reset state after CH34X_REQ_SERIAL_INIT) + TU_ASSERT(ch34x_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, + ch34x_process_config, CONFIG_CH34X_COMPLETE), ); + break; case CONFIG_CH34X_COMPLETE: - set_config_complete(p_cdc, idx, itf_num); - break; + set_config_complete(p_cdc, idx, itf_num); + break; default: - TU_ASSERT (false,); - break; - } + TU_ASSERT(false, ); + break; + } } //------------- CH34x helper -------------// // calculate divisor and prescaler for baudrate, return it as 16-bit combined value -static uint16_t ch34x_get_divisor_prescaler(uint32_t baval) { - uint8_t a; - uint8_t b; - uint32_t c; - - TU_VERIFY(baval != 0 && baval <= 2000000, 0); - switch (baval) { +static uint16_t ch34x_get_divisor_prescaler(uint32_t baval) +{ + uint8_t a; + uint8_t b; + uint32_t c; + + TU_VERIFY(baval != 0 && baval <= 2000000, 0); + switch (baval) { case 921600: - a = 0xf3; - b = 7; - break; + a = 0xf3; + b = 7; + break; case 307200: - a = 0xd9; - b = 7; - break; + a = 0xd9; + b = 7; + break; default: - if (baval > 6000000 / 255) { - b = 3; - c = 6000000; - } else if (baval > 750000 / 255) { - b = 2; - c = 750000; - } else if (baval > 93750 / 255) { - b = 1; - c = 93750; - } else { - b = 0; - c = 11719; - } - a = (uint8_t) (c / baval); - if (a == 0 || a == 0xFF) { - return 0; - } - if ((c / a - baval) > (baval - c / (a + 1))) { - a++; - } - a = (uint8_t) (256 - a); - break; - } + if (baval > 6000000 / 255) { + b = 3; + c = 6000000; + } else if (baval > 750000 / 255) { + b = 2; + c = 750000; + } else if (baval > 93750 / 255) { + b = 1; + c = 93750; + } else { + b = 0; + c = 11719; + } + a = (uint8_t)(c / baval); + if (a == 0 || a == 0xFF) { + return 0; + } + if ((c / a - baval) > (baval - c / (a + 1))) { + a++; + } + a = (uint8_t)(256 - a); + break; + } - // reg divisor = a, reg prescaler = b - // According to linux code we need to set bit 7 of UCHCOM_REG_BPS_PRE, - // otherwise the chip will buffer data. - return (uint16_t) ((uint16_t)a << 8 | 0x80 | b); + // reg divisor = a, reg prescaler = b + // According to linux code we need to set bit 7 of UCHCOM_REG_BPS_PRE, + // otherwise the chip will buffer data. + return (uint16_t)((uint16_t)a << 8 | 0x80 | b); } // calculate lcr value from data coding -static uint8_t ch34x_get_lcr(uint8_t stop_bits, uint8_t parity, uint8_t data_bits) { - uint8_t lcr = CH34X_LCR_ENABLE_RX | CH34X_LCR_ENABLE_TX; - TU_VERIFY(data_bits >= 5 && data_bits <= 8, 0); - lcr |= (uint8_t) (data_bits - 5); +static uint8_t ch34x_get_lcr(uint8_t stop_bits, uint8_t parity, uint8_t data_bits) +{ + uint8_t lcr = CH34X_LCR_ENABLE_RX | CH34X_LCR_ENABLE_TX; + TU_VERIFY(data_bits >= 5 && data_bits <= 8, 0); + lcr |= (uint8_t)(data_bits - 5); - switch(parity) { + switch (parity) { case CDC_LINE_CODING_PARITY_NONE: - break; + break; case CDC_LINE_CODING_PARITY_ODD: - lcr |= CH34X_LCR_ENABLE_PAR; - break; + lcr |= CH34X_LCR_ENABLE_PAR; + break; case CDC_LINE_CODING_PARITY_EVEN: - lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_PAR_EVEN; - break; + lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_PAR_EVEN; + break; case CDC_LINE_CODING_PARITY_MARK: - lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_MARK_SPACE; - break; + lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_MARK_SPACE; + break; case CDC_LINE_CODING_PARITY_SPACE: - lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_MARK_SPACE | CH34X_LCR_PAR_EVEN; - break; + lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_MARK_SPACE | CH34X_LCR_PAR_EVEN; + break; - default: break; - } + default: + break; + } - // 1.5 stop bits not supported - TU_VERIFY(stop_bits != CDC_LINE_CODING_STOP_BITS_1_5, 0); - if (stop_bits == CDC_LINE_CODING_STOP_BITS_2) { - lcr |= CH34X_LCR_STOP_BITS_2; - } + // 1.5 stop bits not supported + TU_VERIFY(stop_bits != CDC_LINE_CODING_STOP_BITS_1_5, 0); + if (stop_bits == CDC_LINE_CODING_STOP_BITS_2) { + lcr |= CH34X_LCR_STOP_BITS_2; + } - return lcr; + return lcr; } - #endif // CFG_TUH_CDC_CH34X #endif diff --git a/Libraries/tinyusb/src/class/cdc/cdc_host.h b/Libraries/tinyusb/src/class/cdc/cdc_host.h index b63dd153097..a82e1a9728a 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_host.h +++ b/Libraries/tinyusb/src/class/cdc/cdc_host.h @@ -30,7 +30,7 @@ #include "cdc.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -39,7 +39,7 @@ // Set Line Control state on enumeration/mounted: DTR ( bit 0), RTS (bit 1) #ifndef CFG_TUH_CDC_LINE_CONTROL_ON_ENUM -#define CFG_TUH_CDC_LINE_CONTROL_ON_ENUM 0 +#define CFG_TUH_CDC_LINE_CONTROL_ON_ENUM 0 #endif // Set Line Coding on enumeration/mounted, value for cdc_line_coding_t @@ -54,7 +54,7 @@ // RX Endpoint size #ifndef CFG_TUH_CDC_RX_EPSIZE -#define CFG_TUH_CDC_RX_EPSIZE USBH_EPSIZE_BULK_MAX +#define CFG_TUH_CDC_RX_EPSIZE USBH_EPSIZE_BULK_MAX #endif // TX FIFO size @@ -64,7 +64,7 @@ // TX Endpoint size #ifndef CFG_TUH_CDC_TX_EPSIZE -#define CFG_TUH_CDC_TX_EPSIZE USBH_EPSIZE_BULK_MAX +#define CFG_TUH_CDC_TX_EPSIZE USBH_EPSIZE_BULK_MAX #endif //--------------------------------------------------------------------+ @@ -77,7 +77,7 @@ uint8_t tuh_cdc_itf_get_index(uint8_t daddr, uint8_t itf_num); // Get Interface information // return true if index is correct and interface is currently mounted -bool tuh_cdc_itf_get_info(uint8_t idx, tuh_itf_info_t* info); +bool tuh_cdc_itf_get_info(uint8_t idx, tuh_itf_info_t *info); // Check if a interface is mounted bool tuh_cdc_mounted(uint8_t idx); @@ -91,14 +91,14 @@ bool tuh_cdc_get_rts(uint8_t idx); // Check if interface is connected (DTR active) TU_ATTR_ALWAYS_INLINE static inline bool tuh_cdc_connected(uint8_t idx) { - return tuh_cdc_get_dtr(idx); + return tuh_cdc_get_dtr(idx); } // Get local (saved/cached) version of line coding. // This function should return correct values if tuh_cdc_set_line_coding() / tuh_cdc_get_line_coding() // are invoked previously or CFG_TUH_CDC_LINE_CODING_ON_ENUM is defined. // NOTE: This function does not make any USB transfer request to device. -bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t* line_coding); +bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t *line_coding); //--------------------------------------------------------------------+ // Write API @@ -108,7 +108,7 @@ bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t* line_coding); uint32_t tuh_cdc_write_available(uint8_t idx); // Write to cdc interface -uint32_t tuh_cdc_write(uint8_t idx, void const* buffer, uint32_t bufsize); +uint32_t tuh_cdc_write(uint8_t idx, void const *buffer, uint32_t bufsize); // Force sending data if possible, return number of forced bytes uint32_t tuh_cdc_write_flush(uint8_t idx); @@ -124,13 +124,13 @@ bool tuh_cdc_write_clear(uint8_t idx); uint32_t tuh_cdc_read_available(uint8_t idx); // Read from cdc interface -uint32_t tuh_cdc_read (uint8_t idx, void* buffer, uint32_t bufsize); +uint32_t tuh_cdc_read(uint8_t idx, void *buffer, uint32_t bufsize); // Get a byte from RX FIFO without removing it -bool tuh_cdc_peek(uint8_t idx, uint8_t* ch); +bool tuh_cdc_peek(uint8_t idx, uint8_t *ch); // Clear the received FIFO -bool tuh_cdc_read_clear (uint8_t idx); +bool tuh_cdc_read_clear(uint8_t idx); //--------------------------------------------------------------------+ // Control Endpoint (Request) API @@ -143,17 +143,21 @@ bool tuh_cdc_read_clear (uint8_t idx); //--------------------------------------------------------------------+ // Request to Set Control Line State: DTR (bit 0), RTS (bit 1) -bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_cb_t complete_cb, + uintptr_t user_data); // Request to set baudrate -bool tuh_cdc_set_baudrate(uint8_t idx, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +bool tuh_cdc_set_baudrate(uint8_t idx, uint32_t baudrate, tuh_xfer_cb_t complete_cb, + uintptr_t user_data); // Request to set data format -bool tuh_cdc_set_data_format(uint8_t idx, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +bool tuh_cdc_set_data_format(uint8_t idx, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Request to Set Line Coding = baudrate + data format // Note: only implemented by ACM and CH34x, not supported by FTDI and CP210x yet -bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const *line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Request to Get Line Coding (ACM only) // Should only use if tuh_cdc_set_line_coding() / tuh_cdc_get_line_coding() never got invoked and @@ -161,15 +165,18 @@ bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const* line_coding, // bool tuh_cdc_get_line_coding(uint8_t idx, cdc_line_coding_t* coding); // Connect by set both DTR, RTS -TU_ATTR_ALWAYS_INLINE static inline -bool tuh_cdc_connect(uint8_t idx, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - return tuh_cdc_set_control_line_state(idx, CDC_CONTROL_LINE_STATE_DTR | CDC_CONTROL_LINE_STATE_RTS, complete_cb, user_data); +TU_ATTR_ALWAYS_INLINE static inline bool tuh_cdc_connect(uint8_t idx, tuh_xfer_cb_t complete_cb, + uintptr_t user_data) +{ + return tuh_cdc_set_control_line_state( + idx, CDC_CONTROL_LINE_STATE_DTR | CDC_CONTROL_LINE_STATE_RTS, complete_cb, user_data); } // Disconnect by clear both DTR, RTS -TU_ATTR_ALWAYS_INLINE static inline -bool tuh_cdc_disconnect(uint8_t idx, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - return tuh_cdc_set_control_line_state(idx, 0x00, complete_cb, user_data); +TU_ATTR_ALWAYS_INLINE static inline bool tuh_cdc_disconnect(uint8_t idx, tuh_xfer_cb_t complete_cb, + uintptr_t user_data) +{ + return tuh_cdc_set_control_line_state(idx, 0x00, complete_cb, user_data); } //--------------------------------------------------------------------+ @@ -192,15 +199,16 @@ TU_ATTR_WEAK extern void tuh_cdc_tx_complete_cb(uint8_t idx); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -bool cdch_init (void); -bool cdch_deinit (void); -bool cdch_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool cdch_set_config (uint8_t dev_addr, uint8_t itf_num); -bool cdch_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); -void cdch_close (uint8_t dev_addr); +bool cdch_init(void); +bool cdch_deinit(void); +bool cdch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, + uint16_t max_len); +bool cdch_set_config(uint8_t dev_addr, uint8_t itf_num); +bool cdch_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +void cdch_close(uint8_t dev_addr); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CDC_HOST_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/cdc_rndis.h b/Libraries/tinyusb/src/class/cdc/cdc_rndis.h index ad153e0ace7..c3a3eddc36b 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_rndis.h +++ b/Libraries/tinyusb/src/class/cdc/cdc_rndis.h @@ -36,7 +36,7 @@ #include "cdc.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif #ifdef __CC_ARM @@ -44,40 +44,43 @@ #endif /// RNDIS Message Types -typedef enum -{ - RNDIS_MSG_PACKET = 0x00000001UL, ///< The host and device use this to send network data to one another. +typedef enum { + RNDIS_MSG_PACKET = + 0x00000001UL, ///< The host and device use this to send network data to one another. - RNDIS_MSG_INITIALIZE = 0x00000002UL, ///< Sent by the host to initialize the device. - RNDIS_MSG_INITIALIZE_CMPLT = 0x80000002UL, ///< Device response to an initialize message. + RNDIS_MSG_INITIALIZE = 0x00000002UL, ///< Sent by the host to initialize the device. + RNDIS_MSG_INITIALIZE_CMPLT = 0x80000002UL, ///< Device response to an initialize message. - RNDIS_MSG_HALT = 0x00000003UL, ///< Sent by the host to halt the device. This does not have a response. It is optional for the device to send this message to the host. + RNDIS_MSG_HALT = + 0x00000003UL, ///< Sent by the host to halt the device. This does not have a response. It is optional for the device to send this message to the host. - RNDIS_MSG_QUERY = 0x00000004UL, ///< Sent by the host to send a query OID. - RNDIS_MSG_QUERY_CMPLT = 0x80000004UL, ///< Device response to a query OID. + RNDIS_MSG_QUERY = 0x00000004UL, ///< Sent by the host to send a query OID. + RNDIS_MSG_QUERY_CMPLT = 0x80000004UL, ///< Device response to a query OID. - RNDIS_MSG_SET = 0x00000005UL, ///< Sent by the host to send a set OID. - RNDIS_MSG_SET_CMPLT = 0x80000005UL, ///< Device response to a set OID. + RNDIS_MSG_SET = 0x00000005UL, ///< Sent by the host to send a set OID. + RNDIS_MSG_SET_CMPLT = 0x80000005UL, ///< Device response to a set OID. - RNDIS_MSG_RESET = 0x00000006UL, ///< Sent by the host to perform a soft reset on the device. - RNDIS_MSG_RESET_CMPLT = 0x80000006UL, ///< Device response to reset message. + RNDIS_MSG_RESET = 0x00000006UL, ///< Sent by the host to perform a soft reset on the device. + RNDIS_MSG_RESET_CMPLT = 0x80000006UL, ///< Device response to reset message. - RNDIS_MSG_INDICATE_STATUS = 0x00000007UL, ///< Sent by the device to indicate its status or an error when an unrecognized message is received. + RNDIS_MSG_INDICATE_STATUS = + 0x00000007UL, ///< Sent by the device to indicate its status or an error when an unrecognized message is received. - RNDIS_MSG_KEEP_ALIVE = 0x00000008UL, ///< During idle periods, sent every few seconds by the host to check that the device is still responsive. It is optional for the device to send this message to check if the host is active. - RNDIS_MSG_KEEP_ALIVE_CMPLT = 0x80000008UL ///< The device response to a keepalivemessage. The host can respond with this message to a keepalive message from the device when the device implements the optional KeepAliveTimer. -}rndis_msg_type_t; + RNDIS_MSG_KEEP_ALIVE = + 0x00000008UL, ///< During idle periods, sent every few seconds by the host to check that the device is still responsive. It is optional for the device to send this message to check if the host is active. + RNDIS_MSG_KEEP_ALIVE_CMPLT = + 0x80000008UL ///< The device response to a keepalivemessage. The host can respond with this message to a keepalive message from the device when the device implements the optional KeepAliveTimer. +} rndis_msg_type_t; /// RNDIS Message Status Values -typedef enum -{ - RNDIS_STATUS_SUCCESS = 0x00000000UL, ///< Success - RNDIS_STATUS_FAILURE = 0xC0000001UL, ///< Unspecified error - RNDIS_STATUS_INVALID_DATA = 0xC0010015UL, ///< Invalid data error - RNDIS_STATUS_NOT_SUPPORTED = 0xC00000BBUL, ///< Unsupported request error - RNDIS_STATUS_MEDIA_CONNECT = 0x4001000BUL, ///< Device is connected to a network medium. - RNDIS_STATUS_MEDIA_DISCONNECT = 0x4001000CUL ///< Device is disconnected from the medium. -}rndis_msg_status_t; +typedef enum { + RNDIS_STATUS_SUCCESS = 0x00000000UL, ///< Success + RNDIS_STATUS_FAILURE = 0xC0000001UL, ///< Unspecified error + RNDIS_STATUS_INVALID_DATA = 0xC0010015UL, ///< Invalid data error + RNDIS_STATUS_NOT_SUPPORTED = 0xC00000BBUL, ///< Unsupported request error + RNDIS_STATUS_MEDIA_CONNECT = 0x4001000BUL, ///< Device is connected to a network medium. + RNDIS_STATUS_MEDIA_DISCONNECT = 0x4001000CUL ///< Device is disconnected from the medium. +} rndis_msg_status_t; #ifdef __CC_ARM #pragma diag_default 66 // return Keil 66 to normal severity @@ -91,77 +94,98 @@ typedef enum /// \brief Initialize Message /// \details This message MUST be sent by the host to initialize the device. typedef struct { - uint32_t type ; ///< Message type, must be \ref RNDIS_MSG_INITIALIZE - uint32_t length ; ///< Message length in bytes, must be 0x18 - uint32_t request_id ; ///< A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. - uint32_t major_version ; ///< The major version of the RNDIS Protocol implemented by the host. - uint32_t minor_version ; ///< The minor version of the RNDIS Protocol implemented by the host - uint32_t max_xfer_size ; ///< The maximum size, in bytes, of any single bus data transfer that the host expects to receive from the device. -}rndis_msg_initialize_t; + uint32_t type; ///< Message type, must be \ref RNDIS_MSG_INITIALIZE + uint32_t length; ///< Message length in bytes, must be 0x18 + uint32_t + request_id; ///< A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. + uint32_t major_version; ///< The major version of the RNDIS Protocol implemented by the host. + uint32_t minor_version; ///< The minor version of the RNDIS Protocol implemented by the host + uint32_t + max_xfer_size; ///< The maximum size, in bytes, of any single bus data transfer that the host expects to receive from the device. +} rndis_msg_initialize_t; /// \brief Initialize Complete Message /// \details This message MUST be sent by the device in response to an initialize message. typedef struct { - uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_INITIALIZE_CMPLT - uint32_t length ; ///< Message length in bytes, must be 0x30 - uint32_t request_id ; ///< A 32-bit integer value from \a request_id field of the \ref rndis_msg_initialize_t to which this message is a response. - uint32_t status ; ///< The initialization status of the device, has value from \ref rndis_msg_status_t - uint32_t major_version ; ///< the highest-numbered RNDIS Protocol version supported by the device. - uint32_t minor_version ; ///< the highest-numbered RNDIS Protocol version supported by the device. - uint32_t device_flags ; ///< MUST be set to 0x000000010. Other values are reserved for future use. - uint32_t medium ; ///< is 0x00 for RNDIS_MEDIUM_802_3 - uint32_t max_packet_per_xfer ; ///< The maximum number of concatenated \ref RNDIS_MSG_PACKET messages that the device can handle in a single bus transfer to it. This value MUST be at least 1. - uint32_t max_xfer_size ; ///< The maximum size, in bytes, of any single bus data transfer that the device expects to receive from the host. - uint32_t packet_alignment_factor ; ///< The byte alignment the device expects for each RNDIS message that is part of a multimessage transfer to it. The value is specified as an exponent of 2; for example, the host uses 2{PacketAlignmentFactor} as the alignment value. - uint32_t reserved[2] ; + uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_INITIALIZE_CMPLT + uint32_t length; ///< Message length in bytes, must be 0x30 + uint32_t + request_id; ///< A 32-bit integer value from \a request_id field of the \ref rndis_msg_initialize_t to which this message is a response. + uint32_t + status; ///< The initialization status of the device, has value from \ref rndis_msg_status_t + uint32_t major_version; ///< the highest-numbered RNDIS Protocol version supported by the device. + uint32_t minor_version; ///< the highest-numbered RNDIS Protocol version supported by the device. + uint32_t device_flags; ///< MUST be set to 0x000000010. Other values are reserved for future use. + uint32_t medium; ///< is 0x00 for RNDIS_MEDIUM_802_3 + uint32_t + max_packet_per_xfer; ///< The maximum number of concatenated \ref RNDIS_MSG_PACKET messages that the device can handle in a single bus transfer to it. This value MUST be at least 1. + uint32_t + max_xfer_size; ///< The maximum size, in bytes, of any single bus data transfer that the device expects to receive from the host. + uint32_t + packet_alignment_factor; ///< The byte alignment the device expects for each RNDIS message that is part of a multimessage transfer to it. The value is specified as an exponent of 2; for example, the host uses 2{PacketAlignmentFactor} as the alignment value. + uint32_t reserved[2]; } rndis_msg_initialize_cmplt_t; //------------- Query -------------// /// \brief Query Message /// \details This message MUST be sent by the host to query an OID. typedef struct { - uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_QUERY - uint32_t length ; ///< Message length in bytes, including the header and the \a oid_buffer - uint32_t request_id ; ///< A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. - uint32_t oid ; ///< The integer value of the host operating system-defined identifier, for the parameter of the device being queried for. - uint32_t buffer_length ; ///< The length, in bytes, of the input data required for the OID query. This MUST be set to 0 when there is no input data associated with the OID. - uint32_t buffer_offset ; ///< The offset, in bytes, from the beginning of \a request_id field where the input data for the query is located in the message. This value MUST be set to 0 when there is no input data associated with the OID. - uint32_t reserved ; - uint8_t oid_buffer[] ; ///< Flexible array contains the input data supplied by the host, required for the OID query request processing by the device, as per the host NDIS specification. + uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_QUERY + uint32_t length; ///< Message length in bytes, including the header and the \a oid_buffer + uint32_t + request_id; ///< A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. + uint32_t + oid; ///< The integer value of the host operating system-defined identifier, for the parameter of the device being queried for. + uint32_t + buffer_length; ///< The length, in bytes, of the input data required for the OID query. This MUST be set to 0 when there is no input data associated with the OID. + uint32_t + buffer_offset; ///< The offset, in bytes, from the beginning of \a request_id field where the input data for the query is located in the message. This value MUST be set to 0 when there is no input data associated with the OID. + uint32_t reserved; + uint8_t oid_buffer + []; ///< Flexible array contains the input data supplied by the host, required for the OID query request processing by the device, as per the host NDIS specification. } rndis_msg_query_t, rndis_msg_set_t; -TU_VERIFY_STATIC(sizeof(rndis_msg_query_t) == 28, "Make sure flexible array member does not affect layout"); +TU_VERIFY_STATIC(sizeof(rndis_msg_query_t) == 28, + "Make sure flexible array member does not affect layout"); /// \brief Query Complete Message /// \details This message MUST be sent by the device in response to a query OID message. typedef struct { - uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_QUERY_CMPLT - uint32_t length ; ///< Message length in bytes, including the header and the \a oid_buffer - uint32_t request_id ; ///< A 32-bit integer value from \a request_id field of the \ref rndis_msg_query_t to which this message is a response. - uint32_t status ; ///< The status of processing for the query request, has value from \ref rndis_msg_status_t. - uint32_t buffer_length ; ///< The length, in bytes, of the data in the response to the query. This MUST be set to 0 when there is no OIDInputBuffer. - uint32_t buffer_offset ; ///< The offset, in bytes, from the beginning of \a request_id field where the response data for the query is located in the message. This MUST be set to 0 when there is no \ref oid_buffer. - uint8_t oid_buffer[] ; ///< Flexible array member contains the response data to the OID query request as specified by the host. + uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_QUERY_CMPLT + uint32_t length; ///< Message length in bytes, including the header and the \a oid_buffer + uint32_t + request_id; ///< A 32-bit integer value from \a request_id field of the \ref rndis_msg_query_t to which this message is a response. + uint32_t + status; ///< The status of processing for the query request, has value from \ref rndis_msg_status_t. + uint32_t + buffer_length; ///< The length, in bytes, of the data in the response to the query. This MUST be set to 0 when there is no OIDInputBuffer. + uint32_t + buffer_offset; ///< The offset, in bytes, from the beginning of \a request_id field where the response data for the query is located in the message. This MUST be set to 0 when there is no \ref oid_buffer. + uint8_t oid_buffer + []; ///< Flexible array member contains the response data to the OID query request as specified by the host. } rndis_msg_query_cmplt_t; -TU_VERIFY_STATIC(sizeof(rndis_msg_query_cmplt_t) == 24, "Make sure flexible array member does not affect layout"); +TU_VERIFY_STATIC(sizeof(rndis_msg_query_cmplt_t) == 24, + "Make sure flexible array member does not affect layout"); //------------- Reset -------------// /// \brief Reset Message /// \details This message MUST be sent by the host to perform a soft reset on the device. typedef struct { - uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_RESET - uint32_t length ; ///< Message length in bytes, MUST be 0x06 - uint32_t reserved ; + uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_RESET + uint32_t length; ///< Message length in bytes, MUST be 0x06 + uint32_t reserved; } rndis_msg_reset_t; /// \brief Reset Complete Message /// \details This message MUST be sent by the device in response to a reset message. typedef struct { - uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_RESET_CMPLT - uint32_t length ; ///< Message length in bytes, MUST be 0x10 - uint32_t status ; ///< The status of processing for the \ref rndis_msg_reset_t, has value from \ref rndis_msg_status_t. - uint32_t addressing_reset ; ///< This field indicates whether the addressing information, which is the multicast address list or packet filter, has been lost during the reset operation. This MUST be set to 0x00000001 if the device requires that the host to resend addressing information or MUST be set to zero otherwise. + uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_RESET_CMPLT + uint32_t length; ///< Message length in bytes, MUST be 0x10 + uint32_t + status; ///< The status of processing for the \ref rndis_msg_reset_t, has value from \ref rndis_msg_status_t. + uint32_t + addressing_reset; ///< This field indicates whether the addressing information, which is the multicast address list or packet filter, has been lost during the reset operation. This MUST be set to 0x00000001 if the device requires that the host to resend addressing information or MUST be set to zero otherwise. } rndis_msg_reset_cmplt_t; //typedef struct { @@ -178,54 +202,62 @@ typedef struct { /// \brief Keep Alive Message /// \details This message MUST be sent by the host to check that device is still responsive. It is optional for the device to send this message to check if the host is active typedef struct { - uint32_t type ; ///< Message Type - uint32_t length ; ///< Message length in bytes, MUST be 0x10 - uint32_t request_id ; + uint32_t type; ///< Message Type + uint32_t length; ///< Message length in bytes, MUST be 0x10 + uint32_t request_id; } rndis_msg_keep_alive_t, rndis_msg_halt_t; /// \brief Set Complete Message /// \brief This message MUST be sent in response to a the request message typedef struct { - uint32_t type ; ///< Message Type - uint32_t length ; ///< Message length in bytes, MUST be 0x10 - uint32_t request_id ; ///< must be the same as requesting message - uint32_t status ; ///< The status of processing for the request message request by the device to which this message is the response. + uint32_t type; ///< Message Type + uint32_t length; ///< Message length in bytes, MUST be 0x10 + uint32_t request_id; ///< must be the same as requesting message + uint32_t + status; ///< The status of processing for the request message request by the device to which this message is the response. } rndis_msg_set_cmplt_t, rndis_msg_keep_alive_cmplt_t; /// \brief Packet Data Message /// \brief This message MUST be used by the host and the device to send network data to one another. typedef struct { - uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_PACKET - uint32_t length ; ///< Message length in bytes, The total length of this RNDIS message including the header, payload, and padding. - uint32_t data_offset ; ///< Specifies the offset, in bytes, from the start of this \a data_offset field of this message to the start of the data. This MUST be an integer multiple of 4. - uint32_t data_length ; ///< Specifies the number of bytes in the payload of this message. - uint32_t out_of_band_data_offet ; ///< Specifies the offset, in bytes, of the first out-of-band data record from the start of the DataOffset field in this message. MUST be an integer multiple of 4 when out-of-band data is present or set to 0 otherwise. When there are multiple out-ofband data records, each subsequent record MUST immediately follow the previous out-of-band data record. - uint32_t out_of_band_data_length ; ///< Specifies, in bytes, the total length of the out-of-band data. - uint32_t num_out_of_band_data_elements ; ///< Specifies the number of out-of-band records in this message. - uint32_t per_packet_info_offset ; ///< Specifies the offset, in bytes, of the start of per-packet-info data record from the start of the \a data_offset field in this message. MUST be an integer multiple of 4 when per-packet-info data record is present or MUST be set to 0 otherwise. When there are multiple per-packet-info data records, each subsequent record MUST immediately follow the previous record. - uint32_t per_packet_info_length ; ///< Specifies, in bytes, the total length of per-packetinformation contained in this message. - uint32_t reserved[2] ; - uint32_t payload[0] ; ///< Network data contained in this message. - - // uint8_t padding[0] - // Additional bytes of zeros added at the end of the message to comply with - // the internal and external padding requirements. Internal padding SHOULD be as per the - // specification of the out-of-band data record and per-packet-info data record. The external - //padding size SHOULD be determined based on the PacketAlignmentFactor field specification - //in REMOTE_NDIS_INITIALIZE_CMPLT message by the device, when multiple - //REMOTE_NDIS_PACKET_MSG messages are bundled together in a single bus-native message. - //In this case, all but the very last REMOTE_NDIS_PACKET_MSG MUST respect the - //PacketAlignmentFactor field. - - // rndis_msg_packet_t [0] : (optional) more packet if multiple packet per bus transaction is supported + uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_PACKET + uint32_t + length; ///< Message length in bytes, The total length of this RNDIS message including the header, payload, and padding. + uint32_t + data_offset; ///< Specifies the offset, in bytes, from the start of this \a data_offset field of this message to the start of the data. This MUST be an integer multiple of 4. + uint32_t data_length; ///< Specifies the number of bytes in the payload of this message. + uint32_t + out_of_band_data_offet; ///< Specifies the offset, in bytes, of the first out-of-band data record from the start of the DataOffset field in this message. MUST be an integer multiple of 4 when out-of-band data is present or set to 0 otherwise. When there are multiple out-ofband data records, each subsequent record MUST immediately follow the previous out-of-band data record. + uint32_t + out_of_band_data_length; ///< Specifies, in bytes, the total length of the out-of-band data. + uint32_t + num_out_of_band_data_elements; ///< Specifies the number of out-of-band records in this message. + uint32_t + per_packet_info_offset; ///< Specifies the offset, in bytes, of the start of per-packet-info data record from the start of the \a data_offset field in this message. MUST be an integer multiple of 4 when per-packet-info data record is present or MUST be set to 0 otherwise. When there are multiple per-packet-info data records, each subsequent record MUST immediately follow the previous record. + uint32_t + per_packet_info_length; ///< Specifies, in bytes, the total length of per-packetinformation contained in this message. + uint32_t reserved[2]; + uint32_t payload[0]; ///< Network data contained in this message. + + // uint8_t padding[0] + // Additional bytes of zeros added at the end of the message to comply with + // the internal and external padding requirements. Internal padding SHOULD be as per the + // specification of the out-of-band data record and per-packet-info data record. The external + //padding size SHOULD be determined based on the PacketAlignmentFactor field specification + //in REMOTE_NDIS_INITIALIZE_CMPLT message by the device, when multiple + //REMOTE_NDIS_PACKET_MSG messages are bundled together in a single bus-native message. + //In this case, all but the very last REMOTE_NDIS_PACKET_MSG MUST respect the + //PacketAlignmentFactor field. + + // rndis_msg_packet_t [0] : (optional) more packet if multiple packet per bus transaction is supported } rndis_msg_packet_t; - typedef struct { - uint32_t size ; ///< Length, in bytes, of this header and appended data and padding. This value MUST be an integer multiple of 4. - uint32_t type ; ///< MUST be as per host operating system specification. - uint32_t offset ; ///< The byte offset from the beginning of this record to the beginning of data. - uint32_t data[0] ; ///< Flexible array contains data + uint32_t + size; ///< Length, in bytes, of this header and appended data and padding. This value MUST be an integer multiple of 4. + uint32_t type; ///< MUST be as per host operating system specification. + uint32_t offset; ///< The byte offset from the beginning of this record to the beginning of data. + uint32_t data[0]; ///< Flexible array contains data } rndis_msg_out_of_band_data_t, rndis_msg_per_packet_info_t; //--------------------------------------------------------------------+ @@ -233,66 +265,80 @@ typedef struct { //--------------------------------------------------------------------+ /// NDIS Object ID -typedef enum -{ - //------------- General Required OIDs -------------// - RNDIS_OID_GEN_SUPPORTED_LIST = 0x00010101, ///< List of supported OIDs - RNDIS_OID_GEN_HARDWARE_STATUS = 0x00010102, ///< Hardware status - RNDIS_OID_GEN_MEDIA_SUPPORTED = 0x00010103, ///< Media types supported (encoded) - RNDIS_OID_GEN_MEDIA_IN_USE = 0x00010104, ///< Media types in use (encoded) - RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD = 0x00010105, ///< - RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE = 0x00010106, ///< Maximum frame size in bytes - RNDIS_OID_GEN_LINK_SPEED = 0x00010107, ///< Link speed in units of 100 bps - RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE = 0x00010108, ///< Transmit buffer space - RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE = 0x00010109, ///< Receive buffer space - RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE = 0x0001010A, ///< Minimum amount of storage, in bytes, that a single packet occupies in the transmit buffer space of the NIC - RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE = 0x0001010B, ///< Amount of storage, in bytes, that a single packet occupies in the receive buffer space of the NIC - RNDIS_OID_GEN_VENDOR_ID = 0x0001010C, ///< Vendor NIC code - RNDIS_OID_GEN_VENDOR_DESCRIPTION = 0x0001010D, ///< Vendor network card description - RNDIS_OID_GEN_CURRENT_PACKET_FILTER = 0x0001010E, ///< Current packet filter (encoded) - RNDIS_OID_GEN_CURRENT_LOOKAHEAD = 0x0001010F, ///< Current lookahead size in bytes - RNDIS_OID_GEN_DRIVER_VERSION = 0x00010110, ///< NDIS version number used by the driver - RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE = 0x00010111, ///< Maximum total packet length in bytes - RNDIS_OID_GEN_PROTOCOL_OPTIONS = 0x00010112, ///< Optional protocol flags (encoded) - RNDIS_OID_GEN_MAC_OPTIONS = 0x00010113, ///< Optional NIC flags (encoded) - RNDIS_OID_GEN_MEDIA_CONNECT_STATUS = 0x00010114, ///< Whether the NIC is connected to the network - RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS = 0x00010115, ///< The maximum number of send packets the driver can accept per call to its MiniportSendPacketsfunction - - //------------- General Optional OIDs -------------// - RNDIS_OID_GEN_VENDOR_DRIVER_VERSION = 0x00010116, ///< Vendor-assigned version number of the driver - RNDIS_OID_GEN_SUPPORTED_GUIDS = 0x00010117, ///< The custom GUIDs (Globally Unique Identifier) supported by the miniport driver - RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES = 0x00010118, ///< List of network-layer addresses associated with the binding between a transport and the driver - RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET = 0x00010119, ///< Size of packets' additional headers - RNDIS_OID_GEN_MEDIA_CAPABILITIES = 0x00010201, ///< - RNDIS_OID_GEN_PHYSICAL_MEDIUM = 0x00010202, ///< Physical media supported by the miniport driver (encoded) - - //------------- 802.3 Objects (Ethernet) -------------// - RNDIS_OID_802_3_PERMANENT_ADDRESS = 0x01010101, ///< Permanent station address - RNDIS_OID_802_3_CURRENT_ADDRESS = 0x01010102, ///< Current station address - RNDIS_OID_802_3_MULTICAST_LIST = 0x01010103, ///< Current multicast address list - RNDIS_OID_802_3_MAXIMUM_LIST_SIZE = 0x01010104, ///< Maximum size of multicast address list +typedef enum { + //------------- General Required OIDs -------------// + RNDIS_OID_GEN_SUPPORTED_LIST = 0x00010101, ///< List of supported OIDs + RNDIS_OID_GEN_HARDWARE_STATUS = 0x00010102, ///< Hardware status + RNDIS_OID_GEN_MEDIA_SUPPORTED = 0x00010103, ///< Media types supported (encoded) + RNDIS_OID_GEN_MEDIA_IN_USE = 0x00010104, ///< Media types in use (encoded) + RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD = 0x00010105, ///< + RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE = 0x00010106, ///< Maximum frame size in bytes + RNDIS_OID_GEN_LINK_SPEED = 0x00010107, ///< Link speed in units of 100 bps + RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE = 0x00010108, ///< Transmit buffer space + RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE = 0x00010109, ///< Receive buffer space + RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE = + 0x0001010A, ///< Minimum amount of storage, in bytes, that a single packet occupies in the transmit buffer space of the NIC + RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE = + 0x0001010B, ///< Amount of storage, in bytes, that a single packet occupies in the receive buffer space of the NIC + RNDIS_OID_GEN_VENDOR_ID = 0x0001010C, ///< Vendor NIC code + RNDIS_OID_GEN_VENDOR_DESCRIPTION = 0x0001010D, ///< Vendor network card description + RNDIS_OID_GEN_CURRENT_PACKET_FILTER = 0x0001010E, ///< Current packet filter (encoded) + RNDIS_OID_GEN_CURRENT_LOOKAHEAD = 0x0001010F, ///< Current lookahead size in bytes + RNDIS_OID_GEN_DRIVER_VERSION = 0x00010110, ///< NDIS version number used by the driver + RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE = 0x00010111, ///< Maximum total packet length in bytes + RNDIS_OID_GEN_PROTOCOL_OPTIONS = 0x00010112, ///< Optional protocol flags (encoded) + RNDIS_OID_GEN_MAC_OPTIONS = 0x00010113, ///< Optional NIC flags (encoded) + RNDIS_OID_GEN_MEDIA_CONNECT_STATUS = + 0x00010114, ///< Whether the NIC is connected to the network + RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS = + 0x00010115, ///< The maximum number of send packets the driver can accept per call to its MiniportSendPacketsfunction + + //------------- General Optional OIDs -------------// + RNDIS_OID_GEN_VENDOR_DRIVER_VERSION = + 0x00010116, ///< Vendor-assigned version number of the driver + RNDIS_OID_GEN_SUPPORTED_GUIDS = + 0x00010117, ///< The custom GUIDs (Globally Unique Identifier) supported by the miniport driver + RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES = + 0x00010118, ///< List of network-layer addresses associated with the binding between a transport and the driver + RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET = 0x00010119, ///< Size of packets' additional headers + RNDIS_OID_GEN_MEDIA_CAPABILITIES = 0x00010201, ///< + RNDIS_OID_GEN_PHYSICAL_MEDIUM = + 0x00010202, ///< Physical media supported by the miniport driver (encoded) + + //------------- 802.3 Objects (Ethernet) -------------// + RNDIS_OID_802_3_PERMANENT_ADDRESS = 0x01010101, ///< Permanent station address + RNDIS_OID_802_3_CURRENT_ADDRESS = 0x01010102, ///< Current station address + RNDIS_OID_802_3_MULTICAST_LIST = 0x01010103, ///< Current multicast address list + RNDIS_OID_802_3_MAXIMUM_LIST_SIZE = 0x01010104, ///< Maximum size of multicast address list } rndis_oid_type_t; /// RNDIS Packet Filter Bits \ref RNDIS_OID_GEN_CURRENT_PACKET_FILTER. -typedef enum -{ - RNDIS_PACKET_TYPE_DIRECTED = 0x00000001, ///< Directed packets. Directed packets contain a destination address equal to the station address of the NIC. - RNDIS_PACKET_TYPE_MULTICAST = 0x00000002, ///< Multicast address packets sent to addresses in the multicast address list. - RNDIS_PACKET_TYPE_ALL_MULTICAST = 0x00000004, ///< All multicast address packets, not just the ones enumerated in the multicast address list. - RNDIS_PACKET_TYPE_BROADCAST = 0x00000008, ///< Broadcast packets. - RNDIS_PACKET_TYPE_SOURCE_ROUTING = 0x00000010, ///< All source routing packets. If the protocol driver sets this bit, the NDIS library attempts to act as a source routing bridge. - RNDIS_PACKET_TYPE_PROMISCUOUS = 0x00000020, ///< Specifies all packets regardless of whether VLAN filtering is enabled or not and whether the VLAN identifier matches or not. - RNDIS_PACKET_TYPE_SMT = 0x00000040, ///< SMT packets that an FDDI NIC receives. - RNDIS_PACKET_TYPE_ALL_LOCAL = 0x00000080, ///< All packets sent by installed protocols and all packets indicated by the NIC that is identified by a given NdisBindingHandle. - RNDIS_PACKET_TYPE_GROUP = 0x00001000, ///< Packets sent to the current group address. - RNDIS_PACKET_TYPE_ALL_FUNCTIONAL = 0x00002000, ///< All functional address packets, not just the ones in the current functional address. - RNDIS_PACKET_TYPE_FUNCTIONAL = 0x00004000, ///< Functional address packets sent to addresses included in the current functional address. - RNDIS_PACKET_TYPE_MAC_FRAME = 0x00008000, ///< NIC driver frames that a Token Ring NIC receives. - RNDIS_PACKET_TYPE_NO_LOCAL = 0x00010000, +typedef enum { + RNDIS_PACKET_TYPE_DIRECTED = + 0x00000001, ///< Directed packets. Directed packets contain a destination address equal to the station address of the NIC. + RNDIS_PACKET_TYPE_MULTICAST = + 0x00000002, ///< Multicast address packets sent to addresses in the multicast address list. + RNDIS_PACKET_TYPE_ALL_MULTICAST = + 0x00000004, ///< All multicast address packets, not just the ones enumerated in the multicast address list. + RNDIS_PACKET_TYPE_BROADCAST = 0x00000008, ///< Broadcast packets. + RNDIS_PACKET_TYPE_SOURCE_ROUTING = + 0x00000010, ///< All source routing packets. If the protocol driver sets this bit, the NDIS library attempts to act as a source routing bridge. + RNDIS_PACKET_TYPE_PROMISCUOUS = + 0x00000020, ///< Specifies all packets regardless of whether VLAN filtering is enabled or not and whether the VLAN identifier matches or not. + RNDIS_PACKET_TYPE_SMT = 0x00000040, ///< SMT packets that an FDDI NIC receives. + RNDIS_PACKET_TYPE_ALL_LOCAL = + 0x00000080, ///< All packets sent by installed protocols and all packets indicated by the NIC that is identified by a given NdisBindingHandle. + RNDIS_PACKET_TYPE_GROUP = 0x00001000, ///< Packets sent to the current group address. + RNDIS_PACKET_TYPE_ALL_FUNCTIONAL = + 0x00002000, ///< All functional address packets, not just the ones in the current functional address. + RNDIS_PACKET_TYPE_FUNCTIONAL = + 0x00004000, ///< Functional address packets sent to addresses included in the current functional address. + RNDIS_PACKET_TYPE_MAC_FRAME = 0x00008000, ///< NIC driver frames that a Token Ring NIC receives. + RNDIS_PACKET_TYPE_NO_LOCAL = 0x00010000, } rndis_packet_filter_type_t; #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CDC_RNDIS_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.c b/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.c index 11a5355aa2e..a27a1ac2562 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.c +++ b/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.c @@ -35,20 +35,20 @@ #include "cdc_host.h" #include "cdc_rndis_host.h" -#if 0 // TODO remove subtask related macros later +#if 0 // TODO remove subtask related macros later // Sub Task #define OSAL_SUBTASK_BEGIN -#define OSAL_SUBTASK_END return TUSB_ERROR_NONE; +#define OSAL_SUBTASK_END return TUSB_ERROR_NONE; -#define STASK_RETURN(_error) return _error; -#define STASK_INVOKE(_subtask, _status) (_status) = _subtask -#define STASK_ASSERT(_cond) TU_VERIFY(_cond, TUSB_ERROR_OSAL_TASK_FAILED) +#define STASK_RETURN(_error) return _error; +#define STASK_INVOKE(_subtask, _status) (_status) = _subtask +#define STASK_ASSERT(_cond) TU_VERIFY(_cond, TUSB_ERROR_OSAL_TASK_FAILED) #endif //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -#define RNDIS_MSG_PAYLOAD_MAX (1024*4) +#define RNDIS_MSG_PAYLOAD_MAX (1024 * 4) CFG_TUH_MEM_SECTION static uint8_t msg_notification[CFG_TUH_DEVICE_MAX][8]; CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN static uint8_t msg_payload[RNDIS_MSG_PAYLOAD_MAX]; @@ -61,21 +61,21 @@ static rndish_data_t rndish_data[CFG_TUH_DEVICE_MAX]; // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ static tusb_error_t rndis_body_subtask(void); -static tusb_error_t send_message_get_response_subtask( uint8_t dev_addr, cdch_data_t *p_cdc, - uint8_t * p_mess, uint32_t mess_length, - uint8_t *p_response ); +static tusb_error_t send_message_get_response_subtask(uint8_t dev_addr, cdch_data_t *p_cdc, + uint8_t *p_mess, uint32_t mess_length, + uint8_t *p_response); //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ tusb_error_t tusbh_cdc_rndis_get_mac_addr(uint8_t dev_addr, uint8_t mac_address[6]) { - TU_ASSERT( tusbh_cdc_rndis_is_mounted(dev_addr), TUSB_ERROR_CDCH_DEVICE_NOT_MOUNTED); - TU_VERIFY( mac_address, TUSB_ERROR_INVALID_PARA); + TU_ASSERT(tusbh_cdc_rndis_is_mounted(dev_addr), TUSB_ERROR_CDCH_DEVICE_NOT_MOUNTED); + TU_VERIFY(mac_address, TUSB_ERROR_INVALID_PARA); - memcpy(mac_address, rndish_data[dev_addr-1].mac_address, 6); + memcpy(mac_address, rndish_data[dev_addr - 1].mac_address, 6); - return TUSB_ERROR_NONE; + return TUSB_ERROR_NONE; } //--------------------------------------------------------------------+ @@ -85,27 +85,24 @@ tusb_error_t tusbh_cdc_rndis_get_mac_addr(uint8_t dev_addr, uint8_t mac_address[ // To enable the TASK_ASSERT style (quick return on false condition) in a real RTOS, a task must act as a wrapper // and is used mainly to call subtasks. Within a subtask return statement can be called freely, the task with // forever loop cannot have any return at all. -OSAL_TASK_FUNCTION(cdch_rndis_task) (void* param;) +OSAL_TASK_FUNCTION(cdch_rndis_task)(void *param;) { - OSAL_TASK_BEGIN - rndis_body_subtask(); - OSAL_TASK_END + OSAL_TASK_BEGIN + rndis_body_subtask(); + OSAL_TASK_END } static tusb_error_t rndis_body_subtask(void) { - static uint8_t relative_addr; + static uint8_t relative_addr; - OSAL_SUBTASK_BEGIN + OSAL_SUBTASK_BEGIN - for (relative_addr = 0; relative_addr < CFG_TUH_DEVICE_MAX; relative_addr++) - { + for (relative_addr = 0; relative_addr < CFG_TUH_DEVICE_MAX; relative_addr++) {} - } + osal_task_delay(100); - osal_task_delay(100); - - OSAL_SUBTASK_END + OSAL_SUBTASK_END } //--------------------------------------------------------------------+ @@ -113,157 +110,155 @@ static tusb_error_t rndis_body_subtask(void) //--------------------------------------------------------------------+ void rndish_init(void) { - tu_memclr(rndish_data, sizeof(rndish_data_t)*CFG_TUH_DEVICE_MAX); + tu_memclr(rndish_data, sizeof(rndish_data_t) * CFG_TUH_DEVICE_MAX); - //------------- Task creation -------------// + //------------- Task creation -------------// - //------------- semaphore creation for notification pipe -------------// - for(uint8_t i=0; itype == RNDIS_MSG_INITIALIZE_CMPLT && p_init_cmpt->status == RNDIS_STATUS_SUCCESS && - p_init_cmpt->max_packet_per_xfer == 1 && p_init_cmpt->max_xfer_size <= RNDIS_MSG_PAYLOAD_MAX); - rndish_data[dev_addr-1].max_xfer_size = p_init_cmpt->max_xfer_size; - - //------------- Message Query 802.3 Permanent Address -------------// - memcpy(msg_payload, &msg_query_permanent_addr, sizeof(rndis_msg_query_t)); - tu_memclr(msg_payload + sizeof(rndis_msg_query_t), 6); // 6 bytes for MAC address - - STASK_INVOKE( - send_message_get_response_subtask( dev_addr, p_cdc, - msg_payload, sizeof(rndis_msg_query_t) + 6, - msg_payload), - error - ); - if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); - - rndis_msg_query_cmplt_t * const p_query_cmpt = (rndis_msg_query_cmplt_t *) msg_payload; - STASK_ASSERT(p_query_cmpt->type == RNDIS_MSG_QUERY_CMPLT && p_query_cmpt->status == RNDIS_STATUS_SUCCESS); - memcpy(rndish_data[dev_addr-1].mac_address, msg_payload + 8 + p_query_cmpt->buffer_offset, 6); - - //------------- Set OID_GEN_CURRENT_PACKET_FILTER to (DIRECTED | MULTICAST | BROADCAST) -------------// - memcpy(msg_payload, &msg_set_packet_filter, sizeof(rndis_msg_set_t)); - tu_memclr(msg_payload + sizeof(rndis_msg_set_t), 4); // 4 bytes for filter flags - ((rndis_msg_set_t*) msg_payload)->oid_buffer[0] = (RNDIS_PACKET_TYPE_DIRECTED | RNDIS_PACKET_TYPE_MULTICAST | RNDIS_PACKET_TYPE_BROADCAST); - - STASK_INVOKE( - send_message_get_response_subtask( dev_addr, p_cdc, - msg_payload, sizeof(rndis_msg_set_t) + 4, - msg_payload), - error - ); - if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); - - rndis_msg_set_cmplt_t * const p_set_cmpt = (rndis_msg_set_cmplt_t *) msg_payload; - STASK_ASSERT(p_set_cmpt->type == RNDIS_MSG_SET_CMPLT && p_set_cmpt->status == RNDIS_STATUS_SUCCESS); - - tusbh_cdc_rndis_mounted_cb(dev_addr); - - OSAL_SUBTASK_END + tusb_error_t error; + + OSAL_SUBTASK_BEGIN + + //------------- Message Initialize -------------// + memcpy(msg_payload, &msg_init, sizeof(rndis_msg_initialize_t)); + STASK_INVOKE(send_message_get_response_subtask(dev_addr, p_cdc, msg_payload, + sizeof(rndis_msg_initialize_t), msg_payload), + error); + if (TUSB_ERROR_NONE != error) + STASK_RETURN(error); + + // TODO currently not support multiple data packets per xfer + rndis_msg_initialize_cmplt_t *const p_init_cmpt = (rndis_msg_initialize_cmplt_t *)msg_payload; + STASK_ASSERT(p_init_cmpt->type == RNDIS_MSG_INITIALIZE_CMPLT && + p_init_cmpt->status == RNDIS_STATUS_SUCCESS && + p_init_cmpt->max_packet_per_xfer == 1 && + p_init_cmpt->max_xfer_size <= RNDIS_MSG_PAYLOAD_MAX); + rndish_data[dev_addr - 1].max_xfer_size = p_init_cmpt->max_xfer_size; + + //------------- Message Query 802.3 Permanent Address -------------// + memcpy(msg_payload, &msg_query_permanent_addr, sizeof(rndis_msg_query_t)); + tu_memclr(msg_payload + sizeof(rndis_msg_query_t), 6); // 6 bytes for MAC address + + STASK_INVOKE(send_message_get_response_subtask(dev_addr, p_cdc, msg_payload, + sizeof(rndis_msg_query_t) + 6, msg_payload), + error); + if (TUSB_ERROR_NONE != error) + STASK_RETURN(error); + + rndis_msg_query_cmplt_t *const p_query_cmpt = (rndis_msg_query_cmplt_t *)msg_payload; + STASK_ASSERT(p_query_cmpt->type == RNDIS_MSG_QUERY_CMPLT && + p_query_cmpt->status == RNDIS_STATUS_SUCCESS); + memcpy(rndish_data[dev_addr - 1].mac_address, msg_payload + 8 + p_query_cmpt->buffer_offset, 6); + + //------------- Set OID_GEN_CURRENT_PACKET_FILTER to (DIRECTED | MULTICAST | BROADCAST) -------------// + memcpy(msg_payload, &msg_set_packet_filter, sizeof(rndis_msg_set_t)); + tu_memclr(msg_payload + sizeof(rndis_msg_set_t), 4); // 4 bytes for filter flags + ((rndis_msg_set_t *)msg_payload)->oid_buffer[0] = + (RNDIS_PACKET_TYPE_DIRECTED | RNDIS_PACKET_TYPE_MULTICAST | RNDIS_PACKET_TYPE_BROADCAST); + + STASK_INVOKE(send_message_get_response_subtask(dev_addr, p_cdc, msg_payload, + sizeof(rndis_msg_set_t) + 4, msg_payload), + error); + if (TUSB_ERROR_NONE != error) + STASK_RETURN(error); + + rndis_msg_set_cmplt_t *const p_set_cmpt = (rndis_msg_set_cmplt_t *)msg_payload; + STASK_ASSERT(p_set_cmpt->type == RNDIS_MSG_SET_CMPLT && + p_set_cmpt->status == RNDIS_STATUS_SUCCESS); + + tusbh_cdc_rndis_mounted_cb(dev_addr); + + OSAL_SUBTASK_END } -void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_bytes) +void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, xfer_result_t event, + uint32_t xferred_bytes) { - if ( pipehandle_is_equal(pipe_hdl, p_cdc->pipe_notification) ) - { - osal_semaphore_post( rndish_data[pipe_hdl.dev_addr-1].sem_notification_hdl ); - } + if (pipehandle_is_equal(pipe_hdl, p_cdc->pipe_notification)) { + osal_semaphore_post(rndish_data[pipe_hdl.dev_addr - 1].sem_notification_hdl); + } } //--------------------------------------------------------------------+ // INTERNAL & HELPER //--------------------------------------------------------------------+ -static tusb_error_t send_message_get_response_subtask( uint8_t dev_addr, cdch_data_t *p_cdc, - uint8_t * p_mess, uint32_t mess_length, - uint8_t *p_response) +static tusb_error_t send_message_get_response_subtask(uint8_t dev_addr, cdch_data_t *p_cdc, + uint8_t *p_mess, uint32_t mess_length, + uint8_t *p_response) { - tusb_error_t error; - - OSAL_SUBTASK_BEGIN - - //------------- Send RNDIS Control Message -------------// - STASK_INVOKE( - usbh_control_xfer_subtask( dev_addr, bm_request_type(TUSB_DIR_OUT, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE), - CDC_REQUEST_SEND_ENCAPSULATED_COMMAND, 0, p_cdc->interface_number, - mess_length, p_mess), - error - ); - if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); - - //------------- waiting for Response Available notification -------------// - (void) usbh_edpt_xfer(p_cdc->pipe_notification, msg_notification[dev_addr-1], 8); - osal_semaphore_wait(rndish_data[dev_addr-1].sem_notification_hdl, OSAL_TIMEOUT_NORMAL, &error); - if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); - STASK_ASSERT(msg_notification[dev_addr-1][0] == 1); - - //------------- Get RNDIS Message Initialize Complete -------------// - STASK_INVOKE( - usbh_control_xfer_subtask( dev_addr, bm_request_type(TUSB_DIR_IN, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE), - CDC_REQUEST_GET_ENCAPSULATED_RESPONSE, 0, p_cdc->interface_number, - RNDIS_MSG_PAYLOAD_MAX, p_response), - error - ); - if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); - - OSAL_SUBTASK_END + tusb_error_t error; + + OSAL_SUBTASK_BEGIN + + //------------- Send RNDIS Control Message -------------// + STASK_INVOKE( + usbh_control_xfer_subtask( + dev_addr, bm_request_type(TUSB_DIR_OUT, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE), + CDC_REQUEST_SEND_ENCAPSULATED_COMMAND, 0, p_cdc->interface_number, mess_length, p_mess), + error); + if (TUSB_ERROR_NONE != error) + STASK_RETURN(error); + + //------------- waiting for Response Available notification -------------// + (void)usbh_edpt_xfer(p_cdc->pipe_notification, msg_notification[dev_addr - 1], 8); + osal_semaphore_wait(rndish_data[dev_addr - 1].sem_notification_hdl, OSAL_TIMEOUT_NORMAL, + &error); + if (TUSB_ERROR_NONE != error) + STASK_RETURN(error); + STASK_ASSERT(msg_notification[dev_addr - 1][0] == 1); + + //------------- Get RNDIS Message Initialize Complete -------------// + STASK_INVOKE(usbh_control_xfer_subtask( + dev_addr, + bm_request_type(TUSB_DIR_IN, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE), + CDC_REQUEST_GET_ENCAPSULATED_RESPONSE, 0, p_cdc->interface_number, + RNDIS_MSG_PAYLOAD_MAX, p_response), + error); + if (TUSB_ERROR_NONE != error) + STASK_RETURN(error); + + OSAL_SUBTASK_END } //static tusb_error_t send_process_msg_initialize_subtask(uint8_t dev_addr, cdch_data_t *p_cdc) diff --git a/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.h b/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.h index bb431ec1f75..36f9d6cfbf1 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.h +++ b/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.h @@ -36,26 +36,27 @@ #include "cdc_rndis.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ // INTERNAL RNDIS-CDC Driver API //--------------------------------------------------------------------+ typedef struct { - OSAL_SEM_DEF(semaphore_notification); - osal_semaphore_handle_t sem_notification_hdl; // used to wait on notification pipe - uint32_t max_xfer_size; // got from device's msg initialize complete - uint8_t mac_address[6]; -}rndish_data_t; + OSAL_SEM_DEF(semaphore_notification); + osal_semaphore_handle_t sem_notification_hdl; // used to wait on notification pipe + uint32_t max_xfer_size; // got from device's msg initialize complete + uint8_t mac_address[6]; +} rndish_data_t; void rndish_init(void); bool rndish_open_subtask(uint8_t dev_addr, cdch_data_t *p_cdc); -void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_bytes); +void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, xfer_result_t event, + uint32_t xferred_bytes); void rndish_close(uint8_t dev_addr); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_CDC_RNDIS_HOST_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/serial/ch34x.h b/Libraries/tinyusb/src/class/cdc/serial/ch34x.h index c18066f5788..b23a73f3480 100644 --- a/Libraries/tinyusb/src/class/cdc/serial/ch34x.h +++ b/Libraries/tinyusb/src/class/cdc/serial/ch34x.h @@ -36,49 +36,52 @@ #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM #define CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X CFG_TUH_CDC_LINE_CODING_ON_ENUM #else // this default is necessary to work properly -#define CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X { 9600, CDC_LINE_CONDING_STOP_BITS_1, CDC_LINE_CODING_PARITY_NONE, 8 } +#define CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X \ + { \ + 9600, CDC_LINE_CONDING_STOP_BITS_1, CDC_LINE_CODING_PARITY_NONE, 8 \ + } #endif // USB requests #define CH34X_REQ_READ_VERSION 0x5F // dec 95 -#define CH34X_REQ_WRITE_REG 0x9A // dec 154 -#define CH34X_REQ_READ_REG 0x95 // dec 149 -#define CH34X_REQ_SERIAL_INIT 0xA1 // dec 161 -#define CH34X_REQ_MODEM_CTRL 0xA4 // dev 164 +#define CH34X_REQ_WRITE_REG 0x9A // dec 154 +#define CH34X_REQ_READ_REG 0x95 // dec 149 +#define CH34X_REQ_SERIAL_INIT 0xA1 // dec 161 +#define CH34X_REQ_MODEM_CTRL 0xA4 // dev 164 // registers -#define CH34X_REG_BREAK 0x05 -#define CH34X_REG_PRESCALER 0x12 -#define CH34X_REG_DIVISOR 0x13 -#define CH34X_REG_LCR 0x18 -#define CH34X_REG_LCR2 0x25 -#define CH34X_REG_MCR_MSR 0x06 -#define CH34X_REG_MCR_MSR2 0x07 -#define CH34X_NBREAK_BITS 0x01 +#define CH34X_REG_BREAK 0x05 +#define CH34X_REG_PRESCALER 0x12 +#define CH34X_REG_DIVISOR 0x13 +#define CH34X_REG_LCR 0x18 +#define CH34X_REG_LCR2 0x25 +#define CH34X_REG_MCR_MSR 0x06 +#define CH34X_REG_MCR_MSR2 0x07 +#define CH34X_NBREAK_BITS 0x01 -#define CH341_REG_0x0F 0x0F // undocumented register -#define CH341_REG_0x2C 0x2C // undocumented register -#define CH341_REG_0x27 0x27 // hardware flow control (cts/rts) +#define CH341_REG_0x0F 0x0F // undocumented register +#define CH341_REG_0x2C 0x2C // undocumented register +#define CH341_REG_0x27 0x27 // hardware flow control (cts/rts) -#define CH34X_REG16_DIVISOR_PRESCALER TU_U16(CH34X_REG_DIVISOR, CH34X_REG_PRESCALER) -#define CH32X_REG16_LCR2_LCR TU_U16(CH34X_REG_LCR2, CH34X_REG_LCR) +#define CH34X_REG16_DIVISOR_PRESCALER TU_U16(CH34X_REG_DIVISOR, CH34X_REG_PRESCALER) +#define CH32X_REG16_LCR2_LCR TU_U16(CH34X_REG_LCR2, CH34X_REG_LCR) // modem control bits -#define CH34X_BIT_RTS ( 1 << 6 ) -#define CH34X_BIT_DTR ( 1 << 5 ) +#define CH34X_BIT_RTS (1 << 6) +#define CH34X_BIT_DTR (1 << 5) // line control bits -#define CH34X_LCR_ENABLE_RX 0x80 -#define CH34X_LCR_ENABLE_TX 0x40 -#define CH34X_LCR_MARK_SPACE 0x20 -#define CH34X_LCR_PAR_EVEN 0x10 -#define CH34X_LCR_ENABLE_PAR 0x08 -#define CH34X_LCR_PAR_MASK 0x38 // all parity bits -#define CH34X_LCR_STOP_BITS_2 0x04 -#define CH34X_LCR_CS8 0x03 -#define CH34X_LCR_CS7 0x02 -#define CH34X_LCR_CS6 0x01 -#define CH34X_LCR_CS5 0x00 -#define CH34X_LCR_CS_MASK 0x03 // all CSx bits +#define CH34X_LCR_ENABLE_RX 0x80 +#define CH34X_LCR_ENABLE_TX 0x40 +#define CH34X_LCR_MARK_SPACE 0x20 +#define CH34X_LCR_PAR_EVEN 0x10 +#define CH34X_LCR_ENABLE_PAR 0x08 +#define CH34X_LCR_PAR_MASK 0x38 // all parity bits +#define CH34X_LCR_STOP_BITS_2 0x04 +#define CH34X_LCR_CS8 0x03 +#define CH34X_LCR_CS7 0x02 +#define CH34X_LCR_CS6 0x01 +#define CH34X_LCR_CS5 0x00 +#define CH34X_LCR_CS_MASK 0x03 // all CSx bits #endif /* _CH34X_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/serial/cp210x.h b/Libraries/tinyusb/src/class/cdc/serial/cp210x.h index 2c749f522a1..048bd4a1a21 100644 --- a/Libraries/tinyusb/src/class/cdc/serial/cp210x.h +++ b/Libraries/tinyusb/src/class/cdc/serial/cp210x.h @@ -31,32 +31,32 @@ #define TU_CP210X_VID 0x10C4 /* Config request codes */ -#define CP210X_IFC_ENABLE 0x00 -#define CP210X_SET_BAUDDIV 0x01 -#define CP210X_GET_BAUDDIV 0x02 -#define CP210X_SET_LINE_CTL 0x03 // Set parity, data bits, stop bits -#define CP210X_GET_LINE_CTL 0x04 -#define CP210X_SET_BREAK 0x05 -#define CP210X_IMM_CHAR 0x06 -#define CP210X_SET_MHS 0x07 // Set DTR, RTS -#define CP210X_GET_MDMSTS 0x08 // Get modem status (DTR, RTS, CTS, DSR, RI, DCD) -#define CP210X_SET_XON 0x09 -#define CP210X_SET_XOFF 0x0A -#define CP210X_SET_EVENTMASK 0x0B -#define CP210X_GET_EVENTMASK 0x0C -#define CP210X_SET_CHAR 0x0D -#define CP210X_GET_CHARS 0x0E -#define CP210X_GET_PROPS 0x0F +#define CP210X_IFC_ENABLE 0x00 +#define CP210X_SET_BAUDDIV 0x01 +#define CP210X_GET_BAUDDIV 0x02 +#define CP210X_SET_LINE_CTL 0x03 // Set parity, data bits, stop bits +#define CP210X_GET_LINE_CTL 0x04 +#define CP210X_SET_BREAK 0x05 +#define CP210X_IMM_CHAR 0x06 +#define CP210X_SET_MHS 0x07 // Set DTR, RTS +#define CP210X_GET_MDMSTS 0x08 // Get modem status (DTR, RTS, CTS, DSR, RI, DCD) +#define CP210X_SET_XON 0x09 +#define CP210X_SET_XOFF 0x0A +#define CP210X_SET_EVENTMASK 0x0B +#define CP210X_GET_EVENTMASK 0x0C +#define CP210X_SET_CHAR 0x0D +#define CP210X_GET_CHARS 0x0E +#define CP210X_GET_PROPS 0x0F #define CP210X_GET_COMM_STATUS 0x10 -#define CP210X_RESET 0x11 -#define CP210X_PURGE 0x12 -#define CP210X_SET_FLOW 0x13 -#define CP210X_GET_FLOW 0x14 -#define CP210X_EMBED_EVENTS 0x15 -#define CP210X_GET_EVENTSTATE 0x16 -#define CP210X_SET_CHARS 0x19 -#define CP210X_GET_BAUDRATE 0x1D -#define CP210X_SET_BAUDRATE 0x1E +#define CP210X_RESET 0x11 +#define CP210X_PURGE 0x12 +#define CP210X_SET_FLOW 0x13 +#define CP210X_GET_FLOW 0x14 +#define CP210X_EMBED_EVENTS 0x15 +#define CP210X_GET_EVENTSTATE 0x16 +#define CP210X_SET_CHARS 0x19 +#define CP210X_GET_BAUDRATE 0x1D +#define CP210X_SET_BAUDRATE 0x1E #define CP210X_VENDOR_SPECIFIC 0xFF // GPIO, Recipient must be Device #endif //TUSB_CP210X_H diff --git a/Libraries/tinyusb/src/class/cdc/serial/ftdi_sio.h b/Libraries/tinyusb/src/class/cdc/serial/ftdi_sio.h index 0825f07195e..77bac9d3b2f 100644 --- a/Libraries/tinyusb/src/class/cdc/serial/ftdi_sio.h +++ b/Libraries/tinyusb/src/class/cdc/serial/ftdi_sio.h @@ -29,19 +29,19 @@ #define TU_FTDI_VID 0x0403 // Commands -#define FTDI_SIO_RESET 0 /* Reset the port */ -#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ -#define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */ -#define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */ -#define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */ -#define FTDI_SIO_GET_MODEM_STATUS 5 /* Retrieve current value of modem status register */ -#define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */ -#define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */ -#define FTDI_SIO_SET_LATENCY_TIMER 9 /* Set the latency timer */ -#define FTDI_SIO_GET_LATENCY_TIMER 0x0a /* Get the latency timer */ -#define FTDI_SIO_SET_BITMODE 0x0b /* Set bitbang mode */ -#define FTDI_SIO_READ_PINS 0x0c /* Read immediate value of pins */ -#define FTDI_SIO_READ_EEPROM 0x90 /* Read EEPROM */ +#define FTDI_SIO_RESET 0 /* Reset the port */ +#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ +#define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */ +#define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */ +#define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */ +#define FTDI_SIO_GET_MODEM_STATUS 5 /* Retrieve current value of modem status register */ +#define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */ +#define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */ +#define FTDI_SIO_SET_LATENCY_TIMER 9 /* Set the latency timer */ +#define FTDI_SIO_GET_LATENCY_TIMER 0x0a /* Get the latency timer */ +#define FTDI_SIO_SET_BITMODE 0x0b /* Set bitbang mode */ +#define FTDI_SIO_READ_PINS 0x0c /* Read immediate value of pins */ +#define FTDI_SIO_READ_EEPROM 0x90 /* Read EEPROM */ /* FTDI_SIO_RESET */ #define FTDI_SIO_RESET_SIO 0 @@ -90,10 +90,10 @@ #define FTDI_SIO_SET_DTR_MASK 0x1 #define FTDI_SIO_SET_DTR_HIGH ((FTDI_SIO_SET_DTR_MASK << 8) | 1) -#define FTDI_SIO_SET_DTR_LOW ((FTDI_SIO_SET_DTR_MASK << 8) | 0) +#define FTDI_SIO_SET_DTR_LOW ((FTDI_SIO_SET_DTR_MASK << 8) | 0) #define FTDI_SIO_SET_RTS_MASK 0x2 #define FTDI_SIO_SET_RTS_HIGH ((FTDI_SIO_SET_RTS_MASK << 8) | 2) -#define FTDI_SIO_SET_RTS_LOW ((FTDI_SIO_SET_RTS_MASK << 8) | 0) +#define FTDI_SIO_SET_RTS_LOW ((FTDI_SIO_SET_RTS_MASK << 8) | 0) /* * ControlValue @@ -156,15 +156,15 @@ */ /* FTDI_SIO_SET_DATA */ -#define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8) -#define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8) -#define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8) -#define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8) -#define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8) -#define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11) -#define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11) -#define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11) -#define FTDI_SIO_SET_BREAK (0x1 << 14) +#define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8) +#define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8) +#define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8) +#define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8) +#define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8) +#define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11) +#define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11) +#define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11) +#define FTDI_SIO_SET_BREAK (0x1 << 14) /* * BmRequestType: 0100 0000B @@ -229,18 +229,18 @@ * B7 Error in RCVR FIFO * */ -#define FTDI_RS0_CTS (1 << 4) -#define FTDI_RS0_DSR (1 << 5) -#define FTDI_RS0_RI (1 << 6) -#define FTDI_RS0_RLSD (1 << 7) - -#define FTDI_RS_DR 1 -#define FTDI_RS_OE (1<<1) -#define FTDI_RS_PE (1<<2) -#define FTDI_RS_FE (1<<3) -#define FTDI_RS_BI (1<<4) -#define FTDI_RS_THRE (1<<5) -#define FTDI_RS_TEMT (1<<6) -#define FTDI_RS_FIFO (1<<7) +#define FTDI_RS0_CTS (1 << 4) +#define FTDI_RS0_DSR (1 << 5) +#define FTDI_RS0_RI (1 << 6) +#define FTDI_RS0_RLSD (1 << 7) + +#define FTDI_RS_DR 1 +#define FTDI_RS_OE (1 << 1) +#define FTDI_RS_PE (1 << 2) +#define FTDI_RS_FE (1 << 3) +#define FTDI_RS_BI (1 << 4) +#define FTDI_RS_THRE (1 << 5) +#define FTDI_RS_TEMT (1 << 6) +#define FTDI_RS_FIFO (1 << 7) #endif //TUSB_FTDI_SIO_H diff --git a/Libraries/tinyusb/src/class/dfu/dfu.h b/Libraries/tinyusb/src/class/dfu/dfu.h index 114c827b8b7..64a0a7ac5c3 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu.h +++ b/Libraries/tinyusb/src/class/dfu/dfu.h @@ -30,7 +30,7 @@ #include "common/tusb_common.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -38,82 +38,79 @@ //--------------------------------------------------------------------+ // DFU Protocol -typedef enum -{ - DFU_PROTOCOL_RT = 0x01, - DFU_PROTOCOL_DFU = 0x02, +typedef enum { + DFU_PROTOCOL_RT = 0x01, + DFU_PROTOCOL_DFU = 0x02, } dfu_protocol_type_t; // DFU Descriptor Type -typedef enum -{ - DFU_DESC_FUNCTIONAL = 0x21, +typedef enum { + DFU_DESC_FUNCTIONAL = 0x21, } dfu_descriptor_type_t; // DFU Requests typedef enum { - DFU_REQUEST_DETACH = 0, - DFU_REQUEST_DNLOAD = 1, - DFU_REQUEST_UPLOAD = 2, - DFU_REQUEST_GETSTATUS = 3, - DFU_REQUEST_CLRSTATUS = 4, - DFU_REQUEST_GETSTATE = 5, - DFU_REQUEST_ABORT = 6, + DFU_REQUEST_DETACH = 0, + DFU_REQUEST_DNLOAD = 1, + DFU_REQUEST_UPLOAD = 2, + DFU_REQUEST_GETSTATUS = 3, + DFU_REQUEST_CLRSTATUS = 4, + DFU_REQUEST_GETSTATE = 5, + DFU_REQUEST_ABORT = 6, } dfu_requests_t; // DFU States typedef enum { - APP_IDLE = 0, - APP_DETACH = 1, - DFU_IDLE = 2, - DFU_DNLOAD_SYNC = 3, - DFU_DNBUSY = 4, - DFU_DNLOAD_IDLE = 5, - DFU_MANIFEST_SYNC = 6, - DFU_MANIFEST = 7, - DFU_MANIFEST_WAIT_RESET = 8, - DFU_UPLOAD_IDLE = 9, - DFU_ERROR = 10, + APP_IDLE = 0, + APP_DETACH = 1, + DFU_IDLE = 2, + DFU_DNLOAD_SYNC = 3, + DFU_DNBUSY = 4, + DFU_DNLOAD_IDLE = 5, + DFU_MANIFEST_SYNC = 6, + DFU_MANIFEST = 7, + DFU_MANIFEST_WAIT_RESET = 8, + DFU_UPLOAD_IDLE = 9, + DFU_ERROR = 10, } dfu_state_t; // DFU Status typedef enum { - DFU_STATUS_OK = 0x00, - DFU_STATUS_ERR_TARGET = 0x01, - DFU_STATUS_ERR_FILE = 0x02, - DFU_STATUS_ERR_WRITE = 0x03, - DFU_STATUS_ERR_ERASE = 0x04, - DFU_STATUS_ERR_CHECK_ERASED = 0x05, - DFU_STATUS_ERR_PROG = 0x06, - DFU_STATUS_ERR_VERIFY = 0x07, - DFU_STATUS_ERR_ADDRESS = 0x08, - DFU_STATUS_ERR_NOTDONE = 0x09, - DFU_STATUS_ERR_FIRMWARE = 0x0A, - DFU_STATUS_ERR_VENDOR = 0x0B, - DFU_STATUS_ERR_USBR = 0x0C, - DFU_STATUS_ERR_POR = 0x0D, - DFU_STATUS_ERR_UNKNOWN = 0x0E, - DFU_STATUS_ERR_STALLEDPKT = 0x0F, + DFU_STATUS_OK = 0x00, + DFU_STATUS_ERR_TARGET = 0x01, + DFU_STATUS_ERR_FILE = 0x02, + DFU_STATUS_ERR_WRITE = 0x03, + DFU_STATUS_ERR_ERASE = 0x04, + DFU_STATUS_ERR_CHECK_ERASED = 0x05, + DFU_STATUS_ERR_PROG = 0x06, + DFU_STATUS_ERR_VERIFY = 0x07, + DFU_STATUS_ERR_ADDRESS = 0x08, + DFU_STATUS_ERR_NOTDONE = 0x09, + DFU_STATUS_ERR_FIRMWARE = 0x0A, + DFU_STATUS_ERR_VENDOR = 0x0B, + DFU_STATUS_ERR_USBR = 0x0C, + DFU_STATUS_ERR_POR = 0x0D, + DFU_STATUS_ERR_UNKNOWN = 0x0E, + DFU_STATUS_ERR_STALLEDPKT = 0x0F, } dfu_status_t; -#define DFU_ATTR_CAN_DOWNLOAD (1u << 0) -#define DFU_ATTR_CAN_UPLOAD (1u << 1) -#define DFU_ATTR_MANIFESTATION_TOLERANT (1u << 2) -#define DFU_ATTR_WILL_DETACH (1u << 3) +#define DFU_ATTR_CAN_DOWNLOAD (1u << 0) +#define DFU_ATTR_CAN_UPLOAD (1u << 1) +#define DFU_ATTR_MANIFESTATION_TOLERANT (1u << 2) +#define DFU_ATTR_WILL_DETACH (1u << 3) // DFU Status Request Payload -typedef struct TU_ATTR_PACKED -{ - uint8_t bStatus; - uint8_t bwPollTimeout[3]; - uint8_t bState; - uint8_t iString; +typedef struct TU_ATTR_PACKED { + uint8_t bStatus; + uint8_t bwPollTimeout[3]; + uint8_t bState; + uint8_t iString; } dfu_status_response_t; -TU_VERIFY_STATIC( sizeof(dfu_status_response_t) == 6, "size is not correct"); +TU_VERIFY_STATIC(sizeof(dfu_status_response_t) == 6, "size is not correct"); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_DFU_H_ */ diff --git a/Libraries/tinyusb/src/class/dfu/dfu_device.c b/Libraries/tinyusb/src/class/dfu/dfu_device.c index 71e7ac2b36f..ab9d623e699 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu_device.c +++ b/Libraries/tinyusb/src/class/dfu/dfu_device.c @@ -39,27 +39,26 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_DFU_LOG_LEVEL - #define CFG_TUD_DFU_LOG_LEVEL CFG_TUD_LOG_LEVEL +#define CFG_TUD_DFU_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -typedef struct -{ - uint8_t attrs; - uint8_t alt; +typedef struct { + uint8_t attrs; + uint8_t alt; - dfu_state_t state; - dfu_status_t status; + dfu_state_t state; + dfu_status_t status; - bool flashing_in_progress; - uint16_t block; - uint16_t length; + bool flashing_in_progress; + uint16_t block; + uint16_t length; - CFG_TUSB_MEM_ALIGN uint8_t transfer_buf[CFG_TUD_DFU_XFER_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t transfer_buf[CFG_TUD_DFU_XFER_BUFSIZE]; } dfu_state_ctx_t; // Only a single dfu state is allowed @@ -67,83 +66,75 @@ CFG_TUD_MEM_SECTION tu_static dfu_state_ctx_t _dfu_ctx; static void reset_state(void) { - _dfu_ctx.state = DFU_IDLE; - _dfu_ctx.status = DFU_STATUS_OK; - _dfu_ctx.flashing_in_progress = false; + _dfu_ctx.state = DFU_IDLE; + _dfu_ctx.status = DFU_STATUS_OK; + _dfu_ctx.flashing_in_progress = false; } -static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const * request, dfu_state_t state, dfu_status_t status, uint32_t timeout); -static bool process_download_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); -static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const *request, + dfu_state_t state, dfu_status_t status, uint32_t timeout); +static bool process_download_get_status(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request); +static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request); //--------------------------------------------------------------------+ // Debug //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= 2 -tu_static tu_lookup_entry_t const _dfu_request_lookup[] = -{ - { .key = DFU_REQUEST_DETACH , .data = "DETACH" }, - { .key = DFU_REQUEST_DNLOAD , .data = "DNLOAD" }, - { .key = DFU_REQUEST_UPLOAD , .data = "UPLOAD" }, - { .key = DFU_REQUEST_GETSTATUS , .data = "GETSTATUS" }, - { .key = DFU_REQUEST_CLRSTATUS , .data = "CLRSTATUS" }, - { .key = DFU_REQUEST_GETSTATE , .data = "GETSTATE" }, - { .key = DFU_REQUEST_ABORT , .data = "ABORT" }, +tu_static tu_lookup_entry_t const _dfu_request_lookup[] = { + { .key = DFU_REQUEST_DETACH, .data = "DETACH" }, + { .key = DFU_REQUEST_DNLOAD, .data = "DNLOAD" }, + { .key = DFU_REQUEST_UPLOAD, .data = "UPLOAD" }, + { .key = DFU_REQUEST_GETSTATUS, .data = "GETSTATUS" }, + { .key = DFU_REQUEST_CLRSTATUS, .data = "CLRSTATUS" }, + { .key = DFU_REQUEST_GETSTATE, .data = "GETSTATE" }, + { .key = DFU_REQUEST_ABORT, .data = "ABORT" }, }; -tu_static tu_lookup_table_t const _dfu_request_table = -{ - .count = TU_ARRAY_SIZE(_dfu_request_lookup), - .items = _dfu_request_lookup +tu_static tu_lookup_table_t const _dfu_request_table = { .count = + TU_ARRAY_SIZE(_dfu_request_lookup), + .items = _dfu_request_lookup }; + +tu_static tu_lookup_entry_t const _dfu_state_lookup[] = { + { .key = APP_IDLE, .data = "APP_IDLE" }, + { .key = APP_DETACH, .data = "APP_DETACH" }, + { .key = DFU_IDLE, .data = "IDLE" }, + { .key = DFU_DNLOAD_SYNC, .data = "DNLOAD_SYNC" }, + { .key = DFU_DNBUSY, .data = "DNBUSY" }, + { .key = DFU_DNLOAD_IDLE, .data = "DNLOAD_IDLE" }, + { .key = DFU_MANIFEST_SYNC, .data = "MANIFEST_SYNC" }, + { .key = DFU_MANIFEST, .data = "MANIFEST" }, + { .key = DFU_MANIFEST_WAIT_RESET, .data = "MANIFEST_WAIT_RESET" }, + { .key = DFU_UPLOAD_IDLE, .data = "UPLOAD_IDLE" }, + { .key = DFU_ERROR, .data = "ERROR" }, }; -tu_static tu_lookup_entry_t const _dfu_state_lookup[] = -{ - { .key = APP_IDLE , .data = "APP_IDLE" }, - { .key = APP_DETACH , .data = "APP_DETACH" }, - { .key = DFU_IDLE , .data = "IDLE" }, - { .key = DFU_DNLOAD_SYNC , .data = "DNLOAD_SYNC" }, - { .key = DFU_DNBUSY , .data = "DNBUSY" }, - { .key = DFU_DNLOAD_IDLE , .data = "DNLOAD_IDLE" }, - { .key = DFU_MANIFEST_SYNC , .data = "MANIFEST_SYNC" }, - { .key = DFU_MANIFEST , .data = "MANIFEST" }, - { .key = DFU_MANIFEST_WAIT_RESET , .data = "MANIFEST_WAIT_RESET" }, - { .key = DFU_UPLOAD_IDLE , .data = "UPLOAD_IDLE" }, - { .key = DFU_ERROR , .data = "ERROR" }, +tu_static tu_lookup_table_t const _dfu_state_table = { .count = TU_ARRAY_SIZE(_dfu_state_lookup), + .items = _dfu_state_lookup }; + +tu_static tu_lookup_entry_t const _dfu_status_lookup[] = { + { .key = DFU_STATUS_OK, .data = "OK" }, + { .key = DFU_STATUS_ERR_TARGET, .data = "errTARGET" }, + { .key = DFU_STATUS_ERR_FILE, .data = "errFILE" }, + { .key = DFU_STATUS_ERR_WRITE, .data = "errWRITE" }, + { .key = DFU_STATUS_ERR_ERASE, .data = "errERASE" }, + { .key = DFU_STATUS_ERR_CHECK_ERASED, .data = "errCHECK_ERASED" }, + { .key = DFU_STATUS_ERR_PROG, .data = "errPROG" }, + { .key = DFU_STATUS_ERR_VERIFY, .data = "errVERIFY" }, + { .key = DFU_STATUS_ERR_ADDRESS, .data = "errADDRESS" }, + { .key = DFU_STATUS_ERR_NOTDONE, .data = "errNOTDONE" }, + { .key = DFU_STATUS_ERR_FIRMWARE, .data = "errFIRMWARE" }, + { .key = DFU_STATUS_ERR_VENDOR, .data = "errVENDOR" }, + { .key = DFU_STATUS_ERR_USBR, .data = "errUSBR" }, + { .key = DFU_STATUS_ERR_POR, .data = "errPOR" }, + { .key = DFU_STATUS_ERR_UNKNOWN, .data = "errUNKNOWN" }, + { .key = DFU_STATUS_ERR_STALLEDPKT, .data = "errSTALLEDPKT" }, }; -tu_static tu_lookup_table_t const _dfu_state_table = -{ - .count = TU_ARRAY_SIZE(_dfu_state_lookup), - .items = _dfu_state_lookup -}; - -tu_static tu_lookup_entry_t const _dfu_status_lookup[] = -{ - { .key = DFU_STATUS_OK , .data = "OK" }, - { .key = DFU_STATUS_ERR_TARGET , .data = "errTARGET" }, - { .key = DFU_STATUS_ERR_FILE , .data = "errFILE" }, - { .key = DFU_STATUS_ERR_WRITE , .data = "errWRITE" }, - { .key = DFU_STATUS_ERR_ERASE , .data = "errERASE" }, - { .key = DFU_STATUS_ERR_CHECK_ERASED , .data = "errCHECK_ERASED" }, - { .key = DFU_STATUS_ERR_PROG , .data = "errPROG" }, - { .key = DFU_STATUS_ERR_VERIFY , .data = "errVERIFY" }, - { .key = DFU_STATUS_ERR_ADDRESS , .data = "errADDRESS" }, - { .key = DFU_STATUS_ERR_NOTDONE , .data = "errNOTDONE" }, - { .key = DFU_STATUS_ERR_FIRMWARE , .data = "errFIRMWARE" }, - { .key = DFU_STATUS_ERR_VENDOR , .data = "errVENDOR" }, - { .key = DFU_STATUS_ERR_USBR , .data = "errUSBR" }, - { .key = DFU_STATUS_ERR_POR , .data = "errPOR" }, - { .key = DFU_STATUS_ERR_UNKNOWN , .data = "errUNKNOWN" }, - { .key = DFU_STATUS_ERR_STALLEDPKT , .data = "errSTALLEDPKT" }, -}; - -tu_static tu_lookup_table_t const _dfu_status_table = -{ - .count = TU_ARRAY_SIZE(_dfu_status_lookup), - .items = _dfu_status_lookup -}; +tu_static tu_lookup_table_t const _dfu_status_table = { .count = TU_ARRAY_SIZE(_dfu_status_lookup), + .items = _dfu_status_lookup }; #endif @@ -152,319 +143,293 @@ tu_static tu_lookup_table_t const _dfu_status_table = //--------------------------------------------------------------------+ void dfu_moded_reset(uint8_t rhport) { - (void) rhport; + (void)rhport; - _dfu_ctx.attrs = 0; - _dfu_ctx.alt = 0; + _dfu_ctx.attrs = 0; + _dfu_ctx.alt = 0; - reset_state(); + reset_state(); } -void dfu_moded_init(void) { - dfu_moded_reset(0); +void dfu_moded_init(void) +{ + dfu_moded_reset(0); } -bool dfu_moded_deinit(void) { - return true; +bool dfu_moded_deinit(void) +{ + return true; } -uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) +uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - (void) rhport; + (void)rhport; - //------------- Interface (with Alt) descriptor -------------// - uint8_t const itf_num = itf_desc->bInterfaceNumber; - uint8_t alt_count = 0; + //------------- Interface (with Alt) descriptor -------------// + uint8_t const itf_num = itf_desc->bInterfaceNumber; + uint8_t alt_count = 0; - uint16_t drv_len = 0; - TU_VERIFY(itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS && itf_desc->bInterfaceProtocol == DFU_PROTOCOL_DFU, 0); + uint16_t drv_len = 0; + TU_VERIFY(itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS && + itf_desc->bInterfaceProtocol == DFU_PROTOCOL_DFU, + 0); - while(itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS && itf_desc->bInterfaceProtocol == DFU_PROTOCOL_DFU) - { - TU_ASSERT(max_len > drv_len, 0); + while (itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS && + itf_desc->bInterfaceProtocol == DFU_PROTOCOL_DFU) { + TU_ASSERT(max_len > drv_len, 0); - // Alternate must have the same interface number - TU_ASSERT(itf_desc->bInterfaceNumber == itf_num, 0); + // Alternate must have the same interface number + TU_ASSERT(itf_desc->bInterfaceNumber == itf_num, 0); - // Alt should increase by one every time - TU_ASSERT(itf_desc->bAlternateSetting == alt_count, 0); - alt_count++; + // Alt should increase by one every time + TU_ASSERT(itf_desc->bAlternateSetting == alt_count, 0); + alt_count++; - drv_len += tu_desc_len(itf_desc); - itf_desc = (tusb_desc_interface_t const *) tu_desc_next(itf_desc); - } + drv_len += tu_desc_len(itf_desc); + itf_desc = (tusb_desc_interface_t const *)tu_desc_next(itf_desc); + } - //------------- DFU Functional descriptor -------------// - tusb_desc_dfu_functional_t const *func_desc = (tusb_desc_dfu_functional_t const *) itf_desc; - TU_ASSERT(tu_desc_type(func_desc) == TUSB_DESC_FUNCTIONAL, 0); - drv_len += sizeof(tusb_desc_dfu_functional_t); + //------------- DFU Functional descriptor -------------// + tusb_desc_dfu_functional_t const *func_desc = (tusb_desc_dfu_functional_t const *)itf_desc; + TU_ASSERT(tu_desc_type(func_desc) == TUSB_DESC_FUNCTIONAL, 0); + drv_len += sizeof(tusb_desc_dfu_functional_t); - _dfu_ctx.attrs = func_desc->bAttributes; + _dfu_ctx.attrs = func_desc->bAttributes; - // CFG_TUD_DFU_XFER_BUFSIZE has to be set to the buffer size used in TUD_DFU_DESCRIPTOR - uint16_t const transfer_size = tu_le16toh( tu_unaligned_read16((uint8_t const*) func_desc + offsetof(tusb_desc_dfu_functional_t, wTransferSize)) ); - TU_ASSERT(transfer_size <= CFG_TUD_DFU_XFER_BUFSIZE, drv_len); + // CFG_TUD_DFU_XFER_BUFSIZE has to be set to the buffer size used in TUD_DFU_DESCRIPTOR + uint16_t const transfer_size = tu_le16toh(tu_unaligned_read16( + (uint8_t const *)func_desc + offsetof(tusb_desc_dfu_functional_t, wTransferSize))); + TU_ASSERT(transfer_size <= CFG_TUD_DFU_XFER_BUFSIZE, drv_len); - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); - - TU_LOG_DRV(" DFU State : %s, Status: %s\r\n", tu_lookup_find(&_dfu_state_table, _dfu_ctx.state), tu_lookup_find(&_dfu_status_table, _dfu_ctx.status)); - - if ( request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD ) - { - // Standard request include GET/SET_INTERFACE - switch ( request->bRequest ) - { - case TUSB_REQ_SET_INTERFACE: - if ( stage == CONTROL_STAGE_SETUP ) - { - // Switch Alt interface and reset state machine - _dfu_ctx.alt = (uint8_t) request->wValue; - reset_state(); - return tud_control_status(rhport, request); + TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); + + TU_LOG_DRV(" DFU State : %s, Status: %s\r\n", + tu_lookup_find(&_dfu_state_table, _dfu_ctx.state), + tu_lookup_find(&_dfu_status_table, _dfu_ctx.status)); + + if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { + // Standard request include GET/SET_INTERFACE + switch (request->bRequest) { + case TUSB_REQ_SET_INTERFACE: + if (stage == CONTROL_STAGE_SETUP) { + // Switch Alt interface and reset state machine + _dfu_ctx.alt = (uint8_t)request->wValue; + reset_state(); + return tud_control_status(rhport, request); + } + break; + + case TUSB_REQ_GET_INTERFACE: + if (stage == CONTROL_STAGE_SETUP) { + return tud_control_xfer(rhport, request, &_dfu_ctx.alt, 1); + } + break; + + // unsupported request + default: + return false; } - break; - - case TUSB_REQ_GET_INTERFACE: - if(stage == CONTROL_STAGE_SETUP) - { - return tud_control_xfer(rhport, request, &_dfu_ctx.alt, 1); + } else if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { + TU_LOG_DRV(" DFU Request: %s\r\n", tu_lookup_find(&_dfu_request_table, request->bRequest)); + + // Class request + switch (request->bRequest) { + case DFU_REQUEST_DETACH: + if (stage == CONTROL_STAGE_SETUP) { + tud_control_status(rhport, request); + } else if (stage == CONTROL_STAGE_ACK) { + if (tud_dfu_detach_cb) + tud_dfu_detach_cb(); + } + break; + + case DFU_REQUEST_CLRSTATUS: + if (stage == CONTROL_STAGE_SETUP) { + reset_state(); + tud_control_status(rhport, request); + } + break; + + case DFU_REQUEST_GETSTATE: + if (stage == CONTROL_STAGE_SETUP) { + tud_control_xfer(rhport, request, &_dfu_ctx.state, 1); + } + break; + + case DFU_REQUEST_ABORT: + if (stage == CONTROL_STAGE_SETUP) { + reset_state(); + tud_control_status(rhport, request); + } else if (stage == CONTROL_STAGE_ACK) { + if (tud_dfu_abort_cb) + tud_dfu_abort_cb(_dfu_ctx.alt); + } + break; + + case DFU_REQUEST_UPLOAD: + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(_dfu_ctx.attrs & DFU_ATTR_CAN_UPLOAD); + TU_VERIFY(tud_dfu_upload_cb); + TU_VERIFY(request->wLength <= CFG_TUD_DFU_XFER_BUFSIZE); + + uint16_t const xfer_len = tud_dfu_upload_cb( + _dfu_ctx.alt, request->wValue, _dfu_ctx.transfer_buf, request->wLength); + + return tud_control_xfer(rhport, request, _dfu_ctx.transfer_buf, xfer_len); + } + break; + + case DFU_REQUEST_DNLOAD: + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(_dfu_ctx.attrs & DFU_ATTR_CAN_DOWNLOAD); + TU_VERIFY(_dfu_ctx.state == DFU_IDLE || _dfu_ctx.state == DFU_DNLOAD_IDLE); + TU_VERIFY(request->wLength <= CFG_TUD_DFU_XFER_BUFSIZE); + + // set to true for both download and manifest + _dfu_ctx.flashing_in_progress = true; + + // save block and length for flashing + _dfu_ctx.block = request->wValue; + _dfu_ctx.length = request->wLength; + + if (request->wLength) { + // Download with payload -> transition to DOWNLOAD SYNC + _dfu_ctx.state = DFU_DNLOAD_SYNC; + return tud_control_xfer(rhport, request, _dfu_ctx.transfer_buf, + request->wLength); + } else { + // Download is complete -> transition to MANIFEST SYNC + _dfu_ctx.state = DFU_MANIFEST_SYNC; + return tud_control_status(rhport, request); + } + } + break; + + case DFU_REQUEST_GETSTATUS: + switch (_dfu_ctx.state) { + case DFU_DNLOAD_SYNC: + return process_download_get_status(rhport, stage, request); + break; + + case DFU_MANIFEST_SYNC: + return process_manifest_get_status(rhport, stage, request); + break; + + default: + if (stage == CONTROL_STAGE_SETUP) + return reply_getstatus(rhport, request, _dfu_ctx.state, _dfu_ctx.status, 0); + break; + } + break; + + default: + return false; // stall unsupported request } - break; - - // unsupported request - default: return false; + } else { + return false; // unsupported request } - } - else if ( request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS ) - { - TU_LOG_DRV(" DFU Request: %s\r\n", tu_lookup_find(&_dfu_request_table, request->bRequest)); - - // Class request - switch ( request->bRequest ) - { - case DFU_REQUEST_DETACH: - if ( stage == CONTROL_STAGE_SETUP ) - { - tud_control_status(rhport, request); - } - else if ( stage == CONTROL_STAGE_ACK ) - { - if ( tud_dfu_detach_cb ) tud_dfu_detach_cb(); - } - break; - - case DFU_REQUEST_CLRSTATUS: - if ( stage == CONTROL_STAGE_SETUP ) - { - reset_state(); - tud_control_status(rhport, request); - } - break; - - case DFU_REQUEST_GETSTATE: - if ( stage == CONTROL_STAGE_SETUP ) - { - tud_control_xfer(rhport, request, &_dfu_ctx.state, 1); - } - break; - - case DFU_REQUEST_ABORT: - if ( stage == CONTROL_STAGE_SETUP ) - { - reset_state(); - tud_control_status(rhport, request); - } - else if ( stage == CONTROL_STAGE_ACK ) - { - if ( tud_dfu_abort_cb ) tud_dfu_abort_cb(_dfu_ctx.alt); - } - break; - case DFU_REQUEST_UPLOAD: - if ( stage == CONTROL_STAGE_SETUP ) - { - TU_VERIFY(_dfu_ctx.attrs & DFU_ATTR_CAN_UPLOAD); - TU_VERIFY(tud_dfu_upload_cb); - TU_VERIFY(request->wLength <= CFG_TUD_DFU_XFER_BUFSIZE); - - uint16_t const xfer_len = tud_dfu_upload_cb(_dfu_ctx.alt, request->wValue, _dfu_ctx.transfer_buf, request->wLength); - - return tud_control_xfer(rhport, request, _dfu_ctx.transfer_buf, xfer_len); - } - break; - - case DFU_REQUEST_DNLOAD: - if ( stage == CONTROL_STAGE_SETUP ) - { - TU_VERIFY(_dfu_ctx.attrs & DFU_ATTR_CAN_DOWNLOAD); - TU_VERIFY(_dfu_ctx.state == DFU_IDLE || _dfu_ctx.state == DFU_DNLOAD_IDLE); - TU_VERIFY(request->wLength <= CFG_TUD_DFU_XFER_BUFSIZE); - - // set to true for both download and manifest - _dfu_ctx.flashing_in_progress = true; - - // save block and length for flashing - _dfu_ctx.block = request->wValue; - _dfu_ctx.length = request->wLength; - - if ( request->wLength ) - { - // Download with payload -> transition to DOWNLOAD SYNC - _dfu_ctx.state = DFU_DNLOAD_SYNC; - return tud_control_xfer(rhport, request, _dfu_ctx.transfer_buf, request->wLength); - } - else - { - // Download is complete -> transition to MANIFEST SYNC - _dfu_ctx.state = DFU_MANIFEST_SYNC; - return tud_control_status(rhport, request); - } - } - break; - - case DFU_REQUEST_GETSTATUS: - switch ( _dfu_ctx.state ) - { - case DFU_DNLOAD_SYNC: - return process_download_get_status(rhport, stage, request); - break; - - case DFU_MANIFEST_SYNC: - return process_manifest_get_status(rhport, stage, request); - break; - - default: - if ( stage == CONTROL_STAGE_SETUP ) return reply_getstatus(rhport, request, _dfu_ctx.state, _dfu_ctx.status, 0); - break; - } - break; - - default: return false; // stall unsupported request - } - }else - { - return false; // unsupported request - } - - return true; + return true; } void tud_dfu_finish_flashing(uint8_t status) { - _dfu_ctx.flashing_in_progress = false; + _dfu_ctx.flashing_in_progress = false; - if ( status == DFU_STATUS_OK ) - { - if (_dfu_ctx.state == DFU_DNBUSY) - { - _dfu_ctx.state = DFU_DNLOAD_SYNC; - } - else if (_dfu_ctx.state == DFU_MANIFEST) - { - _dfu_ctx.state = (_dfu_ctx.attrs & DFU_ATTR_MANIFESTATION_TOLERANT) - ? DFU_MANIFEST_SYNC : DFU_MANIFEST_WAIT_RESET; + if (status == DFU_STATUS_OK) { + if (_dfu_ctx.state == DFU_DNBUSY) { + _dfu_ctx.state = DFU_DNLOAD_SYNC; + } else if (_dfu_ctx.state == DFU_MANIFEST) { + _dfu_ctx.state = (_dfu_ctx.attrs & DFU_ATTR_MANIFESTATION_TOLERANT) ? + DFU_MANIFEST_SYNC : + DFU_MANIFEST_WAIT_RESET; + } + } else { + // failed while flashing, move to dfuError + _dfu_ctx.state = DFU_ERROR; + _dfu_ctx.status = (dfu_status_t)status; } - } - else - { - // failed while flashing, move to dfuError - _dfu_ctx.state = DFU_ERROR; - _dfu_ctx.status = (dfu_status_t)status; - } } -static bool process_download_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +static bool process_download_get_status(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request) { - if ( stage == CONTROL_STAGE_SETUP ) - { - // only transition to next state on CONTROL_STAGE_ACK - dfu_state_t next_state; - uint32_t timeout; - - if ( _dfu_ctx.flashing_in_progress ) - { - next_state = DFU_DNBUSY; - timeout = tud_dfu_get_timeout_cb(_dfu_ctx.alt, (uint8_t) next_state); - } - else - { - next_state = DFU_DNLOAD_IDLE; - timeout = 0; - } + if (stage == CONTROL_STAGE_SETUP) { + // only transition to next state on CONTROL_STAGE_ACK + dfu_state_t next_state; + uint32_t timeout; + + if (_dfu_ctx.flashing_in_progress) { + next_state = DFU_DNBUSY; + timeout = tud_dfu_get_timeout_cb(_dfu_ctx.alt, (uint8_t)next_state); + } else { + next_state = DFU_DNLOAD_IDLE; + timeout = 0; + } - return reply_getstatus(rhport, request, next_state, _dfu_ctx.status, timeout); - } - else if ( stage == CONTROL_STAGE_ACK ) - { - if ( _dfu_ctx.flashing_in_progress ) - { - _dfu_ctx.state = DFU_DNBUSY; - tud_dfu_download_cb(_dfu_ctx.alt, _dfu_ctx.block, _dfu_ctx.transfer_buf, _dfu_ctx.length); - }else - { - _dfu_ctx.state = DFU_DNLOAD_IDLE; + return reply_getstatus(rhport, request, next_state, _dfu_ctx.status, timeout); + } else if (stage == CONTROL_STAGE_ACK) { + if (_dfu_ctx.flashing_in_progress) { + _dfu_ctx.state = DFU_DNBUSY; + tud_dfu_download_cb(_dfu_ctx.alt, _dfu_ctx.block, _dfu_ctx.transfer_buf, + _dfu_ctx.length); + } else { + _dfu_ctx.state = DFU_DNLOAD_IDLE; + } } - } - return true; + return true; } -static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request) { - if ( stage == CONTROL_STAGE_SETUP ) - { - // only transition to next state on CONTROL_STAGE_ACK - dfu_state_t next_state; - uint32_t timeout; - - if ( _dfu_ctx.flashing_in_progress ) - { - next_state = DFU_MANIFEST; - timeout = tud_dfu_get_timeout_cb(_dfu_ctx.alt, next_state); - } - else - { - next_state = DFU_IDLE; - timeout = 0; - } + if (stage == CONTROL_STAGE_SETUP) { + // only transition to next state on CONTROL_STAGE_ACK + dfu_state_t next_state; + uint32_t timeout; + + if (_dfu_ctx.flashing_in_progress) { + next_state = DFU_MANIFEST; + timeout = tud_dfu_get_timeout_cb(_dfu_ctx.alt, next_state); + } else { + next_state = DFU_IDLE; + timeout = 0; + } - return reply_getstatus(rhport, request, next_state, _dfu_ctx.status, timeout); - } - else if ( stage == CONTROL_STAGE_ACK ) - { - if ( _dfu_ctx.flashing_in_progress ) - { - _dfu_ctx.state = DFU_MANIFEST; - tud_dfu_manifest_cb(_dfu_ctx.alt); - } - else - { - _dfu_ctx.state = DFU_IDLE; + return reply_getstatus(rhport, request, next_state, _dfu_ctx.status, timeout); + } else if (stage == CONTROL_STAGE_ACK) { + if (_dfu_ctx.flashing_in_progress) { + _dfu_ctx.state = DFU_MANIFEST; + tud_dfu_manifest_cb(_dfu_ctx.alt); + } else { + _dfu_ctx.state = DFU_IDLE; + } } - } - return true; + return true; } -static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const * request, dfu_state_t state, dfu_status_t status, uint32_t timeout) +static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const *request, + dfu_state_t state, dfu_status_t status, uint32_t timeout) { - dfu_status_response_t resp; - resp.bStatus = (uint8_t) status; - resp.bwPollTimeout[0] = TU_U32_BYTE0(timeout); - resp.bwPollTimeout[1] = TU_U32_BYTE1(timeout); - resp.bwPollTimeout[2] = TU_U32_BYTE2(timeout); - resp.bState = (uint8_t) state; - resp.iString = 0; - - return tud_control_xfer(rhport, request, &resp, sizeof(dfu_status_response_t)); + dfu_status_response_t resp; + resp.bStatus = (uint8_t)status; + resp.bwPollTimeout[0] = TU_U32_BYTE0(timeout); + resp.bwPollTimeout[1] = TU_U32_BYTE1(timeout); + resp.bwPollTimeout[2] = TU_U32_BYTE2(timeout); + resp.bState = (uint8_t)state; + resp.iString = 0; + + return tud_control_xfer(rhport, request, &resp, sizeof(dfu_status_response_t)); } #endif diff --git a/Libraries/tinyusb/src/class/dfu/dfu_device.h b/Libraries/tinyusb/src/class/dfu/dfu_device.h index 00c22ea8bae..07a8982c45f 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu_device.h +++ b/Libraries/tinyusb/src/class/dfu/dfu_device.h @@ -30,7 +30,7 @@ #include "dfu.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -38,7 +38,8 @@ //--------------------------------------------------------------------+ #if !defined(CFG_TUD_DFU_XFER_BUFSIZE) - #error "CFG_TUD_DFU_XFER_BUFSIZE must be defined, it has to be set to the buffer size used in TUD_DFU_DESCRIPTOR" +#error \ + "CFG_TUD_DFU_XFER_BUFSIZE must be defined, it has to be set to the buffer size used in TUD_DFU_DESCRIPTOR" #endif //--------------------------------------------------------------------+ @@ -64,7 +65,7 @@ uint32_t tud_dfu_get_timeout_cb(uint8_t alt, uint8_t state); // Invoked when received DFU_DNLOAD (wLength>0) following by DFU_GETSTATUS (state=DFU_DNBUSY) requests // This callback could be returned before flashing op is complete (async). // Once finished flashing, application must call tud_dfu_finish_flashing() -void tud_dfu_download_cb (uint8_t alt, uint16_t block_num, uint8_t const *data, uint16_t length); +void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const *data, uint16_t length); // Invoked when download process is complete, received DFU_DNLOAD (wLength=0) following by DFU_GETSTATUS (state=Manifest) // Application can do checksum, or actual flashing if buffered entire image previously. @@ -74,7 +75,8 @@ void tud_dfu_manifest_cb(uint8_t alt); // Invoked when received DFU_UPLOAD request // Application must populate data with up to length bytes and // Return the number of written bytes -TU_ATTR_WEAK uint16_t tud_dfu_upload_cb(uint8_t alt, uint16_t block_num, uint8_t* data, uint16_t length); +TU_ATTR_WEAK uint16_t tud_dfu_upload_cb(uint8_t alt, uint16_t block_num, uint8_t *data, + uint16_t length); // Invoked when a DFU_DETACH request is received TU_ATTR_WEAK void tud_dfu_detach_cb(void); @@ -85,15 +87,15 @@ TU_ATTR_WEAK void tud_dfu_abort_cb(uint8_t alt); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void dfu_moded_init(void); -bool dfu_moded_deinit(void); -void dfu_moded_reset(uint8_t rhport); -uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); - +void dfu_moded_init(void); +bool dfu_moded_deinit(void); +void dfu_moded_reset(uint8_t rhport); +uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_DFU_MODE_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/dfu/dfu_rt_device.c b/Libraries/tinyusb/src/class/dfu/dfu_rt_device.c index 3b801b78767..dbedce14d4f 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu_rt_device.c +++ b/Libraries/tinyusb/src/class/dfu/dfu_rt_device.c @@ -39,10 +39,10 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_DFU_RUNTIME_LOG_LEVEL - #define CFG_TUD_DFU_RUNTIME_LOG_LEVEL CFG_TUD_LOG_LEVEL +#define CFG_TUD_DFU_RUNTIME_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_RUNTIME_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_RUNTIME_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION @@ -51,88 +51,82 @@ //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void dfu_rtd_init(void) { -} +void dfu_rtd_init(void) {} -bool dfu_rtd_deinit(void) { - return true; +bool dfu_rtd_deinit(void) +{ + return true; } void dfu_rtd_reset(uint8_t rhport) { - (void) rhport; + (void)rhport; } -uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) +uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - (void) rhport; - (void) max_len; + (void)rhport; + (void)max_len; - // Ensure this is DFU Runtime - TU_VERIFY((itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS) && - (itf_desc->bInterfaceProtocol == DFU_PROTOCOL_RT), 0); + // Ensure this is DFU Runtime + TU_VERIFY((itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS) && + (itf_desc->bInterfaceProtocol == DFU_PROTOCOL_RT), + 0); - uint8_t const * p_desc = tu_desc_next( itf_desc ); - uint16_t drv_len = sizeof(tusb_desc_interface_t); + uint8_t const *p_desc = tu_desc_next(itf_desc); + uint16_t drv_len = sizeof(tusb_desc_interface_t); - if ( TUSB_DESC_FUNCTIONAL == tu_desc_type(p_desc) ) - { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + if (TUSB_DESC_FUNCTIONAL == tu_desc_type(p_desc)) { + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - // nothing to do with DATA or ACK stage - if ( stage != CONTROL_STAGE_SETUP ) return true; + // nothing to do with DATA or ACK stage + if (stage != CONTROL_STAGE_SETUP) + return true; - TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); + TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); - // dfu-util will try to claim the interface with SET_INTERFACE request before sending DFU request - if ( TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && - TUSB_REQ_SET_INTERFACE == request->bRequest ) - { - tud_control_status(rhport, request); - return true; - } - - // Handle class request only from here - TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - - switch (request->bRequest) - { - case DFU_REQUEST_DETACH: - { - TU_LOG_DRV(" DFU RT Request: DETACH\r\n"); - tud_control_status(rhport, request); - tud_dfu_runtime_reboot_to_dfu_cb(); - } - break; - - case DFU_REQUEST_GETSTATUS: - { - TU_LOG_DRV(" DFU RT Request: GETSTATUS\r\n"); - dfu_status_response_t resp; - // Status = OK, Poll timeout is ignored during RT, State = APP_IDLE, IString = 0 - TU_VERIFY(tu_memset_s(&resp, sizeof(resp), 0x00, sizeof(resp))==0); - tud_control_xfer(rhport, request, &resp, sizeof(dfu_status_response_t)); + // dfu-util will try to claim the interface with SET_INTERFACE request before sending DFU request + if (TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && + TUSB_REQ_SET_INTERFACE == request->bRequest) { + tud_control_status(rhport, request); + return true; } - break; - default: - { - TU_LOG_DRV(" DFU RT Unexpected Request: %d\r\n", request->bRequest); - return false; // stall unsupported request + // Handle class request only from here + TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); + + switch (request->bRequest) { + case DFU_REQUEST_DETACH: { + TU_LOG_DRV(" DFU RT Request: DETACH\r\n"); + tud_control_status(rhport, request); + tud_dfu_runtime_reboot_to_dfu_cb(); + } break; + + case DFU_REQUEST_GETSTATUS: { + TU_LOG_DRV(" DFU RT Request: GETSTATUS\r\n"); + dfu_status_response_t resp; + // Status = OK, Poll timeout is ignored during RT, State = APP_IDLE, IString = 0 + TU_VERIFY(tu_memset_s(&resp, sizeof(resp), 0x00, sizeof(resp)) == 0); + tud_control_xfer(rhport, request, &resp, sizeof(dfu_status_response_t)); + } break; + + default: { + TU_LOG_DRV(" DFU RT Unexpected Request: %d\r\n", request->bRequest); + return false; // stall unsupported request + } } - } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/dfu/dfu_rt_device.h b/Libraries/tinyusb/src/class/dfu/dfu_rt_device.h index 67eb26d9574..c444d3ad4da 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu_rt_device.h +++ b/Libraries/tinyusb/src/class/dfu/dfu_rt_device.h @@ -30,7 +30,7 @@ #include "dfu.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -42,14 +42,14 @@ void tud_dfu_runtime_reboot_to_dfu_cb(void); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void dfu_rtd_init(void); -bool dfu_rtd_deinit(void); -void dfu_rtd_reset(uint8_t rhport); -uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +void dfu_rtd_init(void); +bool dfu_rtd_deinit(void); +void dfu_rtd_reset(uint8_t rhport); +uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_DFU_RT_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/hid/hid.h b/Libraries/tinyusb/src/class/hid/hid.h index c2b5a8a4823..4b28b62ccfc 100644 --- a/Libraries/tinyusb/src/class/hid/hid.h +++ b/Libraries/tinyusb/src/class/hid/hid.h @@ -34,7 +34,7 @@ #include "common/tusb_common.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -44,109 +44,99 @@ * @{ */ /// USB HID Descriptor -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength; /**< Numeric expression that is the total size of the HID descriptor */ - uint8_t bDescriptorType; /**< Constant name specifying type of HID descriptor. */ +typedef struct TU_ATTR_PACKED { + uint8_t bLength; /**< Numeric expression that is the total size of the HID descriptor */ + uint8_t bDescriptorType; /**< Constant name specifying type of HID descriptor. */ - uint16_t bcdHID; /**< Numeric expression identifying the HID Class Specification release */ - uint8_t bCountryCode; /**< Numeric expression identifying country code of the localized hardware. */ - uint8_t bNumDescriptors; /**< Numeric expression specifying the number of class descriptors */ + uint16_t bcdHID; /**< Numeric expression identifying the HID Class Specification release */ + uint8_t + bCountryCode; /**< Numeric expression identifying country code of the localized hardware. */ + uint8_t bNumDescriptors; /**< Numeric expression specifying the number of class descriptors */ - uint8_t bReportType; /**< Type of HID class report. */ - uint16_t wReportLength; /**< the total size of the Report descriptor. */ + uint8_t bReportType; /**< Type of HID class report. */ + uint16_t wReportLength; /**< the total size of the Report descriptor. */ } tusb_hid_descriptor_hid_t; /// HID Subclass -typedef enum -{ - HID_SUBCLASS_NONE = 0, ///< No Subclass - HID_SUBCLASS_BOOT = 1 ///< Boot Interface Subclass -}hid_subclass_enum_t; +typedef enum { + HID_SUBCLASS_NONE = 0, ///< No Subclass + HID_SUBCLASS_BOOT = 1 ///< Boot Interface Subclass +} hid_subclass_enum_t; /// HID Interface Protocol -typedef enum -{ - HID_ITF_PROTOCOL_NONE = 0, ///< None - HID_ITF_PROTOCOL_KEYBOARD = 1, ///< Keyboard - HID_ITF_PROTOCOL_MOUSE = 2 ///< Mouse -}hid_interface_protocol_enum_t; +typedef enum { + HID_ITF_PROTOCOL_NONE = 0, ///< None + HID_ITF_PROTOCOL_KEYBOARD = 1, ///< Keyboard + HID_ITF_PROTOCOL_MOUSE = 2 ///< Mouse +} hid_interface_protocol_enum_t; /// HID Descriptor Type -typedef enum -{ - HID_DESC_TYPE_HID = 0x21, ///< HID Descriptor - HID_DESC_TYPE_REPORT = 0x22, ///< Report Descriptor - HID_DESC_TYPE_PHYSICAL = 0x23 ///< Physical Descriptor -}hid_descriptor_enum_t; +typedef enum { + HID_DESC_TYPE_HID = 0x21, ///< HID Descriptor + HID_DESC_TYPE_REPORT = 0x22, ///< Report Descriptor + HID_DESC_TYPE_PHYSICAL = 0x23 ///< Physical Descriptor +} hid_descriptor_enum_t; /// HID Request Report Type -typedef enum -{ - HID_REPORT_TYPE_INVALID = 0, - HID_REPORT_TYPE_INPUT, ///< Input - HID_REPORT_TYPE_OUTPUT, ///< Output - HID_REPORT_TYPE_FEATURE ///< Feature -}hid_report_type_t; +typedef enum { + HID_REPORT_TYPE_INVALID = 0, + HID_REPORT_TYPE_INPUT, ///< Input + HID_REPORT_TYPE_OUTPUT, ///< Output + HID_REPORT_TYPE_FEATURE ///< Feature +} hid_report_type_t; /// HID Class Specific Control Request -typedef enum -{ - HID_REQ_CONTROL_GET_REPORT = 0x01, ///< Get Report - HID_REQ_CONTROL_GET_IDLE = 0x02, ///< Get Idle - HID_REQ_CONTROL_GET_PROTOCOL = 0x03, ///< Get Protocol - HID_REQ_CONTROL_SET_REPORT = 0x09, ///< Set Report - HID_REQ_CONTROL_SET_IDLE = 0x0a, ///< Set Idle - HID_REQ_CONTROL_SET_PROTOCOL = 0x0b ///< Set Protocol -}hid_request_enum_t; +typedef enum { + HID_REQ_CONTROL_GET_REPORT = 0x01, ///< Get Report + HID_REQ_CONTROL_GET_IDLE = 0x02, ///< Get Idle + HID_REQ_CONTROL_GET_PROTOCOL = 0x03, ///< Get Protocol + HID_REQ_CONTROL_SET_REPORT = 0x09, ///< Set Report + HID_REQ_CONTROL_SET_IDLE = 0x0a, ///< Set Idle + HID_REQ_CONTROL_SET_PROTOCOL = 0x0b ///< Set Protocol +} hid_request_enum_t; /// HID Local Code -typedef enum -{ - HID_LOCAL_NotSupported = 0 , ///< NotSupported - HID_LOCAL_Arabic , ///< Arabic - HID_LOCAL_Belgian , ///< Belgian - HID_LOCAL_Canadian_Bilingual , ///< Canadian_Bilingual - HID_LOCAL_Canadian_French , ///< Canadian_French - HID_LOCAL_Czech_Republic , ///< Czech_Republic - HID_LOCAL_Danish , ///< Danish - HID_LOCAL_Finnish , ///< Finnish - HID_LOCAL_French , ///< French - HID_LOCAL_German , ///< German - HID_LOCAL_Greek , ///< Greek - HID_LOCAL_Hebrew , ///< Hebrew - HID_LOCAL_Hungary , ///< Hungary - HID_LOCAL_International , ///< International - HID_LOCAL_Italian , ///< Italian - HID_LOCAL_Japan_Katakana , ///< Japan_Katakana - HID_LOCAL_Korean , ///< Korean - HID_LOCAL_Latin_American , ///< Latin_American - HID_LOCAL_Netherlands_Dutch , ///< Netherlands/Dutch - HID_LOCAL_Norwegian , ///< Norwegian - HID_LOCAL_Persian_Farsi , ///< Persian (Farsi) - HID_LOCAL_Poland , ///< Poland - HID_LOCAL_Portuguese , ///< Portuguese - HID_LOCAL_Russia , ///< Russia - HID_LOCAL_Slovakia , ///< Slovakia - HID_LOCAL_Spanish , ///< Spanish - HID_LOCAL_Swedish , ///< Swedish - HID_LOCAL_Swiss_French , ///< Swiss/French - HID_LOCAL_Swiss_German , ///< Swiss/German - HID_LOCAL_Switzerland , ///< Switzerland - HID_LOCAL_Taiwan , ///< Taiwan - HID_LOCAL_Turkish_Q , ///< Turkish-Q - HID_LOCAL_UK , ///< UK - HID_LOCAL_US , ///< US - HID_LOCAL_Yugoslavia , ///< Yugoslavia - HID_LOCAL_Turkish_F ///< Turkish-F +typedef enum { + HID_LOCAL_NotSupported = 0, ///< NotSupported + HID_LOCAL_Arabic, ///< Arabic + HID_LOCAL_Belgian, ///< Belgian + HID_LOCAL_Canadian_Bilingual, ///< Canadian_Bilingual + HID_LOCAL_Canadian_French, ///< Canadian_French + HID_LOCAL_Czech_Republic, ///< Czech_Republic + HID_LOCAL_Danish, ///< Danish + HID_LOCAL_Finnish, ///< Finnish + HID_LOCAL_French, ///< French + HID_LOCAL_German, ///< German + HID_LOCAL_Greek, ///< Greek + HID_LOCAL_Hebrew, ///< Hebrew + HID_LOCAL_Hungary, ///< Hungary + HID_LOCAL_International, ///< International + HID_LOCAL_Italian, ///< Italian + HID_LOCAL_Japan_Katakana, ///< Japan_Katakana + HID_LOCAL_Korean, ///< Korean + HID_LOCAL_Latin_American, ///< Latin_American + HID_LOCAL_Netherlands_Dutch, ///< Netherlands/Dutch + HID_LOCAL_Norwegian, ///< Norwegian + HID_LOCAL_Persian_Farsi, ///< Persian (Farsi) + HID_LOCAL_Poland, ///< Poland + HID_LOCAL_Portuguese, ///< Portuguese + HID_LOCAL_Russia, ///< Russia + HID_LOCAL_Slovakia, ///< Slovakia + HID_LOCAL_Spanish, ///< Spanish + HID_LOCAL_Swedish, ///< Swedish + HID_LOCAL_Swiss_French, ///< Swiss/French + HID_LOCAL_Swiss_German, ///< Swiss/German + HID_LOCAL_Switzerland, ///< Switzerland + HID_LOCAL_Taiwan, ///< Taiwan + HID_LOCAL_Turkish_Q, ///< Turkish-Q + HID_LOCAL_UK, ///< UK + HID_LOCAL_US, ///< US + HID_LOCAL_Yugoslavia, ///< Yugoslavia + HID_LOCAL_Turkish_F ///< Turkish-F } hid_local_enum_t; // HID protocol value used by GetProtocol / SetProtocol -typedef enum -{ - HID_PROTOCOL_BOOT = 0, - HID_PROTOCOL_REPORT = 1 -} hid_protocol_mode_enum_t; +typedef enum { HID_PROTOCOL_BOOT = 0, HID_PROTOCOL_REPORT = 1 } hid_protocol_mode_enum_t; /** @} */ @@ -192,95 +182,92 @@ typedef enum */ /// HID Gamepad Protocol Report. -typedef struct TU_ATTR_PACKED -{ - int8_t x; ///< Delta x movement of left analog-stick - int8_t y; ///< Delta y movement of left analog-stick - int8_t z; ///< Delta z movement of right analog-joystick - int8_t rz; ///< Delta Rz movement of right analog-joystick - int8_t rx; ///< Delta Rx movement of analog left trigger - int8_t ry; ///< Delta Ry movement of analog right trigger - uint8_t hat; ///< Buttons mask for currently pressed buttons in the DPad/hat - uint32_t buttons; ///< Buttons mask for currently pressed buttons -}hid_gamepad_report_t; +typedef struct TU_ATTR_PACKED { + int8_t x; ///< Delta x movement of left analog-stick + int8_t y; ///< Delta y movement of left analog-stick + int8_t z; ///< Delta z movement of right analog-joystick + int8_t rz; ///< Delta Rz movement of right analog-joystick + int8_t rx; ///< Delta Rx movement of analog left trigger + int8_t ry; ///< Delta Ry movement of analog right trigger + uint8_t hat; ///< Buttons mask for currently pressed buttons in the DPad/hat + uint32_t buttons; ///< Buttons mask for currently pressed buttons +} hid_gamepad_report_t; /// Standard Gamepad Buttons Bitmap -typedef enum -{ - GAMEPAD_BUTTON_0 = TU_BIT(0), - GAMEPAD_BUTTON_1 = TU_BIT(1), - GAMEPAD_BUTTON_2 = TU_BIT(2), - GAMEPAD_BUTTON_3 = TU_BIT(3), - GAMEPAD_BUTTON_4 = TU_BIT(4), - GAMEPAD_BUTTON_5 = TU_BIT(5), - GAMEPAD_BUTTON_6 = TU_BIT(6), - GAMEPAD_BUTTON_7 = TU_BIT(7), - GAMEPAD_BUTTON_8 = TU_BIT(8), - GAMEPAD_BUTTON_9 = TU_BIT(9), - GAMEPAD_BUTTON_10 = TU_BIT(10), - GAMEPAD_BUTTON_11 = TU_BIT(11), - GAMEPAD_BUTTON_12 = TU_BIT(12), - GAMEPAD_BUTTON_13 = TU_BIT(13), - GAMEPAD_BUTTON_14 = TU_BIT(14), - GAMEPAD_BUTTON_15 = TU_BIT(15), - GAMEPAD_BUTTON_16 = TU_BIT(16), - GAMEPAD_BUTTON_17 = TU_BIT(17), - GAMEPAD_BUTTON_18 = TU_BIT(18), - GAMEPAD_BUTTON_19 = TU_BIT(19), - GAMEPAD_BUTTON_20 = TU_BIT(20), - GAMEPAD_BUTTON_21 = TU_BIT(21), - GAMEPAD_BUTTON_22 = TU_BIT(22), - GAMEPAD_BUTTON_23 = TU_BIT(23), - GAMEPAD_BUTTON_24 = TU_BIT(24), - GAMEPAD_BUTTON_25 = TU_BIT(25), - GAMEPAD_BUTTON_26 = TU_BIT(26), - GAMEPAD_BUTTON_27 = TU_BIT(27), - GAMEPAD_BUTTON_28 = TU_BIT(28), - GAMEPAD_BUTTON_29 = TU_BIT(29), - GAMEPAD_BUTTON_30 = TU_BIT(30), - GAMEPAD_BUTTON_31 = TU_BIT(31), -}hid_gamepad_button_bm_t; +typedef enum { + GAMEPAD_BUTTON_0 = TU_BIT(0), + GAMEPAD_BUTTON_1 = TU_BIT(1), + GAMEPAD_BUTTON_2 = TU_BIT(2), + GAMEPAD_BUTTON_3 = TU_BIT(3), + GAMEPAD_BUTTON_4 = TU_BIT(4), + GAMEPAD_BUTTON_5 = TU_BIT(5), + GAMEPAD_BUTTON_6 = TU_BIT(6), + GAMEPAD_BUTTON_7 = TU_BIT(7), + GAMEPAD_BUTTON_8 = TU_BIT(8), + GAMEPAD_BUTTON_9 = TU_BIT(9), + GAMEPAD_BUTTON_10 = TU_BIT(10), + GAMEPAD_BUTTON_11 = TU_BIT(11), + GAMEPAD_BUTTON_12 = TU_BIT(12), + GAMEPAD_BUTTON_13 = TU_BIT(13), + GAMEPAD_BUTTON_14 = TU_BIT(14), + GAMEPAD_BUTTON_15 = TU_BIT(15), + GAMEPAD_BUTTON_16 = TU_BIT(16), + GAMEPAD_BUTTON_17 = TU_BIT(17), + GAMEPAD_BUTTON_18 = TU_BIT(18), + GAMEPAD_BUTTON_19 = TU_BIT(19), + GAMEPAD_BUTTON_20 = TU_BIT(20), + GAMEPAD_BUTTON_21 = TU_BIT(21), + GAMEPAD_BUTTON_22 = TU_BIT(22), + GAMEPAD_BUTTON_23 = TU_BIT(23), + GAMEPAD_BUTTON_24 = TU_BIT(24), + GAMEPAD_BUTTON_25 = TU_BIT(25), + GAMEPAD_BUTTON_26 = TU_BIT(26), + GAMEPAD_BUTTON_27 = TU_BIT(27), + GAMEPAD_BUTTON_28 = TU_BIT(28), + GAMEPAD_BUTTON_29 = TU_BIT(29), + GAMEPAD_BUTTON_30 = TU_BIT(30), + GAMEPAD_BUTTON_31 = TU_BIT(31), +} hid_gamepad_button_bm_t; /// Standard Gamepad Buttons Naming from Linux input event codes /// https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h -#define GAMEPAD_BUTTON_A GAMEPAD_BUTTON_0 -#define GAMEPAD_BUTTON_SOUTH GAMEPAD_BUTTON_0 +#define GAMEPAD_BUTTON_A GAMEPAD_BUTTON_0 +#define GAMEPAD_BUTTON_SOUTH GAMEPAD_BUTTON_0 -#define GAMEPAD_BUTTON_B GAMEPAD_BUTTON_1 -#define GAMEPAD_BUTTON_EAST GAMEPAD_BUTTON_1 +#define GAMEPAD_BUTTON_B GAMEPAD_BUTTON_1 +#define GAMEPAD_BUTTON_EAST GAMEPAD_BUTTON_1 -#define GAMEPAD_BUTTON_C GAMEPAD_BUTTON_2 +#define GAMEPAD_BUTTON_C GAMEPAD_BUTTON_2 -#define GAMEPAD_BUTTON_X GAMEPAD_BUTTON_3 -#define GAMEPAD_BUTTON_NORTH GAMEPAD_BUTTON_3 +#define GAMEPAD_BUTTON_X GAMEPAD_BUTTON_3 +#define GAMEPAD_BUTTON_NORTH GAMEPAD_BUTTON_3 -#define GAMEPAD_BUTTON_Y GAMEPAD_BUTTON_4 -#define GAMEPAD_BUTTON_WEST GAMEPAD_BUTTON_4 +#define GAMEPAD_BUTTON_Y GAMEPAD_BUTTON_4 +#define GAMEPAD_BUTTON_WEST GAMEPAD_BUTTON_4 -#define GAMEPAD_BUTTON_Z GAMEPAD_BUTTON_5 -#define GAMEPAD_BUTTON_TL GAMEPAD_BUTTON_6 -#define GAMEPAD_BUTTON_TR GAMEPAD_BUTTON_7 -#define GAMEPAD_BUTTON_TL2 GAMEPAD_BUTTON_8 -#define GAMEPAD_BUTTON_TR2 GAMEPAD_BUTTON_9 -#define GAMEPAD_BUTTON_SELECT GAMEPAD_BUTTON_10 -#define GAMEPAD_BUTTON_START GAMEPAD_BUTTON_11 -#define GAMEPAD_BUTTON_MODE GAMEPAD_BUTTON_12 -#define GAMEPAD_BUTTON_THUMBL GAMEPAD_BUTTON_13 -#define GAMEPAD_BUTTON_THUMBR GAMEPAD_BUTTON_14 +#define GAMEPAD_BUTTON_Z GAMEPAD_BUTTON_5 +#define GAMEPAD_BUTTON_TL GAMEPAD_BUTTON_6 +#define GAMEPAD_BUTTON_TR GAMEPAD_BUTTON_7 +#define GAMEPAD_BUTTON_TL2 GAMEPAD_BUTTON_8 +#define GAMEPAD_BUTTON_TR2 GAMEPAD_BUTTON_9 +#define GAMEPAD_BUTTON_SELECT GAMEPAD_BUTTON_10 +#define GAMEPAD_BUTTON_START GAMEPAD_BUTTON_11 +#define GAMEPAD_BUTTON_MODE GAMEPAD_BUTTON_12 +#define GAMEPAD_BUTTON_THUMBL GAMEPAD_BUTTON_13 +#define GAMEPAD_BUTTON_THUMBR GAMEPAD_BUTTON_14 /// Standard Gamepad HAT/DPAD Buttons (from Linux input event codes) -typedef enum -{ - GAMEPAD_HAT_CENTERED = 0, ///< DPAD_CENTERED - GAMEPAD_HAT_UP = 1, ///< DPAD_UP - GAMEPAD_HAT_UP_RIGHT = 2, ///< DPAD_UP_RIGHT - GAMEPAD_HAT_RIGHT = 3, ///< DPAD_RIGHT - GAMEPAD_HAT_DOWN_RIGHT = 4, ///< DPAD_DOWN_RIGHT - GAMEPAD_HAT_DOWN = 5, ///< DPAD_DOWN - GAMEPAD_HAT_DOWN_LEFT = 6, ///< DPAD_DOWN_LEFT - GAMEPAD_HAT_LEFT = 7, ///< DPAD_LEFT - GAMEPAD_HAT_UP_LEFT = 8, ///< DPAD_UP_LEFT -}hid_gamepad_hat_t; +typedef enum { + GAMEPAD_HAT_CENTERED = 0, ///< DPAD_CENTERED + GAMEPAD_HAT_UP = 1, ///< DPAD_UP + GAMEPAD_HAT_UP_RIGHT = 2, ///< DPAD_UP_RIGHT + GAMEPAD_HAT_RIGHT = 3, ///< DPAD_RIGHT + GAMEPAD_HAT_DOWN_RIGHT = 4, ///< DPAD_DOWN_RIGHT + GAMEPAD_HAT_DOWN = 5, ///< DPAD_DOWN + GAMEPAD_HAT_DOWN_LEFT = 6, ///< DPAD_DOWN_LEFT + GAMEPAD_HAT_LEFT = 7, ///< DPAD_LEFT + GAMEPAD_HAT_UP_LEFT = 8, ///< DPAD_UP_LEFT +} hid_gamepad_hat_t; /// @} @@ -291,37 +278,32 @@ typedef enum * @{ */ /// Standard HID Boot Protocol Mouse Report. -typedef struct TU_ATTR_PACKED -{ - uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */ - int8_t x; /**< Current delta x movement of the mouse. */ - int8_t y; /**< Current delta y movement on the mouse. */ - int8_t wheel; /**< Current delta wheel movement on the mouse. */ - int8_t pan; // using AC Pan +typedef struct TU_ATTR_PACKED { + uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */ + int8_t x; /**< Current delta x movement of the mouse. */ + int8_t y; /**< Current delta y movement on the mouse. */ + int8_t wheel; /**< Current delta wheel movement on the mouse. */ + int8_t pan; // using AC Pan } hid_mouse_report_t; - // Absolute Mouse: same as the Standard (relative) Mouse Report but // with int16_t instead of int8_t for X and Y coordinates. -typedef struct TU_ATTR_PACKED -{ +typedef struct TU_ATTR_PACKED { uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */ - int16_t x; /**< Current x position of the mouse. */ - int16_t y; /**< Current y position of the mouse. */ - int8_t wheel; /**< Current delta wheel movement on the mouse. */ - int8_t pan; // using AC Pan + int16_t x; /**< Current x position of the mouse. */ + int16_t y; /**< Current y position of the mouse. */ + int8_t wheel; /**< Current delta wheel movement on the mouse. */ + int8_t pan; // using AC Pan } hid_abs_mouse_report_t; - /// Standard Mouse Buttons Bitmap -typedef enum -{ - MOUSE_BUTTON_LEFT = TU_BIT(0), ///< Left button - MOUSE_BUTTON_RIGHT = TU_BIT(1), ///< Right button - MOUSE_BUTTON_MIDDLE = TU_BIT(2), ///< Middle button - MOUSE_BUTTON_BACKWARD = TU_BIT(3), ///< Backward button, - MOUSE_BUTTON_FORWARD = TU_BIT(4), ///< Forward button, -}hid_mouse_button_bm_t; +typedef enum { + MOUSE_BUTTON_LEFT = TU_BIT(0), ///< Left button + MOUSE_BUTTON_RIGHT = TU_BIT(1), ///< Right button + MOUSE_BUTTON_MIDDLE = TU_BIT(2), ///< Middle button + MOUSE_BUTTON_BACKWARD = TU_BIT(3), ///< Backward button, + MOUSE_BUTTON_FORWARD = TU_BIT(4), ///< Forward button, +} hid_mouse_button_bm_t; /// @} @@ -332,259 +314,255 @@ typedef enum * @{ */ /// Standard HID Boot Protocol Keyboard Report. -typedef struct TU_ATTR_PACKED -{ - uint8_t modifier; /**< Keyboard modifier (KEYBOARD_MODIFIER_* masks). */ - uint8_t reserved; /**< Reserved for OEM use, always set to 0. */ - uint8_t keycode[6]; /**< Key codes of the currently pressed keys. */ +typedef struct TU_ATTR_PACKED { + uint8_t modifier; /**< Keyboard modifier (KEYBOARD_MODIFIER_* masks). */ + uint8_t reserved; /**< Reserved for OEM use, always set to 0. */ + uint8_t keycode[6]; /**< Key codes of the currently pressed keys. */ } hid_keyboard_report_t; /// Keyboard modifier codes bitmap -typedef enum -{ - KEYBOARD_MODIFIER_LEFTCTRL = TU_BIT(0), ///< Left Control - KEYBOARD_MODIFIER_LEFTSHIFT = TU_BIT(1), ///< Left Shift - KEYBOARD_MODIFIER_LEFTALT = TU_BIT(2), ///< Left Alt - KEYBOARD_MODIFIER_LEFTGUI = TU_BIT(3), ///< Left Window - KEYBOARD_MODIFIER_RIGHTCTRL = TU_BIT(4), ///< Right Control - KEYBOARD_MODIFIER_RIGHTSHIFT = TU_BIT(5), ///< Right Shift - KEYBOARD_MODIFIER_RIGHTALT = TU_BIT(6), ///< Right Alt - KEYBOARD_MODIFIER_RIGHTGUI = TU_BIT(7) ///< Right Window -}hid_keyboard_modifier_bm_t; - -typedef enum -{ - KEYBOARD_LED_NUMLOCK = TU_BIT(0), ///< Num Lock LED - KEYBOARD_LED_CAPSLOCK = TU_BIT(1), ///< Caps Lock LED - KEYBOARD_LED_SCROLLLOCK = TU_BIT(2), ///< Scroll Lock LED - KEYBOARD_LED_COMPOSE = TU_BIT(3), ///< Composition Mode - KEYBOARD_LED_KANA = TU_BIT(4) ///< Kana mode -}hid_keyboard_led_bm_t; +typedef enum { + KEYBOARD_MODIFIER_LEFTCTRL = TU_BIT(0), ///< Left Control + KEYBOARD_MODIFIER_LEFTSHIFT = TU_BIT(1), ///< Left Shift + KEYBOARD_MODIFIER_LEFTALT = TU_BIT(2), ///< Left Alt + KEYBOARD_MODIFIER_LEFTGUI = TU_BIT(3), ///< Left Window + KEYBOARD_MODIFIER_RIGHTCTRL = TU_BIT(4), ///< Right Control + KEYBOARD_MODIFIER_RIGHTSHIFT = TU_BIT(5), ///< Right Shift + KEYBOARD_MODIFIER_RIGHTALT = TU_BIT(6), ///< Right Alt + KEYBOARD_MODIFIER_RIGHTGUI = TU_BIT(7) ///< Right Window +} hid_keyboard_modifier_bm_t; + +typedef enum { + KEYBOARD_LED_NUMLOCK = TU_BIT(0), ///< Num Lock LED + KEYBOARD_LED_CAPSLOCK = TU_BIT(1), ///< Caps Lock LED + KEYBOARD_LED_SCROLLLOCK = TU_BIT(2), ///< Scroll Lock LED + KEYBOARD_LED_COMPOSE = TU_BIT(3), ///< Composition Mode + KEYBOARD_LED_KANA = TU_BIT(4) ///< Kana mode +} hid_keyboard_led_bm_t; /// @} //--------------------------------------------------------------------+ // HID KEYCODE //--------------------------------------------------------------------+ -#define HID_KEY_NONE 0x00 -#define HID_KEY_A 0x04 -#define HID_KEY_B 0x05 -#define HID_KEY_C 0x06 -#define HID_KEY_D 0x07 -#define HID_KEY_E 0x08 -#define HID_KEY_F 0x09 -#define HID_KEY_G 0x0A -#define HID_KEY_H 0x0B -#define HID_KEY_I 0x0C -#define HID_KEY_J 0x0D -#define HID_KEY_K 0x0E -#define HID_KEY_L 0x0F -#define HID_KEY_M 0x10 -#define HID_KEY_N 0x11 -#define HID_KEY_O 0x12 -#define HID_KEY_P 0x13 -#define HID_KEY_Q 0x14 -#define HID_KEY_R 0x15 -#define HID_KEY_S 0x16 -#define HID_KEY_T 0x17 -#define HID_KEY_U 0x18 -#define HID_KEY_V 0x19 -#define HID_KEY_W 0x1A -#define HID_KEY_X 0x1B -#define HID_KEY_Y 0x1C -#define HID_KEY_Z 0x1D -#define HID_KEY_1 0x1E -#define HID_KEY_2 0x1F -#define HID_KEY_3 0x20 -#define HID_KEY_4 0x21 -#define HID_KEY_5 0x22 -#define HID_KEY_6 0x23 -#define HID_KEY_7 0x24 -#define HID_KEY_8 0x25 -#define HID_KEY_9 0x26 -#define HID_KEY_0 0x27 -#define HID_KEY_ENTER 0x28 -#define HID_KEY_ESCAPE 0x29 -#define HID_KEY_BACKSPACE 0x2A -#define HID_KEY_TAB 0x2B -#define HID_KEY_SPACE 0x2C -#define HID_KEY_MINUS 0x2D -#define HID_KEY_EQUAL 0x2E -#define HID_KEY_BRACKET_LEFT 0x2F -#define HID_KEY_BRACKET_RIGHT 0x30 -#define HID_KEY_BACKSLASH 0x31 -#define HID_KEY_EUROPE_1 0x32 -#define HID_KEY_SEMICOLON 0x33 -#define HID_KEY_APOSTROPHE 0x34 -#define HID_KEY_GRAVE 0x35 -#define HID_KEY_COMMA 0x36 -#define HID_KEY_PERIOD 0x37 -#define HID_KEY_SLASH 0x38 -#define HID_KEY_CAPS_LOCK 0x39 -#define HID_KEY_F1 0x3A -#define HID_KEY_F2 0x3B -#define HID_KEY_F3 0x3C -#define HID_KEY_F4 0x3D -#define HID_KEY_F5 0x3E -#define HID_KEY_F6 0x3F -#define HID_KEY_F7 0x40 -#define HID_KEY_F8 0x41 -#define HID_KEY_F9 0x42 -#define HID_KEY_F10 0x43 -#define HID_KEY_F11 0x44 -#define HID_KEY_F12 0x45 -#define HID_KEY_PRINT_SCREEN 0x46 -#define HID_KEY_SCROLL_LOCK 0x47 -#define HID_KEY_PAUSE 0x48 -#define HID_KEY_INSERT 0x49 -#define HID_KEY_HOME 0x4A -#define HID_KEY_PAGE_UP 0x4B -#define HID_KEY_DELETE 0x4C -#define HID_KEY_END 0x4D -#define HID_KEY_PAGE_DOWN 0x4E -#define HID_KEY_ARROW_RIGHT 0x4F -#define HID_KEY_ARROW_LEFT 0x50 -#define HID_KEY_ARROW_DOWN 0x51 -#define HID_KEY_ARROW_UP 0x52 -#define HID_KEY_NUM_LOCK 0x53 -#define HID_KEY_KEYPAD_DIVIDE 0x54 -#define HID_KEY_KEYPAD_MULTIPLY 0x55 -#define HID_KEY_KEYPAD_SUBTRACT 0x56 -#define HID_KEY_KEYPAD_ADD 0x57 -#define HID_KEY_KEYPAD_ENTER 0x58 -#define HID_KEY_KEYPAD_1 0x59 -#define HID_KEY_KEYPAD_2 0x5A -#define HID_KEY_KEYPAD_3 0x5B -#define HID_KEY_KEYPAD_4 0x5C -#define HID_KEY_KEYPAD_5 0x5D -#define HID_KEY_KEYPAD_6 0x5E -#define HID_KEY_KEYPAD_7 0x5F -#define HID_KEY_KEYPAD_8 0x60 -#define HID_KEY_KEYPAD_9 0x61 -#define HID_KEY_KEYPAD_0 0x62 -#define HID_KEY_KEYPAD_DECIMAL 0x63 -#define HID_KEY_EUROPE_2 0x64 -#define HID_KEY_APPLICATION 0x65 -#define HID_KEY_POWER 0x66 -#define HID_KEY_KEYPAD_EQUAL 0x67 -#define HID_KEY_F13 0x68 -#define HID_KEY_F14 0x69 -#define HID_KEY_F15 0x6A -#define HID_KEY_F16 0x6B -#define HID_KEY_F17 0x6C -#define HID_KEY_F18 0x6D -#define HID_KEY_F19 0x6E -#define HID_KEY_F20 0x6F -#define HID_KEY_F21 0x70 -#define HID_KEY_F22 0x71 -#define HID_KEY_F23 0x72 -#define HID_KEY_F24 0x73 -#define HID_KEY_EXECUTE 0x74 -#define HID_KEY_HELP 0x75 -#define HID_KEY_MENU 0x76 -#define HID_KEY_SELECT 0x77 -#define HID_KEY_STOP 0x78 -#define HID_KEY_AGAIN 0x79 -#define HID_KEY_UNDO 0x7A -#define HID_KEY_CUT 0x7B -#define HID_KEY_COPY 0x7C -#define HID_KEY_PASTE 0x7D -#define HID_KEY_FIND 0x7E -#define HID_KEY_MUTE 0x7F -#define HID_KEY_VOLUME_UP 0x80 -#define HID_KEY_VOLUME_DOWN 0x81 -#define HID_KEY_LOCKING_CAPS_LOCK 0x82 -#define HID_KEY_LOCKING_NUM_LOCK 0x83 -#define HID_KEY_LOCKING_SCROLL_LOCK 0x84 -#define HID_KEY_KEYPAD_COMMA 0x85 -#define HID_KEY_KEYPAD_EQUAL_SIGN 0x86 -#define HID_KEY_KANJI1 0x87 -#define HID_KEY_KANJI2 0x88 -#define HID_KEY_KANJI3 0x89 -#define HID_KEY_KANJI4 0x8A -#define HID_KEY_KANJI5 0x8B -#define HID_KEY_KANJI6 0x8C -#define HID_KEY_KANJI7 0x8D -#define HID_KEY_KANJI8 0x8E -#define HID_KEY_KANJI9 0x8F -#define HID_KEY_LANG1 0x90 -#define HID_KEY_LANG2 0x91 -#define HID_KEY_LANG3 0x92 -#define HID_KEY_LANG4 0x93 -#define HID_KEY_LANG5 0x94 -#define HID_KEY_LANG6 0x95 -#define HID_KEY_LANG7 0x96 -#define HID_KEY_LANG8 0x97 -#define HID_KEY_LANG9 0x98 -#define HID_KEY_ALTERNATE_ERASE 0x99 -#define HID_KEY_SYSREQ_ATTENTION 0x9A -#define HID_KEY_CANCEL 0x9B -#define HID_KEY_CLEAR 0x9C -#define HID_KEY_PRIOR 0x9D -#define HID_KEY_RETURN 0x9E -#define HID_KEY_SEPARATOR 0x9F -#define HID_KEY_OUT 0xA0 -#define HID_KEY_OPER 0xA1 -#define HID_KEY_CLEAR_AGAIN 0xA2 -#define HID_KEY_CRSEL_PROPS 0xA3 -#define HID_KEY_EXSEL 0xA4 +#define HID_KEY_NONE 0x00 +#define HID_KEY_A 0x04 +#define HID_KEY_B 0x05 +#define HID_KEY_C 0x06 +#define HID_KEY_D 0x07 +#define HID_KEY_E 0x08 +#define HID_KEY_F 0x09 +#define HID_KEY_G 0x0A +#define HID_KEY_H 0x0B +#define HID_KEY_I 0x0C +#define HID_KEY_J 0x0D +#define HID_KEY_K 0x0E +#define HID_KEY_L 0x0F +#define HID_KEY_M 0x10 +#define HID_KEY_N 0x11 +#define HID_KEY_O 0x12 +#define HID_KEY_P 0x13 +#define HID_KEY_Q 0x14 +#define HID_KEY_R 0x15 +#define HID_KEY_S 0x16 +#define HID_KEY_T 0x17 +#define HID_KEY_U 0x18 +#define HID_KEY_V 0x19 +#define HID_KEY_W 0x1A +#define HID_KEY_X 0x1B +#define HID_KEY_Y 0x1C +#define HID_KEY_Z 0x1D +#define HID_KEY_1 0x1E +#define HID_KEY_2 0x1F +#define HID_KEY_3 0x20 +#define HID_KEY_4 0x21 +#define HID_KEY_5 0x22 +#define HID_KEY_6 0x23 +#define HID_KEY_7 0x24 +#define HID_KEY_8 0x25 +#define HID_KEY_9 0x26 +#define HID_KEY_0 0x27 +#define HID_KEY_ENTER 0x28 +#define HID_KEY_ESCAPE 0x29 +#define HID_KEY_BACKSPACE 0x2A +#define HID_KEY_TAB 0x2B +#define HID_KEY_SPACE 0x2C +#define HID_KEY_MINUS 0x2D +#define HID_KEY_EQUAL 0x2E +#define HID_KEY_BRACKET_LEFT 0x2F +#define HID_KEY_BRACKET_RIGHT 0x30 +#define HID_KEY_BACKSLASH 0x31 +#define HID_KEY_EUROPE_1 0x32 +#define HID_KEY_SEMICOLON 0x33 +#define HID_KEY_APOSTROPHE 0x34 +#define HID_KEY_GRAVE 0x35 +#define HID_KEY_COMMA 0x36 +#define HID_KEY_PERIOD 0x37 +#define HID_KEY_SLASH 0x38 +#define HID_KEY_CAPS_LOCK 0x39 +#define HID_KEY_F1 0x3A +#define HID_KEY_F2 0x3B +#define HID_KEY_F3 0x3C +#define HID_KEY_F4 0x3D +#define HID_KEY_F5 0x3E +#define HID_KEY_F6 0x3F +#define HID_KEY_F7 0x40 +#define HID_KEY_F8 0x41 +#define HID_KEY_F9 0x42 +#define HID_KEY_F10 0x43 +#define HID_KEY_F11 0x44 +#define HID_KEY_F12 0x45 +#define HID_KEY_PRINT_SCREEN 0x46 +#define HID_KEY_SCROLL_LOCK 0x47 +#define HID_KEY_PAUSE 0x48 +#define HID_KEY_INSERT 0x49 +#define HID_KEY_HOME 0x4A +#define HID_KEY_PAGE_UP 0x4B +#define HID_KEY_DELETE 0x4C +#define HID_KEY_END 0x4D +#define HID_KEY_PAGE_DOWN 0x4E +#define HID_KEY_ARROW_RIGHT 0x4F +#define HID_KEY_ARROW_LEFT 0x50 +#define HID_KEY_ARROW_DOWN 0x51 +#define HID_KEY_ARROW_UP 0x52 +#define HID_KEY_NUM_LOCK 0x53 +#define HID_KEY_KEYPAD_DIVIDE 0x54 +#define HID_KEY_KEYPAD_MULTIPLY 0x55 +#define HID_KEY_KEYPAD_SUBTRACT 0x56 +#define HID_KEY_KEYPAD_ADD 0x57 +#define HID_KEY_KEYPAD_ENTER 0x58 +#define HID_KEY_KEYPAD_1 0x59 +#define HID_KEY_KEYPAD_2 0x5A +#define HID_KEY_KEYPAD_3 0x5B +#define HID_KEY_KEYPAD_4 0x5C +#define HID_KEY_KEYPAD_5 0x5D +#define HID_KEY_KEYPAD_6 0x5E +#define HID_KEY_KEYPAD_7 0x5F +#define HID_KEY_KEYPAD_8 0x60 +#define HID_KEY_KEYPAD_9 0x61 +#define HID_KEY_KEYPAD_0 0x62 +#define HID_KEY_KEYPAD_DECIMAL 0x63 +#define HID_KEY_EUROPE_2 0x64 +#define HID_KEY_APPLICATION 0x65 +#define HID_KEY_POWER 0x66 +#define HID_KEY_KEYPAD_EQUAL 0x67 +#define HID_KEY_F13 0x68 +#define HID_KEY_F14 0x69 +#define HID_KEY_F15 0x6A +#define HID_KEY_F16 0x6B +#define HID_KEY_F17 0x6C +#define HID_KEY_F18 0x6D +#define HID_KEY_F19 0x6E +#define HID_KEY_F20 0x6F +#define HID_KEY_F21 0x70 +#define HID_KEY_F22 0x71 +#define HID_KEY_F23 0x72 +#define HID_KEY_F24 0x73 +#define HID_KEY_EXECUTE 0x74 +#define HID_KEY_HELP 0x75 +#define HID_KEY_MENU 0x76 +#define HID_KEY_SELECT 0x77 +#define HID_KEY_STOP 0x78 +#define HID_KEY_AGAIN 0x79 +#define HID_KEY_UNDO 0x7A +#define HID_KEY_CUT 0x7B +#define HID_KEY_COPY 0x7C +#define HID_KEY_PASTE 0x7D +#define HID_KEY_FIND 0x7E +#define HID_KEY_MUTE 0x7F +#define HID_KEY_VOLUME_UP 0x80 +#define HID_KEY_VOLUME_DOWN 0x81 +#define HID_KEY_LOCKING_CAPS_LOCK 0x82 +#define HID_KEY_LOCKING_NUM_LOCK 0x83 +#define HID_KEY_LOCKING_SCROLL_LOCK 0x84 +#define HID_KEY_KEYPAD_COMMA 0x85 +#define HID_KEY_KEYPAD_EQUAL_SIGN 0x86 +#define HID_KEY_KANJI1 0x87 +#define HID_KEY_KANJI2 0x88 +#define HID_KEY_KANJI3 0x89 +#define HID_KEY_KANJI4 0x8A +#define HID_KEY_KANJI5 0x8B +#define HID_KEY_KANJI6 0x8C +#define HID_KEY_KANJI7 0x8D +#define HID_KEY_KANJI8 0x8E +#define HID_KEY_KANJI9 0x8F +#define HID_KEY_LANG1 0x90 +#define HID_KEY_LANG2 0x91 +#define HID_KEY_LANG3 0x92 +#define HID_KEY_LANG4 0x93 +#define HID_KEY_LANG5 0x94 +#define HID_KEY_LANG6 0x95 +#define HID_KEY_LANG7 0x96 +#define HID_KEY_LANG8 0x97 +#define HID_KEY_LANG9 0x98 +#define HID_KEY_ALTERNATE_ERASE 0x99 +#define HID_KEY_SYSREQ_ATTENTION 0x9A +#define HID_KEY_CANCEL 0x9B +#define HID_KEY_CLEAR 0x9C +#define HID_KEY_PRIOR 0x9D +#define HID_KEY_RETURN 0x9E +#define HID_KEY_SEPARATOR 0x9F +#define HID_KEY_OUT 0xA0 +#define HID_KEY_OPER 0xA1 +#define HID_KEY_CLEAR_AGAIN 0xA2 +#define HID_KEY_CRSEL_PROPS 0xA3 +#define HID_KEY_EXSEL 0xA4 // RESERVED 0xA5-AF -#define HID_KEY_KEYPAD_00 0xB0 -#define HID_KEY_KEYPAD_000 0xB1 -#define HID_KEY_THOUSANDS_SEPARATOR 0xB2 -#define HID_KEY_DECIMAL_SEPARATOR 0xB3 -#define HID_KEY_CURRENCY_UNIT 0xB4 -#define HID_KEY_CURRENCY_SUBUNIT 0xB5 -#define HID_KEY_KEYPAD_LEFT_PARENTHESIS 0xB6 -#define HID_KEY_KEYPAD_RIGHT_PARENTHESIS 0xB7 -#define HID_KEY_KEYPAD_LEFT_BRACE 0xB8 -#define HID_KEY_KEYPAD_RIGHT_BRACE 0xB9 -#define HID_KEY_KEYPAD_TAB 0xBA -#define HID_KEY_KEYPAD_BACKSPACE 0xBB -#define HID_KEY_KEYPAD_A 0xBC -#define HID_KEY_KEYPAD_B 0xBD -#define HID_KEY_KEYPAD_C 0xBE -#define HID_KEY_KEYPAD_D 0xBF -#define HID_KEY_KEYPAD_E 0xC0 -#define HID_KEY_KEYPAD_F 0xC1 -#define HID_KEY_KEYPAD_XOR 0xC2 -#define HID_KEY_KEYPAD_CARET 0xC3 -#define HID_KEY_KEYPAD_PERCENT 0xC4 -#define HID_KEY_KEYPAD_LESS_THAN 0xC5 -#define HID_KEY_KEYPAD_GREATER_THAN 0xC6 -#define HID_KEY_KEYPAD_AMPERSAND 0xC7 -#define HID_KEY_KEYPAD_DOUBLE_AMPERSAND 0xC8 -#define HID_KEY_KEYPAD_VERTICAL_BAR 0xC9 -#define HID_KEY_KEYPAD_DOUBLE_VERTICAL_BAR 0xCA -#define HID_KEY_KEYPAD_COLON 0xCB -#define HID_KEY_KEYPAD_HASH 0xCC -#define HID_KEY_KEYPAD_SPACE 0xCD -#define HID_KEY_KEYPAD_AT 0xCE -#define HID_KEY_KEYPAD_EXCLAMATION 0xCF -#define HID_KEY_KEYPAD_MEMORY_STORE 0xD0 -#define HID_KEY_KEYPAD_MEMORY_RECALL 0xD1 -#define HID_KEY_KEYPAD_MEMORY_CLEAR 0xD2 -#define HID_KEY_KEYPAD_MEMORY_ADD 0xD3 -#define HID_KEY_KEYPAD_MEMORY_SUBTRACT 0xD4 -#define HID_KEY_KEYPAD_MEMORY_MULTIPLY 0xD5 -#define HID_KEY_KEYPAD_MEMORY_DIVIDE 0xD6 -#define HID_KEY_KEYPAD_PLUS_MINUS 0xD7 -#define HID_KEY_KEYPAD_CLEAR 0xD8 -#define HID_KEY_KEYPAD_CLEAR_ENTRY 0xD9 -#define HID_KEY_KEYPAD_BINARY 0xDA -#define HID_KEY_KEYPAD_OCTAL 0xDB -#define HID_KEY_KEYPAD_DECIMAL_2 0xDC -#define HID_KEY_KEYPAD_HEXADECIMAL 0xDD +#define HID_KEY_KEYPAD_00 0xB0 +#define HID_KEY_KEYPAD_000 0xB1 +#define HID_KEY_THOUSANDS_SEPARATOR 0xB2 +#define HID_KEY_DECIMAL_SEPARATOR 0xB3 +#define HID_KEY_CURRENCY_UNIT 0xB4 +#define HID_KEY_CURRENCY_SUBUNIT 0xB5 +#define HID_KEY_KEYPAD_LEFT_PARENTHESIS 0xB6 +#define HID_KEY_KEYPAD_RIGHT_PARENTHESIS 0xB7 +#define HID_KEY_KEYPAD_LEFT_BRACE 0xB8 +#define HID_KEY_KEYPAD_RIGHT_BRACE 0xB9 +#define HID_KEY_KEYPAD_TAB 0xBA +#define HID_KEY_KEYPAD_BACKSPACE 0xBB +#define HID_KEY_KEYPAD_A 0xBC +#define HID_KEY_KEYPAD_B 0xBD +#define HID_KEY_KEYPAD_C 0xBE +#define HID_KEY_KEYPAD_D 0xBF +#define HID_KEY_KEYPAD_E 0xC0 +#define HID_KEY_KEYPAD_F 0xC1 +#define HID_KEY_KEYPAD_XOR 0xC2 +#define HID_KEY_KEYPAD_CARET 0xC3 +#define HID_KEY_KEYPAD_PERCENT 0xC4 +#define HID_KEY_KEYPAD_LESS_THAN 0xC5 +#define HID_KEY_KEYPAD_GREATER_THAN 0xC6 +#define HID_KEY_KEYPAD_AMPERSAND 0xC7 +#define HID_KEY_KEYPAD_DOUBLE_AMPERSAND 0xC8 +#define HID_KEY_KEYPAD_VERTICAL_BAR 0xC9 +#define HID_KEY_KEYPAD_DOUBLE_VERTICAL_BAR 0xCA +#define HID_KEY_KEYPAD_COLON 0xCB +#define HID_KEY_KEYPAD_HASH 0xCC +#define HID_KEY_KEYPAD_SPACE 0xCD +#define HID_KEY_KEYPAD_AT 0xCE +#define HID_KEY_KEYPAD_EXCLAMATION 0xCF +#define HID_KEY_KEYPAD_MEMORY_STORE 0xD0 +#define HID_KEY_KEYPAD_MEMORY_RECALL 0xD1 +#define HID_KEY_KEYPAD_MEMORY_CLEAR 0xD2 +#define HID_KEY_KEYPAD_MEMORY_ADD 0xD3 +#define HID_KEY_KEYPAD_MEMORY_SUBTRACT 0xD4 +#define HID_KEY_KEYPAD_MEMORY_MULTIPLY 0xD5 +#define HID_KEY_KEYPAD_MEMORY_DIVIDE 0xD6 +#define HID_KEY_KEYPAD_PLUS_MINUS 0xD7 +#define HID_KEY_KEYPAD_CLEAR 0xD8 +#define HID_KEY_KEYPAD_CLEAR_ENTRY 0xD9 +#define HID_KEY_KEYPAD_BINARY 0xDA +#define HID_KEY_KEYPAD_OCTAL 0xDB +#define HID_KEY_KEYPAD_DECIMAL_2 0xDC +#define HID_KEY_KEYPAD_HEXADECIMAL 0xDD // RESERVED 0xDE-DF -#define HID_KEY_CONTROL_LEFT 0xE0 -#define HID_KEY_SHIFT_LEFT 0xE1 -#define HID_KEY_ALT_LEFT 0xE2 -#define HID_KEY_GUI_LEFT 0xE3 -#define HID_KEY_CONTROL_RIGHT 0xE4 -#define HID_KEY_SHIFT_RIGHT 0xE5 -#define HID_KEY_ALT_RIGHT 0xE6 -#define HID_KEY_GUI_RIGHT 0xE7 - +#define HID_KEY_CONTROL_LEFT 0xE0 +#define HID_KEY_SHIFT_LEFT 0xE1 +#define HID_KEY_ALT_LEFT 0xE2 +#define HID_KEY_GUI_LEFT 0xE3 +#define HID_KEY_CONTROL_RIGHT 0xE4 +#define HID_KEY_SHIFT_RIGHT 0xE5 +#define HID_KEY_ALT_RIGHT 0xE6 +#define HID_KEY_GUI_RIGHT 0xE7 //--------------------------------------------------------------------+ // REPORT DESCRIPTOR @@ -597,146 +575,142 @@ typedef enum #define HID_REPORT_DATA_3(data) , U32_TO_U8S_LE(data) #define HID_REPORT_ITEM(data, tag, type, size) \ - (((tag) << 4) | ((type) << 2) | (size)) HID_REPORT_DATA_##size(data) + (((tag) << 4) | ((type) << 2) | (size)) HID_REPORT_DATA_##size(data) // Report Item Types -enum { - RI_TYPE_MAIN = 0, - RI_TYPE_GLOBAL = 1, - RI_TYPE_LOCAL = 2 -}; +enum { RI_TYPE_MAIN = 0, RI_TYPE_GLOBAL = 1, RI_TYPE_LOCAL = 2 }; //------------- Main Items - HID 1.11 section 6.2.2.4 -------------// // Report Item Main group enum { - RI_MAIN_INPUT = 8, - RI_MAIN_OUTPUT = 9, - RI_MAIN_COLLECTION = 10, - RI_MAIN_FEATURE = 11, - RI_MAIN_COLLECTION_END = 12 + RI_MAIN_INPUT = 8, + RI_MAIN_OUTPUT = 9, + RI_MAIN_COLLECTION = 10, + RI_MAIN_FEATURE = 11, + RI_MAIN_COLLECTION_END = 12 }; -#define HID_INPUT(x) HID_REPORT_ITEM(x, RI_MAIN_INPUT , RI_TYPE_MAIN, 1) -#define HID_OUTPUT(x) HID_REPORT_ITEM(x, RI_MAIN_OUTPUT , RI_TYPE_MAIN, 1) -#define HID_COLLECTION(x) HID_REPORT_ITEM(x, RI_MAIN_COLLECTION , RI_TYPE_MAIN, 1) -#define HID_FEATURE(x) HID_REPORT_ITEM(x, RI_MAIN_FEATURE , RI_TYPE_MAIN, 1) -#define HID_COLLECTION_END HID_REPORT_ITEM(x, RI_MAIN_COLLECTION_END, RI_TYPE_MAIN, 0) +#define HID_INPUT(x) HID_REPORT_ITEM(x, RI_MAIN_INPUT, RI_TYPE_MAIN, 1) +#define HID_OUTPUT(x) HID_REPORT_ITEM(x, RI_MAIN_OUTPUT, RI_TYPE_MAIN, 1) +#define HID_COLLECTION(x) HID_REPORT_ITEM(x, RI_MAIN_COLLECTION, RI_TYPE_MAIN, 1) +#define HID_FEATURE(x) HID_REPORT_ITEM(x, RI_MAIN_FEATURE, RI_TYPE_MAIN, 1) +#define HID_COLLECTION_END HID_REPORT_ITEM(x, RI_MAIN_COLLECTION_END, RI_TYPE_MAIN, 0) //------------- Input, Output, Feature - HID 1.11 section 6.2.2.5 -------------// -#define HID_DATA (0<<0) -#define HID_CONSTANT (1<<0) +#define HID_DATA (0 << 0) +#define HID_CONSTANT (1 << 0) -#define HID_ARRAY (0<<1) -#define HID_VARIABLE (1<<1) +#define HID_ARRAY (0 << 1) +#define HID_VARIABLE (1 << 1) -#define HID_ABSOLUTE (0<<2) -#define HID_RELATIVE (1<<2) +#define HID_ABSOLUTE (0 << 2) +#define HID_RELATIVE (1 << 2) -#define HID_WRAP_NO (0<<3) -#define HID_WRAP (1<<3) +#define HID_WRAP_NO (0 << 3) +#define HID_WRAP (1 << 3) -#define HID_LINEAR (0<<4) -#define HID_NONLINEAR (1<<4) +#define HID_LINEAR (0 << 4) +#define HID_NONLINEAR (1 << 4) -#define HID_PREFERRED_STATE (0<<5) -#define HID_PREFERRED_NO (1<<5) +#define HID_PREFERRED_STATE (0 << 5) +#define HID_PREFERRED_NO (1 << 5) -#define HID_NO_NULL_POSITION (0<<6) -#define HID_NULL_STATE (1<<6) +#define HID_NO_NULL_POSITION (0 << 6) +#define HID_NULL_STATE (1 << 6) -#define HID_NON_VOLATILE (0<<7) -#define HID_VOLATILE (1<<7) +#define HID_NON_VOLATILE (0 << 7) +#define HID_VOLATILE (1 << 7) -#define HID_BITFIELD (0<<8) -#define HID_BUFFERED_BYTES (1<<8) +#define HID_BITFIELD (0 << 8) +#define HID_BUFFERED_BYTES (1 << 8) //------------- Collection Item - HID 1.11 section 6.2.2.6 -------------// enum { - HID_COLLECTION_PHYSICAL = 0, - HID_COLLECTION_APPLICATION, - HID_COLLECTION_LOGICAL, - HID_COLLECTION_REPORT, - HID_COLLECTION_NAMED_ARRAY, - HID_COLLECTION_USAGE_SWITCH, - HID_COLLECTION_USAGE_MODIFIER + HID_COLLECTION_PHYSICAL = 0, + HID_COLLECTION_APPLICATION, + HID_COLLECTION_LOGICAL, + HID_COLLECTION_REPORT, + HID_COLLECTION_NAMED_ARRAY, + HID_COLLECTION_USAGE_SWITCH, + HID_COLLECTION_USAGE_MODIFIER }; //------------- Global Items - HID 1.11 section 6.2.2.7 -------------// // Report Item Global group enum { - RI_GLOBAL_USAGE_PAGE = 0, - RI_GLOBAL_LOGICAL_MIN = 1, - RI_GLOBAL_LOGICAL_MAX = 2, - RI_GLOBAL_PHYSICAL_MIN = 3, - RI_GLOBAL_PHYSICAL_MAX = 4, - RI_GLOBAL_UNIT_EXPONENT = 5, - RI_GLOBAL_UNIT = 6, - RI_GLOBAL_REPORT_SIZE = 7, - RI_GLOBAL_REPORT_ID = 8, - RI_GLOBAL_REPORT_COUNT = 9, - RI_GLOBAL_PUSH = 10, - RI_GLOBAL_POP = 11 + RI_GLOBAL_USAGE_PAGE = 0, + RI_GLOBAL_LOGICAL_MIN = 1, + RI_GLOBAL_LOGICAL_MAX = 2, + RI_GLOBAL_PHYSICAL_MIN = 3, + RI_GLOBAL_PHYSICAL_MAX = 4, + RI_GLOBAL_UNIT_EXPONENT = 5, + RI_GLOBAL_UNIT = 6, + RI_GLOBAL_REPORT_SIZE = 7, + RI_GLOBAL_REPORT_ID = 8, + RI_GLOBAL_REPORT_COUNT = 9, + RI_GLOBAL_PUSH = 10, + RI_GLOBAL_POP = 11 }; -#define HID_USAGE_PAGE(x) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, 1) -#define HID_USAGE_PAGE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, n) +#define HID_USAGE_PAGE(x) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, 1) +#define HID_USAGE_PAGE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, n) -#define HID_LOGICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, 1) -#define HID_LOGICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, n) +#define HID_LOGICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, 1) +#define HID_LOGICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, n) -#define HID_LOGICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, 1) -#define HID_LOGICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, n) +#define HID_LOGICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, 1) +#define HID_LOGICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, n) -#define HID_PHYSICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, 1) -#define HID_PHYSICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, n) +#define HID_PHYSICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, 1) +#define HID_PHYSICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, n) -#define HID_PHYSICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, 1) -#define HID_PHYSICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, n) +#define HID_PHYSICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, 1) +#define HID_PHYSICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, n) -#define HID_UNIT_EXPONENT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT_EXPONENT, RI_TYPE_GLOBAL, 1) +#define HID_UNIT_EXPONENT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT_EXPONENT, RI_TYPE_GLOBAL, 1) #define HID_UNIT_EXPONENT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT_EXPONENT, RI_TYPE_GLOBAL, n) -#define HID_UNIT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, 1) -#define HID_UNIT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, n) +#define HID_UNIT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, 1) +#define HID_UNIT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, n) -#define HID_REPORT_SIZE(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, 1) -#define HID_REPORT_SIZE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, n) +#define HID_REPORT_SIZE(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, 1) +#define HID_REPORT_SIZE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, n) -#define HID_REPORT_ID(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, 1), -#define HID_REPORT_ID_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, n), +#define HID_REPORT_ID(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, 1), +#define HID_REPORT_ID_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, n), -#define HID_REPORT_COUNT(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, 1) -#define HID_REPORT_COUNT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, n) +#define HID_REPORT_COUNT(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, 1) +#define HID_REPORT_COUNT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, n) -#define HID_PUSH HID_REPORT_ITEM(x, RI_GLOBAL_PUSH, RI_TYPE_GLOBAL, 0) -#define HID_POP HID_REPORT_ITEM(x, RI_GLOBAL_POP, RI_TYPE_GLOBAL, 0) +#define HID_PUSH HID_REPORT_ITEM(x, RI_GLOBAL_PUSH, RI_TYPE_GLOBAL, 0) +#define HID_POP HID_REPORT_ITEM(x, RI_GLOBAL_POP, RI_TYPE_GLOBAL, 0) //------------- LOCAL ITEMS 6.2.2.8 -------------// enum { - RI_LOCAL_USAGE = 0, - RI_LOCAL_USAGE_MIN = 1, - RI_LOCAL_USAGE_MAX = 2, - RI_LOCAL_DESIGNATOR_INDEX = 3, - RI_LOCAL_DESIGNATOR_MIN = 4, - RI_LOCAL_DESIGNATOR_MAX = 5, - // 6 is reserved - RI_LOCAL_STRING_INDEX = 7, - RI_LOCAL_STRING_MIN = 8, - RI_LOCAL_STRING_MAX = 9, - RI_LOCAL_DELIMITER = 10, + RI_LOCAL_USAGE = 0, + RI_LOCAL_USAGE_MIN = 1, + RI_LOCAL_USAGE_MAX = 2, + RI_LOCAL_DESIGNATOR_INDEX = 3, + RI_LOCAL_DESIGNATOR_MIN = 4, + RI_LOCAL_DESIGNATOR_MAX = 5, + // 6 is reserved + RI_LOCAL_STRING_INDEX = 7, + RI_LOCAL_STRING_MIN = 8, + RI_LOCAL_STRING_MAX = 9, + RI_LOCAL_DELIMITER = 10, }; -#define HID_USAGE(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, 1) -#define HID_USAGE_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, n) +#define HID_USAGE(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, 1) +#define HID_USAGE_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, n) -#define HID_USAGE_MIN(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, 1) -#define HID_USAGE_MIN_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, n) +#define HID_USAGE_MIN(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, 1) +#define HID_USAGE_MIN_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, n) -#define HID_USAGE_MAX(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, 1) -#define HID_USAGE_MAX_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, n) +#define HID_USAGE_MAX(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, 1) +#define HID_USAGE_MAX_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, n) //--------------------------------------------------------------------+ // Usage Table @@ -744,209 +718,208 @@ enum { /// HID Usage Table - Table 1: Usage Page Summary enum { - HID_USAGE_PAGE_DESKTOP = 0x01, - HID_USAGE_PAGE_SIMULATE = 0x02, - HID_USAGE_PAGE_VIRTUAL_REALITY = 0x03, - HID_USAGE_PAGE_SPORT = 0x04, - HID_USAGE_PAGE_GAME = 0x05, - HID_USAGE_PAGE_GENERIC_DEVICE = 0x06, - HID_USAGE_PAGE_KEYBOARD = 0x07, - HID_USAGE_PAGE_LED = 0x08, - HID_USAGE_PAGE_BUTTON = 0x09, - HID_USAGE_PAGE_ORDINAL = 0x0a, - HID_USAGE_PAGE_TELEPHONY = 0x0b, - HID_USAGE_PAGE_CONSUMER = 0x0c, - HID_USAGE_PAGE_DIGITIZER = 0x0d, - HID_USAGE_PAGE_PID = 0x0f, - HID_USAGE_PAGE_UNICODE = 0x10, - HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14, - HID_USAGE_PAGE_MEDICAL = 0x40, - HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59, - HID_USAGE_PAGE_MONITOR = 0x80, // 0x80 - 0x83 - HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87 - HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c, - HID_USAGE_PAGE_SCALE = 0x8d, - HID_USAGE_PAGE_MSR = 0x8e, - HID_USAGE_PAGE_CAMERA = 0x90, - HID_USAGE_PAGE_ARCADE = 0x91, - HID_USAGE_PAGE_FIDO = 0xF1D0, // FIDO alliance HID usage page - HID_USAGE_PAGE_VENDOR = 0xFF00 // 0xFF00 - 0xFFFF + HID_USAGE_PAGE_DESKTOP = 0x01, + HID_USAGE_PAGE_SIMULATE = 0x02, + HID_USAGE_PAGE_VIRTUAL_REALITY = 0x03, + HID_USAGE_PAGE_SPORT = 0x04, + HID_USAGE_PAGE_GAME = 0x05, + HID_USAGE_PAGE_GENERIC_DEVICE = 0x06, + HID_USAGE_PAGE_KEYBOARD = 0x07, + HID_USAGE_PAGE_LED = 0x08, + HID_USAGE_PAGE_BUTTON = 0x09, + HID_USAGE_PAGE_ORDINAL = 0x0a, + HID_USAGE_PAGE_TELEPHONY = 0x0b, + HID_USAGE_PAGE_CONSUMER = 0x0c, + HID_USAGE_PAGE_DIGITIZER = 0x0d, + HID_USAGE_PAGE_PID = 0x0f, + HID_USAGE_PAGE_UNICODE = 0x10, + HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14, + HID_USAGE_PAGE_MEDICAL = 0x40, + HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59, + HID_USAGE_PAGE_MONITOR = 0x80, // 0x80 - 0x83 + HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87 + HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c, + HID_USAGE_PAGE_SCALE = 0x8d, + HID_USAGE_PAGE_MSR = 0x8e, + HID_USAGE_PAGE_CAMERA = 0x90, + HID_USAGE_PAGE_ARCADE = 0x91, + HID_USAGE_PAGE_FIDO = 0xF1D0, // FIDO alliance HID usage page + HID_USAGE_PAGE_VENDOR = 0xFF00 // 0xFF00 - 0xFFFF }; /// HID Usage Table - Table 6: Generic Desktop Page enum { - HID_USAGE_DESKTOP_POINTER = 0x01, - HID_USAGE_DESKTOP_MOUSE = 0x02, - HID_USAGE_DESKTOP_JOYSTICK = 0x04, - HID_USAGE_DESKTOP_GAMEPAD = 0x05, - HID_USAGE_DESKTOP_KEYBOARD = 0x06, - HID_USAGE_DESKTOP_KEYPAD = 0x07, - HID_USAGE_DESKTOP_MULTI_AXIS_CONTROLLER = 0x08, - HID_USAGE_DESKTOP_TABLET_PC_SYSTEM = 0x09, - HID_USAGE_DESKTOP_X = 0x30, - HID_USAGE_DESKTOP_Y = 0x31, - HID_USAGE_DESKTOP_Z = 0x32, - HID_USAGE_DESKTOP_RX = 0x33, - HID_USAGE_DESKTOP_RY = 0x34, - HID_USAGE_DESKTOP_RZ = 0x35, - HID_USAGE_DESKTOP_SLIDER = 0x36, - HID_USAGE_DESKTOP_DIAL = 0x37, - HID_USAGE_DESKTOP_WHEEL = 0x38, - HID_USAGE_DESKTOP_HAT_SWITCH = 0x39, - HID_USAGE_DESKTOP_COUNTED_BUFFER = 0x3a, - HID_USAGE_DESKTOP_BYTE_COUNT = 0x3b, - HID_USAGE_DESKTOP_MOTION_WAKEUP = 0x3c, - HID_USAGE_DESKTOP_START = 0x3d, - HID_USAGE_DESKTOP_SELECT = 0x3e, - HID_USAGE_DESKTOP_VX = 0x40, - HID_USAGE_DESKTOP_VY = 0x41, - HID_USAGE_DESKTOP_VZ = 0x42, - HID_USAGE_DESKTOP_VBRX = 0x43, - HID_USAGE_DESKTOP_VBRY = 0x44, - HID_USAGE_DESKTOP_VBRZ = 0x45, - HID_USAGE_DESKTOP_VNO = 0x46, - HID_USAGE_DESKTOP_FEATURE_NOTIFICATION = 0x47, - HID_USAGE_DESKTOP_RESOLUTION_MULTIPLIER = 0x48, - HID_USAGE_DESKTOP_SYSTEM_CONTROL = 0x80, - HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN = 0x81, - HID_USAGE_DESKTOP_SYSTEM_SLEEP = 0x82, - HID_USAGE_DESKTOP_SYSTEM_WAKE_UP = 0x83, - HID_USAGE_DESKTOP_SYSTEM_CONTEXT_MENU = 0x84, - HID_USAGE_DESKTOP_SYSTEM_MAIN_MENU = 0x85, - HID_USAGE_DESKTOP_SYSTEM_APP_MENU = 0x86, - HID_USAGE_DESKTOP_SYSTEM_MENU_HELP = 0x87, - HID_USAGE_DESKTOP_SYSTEM_MENU_EXIT = 0x88, - HID_USAGE_DESKTOP_SYSTEM_MENU_SELECT = 0x89, - HID_USAGE_DESKTOP_SYSTEM_MENU_RIGHT = 0x8A, - HID_USAGE_DESKTOP_SYSTEM_MENU_LEFT = 0x8B, - HID_USAGE_DESKTOP_SYSTEM_MENU_UP = 0x8C, - HID_USAGE_DESKTOP_SYSTEM_MENU_DOWN = 0x8D, - HID_USAGE_DESKTOP_SYSTEM_COLD_RESTART = 0x8E, - HID_USAGE_DESKTOP_SYSTEM_WARM_RESTART = 0x8F, - HID_USAGE_DESKTOP_DPAD_UP = 0x90, - HID_USAGE_DESKTOP_DPAD_DOWN = 0x91, - HID_USAGE_DESKTOP_DPAD_RIGHT = 0x92, - HID_USAGE_DESKTOP_DPAD_LEFT = 0x93, - HID_USAGE_DESKTOP_SYSTEM_DOCK = 0xA0, - HID_USAGE_DESKTOP_SYSTEM_UNDOCK = 0xA1, - HID_USAGE_DESKTOP_SYSTEM_SETUP = 0xA2, - HID_USAGE_DESKTOP_SYSTEM_BREAK = 0xA3, - HID_USAGE_DESKTOP_SYSTEM_DEBUGGER_BREAK = 0xA4, - HID_USAGE_DESKTOP_APPLICATION_BREAK = 0xA5, - HID_USAGE_DESKTOP_APPLICATION_DEBUGGER_BREAK = 0xA6, - HID_USAGE_DESKTOP_SYSTEM_SPEAKER_MUTE = 0xA7, - HID_USAGE_DESKTOP_SYSTEM_HIBERNATE = 0xA8, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INVERT = 0xB0, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INTERNAL = 0xB1, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_EXTERNAL = 0xB2, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_BOTH = 0xB3, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_DUAL = 0xB4, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_TOGGLE_INT_EXT = 0xB5, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_SWAP_PRIMARY_SECONDARY = 0xB6, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7 + HID_USAGE_DESKTOP_POINTER = 0x01, + HID_USAGE_DESKTOP_MOUSE = 0x02, + HID_USAGE_DESKTOP_JOYSTICK = 0x04, + HID_USAGE_DESKTOP_GAMEPAD = 0x05, + HID_USAGE_DESKTOP_KEYBOARD = 0x06, + HID_USAGE_DESKTOP_KEYPAD = 0x07, + HID_USAGE_DESKTOP_MULTI_AXIS_CONTROLLER = 0x08, + HID_USAGE_DESKTOP_TABLET_PC_SYSTEM = 0x09, + HID_USAGE_DESKTOP_X = 0x30, + HID_USAGE_DESKTOP_Y = 0x31, + HID_USAGE_DESKTOP_Z = 0x32, + HID_USAGE_DESKTOP_RX = 0x33, + HID_USAGE_DESKTOP_RY = 0x34, + HID_USAGE_DESKTOP_RZ = 0x35, + HID_USAGE_DESKTOP_SLIDER = 0x36, + HID_USAGE_DESKTOP_DIAL = 0x37, + HID_USAGE_DESKTOP_WHEEL = 0x38, + HID_USAGE_DESKTOP_HAT_SWITCH = 0x39, + HID_USAGE_DESKTOP_COUNTED_BUFFER = 0x3a, + HID_USAGE_DESKTOP_BYTE_COUNT = 0x3b, + HID_USAGE_DESKTOP_MOTION_WAKEUP = 0x3c, + HID_USAGE_DESKTOP_START = 0x3d, + HID_USAGE_DESKTOP_SELECT = 0x3e, + HID_USAGE_DESKTOP_VX = 0x40, + HID_USAGE_DESKTOP_VY = 0x41, + HID_USAGE_DESKTOP_VZ = 0x42, + HID_USAGE_DESKTOP_VBRX = 0x43, + HID_USAGE_DESKTOP_VBRY = 0x44, + HID_USAGE_DESKTOP_VBRZ = 0x45, + HID_USAGE_DESKTOP_VNO = 0x46, + HID_USAGE_DESKTOP_FEATURE_NOTIFICATION = 0x47, + HID_USAGE_DESKTOP_RESOLUTION_MULTIPLIER = 0x48, + HID_USAGE_DESKTOP_SYSTEM_CONTROL = 0x80, + HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN = 0x81, + HID_USAGE_DESKTOP_SYSTEM_SLEEP = 0x82, + HID_USAGE_DESKTOP_SYSTEM_WAKE_UP = 0x83, + HID_USAGE_DESKTOP_SYSTEM_CONTEXT_MENU = 0x84, + HID_USAGE_DESKTOP_SYSTEM_MAIN_MENU = 0x85, + HID_USAGE_DESKTOP_SYSTEM_APP_MENU = 0x86, + HID_USAGE_DESKTOP_SYSTEM_MENU_HELP = 0x87, + HID_USAGE_DESKTOP_SYSTEM_MENU_EXIT = 0x88, + HID_USAGE_DESKTOP_SYSTEM_MENU_SELECT = 0x89, + HID_USAGE_DESKTOP_SYSTEM_MENU_RIGHT = 0x8A, + HID_USAGE_DESKTOP_SYSTEM_MENU_LEFT = 0x8B, + HID_USAGE_DESKTOP_SYSTEM_MENU_UP = 0x8C, + HID_USAGE_DESKTOP_SYSTEM_MENU_DOWN = 0x8D, + HID_USAGE_DESKTOP_SYSTEM_COLD_RESTART = 0x8E, + HID_USAGE_DESKTOP_SYSTEM_WARM_RESTART = 0x8F, + HID_USAGE_DESKTOP_DPAD_UP = 0x90, + HID_USAGE_DESKTOP_DPAD_DOWN = 0x91, + HID_USAGE_DESKTOP_DPAD_RIGHT = 0x92, + HID_USAGE_DESKTOP_DPAD_LEFT = 0x93, + HID_USAGE_DESKTOP_SYSTEM_DOCK = 0xA0, + HID_USAGE_DESKTOP_SYSTEM_UNDOCK = 0xA1, + HID_USAGE_DESKTOP_SYSTEM_SETUP = 0xA2, + HID_USAGE_DESKTOP_SYSTEM_BREAK = 0xA3, + HID_USAGE_DESKTOP_SYSTEM_DEBUGGER_BREAK = 0xA4, + HID_USAGE_DESKTOP_APPLICATION_BREAK = 0xA5, + HID_USAGE_DESKTOP_APPLICATION_DEBUGGER_BREAK = 0xA6, + HID_USAGE_DESKTOP_SYSTEM_SPEAKER_MUTE = 0xA7, + HID_USAGE_DESKTOP_SYSTEM_HIBERNATE = 0xA8, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INVERT = 0xB0, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INTERNAL = 0xB1, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_EXTERNAL = 0xB2, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_BOTH = 0xB3, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_DUAL = 0xB4, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_TOGGLE_INT_EXT = 0xB5, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_SWAP_PRIMARY_SECONDARY = 0xB6, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7 }; - /// HID Usage Table: Consumer Page (0x0C) /// Only contains controls that supported by Windows (whole list is too long) enum { - // Generic Control - HID_USAGE_CONSUMER_CONTROL = 0x0001, - - // Power Control - HID_USAGE_CONSUMER_POWER = 0x0030, - HID_USAGE_CONSUMER_RESET = 0x0031, - HID_USAGE_CONSUMER_SLEEP = 0x0032, - - // Screen Brightness - HID_USAGE_CONSUMER_BRIGHTNESS_INCREMENT = 0x006F, - HID_USAGE_CONSUMER_BRIGHTNESS_DECREMENT = 0x0070, - - // These HID usages operate only on mobile systems (battery powered) and - // require Windows 8 (build 8302 or greater). - HID_USAGE_CONSUMER_WIRELESS_RADIO_CONTROLS = 0x000C, - HID_USAGE_CONSUMER_WIRELESS_RADIO_BUTTONS = 0x00C6, - HID_USAGE_CONSUMER_WIRELESS_RADIO_LED = 0x00C7, - HID_USAGE_CONSUMER_WIRELESS_RADIO_SLIDER_SWITCH = 0x00C8, - - // Media Control - HID_USAGE_CONSUMER_PLAY_PAUSE = 0x00CD, - HID_USAGE_CONSUMER_SCAN_NEXT = 0x00B5, - HID_USAGE_CONSUMER_SCAN_PREVIOUS = 0x00B6, - HID_USAGE_CONSUMER_STOP = 0x00B7, - HID_USAGE_CONSUMER_VOLUME = 0x00E0, - HID_USAGE_CONSUMER_MUTE = 0x00E2, - HID_USAGE_CONSUMER_BASS = 0x00E3, - HID_USAGE_CONSUMER_TREBLE = 0x00E4, - HID_USAGE_CONSUMER_BASS_BOOST = 0x00E5, - HID_USAGE_CONSUMER_VOLUME_INCREMENT = 0x00E9, - HID_USAGE_CONSUMER_VOLUME_DECREMENT = 0x00EA, - HID_USAGE_CONSUMER_BASS_INCREMENT = 0x0152, - HID_USAGE_CONSUMER_BASS_DECREMENT = 0x0153, - HID_USAGE_CONSUMER_TREBLE_INCREMENT = 0x0154, - HID_USAGE_CONSUMER_TREBLE_DECREMENT = 0x0155, - - // Application Launcher - HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION = 0x0183, - HID_USAGE_CONSUMER_AL_EMAIL_READER = 0x018A, - HID_USAGE_CONSUMER_AL_CALCULATOR = 0x0192, - HID_USAGE_CONSUMER_AL_LOCAL_BROWSER = 0x0194, - - // Browser/Explorer Specific - HID_USAGE_CONSUMER_AC_SEARCH = 0x0221, - HID_USAGE_CONSUMER_AC_HOME = 0x0223, - HID_USAGE_CONSUMER_AC_BACK = 0x0224, - HID_USAGE_CONSUMER_AC_FORWARD = 0x0225, - HID_USAGE_CONSUMER_AC_STOP = 0x0226, - HID_USAGE_CONSUMER_AC_REFRESH = 0x0227, - HID_USAGE_CONSUMER_AC_BOOKMARKS = 0x022A, - - // Mouse Horizontal scroll - HID_USAGE_CONSUMER_AC_PAN = 0x0238, + // Generic Control + HID_USAGE_CONSUMER_CONTROL = 0x0001, + + // Power Control + HID_USAGE_CONSUMER_POWER = 0x0030, + HID_USAGE_CONSUMER_RESET = 0x0031, + HID_USAGE_CONSUMER_SLEEP = 0x0032, + + // Screen Brightness + HID_USAGE_CONSUMER_BRIGHTNESS_INCREMENT = 0x006F, + HID_USAGE_CONSUMER_BRIGHTNESS_DECREMENT = 0x0070, + + // These HID usages operate only on mobile systems (battery powered) and + // require Windows 8 (build 8302 or greater). + HID_USAGE_CONSUMER_WIRELESS_RADIO_CONTROLS = 0x000C, + HID_USAGE_CONSUMER_WIRELESS_RADIO_BUTTONS = 0x00C6, + HID_USAGE_CONSUMER_WIRELESS_RADIO_LED = 0x00C7, + HID_USAGE_CONSUMER_WIRELESS_RADIO_SLIDER_SWITCH = 0x00C8, + + // Media Control + HID_USAGE_CONSUMER_PLAY_PAUSE = 0x00CD, + HID_USAGE_CONSUMER_SCAN_NEXT = 0x00B5, + HID_USAGE_CONSUMER_SCAN_PREVIOUS = 0x00B6, + HID_USAGE_CONSUMER_STOP = 0x00B7, + HID_USAGE_CONSUMER_VOLUME = 0x00E0, + HID_USAGE_CONSUMER_MUTE = 0x00E2, + HID_USAGE_CONSUMER_BASS = 0x00E3, + HID_USAGE_CONSUMER_TREBLE = 0x00E4, + HID_USAGE_CONSUMER_BASS_BOOST = 0x00E5, + HID_USAGE_CONSUMER_VOLUME_INCREMENT = 0x00E9, + HID_USAGE_CONSUMER_VOLUME_DECREMENT = 0x00EA, + HID_USAGE_CONSUMER_BASS_INCREMENT = 0x0152, + HID_USAGE_CONSUMER_BASS_DECREMENT = 0x0153, + HID_USAGE_CONSUMER_TREBLE_INCREMENT = 0x0154, + HID_USAGE_CONSUMER_TREBLE_DECREMENT = 0x0155, + + // Application Launcher + HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION = 0x0183, + HID_USAGE_CONSUMER_AL_EMAIL_READER = 0x018A, + HID_USAGE_CONSUMER_AL_CALCULATOR = 0x0192, + HID_USAGE_CONSUMER_AL_LOCAL_BROWSER = 0x0194, + + // Browser/Explorer Specific + HID_USAGE_CONSUMER_AC_SEARCH = 0x0221, + HID_USAGE_CONSUMER_AC_HOME = 0x0223, + HID_USAGE_CONSUMER_AC_BACK = 0x0224, + HID_USAGE_CONSUMER_AC_FORWARD = 0x0225, + HID_USAGE_CONSUMER_AC_STOP = 0x0226, + HID_USAGE_CONSUMER_AC_REFRESH = 0x0227, + HID_USAGE_CONSUMER_AC_BOOKMARKS = 0x022A, + + // Mouse Horizontal scroll + HID_USAGE_CONSUMER_AC_PAN = 0x0238, }; /// HID Usage Table - Lighting And Illumination Page (0x59) enum { - HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01, - HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02, - HID_USAGE_LIGHTING_LAMP_COUNT = 0x03, - HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04, - HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05, - HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06, - HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07, - HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08, - HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20, - HID_USAGE_LIGHTING_LAMP_ID = 0x21, - HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22, - HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23, - HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24, - HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25, - HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26, - HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27, - HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28, - HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29, - HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A, - HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B, - HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C, - HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D, - HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50, - HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51, - HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52, - HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53, - HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54, - HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55, - HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60, - HID_USAGE_LIGHTING_LAMP_ID_START = 0x61, - HID_USAGE_LIGHTING_LAMP_ID_END = 0x62, - HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70, - HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71, + HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01, + HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02, + HID_USAGE_LIGHTING_LAMP_COUNT = 0x03, + HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04, + HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05, + HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06, + HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07, + HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08, + HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20, + HID_USAGE_LIGHTING_LAMP_ID = 0x21, + HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22, + HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23, + HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24, + HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25, + HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26, + HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27, + HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28, + HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29, + HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A, + HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B, + HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C, + HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D, + HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50, + HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51, + HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52, + HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53, + HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54, + HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55, + HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60, + HID_USAGE_LIGHTING_LAMP_ID_START = 0x61, + HID_USAGE_LIGHTING_LAMP_ID_END = 0x62, + HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70, + HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71, }; /// HID Usage Table: FIDO Alliance Page (0xF1D0) enum { - HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection - HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report - HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report + HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection + HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report + HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report }; /*-------------------------------------------------------------------- @@ -965,138 +938,141 @@ enum { * tud_hid_keyboard_report(report_id, modifier, keycode); * *--------------------------------------------------------------------*/ -#define HID_ASCII_TO_KEYCODE \ - {0, 0 }, /* 0x00 Null */ \ - {0, 0 }, /* 0x01 */ \ - {0, 0 }, /* 0x02 */ \ - {0, 0 }, /* 0x03 */ \ - {0, 0 }, /* 0x04 */ \ - {0, 0 }, /* 0x05 */ \ - {0, 0 }, /* 0x06 */ \ - {0, 0 }, /* 0x07 */ \ - {0, HID_KEY_BACKSPACE }, /* 0x08 Backspace */ \ - {0, HID_KEY_TAB }, /* 0x09 Tab */ \ - {0, HID_KEY_ENTER }, /* 0x0A Line Feed */ \ - {0, 0 }, /* 0x0B */ \ - {0, 0 }, /* 0x0C */ \ - {0, HID_KEY_ENTER }, /* 0x0D CR */ \ - {0, 0 }, /* 0x0E */ \ - {0, 0 }, /* 0x0F */ \ - {0, 0 }, /* 0x10 */ \ - {0, 0 }, /* 0x11 */ \ - {0, 0 }, /* 0x12 */ \ - {0, 0 }, /* 0x13 */ \ - {0, 0 }, /* 0x14 */ \ - {0, 0 }, /* 0x15 */ \ - {0, 0 }, /* 0x16 */ \ - {0, 0 }, /* 0x17 */ \ - {0, 0 }, /* 0x18 */ \ - {0, 0 }, /* 0x19 */ \ - {0, 0 }, /* 0x1A */ \ - {0, HID_KEY_ESCAPE }, /* 0x1B Escape */ \ - {0, 0 }, /* 0x1C */ \ - {0, 0 }, /* 0x1D */ \ - {0, 0 }, /* 0x1E */ \ - {0, 0 }, /* 0x1F */ \ - \ - {0, HID_KEY_SPACE }, /* 0x20 */ \ - {1, HID_KEY_1 }, /* 0x21 ! */ \ - {1, HID_KEY_APOSTROPHE }, /* 0x22 " */ \ - {1, HID_KEY_3 }, /* 0x23 # */ \ - {1, HID_KEY_4 }, /* 0x24 $ */ \ - {1, HID_KEY_5 }, /* 0x25 % */ \ - {1, HID_KEY_7 }, /* 0x26 & */ \ - {0, HID_KEY_APOSTROPHE }, /* 0x27 ' */ \ - {1, HID_KEY_9 }, /* 0x28 ( */ \ - {1, HID_KEY_0 }, /* 0x29 ) */ \ - {1, HID_KEY_8 }, /* 0x2A * */ \ - {1, HID_KEY_EQUAL }, /* 0x2B + */ \ - {0, HID_KEY_COMMA }, /* 0x2C , */ \ - {0, HID_KEY_MINUS }, /* 0x2D - */ \ - {0, HID_KEY_PERIOD }, /* 0x2E . */ \ - {0, HID_KEY_SLASH }, /* 0x2F / */ \ - {0, HID_KEY_0 }, /* 0x30 0 */ \ - {0, HID_KEY_1 }, /* 0x31 1 */ \ - {0, HID_KEY_2 }, /* 0x32 2 */ \ - {0, HID_KEY_3 }, /* 0x33 3 */ \ - {0, HID_KEY_4 }, /* 0x34 4 */ \ - {0, HID_KEY_5 }, /* 0x35 5 */ \ - {0, HID_KEY_6 }, /* 0x36 6 */ \ - {0, HID_KEY_7 }, /* 0x37 7 */ \ - {0, HID_KEY_8 }, /* 0x38 8 */ \ - {0, HID_KEY_9 }, /* 0x39 9 */ \ - {1, HID_KEY_SEMICOLON }, /* 0x3A : */ \ - {0, HID_KEY_SEMICOLON }, /* 0x3B ; */ \ - {1, HID_KEY_COMMA }, /* 0x3C < */ \ - {0, HID_KEY_EQUAL }, /* 0x3D = */ \ - {1, HID_KEY_PERIOD }, /* 0x3E > */ \ - {1, HID_KEY_SLASH }, /* 0x3F ? */ \ - \ - {1, HID_KEY_2 }, /* 0x40 @ */ \ - {1, HID_KEY_A }, /* 0x41 A */ \ - {1, HID_KEY_B }, /* 0x42 B */ \ - {1, HID_KEY_C }, /* 0x43 C */ \ - {1, HID_KEY_D }, /* 0x44 D */ \ - {1, HID_KEY_E }, /* 0x45 E */ \ - {1, HID_KEY_F }, /* 0x46 F */ \ - {1, HID_KEY_G }, /* 0x47 G */ \ - {1, HID_KEY_H }, /* 0x48 H */ \ - {1, HID_KEY_I }, /* 0x49 I */ \ - {1, HID_KEY_J }, /* 0x4A J */ \ - {1, HID_KEY_K }, /* 0x4B K */ \ - {1, HID_KEY_L }, /* 0x4C L */ \ - {1, HID_KEY_M }, /* 0x4D M */ \ - {1, HID_KEY_N }, /* 0x4E N */ \ - {1, HID_KEY_O }, /* 0x4F O */ \ - {1, HID_KEY_P }, /* 0x50 P */ \ - {1, HID_KEY_Q }, /* 0x51 Q */ \ - {1, HID_KEY_R }, /* 0x52 R */ \ - {1, HID_KEY_S }, /* 0x53 S */ \ - {1, HID_KEY_T }, /* 0x55 T */ \ - {1, HID_KEY_U }, /* 0x55 U */ \ - {1, HID_KEY_V }, /* 0x56 V */ \ - {1, HID_KEY_W }, /* 0x57 W */ \ - {1, HID_KEY_X }, /* 0x58 X */ \ - {1, HID_KEY_Y }, /* 0x59 Y */ \ - {1, HID_KEY_Z }, /* 0x5A Z */ \ - {0, HID_KEY_BRACKET_LEFT }, /* 0x5B [ */ \ - {0, HID_KEY_BACKSLASH }, /* 0x5C '\' */ \ - {0, HID_KEY_BRACKET_RIGHT }, /* 0x5D ] */ \ - {1, HID_KEY_6 }, /* 0x5E ^ */ \ - {1, HID_KEY_MINUS }, /* 0x5F _ */ \ - \ - {0, HID_KEY_GRAVE }, /* 0x60 ` */ \ - {0, HID_KEY_A }, /* 0x61 a */ \ - {0, HID_KEY_B }, /* 0x62 b */ \ - {0, HID_KEY_C }, /* 0x63 c */ \ - {0, HID_KEY_D }, /* 0x66 d */ \ - {0, HID_KEY_E }, /* 0x65 e */ \ - {0, HID_KEY_F }, /* 0x66 f */ \ - {0, HID_KEY_G }, /* 0x67 g */ \ - {0, HID_KEY_H }, /* 0x68 h */ \ - {0, HID_KEY_I }, /* 0x69 i */ \ - {0, HID_KEY_J }, /* 0x6A j */ \ - {0, HID_KEY_K }, /* 0x6B k */ \ - {0, HID_KEY_L }, /* 0x6C l */ \ - {0, HID_KEY_M }, /* 0x6D m */ \ - {0, HID_KEY_N }, /* 0x6E n */ \ - {0, HID_KEY_O }, /* 0x6F o */ \ - {0, HID_KEY_P }, /* 0x70 p */ \ - {0, HID_KEY_Q }, /* 0x71 q */ \ - {0, HID_KEY_R }, /* 0x72 r */ \ - {0, HID_KEY_S }, /* 0x73 s */ \ - {0, HID_KEY_T }, /* 0x75 t */ \ - {0, HID_KEY_U }, /* 0x75 u */ \ - {0, HID_KEY_V }, /* 0x76 v */ \ - {0, HID_KEY_W }, /* 0x77 w */ \ - {0, HID_KEY_X }, /* 0x78 x */ \ - {0, HID_KEY_Y }, /* 0x79 y */ \ - {0, HID_KEY_Z }, /* 0x7A z */ \ - {1, HID_KEY_BRACKET_LEFT }, /* 0x7B { */ \ - {1, HID_KEY_BACKSLASH }, /* 0x7C | */ \ - {1, HID_KEY_BRACKET_RIGHT }, /* 0x7D } */ \ - {1, HID_KEY_GRAVE }, /* 0x7E ~ */ \ - {0, HID_KEY_DELETE } /* 0x7F Delete */ \ +#define HID_ASCII_TO_KEYCODE \ + { 0, 0 }, /* 0x00 Null */ \ + { 0, 0 }, /* 0x01 */ \ + { 0, 0 }, /* 0x02 */ \ + { 0, 0 }, /* 0x03 */ \ + { 0, 0 }, /* 0x04 */ \ + { 0, 0 }, /* 0x05 */ \ + { 0, 0 }, /* 0x06 */ \ + { 0, 0 }, /* 0x07 */ \ + { 0, HID_KEY_BACKSPACE }, /* 0x08 Backspace */ \ + { 0, HID_KEY_TAB }, /* 0x09 Tab */ \ + { 0, HID_KEY_ENTER }, /* 0x0A Line Feed */ \ + { 0, 0 }, /* 0x0B */ \ + { 0, 0 }, /* 0x0C */ \ + { 0, HID_KEY_ENTER }, /* 0x0D CR */ \ + { 0, 0 }, /* 0x0E */ \ + { 0, 0 }, /* 0x0F */ \ + { 0, 0 }, /* 0x10 */ \ + { 0, 0 }, /* 0x11 */ \ + { 0, 0 }, /* 0x12 */ \ + { 0, 0 }, /* 0x13 */ \ + { 0, 0 }, /* 0x14 */ \ + { 0, 0 }, /* 0x15 */ \ + { 0, 0 }, /* 0x16 */ \ + { 0, 0 }, /* 0x17 */ \ + { 0, 0 }, /* 0x18 */ \ + { 0, 0 }, /* 0x19 */ \ + { 0, 0 }, /* 0x1A */ \ + { 0, HID_KEY_ESCAPE }, /* 0x1B Escape */ \ + { 0, 0 }, /* 0x1C */ \ + { 0, 0 }, /* 0x1D */ \ + { 0, 0 }, /* 0x1E */ \ + { 0, 0 }, /* 0x1F */ \ + \ + { 0, HID_KEY_SPACE }, /* 0x20 */ \ + { 1, HID_KEY_1 }, /* 0x21 ! */ \ + { 1, HID_KEY_APOSTROPHE }, /* 0x22 " */ \ + { 1, HID_KEY_3 }, /* 0x23 # */ \ + { 1, HID_KEY_4 }, /* 0x24 $ */ \ + { 1, HID_KEY_5 }, /* 0x25 % */ \ + { 1, HID_KEY_7 }, /* 0x26 & */ \ + { 0, HID_KEY_APOSTROPHE }, /* 0x27 ' */ \ + { 1, HID_KEY_9 }, /* 0x28 ( */ \ + { 1, HID_KEY_0 }, /* 0x29 ) */ \ + { 1, HID_KEY_8 }, /* 0x2A * */ \ + { 1, HID_KEY_EQUAL }, /* 0x2B + */ \ + { 0, HID_KEY_COMMA }, /* 0x2C , */ \ + { 0, HID_KEY_MINUS }, /* 0x2D - */ \ + { 0, HID_KEY_PERIOD }, /* 0x2E . */ \ + { 0, HID_KEY_SLASH }, /* 0x2F / */ \ + { 0, HID_KEY_0 }, /* 0x30 0 */ \ + { 0, HID_KEY_1 }, /* 0x31 1 */ \ + { 0, HID_KEY_2 }, /* 0x32 2 */ \ + { 0, HID_KEY_3 }, /* 0x33 3 */ \ + { 0, HID_KEY_4 }, /* 0x34 4 */ \ + { 0, HID_KEY_5 }, /* 0x35 5 */ \ + { 0, HID_KEY_6 }, /* 0x36 6 */ \ + { 0, HID_KEY_7 }, /* 0x37 7 */ \ + { 0, HID_KEY_8 }, /* 0x38 8 */ \ + { 0, HID_KEY_9 }, /* 0x39 9 */ \ + { 1, HID_KEY_SEMICOLON }, /* 0x3A : */ \ + { 0, HID_KEY_SEMICOLON }, /* 0x3B{} + */ \ + { 1, HID_KEY_COMMA }, /* 0x3C < */ \ + { 0, HID_KEY_EQUAL }, /* 0x3D = */ \ + { 1, HID_KEY_PERIOD }, /* 0x3E > */ \ + { 1, HID_KEY_SLASH }, /* 0x3F ? */ \ + \ + { 1, HID_KEY_2 }, /* 0x40 @ */ \ + { 1, HID_KEY_A }, /* 0x41 A */ \ + { 1, HID_KEY_B }, /* 0x42 B */ \ + { 1, HID_KEY_C }, /* 0x43 C */ \ + { 1, HID_KEY_D }, /* 0x44 D */ \ + { 1, HID_KEY_E }, /* 0x45 E */ \ + { 1, HID_KEY_F }, /* 0x46 F */ \ + { 1, HID_KEY_G }, /* 0x47 G */ \ + { 1, HID_KEY_H }, /* 0x48 H */ \ + { 1, HID_KEY_I }, /* 0x49 I */ \ + { 1, HID_KEY_J }, /* 0x4A J */ \ + { 1, HID_KEY_K }, /* 0x4B K */ \ + { 1, HID_KEY_L }, /* 0x4C L */ \ + { 1, HID_KEY_M }, /* 0x4D M */ \ + { 1, HID_KEY_N }, /* 0x4E N */ \ + { 1, HID_KEY_O }, /* 0x4F O */ \ + { 1, HID_KEY_P }, /* 0x50 P */ \ + { 1, HID_KEY_Q }, /* 0x51 Q */ \ + { 1, HID_KEY_R }, /* 0x52 R */ \ + { 1, HID_KEY_S }, /* 0x53 S */ \ + { 1, HID_KEY_T }, /* 0x55 T */ \ + { 1, HID_KEY_U }, /* 0x55 U */ \ + { 1, HID_KEY_V }, /* 0x56 V */ \ + { 1, HID_KEY_W }, /* 0x57 W */ \ + { 1, HID_KEY_X }, /* 0x58 X */ \ + { 1, HID_KEY_Y }, /* 0x59 Y */ \ + { 1, HID_KEY_Z }, /* 0x5A Z */ \ + { 0, HID_KEY_BRACKET_LEFT }, /* 0x5B [ */ \ + { 0, HID_KEY_BACKSLASH }, /* 0x5C '\' */ \ + { 0, HID_KEY_BRACKET_RIGHT }, /* 0x5D ] */ \ + { 1, HID_KEY_6 }, /* 0x5E ^ */ \ + { 1, HID_KEY_MINUS }, /* 0x5F _ */ \ + \ + { 0, HID_KEY_GRAVE }, /* 0x60 ` */ \ + { 0, HID_KEY_A }, /* 0x61 a */ \ + { 0, HID_KEY_B }, /* 0x62 b */ \ + { 0, HID_KEY_C }, /* 0x63 c */ \ + { 0, HID_KEY_D }, /* 0x66 d */ \ + { 0, HID_KEY_E }, /* 0x65 e */ \ + { 0, HID_KEY_F }, /* 0x66 f */ \ + { 0, HID_KEY_G }, /* 0x67 g */ \ + { 0, HID_KEY_H }, /* 0x68 h */ \ + { 0, HID_KEY_I }, /* 0x69 i */ \ + { 0, HID_KEY_J }, /* 0x6A j */ \ + { 0, HID_KEY_K }, /* 0x6B k */ \ + { 0, HID_KEY_L }, /* 0x6C l */ \ + { 0, HID_KEY_M }, /* 0x6D m */ \ + { 0, HID_KEY_N }, /* 0x6E n */ \ + { 0, HID_KEY_O }, /* 0x6F o */ \ + { 0, HID_KEY_P }, /* 0x70 p */ \ + { 0, HID_KEY_Q }, /* 0x71 q */ \ + { 0, HID_KEY_R }, /* 0x72 r */ \ + { 0, HID_KEY_S }, /* 0x73 s */ \ + { 0, HID_KEY_T }, /* 0x75 t */ \ + { 0, HID_KEY_U }, /* 0x75 u */ \ + { 0, HID_KEY_V }, /* 0x76 v */ \ + { 0, HID_KEY_W }, /* 0x77 w */ \ + { 0, HID_KEY_X }, /* 0x78 x */ \ + { 0, HID_KEY_Y }, /* 0x79 y */ \ + { 0, HID_KEY_Z }, /* 0x7A z */ \ + { 1, HID_KEY_BRACKET_LEFT }, /* 0x7B { */ \ + { 1, HID_KEY_BACKSLASH }, /* 0x7C | */ \ + { 1, HID_KEY_BRACKET_RIGHT }, /* 0x7D } */ \ + { 1, HID_KEY_GRAVE }, /* 0x7E ~ */ \ + { \ + 0, HID_KEY_DELETE \ + } /* 0x7F Delete */ /*-------------------------------------------------------------------- * KEYCODE to Ascii Conversion @@ -1109,117 +1085,116 @@ enum { * char ch = shift ? conv_table[chr][1] : conv_table[chr][0]; * *--------------------------------------------------------------------*/ -#define HID_KEYCODE_TO_ASCII \ - {0 , 0 }, /* 0x00 */ \ - {0 , 0 }, /* 0x01 */ \ - {0 , 0 }, /* 0x02 */ \ - {0 , 0 }, /* 0x03 */ \ - {'a' , 'A' }, /* 0x04 */ \ - {'b' , 'B' }, /* 0x05 */ \ - {'c' , 'C' }, /* 0x06 */ \ - {'d' , 'D' }, /* 0x07 */ \ - {'e' , 'E' }, /* 0x08 */ \ - {'f' , 'F' }, /* 0x09 */ \ - {'g' , 'G' }, /* 0x0a */ \ - {'h' , 'H' }, /* 0x0b */ \ - {'i' , 'I' }, /* 0x0c */ \ - {'j' , 'J' }, /* 0x0d */ \ - {'k' , 'K' }, /* 0x0e */ \ - {'l' , 'L' }, /* 0x0f */ \ - {'m' , 'M' }, /* 0x10 */ \ - {'n' , 'N' }, /* 0x11 */ \ - {'o' , 'O' }, /* 0x12 */ \ - {'p' , 'P' }, /* 0x13 */ \ - {'q' , 'Q' }, /* 0x14 */ \ - {'r' , 'R' }, /* 0x15 */ \ - {'s' , 'S' }, /* 0x16 */ \ - {'t' , 'T' }, /* 0x17 */ \ - {'u' , 'U' }, /* 0x18 */ \ - {'v' , 'V' }, /* 0x19 */ \ - {'w' , 'W' }, /* 0x1a */ \ - {'x' , 'X' }, /* 0x1b */ \ - {'y' , 'Y' }, /* 0x1c */ \ - {'z' , 'Z' }, /* 0x1d */ \ - {'1' , '!' }, /* 0x1e */ \ - {'2' , '@' }, /* 0x1f */ \ - {'3' , '#' }, /* 0x20 */ \ - {'4' , '$' }, /* 0x21 */ \ - {'5' , '%' }, /* 0x22 */ \ - {'6' , '^' }, /* 0x23 */ \ - {'7' , '&' }, /* 0x24 */ \ - {'8' , '*' }, /* 0x25 */ \ - {'9' , '(' }, /* 0x26 */ \ - {'0' , ')' }, /* 0x27 */ \ - {'\r' , '\r' }, /* 0x28 */ \ - {'\x1b', '\x1b' }, /* 0x29 */ \ - {'\b' , '\b' }, /* 0x2a */ \ - {'\t' , '\t' }, /* 0x2b */ \ - {' ' , ' ' }, /* 0x2c */ \ - {'-' , '_' }, /* 0x2d */ \ - {'=' , '+' }, /* 0x2e */ \ - {'[' , '{' }, /* 0x2f */ \ - {']' , '}' }, /* 0x30 */ \ - {'\\' , '|' }, /* 0x31 */ \ - {'#' , '~' }, /* 0x32 */ \ - {';' , ':' }, /* 0x33 */ \ - {'\'' , '\"' }, /* 0x34 */ \ - {'`' , '~' }, /* 0x35 */ \ - {',' , '<' }, /* 0x36 */ \ - {'.' , '>' }, /* 0x37 */ \ - {'/' , '?' }, /* 0x38 */ \ - \ - {0 , 0 }, /* 0x39 */ \ - {0 , 0 }, /* 0x3a */ \ - {0 , 0 }, /* 0x3b */ \ - {0 , 0 }, /* 0x3c */ \ - {0 , 0 }, /* 0x3d */ \ - {0 , 0 }, /* 0x3e */ \ - {0 , 0 }, /* 0x3f */ \ - {0 , 0 }, /* 0x40 */ \ - {0 , 0 }, /* 0x41 */ \ - {0 , 0 }, /* 0x42 */ \ - {0 , 0 }, /* 0x43 */ \ - {0 , 0 }, /* 0x44 */ \ - {0 , 0 }, /* 0x45 */ \ - {0 , 0 }, /* 0x46 */ \ - {0 , 0 }, /* 0x47 */ \ - {0 , 0 }, /* 0x48 */ \ - {0 , 0 }, /* 0x49 */ \ - {0 , 0 }, /* 0x4a */ \ - {0 , 0 }, /* 0x4b */ \ - {0 , 0 }, /* 0x4c */ \ - {0 , 0 }, /* 0x4d */ \ - {0 , 0 }, /* 0x4e */ \ - {0 , 0 }, /* 0x4f */ \ - {0 , 0 }, /* 0x50 */ \ - {0 , 0 }, /* 0x51 */ \ - {0 , 0 }, /* 0x52 */ \ - {0 , 0 }, /* 0x53 */ \ - \ - {'/' , '/' }, /* 0x54 */ \ - {'*' , '*' }, /* 0x55 */ \ - {'-' , '-' }, /* 0x56 */ \ - {'+' , '+' }, /* 0x57 */ \ - {'\r' , '\r' }, /* 0x58 */ \ - {'1' , 0 }, /* 0x59 */ \ - {'2' , 0 }, /* 0x5a */ \ - {'3' , 0 }, /* 0x5b */ \ - {'4' , 0 }, /* 0x5c */ \ - {'5' , '5' }, /* 0x5d */ \ - {'6' , 0 }, /* 0x5e */ \ - {'7' , 0 }, /* 0x5f */ \ - {'8' , 0 }, /* 0x60 */ \ - {'9' , 0 }, /* 0x61 */ \ - {'0' , 0 }, /* 0x62 */ \ - {'.' , 0 }, /* 0x63 */ \ - {0 , 0 }, /* 0x64 */ \ - {0 , 0 }, /* 0x65 */ \ - {0 , 0 }, /* 0x66 */ \ - {'=' , '=' }, /* 0x67 */ \ - +#define HID_KEYCODE_TO_ASCII \ + { 0, 0 }, /* 0x00 */ \ + { 0, 0 }, /* 0x01 */ \ + { 0, 0 }, /* 0x02 */ \ + { 0, 0 }, /* 0x03 */ \ + { 'a', 'A' }, /* 0x04 */ \ + { 'b', 'B' }, /* 0x05 */ \ + { 'c', 'C' }, /* 0x06 */ \ + { 'd', 'D' }, /* 0x07 */ \ + { 'e', 'E' }, /* 0x08 */ \ + { 'f', 'F' }, /* 0x09 */ \ + { 'g', 'G' }, /* 0x0a */ \ + { 'h', 'H' }, /* 0x0b */ \ + { 'i', 'I' }, /* 0x0c */ \ + { 'j', 'J' }, /* 0x0d */ \ + { 'k', 'K' }, /* 0x0e */ \ + { 'l', 'L' }, /* 0x0f */ \ + { 'm', 'M' }, /* 0x10 */ \ + { 'n', 'N' }, /* 0x11 */ \ + { 'o', 'O' }, /* 0x12 */ \ + { 'p', 'P' }, /* 0x13 */ \ + { 'q', 'Q' }, /* 0x14 */ \ + { 'r', 'R' }, /* 0x15 */ \ + { 's', 'S' }, /* 0x16 */ \ + { 't', 'T' }, /* 0x17 */ \ + { 'u', 'U' }, /* 0x18 */ \ + { 'v', 'V' }, /* 0x19 */ \ + { 'w', 'W' }, /* 0x1a */ \ + { 'x', 'X' }, /* 0x1b */ \ + { 'y', 'Y' }, /* 0x1c */ \ + { 'z', 'Z' }, /* 0x1d */ \ + { '1', '!' }, /* 0x1e */ \ + { '2', '@' }, /* 0x1f */ \ + { '3', '#' }, /* 0x20 */ \ + { '4', '$' }, /* 0x21 */ \ + { '5', '%' }, /* 0x22 */ \ + { '6', '^' }, /* 0x23 */ \ + { '7', '&' }, /* 0x24 */ \ + { '8', '*' }, /* 0x25 */ \ + { '9', '(' }, /* 0x26 */ \ + { '0', ')' }, /* 0x27 */ \ + { '\r', '\r' }, /* 0x28 */ \ + { '\x1b', '\x1b' }, /* 0x29 */ \ + { '\b', '\b' }, /* 0x2a */ \ + { '\t', '\t' }, /* 0x2b */ \ + { ' ', ' ' }, /* 0x2c */ \ + { '-', '_' }, /* 0x2d */ \ + { '=', '+' }, /* 0x2e */ \ + { '[', '{' }, /* 0x2f */ \ + { ']', '}' }, /* 0x30 */ \ + { '\\', '|' }, /* 0x31 */ \ + { '#', '~' }, /* 0x32 */ \ + { ';', ':' }, /* 0x33 */ \ + { '\'', '\"' }, /* 0x34 */ \ + { '`', '~' }, /* 0x35 */ \ + { ',', '<' }, /* 0x36 */ \ + { '.', '>' }, /* 0x37 */ \ + { '/', '?' }, /* 0x38 */ \ + \ + { 0, 0 }, /* 0x39 */ \ + { 0, 0 }, /* 0x3a */ \ + { 0, 0 }, /* 0x3b */ \ + { 0, 0 }, /* 0x3c */ \ + { 0, 0 }, /* 0x3d */ \ + { 0, 0 }, /* 0x3e */ \ + { 0, 0 }, /* 0x3f */ \ + { 0, 0 }, /* 0x40 */ \ + { 0, 0 }, /* 0x41 */ \ + { 0, 0 }, /* 0x42 */ \ + { 0, 0 }, /* 0x43 */ \ + { 0, 0 }, /* 0x44 */ \ + { 0, 0 }, /* 0x45 */ \ + { 0, 0 }, /* 0x46 */ \ + { 0, 0 }, /* 0x47 */ \ + { 0, 0 }, /* 0x48 */ \ + { 0, 0 }, /* 0x49 */ \ + { 0, 0 }, /* 0x4a */ \ + { 0, 0 }, /* 0x4b */ \ + { 0, 0 }, /* 0x4c */ \ + { 0, 0 }, /* 0x4d */ \ + { 0, 0 }, /* 0x4e */ \ + { 0, 0 }, /* 0x4f */ \ + { 0, 0 }, /* 0x50 */ \ + { 0, 0 }, /* 0x51 */ \ + { 0, 0 }, /* 0x52 */ \ + { 0, 0 }, /* 0x53 */ \ + \ + { '/', '/' }, /* 0x54 */ \ + { '*', '*' }, /* 0x55 */ \ + { '-', '-' }, /* 0x56 */ \ + { '+', '+' }, /* 0x57 */ \ + { '\r', '\r' }, /* 0x58 */ \ + { '1', 0 }, /* 0x59 */ \ + { '2', 0 }, /* 0x5a */ \ + { '3', 0 }, /* 0x5b */ \ + { '4', 0 }, /* 0x5c */ \ + { '5', '5' }, /* 0x5d */ \ + { '6', 0 }, /* 0x5e */ \ + { '7', 0 }, /* 0x5f */ \ + { '8', 0 }, /* 0x60 */ \ + { '9', 0 }, /* 0x61 */ \ + { '0', 0 }, /* 0x62 */ \ + { '.', 0 }, /* 0x63 */ \ + { 0, 0 }, /* 0x64 */ \ + { 0, 0 }, /* 0x65 */ \ + { 0, 0 }, /* 0x66 */ \ + { '=', '=' }, /* 0x67 */ #ifdef __cplusplus - } +} #endif #endif /* _TUSB_HID_H__ */ diff --git a/Libraries/tinyusb/src/class/hid/hid_device.c b/Libraries/tinyusb/src/class/hid/hid_device.c index ef6c7f3afb4..eba1036bad1 100644 --- a/Libraries/tinyusb/src/class/hid/hid_device.c +++ b/Libraries/tinyusb/src/class/hid/hid_device.c @@ -40,369 +40,398 @@ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ typedef struct { - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; // optional Out endpoint - uint8_t itf_protocol; // Boot mouse or keyboard - - uint16_t report_desc_len; - uint8_t protocol_mode; // Boot (0) or Report protocol (1) - uint8_t idle_rate; // up to application to handle idle rate - - // TODO save hid descriptor since host can specifically request this after enumeration - // Note: HID descriptor may be not available from application after enumeration - tusb_hid_descriptor_hid_t const *hid_descriptor; - - uint8_t ctrl_buf[CFG_TUD_HID_EP_BUFSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_HID_EP_BUFSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_HID_EP_BUFSIZE]; + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; // optional Out endpoint + uint8_t itf_protocol; // Boot mouse or keyboard + + uint16_t report_desc_len; + uint8_t protocol_mode; // Boot (0) or Report protocol (1) + uint8_t idle_rate; // up to application to handle idle rate + + // TODO save hid descriptor since host can specifically request this after enumeration + // Note: HID descriptor may be not available from application after enumeration + tusb_hid_descriptor_hid_t const *hid_descriptor; + + uint8_t ctrl_buf[CFG_TUD_HID_EP_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_HID_EP_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_HID_EP_BUFSIZE]; } hidd_interface_t; CFG_TUD_MEM_SECTION tu_static hidd_interface_t _hidd_itf[CFG_TUD_HID]; /*------------- Helpers -------------*/ -TU_ATTR_ALWAYS_INLINE static inline uint8_t get_index_by_itfnum(uint8_t itf_num) { - for (uint8_t i = 0; i < CFG_TUD_HID; i++) { - if (itf_num == _hidd_itf[i].itf_num) { - return i; +TU_ATTR_ALWAYS_INLINE static inline uint8_t get_index_by_itfnum(uint8_t itf_num) +{ + for (uint8_t i = 0; i < CFG_TUD_HID; i++) { + if (itf_num == _hidd_itf[i].itf_num) { + return i; + } } - } - return 0xFF; + return 0xFF; } //--------------------------------------------------------------------+ // Weak stubs: invoked if no strong implementation is available //--------------------------------------------------------------------+ -TU_ATTR_WEAK void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol) { - (void) instance; - (void) protocol; +TU_ATTR_WEAK void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol) +{ + (void)instance; + (void)protocol; } -TU_ATTR_WEAK bool tud_hid_set_idle_cb(uint8_t instance, uint8_t idle_rate) { - (void) instance; - (void) idle_rate; - return true; +TU_ATTR_WEAK bool tud_hid_set_idle_cb(uint8_t instance, uint8_t idle_rate) +{ + (void)instance; + (void)idle_rate; + return true; } -TU_ATTR_WEAK void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len) { - (void) instance; - (void) report; - (void) len; +TU_ATTR_WEAK void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len) +{ + (void)instance; + (void)report; + (void)len; } // Invoked when a transfer wasn't successful -TU_ATTR_WEAK void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, uint8_t const* report, uint16_t xferred_bytes) { - (void) instance; - (void) report_type; - (void) report; - (void) xferred_bytes; +TU_ATTR_WEAK void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, + uint8_t const *report, uint16_t xferred_bytes) +{ + (void)instance; + (void)report_type; + (void)report; + (void)xferred_bytes; } //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ -bool tud_hid_n_ready(uint8_t instance) { - uint8_t const rhport = 0; - uint8_t const ep_in = _hidd_itf[instance].ep_in; - return tud_ready() && (ep_in != 0) && !usbd_edpt_busy(rhport, ep_in); +bool tud_hid_n_ready(uint8_t instance) +{ + uint8_t const rhport = 0; + uint8_t const ep_in = _hidd_itf[instance].ep_in; + return tud_ready() && (ep_in != 0) && !usbd_edpt_busy(rhport, ep_in); } -bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const *report, uint16_t len) { - uint8_t const rhport = 0; - hidd_interface_t *p_hid = &_hidd_itf[instance]; +bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const *report, uint16_t len) +{ + uint8_t const rhport = 0; + hidd_interface_t *p_hid = &_hidd_itf[instance]; - // claim endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_hid->ep_in)); + // claim endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_hid->ep_in)); - // prepare data - if (report_id) { - p_hid->epin_buf[0] = report_id; - TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf + 1, CFG_TUD_HID_EP_BUFSIZE - 1, report, len)); - len++; - } else { - TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf, CFG_TUD_HID_EP_BUFSIZE, report, len)); - } + // prepare data + if (report_id) { + p_hid->epin_buf[0] = report_id; + TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf + 1, CFG_TUD_HID_EP_BUFSIZE - 1, report, len)); + len++; + } else { + TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf, CFG_TUD_HID_EP_BUFSIZE, report, len)); + } - return usbd_edpt_xfer(rhport, p_hid->ep_in, p_hid->epin_buf, len); + return usbd_edpt_xfer(rhport, p_hid->ep_in, p_hid->epin_buf, len); } -uint8_t tud_hid_n_interface_protocol(uint8_t instance) { - return _hidd_itf[instance].itf_protocol; +uint8_t tud_hid_n_interface_protocol(uint8_t instance) +{ + return _hidd_itf[instance].itf_protocol; } -uint8_t tud_hid_n_get_protocol(uint8_t instance) { - return _hidd_itf[instance].protocol_mode; +uint8_t tud_hid_n_get_protocol(uint8_t instance) +{ + return _hidd_itf[instance].protocol_mode; } -bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, const uint8_t keycode[6]) { - hid_keyboard_report_t report; - report.modifier = modifier; - report.reserved = 0; +bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, + const uint8_t keycode[6]) +{ + hid_keyboard_report_t report; + report.modifier = modifier; + report.reserved = 0; - if (keycode) { - memcpy(report.keycode, keycode, sizeof(report.keycode)); - } else { - tu_memclr(report.keycode, 6); - } + if (keycode) { + memcpy(report.keycode, keycode, sizeof(report.keycode)); + } else { + tu_memclr(report.keycode, 6); + } - return tud_hid_n_report(instance, report_id, &report, sizeof(report)); + return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } -bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, - uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal) { - hid_mouse_report_t report = { - .buttons = buttons, - .x = x, - .y = y, - .wheel = vertical, - .pan = horizontal - }; - - return tud_hid_n_report(instance, report_id, &report, sizeof(report)); +bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, + int8_t y, int8_t vertical, int8_t horizontal) +{ + hid_mouse_report_t report = { + .buttons = buttons, .x = x, .y = y, .wheel = vertical, .pan = horizontal + }; + + return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } -bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, - uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal) { - hid_abs_mouse_report_t report = { - .buttons = buttons, - .x = x, - .y = y, - .wheel = vertical, - .pan = horizontal - }; - return tud_hid_n_report(instance, report_id, &report, sizeof(report)); +bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, + int16_t y, int8_t vertical, int8_t horizontal) +{ + hid_abs_mouse_report_t report = { + .buttons = buttons, .x = x, .y = y, .wheel = vertical, .pan = horizontal + }; + return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } -bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, - int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) { - hid_gamepad_report_t report = { - .x = x, - .y = y, - .z = z, - .rz = rz, - .rx = rx, - .ry = ry, - .hat = hat, - .buttons = buttons, - }; - - return tud_hid_n_report(instance, report_id, &report, sizeof(report)); +bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, + int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) +{ + hid_gamepad_report_t report = { + .x = x, + .y = y, + .z = z, + .rz = rz, + .rx = rx, + .ry = ry, + .hat = hat, + .buttons = buttons, + }; + + return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } //--------------------------------------------------------------------+ // USBD-CLASS API //--------------------------------------------------------------------+ -void hidd_init(void) { - hidd_reset(0); +void hidd_init(void) +{ + hidd_reset(0); } -bool hidd_deinit(void) { - return true; +bool hidd_deinit(void) +{ + return true; } -void hidd_reset(uint8_t rhport) { - (void)rhport; - tu_memclr(_hidd_itf, sizeof(_hidd_itf)); +void hidd_reset(uint8_t rhport) +{ + (void)rhport; + tu_memclr(_hidd_itf, sizeof(_hidd_itf)); } -uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) { - TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass, 0); - - // len = interface + hid + n*endpoints - uint16_t const drv_len = (uint16_t) (sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + - desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); - TU_ASSERT(max_len >= drv_len, 0); - - // Find available interface - hidd_interface_t *p_hid = NULL; - uint8_t hid_id; - for (hid_id = 0; hid_id < CFG_TUD_HID; hid_id++) { - if (_hidd_itf[hid_id].ep_in == 0) { - p_hid = &_hidd_itf[hid_id]; - break; +uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) +{ + TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass, 0); + + // len = interface + hid + n*endpoints + uint16_t const drv_len = + (uint16_t)(sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + + desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); + TU_ASSERT(max_len >= drv_len, 0); + + // Find available interface + hidd_interface_t *p_hid = NULL; + uint8_t hid_id; + for (hid_id = 0; hid_id < CFG_TUD_HID; hid_id++) { + if (_hidd_itf[hid_id].ep_in == 0) { + p_hid = &_hidd_itf[hid_id]; + break; + } } - } - TU_ASSERT(p_hid, 0); + TU_ASSERT(p_hid, 0); - uint8_t const *p_desc = (uint8_t const *)desc_itf; + uint8_t const *p_desc = (uint8_t const *)desc_itf; - //------------- HID descriptor -------------// - p_desc = tu_desc_next(p_desc); - TU_ASSERT(HID_DESC_TYPE_HID == tu_desc_type(p_desc), 0); - p_hid->hid_descriptor = (tusb_hid_descriptor_hid_t const *)p_desc; + //------------- HID descriptor -------------// + p_desc = tu_desc_next(p_desc); + TU_ASSERT(HID_DESC_TYPE_HID == tu_desc_type(p_desc), 0); + p_hid->hid_descriptor = (tusb_hid_descriptor_hid_t const *)p_desc; - //------------- Endpoint Descriptor -------------// - p_desc = tu_desc_next(p_desc); - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_INTERRUPT, &p_hid->ep_out, &p_hid->ep_in), 0); + //------------- Endpoint Descriptor -------------// + p_desc = tu_desc_next(p_desc); + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_INTERRUPT, + &p_hid->ep_out, &p_hid->ep_in), + 0); - if (desc_itf->bInterfaceSubClass == HID_SUBCLASS_BOOT) { - p_hid->itf_protocol = desc_itf->bInterfaceProtocol; - } + if (desc_itf->bInterfaceSubClass == HID_SUBCLASS_BOOT) { + p_hid->itf_protocol = desc_itf->bInterfaceProtocol; + } - p_hid->protocol_mode = HID_PROTOCOL_REPORT; // Per Specs: default is report mode - p_hid->itf_num = desc_itf->bInterfaceNumber; + p_hid->protocol_mode = HID_PROTOCOL_REPORT; // Per Specs: default is report mode + p_hid->itf_num = desc_itf->bInterfaceNumber; - // Use offsetof to avoid pointer to the odd/misaligned address - p_hid->report_desc_len = tu_unaligned_read16((uint8_t const *)p_hid->hid_descriptor + offsetof(tusb_hid_descriptor_hid_t, wReportLength)); + // Use offsetof to avoid pointer to the odd/misaligned address + p_hid->report_desc_len = + tu_unaligned_read16((uint8_t const *)p_hid->hid_descriptor + + offsetof(tusb_hid_descriptor_hid_t, wReportLength)); - // Prepare for output endpoint - if (p_hid->ep_out) { - if (!usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))) { - TU_LOG_FAILED(); - TU_BREAKPOINT(); + // Prepare for output endpoint + if (p_hid->ep_out) { + if (!usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))) { + TU_LOG_FAILED(); + TU_BREAKPOINT(); + } } - } - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool hidd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); - - uint8_t const hid_itf = get_index_by_itfnum((uint8_t)request->wIndex); - TU_VERIFY(hid_itf < CFG_TUD_HID); - - hidd_interface_t *p_hid = &_hidd_itf[hid_itf]; - - if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { - //------------- STD Request -------------// - if (stage == CONTROL_STAGE_SETUP) { - uint8_t const desc_type = tu_u16_high(request->wValue); - // uint8_t const desc_index = tu_u16_low (request->wValue); - - if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && desc_type == HID_DESC_TYPE_HID) { - TU_VERIFY(p_hid->hid_descriptor); - TU_VERIFY(tud_control_xfer(rhport, request, (void *)(uintptr_t)p_hid->hid_descriptor, p_hid->hid_descriptor->bLength)); - } else if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && desc_type == HID_DESC_TYPE_REPORT) { - uint8_t const *desc_report = tud_hid_descriptor_report_cb(hid_itf); - tud_control_xfer(rhport, request, (void *)(uintptr_t)desc_report, p_hid->report_desc_len); - } else { - return false; // stall unsupported request - } - } - } else if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { - //------------- Class Specific Request -------------// - switch (request->bRequest) { - case HID_REQ_CONTROL_GET_REPORT: - if (stage == CONTROL_STAGE_SETUP) { - uint8_t const report_type = tu_u16_high(request->wValue); - uint8_t const report_id = tu_u16_low(request->wValue); - - uint8_t* report_buf = p_hid->ctrl_buf; - uint16_t req_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); - uint16_t xferlen = 0; - - // If host request a specific Report ID, add ID to as 1 byte of response - if ((report_id != HID_REPORT_TYPE_INVALID) && (req_len > 1)) { - *report_buf++ = report_id; - req_len--; - xferlen++; - } - - xferlen += tud_hid_get_report_cb(hid_itf, report_id, (hid_report_type_t) report_type, report_buf, req_len); - TU_ASSERT(xferlen > 0); - - tud_control_xfer(rhport, request, p_hid->ctrl_buf, xferlen); - } - break; - - case HID_REQ_CONTROL_SET_REPORT: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(request->wLength <= sizeof(p_hid->ctrl_buf)); - tud_control_xfer(rhport, request, p_hid->ctrl_buf, request->wLength); - } else if (stage == CONTROL_STAGE_ACK) { - uint8_t const report_type = tu_u16_high(request->wValue); - uint8_t const report_id = tu_u16_low(request->wValue); - - uint8_t const* report_buf = p_hid->ctrl_buf; - uint16_t report_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); - - // If host request a specific Report ID, extract report ID in buffer before invoking callback - if ((report_id != HID_REPORT_TYPE_INVALID) && (report_len > 1) && (report_id == report_buf[0])) { - report_buf++; - report_len--; - } - - tud_hid_set_report_cb(hid_itf, report_id, (hid_report_type_t) report_type, report_buf, report_len); - } - break; +bool hidd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +{ + TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); - case HID_REQ_CONTROL_SET_IDLE: - if (stage == CONTROL_STAGE_SETUP) { - p_hid->idle_rate = tu_u16_high(request->wValue); - TU_VERIFY(tud_hid_set_idle_cb(hid_itf, p_hid->idle_rate)); // stall if false - tud_control_status(rhport, request); - } - break; + uint8_t const hid_itf = get_index_by_itfnum((uint8_t)request->wIndex); + TU_VERIFY(hid_itf < CFG_TUD_HID); - case HID_REQ_CONTROL_GET_IDLE: - if (stage == CONTROL_STAGE_SETUP) { - // TODO idle rate of report - tud_control_xfer(rhport, request, &p_hid->idle_rate, 1); - } - break; + hidd_interface_t *p_hid = &_hidd_itf[hid_itf]; - case HID_REQ_CONTROL_GET_PROTOCOL: + if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { + //------------- STD Request -------------// if (stage == CONTROL_STAGE_SETUP) { - tud_control_xfer(rhport, request, &p_hid->protocol_mode, 1); + uint8_t const desc_type = tu_u16_high(request->wValue); + // uint8_t const desc_index = tu_u16_low (request->wValue); + + if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && desc_type == HID_DESC_TYPE_HID) { + TU_VERIFY(p_hid->hid_descriptor); + TU_VERIFY(tud_control_xfer(rhport, request, + (void *)(uintptr_t)p_hid->hid_descriptor, + p_hid->hid_descriptor->bLength)); + } else if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && + desc_type == HID_DESC_TYPE_REPORT) { + uint8_t const *desc_report = tud_hid_descriptor_report_cb(hid_itf); + tud_control_xfer(rhport, request, (void *)(uintptr_t)desc_report, + p_hid->report_desc_len); + } else { + return false; // stall unsupported request + } } - break; - - case HID_REQ_CONTROL_SET_PROTOCOL: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_status(rhport, request); - } else if (stage == CONTROL_STAGE_ACK) { - p_hid->protocol_mode = (uint8_t) request->wValue; - tud_hid_set_protocol_cb(hid_itf, p_hid->protocol_mode); + } else if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { + //------------- Class Specific Request -------------// + switch (request->bRequest) { + case HID_REQ_CONTROL_GET_REPORT: + if (stage == CONTROL_STAGE_SETUP) { + uint8_t const report_type = tu_u16_high(request->wValue); + uint8_t const report_id = tu_u16_low(request->wValue); + + uint8_t *report_buf = p_hid->ctrl_buf; + uint16_t req_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); + uint16_t xferlen = 0; + + // If host request a specific Report ID, add ID to as 1 byte of response + if ((report_id != HID_REPORT_TYPE_INVALID) && (req_len > 1)) { + *report_buf++ = report_id; + req_len--; + xferlen++; + } + + xferlen += tud_hid_get_report_cb(hid_itf, report_id, (hid_report_type_t)report_type, + report_buf, req_len); + TU_ASSERT(xferlen > 0); + + tud_control_xfer(rhport, request, p_hid->ctrl_buf, xferlen); + } + break; + + case HID_REQ_CONTROL_SET_REPORT: + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(request->wLength <= sizeof(p_hid->ctrl_buf)); + tud_control_xfer(rhport, request, p_hid->ctrl_buf, request->wLength); + } else if (stage == CONTROL_STAGE_ACK) { + uint8_t const report_type = tu_u16_high(request->wValue); + uint8_t const report_id = tu_u16_low(request->wValue); + + uint8_t const *report_buf = p_hid->ctrl_buf; + uint16_t report_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); + + // If host request a specific Report ID, extract report ID in buffer before invoking callback + if ((report_id != HID_REPORT_TYPE_INVALID) && (report_len > 1) && + (report_id == report_buf[0])) { + report_buf++; + report_len--; + } + + tud_hid_set_report_cb(hid_itf, report_id, (hid_report_type_t)report_type, + report_buf, report_len); + } + break; + + case HID_REQ_CONTROL_SET_IDLE: + if (stage == CONTROL_STAGE_SETUP) { + p_hid->idle_rate = tu_u16_high(request->wValue); + TU_VERIFY(tud_hid_set_idle_cb(hid_itf, p_hid->idle_rate)); // stall if false + tud_control_status(rhport, request); + } + break; + + case HID_REQ_CONTROL_GET_IDLE: + if (stage == CONTROL_STAGE_SETUP) { + // TODO idle rate of report + tud_control_xfer(rhport, request, &p_hid->idle_rate, 1); + } + break; + + case HID_REQ_CONTROL_GET_PROTOCOL: + if (stage == CONTROL_STAGE_SETUP) { + tud_control_xfer(rhport, request, &p_hid->protocol_mode, 1); + } + break; + + case HID_REQ_CONTROL_SET_PROTOCOL: + if (stage == CONTROL_STAGE_SETUP) { + tud_control_status(rhport, request); + } else if (stage == CONTROL_STAGE_ACK) { + p_hid->protocol_mode = (uint8_t)request->wValue; + tud_hid_set_protocol_cb(hid_itf, p_hid->protocol_mode); + } + break; + + default: + return false; // stall unsupported request } - break; - - default: + } else { return false; // stall unsupported request } - } else { - return false; // stall unsupported request - } - return true; + return true; } -bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - uint8_t instance = 0; - hidd_interface_t *p_hid = _hidd_itf; - - // Identify which interface to use - for (instance = 0; instance < CFG_TUD_HID; instance++) { - p_hid = &_hidd_itf[instance]; - if ((ep_addr == p_hid->ep_out) || (ep_addr == p_hid->ep_in)) { - break; - } - } - TU_ASSERT(instance < CFG_TUD_HID); +bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) +{ + uint8_t instance = 0; + hidd_interface_t *p_hid = _hidd_itf; - if (ep_addr == p_hid->ep_in) { - // Input report - if (XFER_RESULT_SUCCESS == result) { - tud_hid_report_complete_cb(instance, p_hid->epin_buf, (uint16_t) xferred_bytes); - } else { - tud_hid_report_failed_cb(instance, HID_REPORT_TYPE_INPUT, p_hid->epin_buf, (uint16_t) xferred_bytes); + // Identify which interface to use + for (instance = 0; instance < CFG_TUD_HID; instance++) { + p_hid = &_hidd_itf[instance]; + if ((ep_addr == p_hid->ep_out) || (ep_addr == p_hid->ep_in)) { + break; + } } - } else { - // Output report - if (XFER_RESULT_SUCCESS == result) { - tud_hid_set_report_cb(instance, 0, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, (uint16_t)xferred_bytes); + TU_ASSERT(instance < CFG_TUD_HID); + + if (ep_addr == p_hid->ep_in) { + // Input report + if (XFER_RESULT_SUCCESS == result) { + tud_hid_report_complete_cb(instance, p_hid->epin_buf, (uint16_t)xferred_bytes); + } else { + tud_hid_report_failed_cb(instance, HID_REPORT_TYPE_INPUT, p_hid->epin_buf, + (uint16_t)xferred_bytes); + } } else { - tud_hid_report_failed_cb(instance, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, (uint16_t) xferred_bytes); - } + // Output report + if (XFER_RESULT_SUCCESS == result) { + tud_hid_set_report_cb(instance, 0, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, + (uint16_t)xferred_bytes); + } else { + tud_hid_report_failed_cb(instance, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, + (uint16_t)xferred_bytes); + } - // prepare for new transfer - TU_ASSERT(usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))); - } + // prepare for new transfer + TU_ASSERT( + usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))); + } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/hid/hid_device.h b/Libraries/tinyusb/src/class/hid/hid_device.h index ab2e273736b..ea0958f3801 100644 --- a/Libraries/tinyusb/src/class/hid/hid_device.h +++ b/Libraries/tinyusb/src/class/hid/hid_device.h @@ -30,7 +30,7 @@ #include "hid.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -38,13 +38,13 @@ //--------------------------------------------------------------------+ #if !defined(CFG_TUD_HID_EP_BUFSIZE) & defined(CFG_TUD_HID_BUFSIZE) - // TODO warn user to use new name later on - // #warning CFG_TUD_HID_BUFSIZE is renamed to CFG_TUD_HID_EP_BUFSIZE, please update to use the new name - #define CFG_TUD_HID_EP_BUFSIZE CFG_TUD_HID_BUFSIZE +// TODO warn user to use new name later on +// #warning CFG_TUD_HID_BUFSIZE is renamed to CFG_TUD_HID_EP_BUFSIZE, please update to use the new name +#define CFG_TUD_HID_EP_BUFSIZE CFG_TUD_HID_BUFSIZE #endif #ifndef CFG_TUD_HID_EP_BUFSIZE - #define CFG_TUD_HID_EP_BUFSIZE 64 +#define CFG_TUD_HID_EP_BUFSIZE 64 #endif //--------------------------------------------------------------------+ @@ -61,57 +61,79 @@ uint8_t tud_hid_n_interface_protocol(uint8_t instance); uint8_t tud_hid_n_get_protocol(uint8_t instance); // Send report to host -bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const* report, uint16_t len); +bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const *report, uint16_t len); // KEYBOARD: convenient helper to send keyboard report if application // use template layout report as defined by hid_keyboard_report_t -bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, const uint8_t keycode[6]); +bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, + const uint8_t keycode[6]); // MOUSE: convenient helper to send mouse report if application // use template layout report as defined by hid_mouse_report_t -bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal); +bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, + int8_t y, int8_t vertical, int8_t horizontal); // ABSOLUTE MOUSE: convenient helper to send absolute mouse report if application // use template layout report as defined by hid_abs_mouse_report_t -bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal); +bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, + int16_t y, int8_t vertical, int8_t horizontal); // Gamepad: convenient helper to send gamepad report if application // use template layout report TUD_HID_REPORT_DESC_GAMEPAD -bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons); +bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, + int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons); //--------------------------------------------------------------------+ // Application API (Single Port) //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_ready(void) { - return tud_hid_n_ready(0); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_ready(void) +{ + return tud_hid_n_ready(0); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_hid_interface_protocol(void) { - return tud_hid_n_interface_protocol(0); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_hid_interface_protocol(void) +{ + return tud_hid_n_interface_protocol(0); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_hid_get_protocol(void) { - return tud_hid_n_get_protocol(0); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_hid_get_protocol(void) +{ + return tud_hid_n_get_protocol(0); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_report(uint8_t report_id, void const* report, uint16_t len) { - return tud_hid_n_report(0, report_id, report, len); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_report(uint8_t report_id, void const *report, + uint16_t len) +{ + return tud_hid_n_report(0, report_id, report, len); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, const uint8_t keycode[6]) { - return tud_hid_n_keyboard_report(0, report_id, modifier, keycode); +TU_ATTR_ALWAYS_INLINE static inline bool +tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, const uint8_t keycode[6]) +{ + return tud_hid_n_keyboard_report(0, report_id, modifier, keycode); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_mouse_report(uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal) { - return tud_hid_n_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_mouse_report(uint8_t report_id, uint8_t buttons, + int8_t x, int8_t y, int8_t vertical, + int8_t horizontal) +{ + return tud_hid_n_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_abs_mouse_report(uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal) { - return tud_hid_n_abs_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_abs_mouse_report(uint8_t report_id, + uint8_t buttons, int16_t x, + int16_t y, int8_t vertical, + int8_t horizontal) +{ + return tud_hid_n_abs_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) { - return tud_hid_n_gamepad_report(0, report_id, x, y, z, rz, rx, ry, hat, buttons); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, + int8_t y, int8_t z, int8_t rz, + int8_t rx, int8_t ry, uint8_t hat, + uint32_t buttons) +{ + return tud_hid_n_gamepad_report(0, report_id, x, y, z, rz, rx, ry, hat, buttons); } //--------------------------------------------------------------------+ @@ -120,16 +142,18 @@ TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_gamepad_report(uint8_t report_i // Invoked when received GET HID REPORT DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance); +uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance); // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen); +uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, + uint8_t *buffer, uint16_t reqlen); // Invoked when received SET_REPORT control request or // received data on OUT endpoint (Report ID = 0, Type = OUTPUT) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize); +void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, + uint8_t const *buffer, uint16_t bufsize); // Invoked when received SET_PROTOCOL request // protocol is either HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) @@ -143,10 +167,11 @@ bool tud_hid_set_idle_cb(uint8_t instance, uint8_t idle_rate); // Invoked when sent REPORT successfully to host // Application can use this to send the next report // Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len); +void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len); // Invoked when a transfer wasn't successful -void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, uint8_t const* report, uint16_t xferred_bytes); +void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, + uint8_t const *report, uint16_t xferred_bytes); /* --------------------------------------------------------------------+ * HID Report Descriptor Template @@ -167,160 +192,78 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, u *--------------------------------------------------------------------*/ // Keyboard Report Descriptor Template -#define TUD_HID_REPORT_DESC_KEYBOARD(...) \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ) ,\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ - /* Report ID if any */\ - __VA_ARGS__ \ - /* 8 bits Modifier Keys (Shift, Control, Alt) */ \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ) ,\ - HID_USAGE_MIN ( 224 ) ,\ - HID_USAGE_MAX ( 231 ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX ( 1 ) ,\ - HID_REPORT_COUNT ( 8 ) ,\ - HID_REPORT_SIZE ( 1 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - /* 8 bit reserved */ \ - HID_REPORT_COUNT ( 1 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_INPUT ( HID_CONSTANT ) ,\ - /* Output 5-bit LED Indicator Kana | Compose | ScrollLock | CapsLock | NumLock */ \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ) ,\ - HID_USAGE_MIN ( 1 ) ,\ - HID_USAGE_MAX ( 5 ) ,\ - HID_REPORT_COUNT ( 5 ) ,\ - HID_REPORT_SIZE ( 1 ) ,\ - HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - /* led padding */ \ - HID_REPORT_COUNT ( 1 ) ,\ - HID_REPORT_SIZE ( 3 ) ,\ - HID_OUTPUT ( HID_CONSTANT ) ,\ - /* 6-byte Keycodes */ \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ) ,\ - HID_USAGE_MIN ( 0 ) ,\ - HID_USAGE_MAX_N ( 255, 2 ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX_N( 255, 2 ) ,\ - HID_REPORT_COUNT ( 6 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_KEYBOARD(...) \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_KEYBOARD), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ + __VA_ARGS__ /* 8 bits Modifier Keys (Shift, Control, Alt) */ \ + HID_USAGE_PAGE(HID_USAGE_PAGE_KEYBOARD), \ + HID_USAGE_MIN(224), HID_USAGE_MAX(231), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), \ + HID_REPORT_COUNT(8), HID_REPORT_SIZE(1), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 8 bit reserved */ \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ + HID_INPUT( \ + HID_CONSTANT), /* Output 5-bit LED Indicator Kana | Compose | ScrollLock | CapsLock | NumLock */ \ + HID_USAGE_PAGE(HID_USAGE_PAGE_LED), HID_USAGE_MIN(1), HID_USAGE_MAX(5), \ + HID_REPORT_COUNT(5), HID_REPORT_SIZE(1), \ + HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* led padding */ \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(3), HID_OUTPUT(HID_CONSTANT), /* 6-byte Keycodes */ \ + HID_USAGE_PAGE(HID_USAGE_PAGE_KEYBOARD), HID_USAGE_MIN(0), HID_USAGE_MAX_N(255, 2), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(255, 2), HID_REPORT_COUNT(6), HID_REPORT_SIZE(8), \ + HID_INPUT(HID_DATA | HID_ARRAY | HID_ABSOLUTE), HID_COLLECTION_END // Mouse Report Descriptor Template -#define TUD_HID_REPORT_DESC_MOUSE(...) \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ - /* Report ID if any */\ - __VA_ARGS__ \ - HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\ - HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\ - HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ - HID_USAGE_MIN ( 1 ) ,\ - HID_USAGE_MAX ( 5 ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX ( 1 ) ,\ - /* Left, Right, Middle, Backward, Forward buttons */ \ - HID_REPORT_COUNT( 5 ) ,\ - HID_REPORT_SIZE ( 1 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - /* 3 bit padding */ \ - HID_REPORT_COUNT( 1 ) ,\ - HID_REPORT_SIZE ( 3 ) ,\ - HID_INPUT ( HID_CONSTANT ) ,\ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - /* X, Y position [-127, 127] */ \ - HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ - HID_LOGICAL_MIN ( 0x81 ) ,\ - HID_LOGICAL_MAX ( 0x7f ) ,\ - HID_REPORT_COUNT( 2 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ - /* Verital wheel scroll [-127, 127] */ \ - HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\ - HID_LOGICAL_MIN ( 0x81 ) ,\ - HID_LOGICAL_MAX ( 0x7f ) ,\ - HID_REPORT_COUNT( 1 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ - HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ), \ - /* Horizontal wheel scroll [-127, 127] */ \ - HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ), \ - HID_LOGICAL_MIN ( 0x81 ), \ - HID_LOGICAL_MAX ( 0x7f ), \ - HID_REPORT_COUNT( 1 ), \ - HID_REPORT_SIZE ( 8 ), \ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), \ - HID_COLLECTION_END , \ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_MOUSE(...) \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_MOUSE), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ + __VA_ARGS__ HID_USAGE(HID_USAGE_DESKTOP_POINTER), HID_COLLECTION(HID_COLLECTION_PHYSICAL), \ + HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), HID_USAGE_MAX(5), \ + HID_LOGICAL_MIN(0), \ + HID_LOGICAL_MAX(1), /* Left, Right, Middle, Backward, Forward buttons */ \ + HID_REPORT_COUNT(5), HID_REPORT_SIZE(1), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 3 bit padding */ \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(3), HID_INPUT(HID_CONSTANT), \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), /* X, Y position [-127, 127] */ \ + HID_USAGE(HID_USAGE_DESKTOP_X), HID_USAGE(HID_USAGE_DESKTOP_Y), HID_LOGICAL_MIN(0x81), \ + HID_LOGICAL_MAX(0x7f), HID_REPORT_COUNT(2), HID_REPORT_SIZE(8), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), /* Verital wheel scroll [-127, 127] */ \ + HID_USAGE(HID_USAGE_DESKTOP_WHEEL), HID_LOGICAL_MIN(0x81), HID_LOGICAL_MAX(0x7f), \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), \ + HID_USAGE_PAGE(HID_USAGE_PAGE_CONSUMER), /* Horizontal wheel scroll [-127, 127] */ \ + HID_USAGE_N(HID_USAGE_CONSUMER_AC_PAN, 2), HID_LOGICAL_MIN(0x81), HID_LOGICAL_MAX(0x7f), \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), HID_COLLECTION_END, HID_COLLECTION_END // Absolute Mouse Report Descriptor Template -#define TUD_HID_REPORT_DESC_ABSMOUSE(...) \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ - /* Report ID if any */\ - __VA_ARGS__ \ - HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\ - HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\ - HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ - HID_USAGE_MIN ( 1 ) ,\ - HID_USAGE_MAX ( 5 ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX ( 1 ) ,\ - /* Left, Right, Middle, Backward, Forward buttons */ \ - HID_REPORT_COUNT( 5 ) ,\ - HID_REPORT_SIZE ( 1 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - /* 3 bit padding */ \ - HID_REPORT_COUNT( 1 ) ,\ - HID_REPORT_SIZE ( 3 ) ,\ - HID_INPUT ( HID_CONSTANT ) ,\ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - /* X, Y absolute position [0, 32767] */ \ - HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ - HID_LOGICAL_MIN ( 0x00 ) ,\ - HID_LOGICAL_MAX_N( 0x7FFF, 2 ) ,\ - HID_REPORT_SIZE ( 16 ) ,\ - HID_REPORT_COUNT ( 2 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - /* Vertical wheel scroll [-127, 127] */ \ - HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\ - HID_LOGICAL_MIN ( 0x81 ) ,\ - HID_LOGICAL_MAX ( 0x7f ) ,\ - HID_REPORT_COUNT( 1 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ - HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ), \ - /* Horizontal wheel scroll [-127, 127] */ \ - HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ), \ - HID_LOGICAL_MIN ( 0x81 ), \ - HID_LOGICAL_MAX ( 0x7f ), \ - HID_REPORT_COUNT( 1 ), \ - HID_REPORT_SIZE ( 8 ), \ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), \ - HID_COLLECTION_END , \ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_ABSMOUSE(...) \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_MOUSE), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ + __VA_ARGS__ HID_USAGE(HID_USAGE_DESKTOP_POINTER), HID_COLLECTION(HID_COLLECTION_PHYSICAL), \ + HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), HID_USAGE_MAX(5), \ + HID_LOGICAL_MIN(0), \ + HID_LOGICAL_MAX(1), /* Left, Right, Middle, Backward, Forward buttons */ \ + HID_REPORT_COUNT(5), HID_REPORT_SIZE(1), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 3 bit padding */ \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(3), HID_INPUT(HID_CONSTANT), \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), /* X, Y absolute position [0, 32767] */ \ + HID_USAGE(HID_USAGE_DESKTOP_X), HID_USAGE(HID_USAGE_DESKTOP_Y), HID_LOGICAL_MIN(0x00), \ + HID_LOGICAL_MAX_N(0x7FFF, 2), HID_REPORT_SIZE(16), HID_REPORT_COUNT(2), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* Vertical wheel scroll [-127, 127] */ \ + HID_USAGE(HID_USAGE_DESKTOP_WHEEL), HID_LOGICAL_MIN(0x81), HID_LOGICAL_MAX(0x7f), \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), \ + HID_USAGE_PAGE(HID_USAGE_PAGE_CONSUMER), /* Horizontal wheel scroll [-127, 127] */ \ + HID_USAGE_N(HID_USAGE_CONSUMER_AC_PAN, 2), HID_LOGICAL_MIN(0x81), HID_LOGICAL_MAX(0x7f), \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), HID_COLLECTION_END, HID_COLLECTION_END // Consumer Control Report Descriptor Template -#define TUD_HID_REPORT_DESC_CONSUMER(...) \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\ - HID_USAGE ( HID_USAGE_CONSUMER_CONTROL ) ,\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ - /* Report ID if any */\ - __VA_ARGS__ \ - HID_LOGICAL_MIN ( 0x00 ) ,\ - HID_LOGICAL_MAX_N( 0x03FF, 2 ) ,\ - HID_USAGE_MIN ( 0x00 ) ,\ - HID_USAGE_MAX_N ( 0x03FF, 2 ) ,\ - HID_REPORT_COUNT ( 1 ) ,\ - HID_REPORT_SIZE ( 16 ) ,\ - HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_CONSUMER(...) \ + HID_USAGE_PAGE(HID_USAGE_PAGE_CONSUMER), HID_USAGE(HID_USAGE_CONSUMER_CONTROL), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ + __VA_ARGS__ HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0x03FF, 2), HID_USAGE_MIN(0x00), \ + HID_USAGE_MAX_N(0x03FF, 2), HID_REPORT_COUNT(1), HID_REPORT_SIZE(16), \ + HID_INPUT(HID_DATA | HID_ARRAY | HID_ABSOLUTE), HID_COLLECTION_END /* System Control Report Descriptor Template * 0x00 - do nothing @@ -328,119 +271,67 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, u * 0x02 - Standby * 0x03 - Wake Host */ -#define TUD_HID_REPORT_DESC_SYSTEM_CONTROL(...) \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_CONTROL ) ,\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ - /* Report ID if any */\ - __VA_ARGS__ \ - /* 2 bit system power control */ \ - HID_LOGICAL_MIN ( 1 ) ,\ - HID_LOGICAL_MAX ( 3 ) ,\ - HID_REPORT_COUNT ( 1 ) ,\ - HID_REPORT_SIZE ( 2 ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_SLEEP ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_WAKE_UP ) ,\ - HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ - /* 6 bit padding */ \ - HID_REPORT_COUNT ( 1 ) ,\ - HID_REPORT_SIZE ( 6 ) ,\ - HID_INPUT ( HID_CONSTANT ) ,\ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_SYSTEM_CONTROL(...) \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_SYSTEM_CONTROL), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ + __VA_ARGS__ /* 2 bit system power control */ \ + HID_LOGICAL_MIN(1), \ + HID_LOGICAL_MAX(3), HID_REPORT_COUNT(1), HID_REPORT_SIZE(2), \ + HID_USAGE(HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN), HID_USAGE(HID_USAGE_DESKTOP_SYSTEM_SLEEP), \ + HID_USAGE(HID_USAGE_DESKTOP_SYSTEM_WAKE_UP), \ + HID_INPUT(HID_DATA | HID_ARRAY | HID_ABSOLUTE), /* 6 bit padding */ \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(6), HID_INPUT(HID_CONSTANT), HID_COLLECTION_END // Gamepad Report Descriptor Template // with 32 buttons, 2 joysticks and 1 hat/dpad with following layout // | X | Y | Z | Rz | Rx | Ry (1 byte each) | hat/DPAD (1 byte) | Button Map (4 bytes) | -#define TUD_HID_REPORT_DESC_GAMEPAD(...) \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_GAMEPAD ) ,\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ - /* Report ID if any */\ - __VA_ARGS__ \ - /* 8 bit X, Y, Z, Rz, Rx, Ry (min -127, max 127 ) */ \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_Z ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_RZ ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_RX ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_RY ) ,\ - HID_LOGICAL_MIN ( 0x81 ) ,\ - HID_LOGICAL_MAX ( 0x7f ) ,\ - HID_REPORT_COUNT ( 6 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - /* 8 bit DPad/Hat Button Map */ \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ - HID_USAGE ( HID_USAGE_DESKTOP_HAT_SWITCH ) ,\ - HID_LOGICAL_MIN ( 1 ) ,\ - HID_LOGICAL_MAX ( 8 ) ,\ - HID_PHYSICAL_MIN ( 0 ) ,\ - HID_PHYSICAL_MAX_N ( 315, 2 ) ,\ - HID_REPORT_COUNT ( 1 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - /* 32 bit Button Map */ \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ - HID_USAGE_MIN ( 1 ) ,\ - HID_USAGE_MAX ( 32 ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX ( 1 ) ,\ - HID_REPORT_COUNT ( 32 ) ,\ - HID_REPORT_SIZE ( 1 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_GAMEPAD(...) \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_GAMEPAD), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ + __VA_ARGS__ /* 8 bit X, Y, Z, Rz, Rx, Ry (min -127, max 127 ) */ \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \ + HID_USAGE(HID_USAGE_DESKTOP_X), HID_USAGE(HID_USAGE_DESKTOP_Y), \ + HID_USAGE(HID_USAGE_DESKTOP_Z), HID_USAGE(HID_USAGE_DESKTOP_RZ), \ + HID_USAGE(HID_USAGE_DESKTOP_RX), HID_USAGE(HID_USAGE_DESKTOP_RY), HID_LOGICAL_MIN(0x81), \ + HID_LOGICAL_MAX(0x7f), HID_REPORT_COUNT(6), HID_REPORT_SIZE(8), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 8 bit DPad/Hat Button Map */ \ + HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_HAT_SWITCH), \ + HID_LOGICAL_MIN(1), HID_LOGICAL_MAX(8), HID_PHYSICAL_MIN(0), HID_PHYSICAL_MAX_N(315, 2), \ + HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 32 bit Button Map */ \ + HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), HID_USAGE_MAX(32), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), HID_REPORT_COUNT(32), HID_REPORT_SIZE(1), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_COLLECTION_END // FIDO U2F Authenticator Descriptor Template // - 1st parameter is report size, which is 64 bytes maximum in U2F // - 2nd parameter is HID_REPORT_ID(n) (optional) -#define TUD_HID_REPORT_DESC_FIDO_U2F(report_size, ...) \ - HID_USAGE_PAGE_N ( HID_USAGE_PAGE_FIDO, 2 ) ,\ - HID_USAGE ( HID_USAGE_FIDO_U2FHID ) ,\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ - /* Report ID if any */ \ - __VA_ARGS__ \ - /* Usage Data In */ \ - HID_USAGE ( HID_USAGE_FIDO_DATA_IN ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX_N ( 0xff, 2 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_REPORT_COUNT ( report_size ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - /* Usage Data Out */ \ - HID_USAGE ( HID_USAGE_FIDO_DATA_OUT ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX_N ( 0xff, 2 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_REPORT_COUNT ( report_size ) ,\ - HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_FIDO_U2F(report_size, ...) \ + HID_USAGE_PAGE_N(HID_USAGE_PAGE_FIDO, 2), HID_USAGE(HID_USAGE_FIDO_U2FHID), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ + __VA_ARGS__ /* Usage Data In */ \ + HID_USAGE(HID_USAGE_FIDO_DATA_IN), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(0xff, 2), HID_REPORT_SIZE(8), \ + HID_REPORT_COUNT(report_size), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* Usage Data Out */ \ + HID_USAGE(HID_USAGE_FIDO_DATA_OUT), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(0xff, 2), \ + HID_REPORT_SIZE(8), HID_REPORT_COUNT(report_size), \ + HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_COLLECTION_END // HID Generic Input & Output // - 1st parameter is report size (mandatory) // - 2nd parameter is report id HID_REPORT_ID(n) (optional) -#define TUD_HID_REPORT_DESC_GENERIC_INOUT(report_size, ...) \ - HID_USAGE_PAGE_N ( HID_USAGE_PAGE_VENDOR, 2 ),\ - HID_USAGE ( 0x01 ),\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ),\ - /* Report ID if any */\ - __VA_ARGS__ \ - /* Input */ \ - HID_USAGE ( 0x02 ),\ - HID_LOGICAL_MIN ( 0x00 ),\ - HID_LOGICAL_MAX_N ( 0xff, 2 ),\ - HID_REPORT_SIZE ( 8 ),\ - HID_REPORT_COUNT( report_size ),\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - /* Output */ \ - HID_USAGE ( 0x03 ),\ - HID_LOGICAL_MIN ( 0x00 ),\ - HID_LOGICAL_MAX_N ( 0xff, 2 ),\ - HID_REPORT_SIZE ( 8 ),\ - HID_REPORT_COUNT( report_size ),\ - HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_GENERIC_INOUT(report_size, ...) \ + HID_USAGE_PAGE_N(HID_USAGE_PAGE_VENDOR, 2), HID_USAGE(0x01), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ + __VA_ARGS__ /* Input */ \ + HID_USAGE(0x02), \ + HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0xff, 2), HID_REPORT_SIZE(8), \ + HID_REPORT_COUNT(report_size), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* Output */ \ + HID_USAGE(0x03), HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0xff, 2), HID_REPORT_SIZE(8), \ + HID_REPORT_COUNT(report_size), HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_COLLECTION_END // HID Lighting and Illumination Report Descriptor Template // - 1st parameter is report id (required) @@ -451,181 +342,123 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, u // report_id+3: HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT // report_id+4: HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT // report_id+5: HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT -#define TUD_HID_REPORT_DESC_LIGHTING(report_id) \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY ),\ - HID_COLLECTION ( HID_COLLECTION_APPLICATION ),\ - /* Lamp Array Attributes Report */ \ - HID_REPORT_ID (report_id ) \ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT ),\ - HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_COUNT ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 65535, 3 ),\ - HID_REPORT_SIZE ( 16 ),\ - HID_REPORT_COUNT ( 1 ),\ - HID_FEATURE ( HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_KIND ),\ - HID_USAGE ( HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 2147483647, 3 ),\ - HID_REPORT_SIZE ( 32 ),\ - HID_REPORT_COUNT ( 5 ),\ - HID_FEATURE ( HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_COLLECTION_END ,\ - /* Lamp Attributes Request Report */ \ - HID_REPORT_ID ( report_id + 1 ) \ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT ),\ - HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 65535, 3 ),\ - HID_REPORT_SIZE ( 16 ),\ - HID_REPORT_COUNT ( 1 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_COLLECTION_END ,\ - /* Lamp Attributes Response Report */ \ - HID_REPORT_ID ( report_id + 2 ) \ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT ),\ - HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 65535, 3 ),\ - HID_REPORT_SIZE ( 16 ),\ - HID_REPORT_COUNT ( 1 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_USAGE ( HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS ),\ - HID_USAGE ( HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS ),\ - HID_USAGE ( HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS ),\ - HID_USAGE ( HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_PURPOSES ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 2147483647, 3 ),\ - HID_REPORT_SIZE ( 32 ),\ - HID_REPORT_COUNT ( 5 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_LEVEL_COUNT ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT ),\ - HID_USAGE ( HID_USAGE_LIGHTING_IS_PROGRAMMABLE ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INPUT_BINDING ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 255, 2 ),\ - HID_REPORT_SIZE ( 8 ),\ - HID_REPORT_COUNT ( 6 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_COLLECTION_END ,\ - /* Lamp Multi-Update Report */ \ - HID_REPORT_ID ( report_id + 3 ) \ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT ),\ - HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_COUNT ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX ( 8 ),\ - HID_REPORT_SIZE ( 8 ),\ - HID_REPORT_COUNT ( 2 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 65535, 3 ),\ - HID_REPORT_SIZE ( 16 ),\ - HID_REPORT_COUNT ( 8 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 255, 2 ),\ - HID_REPORT_SIZE ( 8 ),\ - HID_REPORT_COUNT ( 32 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_COLLECTION_END ,\ - /* Lamp Range Update Report */ \ - HID_REPORT_ID ( report_id + 4 ) \ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT ),\ - HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX ( 8 ),\ - HID_REPORT_SIZE ( 8 ),\ - HID_REPORT_COUNT ( 1 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID_START ),\ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID_END ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 65535, 3 ),\ - HID_REPORT_SIZE ( 16 ),\ - HID_REPORT_COUNT ( 2 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX_N ( 255, 2 ),\ - HID_REPORT_SIZE ( 8 ),\ - HID_REPORT_COUNT ( 4 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_COLLECTION_END ,\ - /* Lamp Array Control Report */ \ - HID_REPORT_ID ( report_id + 5 ) \ - HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT ),\ - HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ - HID_USAGE ( HID_USAGE_LIGHTING_AUTONOMOUS_MODE ),\ - HID_LOGICAL_MIN ( 0 ),\ - HID_LOGICAL_MAX ( 1 ),\ - HID_REPORT_SIZE ( 8 ),\ - HID_REPORT_COUNT ( 1 ),\ - HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ - HID_COLLECTION_END ,\ - HID_COLLECTION_END \ +#define TUD_HID_REPORT_DESC_LIGHTING(report_id) \ + HID_USAGE_PAGE(HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION), \ + HID_USAGE(HID_USAGE_LIGHTING_LAMP_ARRAY), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Lamp Array Attributes Report */ \ + HID_REPORT_ID(report_id) HID_USAGE(HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT), \ + HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_COUNT), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), HID_REPORT_SIZE(16), HID_REPORT_COUNT(1), \ + HID_FEATURE(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \ + HID_USAGE(HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS), \ + HID_USAGE(HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS), \ + HID_USAGE(HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS), \ + HID_USAGE(HID_USAGE_LIGHTING_LAMP_ARRAY_KIND), \ + HID_USAGE(HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS), HID_LOGICAL_MIN(0), \ + HID_LOGICAL_MAX_N(2147483647, 3), HID_REPORT_SIZE(32), HID_REPORT_COUNT(5), \ + HID_FEATURE(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \ + HID_COLLECTION_END, /* Lamp Attributes Request Report */ \ + HID_REPORT_ID(report_id + 1) HID_USAGE(HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT), \ + HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), HID_REPORT_SIZE(16), HID_REPORT_COUNT(1), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_COLLECTION_END, /* Lamp Attributes Response Report */ \ + HID_REPORT_ID(report_id + 2) \ + HID_USAGE(HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT), \ + HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), HID_REPORT_SIZE(16), HID_REPORT_COUNT(1), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_USAGE(HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS), \ + HID_USAGE(HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS), \ + HID_USAGE(HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS), \ + HID_USAGE(HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS), \ + HID_USAGE(HID_USAGE_LIGHTING_LAMP_PURPOSES), HID_LOGICAL_MIN(0), \ + HID_LOGICAL_MAX_N(2147483647, 3), HID_REPORT_SIZE(32), HID_REPORT_COUNT(5), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_LEVEL_COUNT), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT), \ + HID_USAGE(HID_USAGE_LIGHTING_IS_PROGRAMMABLE), \ + HID_USAGE(HID_USAGE_LIGHTING_INPUT_BINDING), HID_LOGICAL_MIN(0), \ + HID_LOGICAL_MAX_N(255, 2), HID_REPORT_SIZE(8), HID_REPORT_COUNT(6), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_COLLECTION_END, /* Lamp Multi-Update Report */ \ + HID_REPORT_ID(report_id + 3) HID_USAGE(HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT), \ + HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_COUNT), \ + HID_USAGE(HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(8), \ + HID_REPORT_SIZE(8), HID_REPORT_COUNT(2), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), \ + HID_REPORT_SIZE(16), HID_REPORT_COUNT(8), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), HID_LOGICAL_MIN(0), \ + HID_LOGICAL_MAX_N(255, 2), HID_REPORT_SIZE(8), HID_REPORT_COUNT(32), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_COLLECTION_END, /* Lamp Range Update Report */ \ + HID_REPORT_ID(report_id + 4) HID_USAGE(HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT), \ + HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(8), HID_REPORT_SIZE(8), HID_REPORT_COUNT(1), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID_START), HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID_END), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), HID_REPORT_SIZE(16), HID_REPORT_COUNT(2), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ + HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), HID_LOGICAL_MIN(0), \ + HID_LOGICAL_MAX_N(255, 2), HID_REPORT_SIZE(8), HID_REPORT_COUNT(4), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ + HID_COLLECTION_END, /* Lamp Array Control Report */ \ + HID_REPORT_ID(report_id + 5) HID_USAGE(HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT), \ + HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_AUTONOMOUS_MODE), \ + HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), HID_REPORT_SIZE(8), HID_REPORT_COUNT(1), \ + HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_COLLECTION_END, \ + HID_COLLECTION_END //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void hidd_init (void); -bool hidd_deinit (void); -void hidd_reset (uint8_t rhport); -uint16_t hidd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool hidd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); -bool hidd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +void hidd_init(void); +bool hidd_deinit(void); +void hidd_reset(uint8_t rhport); +uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool hidd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/class/hid/hid_host.c b/Libraries/tinyusb/src/class/hid/hid_host.c index 7639a8fc6fb..91514f16722 100644 --- a/Libraries/tinyusb/src/class/hid/hid_host.c +++ b/Libraries/tinyusb/src/class/hid/hid_host.c @@ -35,33 +35,33 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUH_HID_LOG_LEVEL - #define CFG_TUH_HID_LOG_LEVEL CFG_TUH_LOG_LEVEL +#define CFG_TUH_HID_LOG_LEVEL CFG_TUH_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_HID_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_HID_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ typedef struct { - uint8_t daddr; + uint8_t daddr; - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; - bool mounted; // Enumeration is complete + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; + bool mounted; // Enumeration is complete - uint8_t itf_protocol; // None, Keyboard, Mouse - uint8_t protocol_mode; // Boot (0) or Report protocol (1) + uint8_t itf_protocol; // None, Keyboard, Mouse + uint8_t protocol_mode; // Boot (0) or Report protocol (1) - uint8_t report_desc_type; - uint16_t report_desc_len; + uint8_t report_desc_type; + uint16_t report_desc_len; - uint16_t epin_size; - uint16_t epout_size; + uint16_t epin_size; + uint16_t epout_size; - CFG_TUH_MEM_ALIGN uint8_t epin_buf[CFG_TUH_HID_EPIN_BUFSIZE]; - CFG_TUH_MEM_ALIGN uint8_t epout_buf[CFG_TUH_HID_EPOUT_BUFSIZE]; + CFG_TUH_MEM_ALIGN uint8_t epin_buf[CFG_TUH_HID_EPIN_BUFSIZE]; + CFG_TUH_MEM_ALIGN uint8_t epout_buf[CFG_TUH_HID_EPOUT_BUFSIZE]; } hidh_interface_t; CFG_TUH_MEM_SECTION @@ -72,271 +72,277 @@ tu_static uint8_t _hidh_default_protocol = HID_PROTOCOL_BOOT; //--------------------------------------------------------------------+ // Helper //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline hidh_interface_t* get_hid_itf(uint8_t daddr, uint8_t idx) { - TU_ASSERT(daddr > 0 && idx < CFG_TUH_HID, NULL); - hidh_interface_t* p_hid = &_hidh_itf[idx]; - return (p_hid->daddr == daddr) ? p_hid : NULL; +TU_ATTR_ALWAYS_INLINE static inline hidh_interface_t *get_hid_itf(uint8_t daddr, uint8_t idx) +{ + TU_ASSERT(daddr > 0 && idx < CFG_TUH_HID, NULL); + hidh_interface_t *p_hid = &_hidh_itf[idx]; + return (p_hid->daddr == daddr) ? p_hid : NULL; } // Get instance ID by endpoint address -static uint8_t get_idx_by_epaddr(uint8_t daddr, uint8_t ep_addr) { - for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { - hidh_interface_t const* p_hid = &_hidh_itf[idx]; - if (p_hid->daddr == daddr && - (p_hid->ep_in == ep_addr || p_hid->ep_out == ep_addr)) { - return idx; +static uint8_t get_idx_by_epaddr(uint8_t daddr, uint8_t ep_addr) +{ + for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { + hidh_interface_t const *p_hid = &_hidh_itf[idx]; + if (p_hid->daddr == daddr && (p_hid->ep_in == ep_addr || p_hid->ep_out == ep_addr)) { + return idx; + } } - } - return TUSB_INDEX_INVALID_8; + return TUSB_INDEX_INVALID_8; } -static hidh_interface_t* find_new_itf(void) { - for (uint8_t i = 0; i < CFG_TUH_HID; i++) { - if (_hidh_itf[i].daddr == 0) return &_hidh_itf[i]; - } - return NULL; +static hidh_interface_t *find_new_itf(void) +{ + for (uint8_t i = 0; i < CFG_TUH_HID; i++) { + if (_hidh_itf[i].daddr == 0) + return &_hidh_itf[i]; + } + return NULL; } //--------------------------------------------------------------------+ // Interface API //--------------------------------------------------------------------+ -uint8_t tuh_hid_itf_get_count(uint8_t daddr) { - uint8_t count = 0; - for (uint8_t i = 0; i < CFG_TUH_HID; i++) { - if (_hidh_itf[i].daddr == daddr) count++; - } - return count; +uint8_t tuh_hid_itf_get_count(uint8_t daddr) +{ + uint8_t count = 0; + for (uint8_t i = 0; i < CFG_TUH_HID; i++) { + if (_hidh_itf[i].daddr == daddr) + count++; + } + return count; } -uint8_t tuh_hid_itf_get_total_count(void) { - uint8_t count = 0; - for (uint8_t i = 0; i < CFG_TUH_HID; i++) { - if (_hidh_itf[i].daddr != 0) count++; - } - return count; +uint8_t tuh_hid_itf_get_total_count(void) +{ + uint8_t count = 0; + for (uint8_t i = 0; i < CFG_TUH_HID; i++) { + if (_hidh_itf[i].daddr != 0) + count++; + } + return count; } -bool tuh_hid_mounted(uint8_t daddr, uint8_t idx) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); - return p_hid->mounted; +bool tuh_hid_mounted(uint8_t daddr, uint8_t idx) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); + return p_hid->mounted; } -bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t* info) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid && info); +bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t *info) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid && info); - info->daddr = daddr; + info->daddr = daddr; - // re-construct descriptor - tusb_desc_interface_t* desc = &info->desc; - desc->bLength = sizeof(tusb_desc_interface_t); - desc->bDescriptorType = TUSB_DESC_INTERFACE; + // re-construct descriptor + tusb_desc_interface_t *desc = &info->desc; + desc->bLength = sizeof(tusb_desc_interface_t); + desc->bDescriptorType = TUSB_DESC_INTERFACE; - desc->bInterfaceNumber = p_hid->itf_num; - desc->bAlternateSetting = 0; - desc->bNumEndpoints = (uint8_t) ((p_hid->ep_in ? 1u : 0u) + (p_hid->ep_out ? 1u : 0u)); - desc->bInterfaceClass = TUSB_CLASS_HID; - desc->bInterfaceSubClass = (p_hid->itf_protocol ? HID_SUBCLASS_BOOT : HID_SUBCLASS_NONE); - desc->bInterfaceProtocol = p_hid->itf_protocol; - desc->iInterface = 0; // not used yet + desc->bInterfaceNumber = p_hid->itf_num; + desc->bAlternateSetting = 0; + desc->bNumEndpoints = (uint8_t)((p_hid->ep_in ? 1u : 0u) + (p_hid->ep_out ? 1u : 0u)); + desc->bInterfaceClass = TUSB_CLASS_HID; + desc->bInterfaceSubClass = (p_hid->itf_protocol ? HID_SUBCLASS_BOOT : HID_SUBCLASS_NONE); + desc->bInterfaceProtocol = p_hid->itf_protocol; + desc->iInterface = 0; // not used yet - return true; + return true; } -uint8_t tuh_hid_itf_get_index(uint8_t daddr, uint8_t itf_num) { - for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { - hidh_interface_t const* p_hid = &_hidh_itf[idx]; - if (p_hid->daddr == daddr && p_hid->itf_num == itf_num) return idx; - } +uint8_t tuh_hid_itf_get_index(uint8_t daddr, uint8_t itf_num) +{ + for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { + hidh_interface_t const *p_hid = &_hidh_itf[idx]; + if (p_hid->daddr == daddr && p_hid->itf_num == itf_num) + return idx; + } - return TUSB_INDEX_INVALID_8; + return TUSB_INDEX_INVALID_8; } -uint8_t tuh_hid_interface_protocol(uint8_t daddr, uint8_t idx) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - return p_hid ? p_hid->itf_protocol : 0; +uint8_t tuh_hid_interface_protocol(uint8_t daddr, uint8_t idx) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + return p_hid ? p_hid->itf_protocol : 0; } //--------------------------------------------------------------------+ // Control Endpoint API //--------------------------------------------------------------------+ -uint8_t tuh_hid_get_protocol(uint8_t daddr, uint8_t idx) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - return p_hid ? p_hid->protocol_mode : 0; +uint8_t tuh_hid_get_protocol(uint8_t daddr, uint8_t idx) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + return p_hid ? p_hid->protocol_mode : 0; } -static void set_protocol_complete(tuh_xfer_t* xfer) { - uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); - uint8_t const daddr = xfer->daddr; - uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); +static void set_protocol_complete(tuh_xfer_t *xfer) +{ + uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); + uint8_t const daddr = xfer->daddr; + uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid,); + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid, ); - if (XFER_RESULT_SUCCESS == xfer->result) { - p_hid->protocol_mode = (uint8_t) tu_le16toh(xfer->setup->wValue); - } + if (XFER_RESULT_SUCCESS == xfer->result) { + p_hid->protocol_mode = (uint8_t)tu_le16toh(xfer->setup->wValue); + } - if (tuh_hid_set_protocol_complete_cb) { - tuh_hid_set_protocol_complete_cb(daddr, idx, p_hid->protocol_mode); - } + if (tuh_hid_set_protocol_complete_cb) { + tuh_hid_set_protocol_complete_cb(daddr, idx, p_hid->protocol_mode); + } } -void tuh_hid_set_default_protocol(uint8_t protocol) { - _hidh_default_protocol = protocol; +void tuh_hid_set_default_protocol(uint8_t protocol) +{ + _hidh_default_protocol = protocol; } static bool _hidh_set_protocol(uint8_t daddr, uint8_t itf_num, uint8_t protocol, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - TU_LOG_DRV("HID Set Protocol = %d\r\n", protocol); - - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT - }, - .bRequest = HID_REQ_CONTROL_SET_PROTOCOL, - .wValue = protocol, - .wIndex = itf_num, - .wLength = 0 - }; - - tuh_xfer_t xfer = { - .daddr = daddr, - .ep_addr = 0, - .setup = &request, - .buffer = NULL, - .complete_cb = complete_cb, - .user_data = user_data - }; - - return tuh_control_xfer(&xfer); -} - -bool tuh_hid_set_protocol(uint8_t daddr, uint8_t idx, uint8_t protocol) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid && p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE); - - return _hidh_set_protocol(daddr, p_hid->itf_num, protocol, set_protocol_complete, 0); -} - -static void get_report_complete(tuh_xfer_t* xfer) { - TU_LOG_DRV("HID Get Report complete\r\n"); - - if (tuh_hid_get_report_complete_cb) { - uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); - - uint8_t const report_type = tu_u16_high(xfer->setup->wValue); - uint8_t const report_id = tu_u16_low(xfer->setup->wValue); - - tuh_hid_get_report_complete_cb(xfer->daddr, idx, report_id, report_type, - (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); - } -} - -bool tuh_hid_get_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); - TU_LOG_DRV("HID Get Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); - - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_IN - }, - .bRequest = HID_REQ_CONTROL_GET_REPORT, - .wValue = tu_htole16(tu_u16(report_type, report_id)), - .wIndex = tu_htole16((uint16_t) p_hid->itf_num), - .wLength = len - }; - - tuh_xfer_t xfer = { - .daddr = daddr, - .ep_addr = 0, - .setup = &request, - .buffer = report, - .complete_cb = get_report_complete, - .user_data = 0 - }; - - return tuh_control_xfer(&xfer); -} - -static void set_report_complete(tuh_xfer_t* xfer) { - TU_LOG_DRV("HID Set Report complete\r\n"); - - if (tuh_hid_set_report_complete_cb) { - uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); - - uint8_t const report_type = tu_u16_high(xfer->setup->wValue); - uint8_t const report_id = tu_u16_low(xfer->setup->wValue); - - tuh_hid_set_report_complete_cb(xfer->daddr, idx, report_id, report_type, - (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); - } -} - -bool tuh_hid_set_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); - TU_LOG_DRV("HID Set Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); - - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT - }, - .bRequest = HID_REQ_CONTROL_SET_REPORT, - .wValue = tu_htole16(tu_u16(report_type, report_id)), - .wIndex = tu_htole16((uint16_t) p_hid->itf_num), - .wLength = len - }; - - tuh_xfer_t xfer = { - .daddr = daddr, - .ep_addr = 0, - .setup = &request, - .buffer = report, - .complete_cb = set_report_complete, - .user_data = 0 - }; + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + TU_LOG_DRV("HID Set Protocol = %d\r\n", protocol); + + tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = + TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT }, + .bRequest = HID_REQ_CONTROL_SET_PROTOCOL, + .wValue = protocol, + .wIndex = itf_num, + .wLength = 0 }; + + tuh_xfer_t xfer = { .daddr = daddr, + .ep_addr = 0, + .setup = &request, + .buffer = NULL, + .complete_cb = complete_cb, + .user_data = user_data }; + + return tuh_control_xfer(&xfer); +} + +bool tuh_hid_set_protocol(uint8_t daddr, uint8_t idx, uint8_t protocol) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid && p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE); + + return _hidh_set_protocol(daddr, p_hid->itf_num, protocol, set_protocol_complete, 0); +} + +static void get_report_complete(tuh_xfer_t *xfer) +{ + TU_LOG_DRV("HID Get Report complete\r\n"); + + if (tuh_hid_get_report_complete_cb) { + uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); + + uint8_t const report_type = tu_u16_high(xfer->setup->wValue); + uint8_t const report_id = tu_u16_low(xfer->setup->wValue); + + tuh_hid_get_report_complete_cb( + xfer->daddr, idx, report_id, report_type, + (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); + } +} - return tuh_control_xfer(&xfer); +bool tuh_hid_get_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, + void *report, uint16_t len) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); + TU_LOG_DRV("HID Get Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); + + tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = + TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_IN }, + .bRequest = HID_REQ_CONTROL_GET_REPORT, + .wValue = tu_htole16(tu_u16(report_type, report_id)), + .wIndex = tu_htole16((uint16_t)p_hid->itf_num), + .wLength = len }; + + tuh_xfer_t xfer = { .daddr = daddr, + .ep_addr = 0, + .setup = &request, + .buffer = report, + .complete_cb = get_report_complete, + .user_data = 0 }; + + return tuh_control_xfer(&xfer); +} + +static void set_report_complete(tuh_xfer_t *xfer) +{ + TU_LOG_DRV("HID Set Report complete\r\n"); + + if (tuh_hid_set_report_complete_cb) { + uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); + + uint8_t const report_type = tu_u16_high(xfer->setup->wValue); + uint8_t const report_id = tu_u16_low(xfer->setup->wValue); + + tuh_hid_set_report_complete_cb( + xfer->daddr, idx, report_id, report_type, + (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); + } +} + +bool tuh_hid_set_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, + void *report, uint16_t len) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); + TU_LOG_DRV("HID Set Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); + + tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = + TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT }, + .bRequest = HID_REQ_CONTROL_SET_REPORT, + .wValue = tu_htole16(tu_u16(report_type, report_id)), + .wIndex = tu_htole16((uint16_t)p_hid->itf_num), + .wLength = len }; + + tuh_xfer_t xfer = { .daddr = daddr, + .ep_addr = 0, + .setup = &request, + .buffer = report, + .complete_cb = set_report_complete, + .user_data = 0 }; + + return tuh_control_xfer(&xfer); } static bool _hidh_set_idle(uint8_t daddr, uint8_t itf_num, uint16_t idle_rate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) { - // SET IDLE request, device can stall if not support this request - TU_LOG_DRV("HID Set Idle \r\n"); - - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT - }, - .bRequest = HID_REQ_CONTROL_SET_IDLE, - .wValue = tu_htole16(idle_rate), - .wIndex = tu_htole16((uint16_t) itf_num), - .wLength = 0 - }; - - tuh_xfer_t xfer = { - .daddr = daddr, - .ep_addr = 0, - .setup = &request, - .buffer = NULL, - .complete_cb = complete_cb, - .user_data = user_data - }; - - return tuh_control_xfer(&xfer); + tuh_xfer_cb_t complete_cb, uintptr_t user_data) +{ + // SET IDLE request, device can stall if not support this request + TU_LOG_DRV("HID Set Idle \r\n"); + + tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = + TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT }, + .bRequest = HID_REQ_CONTROL_SET_IDLE, + .wValue = tu_htole16(idle_rate), + .wIndex = tu_htole16((uint16_t)itf_num), + .wLength = 0 }; + + tuh_xfer_t xfer = { .daddr = daddr, + .ep_addr = 0, + .setup = &request, + .buffer = NULL, + .complete_cb = complete_cb, + .user_data = user_data }; + + return tuh_control_xfer(&xfer); } //--------------------------------------------------------------------+ @@ -344,413 +350,459 @@ static bool _hidh_set_idle(uint8_t daddr, uint8_t itf_num, uint16_t idle_rate, //--------------------------------------------------------------------+ // Check if HID interface is ready to receive report -bool tuh_hid_receive_ready(uint8_t dev_addr, uint8_t idx) { - hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); - TU_VERIFY(p_hid); - return !usbh_edpt_busy(dev_addr, p_hid->ep_in); +bool tuh_hid_receive_ready(uint8_t dev_addr, uint8_t idx) +{ + hidh_interface_t *p_hid = get_hid_itf(dev_addr, idx); + TU_VERIFY(p_hid); + return !usbh_edpt_busy(dev_addr, p_hid->ep_in); } -bool tuh_hid_receive_report(uint8_t daddr, uint8_t idx) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); +bool tuh_hid_receive_report(uint8_t daddr, uint8_t idx) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); - // claim endpoint - TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_in)); + // claim endpoint + TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_in)); - if (!usbh_edpt_xfer(daddr, p_hid->ep_in, p_hid->epin_buf, p_hid->epin_size)) { - usbh_edpt_release(daddr, p_hid->ep_in); - return false; - } + if (!usbh_edpt_xfer(daddr, p_hid->ep_in, p_hid->epin_buf, p_hid->epin_size)) { + usbh_edpt_release(daddr, p_hid->ep_in); + return false; + } - return true; + return true; } -bool tuh_hid_receive_abort(uint8_t dev_addr, uint8_t idx) { - hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); - TU_VERIFY(p_hid); - return tuh_edpt_abort_xfer(dev_addr, p_hid->ep_in); +bool tuh_hid_receive_abort(uint8_t dev_addr, uint8_t idx) +{ + hidh_interface_t *p_hid = get_hid_itf(dev_addr, idx); + TU_VERIFY(p_hid); + return tuh_edpt_abort_xfer(dev_addr, p_hid->ep_in); } -bool tuh_hid_send_ready(uint8_t dev_addr, uint8_t idx) { - hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); - TU_VERIFY(p_hid); - return !usbh_edpt_busy(dev_addr, p_hid->ep_out); +bool tuh_hid_send_ready(uint8_t dev_addr, uint8_t idx) +{ + hidh_interface_t *p_hid = get_hid_itf(dev_addr, idx); + TU_VERIFY(p_hid); + return !usbh_edpt_busy(dev_addr, p_hid->ep_out); } -bool tuh_hid_send_report(uint8_t daddr, uint8_t idx, uint8_t report_id, const void* report, uint16_t len) { - TU_LOG_DRV("HID Send Report %d\r\n", report_id); +bool tuh_hid_send_report(uint8_t daddr, uint8_t idx, uint8_t report_id, const void *report, + uint16_t len) +{ + TU_LOG_DRV("HID Send Report %d\r\n", report_id); - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); - if (p_hid->ep_out == 0) { - // This HID does not have an out endpoint (other than control) - return false; - } else if (len > CFG_TUH_HID_EPOUT_BUFSIZE || - (report_id != 0 && len > (CFG_TUH_HID_EPOUT_BUFSIZE - 1))) { - // ep_out buffer is not large enough to hold contents - return false; - } + if (p_hid->ep_out == 0) { + // This HID does not have an out endpoint (other than control) + return false; + } else if (len > CFG_TUH_HID_EPOUT_BUFSIZE || + (report_id != 0 && len > (CFG_TUH_HID_EPOUT_BUFSIZE - 1))) { + // ep_out buffer is not large enough to hold contents + return false; + } - // claim endpoint - TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_out)); + // claim endpoint + TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_out)); - if (report_id == 0) { - // No report ID in transmission - memcpy(&p_hid->epout_buf[0], report, len); - } else { - p_hid->epout_buf[0] = report_id; - memcpy(&p_hid->epout_buf[1], report, len); - ++len; // 1 more byte for report_id - } + if (report_id == 0) { + // No report ID in transmission + memcpy(&p_hid->epout_buf[0], report, len); + } else { + p_hid->epout_buf[0] = report_id; + memcpy(&p_hid->epout_buf[1], report, len); + ++len; // 1 more byte for report_id + } - TU_LOG3_MEM(p_hid->epout_buf, len, 2); + TU_LOG3_MEM(p_hid->epout_buf, len, 2); - if (!usbh_edpt_xfer(daddr, p_hid->ep_out, p_hid->epout_buf, len)) { - usbh_edpt_release(daddr, p_hid->ep_out); - return false; - } + if (!usbh_edpt_xfer(daddr, p_hid->ep_out, p_hid->epout_buf, len)) { + usbh_edpt_release(daddr, p_hid->ep_out); + return false; + } - return true; + return true; } //--------------------------------------------------------------------+ // USBH API //--------------------------------------------------------------------+ -bool hidh_init(void) { - TU_LOG_DRV("sizeof(hidh_interface_t) = %u\r\n", sizeof(hidh_interface_t)); - tu_memclr(_hidh_itf, sizeof(_hidh_itf)); - return true; +bool hidh_init(void) +{ + TU_LOG_DRV("sizeof(hidh_interface_t) = %u\r\n", sizeof(hidh_interface_t)); + tu_memclr(_hidh_itf, sizeof(_hidh_itf)); + return true; } -bool hidh_deinit(void) { - return true; +bool hidh_deinit(void) +{ + return true; } -bool hidh_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) result; +bool hidh_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) +{ + (void)result; - uint8_t const dir = tu_edpt_dir(ep_addr); - uint8_t const idx = get_idx_by_epaddr(daddr, ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const idx = get_idx_by_epaddr(daddr, ep_addr); - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); - if (dir == TUSB_DIR_IN) { - TU_LOG_DRV(" Get Report callback (%u, %u)\r\n", daddr, idx); - TU_LOG3_MEM(p_hid->epin_buf, xferred_bytes, 2); - tuh_hid_report_received_cb(daddr, idx, p_hid->epin_buf, (uint16_t) xferred_bytes); - } else { - if (tuh_hid_report_sent_cb) { - tuh_hid_report_sent_cb(daddr, idx, p_hid->epout_buf, (uint16_t) xferred_bytes); + if (dir == TUSB_DIR_IN) { + TU_LOG_DRV(" Get Report callback (%u, %u)\r\n", daddr, idx); + TU_LOG3_MEM(p_hid->epin_buf, xferred_bytes, 2); + tuh_hid_report_received_cb(daddr, idx, p_hid->epin_buf, (uint16_t)xferred_bytes); + } else { + if (tuh_hid_report_sent_cb) { + tuh_hid_report_sent_cb(daddr, idx, p_hid->epout_buf, (uint16_t)xferred_bytes); + } } - } - return true; + return true; } -void hidh_close(uint8_t daddr) { - for (uint8_t i = 0; i < CFG_TUH_HID; i++) { - hidh_interface_t* p_hid = &_hidh_itf[i]; - if (p_hid->daddr == daddr) { - TU_LOG_DRV(" HIDh close addr = %u index = %u\r\n", daddr, i); - if (tuh_hid_umount_cb) tuh_hid_umount_cb(daddr, i); - tu_memclr(p_hid, sizeof(hidh_interface_t)); +void hidh_close(uint8_t daddr) +{ + for (uint8_t i = 0; i < CFG_TUH_HID; i++) { + hidh_interface_t *p_hid = &_hidh_itf[i]; + if (p_hid->daddr == daddr) { + TU_LOG_DRV(" HIDh close addr = %u index = %u\r\n", daddr, i); + if (tuh_hid_umount_cb) + tuh_hid_umount_cb(daddr, i); + tu_memclr(p_hid, sizeof(hidh_interface_t)); + } } - } } //--------------------------------------------------------------------+ // Enumeration //--------------------------------------------------------------------+ -bool hidh_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const* desc_itf, uint16_t max_len) { - (void) rhport; - (void) max_len; - - TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass); - TU_LOG_DRV("[%u] HID opening Interface %u\r\n", daddr, desc_itf->bInterfaceNumber); +bool hidh_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const *desc_itf, + uint16_t max_len) +{ + (void)rhport; + (void)max_len; - // len = interface + hid + n*endpoints - uint16_t const drv_len = (uint16_t) (sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + - desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); - TU_ASSERT(max_len >= drv_len); - uint8_t const* p_desc = (uint8_t const*) desc_itf; + TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass); + TU_LOG_DRV("[%u] HID opening Interface %u\r\n", daddr, desc_itf->bInterfaceNumber); - //------------- HID descriptor -------------// - p_desc = tu_desc_next(p_desc); - tusb_hid_descriptor_hid_t const* desc_hid = (tusb_hid_descriptor_hid_t const*) p_desc; - TU_ASSERT(HID_DESC_TYPE_HID == desc_hid->bDescriptorType); + // len = interface + hid + n*endpoints + uint16_t const drv_len = + (uint16_t)(sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + + desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); + TU_ASSERT(max_len >= drv_len); + uint8_t const *p_desc = (uint8_t const *)desc_itf; - hidh_interface_t* p_hid = find_new_itf(); - TU_ASSERT(p_hid); // not enough interface, try to increase CFG_TUH_HID - p_hid->daddr = daddr; + //------------- HID descriptor -------------// + p_desc = tu_desc_next(p_desc); + tusb_hid_descriptor_hid_t const *desc_hid = (tusb_hid_descriptor_hid_t const *)p_desc; + TU_ASSERT(HID_DESC_TYPE_HID == desc_hid->bDescriptorType); - //------------- Endpoint Descriptors -------------// - p_desc = tu_desc_next(p_desc); - tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) p_desc; + hidh_interface_t *p_hid = find_new_itf(); + TU_ASSERT(p_hid); // not enough interface, try to increase CFG_TUH_HID + p_hid->daddr = daddr; - for (int i = 0; i < desc_itf->bNumEndpoints; i++) { - TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType); - TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); + //------------- Endpoint Descriptors -------------// + p_desc = tu_desc_next(p_desc); + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + + for (int i = 0; i < desc_itf->bNumEndpoints; i++) { + TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType); + TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); + + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { + p_hid->ep_in = desc_ep->bEndpointAddress; + p_hid->epin_size = tu_edpt_packet_size(desc_ep); + } else { + p_hid->ep_out = desc_ep->bEndpointAddress; + p_hid->epout_size = tu_edpt_packet_size(desc_ep); + } - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { - p_hid->ep_in = desc_ep->bEndpointAddress; - p_hid->epin_size = tu_edpt_packet_size(desc_ep); - } else { - p_hid->ep_out = desc_ep->bEndpointAddress; - p_hid->epout_size = tu_edpt_packet_size(desc_ep); + p_desc = tu_desc_next(p_desc); + desc_ep = (tusb_desc_endpoint_t const *)p_desc; } - p_desc = tu_desc_next(p_desc); - desc_ep = (tusb_desc_endpoint_t const*) p_desc; - } + p_hid->itf_num = desc_itf->bInterfaceNumber; - p_hid->itf_num = desc_itf->bInterfaceNumber; + // Assume bNumDescriptors = 1 + p_hid->report_desc_type = desc_hid->bReportType; + p_hid->report_desc_len = tu_unaligned_read16(&desc_hid->wReportLength); - // Assume bNumDescriptors = 1 - p_hid->report_desc_type = desc_hid->bReportType; - p_hid->report_desc_len = tu_unaligned_read16(&desc_hid->wReportLength); - - // Per HID Specs: default is Report protocol, though we will force Boot protocol when set_config - p_hid->protocol_mode = _hidh_default_protocol; - if (HID_SUBCLASS_BOOT == desc_itf->bInterfaceSubClass) { - p_hid->itf_protocol = desc_itf->bInterfaceProtocol; - } + // Per HID Specs: default is Report protocol, though we will force Boot protocol when set_config + p_hid->protocol_mode = _hidh_default_protocol; + if (HID_SUBCLASS_BOOT == desc_itf->bInterfaceSubClass) { + p_hid->itf_protocol = desc_itf->bInterfaceProtocol; + } - return true; + return true; } //--------------------------------------------------------------------+ // Set Configure //--------------------------------------------------------------------+ -enum { - CONFG_SET_IDLE, - CONFIG_SET_PROTOCOL, - CONFIG_GET_REPORT_DESC, - CONFIG_COMPLETE -}; +enum { CONFG_SET_IDLE, CONFIG_SET_PROTOCOL, CONFIG_GET_REPORT_DESC, CONFIG_COMPLETE }; -static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const* desc_report, uint16_t desc_len); -static void process_set_config(tuh_xfer_t* xfer); +static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const *desc_report, + uint16_t desc_len); +static void process_set_config(tuh_xfer_t *xfer); -bool hidh_set_config(uint8_t daddr, uint8_t itf_num) { - tusb_control_request_t request; - request.wIndex = tu_htole16((uint16_t) itf_num); +bool hidh_set_config(uint8_t daddr, uint8_t itf_num) +{ + tusb_control_request_t request; + request.wIndex = tu_htole16((uint16_t)itf_num); - tuh_xfer_t xfer; - xfer.daddr = daddr; - xfer.result = XFER_RESULT_SUCCESS; - xfer.setup = &request; - xfer.user_data = CONFG_SET_IDLE; + tuh_xfer_t xfer; + xfer.daddr = daddr; + xfer.result = XFER_RESULT_SUCCESS; + xfer.setup = &request; + xfer.user_data = CONFG_SET_IDLE; - // fake request to kick-off the set config process - process_set_config(&xfer); + // fake request to kick-off the set config process + process_set_config(&xfer); - return true; + return true; } -static void process_set_config(tuh_xfer_t* xfer) { - // Stall is a valid response for SET_IDLE, sometime SET_PROTOCOL as well - // therefore we could ignore its result - if (!(xfer->setup->bRequest == HID_REQ_CONTROL_SET_IDLE || - xfer->setup->bRequest == HID_REQ_CONTROL_SET_PROTOCOL)) { - TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS,); - } +static void process_set_config(tuh_xfer_t *xfer) +{ + // Stall is a valid response for SET_IDLE, sometime SET_PROTOCOL as well + // therefore we could ignore its result + if (!(xfer->setup->bRequest == HID_REQ_CONTROL_SET_IDLE || + xfer->setup->bRequest == HID_REQ_CONTROL_SET_PROTOCOL)) { + TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); + } - uintptr_t const state = xfer->user_data; - uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); - uint8_t const daddr = xfer->daddr; + uintptr_t const state = xfer->user_data; + uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); + uint8_t const daddr = xfer->daddr; - uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid,); + uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid, ); - switch (state) { + switch (state) { case CONFG_SET_IDLE: { - // Idle rate = 0 mean only report when there is changes - const uint16_t idle_rate = 0; - const uintptr_t next_state = (p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE) - ? CONFIG_SET_PROTOCOL : CONFIG_GET_REPORT_DESC; - _hidh_set_idle(daddr, itf_num, idle_rate, process_set_config, next_state); - break; + // Idle rate = 0 mean only report when there is changes + const uint16_t idle_rate = 0; + const uintptr_t next_state = (p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE) ? + CONFIG_SET_PROTOCOL : + CONFIG_GET_REPORT_DESC; + _hidh_set_idle(daddr, itf_num, idle_rate, process_set_config, next_state); + break; } case CONFIG_SET_PROTOCOL: - _hidh_set_protocol(daddr, p_hid->itf_num, _hidh_default_protocol, process_set_config, CONFIG_GET_REPORT_DESC); - break; + _hidh_set_protocol(daddr, p_hid->itf_num, _hidh_default_protocol, process_set_config, + CONFIG_GET_REPORT_DESC); + break; case CONFIG_GET_REPORT_DESC: - // Get Report Descriptor if possible - // using usbh enumeration buffer since report descriptor can be very long - if (p_hid->report_desc_len > CFG_TUH_ENUMERATION_BUFSIZE) { - TU_LOG_DRV("HID Skip Report Descriptor since it is too large %u bytes\r\n", p_hid->report_desc_len); - - // Driver is mounted without report descriptor - config_driver_mount_complete(daddr, idx, NULL, 0); - } else { - tuh_descriptor_get_hid_report(daddr, itf_num, p_hid->report_desc_type, 0, - usbh_get_enum_buf(), p_hid->report_desc_len, - process_set_config, CONFIG_COMPLETE); - } - break; + // Get Report Descriptor if possible + // using usbh enumeration buffer since report descriptor can be very long + if (p_hid->report_desc_len > CFG_TUH_ENUMERATION_BUFSIZE) { + TU_LOG_DRV("HID Skip Report Descriptor since it is too large %u bytes\r\n", + p_hid->report_desc_len); + + // Driver is mounted without report descriptor + config_driver_mount_complete(daddr, idx, NULL, 0); + } else { + tuh_descriptor_get_hid_report(daddr, itf_num, p_hid->report_desc_type, 0, + usbh_get_enum_buf(), p_hid->report_desc_len, + process_set_config, CONFIG_COMPLETE); + } + break; case CONFIG_COMPLETE: { - uint8_t const* desc_report = usbh_get_enum_buf(); - uint16_t const desc_len = tu_le16toh(xfer->setup->wLength); + uint8_t const *desc_report = usbh_get_enum_buf(); + uint16_t const desc_len = tu_le16toh(xfer->setup->wLength); - config_driver_mount_complete(daddr, idx, desc_report, desc_len); - break; + config_driver_mount_complete(daddr, idx, desc_report, desc_len); + break; } default: - break; - } + break; + } } -static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const* desc_report, uint16_t desc_len) { - hidh_interface_t* p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid,); - p_hid->mounted = true; +static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const *desc_report, + uint16_t desc_len) +{ + hidh_interface_t *p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid, ); + p_hid->mounted = true; - // enumeration is complete - if (tuh_hid_mount_cb) tuh_hid_mount_cb(daddr, idx, desc_report, desc_len); + // enumeration is complete + if (tuh_hid_mount_cb) + tuh_hid_mount_cb(daddr, idx, desc_report, desc_len); - // notify usbh that driver enumeration is complete - usbh_driver_set_config_complete(daddr, p_hid->itf_num); + // notify usbh that driver enumeration is complete + usbh_driver_set_config_complete(daddr, p_hid->itf_num); } //--------------------------------------------------------------------+ // Report Descriptor Parser //--------------------------------------------------------------------+ -uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t* report_info_arr, uint8_t arr_count, - uint8_t const* desc_report, uint16_t desc_len) { - // Report Item 6.2.2.2 USB HID 1.11 - union TU_ATTR_PACKED { - uint8_t byte; - struct TU_ATTR_PACKED { - uint8_t size : 2; - uint8_t type : 2; - uint8_t tag : 4; - }; - } header; - - tu_memclr(report_info_arr, arr_count * sizeof(tuh_hid_report_info_t)); - - uint8_t report_num = 0; - tuh_hid_report_info_t* info = report_info_arr; - - // current parsed report count & size from descriptor -// uint8_t ri_report_count = 0; -// uint8_t ri_report_size = 0; - - uint8_t ri_collection_depth = 0; - while (desc_len && report_num < arr_count) { - header.byte = *desc_report++; - desc_len--; - - uint8_t const tag = header.tag; - uint8_t const type = header.type; - uint8_t const size = header.size; - - uint8_t const data8 = desc_report[0]; - - TU_LOG(3, "tag = %d, type = %d, size = %d, data = ", tag, type, size); - for (uint32_t i = 0; i < size; i++) { - TU_LOG(3, "%02X ", desc_report[i]); - } - TU_LOG(3, "\r\n"); - - switch (type) { - case RI_TYPE_MAIN: - switch (tag) { - case RI_MAIN_INPUT: break; - case RI_MAIN_OUTPUT: break; - case RI_MAIN_FEATURE: break; - case RI_MAIN_COLLECTION: - ri_collection_depth++; - break; - - case RI_MAIN_COLLECTION_END: - ri_collection_depth--; - if (ri_collection_depth == 0) { - info++; - report_num++; - } - break; - - default:break; +uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t *report_info_arr, uint8_t arr_count, + uint8_t const *desc_report, uint16_t desc_len) +{ + // Report Item 6.2.2.2 USB HID 1.11 + union TU_ATTR_PACKED { + uint8_t byte; + struct TU_ATTR_PACKED { + uint8_t size : 2; + uint8_t type : 2; + uint8_t tag : 4; + }; + } header; + + tu_memclr(report_info_arr, arr_count * sizeof(tuh_hid_report_info_t)); + + uint8_t report_num = 0; + tuh_hid_report_info_t *info = report_info_arr; + + // current parsed report count & size from descriptor + // uint8_t ri_report_count = 0; + // uint8_t ri_report_size = 0; + + uint8_t ri_collection_depth = 0; + while (desc_len && report_num < arr_count) { + header.byte = *desc_report++; + desc_len--; + + uint8_t const tag = header.tag; + uint8_t const type = header.type; + uint8_t const size = header.size; + + uint8_t const data8 = desc_report[0]; + + TU_LOG(3, "tag = %d, type = %d, size = %d, data = ", tag, type, size); + for (uint32_t i = 0; i < size; i++) { + TU_LOG(3, "%02X ", desc_report[i]); } - break; - - case RI_TYPE_GLOBAL: - switch (tag) { - case RI_GLOBAL_USAGE_PAGE: - // only take in account the "usage page" before REPORT ID - if (ri_collection_depth == 0) memcpy(&info->usage_page, desc_report, size); - break; - - case RI_GLOBAL_LOGICAL_MIN: break; - case RI_GLOBAL_LOGICAL_MAX: break; - case RI_GLOBAL_PHYSICAL_MIN: break; - case RI_GLOBAL_PHYSICAL_MAX: break; - - case RI_GLOBAL_REPORT_ID: - info->report_id = data8; + TU_LOG(3, "\r\n"); + + switch (type) { + case RI_TYPE_MAIN: + switch (tag) { + case RI_MAIN_INPUT: + break; + case RI_MAIN_OUTPUT: + break; + case RI_MAIN_FEATURE: + break; + case RI_MAIN_COLLECTION: + ri_collection_depth++; + break; + + case RI_MAIN_COLLECTION_END: + ri_collection_depth--; + if (ri_collection_depth == 0) { + info++; + report_num++; + } + break; + + default: + break; + } break; - case RI_GLOBAL_REPORT_SIZE: -// ri_report_size = data8; + case RI_TYPE_GLOBAL: + switch (tag) { + case RI_GLOBAL_USAGE_PAGE: + // only take in account the "usage page" before REPORT ID + if (ri_collection_depth == 0) + memcpy(&info->usage_page, desc_report, size); + break; + + case RI_GLOBAL_LOGICAL_MIN: + break; + case RI_GLOBAL_LOGICAL_MAX: + break; + case RI_GLOBAL_PHYSICAL_MIN: + break; + case RI_GLOBAL_PHYSICAL_MAX: + break; + + case RI_GLOBAL_REPORT_ID: + info->report_id = data8; + break; + + case RI_GLOBAL_REPORT_SIZE: + // ri_report_size = data8; + break; + + case RI_GLOBAL_REPORT_COUNT: + // ri_report_count = data8; + break; + + case RI_GLOBAL_UNIT_EXPONENT: + break; + case RI_GLOBAL_UNIT: + break; + case RI_GLOBAL_PUSH: + break; + case RI_GLOBAL_POP: + break; + + default: + break; + } break; - case RI_GLOBAL_REPORT_COUNT: -// ri_report_count = data8; + case RI_TYPE_LOCAL: + switch (tag) { + case RI_LOCAL_USAGE: + // only take in account the "usage" before starting REPORT ID + if (ri_collection_depth == 0) + info->usage = data8; + break; + + case RI_LOCAL_USAGE_MIN: + break; + case RI_LOCAL_USAGE_MAX: + break; + case RI_LOCAL_DESIGNATOR_INDEX: + break; + case RI_LOCAL_DESIGNATOR_MIN: + break; + case RI_LOCAL_DESIGNATOR_MAX: + break; + case RI_LOCAL_STRING_INDEX: + break; + case RI_LOCAL_STRING_MIN: + break; + case RI_LOCAL_STRING_MAX: + break; + case RI_LOCAL_DELIMITER: + break; + default: + break; + } break; - case RI_GLOBAL_UNIT_EXPONENT: break; - case RI_GLOBAL_UNIT: break; - case RI_GLOBAL_PUSH: break; - case RI_GLOBAL_POP: break; - - default: break; - } - break; - - case RI_TYPE_LOCAL: - switch (tag) { - case RI_LOCAL_USAGE: - // only take in account the "usage" before starting REPORT ID - if (ri_collection_depth == 0) info->usage = data8; + // error + default: break; - - case RI_LOCAL_USAGE_MIN: break; - case RI_LOCAL_USAGE_MAX: break; - case RI_LOCAL_DESIGNATOR_INDEX: break; - case RI_LOCAL_DESIGNATOR_MIN: break; - case RI_LOCAL_DESIGNATOR_MAX: break; - case RI_LOCAL_STRING_INDEX: break; - case RI_LOCAL_STRING_MIN: break; - case RI_LOCAL_STRING_MAX: break; - case RI_LOCAL_DELIMITER: break; - default: break; } - break; - // error - default: break; + desc_report += size; + desc_len -= size; } - desc_report += size; - desc_len -= size; - } - - for (uint8_t i = 0; i < report_num; i++) { - info = report_info_arr + i; - TU_LOG_DRV("%u: id = %u, usage_page = %u, usage = %u\r\n", i, info->report_id, info->usage_page, info->usage); - } + for (uint8_t i = 0; i < report_num; i++) { + info = report_info_arr + i; + TU_LOG_DRV("%u: id = %u, usage_page = %u, usage = %u\r\n", i, info->report_id, + info->usage_page, info->usage); + } - return report_num; + return report_num; } #endif diff --git a/Libraries/tinyusb/src/class/hid/hid_host.h b/Libraries/tinyusb/src/class/hid/hid_host.h index 9681c704b30..ad5d04abb07 100644 --- a/Libraries/tinyusb/src/class/hid/hid_host.h +++ b/Libraries/tinyusb/src/class/hid/hid_host.h @@ -46,15 +46,14 @@ extern "C" { #define CFG_TUH_HID_EPOUT_BUFSIZE 64 #endif - typedef struct { - uint8_t report_id; - uint8_t usage; - uint16_t usage_page; + uint8_t report_id; + uint8_t usage; + uint16_t usage_page; - // TODO still use the endpoint size for now -// uint8_t in_len; // length of IN report -// uint8_t out_len; // length of OUT report + // TODO still use the endpoint size for now + // uint8_t in_len; // length of IN report + // uint8_t out_len; // length of OUT report } tuh_hid_report_info_t; //--------------------------------------------------------------------+ @@ -68,10 +67,10 @@ uint8_t tuh_hid_itf_get_count(uint8_t dev_addr); uint8_t tuh_hid_itf_get_total_count(void); // backward compatible rename -#define tuh_hid_instance_count tuh_hid_itf_get_count +#define tuh_hid_instance_count tuh_hid_itf_get_count // Get Interface information -bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t* itf_info); +bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t *itf_info); // Get Interface index from device address + interface number // return TUSB_INDEX_INVALID_8 (0xFF) if not found @@ -85,8 +84,10 @@ bool tuh_hid_mounted(uint8_t dev_addr, uint8_t idx); // Parse report descriptor into array of report_info struct and return number of reports. // For complicated report, application should write its own parser. -TU_ATTR_UNUSED uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t* reports_info_arr, uint8_t arr_count, - uint8_t const* desc_report, uint16_t desc_len); +TU_ATTR_UNUSED uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t *reports_info_arr, + uint8_t arr_count, + uint8_t const *desc_report, + uint16_t desc_len); //--------------------------------------------------------------------+ // Control Endpoint API @@ -107,12 +108,13 @@ bool tuh_hid_set_protocol(uint8_t dev_addr, uint8_t idx, uint8_t protocol); // Get Report using control endpoint // report_type is either Input, Output or Feature, (value from hid_report_type_t) -bool tuh_hid_get_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len); +bool tuh_hid_get_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, + void *report, uint16_t len); // Set Report using control endpoint // report_type is either Input, Output or Feature, (value from hid_report_type_t) bool tuh_hid_set_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, - void* report, uint16_t len); + void *report, uint16_t len); //--------------------------------------------------------------------+ // Interrupt Endpoint API @@ -134,7 +136,8 @@ bool tuh_hid_send_ready(uint8_t dev_addr, uint8_t idx); // Send report using interrupt endpoint // If report_id > 0 (composite), it will be sent as 1st byte, then report contents. Otherwise only report content is sent. -bool tuh_hid_send_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, const void* report, uint16_t len); +bool tuh_hid_send_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, const void *report, + uint16_t len); //--------------------------------------------------------------------+ // Callbacks (Weak is optional) @@ -145,25 +148,29 @@ bool tuh_hid_send_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, const // can be used to parse common/simple enough descriptor. // Note: if report descriptor length > CFG_TUH_ENUMERATION_BUFSIZE, it will be skipped // therefore report_desc = NULL, desc_len = 0 -TU_ATTR_WEAK void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report_desc, uint16_t desc_len); +TU_ATTR_WEAK void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t idx, uint8_t const *report_desc, + uint16_t desc_len); // Invoked when device with hid interface is un-mounted TU_ATTR_WEAK void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t idx); // Invoked when received report from device via interrupt endpoint // Note: if there is report ID (composite), it is 1st byte of report -void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report, uint16_t len); +void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t idx, uint8_t const *report, uint16_t len); // Invoked when sent report to device successfully via interrupt endpoint -TU_ATTR_WEAK void tuh_hid_report_sent_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report, uint16_t len); +TU_ATTR_WEAK void tuh_hid_report_sent_cb(uint8_t dev_addr, uint8_t idx, uint8_t const *report, + uint16_t len); // Invoked when Get Report to device via either control endpoint // len = 0 indicate there is error in the transfer e.g stalled response -TU_ATTR_WEAK void tuh_hid_get_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, uint16_t len); +TU_ATTR_WEAK void tuh_hid_get_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, + uint8_t report_type, uint16_t len); // Invoked when Sent Report to device via either control endpoint // len = 0 indicate there is error in the transfer e.g stalled response -TU_ATTR_WEAK void tuh_hid_set_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, uint16_t len); +TU_ATTR_WEAK void tuh_hid_set_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, + uint8_t report_type, uint16_t len); // Invoked when Set Protocol request is complete TU_ATTR_WEAK void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t protocol); @@ -173,7 +180,8 @@ TU_ATTR_WEAK void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t idx //--------------------------------------------------------------------+ bool hidh_init(void); bool hidh_deinit(void); -bool hidh_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const* desc_itf, uint16_t max_len); +bool hidh_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, + uint16_t max_len); bool hidh_set_config(uint8_t dev_addr, uint8_t itf_num); bool hidh_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); void hidh_close(uint8_t dev_addr); diff --git a/Libraries/tinyusb/src/class/midi/midi.h b/Libraries/tinyusb/src/class/midi/midi.h index 8ddcdfda2bb..72f5b8ad5dc 100644 --- a/Libraries/tinyusb/src/class/midi/midi.h +++ b/Libraries/tinyusb/src/class/midi/midi.h @@ -35,176 +35,161 @@ #include "common/tusb_common.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ // Class Specific Descriptor //--------------------------------------------------------------------+ -typedef enum -{ - MIDI_CS_INTERFACE_HEADER = 0x01, - MIDI_CS_INTERFACE_IN_JACK = 0x02, - MIDI_CS_INTERFACE_OUT_JACK = 0x03, - MIDI_CS_INTERFACE_ELEMENT = 0x04, +typedef enum { + MIDI_CS_INTERFACE_HEADER = 0x01, + MIDI_CS_INTERFACE_IN_JACK = 0x02, + MIDI_CS_INTERFACE_OUT_JACK = 0x03, + MIDI_CS_INTERFACE_ELEMENT = 0x04, } midi_cs_interface_subtype_t; -typedef enum -{ - MIDI_CS_ENDPOINT_GENERAL = 0x01 -} midi_cs_endpoint_subtype_t; - -typedef enum -{ - MIDI_JACK_EMBEDDED = 0x01, - MIDI_JACK_EXTERNAL = 0x02 -} midi_jack_type_t; - -typedef enum -{ - MIDI_CIN_MISC = 0, - MIDI_CIN_CABLE_EVENT = 1, - MIDI_CIN_SYSCOM_2BYTE = 2, // 2 byte system common message e.g MTC, SongSelect - MIDI_CIN_SYSCOM_3BYTE = 3, // 3 byte system common message e.g SPP - MIDI_CIN_SYSEX_START = 4, // SysEx starts or continue - MIDI_CIN_SYSEX_END_1BYTE = 5, // SysEx ends with 1 data, or 1 byte system common message - MIDI_CIN_SYSEX_END_2BYTE = 6, // SysEx ends with 2 data - MIDI_CIN_SYSEX_END_3BYTE = 7, // SysEx ends with 3 data - MIDI_CIN_NOTE_OFF = 8, - MIDI_CIN_NOTE_ON = 9, - MIDI_CIN_POLY_KEYPRESS = 10, - MIDI_CIN_CONTROL_CHANGE = 11, - MIDI_CIN_PROGRAM_CHANGE = 12, - MIDI_CIN_CHANNEL_PRESSURE = 13, - MIDI_CIN_PITCH_BEND_CHANGE = 14, - MIDI_CIN_1BYTE_DATA = 15 +typedef enum { MIDI_CS_ENDPOINT_GENERAL = 0x01 } midi_cs_endpoint_subtype_t; + +typedef enum { MIDI_JACK_EMBEDDED = 0x01, MIDI_JACK_EXTERNAL = 0x02 } midi_jack_type_t; + +typedef enum { + MIDI_CIN_MISC = 0, + MIDI_CIN_CABLE_EVENT = 1, + MIDI_CIN_SYSCOM_2BYTE = 2, // 2 byte system common message e.g MTC, SongSelect + MIDI_CIN_SYSCOM_3BYTE = 3, // 3 byte system common message e.g SPP + MIDI_CIN_SYSEX_START = 4, // SysEx starts or continue + MIDI_CIN_SYSEX_END_1BYTE = 5, // SysEx ends with 1 data, or 1 byte system common message + MIDI_CIN_SYSEX_END_2BYTE = 6, // SysEx ends with 2 data + MIDI_CIN_SYSEX_END_3BYTE = 7, // SysEx ends with 3 data + MIDI_CIN_NOTE_OFF = 8, + MIDI_CIN_NOTE_ON = 9, + MIDI_CIN_POLY_KEYPRESS = 10, + MIDI_CIN_CONTROL_CHANGE = 11, + MIDI_CIN_PROGRAM_CHANGE = 12, + MIDI_CIN_CHANNEL_PRESSURE = 13, + MIDI_CIN_PITCH_BEND_CHANGE = 14, + MIDI_CIN_1BYTE_DATA = 15 } midi_code_index_number_t; // MIDI 1.0 status byte -enum -{ - //------------- System Exclusive -------------// - MIDI_STATUS_SYSEX_START = 0xF0, - MIDI_STATUS_SYSEX_END = 0xF7, - - //------------- System Common -------------// - MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME = 0xF1, - MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER = 0xF2, - MIDI_STATUS_SYSCOM_SONG_SELECT = 0xF3, - // F4, F5 is undefined - MIDI_STATUS_SYSCOM_TUNE_REQUEST = 0xF6, - - //------------- System RealTime -------------// - MIDI_STATUS_SYSREAL_TIMING_CLOCK = 0xF8, - // 0xF9 is undefined - MIDI_STATUS_SYSREAL_START = 0xFA, - MIDI_STATUS_SYSREAL_CONTINUE = 0xFB, - MIDI_STATUS_SYSREAL_STOP = 0xFC, - // 0xFD is undefined - MIDI_STATUS_SYSREAL_ACTIVE_SENSING = 0xFE, - MIDI_STATUS_SYSREAL_SYSTEM_RESET = 0xFF, +enum { + //------------- System Exclusive -------------// + MIDI_STATUS_SYSEX_START = 0xF0, + MIDI_STATUS_SYSEX_END = 0xF7, + + //------------- System Common -------------// + MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME = 0xF1, + MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER = 0xF2, + MIDI_STATUS_SYSCOM_SONG_SELECT = 0xF3, + // F4, F5 is undefined + MIDI_STATUS_SYSCOM_TUNE_REQUEST = 0xF6, + + //------------- System RealTime -------------// + MIDI_STATUS_SYSREAL_TIMING_CLOCK = 0xF8, + // 0xF9 is undefined + MIDI_STATUS_SYSREAL_START = 0xFA, + MIDI_STATUS_SYSREAL_CONTINUE = 0xFB, + MIDI_STATUS_SYSREAL_STOP = 0xFC, + // 0xFD is undefined + MIDI_STATUS_SYSREAL_ACTIVE_SENSING = 0xFE, + MIDI_STATUS_SYSREAL_SYSTEM_RESET = 0xFF, }; /// MIDI Interface Header Descriptor -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType - uint16_t bcdMSC ; ///< MidiStreaming SubClass release number in Binary-Coded Decimal - uint16_t wTotalLength ; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType + uint16_t bcdMSC; ///< MidiStreaming SubClass release number in Binary-Coded Decimal + uint16_t wTotalLength; } midi_desc_header_t; /// MIDI In Jack Descriptor -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType - uint8_t bJackType ; ///< Embedded or External - uint8_t bJackID ; ///< Unique ID for MIDI IN Jack - uint8_t iJack ; ///< string descriptor +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType + uint8_t bJackType; ///< Embedded or External + uint8_t bJackID; ///< Unique ID for MIDI IN Jack + uint8_t iJack; ///< string descriptor } midi_desc_in_jack_t; - /// MIDI Out Jack Descriptor with single pin -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType - uint8_t bJackType ; ///< Embedded or External - uint8_t bJackID ; ///< Unique ID for MIDI IN Jack - uint8_t bNrInputPins; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType + uint8_t bJackType; ///< Embedded or External + uint8_t bJackID; ///< Unique ID for MIDI IN Jack + uint8_t bNrInputPins; - uint8_t baSourceID; - uint8_t baSourcePin; + uint8_t baSourceID; + uint8_t baSourcePin; - uint8_t iJack ; ///< string descriptor -} midi_desc_out_jack_t ; + uint8_t iJack; ///< string descriptor +} midi_desc_out_jack_t; /// MIDI Out Jack Descriptor with multiple pins #define midi_desc_out_jack_n_t(input_num) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength ; \ - uint8_t bDescriptorType ; \ - uint8_t bDescriptorSubType ; \ - uint8_t bJackType ; \ - uint8_t bJackID ; \ - uint8_t bNrInputPins ; \ - struct TU_ATTR_PACKED { \ - uint8_t baSourceID; \ - uint8_t baSourcePin; \ - } pins[input_num]; \ - uint8_t iJack ; \ - } + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bJackType; \ + uint8_t bJackID; \ + uint8_t bNrInputPins; \ + struct TU_ATTR_PACKED { \ + uint8_t baSourceID; \ + uint8_t baSourcePin; \ + } pins[input_num]; \ + uint8_t iJack; \ + } /// MIDI Element Descriptor -typedef struct TU_ATTR_PACKED -{ - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType ; ///< Descriptor SubType - uint8_t bElementID; - - uint8_t bNrInputPins; - uint8_t baSourceID; - uint8_t baSourcePin; - - uint8_t bNrOutputPins; - uint8_t bInTerminalLink; - uint8_t bOutTerminalLink; - uint8_t bElCapsSize; - - uint16_t bmElementCaps; - uint8_t iElement; +typedef struct TU_ATTR_PACKED { + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType; ///< Descriptor SubType + uint8_t bElementID; + + uint8_t bNrInputPins; + uint8_t baSourceID; + uint8_t baSourcePin; + + uint8_t bNrOutputPins; + uint8_t bInTerminalLink; + uint8_t bOutTerminalLink; + uint8_t bElCapsSize; + + uint16_t bmElementCaps; + uint8_t iElement; } midi_desc_element_t; /// MIDI Element Descriptor with multiple pins #define midi_desc_element_n_t(input_num) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bElementID; \ - uint8_t bNrInputPins; \ - struct TU_ATTR_PACKED { \ - uint8_t baSourceID; \ - uint8_t baSourcePin; \ - } pins[input_num]; \ - uint8_t bNrOutputPins; \ - uint8_t bInTerminalLink; \ - uint8_t bOutTerminalLink; \ - uint8_t bElCapsSize; \ - uint16_t bmElementCaps; \ - uint8_t iElement; \ - } + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bElementID; \ + uint8_t bNrInputPins; \ + struct TU_ATTR_PACKED { \ + uint8_t baSourceID; \ + uint8_t baSourcePin; \ + } pins[input_num]; \ + uint8_t bNrOutputPins; \ + uint8_t bInTerminalLink; \ + uint8_t bOutTerminalLink; \ + uint8_t bElCapsSize; \ + uint16_t bmElementCaps; \ + uint8_t iElement; \ + } /** @} */ #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/class/midi/midi_device.c b/Libraries/tinyusb/src/class/midi/midi_device.c index 42905ab0d40..85e9d8d0e86 100644 --- a/Libraries/tinyusb/src/class/midi/midi_device.c +++ b/Libraries/tinyusb/src/class/midi/midi_device.c @@ -40,80 +40,77 @@ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -typedef struct -{ - uint8_t buffer[4]; - uint8_t index; - uint8_t total; -}midid_stream_t; +typedef struct { + uint8_t buffer[4]; + uint8_t index; + uint8_t total; +} midid_stream_t; + +typedef struct { + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; + + // For Stream read()/write() API + // Messages are always 4 bytes long, queue them for reading and writing so the + // callers can use the Stream interface with single-byte read/write calls. + midid_stream_t stream_write; + midid_stream_t stream_read; + + /*------------- From this point, data is not cleared by bus reset -------------*/ + // FIFO + tu_fifo_t rx_ff; + tu_fifo_t tx_ff; + uint8_t rx_ff_buf[CFG_TUD_MIDI_RX_BUFSIZE]; + uint8_t tx_ff_buf[CFG_TUD_MIDI_TX_BUFSIZE]; + +#if CFG_FIFO_MUTEX + osal_mutex_def_t rx_ff_mutex; + osal_mutex_def_t tx_ff_mutex; +#endif -typedef struct -{ - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; - - // For Stream read()/write() API - // Messages are always 4 bytes long, queue them for reading and writing so the - // callers can use the Stream interface with single-byte read/write calls. - midid_stream_t stream_write; - midid_stream_t stream_read; - - /*------------- From this point, data is not cleared by bus reset -------------*/ - // FIFO - tu_fifo_t rx_ff; - tu_fifo_t tx_ff; - uint8_t rx_ff_buf[CFG_TUD_MIDI_RX_BUFSIZE]; - uint8_t tx_ff_buf[CFG_TUD_MIDI_TX_BUFSIZE]; - - #if CFG_FIFO_MUTEX - osal_mutex_def_t rx_ff_mutex; - osal_mutex_def_t tx_ff_mutex; - #endif - - // Endpoint Transfer buffer - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_MIDI_EP_BUFSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_MIDI_EP_BUFSIZE]; + // Endpoint Transfer buffer + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_MIDI_EP_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_MIDI_EP_BUFSIZE]; } midid_interface_t; -#define ITF_MEM_RESET_SIZE offsetof(midid_interface_t, rx_ff) +#define ITF_MEM_RESET_SIZE offsetof(midid_interface_t, rx_ff) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ CFG_TUD_MEM_SECTION midid_interface_t _midid_itf[CFG_TUD_MIDI]; -bool tud_midi_n_mounted (uint8_t itf) +bool tud_midi_n_mounted(uint8_t itf) { - midid_interface_t* midi = &_midid_itf[itf]; - return midi->ep_in && midi->ep_out; + midid_interface_t *midi = &_midid_itf[itf]; + return midi->ep_in && midi->ep_out; } -static void _prep_out_transaction (midid_interface_t* p_midi) +static void _prep_out_transaction(midid_interface_t *p_midi) { - uint8_t const rhport = 0; - uint16_t available = tu_fifo_remaining(&p_midi->rx_ff); - - // Prepare for incoming data but only allow what we can store in the ring buffer. - // TODO Actually we can still carry out the transfer, keeping count of received bytes - // and slowly move it to the FIFO when read(). - // This pre-check reduces endpoint claiming - TU_VERIFY(available >= sizeof(p_midi->epout_buf), ); - - // claim endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_midi->ep_out), ); - - // fifo can be changed before endpoint is claimed - available = tu_fifo_remaining(&p_midi->rx_ff); - - if ( available >= sizeof(p_midi->epout_buf) ) { - usbd_edpt_xfer(rhport, p_midi->ep_out, p_midi->epout_buf, sizeof(p_midi->epout_buf)); - }else - { - // Release endpoint since we don't make any transfer - usbd_edpt_release(rhport, p_midi->ep_out); - } + uint8_t const rhport = 0; + uint16_t available = tu_fifo_remaining(&p_midi->rx_ff); + + // Prepare for incoming data but only allow what we can store in the ring buffer. + // TODO Actually we can still carry out the transfer, keeping count of received bytes + // and slowly move it to the FIFO when read(). + // This pre-check reduces endpoint claiming + TU_VERIFY(available >= sizeof(p_midi->epout_buf), ); + + // claim endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_midi->ep_out), ); + + // fifo can be changed before endpoint is claimed + available = tu_fifo_remaining(&p_midi->rx_ff); + + if (available >= sizeof(p_midi->epout_buf)) { + usbd_edpt_xfer(rhport, p_midi->ep_out, p_midi->epout_buf, sizeof(p_midi->epout_buf)); + } else { + // Release endpoint since we don't make any transfer + usbd_edpt_release(rhport, p_midi->ep_out); + } } //--------------------------------------------------------------------+ @@ -121,450 +118,420 @@ static void _prep_out_transaction (midid_interface_t* p_midi) //--------------------------------------------------------------------+ uint32_t tud_midi_n_available(uint8_t itf, uint8_t cable_num) { - (void) cable_num; + (void)cable_num; - midid_interface_t* midi = &_midid_itf[itf]; - midid_stream_t const* stream = &midi->stream_read; + midid_interface_t *midi = &_midid_itf[itf]; + midid_stream_t const *stream = &midi->stream_read; - // when using with packet API stream total & index are both zero - return tu_fifo_count(&midi->rx_ff) + (uint8_t) (stream->total - stream->index); + // when using with packet API stream total & index are both zero + return tu_fifo_count(&midi->rx_ff) + (uint8_t)(stream->total - stream->index); } -uint32_t tud_midi_n_stream_read(uint8_t itf, uint8_t cable_num, void* buffer, uint32_t bufsize) +uint32_t tud_midi_n_stream_read(uint8_t itf, uint8_t cable_num, void *buffer, uint32_t bufsize) { - (void) cable_num; - TU_VERIFY(bufsize, 0); - - uint8_t* buf8 = (uint8_t*) buffer; - - midid_interface_t* midi = &_midid_itf[itf]; - midid_stream_t* stream = &midi->stream_read; - - uint32_t total_read = 0; - while( bufsize ) - { - // Get new packet from fifo, then set packet expected bytes - if ( stream->total == 0 ) - { - // return if there is no more data from fifo - if ( !tud_midi_n_packet_read(itf, stream->buffer) ) return total_read; - - uint8_t const code_index = stream->buffer[0] & 0x0f; - - // MIDI 1.0 Table 4-1: Code Index Number Classifications - switch(code_index) - { - case MIDI_CIN_MISC: - case MIDI_CIN_CABLE_EVENT: - // These are reserved and unused, possibly issue somewhere, skip this packet - return 0; - break; - - case MIDI_CIN_SYSEX_END_1BYTE: - case MIDI_CIN_1BYTE_DATA: - stream->total = 1; - break; - - case MIDI_CIN_SYSCOM_2BYTE : - case MIDI_CIN_SYSEX_END_2BYTE : - case MIDI_CIN_PROGRAM_CHANGE : - case MIDI_CIN_CHANNEL_PRESSURE : - stream->total = 2; - break; - - default: - stream->total = 3; - break; - } - } + (void)cable_num; + TU_VERIFY(bufsize, 0); + + uint8_t *buf8 = (uint8_t *)buffer; + + midid_interface_t *midi = &_midid_itf[itf]; + midid_stream_t *stream = &midi->stream_read; + + uint32_t total_read = 0; + while (bufsize) { + // Get new packet from fifo, then set packet expected bytes + if (stream->total == 0) { + // return if there is no more data from fifo + if (!tud_midi_n_packet_read(itf, stream->buffer)) + return total_read; + + uint8_t const code_index = stream->buffer[0] & 0x0f; + + // MIDI 1.0 Table 4-1: Code Index Number Classifications + switch (code_index) { + case MIDI_CIN_MISC: + case MIDI_CIN_CABLE_EVENT: + // These are reserved and unused, possibly issue somewhere, skip this packet + return 0; + break; + + case MIDI_CIN_SYSEX_END_1BYTE: + case MIDI_CIN_1BYTE_DATA: + stream->total = 1; + break; + + case MIDI_CIN_SYSCOM_2BYTE: + case MIDI_CIN_SYSEX_END_2BYTE: + case MIDI_CIN_PROGRAM_CHANGE: + case MIDI_CIN_CHANNEL_PRESSURE: + stream->total = 2; + break; + + default: + stream->total = 3; + break; + } + } - // Copy data up to bufsize - uint8_t const count = (uint8_t) tu_min32(stream->total - stream->index, bufsize); + // Copy data up to bufsize + uint8_t const count = (uint8_t)tu_min32(stream->total - stream->index, bufsize); - // Skip the header (1st byte) in the buffer - TU_VERIFY(0 == tu_memcpy_s(buf8, bufsize, stream->buffer + 1 + stream->index, count)); + // Skip the header (1st byte) in the buffer + TU_VERIFY(0 == tu_memcpy_s(buf8, bufsize, stream->buffer + 1 + stream->index, count)); - total_read += count; - stream->index += count; - buf8 += count; - bufsize -= count; + total_read += count; + stream->index += count; + buf8 += count; + bufsize -= count; - // complete current event packet, reset stream - if ( stream->total == stream->index ) - { - stream->index = 0; - stream->total = 0; + // complete current event packet, reset stream + if (stream->total == stream->index) { + stream->index = 0; + stream->total = 0; + } } - } - return total_read; + return total_read; } -bool tud_midi_n_packet_read (uint8_t itf, uint8_t packet[4]) +bool tud_midi_n_packet_read(uint8_t itf, uint8_t packet[4]) { - midid_interface_t* midi = &_midid_itf[itf]; - TU_VERIFY(midi->ep_out); + midid_interface_t *midi = &_midid_itf[itf]; + TU_VERIFY(midi->ep_out); - uint32_t const num_read = tu_fifo_read_n(&midi->rx_ff, packet, 4); - _prep_out_transaction(midi); - return (num_read == 4); + uint32_t const num_read = tu_fifo_read_n(&midi->rx_ff, packet, 4); + _prep_out_transaction(midi); + return (num_read == 4); } //--------------------------------------------------------------------+ // WRITE API //--------------------------------------------------------------------+ -static uint32_t write_flush(midid_interface_t* midi) -{ - // No data to send - if ( !tu_fifo_count(&midi->tx_ff) ) return 0; - - uint8_t const rhport = 0; - - // skip if previous transfer not complete - TU_VERIFY( usbd_edpt_claim(rhport, midi->ep_in), 0 ); - - uint16_t count = tu_fifo_read_n(&midi->tx_ff, midi->epin_buf, CFG_TUD_MIDI_EP_BUFSIZE); - - if (count) - { - TU_ASSERT( usbd_edpt_xfer(rhport, midi->ep_in, midi->epin_buf, count), 0 ); - return count; - }else - { - // Release endpoint since we don't make any transfer - usbd_edpt_release(rhport, midi->ep_in); - return 0; - } -} - -uint32_t tud_midi_n_stream_write(uint8_t itf, uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize) +static uint32_t write_flush(midid_interface_t *midi) { - midid_interface_t* midi = &_midid_itf[itf]; - TU_VERIFY(midi->ep_in, 0); - - midid_stream_t* stream = &midi->stream_write; + // No data to send + if (!tu_fifo_count(&midi->tx_ff)) + return 0; - uint32_t i = 0; - while ( (i < bufsize) && (tu_fifo_remaining(&midi->tx_ff) >= 4) ) - { - uint8_t const data = buffer[i]; - i++; + uint8_t const rhport = 0; - if ( stream->index == 0 ) - { - //------------- New event packet -------------// + // skip if previous transfer not complete + TU_VERIFY(usbd_edpt_claim(rhport, midi->ep_in), 0); - uint8_t const msg = data >> 4; + uint16_t count = tu_fifo_read_n(&midi->tx_ff, midi->epin_buf, CFG_TUD_MIDI_EP_BUFSIZE); - stream->index = 2; - stream->buffer[1] = data; + if (count) { + TU_ASSERT(usbd_edpt_xfer(rhport, midi->ep_in, midi->epin_buf, count), 0); + return count; + } else { + // Release endpoint since we don't make any transfer + usbd_edpt_release(rhport, midi->ep_in); + return 0; + } +} - // Check to see if we're still in a SysEx transmit. - if ( ((stream->buffer[0]) & 0xF) == MIDI_CIN_SYSEX_START ) - { - if ( data == MIDI_STATUS_SYSEX_END ) - { - stream->buffer[0] = (uint8_t) ((cable_num << 4) | MIDI_CIN_SYSEX_END_1BYTE); - stream->total = 2; - } - else - { - stream->total = 4; - } - } - else if ( (msg >= 0x8 && msg <= 0xB) || msg == 0xE ) - { - // Channel Voice Messages - stream->buffer[0] = (uint8_t) ((cable_num << 4) | msg); - stream->total = 4; - } - else if ( msg == 0xC || msg == 0xD) - { - // Channel Voice Messages, two-byte variants (Program Change and Channel Pressure) - stream->buffer[0] = (uint8_t) ((cable_num << 4) | msg); - stream->total = 3; - } - else if ( msg == 0xf ) - { - // System message - if ( data == MIDI_STATUS_SYSEX_START ) - { - stream->buffer[0] = MIDI_CIN_SYSEX_START; - stream->total = 4; - } - else if ( data == MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME || data == MIDI_STATUS_SYSCOM_SONG_SELECT ) - { - stream->buffer[0] = MIDI_CIN_SYSCOM_2BYTE; - stream->total = 3; - } - else if ( data == MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER ) - { - stream->buffer[0] = MIDI_CIN_SYSCOM_3BYTE; - stream->total = 4; - } - else - { - stream->buffer[0] = MIDI_CIN_SYSEX_END_1BYTE; - stream->total = 2; +uint32_t tud_midi_n_stream_write(uint8_t itf, uint8_t cable_num, uint8_t const *buffer, + uint32_t bufsize) +{ + midid_interface_t *midi = &_midid_itf[itf]; + TU_VERIFY(midi->ep_in, 0); + + midid_stream_t *stream = &midi->stream_write; + + uint32_t i = 0; + while ((i < bufsize) && (tu_fifo_remaining(&midi->tx_ff) >= 4)) { + uint8_t const data = buffer[i]; + i++; + + if (stream->index == 0) { + //------------- New event packet -------------// + + uint8_t const msg = data >> 4; + + stream->index = 2; + stream->buffer[1] = data; + + // Check to see if we're still in a SysEx transmit. + if (((stream->buffer[0]) & 0xF) == MIDI_CIN_SYSEX_START) { + if (data == MIDI_STATUS_SYSEX_END) { + stream->buffer[0] = (uint8_t)((cable_num << 4) | MIDI_CIN_SYSEX_END_1BYTE); + stream->total = 2; + } else { + stream->total = 4; + } + } else if ((msg >= 0x8 && msg <= 0xB) || msg == 0xE) { + // Channel Voice Messages + stream->buffer[0] = (uint8_t)((cable_num << 4) | msg); + stream->total = 4; + } else if (msg == 0xC || msg == 0xD) { + // Channel Voice Messages, two-byte variants (Program Change and Channel Pressure) + stream->buffer[0] = (uint8_t)((cable_num << 4) | msg); + stream->total = 3; + } else if (msg == 0xf) { + // System message + if (data == MIDI_STATUS_SYSEX_START) { + stream->buffer[0] = MIDI_CIN_SYSEX_START; + stream->total = 4; + } else if (data == MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME || + data == MIDI_STATUS_SYSCOM_SONG_SELECT) { + stream->buffer[0] = MIDI_CIN_SYSCOM_2BYTE; + stream->total = 3; + } else if (data == MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER) { + stream->buffer[0] = MIDI_CIN_SYSCOM_3BYTE; + stream->total = 4; + } else { + stream->buffer[0] = MIDI_CIN_SYSEX_END_1BYTE; + stream->total = 2; + } + stream->buffer[0] |= (uint8_t)(cable_num << 4); + } else { + // Pack individual bytes if we don't support packing them into words. + stream->buffer[0] = (uint8_t)(cable_num << 4 | 0xf); + stream->buffer[2] = 0; + stream->buffer[3] = 0; + stream->index = 2; + stream->total = 2; + } + } else { + //------------- On-going (buffering) packet -------------// + + TU_ASSERT(stream->index < 4, i); + stream->buffer[stream->index] = data; + stream->index++; + + // See if this byte ends a SysEx. + if ((stream->buffer[0] & 0xF) == MIDI_CIN_SYSEX_START && + data == MIDI_STATUS_SYSEX_END) { + stream->buffer[0] = + (uint8_t)((cable_num << 4) | (MIDI_CIN_SYSEX_START + (stream->index - 1))); + stream->total = stream->index; + } } - stream->buffer[0] |= (uint8_t)(cable_num << 4); - } - else - { - // Pack individual bytes if we don't support packing them into words. - stream->buffer[0] = (uint8_t) (cable_num << 4 | 0xf); - stream->buffer[2] = 0; - stream->buffer[3] = 0; - stream->index = 2; - stream->total = 2; - } - } - else - { - //------------- On-going (buffering) packet -------------// - - TU_ASSERT(stream->index < 4, i); - stream->buffer[stream->index] = data; - stream->index++; - - // See if this byte ends a SysEx. - if ( (stream->buffer[0] & 0xF) == MIDI_CIN_SYSEX_START && data == MIDI_STATUS_SYSEX_END ) - { - stream->buffer[0] = (uint8_t) ((cable_num << 4) | (MIDI_CIN_SYSEX_START + (stream->index - 1))); - stream->total = stream->index; - } - } - // Send out packet - if ( stream->index == stream->total ) - { - // zeroes unused bytes - for(uint8_t idx = stream->total; idx < 4; idx++) stream->buffer[idx] = 0; + // Send out packet + if (stream->index == stream->total) { + // zeroes unused bytes + for (uint8_t idx = stream->total; idx < 4; idx++) stream->buffer[idx] = 0; - uint16_t const count = tu_fifo_write_n(&midi->tx_ff, stream->buffer, 4); + uint16_t const count = tu_fifo_write_n(&midi->tx_ff, stream->buffer, 4); - // complete current event packet, reset stream - stream->index = stream->total = 0; + // complete current event packet, reset stream + stream->index = stream->total = 0; - // FIFO overflown, since we already check fifo remaining. It is probably race condition - TU_ASSERT(count == 4, i); + // FIFO overflown, since we already check fifo remaining. It is probably race condition + TU_ASSERT(count == 4, i); + } } - } - write_flush(midi); + write_flush(midi); - return i; + return i; } -bool tud_midi_n_packet_write (uint8_t itf, uint8_t const packet[4]) +bool tud_midi_n_packet_write(uint8_t itf, uint8_t const packet[4]) { - midid_interface_t* midi = &_midid_itf[itf]; - TU_VERIFY(midi->ep_in); + midid_interface_t *midi = &_midid_itf[itf]; + TU_VERIFY(midi->ep_in); - if (tu_fifo_remaining(&midi->tx_ff) < 4) return false; + if (tu_fifo_remaining(&midi->tx_ff) < 4) + return false; - tu_fifo_write_n(&midi->tx_ff, packet, 4); - write_flush(midi); + tu_fifo_write_n(&midi->tx_ff, packet, 4); + write_flush(midi); - return true; + return true; } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void midid_init(void) { - tu_memclr(_midid_itf, sizeof(_midid_itf)); +void midid_init(void) +{ + tu_memclr(_midid_itf, sizeof(_midid_itf)); - for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { - midid_interface_t* midi = &_midid_itf[i]; + for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { + midid_interface_t *midi = &_midid_itf[i]; - // config fifo - tu_fifo_config(&midi->rx_ff, midi->rx_ff_buf, CFG_TUD_MIDI_RX_BUFSIZE, 1, false); // true, true - tu_fifo_config(&midi->tx_ff, midi->tx_ff_buf, CFG_TUD_MIDI_TX_BUFSIZE, 1, false); // OBVS. + // config fifo + tu_fifo_config(&midi->rx_ff, midi->rx_ff_buf, CFG_TUD_MIDI_RX_BUFSIZE, 1, + false); // true, true + tu_fifo_config(&midi->tx_ff, midi->tx_ff_buf, CFG_TUD_MIDI_TX_BUFSIZE, 1, false); // OBVS. - #if CFG_FIFO_MUTEX - osal_mutex_t mutex_rd = osal_mutex_create(&midi->rx_ff_mutex); - osal_mutex_t mutex_wr = osal_mutex_create(&midi->tx_ff_mutex); - TU_ASSERT(mutex_wr != NULL && mutex_wr != NULL, ); +#if CFG_FIFO_MUTEX + osal_mutex_t mutex_rd = osal_mutex_create(&midi->rx_ff_mutex); + osal_mutex_t mutex_wr = osal_mutex_create(&midi->tx_ff_mutex); + TU_ASSERT(mutex_wr != NULL && mutex_wr != NULL, ); - tu_fifo_config_mutex(&midi->rx_ff, NULL, mutex_rd); - tu_fifo_config_mutex(&midi->tx_ff, mutex_wr, NULL); - #endif - } + tu_fifo_config_mutex(&midi->rx_ff, NULL, mutex_rd); + tu_fifo_config_mutex(&midi->tx_ff, mutex_wr, NULL); +#endif + } } -bool midid_deinit(void) { - #if CFG_FIFO_MUTEX - for(uint8_t i=0; irx_ff.mutex_rd; - osal_mutex_t mutex_wr = midi->tx_ff.mutex_wr; - - if (mutex_rd) { - osal_mutex_delete(mutex_rd); - tu_fifo_config_mutex(&midi->rx_ff, NULL, NULL); - } +bool midid_deinit(void) +{ +#if CFG_FIFO_MUTEX + for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { + midid_interface_t *midi = &_midid_itf[i]; + osal_mutex_t mutex_rd = midi->rx_ff.mutex_rd; + osal_mutex_t mutex_wr = midi->tx_ff.mutex_wr; + + if (mutex_rd) { + osal_mutex_delete(mutex_rd); + tu_fifo_config_mutex(&midi->rx_ff, NULL, NULL); + } - if (mutex_wr) { - osal_mutex_delete(mutex_wr); - tu_fifo_config_mutex(&midi->tx_ff, NULL, NULL); + if (mutex_wr) { + osal_mutex_delete(mutex_wr); + tu_fifo_config_mutex(&midi->tx_ff, NULL, NULL); + } } - } - #endif +#endif - return true; + return true; } void midid_reset(uint8_t rhport) { - (void) rhport; - - for(uint8_t i=0; irx_ff); - tu_fifo_clear(&midi->tx_ff); - } + (void)rhport; + + for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { + midid_interface_t *midi = &_midid_itf[i]; + tu_memclr(midi, ITF_MEM_RESET_SIZE); + tu_fifo_clear(&midi->rx_ff); + tu_fifo_clear(&midi->tx_ff); + } } -uint16_t midid_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t max_len) +uint16_t midid_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) { - // 1st Interface is Audio Control v1 - TU_VERIFY(TUSB_CLASS_AUDIO == desc_itf->bInterfaceClass && - AUDIO_SUBCLASS_CONTROL == desc_itf->bInterfaceSubClass && - AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_itf->bInterfaceProtocol, 0); - - uint16_t drv_len = tu_desc_len(desc_itf); - uint8_t const * p_desc = tu_desc_next(desc_itf); - - // Skip Class Specific descriptors - while ( TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len ) - { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } - - // 2nd Interface is MIDI Streaming - TU_VERIFY(TUSB_DESC_INTERFACE == tu_desc_type(p_desc), 0); - tusb_desc_interface_t const * desc_midi = (tusb_desc_interface_t const *) p_desc; - - TU_VERIFY(TUSB_CLASS_AUDIO == desc_midi->bInterfaceClass && - AUDIO_SUBCLASS_MIDI_STREAMING == desc_midi->bInterfaceSubClass && - AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_midi->bInterfaceProtocol, 0); - - // Find available interface - midid_interface_t * p_midi = NULL; - for(uint8_t i=0; ibInterfaceClass && + AUDIO_SUBCLASS_CONTROL == desc_itf->bInterfaceSubClass && + AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_itf->bInterfaceProtocol, + 0); + + uint16_t drv_len = tu_desc_len(desc_itf); + uint8_t const *p_desc = tu_desc_next(desc_itf); + + // Skip Class Specific descriptors + while (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len) { + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); } - } - TU_ASSERT(p_midi); - - p_midi->itf_num = desc_midi->bInterfaceNumber; - (void) p_midi->itf_num; - - // next descriptor - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - - // Find and open endpoint descriptors - uint8_t found_endpoints = 0; - while ( (found_endpoints < desc_midi->bNumEndpoints) && (drv_len <= max_len) ) - { - if ( TUSB_DESC_ENDPOINT == tu_desc_type(p_desc) ) - { - TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), 0); - uint8_t ep_addr = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress; - - if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN) - { - p_midi->ep_in = ep_addr; - } else { - p_midi->ep_out = ep_addr; - } - - // Class Specific MIDI Stream endpoint descriptor - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - - found_endpoints += 1; + + // 2nd Interface is MIDI Streaming + TU_VERIFY(TUSB_DESC_INTERFACE == tu_desc_type(p_desc), 0); + tusb_desc_interface_t const *desc_midi = (tusb_desc_interface_t const *)p_desc; + + TU_VERIFY(TUSB_CLASS_AUDIO == desc_midi->bInterfaceClass && + AUDIO_SUBCLASS_MIDI_STREAMING == desc_midi->bInterfaceSubClass && + AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_midi->bInterfaceProtocol, + 0); + + // Find available interface + midid_interface_t *p_midi = NULL; + for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { + if (_midid_itf[i].ep_in == 0 && _midid_itf[i].ep_out == 0) { + p_midi = &_midid_itf[i]; + break; + } } + TU_ASSERT(p_midi); + + p_midi->itf_num = desc_midi->bInterfaceNumber; + (void)p_midi->itf_num; + // next descriptor drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + + // Find and open endpoint descriptors + uint8_t found_endpoints = 0; + while ((found_endpoints < desc_midi->bNumEndpoints) && (drv_len <= max_len)) { + if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { + TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *)p_desc), 0); + uint8_t ep_addr = ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress; + + if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN) { + p_midi->ep_in = ep_addr; + } else { + p_midi->ep_out = ep_addr; + } + + // Class Specific MIDI Stream endpoint descriptor + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + + found_endpoints += 1; + } - // Prepare for incoming data - _prep_out_transaction(p_midi); + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - return drv_len; + // Prepare for incoming data + _prep_out_transaction(p_midi); + + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool midid_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +bool midid_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - (void) rhport; - (void) stage; - (void) request; + (void)rhport; + (void)stage; + (void)request; - // driver doesn't support any request yet - return false; + // driver doesn't support any request yet + return false; } bool midid_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) result; - (void) rhport; - - uint8_t itf; - midid_interface_t* p_midi; - - // Identify which interface to use - for (itf = 0; itf < CFG_TUD_MIDI; itf++) - { - p_midi = &_midid_itf[itf]; - if ( ( ep_addr == p_midi->ep_out ) || ( ep_addr == p_midi->ep_in ) ) break; - } - TU_ASSERT(itf < CFG_TUD_MIDI); - - // receive new data - if ( ep_addr == p_midi->ep_out ) - { - tu_fifo_write_n(&p_midi->rx_ff, p_midi->epout_buf, (uint16_t) xferred_bytes); - - // invoke receive callback if available - if (tud_midi_rx_cb) tud_midi_rx_cb(itf); - - // prepare for next - // TODO for now ep_out is not used by public API therefore there is no race condition, - // and does not need to claim like ep_in - _prep_out_transaction(p_midi); - } - else if ( ep_addr == p_midi->ep_in ) - { - if (0 == write_flush(p_midi)) - { - // If there is no data left, a ZLP should be sent if - // xferred_bytes is multiple of EP size and not zero - if ( !tu_fifo_count(&p_midi->tx_ff) && xferred_bytes && (0 == (xferred_bytes % CFG_TUD_MIDI_EP_BUFSIZE)) ) - { - if ( usbd_edpt_claim(rhport, p_midi->ep_in) ) - { - usbd_edpt_xfer(rhport, p_midi->ep_in, NULL, 0); + (void)result; + (void)rhport; + + uint8_t itf; + midid_interface_t *p_midi; + + // Identify which interface to use + for (itf = 0; itf < CFG_TUD_MIDI; itf++) { + p_midi = &_midid_itf[itf]; + if ((ep_addr == p_midi->ep_out) || (ep_addr == p_midi->ep_in)) + break; + } + TU_ASSERT(itf < CFG_TUD_MIDI); + + // receive new data + if (ep_addr == p_midi->ep_out) { + tu_fifo_write_n(&p_midi->rx_ff, p_midi->epout_buf, (uint16_t)xferred_bytes); + + // invoke receive callback if available + if (tud_midi_rx_cb) + tud_midi_rx_cb(itf); + + // prepare for next + // TODO for now ep_out is not used by public API therefore there is no race condition, + // and does not need to claim like ep_in + _prep_out_transaction(p_midi); + } else if (ep_addr == p_midi->ep_in) { + if (0 == write_flush(p_midi)) { + // If there is no data left, a ZLP should be sent if + // xferred_bytes is multiple of EP size and not zero + if (!tu_fifo_count(&p_midi->tx_ff) && xferred_bytes && + (0 == (xferred_bytes % CFG_TUD_MIDI_EP_BUFSIZE))) { + if (usbd_edpt_claim(rhport, p_midi->ep_in)) { + usbd_edpt_xfer(rhport, p_midi->ep_in, NULL, 0); + } + } } - } } - } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/midi/midi_device.h b/Libraries/tinyusb/src/class/midi/midi_device.h index 3e89cc0a300..4b2ae6d9f3d 100644 --- a/Libraries/tinyusb/src/class/midi/midi_device.h +++ b/Libraries/tinyusb/src/class/midi/midi_device.h @@ -35,16 +35,16 @@ //--------------------------------------------------------------------+ #if !defined(CFG_TUD_MIDI_EP_BUFSIZE) && defined(CFG_TUD_MIDI_EPSIZE) - #warning CFG_TUD_MIDI_EPSIZE is renamed to CFG_TUD_MIDI_EP_BUFSIZE, please update to use the new name - #define CFG_TUD_MIDI_EP_BUFSIZE CFG_TUD_MIDI_EPSIZE +#warning CFG_TUD_MIDI_EPSIZE is renamed to CFG_TUD_MIDI_EP_BUFSIZE, please update to use the new name +#define CFG_TUD_MIDI_EP_BUFSIZE CFG_TUD_MIDI_EPSIZE #endif #ifndef CFG_TUD_MIDI_EP_BUFSIZE - #define CFG_TUD_MIDI_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #endif #ifdef __cplusplus - extern "C" { +extern "C" { #endif /** \addtogroup MIDI_Serial Serial @@ -58,61 +58,62 @@ //--------------------------------------------------------------------+ // Check if midi interface is mounted -bool tud_midi_n_mounted (uint8_t itf); +bool tud_midi_n_mounted(uint8_t itf); // Get the number of bytes available for reading -uint32_t tud_midi_n_available (uint8_t itf, uint8_t cable_num); +uint32_t tud_midi_n_available(uint8_t itf, uint8_t cable_num); // Read byte stream (legacy) -uint32_t tud_midi_n_stream_read (uint8_t itf, uint8_t cable_num, void* buffer, uint32_t bufsize); +uint32_t tud_midi_n_stream_read(uint8_t itf, uint8_t cable_num, void *buffer, uint32_t bufsize); // Write byte Stream (legacy) -uint32_t tud_midi_n_stream_write (uint8_t itf, uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize); +uint32_t tud_midi_n_stream_write(uint8_t itf, uint8_t cable_num, uint8_t const *buffer, + uint32_t bufsize); // Read event packet (4 bytes) -bool tud_midi_n_packet_read (uint8_t itf, uint8_t packet[4]); +bool tud_midi_n_packet_read(uint8_t itf, uint8_t packet[4]); // Write event packet (4 bytes) -bool tud_midi_n_packet_write (uint8_t itf, uint8_t const packet[4]); +bool tud_midi_n_packet_write(uint8_t itf, uint8_t const packet[4]); //--------------------------------------------------------------------+ // Application API (Single Interface) //--------------------------------------------------------------------+ -static inline bool tud_midi_mounted (void); -static inline uint32_t tud_midi_available (void); +static inline bool tud_midi_mounted(void); +static inline uint32_t tud_midi_available(void); -static inline uint32_t tud_midi_stream_read (void* buffer, uint32_t bufsize); -static inline uint32_t tud_midi_stream_write (uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize); +static inline uint32_t tud_midi_stream_read(void *buffer, uint32_t bufsize); +static inline uint32_t tud_midi_stream_write(uint8_t cable_num, uint8_t const *buffer, + uint32_t bufsize); -static inline bool tud_midi_packet_read (uint8_t packet[4]); -static inline bool tud_midi_packet_write (uint8_t const packet[4]); +static inline bool tud_midi_packet_read(uint8_t packet[4]); +static inline bool tud_midi_packet_write(uint8_t const packet[4]); //------------- Deprecated API name -------------// // TODO remove after 0.10.0 release TU_ATTR_DEPRECATED("tud_midi_read() is renamed to tud_midi_stream_read()") -static inline uint32_t tud_midi_read (void* buffer, uint32_t bufsize) +static inline uint32_t tud_midi_read(void *buffer, uint32_t bufsize) { - return tud_midi_stream_read(buffer, bufsize); + return tud_midi_stream_read(buffer, bufsize); } TU_ATTR_DEPRECATED("tud_midi_write() is renamed to tud_midi_stream_write()") -static inline uint32_t tud_midi_write(uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize) +static inline uint32_t tud_midi_write(uint8_t cable_num, uint8_t const *buffer, uint32_t bufsize) { - return tud_midi_stream_write(cable_num, buffer, bufsize); + return tud_midi_stream_write(cable_num, buffer, bufsize); } - TU_ATTR_DEPRECATED("tud_midi_send() is renamed to tud_midi_packet_write()") static inline bool tud_midi_send(uint8_t packet[4]) { - return tud_midi_packet_write(packet); + return tud_midi_packet_write(packet); } TU_ATTR_DEPRECATED("tud_midi_receive() is renamed to tud_midi_packet_read()") static inline bool tud_midi_receive(uint8_t packet[4]) { - return tud_midi_packet_read(packet); + return tud_midi_packet_read(packet); } //--------------------------------------------------------------------+ @@ -124,48 +125,49 @@ TU_ATTR_WEAK void tud_midi_rx_cb(uint8_t itf); // Inline Functions //--------------------------------------------------------------------+ -static inline bool tud_midi_mounted (void) +static inline bool tud_midi_mounted(void) { - return tud_midi_n_mounted(0); + return tud_midi_n_mounted(0); } -static inline uint32_t tud_midi_available (void) +static inline uint32_t tud_midi_available(void) { - return tud_midi_n_available(0, 0); + return tud_midi_n_available(0, 0); } -static inline uint32_t tud_midi_stream_read (void* buffer, uint32_t bufsize) +static inline uint32_t tud_midi_stream_read(void *buffer, uint32_t bufsize) { - return tud_midi_n_stream_read(0, 0, buffer, bufsize); + return tud_midi_n_stream_read(0, 0, buffer, bufsize); } -static inline uint32_t tud_midi_stream_write (uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize) +static inline uint32_t tud_midi_stream_write(uint8_t cable_num, uint8_t const *buffer, + uint32_t bufsize) { - return tud_midi_n_stream_write(0, cable_num, buffer, bufsize); + return tud_midi_n_stream_write(0, cable_num, buffer, bufsize); } -static inline bool tud_midi_packet_read (uint8_t packet[4]) +static inline bool tud_midi_packet_read(uint8_t packet[4]) { - return tud_midi_n_packet_read(0, packet); + return tud_midi_n_packet_read(0, packet); } -static inline bool tud_midi_packet_write (uint8_t const packet[4]) +static inline bool tud_midi_packet_write(uint8_t const packet[4]) { - return tud_midi_n_packet_write(0, packet); + return tud_midi_n_packet_write(0, packet); } //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void midid_init (void); -bool midid_deinit (void); -void midid_reset (uint8_t rhport); -uint16_t midid_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool midid_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); -bool midid_xfer_cb (uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); +void midid_init(void); +bool midid_deinit(void); +void midid_reset(uint8_t rhport); +uint16_t midid_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool midid_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +bool midid_xfer_cb(uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_MIDI_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/msc/msc.h b/Libraries/tinyusb/src/class/msc/msc.h index bbfd35a435d..033a19c9046 100644 --- a/Libraries/tinyusb/src/class/msc/msc.h +++ b/Libraries/tinyusb/src/class/msc/msc.h @@ -30,76 +30,84 @@ #include "common/tusb_common.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ // Mass Storage Class Constant //--------------------------------------------------------------------+ /// MassStorage Subclass -typedef enum -{ - MSC_SUBCLASS_RBC = 1 , ///< Reduced Block Commands (RBC) T10 Project 1240-D - MSC_SUBCLASS_SFF_MMC , ///< SFF-8020i, MMC-2 (ATAPI). Typically used by a CD/DVD device - MSC_SUBCLASS_QIC , ///< QIC-157. Typically used by a tape device - MSC_SUBCLASS_UFI , ///< UFI. Typically used by Floppy Disk Drive (FDD) device - MSC_SUBCLASS_SFF , ///< SFF-8070i. Can be used by Floppy Disk Drive (FDD) device - MSC_SUBCLASS_SCSI ///< SCSI transparent command set -}msc_subclass_type_t; +typedef enum { + MSC_SUBCLASS_RBC = 1, ///< Reduced Block Commands (RBC) T10 Project 1240-D + MSC_SUBCLASS_SFF_MMC, ///< SFF-8020i, MMC-2 (ATAPI). Typically used by a CD/DVD device + MSC_SUBCLASS_QIC, ///< QIC-157. Typically used by a tape device + MSC_SUBCLASS_UFI, ///< UFI. Typically used by Floppy Disk Drive (FDD) device + MSC_SUBCLASS_SFF, ///< SFF-8070i. Can be used by Floppy Disk Drive (FDD) device + MSC_SUBCLASS_SCSI ///< SCSI transparent command set +} msc_subclass_type_t; enum { - MSC_CBW_SIGNATURE = 0x43425355, ///< Constant value of 43425355h (little endian) - MSC_CSW_SIGNATURE = 0x53425355 ///< Constant value of 53425355h (little endian) + MSC_CBW_SIGNATURE = 0x43425355, ///< Constant value of 43425355h (little endian) + MSC_CSW_SIGNATURE = 0x53425355 ///< Constant value of 53425355h (little endian) }; /// \brief MassStorage Protocol. /// \details CBI only approved to use with full-speed floppy disk & should not used with highspeed or device other than floppy -typedef enum -{ - MSC_PROTOCOL_CBI = 0 , ///< Control/Bulk/Interrupt protocol (with command completion interrupt) - MSC_PROTOCOL_CBI_NO_INTERRUPT = 1 , ///< Control/Bulk/Interrupt protocol (without command completion interrupt) - MSC_PROTOCOL_BOT = 0x50 ///< Bulk-Only Transport -}msc_protocol_type_t; +typedef enum { + MSC_PROTOCOL_CBI = 0, ///< Control/Bulk/Interrupt protocol (with command completion interrupt) + MSC_PROTOCOL_CBI_NO_INTERRUPT = + 1, ///< Control/Bulk/Interrupt protocol (without command completion interrupt) + MSC_PROTOCOL_BOT = 0x50 ///< Bulk-Only Transport +} msc_protocol_type_t; /// MassStorage Class-Specific Control Request -typedef enum -{ - MSC_REQ_GET_MAX_LUN = 254, ///< The Get Max LUN device request is used to determine the number of logical units supported by the device. Logical Unit Numbers on the device shall be numbered contiguously starting from LUN 0 to a maximum LUN of 15 - MSC_REQ_RESET = 255 ///< This request is used to reset the mass storage device and its associated interface. This class-specific request shall ready the device for the next CBW from the host. -}msc_request_type_t; +typedef enum { + MSC_REQ_GET_MAX_LUN = + 254, ///< The Get Max LUN device request is used to determine the number of logical units supported by the device. Logical Unit Numbers on the device shall be numbered contiguously starting from LUN 0 to a maximum LUN of 15 + MSC_REQ_RESET = + 255 ///< This request is used to reset the mass storage device and its associated interface. This class-specific request shall ready the device for the next CBW from the host. +} msc_request_type_t; /// \brief Command Block Status Values /// \details Indicates the success or failure of the command. The device shall set this byte to zero if the command completed /// successfully. A non-zero value shall indicate a failure during command execution according to the following -typedef enum -{ - MSC_CSW_STATUS_PASSED = 0 , ///< MSC_CSW_STATUS_PASSED - MSC_CSW_STATUS_FAILED , ///< MSC_CSW_STATUS_FAILED - MSC_CSW_STATUS_PHASE_ERROR ///< MSC_CSW_STATUS_PHASE_ERROR -}msc_csw_status_t; +typedef enum { + MSC_CSW_STATUS_PASSED = 0, ///< MSC_CSW_STATUS_PASSED + MSC_CSW_STATUS_FAILED, ///< MSC_CSW_STATUS_FAILED + MSC_CSW_STATUS_PHASE_ERROR ///< MSC_CSW_STATUS_PHASE_ERROR +} msc_csw_status_t; /// Command Block Wrapper -typedef struct TU_ATTR_PACKED -{ - uint32_t signature; ///< Signature that helps identify this data packet as a CBW. The signature field shall contain the value 43425355h (little endian), indicating a CBW. - uint32_t tag; ///< Tag sent by the host. The device shall echo the contents of this field back to the host in the dCSWTagfield of the associated CSW. The dCSWTagpositively associates a CSW with the corresponding CBW. - uint32_t total_bytes; ///< The number of bytes of data that the host expects to transfer on the Bulk-In or Bulk-Out endpoint (as indicated by the Direction bit) during the execution of this command. If this field is zero, the device and the host shall transfer no data between the CBW and the associated CSW, and the device shall ignore the value of the Direction bit in bmCBWFlags. - uint8_t dir; ///< Bit 7 of this field define transfer direction \n - 0 : Data-Out from host to the device. \n - 1 : Data-In from the device to the host. - uint8_t lun; ///< The device Logical Unit Number (LUN) to which the command block is being sent. For devices that support multiple LUNs, the host shall place into this field the LUN to which this command block is addressed. Otherwise, the host shall set this field to zero. - uint8_t cmd_len; ///< The valid length of the CBWCBin bytes. This defines the valid length of the command block. The only legal values are 1 through 16 - uint8_t command[16]; ///< The command block to be executed by the device. The device shall interpret the first cmd_len bytes in this field as a command block -}msc_cbw_t; +typedef struct TU_ATTR_PACKED { + uint32_t + signature; ///< Signature that helps identify this data packet as a CBW. The signature field shall contain the value 43425355h (little endian), indicating a CBW. + uint32_t + tag; ///< Tag sent by the host. The device shall echo the contents of this field back to the host in the dCSWTagfield of the associated CSW. The dCSWTagpositively associates a CSW with the corresponding CBW. + uint32_t + total_bytes; ///< The number of bytes of data that the host expects to transfer on the Bulk-In or Bulk-Out endpoint (as indicated by the Direction bit) during the execution of this command. If this field is zero, the device and the host shall transfer no data between the CBW and the associated CSW, and the device shall ignore the value of the Direction bit in bmCBWFlags. + uint8_t + dir; ///< Bit 7 of this field define transfer direction \n - 0 : Data-Out from host to the device. \n - 1 : Data-In from the device to the host. + uint8_t + lun; ///< The device Logical Unit Number (LUN) to which the command block is being sent. For devices that support multiple LUNs, the host shall place into this field the LUN to which this command block is addressed. Otherwise, the host shall set this field to zero. + uint8_t + cmd_len; ///< The valid length of the CBWCBin bytes. This defines the valid length of the command block. The only legal values are 1 through 16 + uint8_t command + [16]; ///< The command block to be executed by the device. The device shall interpret the first cmd_len bytes in this field as a command block +} msc_cbw_t; TU_VERIFY_STATIC(sizeof(msc_cbw_t) == 31, "size is not correct"); /// Command Status Wrapper -typedef struct TU_ATTR_PACKED -{ - uint32_t signature ; ///< Signature that helps identify this data packet as a CSW. The signature field shall contain the value 53425355h (little endian), indicating CSW. - uint32_t tag ; ///< The device shall set this field to the value received in the dCBWTag of the associated CBW. - uint32_t data_residue ; ///< For Data-Out the device shall report in the dCSWDataResidue the difference between the amount of data expected as stated in the dCBWDataTransferLength, and the actual amount of data processed by the device. For Data-In the device shall report in the dCSWDataResiduethe difference between the amount of data expected as stated in the dCBWDataTransferLengthand the actual amount of relevant data sent by the device - uint8_t status ; ///< indicates the success or failure of the command. Values from \ref msc_csw_status_t -}msc_csw_t; +typedef struct TU_ATTR_PACKED { + uint32_t + signature; ///< Signature that helps identify this data packet as a CSW. The signature field shall contain the value 53425355h (little endian), indicating CSW. + uint32_t + tag; ///< The device shall set this field to the value received in the dCBWTag of the associated CBW. + uint32_t + data_residue; ///< For Data-Out the device shall report in the dCSWDataResidue the difference between the amount of data expected as stated in the dCBWDataTransferLength, and the actual amount of data processed by the device. For Data-In the device shall report in the dCSWDataResiduethe difference between the amount of data expected as stated in the dCBWDataTransferLengthand the actual amount of relevant data sent by the device + uint8_t + status; ///< indicates the success or failure of the command. Values from \ref msc_csw_status_t +} msc_csw_t; TU_VERIFY_STATIC(sizeof(msc_csw_t) == 13, "size is not correct"); @@ -108,232 +116,242 @@ TU_VERIFY_STATIC(sizeof(msc_csw_t) == 13, "size is not correct"); //--------------------------------------------------------------------+ /// SCSI Command Operation Code -typedef enum -{ - SCSI_CMD_TEST_UNIT_READY = 0x00, ///< The SCSI Test Unit Ready command is used to determine if a device is ready to transfer data (read/write), i.e. if a disk has spun up, if a tape is loaded and ready etc. The device does not perform a self-test operation. - SCSI_CMD_INQUIRY = 0x12, ///< The SCSI Inquiry command is used to obtain basic information from a target device. - SCSI_CMD_MODE_SELECT_6 = 0x15, ///< provides a means for the application client to specify medium, logical unit, or peripheral device parameters to the device server. Device servers that implement the MODE SELECT(6) command shall also implement the MODE SENSE(6) command. Application clients should issue MODE SENSE(6) prior to each MODE SELECT(6) to determine supported mode pages, page lengths, and other parameters. - SCSI_CMD_MODE_SENSE_6 = 0x1A, ///< provides a means for a device server to report parameters to an application client. It is a complementary command to the MODE SELECT(6) command. Device servers that implement the MODE SENSE(6) command shall also implement the MODE SELECT(6) command. - SCSI_CMD_START_STOP_UNIT = 0x1B, - SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL = 0x1E, - SCSI_CMD_READ_CAPACITY_10 = 0x25, ///< The SCSI Read Capacity command is used to obtain data capacity information from a target device. - SCSI_CMD_REQUEST_SENSE = 0x03, ///< The SCSI Request Sense command is part of the SCSI computer protocol standard. This command is used to obtain sense data -- status/error information -- from a target device. - SCSI_CMD_READ_FORMAT_CAPACITY = 0x23, ///< The command allows the Host to request a list of the possible format capacities for an installed writable media. This command also has the capability to report the writable capacity for a media when it is installed - SCSI_CMD_READ_10 = 0x28, ///< The READ (10) command requests that the device server read the specified logical block(s) and transfer them to the data-in buffer. - SCSI_CMD_WRITE_10 = 0x2A, ///< The WRITE (10) command requests that the device server transfer the specified logical block(s) from the data-out buffer and write them. -}scsi_cmd_type_t; +typedef enum { + SCSI_CMD_TEST_UNIT_READY = + 0x00, ///< The SCSI Test Unit Ready command is used to determine if a device is ready to transfer data (read/write), i.e. if a disk has spun up, if a tape is loaded and ready etc. The device does not perform a self-test operation. + SCSI_CMD_INQUIRY = + 0x12, ///< The SCSI Inquiry command is used to obtain basic information from a target device. + SCSI_CMD_MODE_SELECT_6 = + 0x15, ///< provides a means for the application client to specify medium, logical unit, or peripheral device parameters to the device server. Device servers that implement the MODE SELECT(6) command shall also implement the MODE SENSE(6) command. Application clients should issue MODE SENSE(6) prior to each MODE SELECT(6) to determine supported mode pages, page lengths, and other parameters. + SCSI_CMD_MODE_SENSE_6 = + 0x1A, ///< provides a means for a device server to report parameters to an application client. It is a complementary command to the MODE SELECT(6) command. Device servers that implement the MODE SENSE(6) command shall also implement the MODE SELECT(6) command. + SCSI_CMD_START_STOP_UNIT = 0x1B, + SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL = 0x1E, + SCSI_CMD_READ_CAPACITY_10 = + 0x25, ///< The SCSI Read Capacity command is used to obtain data capacity information from a target device. + SCSI_CMD_REQUEST_SENSE = + 0x03, ///< The SCSI Request Sense command is part of the SCSI computer protocol standard. This command is used to obtain sense data -- status/error information -- from a target device. + SCSI_CMD_READ_FORMAT_CAPACITY = + 0x23, ///< The command allows the Host to request a list of the possible format capacities for an installed writable media. This command also has the capability to report the writable capacity for a media when it is installed + SCSI_CMD_READ_10 = + 0x28, ///< The READ (10) command requests that the device server read the specified logical block(s) and transfer them to the data-in buffer. + SCSI_CMD_WRITE_10 = + 0x2A, ///< The WRITE (10) command requests that the device server transfer the specified logical block(s) from the data-out buffer and write them. +} scsi_cmd_type_t; /// SCSI Sense Key -typedef enum -{ - SCSI_SENSE_NONE = 0x00, ///< no specific Sense Key. This would be the case for a successful command - SCSI_SENSE_RECOVERED_ERROR = 0x01, ///< Indicates the last command completed successfully with some recovery action performed by the disc drive. - SCSI_SENSE_NOT_READY = 0x02, ///< Indicates the logical unit addressed cannot be accessed. - SCSI_SENSE_MEDIUM_ERROR = 0x03, ///< Indicates the command terminated with a non-recovered error condition. - SCSI_SENSE_HARDWARE_ERROR = 0x04, ///< Indicates the disc drive detected a nonrecoverable hardware failure while performing the command or during a self test. - SCSI_SENSE_ILLEGAL_REQUEST = 0x05, ///< Indicates an illegal parameter in the command descriptor block or in the additional parameters - SCSI_SENSE_UNIT_ATTENTION = 0x06, ///< Indicates the disc drive may have been reset. - SCSI_SENSE_DATA_PROTECT = 0x07, ///< Indicates that a command that reads or writes the medium was attempted on a block that is protected from this operation. The read or write operation is not performed. - SCSI_SENSE_FIRMWARE_ERROR = 0x08, ///< Vendor specific sense key. - SCSI_SENSE_ABORTED_COMMAND = 0x0b, ///< Indicates the disc drive aborted the command. - SCSI_SENSE_EQUAL = 0x0c, ///< Indicates a SEARCH DATA command has satisfied an equal comparison. - SCSI_SENSE_VOLUME_OVERFLOW = 0x0d, ///< Indicates a buffered peripheral device has reached the end of medium partition and data remains in the buffer that has not been written to the medium. - SCSI_SENSE_MISCOMPARE = 0x0e ///< Indicates that the source data did not match the data read from the medium. -}scsi_sense_key_type_t; +typedef enum { + SCSI_SENSE_NONE = + 0x00, ///< no specific Sense Key. This would be the case for a successful command + SCSI_SENSE_RECOVERED_ERROR = + 0x01, ///< Indicates the last command completed successfully with some recovery action performed by the disc drive. + SCSI_SENSE_NOT_READY = 0x02, ///< Indicates the logical unit addressed cannot be accessed. + SCSI_SENSE_MEDIUM_ERROR = + 0x03, ///< Indicates the command terminated with a non-recovered error condition. + SCSI_SENSE_HARDWARE_ERROR = + 0x04, ///< Indicates the disc drive detected a nonrecoverable hardware failure while performing the command or during a self test. + SCSI_SENSE_ILLEGAL_REQUEST = + 0x05, ///< Indicates an illegal parameter in the command descriptor block or in the additional parameters + SCSI_SENSE_UNIT_ATTENTION = 0x06, ///< Indicates the disc drive may have been reset. + SCSI_SENSE_DATA_PROTECT = + 0x07, ///< Indicates that a command that reads or writes the medium was attempted on a block that is protected from this operation. The read or write operation is not performed. + SCSI_SENSE_FIRMWARE_ERROR = 0x08, ///< Vendor specific sense key. + SCSI_SENSE_ABORTED_COMMAND = 0x0b, ///< Indicates the disc drive aborted the command. + SCSI_SENSE_EQUAL = 0x0c, ///< Indicates a SEARCH DATA command has satisfied an equal comparison. + SCSI_SENSE_VOLUME_OVERFLOW = + 0x0d, ///< Indicates a buffered peripheral device has reached the end of medium partition and data remains in the buffer that has not been written to the medium. + SCSI_SENSE_MISCOMPARE = + 0x0e ///< Indicates that the source data did not match the data read from the medium. +} scsi_sense_key_type_t; //--------------------------------------------------------------------+ // SCSI Primary Command (SPC-4) //--------------------------------------------------------------------+ /// SCSI Test Unit Ready Command -typedef struct TU_ATTR_PACKED -{ - uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_TEST_UNIT_READY - uint8_t lun ; ///< Logical Unit - uint8_t reserved[3] ; - uint8_t control ; +typedef struct TU_ATTR_PACKED { + uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_TEST_UNIT_READY + uint8_t lun; ///< Logical Unit + uint8_t reserved[3]; + uint8_t control; } scsi_test_unit_ready_t; TU_VERIFY_STATIC(sizeof(scsi_test_unit_ready_t) == 6, "size is not correct"); /// SCSI Inquiry Command -typedef struct TU_ATTR_PACKED -{ - uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_INQUIRY - uint8_t reserved1 ; - uint8_t page_code ; - uint8_t reserved2 ; - uint8_t alloc_length ; ///< specifies the maximum number of bytes that USB host has allocated in the Data-In Buffer. An allocation length of zero specifies that no data shall be transferred. - uint8_t control ; +typedef struct TU_ATTR_PACKED { + uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_INQUIRY + uint8_t reserved1; + uint8_t page_code; + uint8_t reserved2; + uint8_t + alloc_length; ///< specifies the maximum number of bytes that USB host has allocated in the Data-In Buffer. An allocation length of zero specifies that no data shall be transferred. + uint8_t control; } scsi_inquiry_t, scsi_request_sense_t; TU_VERIFY_STATIC(sizeof(scsi_inquiry_t) == 6, "size is not correct"); /// SCSI Inquiry Response Data -typedef struct TU_ATTR_PACKED -{ - uint8_t peripheral_device_type : 5; - uint8_t peripheral_qualifier : 3; - - uint8_t : 7; - uint8_t is_removable : 1; - - uint8_t version; - - uint8_t response_data_format : 4; - uint8_t hierarchical_support : 1; - uint8_t normal_aca : 1; - uint8_t : 2; - - uint8_t additional_length; - - uint8_t protect : 1; - uint8_t : 2; - uint8_t third_party_copy : 1; - uint8_t target_port_group_support : 2; - uint8_t access_control_coordinator : 1; - uint8_t scc_support : 1; - - uint8_t addr16 : 1; - uint8_t : 3; - uint8_t multi_port : 1; - uint8_t : 1; // vendor specific - uint8_t enclosure_service : 1; - uint8_t : 1; - - uint8_t : 1; // vendor specific - uint8_t cmd_que : 1; - uint8_t : 2; - uint8_t sync : 1; - uint8_t wbus16 : 1; - uint8_t : 2; - - uint8_t vendor_id[8] ; ///< 8 bytes of ASCII data identifying the vendor of the product. - uint8_t product_id[16]; ///< 16 bytes of ASCII data defined by the vendor. - uint8_t product_rev[4]; ///< 4 bytes of ASCII data defined by the vendor. +typedef struct TU_ATTR_PACKED { + uint8_t peripheral_device_type : 5; + uint8_t peripheral_qualifier : 3; + + uint8_t : 7; + uint8_t is_removable : 1; + + uint8_t version; + + uint8_t response_data_format : 4; + uint8_t hierarchical_support : 1; + uint8_t normal_aca : 1; + uint8_t : 2; + + uint8_t additional_length; + + uint8_t protect : 1; + uint8_t : 2; + uint8_t third_party_copy : 1; + uint8_t target_port_group_support : 2; + uint8_t access_control_coordinator : 1; + uint8_t scc_support : 1; + + uint8_t addr16 : 1; + uint8_t : 3; + uint8_t multi_port : 1; + uint8_t : 1; // vendor specific + uint8_t enclosure_service : 1; + uint8_t : 1; + + uint8_t : 1; // vendor specific + uint8_t cmd_que : 1; + uint8_t : 2; + uint8_t sync : 1; + uint8_t wbus16 : 1; + uint8_t : 2; + + uint8_t vendor_id[8]; ///< 8 bytes of ASCII data identifying the vendor of the product. + uint8_t product_id[16]; ///< 16 bytes of ASCII data defined by the vendor. + uint8_t product_rev[4]; ///< 4 bytes of ASCII data defined by the vendor. } scsi_inquiry_resp_t; TU_VERIFY_STATIC(sizeof(scsi_inquiry_resp_t) == 36, "size is not correct"); +typedef struct TU_ATTR_PACKED { + uint8_t + response_code : 7; ///< 70h - current errors, Fixed Format 71h - deferred errors, Fixed Format + uint8_t valid : 1; -typedef struct TU_ATTR_PACKED -{ - uint8_t response_code : 7; ///< 70h - current errors, Fixed Format 71h - deferred errors, Fixed Format - uint8_t valid : 1; + uint8_t reserved; - uint8_t reserved; + uint8_t sense_key : 4; + uint8_t : 1; + uint8_t ili : 1; ///< Incorrect length indicator + uint8_t end_of_medium : 1; + uint8_t filemark : 1; - uint8_t sense_key : 4; - uint8_t : 1; - uint8_t ili : 1; ///< Incorrect length indicator - uint8_t end_of_medium : 1; - uint8_t filemark : 1; + uint32_t information; + uint8_t add_sense_len; + uint32_t command_specific_info; + uint8_t add_sense_code; + uint8_t add_sense_qualifier; + uint8_t field_replaceable_unit_code; - uint32_t information; - uint8_t add_sense_len; - uint32_t command_specific_info; - uint8_t add_sense_code; - uint8_t add_sense_qualifier; - uint8_t field_replaceable_unit_code; - - uint8_t sense_key_specific[3]; ///< sense key specific valid bit is bit 7 of key[0], aka MSB in Big Endian layout + uint8_t sense_key_specific + [3]; ///< sense key specific valid bit is bit 7 of key[0], aka MSB in Big Endian layout } scsi_sense_fixed_resp_t; TU_VERIFY_STATIC(sizeof(scsi_sense_fixed_resp_t) == 18, "size is not correct"); -typedef struct TU_ATTR_PACKED -{ - uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_MODE_SENSE_6 +typedef struct TU_ATTR_PACKED { + uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_MODE_SENSE_6 - uint8_t : 3; - uint8_t disable_block_descriptor : 1; - uint8_t : 4; + uint8_t : 3; + uint8_t disable_block_descriptor : 1; + uint8_t : 4; - uint8_t page_code : 6; - uint8_t page_control : 2; + uint8_t page_code : 6; + uint8_t page_control : 2; - uint8_t subpage_code; - uint8_t alloc_length; - uint8_t control; + uint8_t subpage_code; + uint8_t alloc_length; + uint8_t control; } scsi_mode_sense6_t; -TU_VERIFY_STATIC( sizeof(scsi_mode_sense6_t) == 6, "size is not correct"); +TU_VERIFY_STATIC(sizeof(scsi_mode_sense6_t) == 6, "size is not correct"); // This is only a Mode parameter header(6). -typedef struct TU_ATTR_PACKED -{ - uint8_t data_len; - uint8_t medium_type; +typedef struct TU_ATTR_PACKED { + uint8_t data_len; + uint8_t medium_type; - uint8_t reserved : 7; - bool write_protected : 1; + uint8_t reserved : 7; + bool write_protected : 1; - uint8_t block_descriptor_len; + uint8_t block_descriptor_len; } scsi_mode_sense6_resp_t; -TU_VERIFY_STATIC( sizeof(scsi_mode_sense6_resp_t) == 4, "size is not correct"); +TU_VERIFY_STATIC(sizeof(scsi_mode_sense6_resp_t) == 4, "size is not correct"); -typedef struct TU_ATTR_PACKED -{ - uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL - uint8_t reserved[3]; - uint8_t prohibit_removal; - uint8_t control; +typedef struct TU_ATTR_PACKED { + uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL + uint8_t reserved[3]; + uint8_t prohibit_removal; + uint8_t control; } scsi_prevent_allow_medium_removal_t; -TU_VERIFY_STATIC( sizeof(scsi_prevent_allow_medium_removal_t) == 6, "size is not correct"); +TU_VERIFY_STATIC(sizeof(scsi_prevent_allow_medium_removal_t) == 6, "size is not correct"); -typedef struct TU_ATTR_PACKED -{ - uint8_t cmd_code; +typedef struct TU_ATTR_PACKED { + uint8_t cmd_code; - uint8_t immded : 1; - uint8_t : 7; + uint8_t immded : 1; + uint8_t : 7; - uint8_t TU_RESERVED; + uint8_t TU_RESERVED; - uint8_t power_condition_mod : 4; - uint8_t : 4; + uint8_t power_condition_mod : 4; + uint8_t : 4; - uint8_t start : 1; - uint8_t load_eject : 1; - uint8_t no_flush : 1; - uint8_t : 1; - uint8_t power_condition : 4; + uint8_t start : 1; + uint8_t load_eject : 1; + uint8_t no_flush : 1; + uint8_t : 1; + uint8_t power_condition : 4; - uint8_t control; + uint8_t control; } scsi_start_stop_unit_t; -TU_VERIFY_STATIC( sizeof(scsi_start_stop_unit_t) == 6, "size is not correct"); +TU_VERIFY_STATIC(sizeof(scsi_start_stop_unit_t) == 6, "size is not correct"); //--------------------------------------------------------------------+ // SCSI MMC //--------------------------------------------------------------------+ /// SCSI Read Format Capacity: Write Capacity -typedef struct TU_ATTR_PACKED -{ - uint8_t cmd_code; - uint8_t reserved[6]; - uint16_t alloc_length; - uint8_t control; +typedef struct TU_ATTR_PACKED { + uint8_t cmd_code; + uint8_t reserved[6]; + uint16_t alloc_length; + uint8_t control; } scsi_read_format_capacity_t; -TU_VERIFY_STATIC( sizeof(scsi_read_format_capacity_t) == 10, "size is not correct"); +TU_VERIFY_STATIC(sizeof(scsi_read_format_capacity_t) == 10, "size is not correct"); -typedef struct TU_ATTR_PACKED{ - uint8_t reserved[3]; - uint8_t list_length; /// must be 8*n, length in bytes of formattable capacity descriptor followed it. +typedef struct TU_ATTR_PACKED { + uint8_t reserved[3]; + uint8_t + list_length; /// must be 8*n, length in bytes of formattable capacity descriptor followed it. - uint32_t block_num; /// Number of Logical Blocks - uint8_t descriptor_type; // 00: reserved, 01 unformatted media , 10 Formatted media, 11 No media present + uint32_t block_num; /// Number of Logical Blocks + uint8_t + descriptor_type; // 00: reserved, 01 unformatted media , 10 Formatted media, 11 No media present - uint8_t reserved2; - uint16_t block_size_u16; + uint8_t reserved2; + uint16_t block_size_u16; } scsi_read_format_capacity_data_t; -TU_VERIFY_STATIC( sizeof(scsi_read_format_capacity_data_t) == 12, "size is not correct"); +TU_VERIFY_STATIC(sizeof(scsi_read_format_capacity_data_t) == 12, "size is not correct"); //--------------------------------------------------------------------+ // SCSI Block Command (SBC-3) @@ -341,42 +359,40 @@ TU_VERIFY_STATIC( sizeof(scsi_read_format_capacity_data_t) == 12, "size is not c //--------------------------------------------------------------------+ /// SCSI Read Capacity 10 Command: Read Capacity -typedef struct TU_ATTR_PACKED -{ - uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_READ_CAPACITY_10 - uint8_t reserved1 ; - uint32_t lba ; ///< The first Logical Block Address (LBA) accessed by this command - uint16_t reserved2 ; - uint8_t partial_medium_indicator ; - uint8_t control ; +typedef struct TU_ATTR_PACKED { + uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_READ_CAPACITY_10 + uint8_t reserved1; + uint32_t lba; ///< The first Logical Block Address (LBA) accessed by this command + uint16_t reserved2; + uint8_t partial_medium_indicator; + uint8_t control; } scsi_read_capacity10_t; TU_VERIFY_STATIC(sizeof(scsi_read_capacity10_t) == 10, "size is not correct"); /// SCSI Read Capacity 10 Response Data typedef struct { - uint32_t last_lba ; ///< The last Logical Block Address of the device - uint32_t block_size ; ///< Block size in bytes + uint32_t last_lba; ///< The last Logical Block Address of the device + uint32_t block_size; ///< Block size in bytes } scsi_read_capacity10_resp_t; TU_VERIFY_STATIC(sizeof(scsi_read_capacity10_resp_t) == 8, "size is not correct"); /// SCSI Read 10 Command -typedef struct TU_ATTR_PACKED -{ - uint8_t cmd_code ; ///< SCSI OpCode - uint8_t reserved ; // has LUN according to wiki - uint32_t lba ; ///< The first Logical Block Address (LBA) accessed by this command - uint8_t reserved2 ; - uint16_t block_count ; ///< Number of Blocks used by this command - uint8_t control ; +typedef struct TU_ATTR_PACKED { + uint8_t cmd_code; ///< SCSI OpCode + uint8_t reserved; // has LUN according to wiki + uint32_t lba; ///< The first Logical Block Address (LBA) accessed by this command + uint8_t reserved2; + uint16_t block_count; ///< Number of Blocks used by this command + uint8_t control; } scsi_read10_t, scsi_write10_t; TU_VERIFY_STATIC(sizeof(scsi_read10_t) == 10, "size is not correct"); TU_VERIFY_STATIC(sizeof(scsi_write10_t) == 10, "size is not correct"); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_MSC_H_ */ diff --git a/Libraries/tinyusb/src/class/msc/msc_device.c b/Libraries/tinyusb/src/class/msc/msc_device.c index 447560b4dd2..d96b593be7d 100644 --- a/Libraries/tinyusb/src/class/msc/msc_device.c +++ b/Libraries/tinyusb/src/class/msc/msc_device.c @@ -28,7 +28,7 @@ #if (CFG_TUD_ENABLED && CFG_TUD_MSC) -#include "device/dcd.h" // for faking dcd_event_xfer_complete +#include "device/dcd.h" // for faking dcd_event_xfer_complete #include "device/usbd.h" #include "device/usbd_pvt.h" @@ -36,43 +36,41 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_MSC_LOG_LEVEL - #define CFG_TUD_MSC_LOG_LEVEL CFG_TUD_LOG_LEVEL +#define CFG_TUD_MSC_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_MSC_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_MSC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -enum -{ - MSC_STAGE_CMD = 0, - MSC_STAGE_DATA, - MSC_STAGE_STATUS, - MSC_STAGE_STATUS_SENT, - MSC_STAGE_NEED_RESET, +enum { + MSC_STAGE_CMD = 0, + MSC_STAGE_DATA, + MSC_STAGE_STATUS, + MSC_STAGE_STATUS_SENT, + MSC_STAGE_NEED_RESET, }; -typedef struct -{ - // TODO optimize alignment - CFG_TUSB_MEM_ALIGN msc_cbw_t cbw; - CFG_TUSB_MEM_ALIGN msc_csw_t csw; +typedef struct { + // TODO optimize alignment + CFG_TUSB_MEM_ALIGN msc_cbw_t cbw; + CFG_TUSB_MEM_ALIGN msc_csw_t csw; - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; - // Bulk Only Transfer (BOT) Protocol - uint8_t stage; - uint32_t total_len; // byte to be transferred, can be smaller than total_bytes in cbw - uint32_t xferred_len; // numbered of bytes transferred so far in the Data Stage + // Bulk Only Transfer (BOT) Protocol + uint8_t stage; + uint32_t total_len; // byte to be transferred, can be smaller than total_bytes in cbw + uint32_t xferred_len; // numbered of bytes transferred so far in the Data Stage - // Sense Response Data - uint8_t sense_key; - uint8_t add_sense_code; - uint8_t add_sense_qualifier; -}mscd_interface_t; + // Sense Response Data + uint8_t sense_key; + uint8_t add_sense_code; + uint8_t add_sense_qualifier; +} mscd_interface_t; CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static mscd_interface_t _mscd_itf; CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t _mscd_buf[CFG_TUD_MSC_EP_BUFSIZE]; @@ -80,124 +78,114 @@ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t _mscd_buf[CFG_TUD_MSC_E //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t* buffer, uint32_t bufsize); -static void proc_read10_cmd(uint8_t rhport, mscd_interface_t* p_msc); +static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t *buffer, + uint32_t bufsize); +static void proc_read10_cmd(uint8_t rhport, mscd_interface_t *p_msc); -static void proc_write10_cmd(uint8_t rhport, mscd_interface_t* p_msc); -static void proc_write10_new_data(uint8_t rhport, mscd_interface_t* p_msc, uint32_t xferred_bytes); +static void proc_write10_cmd(uint8_t rhport, mscd_interface_t *p_msc); +static void proc_write10_new_data(uint8_t rhport, mscd_interface_t *p_msc, uint32_t xferred_bytes); TU_ATTR_ALWAYS_INLINE static inline bool is_data_in(uint8_t dir) { - return tu_bit_test(dir, 7); + return tu_bit_test(dir, 7); } -static inline bool send_csw(uint8_t rhport, mscd_interface_t* p_msc) +static inline bool send_csw(uint8_t rhport, mscd_interface_t *p_msc) { - // Data residue is always = host expect - actual transferred - p_msc->csw.data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; + // Data residue is always = host expect - actual transferred + p_msc->csw.data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; - p_msc->stage = MSC_STAGE_STATUS_SENT; - return usbd_edpt_xfer(rhport, p_msc->ep_in , (uint8_t*) &p_msc->csw, sizeof(msc_csw_t)); + p_msc->stage = MSC_STAGE_STATUS_SENT; + return usbd_edpt_xfer(rhport, p_msc->ep_in, (uint8_t *)&p_msc->csw, sizeof(msc_csw_t)); } -static inline bool prepare_cbw(uint8_t rhport, mscd_interface_t* p_msc) +static inline bool prepare_cbw(uint8_t rhport, mscd_interface_t *p_msc) { - p_msc->stage = MSC_STAGE_CMD; - return usbd_edpt_xfer(rhport, p_msc->ep_out, (uint8_t*) &p_msc->cbw, sizeof(msc_cbw_t)); + p_msc->stage = MSC_STAGE_CMD; + return usbd_edpt_xfer(rhport, p_msc->ep_out, (uint8_t *)&p_msc->cbw, sizeof(msc_cbw_t)); } -static void fail_scsi_op(uint8_t rhport, mscd_interface_t* p_msc, uint8_t status) +static void fail_scsi_op(uint8_t rhport, mscd_interface_t *p_msc, uint8_t status) { - msc_cbw_t const * p_cbw = &p_msc->cbw; - msc_csw_t * p_csw = &p_msc->csw; - - p_csw->status = status; - p_csw->data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; - p_msc->stage = MSC_STAGE_STATUS; - - // failed but sense key is not set: default to Illegal Request - if ( p_msc->sense_key == 0 ) tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - - // If there is data stage and not yet complete, stall it - if ( p_cbw->total_bytes && p_csw->data_residue ) - { - if ( is_data_in(p_cbw->dir) ) - { - usbd_edpt_stall(rhport, p_msc->ep_in); - } - else - { - usbd_edpt_stall(rhport, p_msc->ep_out); + msc_cbw_t const *p_cbw = &p_msc->cbw; + msc_csw_t *p_csw = &p_msc->csw; + + p_csw->status = status; + p_csw->data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; + p_msc->stage = MSC_STAGE_STATUS; + + // failed but sense key is not set: default to Illegal Request + if (p_msc->sense_key == 0) + tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + + // If there is data stage and not yet complete, stall it + if (p_cbw->total_bytes && p_csw->data_residue) { + if (is_data_in(p_cbw->dir)) { + usbd_edpt_stall(rhport, p_msc->ep_in); + } else { + usbd_edpt_stall(rhport, p_msc->ep_out); + } } - } } static inline uint32_t rdwr10_get_lba(uint8_t const command[]) { - // use offsetof to avoid pointer to the odd/unaligned address - uint32_t const lba = tu_unaligned_read32(command + offsetof(scsi_write10_t, lba)); + // use offsetof to avoid pointer to the odd/unaligned address + uint32_t const lba = tu_unaligned_read32(command + offsetof(scsi_write10_t, lba)); - // lba is in Big Endian - return tu_ntohl(lba); + // lba is in Big Endian + return tu_ntohl(lba); } -static inline uint16_t rdwr10_get_blockcount(msc_cbw_t const* cbw) +static inline uint16_t rdwr10_get_blockcount(msc_cbw_t const *cbw) { - uint16_t const block_count = tu_unaligned_read16(cbw->command + offsetof(scsi_write10_t, block_count)); - return tu_ntohs(block_count); + uint16_t const block_count = + tu_unaligned_read16(cbw->command + offsetof(scsi_write10_t, block_count)); + return tu_ntohs(block_count); } -static inline uint16_t rdwr10_get_blocksize(msc_cbw_t const* cbw) +static inline uint16_t rdwr10_get_blocksize(msc_cbw_t const *cbw) { - // first extract block count in the command - uint16_t const block_count = rdwr10_get_blockcount(cbw); + // first extract block count in the command + uint16_t const block_count = rdwr10_get_blockcount(cbw); - // invalid block count - if (block_count == 0) return 0; + // invalid block count + if (block_count == 0) + return 0; - return (uint16_t) (cbw->total_bytes / block_count); + return (uint16_t)(cbw->total_bytes / block_count); } -uint8_t rdwr10_validate_cmd(msc_cbw_t const* cbw) +uint8_t rdwr10_validate_cmd(msc_cbw_t const *cbw) { - uint8_t status = MSC_CSW_STATUS_PASSED; - uint16_t const block_count = rdwr10_get_blockcount(cbw); - - if ( cbw->total_bytes == 0 ) - { - if ( block_count ) - { - TU_LOG_DRV(" SCSI case 2 (Hn < Di) or case 3 (Hn < Do) \r\n"); - status = MSC_CSW_STATUS_PHASE_ERROR; - }else - { - // no data transfer, only exist in complaint test suite - } - }else - { - if ( SCSI_CMD_READ_10 == cbw->command[0] && !is_data_in(cbw->dir) ) - { - TU_LOG_DRV(" SCSI case 10 (Ho <> Di)\r\n"); - status = MSC_CSW_STATUS_PHASE_ERROR; - } - else if ( SCSI_CMD_WRITE_10 == cbw->command[0] && is_data_in(cbw->dir) ) - { - TU_LOG_DRV(" SCSI case 8 (Hi <> Do)\r\n"); - status = MSC_CSW_STATUS_PHASE_ERROR; - } - else if ( 0 == block_count ) - { - TU_LOG_DRV(" SCSI case 4 Hi > Dn (READ10) or case 9 Ho > Dn (WRITE10) \r\n"); - status = MSC_CSW_STATUS_FAILED; - } - else if ( cbw->total_bytes / block_count == 0 ) - { - TU_LOG_DRV(" Computed block size = 0. SCSI case 7 Hi < Di (READ10) or case 13 Ho < Do (WRIT10)\r\n"); - status = MSC_CSW_STATUS_PHASE_ERROR; + uint8_t status = MSC_CSW_STATUS_PASSED; + uint16_t const block_count = rdwr10_get_blockcount(cbw); + + if (cbw->total_bytes == 0) { + if (block_count) { + TU_LOG_DRV(" SCSI case 2 (Hn < Di) or case 3 (Hn < Do) \r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; + } else { + // no data transfer, only exist in complaint test suite + } + } else { + if (SCSI_CMD_READ_10 == cbw->command[0] && !is_data_in(cbw->dir)) { + TU_LOG_DRV(" SCSI case 10 (Ho <> Di)\r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; + } else if (SCSI_CMD_WRITE_10 == cbw->command[0] && is_data_in(cbw->dir)) { + TU_LOG_DRV(" SCSI case 8 (Hi <> Do)\r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; + } else if (0 == block_count) { + TU_LOG_DRV(" SCSI case 4 Hi > Dn (READ10) or case 9 Ho > Dn (WRITE10) \r\n"); + status = MSC_CSW_STATUS_FAILED; + } else if (cbw->total_bytes / block_count == 0) { + TU_LOG_DRV( + " Computed block size = 0. SCSI case 7 Hi < Di (READ10) or case 13 Ho < Do (WRIT10)\r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; + } } - } - return status; + return status; } //--------------------------------------------------------------------+ @@ -205,25 +193,23 @@ uint8_t rdwr10_validate_cmd(msc_cbw_t const* cbw) //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_MSC_LOG_LEVEL -TU_ATTR_UNUSED tu_static tu_lookup_entry_t const _msc_scsi_cmd_lookup[] = -{ - { .key = SCSI_CMD_TEST_UNIT_READY , .data = "Test Unit Ready" }, - { .key = SCSI_CMD_INQUIRY , .data = "Inquiry" }, - { .key = SCSI_CMD_MODE_SELECT_6 , .data = "Mode_Select 6" }, - { .key = SCSI_CMD_MODE_SENSE_6 , .data = "Mode_Sense 6" }, - { .key = SCSI_CMD_START_STOP_UNIT , .data = "Start Stop Unit" }, - { .key = SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL , .data = "Prevent/Allow Medium Removal" }, - { .key = SCSI_CMD_READ_CAPACITY_10 , .data = "Read Capacity10" }, - { .key = SCSI_CMD_REQUEST_SENSE , .data = "Request Sense" }, - { .key = SCSI_CMD_READ_FORMAT_CAPACITY , .data = "Read Format Capacity" }, - { .key = SCSI_CMD_READ_10 , .data = "Read10" }, - { .key = SCSI_CMD_WRITE_10 , .data = "Write10" } +TU_ATTR_UNUSED tu_static tu_lookup_entry_t const _msc_scsi_cmd_lookup[] = { + { .key = SCSI_CMD_TEST_UNIT_READY, .data = "Test Unit Ready" }, + { .key = SCSI_CMD_INQUIRY, .data = "Inquiry" }, + { .key = SCSI_CMD_MODE_SELECT_6, .data = "Mode_Select 6" }, + { .key = SCSI_CMD_MODE_SENSE_6, .data = "Mode_Sense 6" }, + { .key = SCSI_CMD_START_STOP_UNIT, .data = "Start Stop Unit" }, + { .key = SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL, .data = "Prevent/Allow Medium Removal" }, + { .key = SCSI_CMD_READ_CAPACITY_10, .data = "Read Capacity10" }, + { .key = SCSI_CMD_REQUEST_SENSE, .data = "Request Sense" }, + { .key = SCSI_CMD_READ_FORMAT_CAPACITY, .data = "Read Format Capacity" }, + { .key = SCSI_CMD_READ_10, .data = "Read10" }, + { .key = SCSI_CMD_WRITE_10, .data = "Write10" } }; -TU_ATTR_UNUSED tu_static tu_lookup_table_t const _msc_scsi_cmd_table = -{ - .count = TU_ARRAY_SIZE(_msc_scsi_cmd_lookup), - .items = _msc_scsi_cmd_lookup +TU_ATTR_UNUSED tu_static tu_lookup_table_t const _msc_scsi_cmd_table = { + .count = TU_ARRAY_SIZE(_msc_scsi_cmd_lookup), + .items = _msc_scsi_cmd_lookup }; #endif @@ -231,418 +217,380 @@ TU_ATTR_UNUSED tu_static tu_lookup_table_t const _msc_scsi_cmd_table = //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ -bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, uint8_t add_sense_qualifier) +bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, + uint8_t add_sense_qualifier) { - (void) lun; + (void)lun; - _mscd_itf.sense_key = sense_key; - _mscd_itf.add_sense_code = add_sense_code; - _mscd_itf.add_sense_qualifier = add_sense_qualifier; + _mscd_itf.sense_key = sense_key; + _mscd_itf.add_sense_code = add_sense_code; + _mscd_itf.add_sense_qualifier = add_sense_qualifier; - return true; + return true; } static inline void set_sense_medium_not_present(uint8_t lun) { - // default sense is NOT READY, MEDIUM NOT PRESENT - tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3A, 0x00); + // default sense is NOT READY, MEDIUM NOT PRESENT + tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3A, 0x00); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void mscd_init(void) { - tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); +void mscd_init(void) +{ + tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); } -bool mscd_deinit(void) { - // nothing to do - return true; +bool mscd_deinit(void) +{ + // nothing to do + return true; } void mscd_reset(uint8_t rhport) { - (void) rhport; - tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); + (void)rhport; + tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); } -uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) +uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - // only support SCSI's BOT protocol - TU_VERIFY(TUSB_CLASS_MSC == itf_desc->bInterfaceClass && - MSC_SUBCLASS_SCSI == itf_desc->bInterfaceSubClass && - MSC_PROTOCOL_BOT == itf_desc->bInterfaceProtocol, 0); + // only support SCSI's BOT protocol + TU_VERIFY(TUSB_CLASS_MSC == itf_desc->bInterfaceClass && + MSC_SUBCLASS_SCSI == itf_desc->bInterfaceSubClass && + MSC_PROTOCOL_BOT == itf_desc->bInterfaceProtocol, + 0); - // msc driver length is fixed - uint16_t const drv_len = sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t); + // msc driver length is fixed + uint16_t const drv_len = sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t); - // Max length must be at least 1 interface + 2 endpoints - TU_ASSERT(max_len >= drv_len, 0); + // Max length must be at least 1 interface + 2 endpoints + TU_ASSERT(max_len >= drv_len, 0); - mscd_interface_t * p_msc = &_mscd_itf; - p_msc->itf_num = itf_desc->bInterfaceNumber; + mscd_interface_t *p_msc = &_mscd_itf; + p_msc->itf_num = itf_desc->bInterfaceNumber; - // Open endpoint pair - TU_ASSERT( usbd_open_edpt_pair(rhport, tu_desc_next(itf_desc), 2, TUSB_XFER_BULK, &p_msc->ep_out, &p_msc->ep_in), 0 ); + // Open endpoint pair + TU_ASSERT(usbd_open_edpt_pair(rhport, tu_desc_next(itf_desc), 2, TUSB_XFER_BULK, &p_msc->ep_out, + &p_msc->ep_in), + 0); - // Prepare for Command Block Wrapper - TU_ASSERT( prepare_cbw(rhport, p_msc), drv_len); + // Prepare for Command Block Wrapper + TU_ASSERT(prepare_cbw(rhport, p_msc), drv_len); - return drv_len; + return drv_len; } -static void proc_bot_reset(mscd_interface_t* p_msc) +static void proc_bot_reset(mscd_interface_t *p_msc) { - p_msc->stage = MSC_STAGE_CMD; - p_msc->total_len = 0; - p_msc->xferred_len = 0; + p_msc->stage = MSC_STAGE_CMD; + p_msc->total_len = 0; + p_msc->xferred_len = 0; - p_msc->sense_key = 0; - p_msc->add_sense_code = 0; - p_msc->add_sense_qualifier = 0; + p_msc->sense_key = 0; + p_msc->add_sense_code = 0; + p_msc->add_sense_qualifier = 0; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - // nothing to do with DATA & ACK stage - if (stage != CONTROL_STAGE_SETUP) return true; - - mscd_interface_t* p_msc = &_mscd_itf; - - // Clear Endpoint Feature (stall) for recovery - if ( TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && - TUSB_REQ_RCPT_ENDPOINT == request->bmRequestType_bit.recipient && - TUSB_REQ_CLEAR_FEATURE == request->bRequest && - TUSB_REQ_FEATURE_EDPT_HALT == request->wValue ) - { - uint8_t const ep_addr = tu_u16_low(request->wIndex); - - if ( p_msc->stage == MSC_STAGE_NEED_RESET ) - { - // reset recovery is required to recover from this stage - // Clear Stall request cannot resolve this -> continue to stall endpoint - usbd_edpt_stall(rhport, ep_addr); - } - else - { - if ( ep_addr == p_msc->ep_in ) - { - if ( p_msc->stage == MSC_STAGE_STATUS ) - { - // resume sending SCSI status if we are in this stage previously before stalled - TU_ASSERT( send_csw(rhport, p_msc) ); - } - } - else if ( ep_addr == p_msc->ep_out ) - { - if ( p_msc->stage == MSC_STAGE_CMD ) - { - // part of reset recovery (probably due to invalid CBW) -> prepare for new command - // Note: skip if already queued previously - if ( usbd_edpt_ready(rhport, p_msc->ep_out) ) - { - TU_ASSERT( prepare_cbw(rhport, p_msc) ); - } + // nothing to do with DATA & ACK stage + if (stage != CONTROL_STAGE_SETUP) + return true; + + mscd_interface_t *p_msc = &_mscd_itf; + + // Clear Endpoint Feature (stall) for recovery + if (TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && + TUSB_REQ_RCPT_ENDPOINT == request->bmRequestType_bit.recipient && + TUSB_REQ_CLEAR_FEATURE == request->bRequest && + TUSB_REQ_FEATURE_EDPT_HALT == request->wValue) { + uint8_t const ep_addr = tu_u16_low(request->wIndex); + + if (p_msc->stage == MSC_STAGE_NEED_RESET) { + // reset recovery is required to recover from this stage + // Clear Stall request cannot resolve this -> continue to stall endpoint + usbd_edpt_stall(rhport, ep_addr); + } else { + if (ep_addr == p_msc->ep_in) { + if (p_msc->stage == MSC_STAGE_STATUS) { + // resume sending SCSI status if we are in this stage previously before stalled + TU_ASSERT(send_csw(rhport, p_msc)); + } + } else if (ep_addr == p_msc->ep_out) { + if (p_msc->stage == MSC_STAGE_CMD) { + // part of reset recovery (probably due to invalid CBW) -> prepare for new command + // Note: skip if already queued previously + if (usbd_edpt_ready(rhport, p_msc->ep_out)) { + TU_ASSERT(prepare_cbw(rhport, p_msc)); + } + } + } } - } - } - return true; - } + return true; + } - // From this point only handle class request only - TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); + // From this point only handle class request only + TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - switch ( request->bRequest ) - { + switch (request->bRequest) { case MSC_REQ_RESET: - TU_LOG_DRV(" MSC BOT Reset\r\n"); - TU_VERIFY(request->wValue == 0 && request->wLength == 0); + TU_LOG_DRV(" MSC BOT Reset\r\n"); + TU_VERIFY(request->wValue == 0 && request->wLength == 0); - // driver state reset - proc_bot_reset(p_msc); + // driver state reset + proc_bot_reset(p_msc); - tud_control_status(rhport, request); - break; + tud_control_status(rhport, request); + break; - case MSC_REQ_GET_MAX_LUN: - { - TU_LOG_DRV(" MSC Get Max Lun\r\n"); - TU_VERIFY(request->wValue == 0 && request->wLength == 1); + case MSC_REQ_GET_MAX_LUN: { + TU_LOG_DRV(" MSC Get Max Lun\r\n"); + TU_VERIFY(request->wValue == 0 && request->wLength == 1); - uint8_t maxlun = 1; - if (tud_msc_get_maxlun_cb) maxlun = tud_msc_get_maxlun_cb(); - TU_VERIFY(maxlun); + uint8_t maxlun = 1; + if (tud_msc_get_maxlun_cb) + maxlun = tud_msc_get_maxlun_cb(); + TU_VERIFY(maxlun); - // MAX LUN is minus 1 by specs - maxlun--; + // MAX LUN is minus 1 by specs + maxlun--; - tud_control_xfer(rhport, request, &maxlun, 1); - } - break; + tud_control_xfer(rhport, request, &maxlun, 1); + } break; - default: return false; // stall unsupported request - } + default: + return false; // stall unsupported request + } - return true; + return true; } bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) { - (void) event; + (void)event; - mscd_interface_t* p_msc = &_mscd_itf; - msc_cbw_t const * p_cbw = &p_msc->cbw; - msc_csw_t * p_csw = &p_msc->csw; + mscd_interface_t *p_msc = &_mscd_itf; + msc_cbw_t const *p_cbw = &p_msc->cbw; + msc_csw_t *p_csw = &p_msc->csw; - switch (p_msc->stage) - { + switch (p_msc->stage) { case MSC_STAGE_CMD: - //------------- new CBW received -------------// - // Complete IN while waiting for CMD is usually Status of previous SCSI op, ignore it - if(ep_addr != p_msc->ep_out) return true; - - if ( !(xferred_bytes == sizeof(msc_cbw_t) && p_cbw->signature == MSC_CBW_SIGNATURE) ) - { - TU_LOG_DRV(" SCSI CBW is not valid\r\n"); - - // BOT 6.6.1 If CBW is not valid stall both endpoints until reset recovery - p_msc->stage = MSC_STAGE_NEED_RESET; - - // invalid CBW stall both endpoints - usbd_edpt_stall(rhport, p_msc->ep_in); - usbd_edpt_stall(rhport, p_msc->ep_out); - - return false; - } - - TU_LOG_DRV(" SCSI Command [Lun%u]: %s\r\n", p_cbw->lun, tu_lookup_find(&_msc_scsi_cmd_table, p_cbw->command[0])); - //TU_LOG_MEM(MSC_DEBUG, p_cbw, xferred_bytes, 2); - - p_csw->signature = MSC_CSW_SIGNATURE; - p_csw->tag = p_cbw->tag; - p_csw->data_residue = 0; - p_csw->status = MSC_CSW_STATUS_PASSED; - - /*------------- Parse command and prepare DATA -------------*/ - p_msc->stage = MSC_STAGE_DATA; - p_msc->total_len = p_cbw->total_bytes; - p_msc->xferred_len = 0; - - // Read10 or Write10 - if ( (SCSI_CMD_READ_10 == p_cbw->command[0]) || (SCSI_CMD_WRITE_10 == p_cbw->command[0]) ) - { - uint8_t const status = rdwr10_validate_cmd(p_cbw); - - if ( status != MSC_CSW_STATUS_PASSED) - { - fail_scsi_op(rhport, p_msc, status); - }else if ( p_cbw->total_bytes ) - { - if (SCSI_CMD_READ_10 == p_cbw->command[0]) - { - proc_read10_cmd(rhport, p_msc); - }else - { - proc_write10_cmd(rhport, p_msc); - } - }else - { - // no data transfer, only exist in complaint test suite - p_msc->stage = MSC_STAGE_STATUS; + //------------- new CBW received -------------// + // Complete IN while waiting for CMD is usually Status of previous SCSI op, ignore it + if (ep_addr != p_msc->ep_out) + return true; + + if (!(xferred_bytes == sizeof(msc_cbw_t) && p_cbw->signature == MSC_CBW_SIGNATURE)) { + TU_LOG_DRV(" SCSI CBW is not valid\r\n"); + + // BOT 6.6.1 If CBW is not valid stall both endpoints until reset recovery + p_msc->stage = MSC_STAGE_NEED_RESET; + + // invalid CBW stall both endpoints + usbd_edpt_stall(rhport, p_msc->ep_in); + usbd_edpt_stall(rhport, p_msc->ep_out); + + return false; } - } - else - { - // For other SCSI commands - // 1. OUT : queue transfer (invoke app callback after done) - // 2. IN & Zero: Process if is built-in, else Invoke app callback. Skip DATA if zero length - if ( (p_cbw->total_bytes > 0 ) && !is_data_in(p_cbw->dir) ) - { - if (p_cbw->total_bytes > sizeof(_mscd_buf)) - { - TU_LOG_DRV(" SCSI reject non READ10/WRITE10 with large data\r\n"); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - }else - { - // Didn't check for case 9 (Ho > Dn), which requires examining scsi command first - // but it is OK to just receive data then responded with failed status - TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, (uint16_t) p_msc->total_len) ); - } - }else - { - // First process if it is a built-in commands - int32_t resplen = proc_builtin_scsi(p_cbw->lun, p_cbw->command, _mscd_buf, sizeof(_mscd_buf)); - - // Invoke user callback if not built-in - if ( (resplen < 0) && (p_msc->sense_key == 0) ) - { - resplen = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, (uint16_t) p_msc->total_len); - } - - if ( resplen < 0 ) - { - // unsupported command - TU_LOG_DRV(" SCSI unsupported or failed command\r\n"); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } - else if (resplen == 0) - { - if (p_cbw->total_bytes) - { - // 6.7 The 13 Cases: case 4 (Hi > Dn) - // TU_LOG(MSC_DEBUG, " SCSI case 4 (Hi > Dn): %lu\r\n", p_cbw->total_bytes); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - }else - { - // case 1 Hn = Dn: all good - p_msc->stage = MSC_STAGE_STATUS; + + TU_LOG_DRV(" SCSI Command [Lun%u]: %s\r\n", p_cbw->lun, + tu_lookup_find(&_msc_scsi_cmd_table, p_cbw->command[0])); + //TU_LOG_MEM(MSC_DEBUG, p_cbw, xferred_bytes, 2); + + p_csw->signature = MSC_CSW_SIGNATURE; + p_csw->tag = p_cbw->tag; + p_csw->data_residue = 0; + p_csw->status = MSC_CSW_STATUS_PASSED; + + /*------------- Parse command and prepare DATA -------------*/ + p_msc->stage = MSC_STAGE_DATA; + p_msc->total_len = p_cbw->total_bytes; + p_msc->xferred_len = 0; + + // Read10 or Write10 + if ((SCSI_CMD_READ_10 == p_cbw->command[0]) || (SCSI_CMD_WRITE_10 == p_cbw->command[0])) { + uint8_t const status = rdwr10_validate_cmd(p_cbw); + + if (status != MSC_CSW_STATUS_PASSED) { + fail_scsi_op(rhport, p_msc, status); + } else if (p_cbw->total_bytes) { + if (SCSI_CMD_READ_10 == p_cbw->command[0]) { + proc_read10_cmd(rhport, p_msc); + } else { + proc_write10_cmd(rhport, p_msc); + } + } else { + // no data transfer, only exist in complaint test suite + p_msc->stage = MSC_STAGE_STATUS; } - } - else - { - if ( p_cbw->total_bytes == 0 ) - { - // 6.7 The 13 Cases: case 2 (Hn < Di) - // TU_LOG(MSC_DEBUG, " SCSI case 2 (Hn < Di): %lu\r\n", p_cbw->total_bytes); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - }else - { - // cannot return more than host expect - p_msc->total_len = tu_min32((uint32_t) resplen, p_cbw->total_bytes); - TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, (uint16_t) p_msc->total_len) ); + } else { + // For other SCSI commands + // 1. OUT : queue transfer (invoke app callback after done) + // 2. IN & Zero: Process if is built-in, else Invoke app callback. Skip DATA if zero length + if ((p_cbw->total_bytes > 0) && !is_data_in(p_cbw->dir)) { + if (p_cbw->total_bytes > sizeof(_mscd_buf)) { + TU_LOG_DRV(" SCSI reject non READ10/WRITE10 with large data\r\n"); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } else { + // Didn't check for case 9 (Ho > Dn), which requires examining scsi command first + // but it is OK to just receive data then responded with failed status + TU_ASSERT(usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, + (uint16_t)p_msc->total_len)); + } + } else { + // First process if it is a built-in commands + int32_t resplen = + proc_builtin_scsi(p_cbw->lun, p_cbw->command, _mscd_buf, sizeof(_mscd_buf)); + + // Invoke user callback if not built-in + if ((resplen < 0) && (p_msc->sense_key == 0)) { + resplen = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, + (uint16_t)p_msc->total_len); + } + + if (resplen < 0) { + // unsupported command + TU_LOG_DRV(" SCSI unsupported or failed command\r\n"); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } else if (resplen == 0) { + if (p_cbw->total_bytes) { + // 6.7 The 13 Cases: case 4 (Hi > Dn) + // TU_LOG(MSC_DEBUG, " SCSI case 4 (Hi > Dn): %lu\r\n", p_cbw->total_bytes); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } else { + // case 1 Hn = Dn: all good + p_msc->stage = MSC_STAGE_STATUS; + } + } else { + if (p_cbw->total_bytes == 0) { + // 6.7 The 13 Cases: case 2 (Hn < Di) + // TU_LOG(MSC_DEBUG, " SCSI case 2 (Hn < Di): %lu\r\n", p_cbw->total_bytes); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } else { + // cannot return more than host expect + p_msc->total_len = tu_min32((uint32_t)resplen, p_cbw->total_bytes); + TU_ASSERT(usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, + (uint16_t)p_msc->total_len)); + } + } } - } } - } - break; + break; case MSC_STAGE_DATA: - TU_LOG_DRV(" SCSI Data [Lun%u]\r\n", p_cbw->lun); - //TU_LOG_MEM(MSC_DEBUG, _mscd_buf, xferred_bytes, 2); + TU_LOG_DRV(" SCSI Data [Lun%u]\r\n", p_cbw->lun); + //TU_LOG_MEM(MSC_DEBUG, _mscd_buf, xferred_bytes, 2); - if (SCSI_CMD_READ_10 == p_cbw->command[0]) - { - p_msc->xferred_len += xferred_bytes; + if (SCSI_CMD_READ_10 == p_cbw->command[0]) { + p_msc->xferred_len += xferred_bytes; - if ( p_msc->xferred_len >= p_msc->total_len ) - { - // Data Stage is complete - p_msc->stage = MSC_STAGE_STATUS; - }else - { - proc_read10_cmd(rhport, p_msc); - } - } - else if (SCSI_CMD_WRITE_10 == p_cbw->command[0]) - { - proc_write10_new_data(rhport, p_msc, xferred_bytes); - } - else - { - p_msc->xferred_len += xferred_bytes; - - // OUT transfer, invoke callback if needed - if ( !is_data_in(p_cbw->dir) ) - { - int32_t cb_result = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, (uint16_t) p_msc->total_len); - - if ( cb_result < 0 ) - { - // unsupported command - TU_LOG_DRV(" SCSI unsupported command\r\n"); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - }else - { - // TODO haven't implement this scenario any further yet - } - } + if (p_msc->xferred_len >= p_msc->total_len) { + // Data Stage is complete + p_msc->stage = MSC_STAGE_STATUS; + } else { + proc_read10_cmd(rhport, p_msc); + } + } else if (SCSI_CMD_WRITE_10 == p_cbw->command[0]) { + proc_write10_new_data(rhport, p_msc, xferred_bytes); + } else { + p_msc->xferred_len += xferred_bytes; + + // OUT transfer, invoke callback if needed + if (!is_data_in(p_cbw->dir)) { + int32_t cb_result = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, + (uint16_t)p_msc->total_len); + + if (cb_result < 0) { + // unsupported command + TU_LOG_DRV(" SCSI unsupported command\r\n"); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } else { + // TODO haven't implement this scenario any further yet + } + } - if ( p_msc->xferred_len >= p_msc->total_len ) - { - // Data Stage is complete - p_msc->stage = MSC_STAGE_STATUS; - } - else - { - // This scenario with command that take more than one transfer is already rejected at Command stage - TU_BREAKPOINT(); + if (p_msc->xferred_len >= p_msc->total_len) { + // Data Stage is complete + p_msc->stage = MSC_STAGE_STATUS; + } else { + // This scenario with command that take more than one transfer is already rejected at Command stage + TU_BREAKPOINT(); + } } - } - break; + break; case MSC_STAGE_STATUS: - // processed immediately after this switch, supposedly to be empty - break; + // processed immediately after this switch, supposedly to be empty + break; case MSC_STAGE_STATUS_SENT: - // Wait for the Status phase to complete - if( (ep_addr == p_msc->ep_in) && (xferred_bytes == sizeof(msc_csw_t)) ) - { - TU_LOG_DRV(" SCSI Status [Lun%u] = %u\r\n", p_cbw->lun, p_csw->status); - // TU_LOG_MEM(MSC_DEBUG, p_csw, xferred_bytes, 2); - - // Invoke complete callback if defined - // Note: There is racing issue with samd51 + qspi flash testing with arduino - // if complete_cb() is invoked after queuing the status. - switch(p_cbw->command[0]) - { - case SCSI_CMD_READ_10: - if ( tud_msc_read10_complete_cb ) tud_msc_read10_complete_cb(p_cbw->lun); - break; - - case SCSI_CMD_WRITE_10: - if ( tud_msc_write10_complete_cb ) tud_msc_write10_complete_cb(p_cbw->lun); - break; - - default: - if ( tud_msc_scsi_complete_cb ) tud_msc_scsi_complete_cb(p_cbw->lun, p_cbw->command); - break; + // Wait for the Status phase to complete + if ((ep_addr == p_msc->ep_in) && (xferred_bytes == sizeof(msc_csw_t))) { + TU_LOG_DRV(" SCSI Status [Lun%u] = %u\r\n", p_cbw->lun, p_csw->status); + // TU_LOG_MEM(MSC_DEBUG, p_csw, xferred_bytes, 2); + + // Invoke complete callback if defined + // Note: There is racing issue with samd51 + qspi flash testing with arduino + // if complete_cb() is invoked after queuing the status. + switch (p_cbw->command[0]) { + case SCSI_CMD_READ_10: + if (tud_msc_read10_complete_cb) + tud_msc_read10_complete_cb(p_cbw->lun); + break; + + case SCSI_CMD_WRITE_10: + if (tud_msc_write10_complete_cb) + tud_msc_write10_complete_cb(p_cbw->lun); + break; + + default: + if (tud_msc_scsi_complete_cb) + tud_msc_scsi_complete_cb(p_cbw->lun, p_cbw->command); + break; + } + + TU_ASSERT(prepare_cbw(rhport, p_msc)); + } else { + // Any xfer ended here is consider unknown error, ignore it + TU_LOG1(" Warning expect SCSI Status but received unknown data\r\n"); } + break; - TU_ASSERT( prepare_cbw(rhport, p_msc) ); - }else - { - // Any xfer ended here is consider unknown error, ignore it - TU_LOG1(" Warning expect SCSI Status but received unknown data\r\n"); - } - break; - - default : break; - } - - if ( p_msc->stage == MSC_STAGE_STATUS ) - { - // skip status if epin is currently stalled, will do it when received Clear Stall request - if ( !usbd_edpt_stalled(rhport, p_msc->ep_in) ) - { - if ( (p_cbw->total_bytes > p_msc->xferred_len) && is_data_in(p_cbw->dir) ) - { - // 6.7 The 13 Cases: case 5 (Hi > Di): STALL before status - // TU_LOG(MSC_DEBUG, " SCSI case 5 (Hi > Di): %lu > %lu\r\n", p_cbw->total_bytes, p_msc->xferred_len); - usbd_edpt_stall(rhport, p_msc->ep_in); - }else - { - TU_ASSERT( send_csw(rhport, p_msc) ); - } + default: + break; } - #if TU_CHECK_MCU(OPT_MCU_CXD56) - // WORKAROUND: cxd56 has its own nuttx usb stack which does not forward Set/ClearFeature(Endpoint) to DCD. - // There is no way for us to know when EP is un-stall, therefore we will unconditionally un-stall here and - // hope everything will work - if ( usbd_edpt_stalled(rhport, p_msc->ep_in) ) - { - usbd_edpt_clear_stall(rhport, p_msc->ep_in); - send_csw(rhport, p_msc); + if (p_msc->stage == MSC_STAGE_STATUS) { + // skip status if epin is currently stalled, will do it when received Clear Stall request + if (!usbd_edpt_stalled(rhport, p_msc->ep_in)) { + if ((p_cbw->total_bytes > p_msc->xferred_len) && is_data_in(p_cbw->dir)) { + // 6.7 The 13 Cases: case 5 (Hi > Di): STALL before status + // TU_LOG(MSC_DEBUG, " SCSI case 5 (Hi > Di): %lu > %lu\r\n", p_cbw->total_bytes, p_msc->xferred_len); + usbd_edpt_stall(rhport, p_msc->ep_in); + } else { + TU_ASSERT(send_csw(rhport, p_msc)); + } + } + +#if TU_CHECK_MCU(OPT_MCU_CXD56) + // WORKAROUND: cxd56 has its own nuttx usb stack which does not forward Set/ClearFeature(Endpoint) to DCD. + // There is no way for us to know when EP is un-stall, therefore we will unconditionally un-stall here and + // hope everything will work + if (usbd_edpt_stalled(rhport, p_msc->ep_in)) { + usbd_edpt_clear_stall(rhport, p_msc->ep_in); + send_csw(rhport, p_msc); + } +#endif } - #endif - } - return true; + return true; } /*------------------------------------------------------------------*/ @@ -651,327 +599,294 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t // return response's length (copied to buffer). Negative if it is not an built-in command or indicate Failed status (CSW) // In case of a failed status, sense key must be set for reason of failure -static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t* buffer, uint32_t bufsize) +static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t *buffer, + uint32_t bufsize) { - (void) bufsize; // TODO refractor later - int32_t resplen; + (void)bufsize; // TODO refractor later + int32_t resplen; - mscd_interface_t* p_msc = &_mscd_itf; + mscd_interface_t *p_msc = &_mscd_itf; - switch ( scsi_cmd[0] ) - { + switch (scsi_cmd[0]) { case SCSI_CMD_TEST_UNIT_READY: - resplen = 0; - if ( !tud_msc_test_unit_ready_cb(lun) ) - { - // Failed status response - resplen = - 1; - - // set default sense if not set by callback - if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); - } - break; + resplen = 0; + if (!tud_msc_test_unit_ready_cb(lun)) { + // Failed status response + resplen = -1; + + // set default sense if not set by callback + if (p_msc->sense_key == 0) + set_sense_medium_not_present(lun); + } + break; case SCSI_CMD_START_STOP_UNIT: - resplen = 0; - - if (tud_msc_start_stop_cb) - { - scsi_start_stop_unit_t const * start_stop = (scsi_start_stop_unit_t const *) scsi_cmd; - if ( !tud_msc_start_stop_cb(lun, start_stop->power_condition, start_stop->start, start_stop->load_eject) ) - { - // Failed status response - resplen = - 1; - - // set default sense if not set by callback - if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); + resplen = 0; + + if (tud_msc_start_stop_cb) { + scsi_start_stop_unit_t const *start_stop = (scsi_start_stop_unit_t const *)scsi_cmd; + if (!tud_msc_start_stop_cb(lun, start_stop->power_condition, start_stop->start, + start_stop->load_eject)) { + // Failed status response + resplen = -1; + + // set default sense if not set by callback + if (p_msc->sense_key == 0) + set_sense_medium_not_present(lun); + } } - } - break; + break; case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: - resplen = 0; - - if (tud_msc_prevent_allow_medium_removal_cb) - { - scsi_prevent_allow_medium_removal_t const * prevent_allow = (scsi_prevent_allow_medium_removal_t const *) scsi_cmd; - if ( !tud_msc_prevent_allow_medium_removal_cb(lun, prevent_allow->prohibit_removal, prevent_allow->control) ) - { - // Failed status response - resplen = - 1; - - // set default sense if not set by callback - if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); + resplen = 0; + + if (tud_msc_prevent_allow_medium_removal_cb) { + scsi_prevent_allow_medium_removal_t const *prevent_allow = + (scsi_prevent_allow_medium_removal_t const *)scsi_cmd; + if (!tud_msc_prevent_allow_medium_removal_cb(lun, prevent_allow->prohibit_removal, + prevent_allow->control)) { + // Failed status response + resplen = -1; + + // set default sense if not set by callback + if (p_msc->sense_key == 0) + set_sense_medium_not_present(lun); + } } - } - break; + break; + case SCSI_CMD_READ_CAPACITY_10: { + uint32_t block_count; + uint32_t block_size; + uint16_t block_size_u16; - case SCSI_CMD_READ_CAPACITY_10: - { - uint32_t block_count; - uint32_t block_size; - uint16_t block_size_u16; + tud_msc_capacity_cb(lun, &block_count, &block_size_u16); + block_size = (uint32_t)block_size_u16; - tud_msc_capacity_cb(lun, &block_count, &block_size_u16); - block_size = (uint32_t) block_size_u16; + // Invalid block size/count from callback, possibly unit is not ready + // stall this request, set sense key to NOT READY + if (block_count == 0 || block_size == 0) { + resplen = -1; - // Invalid block size/count from callback, possibly unit is not ready - // stall this request, set sense key to NOT READY - if (block_count == 0 || block_size == 0) - { - resplen = -1; + // set default sense if not set by callback + if (p_msc->sense_key == 0) + set_sense_medium_not_present(lun); + } else { + scsi_read_capacity10_resp_t read_capa10; - // set default sense if not set by callback - if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); - }else - { - scsi_read_capacity10_resp_t read_capa10; + read_capa10.last_lba = tu_htonl(block_count - 1); + read_capa10.block_size = tu_htonl(block_size); - read_capa10.last_lba = tu_htonl(block_count-1); - read_capa10.block_size = tu_htonl(block_size); + resplen = sizeof(read_capa10); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_capa10, (size_t)resplen)); + } + } break; - resplen = sizeof(read_capa10); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_capa10, (size_t) resplen)); - } - } - break; - - case SCSI_CMD_READ_FORMAT_CAPACITY: - { - scsi_read_format_capacity_data_t read_fmt_capa = - { - .list_length = 8, - .block_num = 0, - .descriptor_type = 2, // formatted media - .block_size_u16 = 0 - }; - - uint32_t block_count; - uint16_t block_size; - - tud_msc_capacity_cb(lun, &block_count, &block_size); - - // Invalid block size/count from callback, possibly unit is not ready - // stall this request, set sense key to NOT READY - if (block_count == 0 || block_size == 0) - { - resplen = -1; + case SCSI_CMD_READ_FORMAT_CAPACITY: { + scsi_read_format_capacity_data_t read_fmt_capa = { .list_length = 8, + .block_num = 0, + .descriptor_type = 2, // formatted media + .block_size_u16 = 0 }; - // set default sense if not set by callback - if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); - }else - { - read_fmt_capa.block_num = tu_htonl(block_count); - read_fmt_capa.block_size_u16 = tu_htons(block_size); + uint32_t block_count; + uint16_t block_size; - resplen = sizeof(read_fmt_capa); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_fmt_capa, (size_t) resplen)); - } - } - break; - - case SCSI_CMD_INQUIRY: - { - scsi_inquiry_resp_t inquiry_rsp = - { - .is_removable = 1, - .version = 2, - .response_data_format = 2, - .additional_length = sizeof(scsi_inquiry_resp_t) - 5, - }; - - // vendor_id, product_id, product_rev is space padded string - memset(inquiry_rsp.vendor_id , ' ', sizeof(inquiry_rsp.vendor_id)); - memset(inquiry_rsp.product_id , ' ', sizeof(inquiry_rsp.product_id)); - memset(inquiry_rsp.product_rev, ' ', sizeof(inquiry_rsp.product_rev)); - - tud_msc_inquiry_cb(lun, inquiry_rsp.vendor_id, inquiry_rsp.product_id, inquiry_rsp.product_rev); - - resplen = sizeof(inquiry_rsp); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &inquiry_rsp, (size_t) resplen)); - } - break; - - case SCSI_CMD_MODE_SENSE_6: - { - scsi_mode_sense6_resp_t mode_resp = - { - .data_len = 3, - .medium_type = 0, - .write_protected = false, - .reserved = 0, - .block_descriptor_len = 0 // no block descriptor are included - }; - - bool writable = true; - if ( tud_msc_is_writable_cb ) - { - writable = tud_msc_is_writable_cb(lun); - } - - mode_resp.write_protected = !writable; - - resplen = sizeof(mode_resp); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &mode_resp, (size_t) resplen)); - } - break; - - case SCSI_CMD_REQUEST_SENSE: - { - scsi_sense_fixed_resp_t sense_rsp = - { - .response_code = 0x70, // current, fixed format - .valid = 1 - }; - - sense_rsp.add_sense_len = sizeof(scsi_sense_fixed_resp_t) - 8; - sense_rsp.sense_key = (uint8_t) (p_msc->sense_key & 0x0F); - sense_rsp.add_sense_code = p_msc->add_sense_code; - sense_rsp.add_sense_qualifier = p_msc->add_sense_qualifier; - - resplen = sizeof(sense_rsp); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &sense_rsp, (size_t) resplen)); - - // request sense callback could overwrite the sense data - if (tud_msc_request_sense_cb) - { - resplen = tud_msc_request_sense_cb(lun, buffer, (uint16_t) bufsize); - } - - // Clear sense data after copy - tud_msc_set_sense(lun, 0, 0, 0); - } - break; + tud_msc_capacity_cb(lun, &block_count, &block_size); + + // Invalid block size/count from callback, possibly unit is not ready + // stall this request, set sense key to NOT READY + if (block_count == 0 || block_size == 0) { + resplen = -1; - default: resplen = -1; break; - } + // set default sense if not set by callback + if (p_msc->sense_key == 0) + set_sense_medium_not_present(lun); + } else { + read_fmt_capa.block_num = tu_htonl(block_count); + read_fmt_capa.block_size_u16 = tu_htons(block_size); + + resplen = sizeof(read_fmt_capa); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_fmt_capa, (size_t)resplen)); + } + } break; + + case SCSI_CMD_INQUIRY: { + scsi_inquiry_resp_t inquiry_rsp = { + .is_removable = 1, + .version = 2, + .response_data_format = 2, + .additional_length = sizeof(scsi_inquiry_resp_t) - 5, + }; + + // vendor_id, product_id, product_rev is space padded string + memset(inquiry_rsp.vendor_id, ' ', sizeof(inquiry_rsp.vendor_id)); + memset(inquiry_rsp.product_id, ' ', sizeof(inquiry_rsp.product_id)); + memset(inquiry_rsp.product_rev, ' ', sizeof(inquiry_rsp.product_rev)); + + tud_msc_inquiry_cb(lun, inquiry_rsp.vendor_id, inquiry_rsp.product_id, + inquiry_rsp.product_rev); + + resplen = sizeof(inquiry_rsp); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &inquiry_rsp, (size_t)resplen)); + } break; + + case SCSI_CMD_MODE_SENSE_6: { + scsi_mode_sense6_resp_t mode_resp = { + .data_len = 3, + .medium_type = 0, + .write_protected = false, + .reserved = 0, + .block_descriptor_len = 0 // no block descriptor are included + }; + + bool writable = true; + if (tud_msc_is_writable_cb) { + writable = tud_msc_is_writable_cb(lun); + } - return resplen; + mode_resp.write_protected = !writable; + + resplen = sizeof(mode_resp); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &mode_resp, (size_t)resplen)); + } break; + + case SCSI_CMD_REQUEST_SENSE: { + scsi_sense_fixed_resp_t sense_rsp = { .response_code = 0x70, // current, fixed format + .valid = 1 }; + + sense_rsp.add_sense_len = sizeof(scsi_sense_fixed_resp_t) - 8; + sense_rsp.sense_key = (uint8_t)(p_msc->sense_key & 0x0F); + sense_rsp.add_sense_code = p_msc->add_sense_code; + sense_rsp.add_sense_qualifier = p_msc->add_sense_qualifier; + + resplen = sizeof(sense_rsp); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &sense_rsp, (size_t)resplen)); + + // request sense callback could overwrite the sense data + if (tud_msc_request_sense_cb) { + resplen = tud_msc_request_sense_cb(lun, buffer, (uint16_t)bufsize); + } + + // Clear sense data after copy + tud_msc_set_sense(lun, 0, 0, 0); + } break; + + default: + resplen = -1; + break; + } + + return resplen; } -static void proc_read10_cmd(uint8_t rhport, mscd_interface_t* p_msc) +static void proc_read10_cmd(uint8_t rhport, mscd_interface_t *p_msc) { - msc_cbw_t const * p_cbw = &p_msc->cbw; - - // block size already verified not zero - uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); - - // Adjust lba with transferred bytes - uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); - - // remaining bytes capped at class buffer - int32_t nbytes = (int32_t) tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes-p_msc->xferred_len); - - // Application can consume smaller bytes - uint32_t const offset = p_msc->xferred_len % block_sz; - nbytes = tud_msc_read10_cb(p_cbw->lun, lba, offset, _mscd_buf, (uint32_t) nbytes); - - if ( nbytes < 0 ) - { - // negative means error -> endpoint is stalled & status in CSW set to failed - TU_LOG_DRV(" tud_msc_read10_cb() return -1\r\n"); - - // set sense - set_sense_medium_not_present(p_cbw->lun); - - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } - else if ( nbytes == 0 ) - { - // zero means not ready -> simulate an transfer complete so that this driver callback will fired again - dcd_event_xfer_complete(rhport, p_msc->ep_in, 0, XFER_RESULT_SUCCESS, false); - } - else - { - TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, (uint16_t) nbytes), ); - } + msc_cbw_t const *p_cbw = &p_msc->cbw; + + // block size already verified not zero + uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); + + // Adjust lba with transferred bytes + uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); + + // remaining bytes capped at class buffer + int32_t nbytes = (int32_t)tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes - p_msc->xferred_len); + + // Application can consume smaller bytes + uint32_t const offset = p_msc->xferred_len % block_sz; + nbytes = tud_msc_read10_cb(p_cbw->lun, lba, offset, _mscd_buf, (uint32_t)nbytes); + + if (nbytes < 0) { + // negative means error -> endpoint is stalled & status in CSW set to failed + TU_LOG_DRV(" tud_msc_read10_cb() return -1\r\n"); + + // set sense + set_sense_medium_not_present(p_cbw->lun); + + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } else if (nbytes == 0) { + // zero means not ready -> simulate an transfer complete so that this driver callback will fired again + dcd_event_xfer_complete(rhport, p_msc->ep_in, 0, XFER_RESULT_SUCCESS, false); + } else { + TU_ASSERT(usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, (uint16_t)nbytes), ); + } } -static void proc_write10_cmd(uint8_t rhport, mscd_interface_t* p_msc) +static void proc_write10_cmd(uint8_t rhport, mscd_interface_t *p_msc) { - msc_cbw_t const * p_cbw = &p_msc->cbw; - bool writable = true; - - if ( tud_msc_is_writable_cb ) - { - writable = tud_msc_is_writable_cb(p_cbw->lun); - } - - if ( !writable ) - { - // Not writable, complete this SCSI op with error - // Sense = Write protected - tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_DATA_PROTECT, 0x27, 0x00); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - return; - } - - // remaining bytes capped at class buffer - uint16_t nbytes = (uint16_t) tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes-p_msc->xferred_len); - - // Write10 callback will be called later when usb transfer complete - TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, nbytes), ); + msc_cbw_t const *p_cbw = &p_msc->cbw; + bool writable = true; + + if (tud_msc_is_writable_cb) { + writable = tud_msc_is_writable_cb(p_cbw->lun); + } + + if (!writable) { + // Not writable, complete this SCSI op with error + // Sense = Write protected + tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_DATA_PROTECT, 0x27, 0x00); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + return; + } + + // remaining bytes capped at class buffer + uint16_t nbytes = + (uint16_t)tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes - p_msc->xferred_len); + + // Write10 callback will be called later when usb transfer complete + TU_ASSERT(usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, nbytes), ); } // process new data arrived from WRITE10 -static void proc_write10_new_data(uint8_t rhport, mscd_interface_t* p_msc, uint32_t xferred_bytes) +static void proc_write10_new_data(uint8_t rhport, mscd_interface_t *p_msc, uint32_t xferred_bytes) { - msc_cbw_t const * p_cbw = &p_msc->cbw; - - // block size already verified not zero - uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); - - // Adjust lba with transferred bytes - uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); - - // Invoke callback to consume new data - uint32_t const offset = p_msc->xferred_len % block_sz; - int32_t nbytes = tud_msc_write10_cb(p_cbw->lun, lba, offset, _mscd_buf, xferred_bytes); - - if ( nbytes < 0 ) - { - // negative means error -> failed this scsi op - TU_LOG_DRV(" tud_msc_write10_cb() return -1\r\n"); - - // update actual byte before failed - p_msc->xferred_len += xferred_bytes; - - // Set sense - set_sense_medium_not_present(p_cbw->lun); - - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - }else - { - // Application consume less than what we got (including zero) - if ( (uint32_t) nbytes < xferred_bytes ) - { - uint32_t const left_over = xferred_bytes - (uint32_t) nbytes; - if ( nbytes > 0 ) - { - p_msc->xferred_len += (uint16_t) nbytes; - memmove(_mscd_buf, _mscd_buf+nbytes, left_over); - } - - // simulate an transfer complete with adjusted parameters --> callback will be invoked with adjusted parameter - dcd_event_xfer_complete(rhport, p_msc->ep_out, left_over, XFER_RESULT_SUCCESS, false); - } - else - { - // Application consume all bytes in our buffer - p_msc->xferred_len += xferred_bytes; - - if ( p_msc->xferred_len >= p_msc->total_len ) - { - // Data Stage is complete - p_msc->stage = MSC_STAGE_STATUS; - }else - { - // prepare to receive more data from host - proc_write10_cmd(rhport, p_msc); - } + msc_cbw_t const *p_cbw = &p_msc->cbw; + + // block size already verified not zero + uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); + + // Adjust lba with transferred bytes + uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); + + // Invoke callback to consume new data + uint32_t const offset = p_msc->xferred_len % block_sz; + int32_t nbytes = tud_msc_write10_cb(p_cbw->lun, lba, offset, _mscd_buf, xferred_bytes); + + if (nbytes < 0) { + // negative means error -> failed this scsi op + TU_LOG_DRV(" tud_msc_write10_cb() return -1\r\n"); + + // update actual byte before failed + p_msc->xferred_len += xferred_bytes; + + // Set sense + set_sense_medium_not_present(p_cbw->lun); + + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } else { + // Application consume less than what we got (including zero) + if ((uint32_t)nbytes < xferred_bytes) { + uint32_t const left_over = xferred_bytes - (uint32_t)nbytes; + if (nbytes > 0) { + p_msc->xferred_len += (uint16_t)nbytes; + memmove(_mscd_buf, _mscd_buf + nbytes, left_over); + } + + // simulate an transfer complete with adjusted parameters --> callback will be invoked with adjusted parameter + dcd_event_xfer_complete(rhport, p_msc->ep_out, left_over, XFER_RESULT_SUCCESS, false); + } else { + // Application consume all bytes in our buffer + p_msc->xferred_len += xferred_bytes; + + if (p_msc->xferred_len >= p_msc->total_len) { + // Data Stage is complete + p_msc->stage = MSC_STAGE_STATUS; + } else { + // prepare to receive more data from host + proc_write10_cmd(rhport, p_msc); + } + } } - } } #endif diff --git a/Libraries/tinyusb/src/class/msc/msc_device.h b/Libraries/tinyusb/src/class/msc/msc_device.h index 29acd280ab5..a5015652ea2 100644 --- a/Libraries/tinyusb/src/class/msc/msc_device.h +++ b/Libraries/tinyusb/src/class/msc/msc_device.h @@ -31,7 +31,7 @@ #include "msc.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -39,13 +39,13 @@ //--------------------------------------------------------------------+ #if !defined(CFG_TUD_MSC_EP_BUFSIZE) & defined(CFG_TUD_MSC_BUFSIZE) - // TODO warn user to use new name later on - // #warning CFG_TUD_MSC_BUFSIZE is renamed to CFG_TUD_MSC_EP_BUFSIZE, please update to use the new name - #define CFG_TUD_MSC_EP_BUFSIZE CFG_TUD_MSC_BUFSIZE +// TODO warn user to use new name later on +// #warning CFG_TUD_MSC_BUFSIZE is renamed to CFG_TUD_MSC_EP_BUFSIZE, please update to use the new name +#define CFG_TUD_MSC_EP_BUFSIZE CFG_TUD_MSC_BUFSIZE #endif #ifndef CFG_TUD_MSC_EP_BUFSIZE - #error CFG_TUD_MSC_EP_BUFSIZE must be defined, value of a block size should work well, the more the better +#error CFG_TUD_MSC_EP_BUFSIZE must be defined, value of a block size should work well, the more the better #endif TU_VERIFY_STATIC(CFG_TUD_MSC_EP_BUFSIZE < UINT16_MAX, "Size is not correct"); @@ -55,7 +55,8 @@ TU_VERIFY_STATIC(CFG_TUD_MSC_EP_BUFSIZE < UINT16_MAX, "Size is not correct"); //--------------------------------------------------------------------+ // Set SCSI sense response -bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, uint8_t add_sense_qualifier); +bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, + uint8_t add_sense_qualifier); //--------------------------------------------------------------------+ // Application Callbacks (WEAK is optional) @@ -73,7 +74,8 @@ bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, u // // - read < 0 : Indicate application error e.g invalid address. This request will be STALLed // and return failed status in command status wrapper phase. -int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize); +int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, + uint32_t bufsize); // Invoked when received SCSI WRITE10 command // - Address = lba * BLOCK_SIZE + offset @@ -89,11 +91,13 @@ int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void* buf // and return failed status in command status wrapper phase. // // TODO change buffer to const uint8_t* -int32_t tud_msc_write10_cb (uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize); +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, + uint32_t bufsize); // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]); +void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], + uint8_t product_rev[4]); // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted @@ -101,7 +105,7 @@ bool tud_msc_test_unit_ready_cb(uint8_t lun); // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size); +void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size); /** * Invoked when received an SCSI command not in built-in list below. @@ -119,7 +123,7 @@ void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_siz * \retval negative Indicate error e.g unsupported command, tinyusb will \b STALL the corresponding * endpoint and return failed status in command status wrapper phase. */ -int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize); +int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize); /*------------- Optional callbacks -------------*/ @@ -129,13 +133,15 @@ TU_ATTR_WEAK uint8_t tud_msc_get_maxlun_cb(void); // Invoked when received Start Stop Unit command // - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage // - Start = 1 : active mode, if load_eject = 1 : load disk storage -TU_ATTR_WEAK bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject); +TU_ATTR_WEAK bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, + bool load_eject); //Invoked when we receive the Prevent / Allow Medium Removal command -TU_ATTR_WEAK bool tud_msc_prevent_allow_medium_removal_cb(uint8_t lun, uint8_t prohibit_removal, uint8_t control); +TU_ATTR_WEAK bool tud_msc_prevent_allow_medium_removal_cb(uint8_t lun, uint8_t prohibit_removal, + uint8_t control); // Invoked when received REQUEST_SENSE -TU_ATTR_WEAK int32_t tud_msc_request_sense_cb(uint8_t lun, void* buffer, uint16_t bufsize); +TU_ATTR_WEAK int32_t tud_msc_request_sense_cb(uint8_t lun, void *buffer, uint16_t bufsize); // Invoked when Read10 command is complete TU_ATTR_WEAK void tud_msc_read10_complete_cb(uint8_t lun); @@ -152,15 +158,15 @@ TU_ATTR_WEAK bool tud_msc_is_writable_cb(uint8_t lun); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void mscd_init (void); -bool mscd_deinit (void); -void mscd_reset (uint8_t rhport); -uint16_t mscd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool mscd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * p_request); -bool mscd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +void mscd_init(void); +bool mscd_deinit(void); +void mscd_reset(uint8_t rhport); +uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *p_request); +bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_MSC_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/msc/msc_host.c b/Libraries/tinyusb/src/class/msc/msc_host.c index ce6e7fb2d88..de128a912aa 100644 --- a/Libraries/tinyusb/src/class/msc/msc_host.c +++ b/Libraries/tinyusb/src/class/msc/msc_host.c @@ -35,232 +35,239 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUH_MSC_LOG_LEVEL - #define CFG_TUH_MSC_LOG_LEVEL CFG_TUH_LOG_LEVEL +#define CFG_TUH_MSC_LOG_LEVEL CFG_TUH_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_MSC_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_MSC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ enum { - MSC_STAGE_IDLE = 0, - MSC_STAGE_CMD, - MSC_STAGE_DATA, - MSC_STAGE_STATUS, + MSC_STAGE_IDLE = 0, + MSC_STAGE_CMD, + MSC_STAGE_DATA, + MSC_STAGE_STATUS, }; typedef struct { - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; - uint8_t max_lun; + uint8_t max_lun; - volatile bool configured; // Receive SET_CONFIGURE - volatile bool mounted; // Enumeration is complete + volatile bool configured; // Receive SET_CONFIGURE + volatile bool mounted; // Enumeration is complete - struct { - uint32_t block_size; - uint32_t block_count; - } capacity[CFG_TUH_MSC_MAXLUN]; + struct { + uint32_t block_size; + uint32_t block_count; + } capacity[CFG_TUH_MSC_MAXLUN]; - //------------- SCSI -------------// - uint8_t stage; - void* buffer; - tuh_msc_complete_cb_t complete_cb; - uintptr_t complete_arg; + //------------- SCSI -------------// + uint8_t stage; + void *buffer; + tuh_msc_complete_cb_t complete_cb; + uintptr_t complete_arg; - CFG_TUH_MEM_ALIGN msc_cbw_t cbw; - CFG_TUH_MEM_ALIGN msc_csw_t csw; + CFG_TUH_MEM_ALIGN msc_cbw_t cbw; + CFG_TUH_MEM_ALIGN msc_csw_t csw; } msch_interface_t; CFG_TUH_MEM_SECTION static msch_interface_t _msch_itf[CFG_TUH_DEVICE_MAX]; // buffer used to read scsi information when mounted // largest response data currently is inquiry TODO Inquiry is not part of enum anymore -CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN -static uint8_t _msch_buffer[sizeof(scsi_inquiry_resp_t)]; +CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN static uint8_t _msch_buffer[sizeof(scsi_inquiry_resp_t)]; // FIXME potential nul reference TU_ATTR_ALWAYS_INLINE -static inline msch_interface_t* get_itf(uint8_t dev_addr) { - return &_msch_itf[dev_addr - 1]; +static inline msch_interface_t *get_itf(uint8_t dev_addr) +{ + return &_msch_itf[dev_addr - 1]; } //--------------------------------------------------------------------+ // PUBLIC API //--------------------------------------------------------------------+ -uint8_t tuh_msc_get_maxlun(uint8_t dev_addr) { - msch_interface_t* p_msc = get_itf(dev_addr); - return p_msc->max_lun; +uint8_t tuh_msc_get_maxlun(uint8_t dev_addr) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + return p_msc->max_lun; } -uint32_t tuh_msc_get_block_count(uint8_t dev_addr, uint8_t lun) { - msch_interface_t* p_msc = get_itf(dev_addr); - return p_msc->capacity[lun].block_count; +uint32_t tuh_msc_get_block_count(uint8_t dev_addr, uint8_t lun) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + return p_msc->capacity[lun].block_count; } -uint32_t tuh_msc_get_block_size(uint8_t dev_addr, uint8_t lun) { - msch_interface_t* p_msc = get_itf(dev_addr); - return p_msc->capacity[lun].block_size; +uint32_t tuh_msc_get_block_size(uint8_t dev_addr, uint8_t lun) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + return p_msc->capacity[lun].block_size; } -bool tuh_msc_mounted(uint8_t dev_addr) { - msch_interface_t* p_msc = get_itf(dev_addr); - return p_msc->mounted; +bool tuh_msc_mounted(uint8_t dev_addr) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + return p_msc->mounted; } -bool tuh_msc_ready(uint8_t dev_addr) { - msch_interface_t* p_msc = get_itf(dev_addr); - return p_msc->mounted && !usbh_edpt_busy(dev_addr, p_msc->ep_in) && !usbh_edpt_busy(dev_addr, p_msc->ep_out); +bool tuh_msc_ready(uint8_t dev_addr) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + return p_msc->mounted && !usbh_edpt_busy(dev_addr, p_msc->ep_in) && + !usbh_edpt_busy(dev_addr, p_msc->ep_out); } //--------------------------------------------------------------------+ // PUBLIC API: SCSI COMMAND //--------------------------------------------------------------------+ -static inline void cbw_init(msc_cbw_t* cbw, uint8_t lun) { - tu_memclr(cbw, sizeof(msc_cbw_t)); - cbw->signature = MSC_CBW_SIGNATURE; - cbw->tag = 0x54555342; // TUSB - cbw->lun = lun; +static inline void cbw_init(msc_cbw_t *cbw, uint8_t lun) +{ + tu_memclr(cbw, sizeof(msc_cbw_t)); + cbw->signature = MSC_CBW_SIGNATURE; + cbw->tag = 0x54555342; // TUSB + cbw->lun = lun; } -bool tuh_msc_scsi_command(uint8_t daddr, msc_cbw_t const* cbw, void* data, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { - msch_interface_t* p_msc = get_itf(daddr); - TU_VERIFY(p_msc->configured); +bool tuh_msc_scsi_command(uint8_t daddr, msc_cbw_t const *cbw, void *data, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) +{ + msch_interface_t *p_msc = get_itf(daddr); + TU_VERIFY(p_msc->configured); - // claim endpoint - TU_VERIFY(usbh_edpt_claim(daddr, p_msc->ep_out)); + // claim endpoint + TU_VERIFY(usbh_edpt_claim(daddr, p_msc->ep_out)); - p_msc->cbw = *cbw; - p_msc->stage = MSC_STAGE_CMD; - p_msc->buffer = data; - p_msc->complete_cb = complete_cb; - p_msc->complete_arg = arg; + p_msc->cbw = *cbw; + p_msc->stage = MSC_STAGE_CMD; + p_msc->buffer = data; + p_msc->complete_cb = complete_cb; + p_msc->complete_arg = arg; - if (!usbh_edpt_xfer(daddr, p_msc->ep_out, (uint8_t*) &p_msc->cbw, sizeof(msc_cbw_t))) { - usbh_edpt_release(daddr, p_msc->ep_out); - return false; - } + if (!usbh_edpt_xfer(daddr, p_msc->ep_out, (uint8_t *)&p_msc->cbw, sizeof(msc_cbw_t))) { + usbh_edpt_release(daddr, p_msc->ep_out); + return false; + } - return true; + return true; } -bool tuh_msc_read_capacity(uint8_t dev_addr, uint8_t lun, scsi_read_capacity10_resp_t* response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { - msch_interface_t* p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->configured); +bool tuh_msc_read_capacity(uint8_t dev_addr, uint8_t lun, scsi_read_capacity10_resp_t *response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->configured); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = sizeof(scsi_read_capacity10_resp_t); - cbw.dir = TUSB_DIR_IN_MASK; - cbw.cmd_len = sizeof(scsi_read_capacity10_t); - cbw.command[0] = SCSI_CMD_READ_CAPACITY_10; + cbw.total_bytes = sizeof(scsi_read_capacity10_resp_t); + cbw.dir = TUSB_DIR_IN_MASK; + cbw.cmd_len = sizeof(scsi_read_capacity10_t); + cbw.command[0] = SCSI_CMD_READ_CAPACITY_10; - return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); } -bool tuh_msc_inquiry(uint8_t dev_addr, uint8_t lun, scsi_inquiry_resp_t* response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { - msch_interface_t* p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->mounted); +bool tuh_msc_inquiry(uint8_t dev_addr, uint8_t lun, scsi_inquiry_resp_t *response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->mounted); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = sizeof(scsi_inquiry_resp_t); - cbw.dir = TUSB_DIR_IN_MASK; - cbw.cmd_len = sizeof(scsi_inquiry_t); + cbw.total_bytes = sizeof(scsi_inquiry_resp_t); + cbw.dir = TUSB_DIR_IN_MASK; + cbw.cmd_len = sizeof(scsi_inquiry_t); - scsi_inquiry_t const cmd_inquiry = { - .cmd_code = SCSI_CMD_INQUIRY, - .alloc_length = sizeof(scsi_inquiry_resp_t) - }; - memcpy(cbw.command, &cmd_inquiry, cbw.cmd_len); + scsi_inquiry_t const cmd_inquiry = { .cmd_code = SCSI_CMD_INQUIRY, + .alloc_length = sizeof(scsi_inquiry_resp_t) }; + memcpy(cbw.command, &cmd_inquiry, cbw.cmd_len); - return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); } -bool tuh_msc_test_unit_ready(uint8_t dev_addr, uint8_t lun, tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { - msch_interface_t* p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->configured); +bool tuh_msc_test_unit_ready(uint8_t dev_addr, uint8_t lun, tuh_msc_complete_cb_t complete_cb, + uintptr_t arg) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->configured); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = 0; - cbw.dir = TUSB_DIR_OUT; - cbw.cmd_len = sizeof(scsi_test_unit_ready_t); - cbw.command[0] = SCSI_CMD_TEST_UNIT_READY; - cbw.command[1] = lun; // according to wiki TODO need verification + cbw.total_bytes = 0; + cbw.dir = TUSB_DIR_OUT; + cbw.cmd_len = sizeof(scsi_test_unit_ready_t); + cbw.command[0] = SCSI_CMD_TEST_UNIT_READY; + cbw.command[1] = lun; // according to wiki TODO need verification - return tuh_msc_scsi_command(dev_addr, &cbw, NULL, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, NULL, complete_cb, arg); } -bool tuh_msc_request_sense(uint8_t dev_addr, uint8_t lun, void* response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { - msc_cbw_t cbw; - cbw_init(&cbw, lun); +bool tuh_msc_request_sense(uint8_t dev_addr, uint8_t lun, void *response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) +{ + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = 18; // TODO sense response - cbw.dir = TUSB_DIR_IN_MASK; - cbw.cmd_len = sizeof(scsi_request_sense_t); + cbw.total_bytes = 18; // TODO sense response + cbw.dir = TUSB_DIR_IN_MASK; + cbw.cmd_len = sizeof(scsi_request_sense_t); - scsi_request_sense_t const cmd_request_sense = { - .cmd_code = SCSI_CMD_REQUEST_SENSE, - .alloc_length = 18 - }; - memcpy(cbw.command, &cmd_request_sense, cbw.cmd_len); + scsi_request_sense_t const cmd_request_sense = { .cmd_code = SCSI_CMD_REQUEST_SENSE, + .alloc_length = 18 }; + memcpy(cbw.command, &cmd_request_sense, cbw.cmd_len); - return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); } -bool tuh_msc_read10(uint8_t dev_addr, uint8_t lun, void* buffer, uint32_t lba, uint16_t block_count, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { - msch_interface_t* p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->mounted); +bool tuh_msc_read10(uint8_t dev_addr, uint8_t lun, void *buffer, uint32_t lba, uint16_t block_count, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->mounted); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = block_count * p_msc->capacity[lun].block_size; - cbw.dir = TUSB_DIR_IN_MASK; - cbw.cmd_len = sizeof(scsi_read10_t); + cbw.total_bytes = block_count * p_msc->capacity[lun].block_size; + cbw.dir = TUSB_DIR_IN_MASK; + cbw.cmd_len = sizeof(scsi_read10_t); - scsi_read10_t const cmd_read10 = { - .cmd_code = SCSI_CMD_READ_10, - .lba = tu_htonl(lba), - .block_count = tu_htons(block_count) - }; - memcpy(cbw.command, &cmd_read10, cbw.cmd_len); + scsi_read10_t const cmd_read10 = { .cmd_code = SCSI_CMD_READ_10, + .lba = tu_htonl(lba), + .block_count = tu_htons(block_count) }; + memcpy(cbw.command, &cmd_read10, cbw.cmd_len); - return tuh_msc_scsi_command(dev_addr, &cbw, buffer, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, buffer, complete_cb, arg); } -bool tuh_msc_write10(uint8_t dev_addr, uint8_t lun, void const* buffer, uint32_t lba, uint16_t block_count, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { - msch_interface_t* p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->mounted); +bool tuh_msc_write10(uint8_t dev_addr, uint8_t lun, void const *buffer, uint32_t lba, + uint16_t block_count, tuh_msc_complete_cb_t complete_cb, uintptr_t arg) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->mounted); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = block_count * p_msc->capacity[lun].block_size; - cbw.dir = TUSB_DIR_OUT; - cbw.cmd_len = sizeof(scsi_write10_t); + cbw.total_bytes = block_count * p_msc->capacity[lun].block_size; + cbw.dir = TUSB_DIR_OUT; + cbw.cmd_len = sizeof(scsi_write10_t); - scsi_write10_t const cmd_write10 = { - .cmd_code = SCSI_CMD_WRITE_10, - .lba = tu_htonl(lba), - .block_count = tu_htons(block_count) - }; - memcpy(cbw.command, &cmd_write10, cbw.cmd_len); + scsi_write10_t const cmd_write10 = { .cmd_code = SCSI_CMD_WRITE_10, + .lba = tu_htonl(lba), + .block_count = tu_htons(block_count) }; + memcpy(cbw.command, &cmd_write10, cbw.cmd_len); - return tuh_msc_scsi_command(dev_addr, &cbw, (void*) (uintptr_t) buffer, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, (void *)(uintptr_t)buffer, complete_cb, arg); } #if 0 @@ -284,220 +291,233 @@ bool tuh_msc_reset(uint8_t dev_addr) { //--------------------------------------------------------------------+ // CLASS-USBH API //--------------------------------------------------------------------+ -bool msch_init(void) { - TU_LOG_DRV("sizeof(msch_interface_t) = %u\r\n", sizeof(msch_interface_t)); - tu_memclr(_msch_itf, sizeof(_msch_itf)); - return true; +bool msch_init(void) +{ + TU_LOG_DRV("sizeof(msch_interface_t) = %u\r\n", sizeof(msch_interface_t)); + tu_memclr(_msch_itf, sizeof(_msch_itf)); + return true; } -bool msch_deinit(void) { - return true; +bool msch_deinit(void) +{ + return true; } -void msch_close(uint8_t dev_addr) { - TU_VERIFY(dev_addr <= CFG_TUH_DEVICE_MAX,); - msch_interface_t* p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->configured,); +void msch_close(uint8_t dev_addr) +{ + TU_VERIFY(dev_addr <= CFG_TUH_DEVICE_MAX, ); + msch_interface_t *p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->configured, ); - TU_LOG_DRV(" MSCh close addr = %d\r\n", dev_addr); + TU_LOG_DRV(" MSCh close addr = %d\r\n", dev_addr); - // invoke Application Callback - if (p_msc->mounted) { - if (tuh_msc_umount_cb) tuh_msc_umount_cb(dev_addr); - } + // invoke Application Callback + if (p_msc->mounted) { + if (tuh_msc_umount_cb) + tuh_msc_umount_cb(dev_addr); + } - tu_memclr(p_msc, sizeof(msch_interface_t)); + tu_memclr(p_msc, sizeof(msch_interface_t)); } -bool msch_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) { - msch_interface_t* p_msc = get_itf(dev_addr); - msc_cbw_t const * cbw = &p_msc->cbw; - msc_csw_t * csw = &p_msc->csw; +bool msch_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + msc_cbw_t const *cbw = &p_msc->cbw; + msc_csw_t *csw = &p_msc->csw; - switch (p_msc->stage) { + switch (p_msc->stage) { case MSC_STAGE_CMD: - // Must be Command Block - TU_ASSERT(ep_addr == p_msc->ep_out && event == XFER_RESULT_SUCCESS && xferred_bytes == sizeof(msc_cbw_t)); - - if (cbw->total_bytes && p_msc->buffer) { - // Data stage if any - p_msc->stage = MSC_STAGE_DATA; - uint8_t const ep_data = (cbw->dir & TUSB_DIR_IN_MASK) ? p_msc->ep_in : p_msc->ep_out; - TU_ASSERT(usbh_edpt_xfer(dev_addr, ep_data, p_msc->buffer, (uint16_t) cbw->total_bytes)); - } else { - // Status stage - p_msc->stage = MSC_STAGE_STATUS; - TU_ASSERT(usbh_edpt_xfer(dev_addr, p_msc->ep_in, (uint8_t*) &p_msc->csw, (uint16_t) sizeof(msc_csw_t))); - } - break; + // Must be Command Block + TU_ASSERT(ep_addr == p_msc->ep_out && event == XFER_RESULT_SUCCESS && + xferred_bytes == sizeof(msc_cbw_t)); + + if (cbw->total_bytes && p_msc->buffer) { + // Data stage if any + p_msc->stage = MSC_STAGE_DATA; + uint8_t const ep_data = (cbw->dir & TUSB_DIR_IN_MASK) ? p_msc->ep_in : p_msc->ep_out; + TU_ASSERT(usbh_edpt_xfer(dev_addr, ep_data, p_msc->buffer, (uint16_t)cbw->total_bytes)); + } else { + // Status stage + p_msc->stage = MSC_STAGE_STATUS; + TU_ASSERT(usbh_edpt_xfer(dev_addr, p_msc->ep_in, (uint8_t *)&p_msc->csw, + (uint16_t)sizeof(msc_csw_t))); + } + break; case MSC_STAGE_DATA: - // Status stage - p_msc->stage = MSC_STAGE_STATUS; - TU_ASSERT(usbh_edpt_xfer(dev_addr, p_msc->ep_in, (uint8_t*) &p_msc->csw, (uint16_t) sizeof(msc_csw_t))); - break; + // Status stage + p_msc->stage = MSC_STAGE_STATUS; + TU_ASSERT(usbh_edpt_xfer(dev_addr, p_msc->ep_in, (uint8_t *)&p_msc->csw, + (uint16_t)sizeof(msc_csw_t))); + break; case MSC_STAGE_STATUS: - // SCSI op is complete - p_msc->stage = MSC_STAGE_IDLE; - - if (p_msc->complete_cb) { - tuh_msc_complete_data_t const cb_data = { - .cbw = cbw, - .csw = csw, - .scsi_data = p_msc->buffer, - .user_arg = p_msc->complete_arg - }; - p_msc->complete_cb(dev_addr, &cb_data); - } - break; - - // unknown state + // SCSI op is complete + p_msc->stage = MSC_STAGE_IDLE; + + if (p_msc->complete_cb) { + tuh_msc_complete_data_t const cb_data = { + .cbw = cbw, .csw = csw, .scsi_data = p_msc->buffer, .user_arg = p_msc->complete_arg + }; + p_msc->complete_cb(dev_addr, &cb_data); + } + break; + + // unknown state default: - break; - } + break; + } - return true; + return true; } //--------------------------------------------------------------------+ // MSC Enumeration //--------------------------------------------------------------------+ -static void config_get_maxlun_complete(tuh_xfer_t* xfer); -static bool config_test_unit_ready_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data); -static bool config_request_sense_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data); -static bool config_read_capacity_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data); - -bool msch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const* desc_itf, uint16_t max_len) { - (void) rhport; - TU_VERIFY (MSC_SUBCLASS_SCSI == desc_itf->bInterfaceSubClass && - MSC_PROTOCOL_BOT == desc_itf->bInterfaceProtocol); - - // msc driver length is fixed - uint16_t const drv_len = (uint16_t) (sizeof(tusb_desc_interface_t) + - desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); - TU_ASSERT(drv_len <= max_len); - - msch_interface_t* p_msc = get_itf(dev_addr); - tusb_desc_endpoint_t const* ep_desc = (tusb_desc_endpoint_t const*) tu_desc_next(desc_itf); - - for (uint32_t i = 0; i < 2; i++) { - TU_ASSERT(TUSB_DESC_ENDPOINT == ep_desc->bDescriptorType && TUSB_XFER_BULK == ep_desc->bmAttributes.xfer); - TU_ASSERT(tuh_edpt_open(dev_addr, ep_desc)); - - if (TUSB_DIR_IN == tu_edpt_dir(ep_desc->bEndpointAddress)) { - p_msc->ep_in = ep_desc->bEndpointAddress; - } else { - p_msc->ep_out = ep_desc->bEndpointAddress; +static void config_get_maxlun_complete(tuh_xfer_t *xfer); +static bool config_test_unit_ready_complete(uint8_t dev_addr, + tuh_msc_complete_data_t const *cb_data); +static bool config_request_sense_complete(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data); +static bool config_read_capacity_complete(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data); + +bool msch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, + uint16_t max_len) +{ + (void)rhport; + TU_VERIFY(MSC_SUBCLASS_SCSI == desc_itf->bInterfaceSubClass && + MSC_PROTOCOL_BOT == desc_itf->bInterfaceProtocol); + + // msc driver length is fixed + uint16_t const drv_len = (uint16_t)(sizeof(tusb_desc_interface_t) + + desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); + TU_ASSERT(drv_len <= max_len); + + msch_interface_t *p_msc = get_itf(dev_addr); + tusb_desc_endpoint_t const *ep_desc = (tusb_desc_endpoint_t const *)tu_desc_next(desc_itf); + + for (uint32_t i = 0; i < 2; i++) { + TU_ASSERT(TUSB_DESC_ENDPOINT == ep_desc->bDescriptorType && + TUSB_XFER_BULK == ep_desc->bmAttributes.xfer); + TU_ASSERT(tuh_edpt_open(dev_addr, ep_desc)); + + if (TUSB_DIR_IN == tu_edpt_dir(ep_desc->bEndpointAddress)) { + p_msc->ep_in = ep_desc->bEndpointAddress; + } else { + p_msc->ep_out = ep_desc->bEndpointAddress; + } + + ep_desc = (tusb_desc_endpoint_t const *)tu_desc_next(ep_desc); } - ep_desc = (tusb_desc_endpoint_t const*) tu_desc_next(ep_desc); - } - - p_msc->itf_num = desc_itf->bInterfaceNumber; + p_msc->itf_num = desc_itf->bInterfaceNumber; - return true; + return true; } -bool msch_set_config(uint8_t dev_addr, uint8_t itf_num) { - msch_interface_t* p_msc = get_itf(dev_addr); - TU_ASSERT(p_msc->itf_num == itf_num); - - p_msc->configured = true; - - //------------- Get Max Lun -------------// - TU_LOG_DRV("MSC Get Max Lun\r\n"); - tusb_control_request_t const request = { - .bmRequestType_bit = { - .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_IN - }, - .bRequest = MSC_REQ_GET_MAX_LUN, - .wValue = 0, - .wIndex = itf_num, - .wLength = 1 - }; - - tuh_xfer_t xfer = { - .daddr = dev_addr, - .ep_addr = 0, - .setup = &request, - .buffer = _msch_buffer, - .complete_cb = config_get_maxlun_complete, - .user_data = 0 - }; - TU_ASSERT(tuh_control_xfer(&xfer)); - - return true; +bool msch_set_config(uint8_t dev_addr, uint8_t itf_num) +{ + msch_interface_t *p_msc = get_itf(dev_addr); + TU_ASSERT(p_msc->itf_num == itf_num); + + p_msc->configured = true; + + //------------- Get Max Lun -------------// + TU_LOG_DRV("MSC Get Max Lun\r\n"); + tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = + TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_IN }, + .bRequest = MSC_REQ_GET_MAX_LUN, + .wValue = 0, + .wIndex = itf_num, + .wLength = 1 }; + + tuh_xfer_t xfer = { .daddr = dev_addr, + .ep_addr = 0, + .setup = &request, + .buffer = _msch_buffer, + .complete_cb = config_get_maxlun_complete, + .user_data = 0 }; + TU_ASSERT(tuh_control_xfer(&xfer)); + + return true; } -static void config_get_maxlun_complete(tuh_xfer_t* xfer) { - uint8_t const daddr = xfer->daddr; - msch_interface_t* p_msc = get_itf(daddr); +static void config_get_maxlun_complete(tuh_xfer_t *xfer) +{ + uint8_t const daddr = xfer->daddr; + msch_interface_t *p_msc = get_itf(daddr); - // STALL means zero - p_msc->max_lun = (XFER_RESULT_SUCCESS == xfer->result) ? _msch_buffer[0] : 0; - p_msc->max_lun++; // MAX LUN is minus 1 by specs + // STALL means zero + p_msc->max_lun = (XFER_RESULT_SUCCESS == xfer->result) ? _msch_buffer[0] : 0; + p_msc->max_lun++; // MAX LUN is minus 1 by specs - TU_LOG_DRV(" Max LUN = %u\r\n", p_msc->max_lun); + TU_LOG_DRV(" Max LUN = %u\r\n", p_msc->max_lun); - // TODO multiple LUN support - TU_LOG_DRV("SCSI Test Unit Ready\r\n"); - uint8_t const lun = 0; - tuh_msc_test_unit_ready(daddr, lun, config_test_unit_ready_complete, 0); + // TODO multiple LUN support + TU_LOG_DRV("SCSI Test Unit Ready\r\n"); + uint8_t const lun = 0; + tuh_msc_test_unit_ready(daddr, lun, config_test_unit_ready_complete, 0); } -static bool config_test_unit_ready_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data) { - msc_cbw_t const* cbw = cb_data->cbw; - msc_csw_t const* csw = cb_data->csw; - - if (csw->status == 0) { - // Unit is ready, read its capacity - TU_LOG_DRV("SCSI Read Capacity\r\n"); - tuh_msc_read_capacity(dev_addr, cbw->lun, (scsi_read_capacity10_resp_t*) ((void*) _msch_buffer), - config_read_capacity_complete, 0); - } else { - // Note: During enumeration, some device fails Test Unit Ready and require a few retries - // with Request Sense to start working !! - // TODO limit number of retries - TU_LOG_DRV("SCSI Request Sense\r\n"); - TU_ASSERT(tuh_msc_request_sense(dev_addr, cbw->lun, _msch_buffer, config_request_sense_complete, 0)); - } - - return true; +static bool config_test_unit_ready_complete(uint8_t dev_addr, + tuh_msc_complete_data_t const *cb_data) +{ + msc_cbw_t const *cbw = cb_data->cbw; + msc_csw_t const *csw = cb_data->csw; + + if (csw->status == 0) { + // Unit is ready, read its capacity + TU_LOG_DRV("SCSI Read Capacity\r\n"); + tuh_msc_read_capacity(dev_addr, cbw->lun, + (scsi_read_capacity10_resp_t *)((void *)_msch_buffer), + config_read_capacity_complete, 0); + } else { + // Note: During enumeration, some device fails Test Unit Ready and require a few retries + // with Request Sense to start working !! + // TODO limit number of retries + TU_LOG_DRV("SCSI Request Sense\r\n"); + TU_ASSERT(tuh_msc_request_sense(dev_addr, cbw->lun, _msch_buffer, + config_request_sense_complete, 0)); + } + + return true; } -static bool config_request_sense_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data) { - msc_cbw_t const* cbw = cb_data->cbw; - msc_csw_t const* csw = cb_data->csw; +static bool config_request_sense_complete(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data) +{ + msc_cbw_t const *cbw = cb_data->cbw; + msc_csw_t const *csw = cb_data->csw; - TU_ASSERT(csw->status == 0); - TU_ASSERT(tuh_msc_test_unit_ready(dev_addr, cbw->lun, config_test_unit_ready_complete, 0)); - return true; + TU_ASSERT(csw->status == 0); + TU_ASSERT(tuh_msc_test_unit_ready(dev_addr, cbw->lun, config_test_unit_ready_complete, 0)); + return true; } -static bool config_read_capacity_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data) { - msc_cbw_t const* cbw = cb_data->cbw; - msc_csw_t const* csw = cb_data->csw; +static bool config_read_capacity_complete(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data) +{ + msc_cbw_t const *cbw = cb_data->cbw; + msc_csw_t const *csw = cb_data->csw; - TU_ASSERT(csw->status == 0); + TU_ASSERT(csw->status == 0); - msch_interface_t* p_msc = get_itf(dev_addr); + msch_interface_t *p_msc = get_itf(dev_addr); - // Capacity response field: Block size and Last LBA are both Big-Endian - scsi_read_capacity10_resp_t* resp = (scsi_read_capacity10_resp_t*) ((void*) _msch_buffer); - p_msc->capacity[cbw->lun].block_count = tu_ntohl(resp->last_lba) + 1; - p_msc->capacity[cbw->lun].block_size = tu_ntohl(resp->block_size); + // Capacity response field: Block size and Last LBA are both Big-Endian + scsi_read_capacity10_resp_t *resp = (scsi_read_capacity10_resp_t *)((void *)_msch_buffer); + p_msc->capacity[cbw->lun].block_count = tu_ntohl(resp->last_lba) + 1; + p_msc->capacity[cbw->lun].block_size = tu_ntohl(resp->block_size); - // Mark enumeration is complete - p_msc->mounted = true; - if (tuh_msc_mount_cb) tuh_msc_mount_cb(dev_addr); + // Mark enumeration is complete + p_msc->mounted = true; + if (tuh_msc_mount_cb) + tuh_msc_mount_cb(dev_addr); - // notify usbh that driver enumeration is complete - usbh_driver_set_config_complete(dev_addr, p_msc->itf_num); + // notify usbh that driver enumeration is complete + usbh_driver_set_config_complete(dev_addr, p_msc->itf_num); - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/msc/msc_host.h b/Libraries/tinyusb/src/class/msc/msc_host.h index 9fda566d83e..e09d53a4208 100644 --- a/Libraries/tinyusb/src/class/msc/msc_host.h +++ b/Libraries/tinyusb/src/class/msc/msc_host.h @@ -30,7 +30,7 @@ #include "msc.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -38,17 +38,17 @@ //--------------------------------------------------------------------+ #ifndef CFG_TUH_MSC_MAXLUN -#define CFG_TUH_MSC_MAXLUN 4 +#define CFG_TUH_MSC_MAXLUN 4 #endif typedef struct { - msc_cbw_t const* cbw; // SCSI command - msc_csw_t const* csw; // SCSI status - void* scsi_data; // SCSI Data - uintptr_t user_arg; // user argument -}tuh_msc_complete_data_t; + msc_cbw_t const *cbw; // SCSI command + msc_csw_t const *csw; // SCSI status + void *scsi_data; // SCSI Data + uintptr_t user_arg; // user argument +} tuh_msc_complete_data_t; -typedef bool (*tuh_msc_complete_cb_t)(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data); +typedef bool (*tuh_msc_complete_cb_t)(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data); //--------------------------------------------------------------------+ // Application API @@ -73,33 +73,40 @@ uint32_t tuh_msc_get_block_size(uint8_t dev_addr, uint8_t lun); // Perform a full SCSI command (cbw, data, csw) in non-blocking manner. // Complete callback is invoked when SCSI op is complete. // return true if success, false if there is already pending operation. -bool tuh_msc_scsi_command(uint8_t daddr, msc_cbw_t const* cbw, void* data, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_scsi_command(uint8_t daddr, msc_cbw_t const *cbw, void *data, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Inquiry command // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_inquiry(uint8_t dev_addr, uint8_t lun, scsi_inquiry_resp_t* response, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_inquiry(uint8_t dev_addr, uint8_t lun, scsi_inquiry_resp_t *response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Test Unit Ready command // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_test_unit_ready(uint8_t dev_addr, uint8_t lun, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_test_unit_ready(uint8_t dev_addr, uint8_t lun, tuh_msc_complete_cb_t complete_cb, + uintptr_t arg); // Perform SCSI Request Sense 10 command // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_request_sense(uint8_t dev_addr, uint8_t lun, void *response, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_request_sense(uint8_t dev_addr, uint8_t lun, void *response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Read 10 command. Read n blocks starting from LBA to buffer // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_read10(uint8_t dev_addr, uint8_t lun, void * buffer, uint32_t lba, uint16_t block_count, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_read10(uint8_t dev_addr, uint8_t lun, void *buffer, uint32_t lba, uint16_t block_count, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Write 10 command. Write n blocks starting from LBA to device // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_write10(uint8_t dev_addr, uint8_t lun, void const * buffer, uint32_t lba, uint16_t block_count, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_write10(uint8_t dev_addr, uint8_t lun, void const *buffer, uint32_t lba, + uint16_t block_count, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Read Capacity 10 command // Complete callback is invoked when SCSI op is complete. // Note: during enumeration, host stack already carried out this request. Application can retrieve capacity by // simply call tuh_msc_get_block_count() and tuh_msc_get_block_size() -bool tuh_msc_read_capacity(uint8_t dev_addr, uint8_t lun, scsi_read_capacity10_resp_t* response, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_read_capacity(uint8_t dev_addr, uint8_t lun, scsi_read_capacity10_resp_t *response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg); //------------- Application Callback -------------// @@ -113,15 +120,16 @@ TU_ATTR_WEAK void tuh_msc_umount_cb(uint8_t dev_addr); // Internal Class Driver API //--------------------------------------------------------------------+ -bool msch_init (void); -bool msch_deinit (void); -bool msch_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, uint16_t max_len); -bool msch_set_config (uint8_t dev_addr, uint8_t itf_num); -void msch_close (uint8_t dev_addr); -bool msch_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +bool msch_init(void); +bool msch_deinit(void); +bool msch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, + uint16_t max_len); +bool msch_set_config(uint8_t dev_addr, uint8_t itf_num); +void msch_close(uint8_t dev_addr); +bool msch_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/class/net/ecm_rndis_device.c b/Libraries/tinyusb/src/class/net/ecm_rndis_device.c index f7a5fd22520..b757dede063 100644 --- a/Libraries/tinyusb/src/class/net/ecm_rndis_device.c +++ b/Libraries/tinyusb/src/class/net/ecm_rndis_device.c @@ -27,7 +27,7 @@ #include "tusb_option.h" -#if ( CFG_TUD_ENABLED && CFG_TUD_ECM_RNDIS ) +#if (CFG_TUD_ENABLED && CFG_TUD_ECM_RNDIS) #include "device/usbd.h" #include "device/usbd_pvt.h" @@ -35,42 +35,41 @@ #include "net_device.h" #include "rndis_protocol.h" -void rndis_class_set_handler(uint8_t *data, int size); /* found in ./misc/networking/rndis_reports.c */ +void rndis_class_set_handler(uint8_t *data, + int size); /* found in ./misc/networking/rndis_reports.c */ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -typedef struct -{ - uint8_t itf_num; // Index number of Management Interface, +1 for Data Interface - uint8_t itf_data_alt; // Alternate setting of Data Interface. 0 : inactive, 1 : active +typedef struct { + uint8_t itf_num; // Index number of Management Interface, +1 for Data Interface + uint8_t itf_data_alt; // Alternate setting of Data Interface. 0 : inactive, 1 : active - uint8_t ep_notif; - uint8_t ep_in; - uint8_t ep_out; + uint8_t ep_notif; + uint8_t ep_in; + uint8_t ep_out; - bool ecm_mode; + bool ecm_mode; - // Endpoint descriptor use to open/close when receiving SetInterface - // TODO since configuration descriptor may not be long-lived memory, we should - // keep a copy of endpoint attribute instead - uint8_t const * ecm_desc_epdata; + // Endpoint descriptor use to open/close when receiving SetInterface + // TODO since configuration descriptor may not be long-lived memory, we should + // keep a copy of endpoint attribute instead + uint8_t const *ecm_desc_epdata; } netd_interface_t; #define CFG_TUD_NET_PACKET_PREFIX_LEN sizeof(rndis_data_packet_t) #define CFG_TUD_NET_PACKET_SUFFIX_LEN 0 -CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static -uint8_t received[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN]; +CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t + received[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN]; -CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static -uint8_t transmitted[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN]; +CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t + transmitted[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN]; -struct ecm_notify_struct -{ - tusb_control_request_t header; - uint32_t downlink, uplink; +struct ecm_notify_struct { + tusb_control_request_t header; + uint32_t downlink, uplink; }; tu_static const struct ecm_notify_struct ecm_notify_nc = @@ -95,10 +94,9 @@ tu_static const struct ecm_notify_struct ecm_notify_csc = }; // TODO remove CFG_TUD_MEM_SECTION, control internal buffer is already in this special section -CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static union -{ - uint8_t rndis_buf[120]; - struct ecm_notify_struct ecm_buf; +CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static union { + uint8_t rndis_buf[120]; + struct ecm_notify_struct ecm_buf; } notify; //--------------------------------------------------------------------+ @@ -111,343 +109,320 @@ tu_static bool can_xmit; void tud_network_recv_renew(void) { - usbd_edpt_xfer(0, _netd_itf.ep_out, received, sizeof(received)); + usbd_edpt_xfer(0, _netd_itf.ep_out, received, sizeof(received)); } static void do_in_xfer(uint8_t *buf, uint16_t len) { - can_xmit = false; - usbd_edpt_xfer(0, _netd_itf.ep_in, buf, len); + can_xmit = false; + usbd_edpt_xfer(0, _netd_itf.ep_in, buf, len); } void netd_report(uint8_t *buf, uint16_t len) { - uint8_t const rhport = 0; + uint8_t const rhport = 0; - // skip if previous report not yet acknowledged by host - if ( usbd_edpt_busy(rhport, _netd_itf.ep_notif) ) return; - usbd_edpt_xfer(rhport, _netd_itf.ep_notif, buf, len); + // skip if previous report not yet acknowledged by host + if (usbd_edpt_busy(rhport, _netd_itf.ep_notif)) + return; + usbd_edpt_xfer(rhport, _netd_itf.ep_notif, buf, len); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void netd_init(void) { - tu_memclr(&_netd_itf, sizeof(_netd_itf)); +void netd_init(void) +{ + tu_memclr(&_netd_itf, sizeof(_netd_itf)); } -bool netd_deinit(void) { - return true; +bool netd_deinit(void) +{ + return true; } void netd_reset(uint8_t rhport) { - (void) rhport; + (void)rhport; - netd_init(); + netd_init(); } -uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) +uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - bool const is_rndis = (TUD_RNDIS_ITF_CLASS == itf_desc->bInterfaceClass && - TUD_RNDIS_ITF_SUBCLASS == itf_desc->bInterfaceSubClass && - TUD_RNDIS_ITF_PROTOCOL == itf_desc->bInterfaceProtocol); - - bool const is_ecm = (TUSB_CLASS_CDC == itf_desc->bInterfaceClass && - CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL == itf_desc->bInterfaceSubClass && - 0x00 == itf_desc->bInterfaceProtocol); - - TU_VERIFY(is_rndis || is_ecm, 0); - - // confirm interface hasn't already been allocated - TU_ASSERT(0 == _netd_itf.ep_notif, 0); + bool const is_rndis = (TUD_RNDIS_ITF_CLASS == itf_desc->bInterfaceClass && + TUD_RNDIS_ITF_SUBCLASS == itf_desc->bInterfaceSubClass && + TUD_RNDIS_ITF_PROTOCOL == itf_desc->bInterfaceProtocol); - // sanity check the descriptor - _netd_itf.ecm_mode = is_ecm; + bool const is_ecm = (TUSB_CLASS_CDC == itf_desc->bInterfaceClass && + CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL == itf_desc->bInterfaceSubClass && + 0x00 == itf_desc->bInterfaceProtocol); - //------------- Management Interface -------------// - _netd_itf.itf_num = itf_desc->bInterfaceNumber; + TU_VERIFY(is_rndis || is_ecm, 0); - uint16_t drv_len = sizeof(tusb_desc_interface_t); - uint8_t const * p_desc = tu_desc_next( itf_desc ); + // confirm interface hasn't already been allocated + TU_ASSERT(0 == _netd_itf.ep_notif, 0); - // Communication Functional Descriptors - while ( TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len ) - { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + // sanity check the descriptor + _netd_itf.ecm_mode = is_ecm; - // notification endpoint (if any) - if ( TUSB_DESC_ENDPOINT == tu_desc_type(p_desc) ) - { - TU_ASSERT( usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), 0 ); + //------------- Management Interface -------------// + _netd_itf.itf_num = itf_desc->bInterfaceNumber; - _netd_itf.ep_notif = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress; + uint16_t drv_len = sizeof(tusb_desc_interface_t); + uint8_t const *p_desc = tu_desc_next(itf_desc); - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } - - //------------- Data Interface -------------// - // - RNDIS Data followed immediately by a pair of endpoints - // - CDC-ECM data interface has 2 alternate settings - // - 0 : zero endpoints for inactive (default) - // - 1 : IN & OUT endpoints for active networking - TU_ASSERT(TUSB_DESC_INTERFACE == tu_desc_type(p_desc), 0); - - do - { - tusb_desc_interface_t const * data_itf_desc = (tusb_desc_interface_t const *) p_desc; - TU_ASSERT(TUSB_CLASS_CDC_DATA == data_itf_desc->bInterfaceClass, 0); - - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - }while( _netd_itf.ecm_mode && (TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && (drv_len <= max_len) ); - - // Pair of endpoints - TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(p_desc), 0); + // Communication Functional Descriptors + while (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len) { + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - if ( _netd_itf.ecm_mode ) - { - // ECM by default is in-active, save the endpoint attribute - // to open later when received setInterface - _netd_itf.ecm_desc_epdata = p_desc; - }else - { - // Open endpoint pair for RNDIS - TU_ASSERT( usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &_netd_itf.ep_out, &_netd_itf.ep_in), 0 ); + // notification endpoint (if any) + if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { + TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *)p_desc), 0); - tud_network_init_cb(); + _netd_itf.ep_notif = ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress; - // we are ready to transmit a packet - can_xmit = true; + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - // prepare for incoming packets - tud_network_recv_renew(); - } + //------------- Data Interface -------------// + // - RNDIS Data followed immediately by a pair of endpoints + // - CDC-ECM data interface has 2 alternate settings + // - 0 : zero endpoints for inactive (default) + // - 1 : IN & OUT endpoints for active networking + TU_ASSERT(TUSB_DESC_INTERFACE == tu_desc_type(p_desc), 0); + + do { + tusb_desc_interface_t const *data_itf_desc = (tusb_desc_interface_t const *)p_desc; + TU_ASSERT(TUSB_CLASS_CDC_DATA == data_itf_desc->bInterfaceClass, 0); + + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } while (_netd_itf.ecm_mode && (TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && + (drv_len <= max_len)); + + // Pair of endpoints + TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(p_desc), 0); + + if (_netd_itf.ecm_mode) { + // ECM by default is in-active, save the endpoint attribute + // to open later when received setInterface + _netd_itf.ecm_desc_epdata = p_desc; + } else { + // Open endpoint pair for RNDIS + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &_netd_itf.ep_out, + &_netd_itf.ep_in), + 0); + + tud_network_init_cb(); + + // we are ready to transmit a packet + can_xmit = true; + + // prepare for incoming packets + tud_network_recv_renew(); + } - drv_len += 2*sizeof(tusb_desc_endpoint_t); + drv_len += 2 * sizeof(tusb_desc_endpoint_t); - return drv_len; + return drv_len; } static void ecm_report(bool nc) { - notify.ecm_buf = (nc) ? ecm_notify_nc : ecm_notify_csc; - notify.ecm_buf.header.wIndex = _netd_itf.itf_num; - netd_report((uint8_t *)¬ify.ecm_buf, (nc) ? sizeof(notify.ecm_buf.header) : sizeof(notify.ecm_buf)); + notify.ecm_buf = (nc) ? ecm_notify_nc : ecm_notify_csc; + notify.ecm_buf.header.wIndex = _netd_itf.itf_num; + netd_report((uint8_t *)¬ify.ecm_buf, + (nc) ? sizeof(notify.ecm_buf.header) : sizeof(notify.ecm_buf)); } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool netd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - if ( stage == CONTROL_STAGE_SETUP ) - { - switch ( request->bmRequestType_bit.type ) - { - case TUSB_REQ_TYPE_STANDARD: - switch ( request->bRequest ) - { - case TUSB_REQ_GET_INTERFACE: - { - uint8_t const req_itfnum = (uint8_t) request->wIndex; - TU_VERIFY(_netd_itf.itf_num+1 == req_itfnum); - - tud_control_xfer(rhport, request, &_netd_itf.itf_data_alt, 1); - } - break; - - case TUSB_REQ_SET_INTERFACE: - { - uint8_t const req_itfnum = (uint8_t) request->wIndex; - uint8_t const req_alt = (uint8_t) request->wValue; - - // Only valid for Data Interface with Alternate is either 0 or 1 - TU_VERIFY(_netd_itf.itf_num+1 == req_itfnum && req_alt < 2); - - // ACM-ECM only: qequest to enable/disable network activities - TU_VERIFY(_netd_itf.ecm_mode); - - _netd_itf.itf_data_alt = req_alt; - - if ( _netd_itf.itf_data_alt ) - { - // TODO since we don't actually close endpoint - // hack here to not re-open it - if ( _netd_itf.ep_in == 0 && _netd_itf.ep_out == 0 ) - { - TU_ASSERT(_netd_itf.ecm_desc_epdata); - TU_ASSERT( usbd_open_edpt_pair(rhport, _netd_itf.ecm_desc_epdata, 2, TUSB_XFER_BULK, &_netd_itf.ep_out, &_netd_itf.ep_in) ); - - // TODO should be merge with RNDIS's after endpoint opened - // Also should have opposite callback for application to disable network !! - tud_network_init_cb(); - can_xmit = true; // we are ready to transmit a packet - tud_network_recv_renew(); // prepare for incoming packets - } - }else - { - // TODO close the endpoint pair - // For now pretend that we did, this should have no harm since host won't try to - // communicate with the endpoints again - // _netd_itf.ep_in = _netd_itf.ep_out = 0 + if (stage == CONTROL_STAGE_SETUP) { + switch (request->bmRequestType_bit.type) { + case TUSB_REQ_TYPE_STANDARD: + switch (request->bRequest) { + case TUSB_REQ_GET_INTERFACE: { + uint8_t const req_itfnum = (uint8_t)request->wIndex; + TU_VERIFY(_netd_itf.itf_num + 1 == req_itfnum); + + tud_control_xfer(rhport, request, &_netd_itf.itf_data_alt, 1); + } break; + + case TUSB_REQ_SET_INTERFACE: { + uint8_t const req_itfnum = (uint8_t)request->wIndex; + uint8_t const req_alt = (uint8_t)request->wValue; + + // Only valid for Data Interface with Alternate is either 0 or 1 + TU_VERIFY(_netd_itf.itf_num + 1 == req_itfnum && req_alt < 2); + + // ACM-ECM only: qequest to enable/disable network activities + TU_VERIFY(_netd_itf.ecm_mode); + + _netd_itf.itf_data_alt = req_alt; + + if (_netd_itf.itf_data_alt) { + // TODO since we don't actually close endpoint + // hack here to not re-open it + if (_netd_itf.ep_in == 0 && _netd_itf.ep_out == 0) { + TU_ASSERT(_netd_itf.ecm_desc_epdata); + TU_ASSERT(usbd_open_edpt_pair(rhport, _netd_itf.ecm_desc_epdata, 2, + TUSB_XFER_BULK, &_netd_itf.ep_out, + &_netd_itf.ep_in)); + + // TODO should be merge with RNDIS's after endpoint opened + // Also should have opposite callback for application to disable network !! + tud_network_init_cb(); + can_xmit = true; // we are ready to transmit a packet + tud_network_recv_renew(); // prepare for incoming packets + } + } else { + // TODO close the endpoint pair + // For now pretend that we did, this should have no harm since host won't try to + // communicate with the endpoints again + // _netd_itf.ep_in = _netd_itf.ep_out = 0 + } + + tud_control_status(rhport, request); + } break; + + // unsupported request + default: + return false; } + break; + + case TUSB_REQ_TYPE_CLASS: + TU_VERIFY(_netd_itf.itf_num == request->wIndex); + + if (_netd_itf.ecm_mode) { + /* the only required CDC-ECM Management Element Request is SetEthernetPacketFilter */ + if (0x43 /* SET_ETHERNET_PACKET_FILTER */ == request->bRequest) { + tud_control_xfer(rhport, request, NULL, 0); + ecm_report(true); + } + } else { + if (request->bmRequestType_bit.direction == TUSB_DIR_IN) { + rndis_generic_msg_t *rndis_msg = + (rndis_generic_msg_t *)((void *)notify.rndis_buf); + uint32_t msglen = tu_le32toh(rndis_msg->MessageLength); + TU_ASSERT(msglen <= sizeof(notify.rndis_buf)); + tud_control_xfer(rhport, request, notify.rndis_buf, (uint16_t)msglen); + } else { + tud_control_xfer(rhport, request, notify.rndis_buf, + (uint16_t)sizeof(notify.rndis_buf)); + } + } + break; - tud_control_status(rhport, request); - } - break; - - // unsupported request - default: return false; + // unsupported request + default: + return false; } - break; - - case TUSB_REQ_TYPE_CLASS: - TU_VERIFY (_netd_itf.itf_num == request->wIndex); - - if (_netd_itf.ecm_mode) - { - /* the only required CDC-ECM Management Element Request is SetEthernetPacketFilter */ - if (0x43 /* SET_ETHERNET_PACKET_FILTER */ == request->bRequest) - { - tud_control_xfer(rhport, request, NULL, 0); - ecm_report(true); - } - } - else - { - if (request->bmRequestType_bit.direction == TUSB_DIR_IN) - { - rndis_generic_msg_t *rndis_msg = (rndis_generic_msg_t *) ((void*) notify.rndis_buf); - uint32_t msglen = tu_le32toh(rndis_msg->MessageLength); - TU_ASSERT(msglen <= sizeof(notify.rndis_buf)); - tud_control_xfer(rhport, request, notify.rndis_buf, (uint16_t) msglen); - } - else - { - tud_control_xfer(rhport, request, notify.rndis_buf, (uint16_t) sizeof(notify.rndis_buf)); - } + } else if (stage == CONTROL_STAGE_DATA) { + // Handle RNDIS class control OUT only + if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && + request->bmRequestType_bit.direction == TUSB_DIR_OUT && + _netd_itf.itf_num == request->wIndex) { + if (!_netd_itf.ecm_mode) { + rndis_class_set_handler(notify.rndis_buf, request->wLength); + } } - break; - - // unsupported request - default: return false; - } - } - else if ( stage == CONTROL_STAGE_DATA ) - { - // Handle RNDIS class control OUT only - if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && - request->bmRequestType_bit.direction == TUSB_DIR_OUT && - _netd_itf.itf_num == request->wIndex) - { - if ( !_netd_itf.ecm_mode ) - { - rndis_class_set_handler(notify.rndis_buf, request->wLength); - } } - } - return true; + return true; } static void handle_incoming_packet(uint32_t len) { - uint8_t *pnt = received; - uint32_t size = 0; - - if (_netd_itf.ecm_mode) - { - size = len; - } - else - { - rndis_data_packet_t *r = (rndis_data_packet_t *) ((void*) pnt); - if (len >= sizeof(rndis_data_packet_t)) - if ( (r->MessageType == REMOTE_NDIS_PACKET_MSG) && (r->MessageLength <= len)) - if ( (r->DataOffset + offsetof(rndis_data_packet_t, DataOffset) + r->DataLength) <= len) - { - pnt = &received[r->DataOffset + offsetof(rndis_data_packet_t, DataOffset)]; - size = r->DataLength; - } - } + uint8_t *pnt = received; + uint32_t size = 0; + + if (_netd_itf.ecm_mode) { + size = len; + } else { + rndis_data_packet_t *r = (rndis_data_packet_t *)((void *)pnt); + if (len >= sizeof(rndis_data_packet_t)) + if ((r->MessageType == REMOTE_NDIS_PACKET_MSG) && (r->MessageLength <= len)) + if ((r->DataOffset + offsetof(rndis_data_packet_t, DataOffset) + r->DataLength) <= + len) { + pnt = &received[r->DataOffset + offsetof(rndis_data_packet_t, DataOffset)]; + size = r->DataLength; + } + } - if (!tud_network_recv_cb(pnt, (uint16_t) size)) - { - /* if a buffer was never handled by user code, we must renew on the user's behalf */ - tud_network_recv_renew(); - } + if (!tud_network_recv_cb(pnt, (uint16_t)size)) { + /* if a buffer was never handled by user code, we must renew on the user's behalf */ + tud_network_recv_renew(); + } } bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) rhport; - (void) result; - - /* new packet received */ - if ( ep_addr == _netd_itf.ep_out ) - { - handle_incoming_packet(xferred_bytes); - } - - /* data transmission finished */ - if ( ep_addr == _netd_itf.ep_in ) - { - /* TinyUSB requires the class driver to implement ZLP (since ZLP usage is class-specific) */ - - if ( xferred_bytes && (0 == (xferred_bytes % CFG_TUD_NET_ENDPOINT_SIZE)) ) - { - do_in_xfer(NULL, 0); /* a ZLP is needed */ + (void)rhport; + (void)result; + + /* new packet received */ + if (ep_addr == _netd_itf.ep_out) { + handle_incoming_packet(xferred_bytes); } - else - { - /* we're finally finished */ - can_xmit = true; + + /* data transmission finished */ + if (ep_addr == _netd_itf.ep_in) { + /* TinyUSB requires the class driver to implement ZLP (since ZLP usage is class-specific) */ + + if (xferred_bytes && (0 == (xferred_bytes % CFG_TUD_NET_ENDPOINT_SIZE))) { + do_in_xfer(NULL, 0); /* a ZLP is needed */ + } else { + /* we're finally finished */ + can_xmit = true; + } } - } - if ( _netd_itf.ecm_mode && (ep_addr == _netd_itf.ep_notif) ) - { - if (sizeof(notify.ecm_buf.header) == xferred_bytes) ecm_report(false); - } + if (_netd_itf.ecm_mode && (ep_addr == _netd_itf.ep_notif)) { + if (sizeof(notify.ecm_buf.header) == xferred_bytes) + ecm_report(false); + } - return true; + return true; } bool tud_network_can_xmit(uint16_t size) { - (void)size; + (void)size; - return can_xmit; + return can_xmit; } void tud_network_xmit(void *ref, uint16_t arg) { - uint8_t *data; - uint16_t len; + uint8_t *data; + uint16_t len; - if (!can_xmit) - return; + if (!can_xmit) + return; - len = (_netd_itf.ecm_mode) ? 0 : CFG_TUD_NET_PACKET_PREFIX_LEN; - data = transmitted + len; + len = (_netd_itf.ecm_mode) ? 0 : CFG_TUD_NET_PACKET_PREFIX_LEN; + data = transmitted + len; - len += tud_network_xmit_cb(data, ref, arg); + len += tud_network_xmit_cb(data, ref, arg); - if (!_netd_itf.ecm_mode) - { - rndis_data_packet_t *hdr = (rndis_data_packet_t *) ((void*) transmitted); - memset(hdr, 0, sizeof(rndis_data_packet_t)); - hdr->MessageType = REMOTE_NDIS_PACKET_MSG; - hdr->MessageLength = len; - hdr->DataOffset = sizeof(rndis_data_packet_t) - offsetof(rndis_data_packet_t, DataOffset); - hdr->DataLength = len - sizeof(rndis_data_packet_t); - } + if (!_netd_itf.ecm_mode) { + rndis_data_packet_t *hdr = (rndis_data_packet_t *)((void *)transmitted); + memset(hdr, 0, sizeof(rndis_data_packet_t)); + hdr->MessageType = REMOTE_NDIS_PACKET_MSG; + hdr->MessageLength = len; + hdr->DataOffset = sizeof(rndis_data_packet_t) - offsetof(rndis_data_packet_t, DataOffset); + hdr->DataLength = len - sizeof(rndis_data_packet_t); + } - do_in_xfer(transmitted, len); + do_in_xfer(transmitted, len); } #endif diff --git a/Libraries/tinyusb/src/class/net/ncm.h b/Libraries/tinyusb/src/class/net/ncm.h index 1b987fca043..ba0326bcdd8 100644 --- a/Libraries/tinyusb/src/class/net/ncm.h +++ b/Libraries/tinyusb/src/class/net/ncm.h @@ -33,13 +33,13 @@ // NTB buffers size for reception side, must be >> MTU to avoid TCP retransmission (driver issue ?) // Linux use 2048 as minimal size #ifndef CFG_TUD_NCM_OUT_NTB_MAX_SIZE - #define CFG_TUD_NCM_OUT_NTB_MAX_SIZE 3200 +#define CFG_TUD_NCM_OUT_NTB_MAX_SIZE 3200 #endif // NTB buffers size for reception side, must be > MTU // Linux use 2048 as minimal size #ifndef CFG_TUD_NCM_IN_NTB_MAX_SIZE - #define CFG_TUD_NCM_IN_NTB_MAX_SIZE 3200 +#define CFG_TUD_NCM_IN_NTB_MAX_SIZE 3200 #endif // Number of NTB buffers for reception side @@ -51,7 +51,7 @@ // On High-Speed (STM32F7) : // No performance gain #ifndef CFG_TUD_NCM_OUT_NTB_N - #define CFG_TUD_NCM_OUT_NTB_N 1 +#define CFG_TUD_NCM_OUT_NTB_N 1 #endif // Number of NTB buffers for transmission side @@ -65,38 +65,37 @@ // On High-Speed (STM32F7) : // No performance gain #ifndef CFG_TUD_NCM_IN_NTB_N - #define CFG_TUD_NCM_IN_NTB_N 1 +#define CFG_TUD_NCM_IN_NTB_N 1 #endif // How many datagrams it is allowed to put into an NTB for transmission side #ifndef CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB - #define CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB 8 +#define CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB 8 #endif // This tells the host how many datagrams it is allowed to put into an NTB #ifndef CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB - #define CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB 6 +#define CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB 6 #endif // Table 6.2 Class-Specific Request Codes for Network Control Model subclass -typedef enum -{ - NCM_SET_ETHERNET_MULTICAST_FILTERS = 0x40, - NCM_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, - NCM_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, - NCM_SET_ETHERNET_PACKET_FILTER = 0x43, - NCM_GET_ETHERNET_STATISTIC = 0x44, - NCM_GET_NTB_PARAMETERS = 0x80, - NCM_GET_NET_ADDRESS = 0x81, - NCM_SET_NET_ADDRESS = 0x82, - NCM_GET_NTB_FORMAT = 0x83, - NCM_SET_NTB_FORMAT = 0x84, - NCM_GET_NTB_INPUT_SIZE = 0x85, - NCM_SET_NTB_INPUT_SIZE = 0x86, - NCM_GET_MAX_DATAGRAM_SIZE = 0x87, - NCM_SET_MAX_DATAGRAM_SIZE = 0x88, - NCM_GET_CRC_MODE = 0x89, - NCM_SET_CRC_MODE = 0x8A, +typedef enum { + NCM_SET_ETHERNET_MULTICAST_FILTERS = 0x40, + NCM_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, + NCM_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, + NCM_SET_ETHERNET_PACKET_FILTER = 0x43, + NCM_GET_ETHERNET_STATISTIC = 0x44, + NCM_GET_NTB_PARAMETERS = 0x80, + NCM_GET_NET_ADDRESS = 0x81, + NCM_SET_NET_ADDRESS = 0x82, + NCM_GET_NTB_FORMAT = 0x83, + NCM_SET_NTB_FORMAT = 0x84, + NCM_GET_NTB_INPUT_SIZE = 0x85, + NCM_SET_NTB_INPUT_SIZE = 0x86, + NCM_GET_MAX_DATAGRAM_SIZE = 0x87, + NCM_SET_MAX_DATAGRAM_SIZE = 0x88, + NCM_GET_CRC_MODE = 0x89, + NCM_SET_CRC_MODE = 0x8A, } ncm_request_code_t; #define NTH16_SIGNATURE 0x484D434E @@ -104,60 +103,60 @@ typedef enum #define NDP16_SIGNATURE_NCM1 0x314D434E typedef struct TU_ATTR_PACKED { - uint16_t wLength; - uint16_t bmNtbFormatsSupported; - uint32_t dwNtbInMaxSize; - uint16_t wNdbInDivisor; - uint16_t wNdbInPayloadRemainder; - uint16_t wNdbInAlignment; - uint16_t wReserved; - uint32_t dwNtbOutMaxSize; - uint16_t wNdbOutDivisor; - uint16_t wNdbOutPayloadRemainder; - uint16_t wNdbOutAlignment; - uint16_t wNtbOutMaxDatagrams; + uint16_t wLength; + uint16_t bmNtbFormatsSupported; + uint32_t dwNtbInMaxSize; + uint16_t wNdbInDivisor; + uint16_t wNdbInPayloadRemainder; + uint16_t wNdbInAlignment; + uint16_t wReserved; + uint32_t dwNtbOutMaxSize; + uint16_t wNdbOutDivisor; + uint16_t wNdbOutPayloadRemainder; + uint16_t wNdbOutAlignment; + uint16_t wNtbOutMaxDatagrams; } ntb_parameters_t; typedef struct TU_ATTR_PACKED { - uint32_t dwSignature; - uint16_t wHeaderLength; - uint16_t wSequence; - uint16_t wBlockLength; - uint16_t wNdpIndex; + uint32_t dwSignature; + uint16_t wHeaderLength; + uint16_t wSequence; + uint16_t wBlockLength; + uint16_t wNdpIndex; } nth16_t; typedef struct TU_ATTR_PACKED { - uint16_t wDatagramIndex; - uint16_t wDatagramLength; + uint16_t wDatagramIndex; + uint16_t wDatagramLength; } ndp16_datagram_t; typedef struct TU_ATTR_PACKED { - uint32_t dwSignature; - uint16_t wLength; - uint16_t wNextNdpIndex; - //ndp16_datagram_t datagram[]; + uint32_t dwSignature; + uint16_t wLength; + uint16_t wNextNdpIndex; + //ndp16_datagram_t datagram[]; } ndp16_t; typedef union TU_ATTR_PACKED { - struct { - nth16_t nth; - ndp16_t ndp; - ndp16_datagram_t ndp_datagram[CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB + 1]; - }; - uint8_t data[CFG_TUD_NCM_IN_NTB_MAX_SIZE]; + struct { + nth16_t nth; + ndp16_t ndp; + ndp16_datagram_t ndp_datagram[CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB + 1]; + }; + uint8_t data[CFG_TUD_NCM_IN_NTB_MAX_SIZE]; } xmit_ntb_t; typedef union TU_ATTR_PACKED { - struct { - nth16_t nth; - // only the header is at a guaranteed position - }; - uint8_t data[CFG_TUD_NCM_OUT_NTB_MAX_SIZE]; + struct { + nth16_t nth; + // only the header is at a guaranteed position + }; + uint8_t data[CFG_TUD_NCM_OUT_NTB_MAX_SIZE]; } recv_ntb_t; struct ncm_notify_t { - tusb_control_request_t header; - uint32_t downlink, uplink; + tusb_control_request_t header; + uint32_t downlink, uplink; }; #endif diff --git a/Libraries/tinyusb/src/class/net/ncm_device.c b/Libraries/tinyusb/src/class/net/ncm_device.c index 90d74718500..37be96301b5 100644 --- a/Libraries/tinyusb/src/class/net/ncm_device.c +++ b/Libraries/tinyusb/src/class/net/ncm_device.c @@ -62,15 +62,16 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_NCM_LOG_LEVEL - #define CFG_TUD_NCM_LOG_LEVEL CFG_TUD_LOG_LEVEL +#define CFG_TUD_NCM_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_NCM_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_NCM_LOG_LEVEL, __VA_ARGS__) // Alignment must be 4 -#define TUD_NCM_ALIGNMENT 4 +#define TUD_NCM_ALIGNMENT 4 // calculate alignment of xmit datagrams within an NTB -#define XMIT_ALIGN_OFFSET(x) ((TUD_NCM_ALIGNMENT - ((x) & (TUD_NCM_ALIGNMENT - 1))) & (TUD_NCM_ALIGNMENT - 1)) +#define XMIT_ALIGN_OFFSET(x) \ + ((TUD_NCM_ALIGNMENT - ((x) & (TUD_NCM_ALIGNMENT - 1))) & (TUD_NCM_ALIGNMENT - 1)) //----------------------------------------------------------------------------- // @@ -80,38 +81,39 @@ #define RECV_NTB_N CFG_TUD_NCM_OUT_NTB_N typedef struct { - // general - uint8_t ep_in; // endpoint for outgoing datagrams (naming is a little bit confusing) - uint8_t ep_out; // endpoint for incoming datagrams (naming is a little bit confusing) - uint8_t ep_notif; // endpoint for notifications - uint8_t itf_num; // interface number - uint8_t itf_data_alt; // ==0 -> no endpoints, i.e. no network traffic, ==1 -> normal operation with two endpoints (spec, chapter 5.3) - uint8_t rhport; // storage of \a rhport because some callbacks are done without it - - // recv handling - CFG_TUSB_MEM_ALIGN recv_ntb_t recv_ntb[RECV_NTB_N]; // actual recv NTBs - recv_ntb_t *recv_free_ntb[RECV_NTB_N]; // free list of recv NTBs - recv_ntb_t *recv_ready_ntb[RECV_NTB_N]; // NTBs waiting for transmission to glue logic - recv_ntb_t *recv_tinyusb_ntb; // buffer for the running transfer TinyUSB -> driver - recv_ntb_t *recv_glue_ntb; // buffer for the running transfer driver -> glue logic - uint16_t recv_glue_ntb_datagram_ndx; // index into \a recv_glue_ntb_datagram - - // xmit handling - CFG_TUSB_MEM_ALIGN xmit_ntb_t xmit_ntb[XMIT_NTB_N]; // actual xmit NTBs - xmit_ntb_t *xmit_free_ntb[XMIT_NTB_N]; // free list of xmit NTBs - xmit_ntb_t *xmit_ready_ntb[XMIT_NTB_N]; // NTBs waiting for transmission to TinyUSB - xmit_ntb_t *xmit_tinyusb_ntb; // buffer for the running transfer driver -> TinyUSB - xmit_ntb_t *xmit_glue_ntb; // buffer for the running transfer glue logic -> driver - uint16_t xmit_sequence; // NTB sequence counter - uint16_t xmit_glue_ntb_datagram_ndx; // index into \a xmit_glue_ntb_datagram - - // notification handling - enum { - NOTIFICATION_SPEED, - NOTIFICATION_CONNECTED, - NOTIFICATION_DONE - } notification_xmit_state; // state of notification transmission - bool notification_xmit_is_running; // notification is currently transmitted + // general + uint8_t ep_in; // endpoint for outgoing datagrams (naming is a little bit confusing) + uint8_t ep_out; // endpoint for incoming datagrams (naming is a little bit confusing) + uint8_t ep_notif; // endpoint for notifications + uint8_t itf_num; // interface number + uint8_t + itf_data_alt; // ==0 -> no endpoints, i.e. no network traffic, ==1 -> normal operation with two endpoints (spec, chapter 5.3) + uint8_t rhport; // storage of \a rhport because some callbacks are done without it + + // recv handling + CFG_TUSB_MEM_ALIGN recv_ntb_t recv_ntb[RECV_NTB_N]; // actual recv NTBs + recv_ntb_t *recv_free_ntb[RECV_NTB_N]; // free list of recv NTBs + recv_ntb_t *recv_ready_ntb[RECV_NTB_N]; // NTBs waiting for transmission to glue logic + recv_ntb_t *recv_tinyusb_ntb; // buffer for the running transfer TinyUSB -> driver + recv_ntb_t *recv_glue_ntb; // buffer for the running transfer driver -> glue logic + uint16_t recv_glue_ntb_datagram_ndx; // index into \a recv_glue_ntb_datagram + + // xmit handling + CFG_TUSB_MEM_ALIGN xmit_ntb_t xmit_ntb[XMIT_NTB_N]; // actual xmit NTBs + xmit_ntb_t *xmit_free_ntb[XMIT_NTB_N]; // free list of xmit NTBs + xmit_ntb_t *xmit_ready_ntb[XMIT_NTB_N]; // NTBs waiting for transmission to TinyUSB + xmit_ntb_t *xmit_tinyusb_ntb; // buffer for the running transfer driver -> TinyUSB + xmit_ntb_t *xmit_glue_ntb; // buffer for the running transfer glue logic -> driver + uint16_t xmit_sequence; // NTB sequence counter + uint16_t xmit_glue_ntb_datagram_ndx; // index into \a xmit_glue_ntb_datagram + + // notification handling + enum { + NOTIFICATION_SPEED, + NOTIFICATION_CONNECTED, + NOTIFICATION_DONE + } notification_xmit_state; // state of notification transmission + bool notification_xmit_is_running; // notification is currently transmitted } ncm_interface_t; CFG_TUD_MEM_SECTION CFG_TUD_MEM_ALIGN tu_static ncm_interface_t ncm_interface; @@ -123,18 +125,18 @@ CFG_TUD_MEM_SECTION CFG_TUD_MEM_ALIGN tu_static ncm_interface_t ncm_interface; * We are lucky, that byte order is correct */ CFG_TUD_MEM_SECTION CFG_TUD_MEM_ALIGN tu_static const ntb_parameters_t ntb_parameters = { - .wLength = sizeof(ntb_parameters_t), - .bmNtbFormatsSupported = 0x01,// 16-bit NTB supported - .dwNtbInMaxSize = CFG_TUD_NCM_IN_NTB_MAX_SIZE, - .wNdbInDivisor = 1, - .wNdbInPayloadRemainder = 0, - .wNdbInAlignment = TUD_NCM_ALIGNMENT, - .wReserved = 0, - .dwNtbOutMaxSize = CFG_TUD_NCM_OUT_NTB_MAX_SIZE, - .wNdbOutDivisor = 1, - .wNdbOutPayloadRemainder = 0, - .wNdbOutAlignment = TUD_NCM_ALIGNMENT, - .wNtbOutMaxDatagrams = CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB, + .wLength = sizeof(ntb_parameters_t), + .bmNtbFormatsSupported = 0x01, // 16-bit NTB supported + .dwNtbInMaxSize = CFG_TUD_NCM_IN_NTB_MAX_SIZE, + .wNdbInDivisor = 1, + .wNdbInPayloadRemainder = 0, + .wNdbInAlignment = TUD_NCM_ALIGNMENT, + .wReserved = 0, + .dwNtbOutMaxSize = CFG_TUD_NCM_OUT_NTB_MAX_SIZE, + .wNdbOutDivisor = 1, + .wNdbOutPayloadRemainder = 0, + .wNdbOutAlignment = TUD_NCM_ALIGNMENT, + .wNtbOutMaxDatagrams = CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB, }; // Some confusing remarks about wNtbOutMaxDatagrams... @@ -181,28 +183,32 @@ tu_static struct ncm_notify_t ncm_notify_speed_change = { * Transmit next notification to the host (if appropriate). * Notifications are transferred to the host once during connection setup. */ -static void notification_xmit(uint8_t rhport, bool force_next) { - TU_LOG_DRV("notification_xmit(%d, %d) - %d %d\n", force_next, rhport, ncm_interface.notification_xmit_state, ncm_interface.notification_xmit_is_running); - - if (!force_next && ncm_interface.notification_xmit_is_running) { - return; - } - - if (ncm_interface.notification_xmit_state == NOTIFICATION_SPEED) { - TU_LOG_DRV(" NOTIFICATION_SPEED\n"); - ncm_notify_speed_change.header.wIndex = ncm_interface.itf_num; - usbd_edpt_xfer(rhport, ncm_interface.ep_notif, (uint8_t *) &ncm_notify_speed_change, sizeof(ncm_notify_speed_change)); - ncm_interface.notification_xmit_state = NOTIFICATION_CONNECTED; - ncm_interface.notification_xmit_is_running = true; - } else if (ncm_interface.notification_xmit_state == NOTIFICATION_CONNECTED) { - TU_LOG_DRV(" NOTIFICATION_CONNECTED\n"); - ncm_notify_connected.header.wIndex = ncm_interface.itf_num; - usbd_edpt_xfer(rhport, ncm_interface.ep_notif, (uint8_t *) &ncm_notify_connected, sizeof(ncm_notify_connected)); - ncm_interface.notification_xmit_state = NOTIFICATION_DONE; - ncm_interface.notification_xmit_is_running = true; - } else { - TU_LOG_DRV(" NOTIFICATION_FINISHED\n"); - } +static void notification_xmit(uint8_t rhport, bool force_next) +{ + TU_LOG_DRV("notification_xmit(%d, %d) - %d %d\n", force_next, rhport, + ncm_interface.notification_xmit_state, ncm_interface.notification_xmit_is_running); + + if (!force_next && ncm_interface.notification_xmit_is_running) { + return; + } + + if (ncm_interface.notification_xmit_state == NOTIFICATION_SPEED) { + TU_LOG_DRV(" NOTIFICATION_SPEED\n"); + ncm_notify_speed_change.header.wIndex = ncm_interface.itf_num; + usbd_edpt_xfer(rhport, ncm_interface.ep_notif, (uint8_t *)&ncm_notify_speed_change, + sizeof(ncm_notify_speed_change)); + ncm_interface.notification_xmit_state = NOTIFICATION_CONNECTED; + ncm_interface.notification_xmit_is_running = true; + } else if (ncm_interface.notification_xmit_state == NOTIFICATION_CONNECTED) { + TU_LOG_DRV(" NOTIFICATION_CONNECTED\n"); + ncm_notify_connected.header.wIndex = ncm_interface.itf_num; + usbd_edpt_xfer(rhport, ncm_interface.ep_notif, (uint8_t *)&ncm_notify_connected, + sizeof(ncm_notify_connected)); + ncm_interface.notification_xmit_state = NOTIFICATION_DONE; + ncm_interface.notification_xmit_is_running = true; + } else { + TU_LOG_DRV(" NOTIFICATION_FINISHED\n"); + } } // notification_xmit //----------------------------------------------------------------------------- @@ -213,66 +219,72 @@ static void notification_xmit(uint8_t rhport, bool force_next) { /** * Put NTB into the transmitter free list. */ -static void xmit_put_ntb_into_free_list(xmit_ntb_t *free_ntb) { - TU_LOG_DRV("xmit_put_ntb_into_free_list() - %p\n", ncm_interface.xmit_tinyusb_ntb); +static void xmit_put_ntb_into_free_list(xmit_ntb_t *free_ntb) +{ + TU_LOG_DRV("xmit_put_ntb_into_free_list() - %p\n", ncm_interface.xmit_tinyusb_ntb); - if (free_ntb == NULL) { // can happen due to ZLPs - return; - } + if (free_ntb == NULL) { // can happen due to ZLPs + return; + } - for (int i = 0; i < XMIT_NTB_N; ++i) { - if (ncm_interface.xmit_free_ntb[i] == NULL) { - ncm_interface.xmit_free_ntb[i] = free_ntb; - return; + for (int i = 0; i < XMIT_NTB_N; ++i) { + if (ncm_interface.xmit_free_ntb[i] == NULL) { + ncm_interface.xmit_free_ntb[i] = free_ntb; + return; + } } - } - TU_LOG_DRV("(EE) xmit_put_ntb_into_free_list - no entry in free list\n");// this should not happen + TU_LOG_DRV( + "(EE) xmit_put_ntb_into_free_list - no entry in free list\n"); // this should not happen } // xmit_put_ntb_into_free_list /** * Get an NTB from the free list */ -static xmit_ntb_t *xmit_get_free_ntb(void) { - TU_LOG_DRV("xmit_get_free_ntb()\n"); - - for (int i = 0; i < XMIT_NTB_N; ++i) { - if (ncm_interface.xmit_free_ntb[i] != NULL) { - xmit_ntb_t *free = ncm_interface.xmit_free_ntb[i]; - ncm_interface.xmit_free_ntb[i] = NULL; - return free; +static xmit_ntb_t *xmit_get_free_ntb(void) +{ + TU_LOG_DRV("xmit_get_free_ntb()\n"); + + for (int i = 0; i < XMIT_NTB_N; ++i) { + if (ncm_interface.xmit_free_ntb[i] != NULL) { + xmit_ntb_t *free = ncm_interface.xmit_free_ntb[i]; + ncm_interface.xmit_free_ntb[i] = NULL; + return free; + } } - } - return NULL; + return NULL; } // xmit_get_free_ntb /** * Put a filled NTB into the ready list */ -static void xmit_put_ntb_into_ready_list(xmit_ntb_t *ready_ntb) { - TU_LOG_DRV("xmit_put_ntb_into_ready_list(%p) %d\n", ready_ntb, ready_ntb->nth.wBlockLength); - - for (int i = 0; i < XMIT_NTB_N; ++i) { - if (ncm_interface.xmit_ready_ntb[i] == NULL) { - ncm_interface.xmit_ready_ntb[i] = ready_ntb; - return; +static void xmit_put_ntb_into_ready_list(xmit_ntb_t *ready_ntb) +{ + TU_LOG_DRV("xmit_put_ntb_into_ready_list(%p) %d\n", ready_ntb, ready_ntb->nth.wBlockLength); + + for (int i = 0; i < XMIT_NTB_N; ++i) { + if (ncm_interface.xmit_ready_ntb[i] == NULL) { + ncm_interface.xmit_ready_ntb[i] = ready_ntb; + return; + } } - } - TU_LOG_DRV("(EE) xmit_put_ntb_into_ready_list: ready list full\n");// this should not happen + TU_LOG_DRV("(EE) xmit_put_ntb_into_ready_list: ready list full\n"); // this should not happen } // xmit_put_ntb_into_ready_list /** * Get the next NTB from the ready list (and remove it from the list). * If the ready list is empty, return NULL. */ -static xmit_ntb_t *xmit_get_next_ready_ntb(void) { - xmit_ntb_t *r = NULL; +static xmit_ntb_t *xmit_get_next_ready_ntb(void) +{ + xmit_ntb_t *r = NULL; - r = ncm_interface.xmit_ready_ntb[0]; - memmove(ncm_interface.xmit_ready_ntb + 0, ncm_interface.xmit_ready_ntb + 1, sizeof(ncm_interface.xmit_ready_ntb) - sizeof(ncm_interface.xmit_ready_ntb[0])); - ncm_interface.xmit_ready_ntb[XMIT_NTB_N - 1] = NULL; + r = ncm_interface.xmit_ready_ntb[0]; + memmove(ncm_interface.xmit_ready_ntb + 0, ncm_interface.xmit_ready_ntb + 1, + sizeof(ncm_interface.xmit_ready_ntb) - sizeof(ncm_interface.xmit_ready_ntb[0])); + ncm_interface.xmit_ready_ntb[XMIT_NTB_N - 1] = NULL; - TU_LOG_DRV("recv_get_next_ready_ntb: %p\n", r); - return r; + TU_LOG_DRV("recv_get_next_ready_ntb: %p\n", r); + return r; } // xmit_get_next_ready_ntb /** @@ -286,121 +298,130 @@ static xmit_ntb_t *xmit_get_next_ready_ntb(void) { * \pre * This must be called from netd_xfer_cb() so that ep_in is ready */ -static bool xmit_insert_required_zlp(uint8_t rhport, uint32_t xferred_bytes) { - TU_LOG_DRV("xmit_insert_required_zlp(%d,%ld)\n", rhport, xferred_bytes); +static bool xmit_insert_required_zlp(uint8_t rhport, uint32_t xferred_bytes) +{ + TU_LOG_DRV("xmit_insert_required_zlp(%d,%ld)\n", rhport, xferred_bytes); - if (xferred_bytes == 0 || xferred_bytes % CFG_TUD_NET_ENDPOINT_SIZE != 0) { - return false; - } + if (xferred_bytes == 0 || xferred_bytes % CFG_TUD_NET_ENDPOINT_SIZE != 0) { + return false; + } - TU_ASSERT(ncm_interface.itf_data_alt == 1, false); - TU_ASSERT(!usbd_edpt_busy(rhport, ncm_interface.ep_in), false); + TU_ASSERT(ncm_interface.itf_data_alt == 1, false); + TU_ASSERT(!usbd_edpt_busy(rhport, ncm_interface.ep_in), false); - TU_LOG_DRV("xmit_insert_required_zlp! (%u)\n", (unsigned) xferred_bytes); + TU_LOG_DRV("xmit_insert_required_zlp! (%u)\n", (unsigned)xferred_bytes); - // start transmission of the ZLP - usbd_edpt_xfer(rhport, ncm_interface.ep_in, NULL, 0); + // start transmission of the ZLP + usbd_edpt_xfer(rhport, ncm_interface.ep_in, NULL, 0); - return true; + return true; } // xmit_insert_required_zlp /** * Start transmission if it there is a waiting packet and if can be done from interface side. */ -static void xmit_start_if_possible(uint8_t rhport) { - TU_LOG_DRV("xmit_start_if_possible()\n"); - - if (ncm_interface.xmit_tinyusb_ntb != NULL) { - TU_LOG_DRV(" !xmit_start_if_possible 1\n"); - return; - } - if (ncm_interface.itf_data_alt != 1) { - TU_LOG_DRV("(EE) !xmit_start_if_possible 2\n"); - return; - } - if (usbd_edpt_busy(rhport, ncm_interface.ep_in)) { - TU_LOG_DRV(" !xmit_start_if_possible 3\n"); - return; - } - - ncm_interface.xmit_tinyusb_ntb = xmit_get_next_ready_ntb(); - if (ncm_interface.xmit_tinyusb_ntb == NULL) { - if (ncm_interface.xmit_glue_ntb == NULL || ncm_interface.xmit_glue_ntb_datagram_ndx == 0) { - // -> really nothing is waiting - return; - } - ncm_interface.xmit_tinyusb_ntb = ncm_interface.xmit_glue_ntb; - ncm_interface.xmit_glue_ntb = NULL; - } - - #if CFG_TUD_NCM_LOG_LEVEL >= 3 - { - uint16_t len = ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength; - TU_LOG_BUF(3, ncm_interface.xmit_tinyusb_ntb->data[i], len); - } - #endif - - if (ncm_interface.xmit_glue_ntb_datagram_ndx != 1) { - TU_LOG_DRV(">> %d %d\n", ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength, ncm_interface.xmit_glue_ntb_datagram_ndx); - } - - // Kick off an endpoint transfer - usbd_edpt_xfer(0, ncm_interface.ep_in, ncm_interface.xmit_tinyusb_ntb->data, ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength); +static void xmit_start_if_possible(uint8_t rhport) +{ + TU_LOG_DRV("xmit_start_if_possible()\n"); + + if (ncm_interface.xmit_tinyusb_ntb != NULL) { + TU_LOG_DRV(" !xmit_start_if_possible 1\n"); + return; + } + if (ncm_interface.itf_data_alt != 1) { + TU_LOG_DRV("(EE) !xmit_start_if_possible 2\n"); + return; + } + if (usbd_edpt_busy(rhport, ncm_interface.ep_in)) { + TU_LOG_DRV(" !xmit_start_if_possible 3\n"); + return; + } + + ncm_interface.xmit_tinyusb_ntb = xmit_get_next_ready_ntb(); + if (ncm_interface.xmit_tinyusb_ntb == NULL) { + if (ncm_interface.xmit_glue_ntb == NULL || ncm_interface.xmit_glue_ntb_datagram_ndx == 0) { + // -> really nothing is waiting + return; + } + ncm_interface.xmit_tinyusb_ntb = ncm_interface.xmit_glue_ntb; + ncm_interface.xmit_glue_ntb = NULL; + } + +#if CFG_TUD_NCM_LOG_LEVEL >= 3 + { + uint16_t len = ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength; + TU_LOG_BUF(3, ncm_interface.xmit_tinyusb_ntb->data[i], len); + } +#endif + + if (ncm_interface.xmit_glue_ntb_datagram_ndx != 1) { + TU_LOG_DRV(">> %d %d\n", ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength, + ncm_interface.xmit_glue_ntb_datagram_ndx); + } + + // Kick off an endpoint transfer + usbd_edpt_xfer(0, ncm_interface.ep_in, ncm_interface.xmit_tinyusb_ntb->data, + ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength); } // xmit_start_if_possible /** * check if a new datagram fits into the current NTB */ -static bool xmit_requested_datagram_fits_into_current_ntb(uint16_t datagram_size) { - TU_LOG_DRV("xmit_requested_datagram_fits_into_current_ntb(%d) - %p %p\n", datagram_size, ncm_interface.xmit_tinyusb_ntb, ncm_interface.xmit_glue_ntb); +static bool xmit_requested_datagram_fits_into_current_ntb(uint16_t datagram_size) +{ + TU_LOG_DRV("xmit_requested_datagram_fits_into_current_ntb(%d) - %p %p\n", datagram_size, + ncm_interface.xmit_tinyusb_ntb, ncm_interface.xmit_glue_ntb); - if (ncm_interface.xmit_glue_ntb == NULL) { - return false; - } - if (ncm_interface.xmit_glue_ntb_datagram_ndx >= CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB) { - return false; - } - if (ncm_interface.xmit_glue_ntb->nth.wBlockLength + datagram_size + XMIT_ALIGN_OFFSET(datagram_size) > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { - return false; - } - return true; + if (ncm_interface.xmit_glue_ntb == NULL) { + return false; + } + if (ncm_interface.xmit_glue_ntb_datagram_ndx >= CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB) { + return false; + } + if (ncm_interface.xmit_glue_ntb->nth.wBlockLength + datagram_size + + XMIT_ALIGN_OFFSET(datagram_size) > + CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { + return false; + } + return true; } // xmit_requested_datagram_fits_into_current_ntb /** * Setup an NTB for the glue logic */ -static bool xmit_setup_next_glue_ntb(void) { - TU_LOG_DRV("xmit_setup_next_glue_ntb - %p\n", ncm_interface.xmit_glue_ntb); +static bool xmit_setup_next_glue_ntb(void) +{ + TU_LOG_DRV("xmit_setup_next_glue_ntb - %p\n", ncm_interface.xmit_glue_ntb); - if (ncm_interface.xmit_glue_ntb != NULL) { - // put NTB into waiting list (the new datagram did not fit in) - xmit_put_ntb_into_ready_list(ncm_interface.xmit_glue_ntb); - } + if (ncm_interface.xmit_glue_ntb != NULL) { + // put NTB into waiting list (the new datagram did not fit in) + xmit_put_ntb_into_ready_list(ncm_interface.xmit_glue_ntb); + } - ncm_interface.xmit_glue_ntb = xmit_get_free_ntb();// get next buffer (if any) - if (ncm_interface.xmit_glue_ntb == NULL) { - TU_LOG_DRV(" xmit_setup_next_glue_ntb - nothing free\n");// should happen rarely - return false; - } + ncm_interface.xmit_glue_ntb = xmit_get_free_ntb(); // get next buffer (if any) + if (ncm_interface.xmit_glue_ntb == NULL) { + TU_LOG_DRV(" xmit_setup_next_glue_ntb - nothing free\n"); // should happen rarely + return false; + } - ncm_interface.xmit_glue_ntb_datagram_ndx = 0; + ncm_interface.xmit_glue_ntb_datagram_ndx = 0; - xmit_ntb_t *ntb = ncm_interface.xmit_glue_ntb; + xmit_ntb_t *ntb = ncm_interface.xmit_glue_ntb; - // Fill in NTB header - ntb->nth.dwSignature = NTH16_SIGNATURE; - ntb->nth.wHeaderLength = sizeof(ntb->nth); - ntb->nth.wSequence = ncm_interface.xmit_sequence++; - ntb->nth.wBlockLength = sizeof(ntb->nth) + sizeof(ntb->ndp) + sizeof(ntb->ndp_datagram); - ntb->nth.wNdpIndex = sizeof(ntb->nth); + // Fill in NTB header + ntb->nth.dwSignature = NTH16_SIGNATURE; + ntb->nth.wHeaderLength = sizeof(ntb->nth); + ntb->nth.wSequence = ncm_interface.xmit_sequence++; + ntb->nth.wBlockLength = sizeof(ntb->nth) + sizeof(ntb->ndp) + sizeof(ntb->ndp_datagram); + ntb->nth.wNdpIndex = sizeof(ntb->nth); - // Fill in NDP16 header and terminator - ntb->ndp.dwSignature = NDP16_SIGNATURE_NCM0; - ntb->ndp.wLength = sizeof(ntb->ndp) + sizeof(ntb->ndp_datagram); - ntb->ndp.wNextNdpIndex = 0; + // Fill in NDP16 header and terminator + ntb->ndp.dwSignature = NDP16_SIGNATURE_NCM0; + ntb->ndp.wLength = sizeof(ntb->ndp) + sizeof(ntb->ndp_datagram); + ntb->ndp.wNextNdpIndex = 0; - memset(ntb->ndp_datagram, 0, sizeof(ntb->ndp_datagram)); - return true; + memset(ntb->ndp_datagram, 0, sizeof(ntb->ndp_datagram)); + return true; } // xmit_setup_next_glue_ntb //----------------------------------------------------------------------------- @@ -412,93 +433,101 @@ static bool xmit_setup_next_glue_ntb(void) { * Return pointer to an available receive buffer or NULL. * Returned buffer (if any) has the size \a CFG_TUD_NCM_OUT_NTB_MAX_SIZE. */ -static recv_ntb_t *recv_get_free_ntb(void) { - TU_LOG_DRV("recv_get_free_ntb()\n"); - - for (int i = 0; i < RECV_NTB_N; ++i) { - if (ncm_interface.recv_free_ntb[i] != NULL) { - recv_ntb_t *free = ncm_interface.recv_free_ntb[i]; - ncm_interface.recv_free_ntb[i] = NULL; - return free; +static recv_ntb_t *recv_get_free_ntb(void) +{ + TU_LOG_DRV("recv_get_free_ntb()\n"); + + for (int i = 0; i < RECV_NTB_N; ++i) { + if (ncm_interface.recv_free_ntb[i] != NULL) { + recv_ntb_t *free = ncm_interface.recv_free_ntb[i]; + ncm_interface.recv_free_ntb[i] = NULL; + return free; + } } - } - return NULL; + return NULL; } // recv_get_free_ntb /** * Get the next NTB from the ready list (and remove it from the list). * If the ready list is empty, return NULL. */ -static recv_ntb_t *recv_get_next_ready_ntb(void) { - recv_ntb_t *r = NULL; +static recv_ntb_t *recv_get_next_ready_ntb(void) +{ + recv_ntb_t *r = NULL; - r = ncm_interface.recv_ready_ntb[0]; - memmove(ncm_interface.recv_ready_ntb + 0, ncm_interface.recv_ready_ntb + 1, sizeof(ncm_interface.recv_ready_ntb) - sizeof(ncm_interface.recv_ready_ntb[0])); - ncm_interface.recv_ready_ntb[RECV_NTB_N - 1] = NULL; + r = ncm_interface.recv_ready_ntb[0]; + memmove(ncm_interface.recv_ready_ntb + 0, ncm_interface.recv_ready_ntb + 1, + sizeof(ncm_interface.recv_ready_ntb) - sizeof(ncm_interface.recv_ready_ntb[0])); + ncm_interface.recv_ready_ntb[RECV_NTB_N - 1] = NULL; - TU_LOG_DRV("recv_get_next_ready_ntb: %p\n", r); - return r; + TU_LOG_DRV("recv_get_next_ready_ntb: %p\n", r); + return r; } // recv_get_next_ready_ntb /** * Put NTB into the receiver free list. */ -static void recv_put_ntb_into_free_list(recv_ntb_t *free_ntb) { - TU_LOG_DRV("recv_put_ntb_into_free_list(%p)\n", free_ntb); - - for (int i = 0; i < RECV_NTB_N; ++i) { - if (ncm_interface.recv_free_ntb[i] == NULL) { - ncm_interface.recv_free_ntb[i] = free_ntb; - return; +static void recv_put_ntb_into_free_list(recv_ntb_t *free_ntb) +{ + TU_LOG_DRV("recv_put_ntb_into_free_list(%p)\n", free_ntb); + + for (int i = 0; i < RECV_NTB_N; ++i) { + if (ncm_interface.recv_free_ntb[i] == NULL) { + ncm_interface.recv_free_ntb[i] = free_ntb; + return; + } } - } - TU_LOG_DRV("(EE) recv_put_ntb_into_free_list - no entry in free list\n");// this should not happen + TU_LOG_DRV( + "(EE) recv_put_ntb_into_free_list - no entry in free list\n"); // this should not happen } // recv_put_ntb_into_free_list /** * \a ready_ntb holds a validated NTB, * put this buffer into the waiting list. */ -static void recv_put_ntb_into_ready_list(recv_ntb_t *ready_ntb) { - TU_LOG_DRV("recv_put_ntb_into_ready_list(%p) %d\n", ready_ntb, ready_ntb->nth.wBlockLength); - - for (int i = 0; i < RECV_NTB_N; ++i) { - if (ncm_interface.recv_ready_ntb[i] == NULL) { - ncm_interface.recv_ready_ntb[i] = ready_ntb; - return; +static void recv_put_ntb_into_ready_list(recv_ntb_t *ready_ntb) +{ + TU_LOG_DRV("recv_put_ntb_into_ready_list(%p) %d\n", ready_ntb, ready_ntb->nth.wBlockLength); + + for (int i = 0; i < RECV_NTB_N; ++i) { + if (ncm_interface.recv_ready_ntb[i] == NULL) { + ncm_interface.recv_ready_ntb[i] = ready_ntb; + return; + } } - } - TU_LOG_DRV("(EE) recv_put_ntb_into_ready_list: ready list full\n");// this should not happen + TU_LOG_DRV("(EE) recv_put_ntb_into_ready_list: ready list full\n"); // this should not happen } // recv_put_ntb_into_ready_list /** * If possible, start a new reception TinyUSB -> driver. */ -static void recv_try_to_start_new_reception(uint8_t rhport) { - TU_LOG_DRV("recv_try_to_start_new_reception(%d)\n", rhport); - - if (ncm_interface.itf_data_alt != 1) { - return; - } - if (ncm_interface.recv_tinyusb_ntb != NULL) { - return; - } - if (usbd_edpt_busy(rhport, ncm_interface.ep_out)) { - return; - } - - ncm_interface.recv_tinyusb_ntb = recv_get_free_ntb(); - if (ncm_interface.recv_tinyusb_ntb == NULL) { - return; - } - - // initiate transfer - TU_LOG_DRV(" start reception\n"); - bool r = usbd_edpt_xfer(rhport, ncm_interface.ep_out, ncm_interface.recv_tinyusb_ntb->data, CFG_TUD_NCM_OUT_NTB_MAX_SIZE); - if (!r) { - recv_put_ntb_into_free_list(ncm_interface.recv_tinyusb_ntb); - ncm_interface.recv_tinyusb_ntb = NULL; - } +static void recv_try_to_start_new_reception(uint8_t rhport) +{ + TU_LOG_DRV("recv_try_to_start_new_reception(%d)\n", rhport); + + if (ncm_interface.itf_data_alt != 1) { + return; + } + if (ncm_interface.recv_tinyusb_ntb != NULL) { + return; + } + if (usbd_edpt_busy(rhport, ncm_interface.ep_out)) { + return; + } + + ncm_interface.recv_tinyusb_ntb = recv_get_free_ntb(); + if (ncm_interface.recv_tinyusb_ntb == NULL) { + return; + } + + // initiate transfer + TU_LOG_DRV(" start reception\n"); + bool r = usbd_edpt_xfer(rhport, ncm_interface.ep_out, ncm_interface.recv_tinyusb_ntb->data, + CFG_TUD_NCM_OUT_NTB_MAX_SIZE); + if (!r) { + recv_put_ntb_into_free_list(ncm_interface.recv_tinyusb_ntb); + ncm_interface.recv_tinyusb_ntb = NULL; + } } // recv_try_to_start_new_reception /** @@ -508,127 +537,145 @@ static void recv_try_to_start_new_reception(uint8_t rhport) { * \note * \a ndp16->wNextNdpIndex != 0 is not supported */ -static bool recv_validate_datagram(const recv_ntb_t *ntb, uint32_t len) { - const nth16_t *nth16 = &(ntb->nth); +static bool recv_validate_datagram(const recv_ntb_t *ntb, uint32_t len) +{ + const nth16_t *nth16 = &(ntb->nth); - TU_LOG_DRV("recv_validate_datagram(%p, %d)\n", ntb, (int) len); + TU_LOG_DRV("recv_validate_datagram(%p, %d)\n", ntb, (int)len); - // check header - if (nth16->wHeaderLength != sizeof(nth16_t)) { - TU_LOG_DRV("(EE) ill nth16 length: %d\n", nth16->wHeaderLength); - return false; - } - if (nth16->dwSignature != NTH16_SIGNATURE) { - TU_LOG_DRV("(EE) ill signature: 0x%08x\n", (unsigned) nth16->dwSignature); - return false; - } - if (len < sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)) { - TU_LOG_DRV("(EE) ill min len: %lu\n", len); - return false; - } - if (nth16->wBlockLength > len) { - TU_LOG_DRV("(EE) ill block length: %d > %lu\n", nth16->wBlockLength, len); - return false; - } - if (nth16->wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { - TU_LOG_DRV("(EE) ill block length2: %d > %d\n", nth16->wBlockLength, CFG_TUD_NCM_OUT_NTB_MAX_SIZE); - return false; - } - if (nth16->wNdpIndex < sizeof(nth16) || nth16->wNdpIndex > len - (sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t))) { - TU_LOG_DRV("(EE) ill position of first ndp: %d (%lu)\n", nth16->wNdpIndex, len); - return false; - } + // check header + if (nth16->wHeaderLength != sizeof(nth16_t)) { + TU_LOG_DRV("(EE) ill nth16 length: %d\n", nth16->wHeaderLength); + return false; + } + if (nth16->dwSignature != NTH16_SIGNATURE) { + TU_LOG_DRV("(EE) ill signature: 0x%08x\n", (unsigned)nth16->dwSignature); + return false; + } + if (len < sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)) { + TU_LOG_DRV("(EE) ill min len: %lu\n", len); + return false; + } + if (nth16->wBlockLength > len) { + TU_LOG_DRV("(EE) ill block length: %d > %lu\n", nth16->wBlockLength, len); + return false; + } + if (nth16->wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { + TU_LOG_DRV("(EE) ill block length2: %d > %d\n", nth16->wBlockLength, + CFG_TUD_NCM_OUT_NTB_MAX_SIZE); + return false; + } + if (nth16->wNdpIndex < sizeof(nth16) || + nth16->wNdpIndex > len - (sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t))) { + TU_LOG_DRV("(EE) ill position of first ndp: %d (%lu)\n", nth16->wNdpIndex, len); + return false; + } - // check (first) NDP(16) - const ndp16_t *ndp16 = (const ndp16_t *) (ntb->data + nth16->wNdpIndex); + // check (first) NDP(16) + const ndp16_t *ndp16 = (const ndp16_t *)(ntb->data + nth16->wNdpIndex); - if (ndp16->wLength < sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)) { - TU_LOG_DRV("(EE) ill ndp16 length: %d\n", ndp16->wLength); - return false; - } - if (ndp16->dwSignature != NDP16_SIGNATURE_NCM0 && ndp16->dwSignature != NDP16_SIGNATURE_NCM1) { - TU_LOG_DRV("(EE) ill signature: 0x%08x\n", (unsigned) ndp16->dwSignature); - return false; - } - if (ndp16->wNextNdpIndex != 0) { - TU_LOG_DRV("(EE) cannot handle wNextNdpIndex!=0 (%d)\n", ndp16->wNextNdpIndex); - return false; - } + if (ndp16->wLength < sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)) { + TU_LOG_DRV("(EE) ill ndp16 length: %d\n", ndp16->wLength); + return false; + } + if (ndp16->dwSignature != NDP16_SIGNATURE_NCM0 && ndp16->dwSignature != NDP16_SIGNATURE_NCM1) { + TU_LOG_DRV("(EE) ill signature: 0x%08x\n", (unsigned)ndp16->dwSignature); + return false; + } + if (ndp16->wNextNdpIndex != 0) { + TU_LOG_DRV("(EE) cannot handle wNextNdpIndex!=0 (%d)\n", ndp16->wNextNdpIndex); + return false; + } - const ndp16_datagram_t *ndp16_datagram = (const ndp16_datagram_t *) (ntb->data + nth16->wNdpIndex + sizeof(ndp16_t)); - int ndx = 0; - uint16_t max_ndx = (uint16_t) ((ndp16->wLength - sizeof(ndp16_t)) / sizeof(ndp16_datagram_t)); + const ndp16_datagram_t *ndp16_datagram = + (const ndp16_datagram_t *)(ntb->data + nth16->wNdpIndex + sizeof(ndp16_t)); + int ndx = 0; + uint16_t max_ndx = (uint16_t)((ndp16->wLength - sizeof(ndp16_t)) / sizeof(ndp16_datagram_t)); - if (max_ndx > 2) { // number of datagrams in NTB > 1 - TU_LOG_DRV("<< %d (%d)\n", max_ndx - 1, ntb->nth.wBlockLength); - } - if (ndp16_datagram[max_ndx - 1].wDatagramIndex != 0 || ndp16_datagram[max_ndx - 1].wDatagramLength != 0) { - TU_LOG_DRV(" max_ndx != 0\n"); - return false; - } - while (ndp16_datagram[ndx].wDatagramIndex != 0 && ndp16_datagram[ndx].wDatagramLength != 0) { - TU_LOG_DRV(" << %d %d\n", ndp16_datagram[ndx].wDatagramIndex, ndp16_datagram[ndx].wDatagramLength); - if (ndp16_datagram[ndx].wDatagramIndex > len) { - TU_LOG_DRV("(EE) ill start of datagram[%d]: %d (%lu)\n", ndx, ndp16_datagram[ndx].wDatagramIndex, len); - return false; - } - if (ndp16_datagram[ndx].wDatagramIndex + ndp16_datagram[ndx].wDatagramLength > len) { - TU_LOG_DRV("(EE) ill end of datagram[%d]: %d (%lu)\n", ndx, ndp16_datagram[ndx].wDatagramIndex + ndp16_datagram[ndx].wDatagramLength, len); - return false; - } - ++ndx; - } - - #if CFG_TUD_NCM_LOG_LEVEL >= 3 - TU_LOG_BUF(3, ntb->data[i], len); - #endif - - // -> ntb contains a valid packet structure - // ok... I did not check for garbage within the datagram indices... - return true; + if (max_ndx > 2) { // number of datagrams in NTB > 1 + TU_LOG_DRV("<< %d (%d)\n", max_ndx - 1, ntb->nth.wBlockLength); + } + if (ndp16_datagram[max_ndx - 1].wDatagramIndex != 0 || + ndp16_datagram[max_ndx - 1].wDatagramLength != 0) { + TU_LOG_DRV(" max_ndx != 0\n"); + return false; + } + while (ndp16_datagram[ndx].wDatagramIndex != 0 && ndp16_datagram[ndx].wDatagramLength != 0) { + TU_LOG_DRV(" << %d %d\n", ndp16_datagram[ndx].wDatagramIndex, + ndp16_datagram[ndx].wDatagramLength); + if (ndp16_datagram[ndx].wDatagramIndex > len) { + TU_LOG_DRV("(EE) ill start of datagram[%d]: %d (%lu)\n", ndx, + ndp16_datagram[ndx].wDatagramIndex, len); + return false; + } + if (ndp16_datagram[ndx].wDatagramIndex + ndp16_datagram[ndx].wDatagramLength > len) { + TU_LOG_DRV("(EE) ill end of datagram[%d]: %d (%lu)\n", ndx, + ndp16_datagram[ndx].wDatagramIndex + ndp16_datagram[ndx].wDatagramLength, + len); + return false; + } + ++ndx; + } + +#if CFG_TUD_NCM_LOG_LEVEL >= 3 + TU_LOG_BUF(3, ntb->data[i], len); +#endif + + // -> ntb contains a valid packet structure + // ok... I did not check for garbage within the datagram indices... + return true; } // recv_validate_datagram /** * Transfer the next (pending) datagram to the glue logic and return receive buffer if empty. */ -static void recv_transfer_datagram_to_glue_logic(void) { - TU_LOG_DRV("recv_transfer_datagram_to_glue_logic()\n"); - - if (ncm_interface.recv_glue_ntb == NULL) { - ncm_interface.recv_glue_ntb = recv_get_next_ready_ntb(); - TU_LOG_DRV(" new buffer for glue logic: %p\n", ncm_interface.recv_glue_ntb); - ncm_interface.recv_glue_ntb_datagram_ndx = 0; - } - - if (ncm_interface.recv_glue_ntb != NULL) { - const ndp16_datagram_t *ndp16_datagram = (ndp16_datagram_t *) (ncm_interface.recv_glue_ntb->data + ncm_interface.recv_glue_ntb->nth.wNdpIndex + sizeof(ndp16_t)); - - if (ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramIndex == 0) { - TU_LOG_DRV("(EE) SOMETHING WENT WRONG 1\n"); - } else if (ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramLength == 0) { - TU_LOG_DRV("(EE) SOMETHING WENT WRONG 2\n"); - } else { - uint16_t datagramIndex = ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramIndex; - uint16_t datagramLength = ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramLength; - - TU_LOG_DRV(" recv[%d] - %d %d\n", ncm_interface.recv_glue_ntb_datagram_ndx, datagramIndex, datagramLength); - if (tud_network_recv_cb(ncm_interface.recv_glue_ntb->data + datagramIndex, datagramLength)) { - // send datagram successfully to glue logic - TU_LOG_DRV(" OK\n"); - datagramIndex = ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx + 1].wDatagramIndex; - datagramLength = ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx + 1].wDatagramLength; - - if (datagramIndex != 0 && datagramLength != 0) { - // -> next datagram - ++ncm_interface.recv_glue_ntb_datagram_ndx; +static void recv_transfer_datagram_to_glue_logic(void) +{ + TU_LOG_DRV("recv_transfer_datagram_to_glue_logic()\n"); + + if (ncm_interface.recv_glue_ntb == NULL) { + ncm_interface.recv_glue_ntb = recv_get_next_ready_ntb(); + TU_LOG_DRV(" new buffer for glue logic: %p\n", ncm_interface.recv_glue_ntb); + ncm_interface.recv_glue_ntb_datagram_ndx = 0; + } + + if (ncm_interface.recv_glue_ntb != NULL) { + const ndp16_datagram_t *ndp16_datagram = + (ndp16_datagram_t *)(ncm_interface.recv_glue_ntb->data + + ncm_interface.recv_glue_ntb->nth.wNdpIndex + sizeof(ndp16_t)); + + if (ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramIndex == 0) { + TU_LOG_DRV("(EE) SOMETHING WENT WRONG 1\n"); + } else if (ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramLength == 0) { + TU_LOG_DRV("(EE) SOMETHING WENT WRONG 2\n"); } else { - // end of datagrams reached - recv_put_ntb_into_free_list(ncm_interface.recv_glue_ntb); - ncm_interface.recv_glue_ntb = NULL; + uint16_t datagramIndex = + ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramIndex; + uint16_t datagramLength = + ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramLength; + + TU_LOG_DRV(" recv[%d] - %d %d\n", ncm_interface.recv_glue_ntb_datagram_ndx, + datagramIndex, datagramLength); + if (tud_network_recv_cb(ncm_interface.recv_glue_ntb->data + datagramIndex, + datagramLength)) { + // send datagram successfully to glue logic + TU_LOG_DRV(" OK\n"); + datagramIndex = + ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx + 1].wDatagramIndex; + datagramLength = + ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx + 1].wDatagramLength; + + if (datagramIndex != 0 && datagramLength != 0) { + // -> next datagram + ++ncm_interface.recv_glue_ntb_datagram_ndx; + } else { + // end of datagrams reached + recv_put_ntb_into_free_list(ncm_interface.recv_glue_ntb); + ncm_interface.recv_glue_ntb = NULL; + } + } } - } } - } } // recv_transfer_datagram_to_glue_logic //----------------------------------------------------------------------------- @@ -641,70 +688,78 @@ static void recv_transfer_datagram_to_glue_logic(void) { * This function also fetches a next buffer if required, so that tud_network_xmit() is ready for copy * and transmission operation. */ -bool tud_network_can_xmit(uint16_t size) { - TU_LOG_DRV("tud_network_can_xmit(%d)\n", size); +bool tud_network_can_xmit(uint16_t size) +{ + TU_LOG_DRV("tud_network_can_xmit(%d)\n", size); - TU_ASSERT(size <= CFG_TUD_NCM_OUT_NTB_MAX_SIZE - (sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)), false); + TU_ASSERT(size <= CFG_TUD_NCM_OUT_NTB_MAX_SIZE - + (sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)), + false); - if (xmit_requested_datagram_fits_into_current_ntb(size) || xmit_setup_next_glue_ntb()) { - // -> everything is fine - return true; - } - xmit_start_if_possible(ncm_interface.rhport); - TU_LOG_DRV("(II) tud_network_can_xmit: request blocked\n");// could happen if all xmit buffers are full (but should happen rarely) - return false; + if (xmit_requested_datagram_fits_into_current_ntb(size) || xmit_setup_next_glue_ntb()) { + // -> everything is fine + return true; + } + xmit_start_if_possible(ncm_interface.rhport); + TU_LOG_DRV( + "(II) tud_network_can_xmit: request blocked\n"); // could happen if all xmit buffers are full (but should happen rarely) + return false; } // tud_network_can_xmit /** * Put a datagram into a waiting NTB. * If currently no transmission is started, then initiate transmission. */ -void tud_network_xmit(void *ref, uint16_t arg) { - TU_LOG_DRV("tud_network_xmit(%p, %d)\n", ref, arg); +void tud_network_xmit(void *ref, uint16_t arg) +{ + TU_LOG_DRV("tud_network_xmit(%p, %d)\n", ref, arg); - if (ncm_interface.xmit_glue_ntb == NULL) { - TU_LOG_DRV("(EE) tud_network_xmit: no buffer\n");// must not happen (really) - return; - } + if (ncm_interface.xmit_glue_ntb == NULL) { + TU_LOG_DRV("(EE) tud_network_xmit: no buffer\n"); // must not happen (really) + return; + } - xmit_ntb_t *ntb = ncm_interface.xmit_glue_ntb; + xmit_ntb_t *ntb = ncm_interface.xmit_glue_ntb; - // copy new datagram to the end of the current NTB - uint16_t size = tud_network_xmit_cb(ntb->data + ntb->nth.wBlockLength, ref, arg); + // copy new datagram to the end of the current NTB + uint16_t size = tud_network_xmit_cb(ntb->data + ntb->nth.wBlockLength, ref, arg); - // correct NTB internals - ntb->ndp_datagram[ncm_interface.xmit_glue_ntb_datagram_ndx].wDatagramIndex = ntb->nth.wBlockLength; - ntb->ndp_datagram[ncm_interface.xmit_glue_ntb_datagram_ndx].wDatagramLength = size; - ncm_interface.xmit_glue_ntb_datagram_ndx += 1; + // correct NTB internals + ntb->ndp_datagram[ncm_interface.xmit_glue_ntb_datagram_ndx].wDatagramIndex = + ntb->nth.wBlockLength; + ntb->ndp_datagram[ncm_interface.xmit_glue_ntb_datagram_ndx].wDatagramLength = size; + ncm_interface.xmit_glue_ntb_datagram_ndx += 1; - ntb->nth.wBlockLength += (uint16_t) (size + XMIT_ALIGN_OFFSET(size)); + ntb->nth.wBlockLength += (uint16_t)(size + XMIT_ALIGN_OFFSET(size)); - if (ntb->nth.wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { - TU_LOG_DRV("(EE) tud_network_xmit: buffer overflow\n"); // must not happen (really) - return; - } + if (ntb->nth.wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { + TU_LOG_DRV("(EE) tud_network_xmit: buffer overflow\n"); // must not happen (really) + return; + } - xmit_start_if_possible(ncm_interface.rhport); + xmit_start_if_possible(ncm_interface.rhport); } // tud_network_xmit /** * Keep the receive logic busy and transfer pending packets to the glue logic. */ -void tud_network_recv_renew(void) { - TU_LOG_DRV("tud_network_recv_renew()\n"); +void tud_network_recv_renew(void) +{ + TU_LOG_DRV("tud_network_recv_renew()\n"); - recv_transfer_datagram_to_glue_logic(); - recv_try_to_start_new_reception(ncm_interface.rhport); + recv_transfer_datagram_to_glue_logic(); + recv_try_to_start_new_reception(ncm_interface.rhport); } // tud_network_recv_renew /** * Same as tud_network_recv_renew() but knows \a rhport */ -void tud_network_recv_renew_r(uint8_t rhport) { - TU_LOG_DRV("tud_network_recv_renew_r(%d)\n", rhport); +void tud_network_recv_renew_r(uint8_t rhport) +{ + TU_LOG_DRV("tud_network_recv_renew_r(%d)\n", rhport); - ncm_interface.rhport = rhport; - tud_network_recv_renew(); + ncm_interface.rhport = rhport; + tud_network_recv_renew(); } // tud_network_recv_renew //----------------------------------------------------------------------------- @@ -715,34 +770,37 @@ void tud_network_recv_renew_r(uint8_t rhport) { * Initialize the driver data structures. * Might be called several times. */ -void netd_init(void) { - TU_LOG_DRV("netd_init()\n"); +void netd_init(void) +{ + TU_LOG_DRV("netd_init()\n"); - memset(&ncm_interface, 0, sizeof(ncm_interface)); + memset(&ncm_interface, 0, sizeof(ncm_interface)); - for (int i = 0; i < XMIT_NTB_N; ++i) { - ncm_interface.xmit_free_ntb[i] = ncm_interface.xmit_ntb + i; - } - for (int i = 0; i < RECV_NTB_N; ++i) { - ncm_interface.recv_free_ntb[i] = ncm_interface.recv_ntb + i; - } + for (int i = 0; i < XMIT_NTB_N; ++i) { + ncm_interface.xmit_free_ntb[i] = ncm_interface.xmit_ntb + i; + } + for (int i = 0; i < RECV_NTB_N; ++i) { + ncm_interface.recv_free_ntb[i] = ncm_interface.recv_ntb + i; + } } // netd_init /** * Deinit driver */ -bool netd_deinit(void) { - return true; +bool netd_deinit(void) +{ + return true; } /** * Resets the port. * In this driver this is the same as netd_init() */ -void netd_reset(uint8_t rhport) { - (void) rhport; +void netd_reset(uint8_t rhport) +{ + (void)rhport; - netd_init(); + netd_init(); } // netd_reset /** @@ -759,137 +817,142 @@ void netd_reset(uint8_t rhport) { * - \a ep_notif, \a ep_in and \a ep_out are set * - USB interface is open */ -uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - TU_ASSERT(ncm_interface.ep_notif == 0, 0);// assure that the interface is only opened once - - ncm_interface.itf_num = itf_desc->bInterfaceNumber;// management interface +uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +{ + TU_ASSERT(ncm_interface.ep_notif == 0, 0); // assure that the interface is only opened once + + ncm_interface.itf_num = itf_desc->bInterfaceNumber; // management interface + + // skip the two first entries and the following TUSB_DESC_CS_INTERFACE entries + uint16_t drv_len = sizeof(tusb_desc_interface_t); + uint8_t const *p_desc = tu_desc_next(itf_desc); + while (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && drv_len <= max_len) { + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - // skip the two first entries and the following TUSB_DESC_CS_INTERFACE entries - uint16_t drv_len = sizeof(tusb_desc_interface_t); - uint8_t const *p_desc = tu_desc_next(itf_desc); - while (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && drv_len <= max_len) { + // get notification endpoint + TU_ASSERT(tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT, 0); + TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *)p_desc), 0); + ncm_interface.ep_notif = ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress; drv_len += tu_desc_len(p_desc); p_desc = tu_desc_next(p_desc); - } - - // get notification endpoint - TU_ASSERT(tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT, 0); - TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), 0); - ncm_interface.ep_notif = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress; - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - // skip the following TUSB_DESC_INTERFACE entries (which must be TUSB_CLASS_CDC_DATA) - while (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && drv_len <= max_len) { - tusb_desc_interface_t const *data_itf_desc = (tusb_desc_interface_t const *) p_desc; - TU_ASSERT(data_itf_desc->bInterfaceClass == TUSB_CLASS_CDC_DATA, 0); + // skip the following TUSB_DESC_INTERFACE entries (which must be TUSB_CLASS_CDC_DATA) + while (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && drv_len <= max_len) { + tusb_desc_interface_t const *data_itf_desc = (tusb_desc_interface_t const *)p_desc; + TU_ASSERT(data_itf_desc->bInterfaceClass == TUSB_CLASS_CDC_DATA, 0); - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - // a TUSB_DESC_ENDPOINT (actually two) must follow, open these endpoints - TU_ASSERT(tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT, 0); - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &ncm_interface.ep_out, &ncm_interface.ep_in)); - drv_len += 2 * sizeof(tusb_desc_endpoint_t); + // a TUSB_DESC_ENDPOINT (actually two) must follow, open these endpoints + TU_ASSERT(tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT, 0); + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &ncm_interface.ep_out, + &ncm_interface.ep_in)); + drv_len += 2 * sizeof(tusb_desc_endpoint_t); - return drv_len; + return drv_len; } // netd_open /** * Handle TinyUSB requests to process transfer events. */ -bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) result; - - if (ep_addr == ncm_interface.ep_out) { - // new NTB received - // - make the NTB valid - // - if ready transfer datagrams to the glue logic for further processing - // - if there is a free receive buffer, initiate reception - if (!recv_validate_datagram(ncm_interface.recv_tinyusb_ntb, xferred_bytes)) { - // verification failed: ignore NTB and return it to free - TU_LOG_DRV("(EE) VALIDATION FAILED. WHAT CAN WE DO IN THIS CASE?\n"); - } else { - // packet ok -> put it into ready list - recv_put_ntb_into_ready_list(ncm_interface.recv_tinyusb_ntb); - } - ncm_interface.recv_tinyusb_ntb = NULL; - tud_network_recv_renew_r(rhport); - } else if (ep_addr == ncm_interface.ep_in) { - // transmission of an NTB finished - // - free the transmitted NTB buffer - // - insert ZLPs when necessary - // - if there is another transmit NTB waiting, try to start transmission - xmit_put_ntb_into_free_list(ncm_interface.xmit_tinyusb_ntb); - ncm_interface.xmit_tinyusb_ntb = NULL; - if (!xmit_insert_required_zlp(rhport, xferred_bytes)) { - xmit_start_if_possible(rhport); - } - } else if (ep_addr == ncm_interface.ep_notif) { - // next transfer on notification channel - notification_xmit(rhport, true); - } - - return true; +bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) +{ + (void)result; + + if (ep_addr == ncm_interface.ep_out) { + // new NTB received + // - make the NTB valid + // - if ready transfer datagrams to the glue logic for further processing + // - if there is a free receive buffer, initiate reception + if (!recv_validate_datagram(ncm_interface.recv_tinyusb_ntb, xferred_bytes)) { + // verification failed: ignore NTB and return it to free + TU_LOG_DRV("(EE) VALIDATION FAILED. WHAT CAN WE DO IN THIS CASE?\n"); + } else { + // packet ok -> put it into ready list + recv_put_ntb_into_ready_list(ncm_interface.recv_tinyusb_ntb); + } + ncm_interface.recv_tinyusb_ntb = NULL; + tud_network_recv_renew_r(rhport); + } else if (ep_addr == ncm_interface.ep_in) { + // transmission of an NTB finished + // - free the transmitted NTB buffer + // - insert ZLPs when necessary + // - if there is another transmit NTB waiting, try to start transmission + xmit_put_ntb_into_free_list(ncm_interface.xmit_tinyusb_ntb); + ncm_interface.xmit_tinyusb_ntb = NULL; + if (!xmit_insert_required_zlp(rhport, xferred_bytes)) { + xmit_start_if_possible(rhport); + } + } else if (ep_addr == ncm_interface.ep_notif) { + // next transfer on notification channel + notification_xmit(rhport, true); + } + + return true; } // netd_xfer_cb /** * Respond to TinyUSB control requests. * At startup transmission of notification packets are done here. */ -bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - if (stage != CONTROL_STAGE_SETUP) { - return true; - } +bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +{ + if (stage != CONTROL_STAGE_SETUP) { + return true; + } - switch (request->bmRequestType_bit.type) { + switch (request->bmRequestType_bit.type) { case TUSB_REQ_TYPE_STANDARD: - switch (request->bRequest) { + switch (request->bRequest) { case TUSB_REQ_GET_INTERFACE: { - TU_VERIFY(ncm_interface.itf_num + 1 == request->wIndex, false); + TU_VERIFY(ncm_interface.itf_num + 1 == request->wIndex, false); - tud_control_xfer(rhport, request, &ncm_interface.itf_data_alt, 1); + tud_control_xfer(rhport, request, &ncm_interface.itf_data_alt, 1); } break; case TUSB_REQ_SET_INTERFACE: { - TU_VERIFY(ncm_interface.itf_num + 1 == request->wIndex && request->wValue < 2, false); + TU_VERIFY(ncm_interface.itf_num + 1 == request->wIndex && request->wValue < 2, false); - ncm_interface.itf_data_alt = (uint8_t) request->wValue; + ncm_interface.itf_data_alt = (uint8_t)request->wValue; - if (ncm_interface.itf_data_alt == 1) { - tud_network_recv_renew_r(rhport); - notification_xmit(rhport, false); - } - tud_control_status(rhport, request); + if (ncm_interface.itf_data_alt == 1) { + tud_network_recv_renew_r(rhport); + notification_xmit(rhport, false); + } + tud_control_status(rhport, request); } break; // unsupported request default: - return false; - } - break; + return false; + } + break; case TUSB_REQ_TYPE_CLASS: - TU_VERIFY(ncm_interface.itf_num == request->wIndex, false); - switch (request->bRequest) { + TU_VERIFY(ncm_interface.itf_num == request->wIndex, false); + switch (request->bRequest) { case NCM_GET_NTB_PARAMETERS: { - // transfer NTB parameters to host. - tud_control_xfer(rhport, request, (void *) (uintptr_t) &ntb_parameters, sizeof(ntb_parameters)); + // transfer NTB parameters to host. + tud_control_xfer(rhport, request, (void *)(uintptr_t)&ntb_parameters, + sizeof(ntb_parameters)); } break; - // unsupported request + // unsupported request default: - return false; - } - break; - // unsupported request + return false; + } + break; + // unsupported request default: - return false; - } + return false; + } - return true; + return true; } // netd_control_xfer_cb #endif // ( CFG_TUD_ENABLED && CFG_TUD_NCM ) diff --git a/Libraries/tinyusb/src/class/net/net_device.h b/Libraries/tinyusb/src/class/net/net_device.h index 4c9a92f2d04..330c063e3e9 100644 --- a/Libraries/tinyusb/src/class/net/net_device.h +++ b/Libraries/tinyusb/src/class/net/net_device.h @@ -40,19 +40,14 @@ /* Maximum Transmission Unit (in bytes) of the network, including Ethernet header */ #ifndef CFG_TUD_NET_MTU -#define CFG_TUD_NET_MTU 1514 +#define CFG_TUD_NET_MTU 1514 #endif - // Table 4.3 Data Class Interface Protocol Codes -typedef enum -{ - NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK = 0x01 -} ncm_data_interface_protocol_code_t; - +typedef enum { NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK = 0x01 } ncm_data_interface_protocol_code_t; #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -90,16 +85,16 @@ extern uint8_t tud_network_mac_address[6]; //--------------------------------------------------------------------+ // INTERNAL USBD-CLASS DRIVER API //--------------------------------------------------------------------+ -void netd_init (void); -bool netd_deinit (void); -void netd_reset (uint8_t rhport); -uint16_t netd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool netd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); -bool netd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); -void netd_report (uint8_t *buf, uint16_t len); +void netd_init(void); +bool netd_deinit(void); +void netd_reset(uint8_t rhport); +uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); +void netd_report(uint8_t *buf, uint16_t len); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_NET_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/usbtmc/usbtmc.h b/Libraries/tinyusb/src/class/usbtmc/usbtmc.h index 327de087c79..828b6ef448f 100644 --- a/Libraries/tinyusb/src/class/usbtmc/usbtmc.h +++ b/Libraries/tinyusb/src/class/usbtmc/usbtmc.h @@ -30,7 +30,6 @@ #include "common/tusb_common.h" - /* Implements USBTMC Revision 1.0, April 14, 2003 String descriptors must have a "LANGID=0x409"/US English string. @@ -46,90 +45,82 @@ #define USBTMC_488_VERSION 0x0100 typedef enum { - USBTMC_MSGID_DEV_DEP_MSG_OUT = 1u, - USBTMC_MSGID_DEV_DEP_MSG_IN = 2u, - USBTMC_MSGID_VENDOR_SPECIFIC_MSG_OUT = 126u, - USBTMC_MSGID_VENDOR_SPECIFIC_IN = 127u, - USBTMC_MSGID_USB488_TRIGGER = 128u, + USBTMC_MSGID_DEV_DEP_MSG_OUT = 1u, + USBTMC_MSGID_DEV_DEP_MSG_IN = 2u, + USBTMC_MSGID_VENDOR_SPECIFIC_MSG_OUT = 126u, + USBTMC_MSGID_VENDOR_SPECIFIC_IN = 127u, + USBTMC_MSGID_USB488_TRIGGER = 128u, } usbtmc_msgid_enum; /// \brief Message header (For BULK OUT and BULK IN); 4 bytes -typedef struct TU_ATTR_PACKED -{ - uint8_t MsgID ; ///< Message type ID (usbtmc_msgid_enum) - uint8_t bTag ; ///< Transfer ID 1<=bTag<=255 - uint8_t bTagInverse ; ///< Complement of the tag - uint8_t _reserved ; ///< Must be 0x00 +typedef struct TU_ATTR_PACKED { + uint8_t MsgID; ///< Message type ID (usbtmc_msgid_enum) + uint8_t bTag; ///< Transfer ID 1<=bTag<=255 + uint8_t bTagInverse; ///< Complement of the tag + uint8_t _reserved; ///< Must be 0x00 } usbtmc_msg_header_t; -typedef struct TU_ATTR_PACKED -{ - usbtmc_msg_header_t header; - uint8_t data[8]; +typedef struct TU_ATTR_PACKED { + usbtmc_msg_header_t header; + uint8_t data[8]; } usbtmc_msg_generic_t; /* Uses on the bulk-out endpoint: */ // Next 8 bytes are message-specific typedef struct TU_ATTR_PACKED { - usbtmc_msg_header_t header ; ///< Header - uint32_t TransferSize ; ///< Transfer size; LSB first - struct TU_ATTR_PACKED - { - unsigned int EOM : 1 ; ///< EOM set on last byte - } bmTransferAttributes; - uint8_t _reserved[3]; + usbtmc_msg_header_t header; ///< Header + uint32_t TransferSize; ///< Transfer size; LSB first + struct TU_ATTR_PACKED { + unsigned int EOM : 1; ///< EOM set on last byte + } bmTransferAttributes; + uint8_t _reserved[3]; } usbtmc_msg_request_dev_dep_out; TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_dev_dep_out) == 12u, "struct wrong length"); // Next 8 bytes are message-specific -typedef struct TU_ATTR_PACKED -{ - usbtmc_msg_header_t header ; ///< Header - uint32_t TransferSize ; ///< Transfer size; LSB first - struct TU_ATTR_PACKED - { - unsigned int TermCharEnabled : 1 ; ///< "The Bulk-IN transfer must terminate on the specified TermChar."; CAPABILITIES must list TermChar - } bmTransferAttributes; - uint8_t TermChar; - uint8_t _reserved[2]; +typedef struct TU_ATTR_PACKED { + usbtmc_msg_header_t header; ///< Header + uint32_t TransferSize; ///< Transfer size; LSB first + struct TU_ATTR_PACKED { + unsigned int + TermCharEnabled : 1; ///< "The Bulk-IN transfer must terminate on the specified TermChar."; CAPABILITIES must list TermChar + } bmTransferAttributes; + uint8_t TermChar; + uint8_t _reserved[2]; } usbtmc_msg_request_dev_dep_in; TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_dev_dep_in) == 12u, "struct wrong length"); /* Bulk-in headers */ -typedef struct TU_ATTR_PACKED -{ - usbtmc_msg_header_t header; - uint32_t TransferSize; - struct TU_ATTR_PACKED - { - uint8_t EOM: 1; ///< Last byte of transfer is the end of the message - uint8_t UsingTermChar: 1; ///< Support TermChar && Request.TermCharEnabled && last char in transfer is TermChar - } bmTransferAttributes; - uint8_t _reserved[3]; +typedef struct TU_ATTR_PACKED { + usbtmc_msg_header_t header; + uint32_t TransferSize; + struct TU_ATTR_PACKED { + uint8_t EOM : 1; ///< Last byte of transfer is the end of the message + uint8_t + UsingTermChar : 1; ///< Support TermChar && Request.TermCharEnabled && last char in transfer is TermChar + } bmTransferAttributes; + uint8_t _reserved[3]; } usbtmc_msg_dev_dep_msg_in_header_t; TU_VERIFY_STATIC(sizeof(usbtmc_msg_dev_dep_msg_in_header_t) == 12u, "struct wrong length"); /* Unsupported vendor things.... Are these ever used?*/ -typedef struct TU_ATTR_PACKED -{ - usbtmc_msg_header_t header ; ///< Header - uint32_t TransferSize ; ///< Transfer size; LSB first - uint8_t _reserved[4]; +typedef struct TU_ATTR_PACKED { + usbtmc_msg_header_t header; ///< Header + uint32_t TransferSize; ///< Transfer size; LSB first + uint8_t _reserved[4]; } usbtmc_msg_request_vendor_specific_out; - TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_vendor_specific_out) == 12u, "struct wrong length"); -typedef struct TU_ATTR_PACKED -{ - usbtmc_msg_header_t header ; ///< Header - uint32_t TransferSize ; ///< Transfer size; LSB first - uint8_t _reserved[4]; +typedef struct TU_ATTR_PACKED { + usbtmc_msg_header_t header; ///< Header + uint32_t TransferSize; ///< Transfer size; LSB first + uint8_t _reserved[4]; } usbtmc_msg_request_vendor_specific_in; TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_vendor_specific_in) == 12u, "struct wrong length"); @@ -139,77 +130,82 @@ TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_vendor_specific_in) == 12u, "struct w /* typedef struct TU_ATTR_PACKED { struct { - unsigned int Recipient : 5 ; ///< EOM set on last byte - unsigned int Type : 2 ; ///< EOM set on last byte - unsigned int DirectionToHost : 1 ; ///< 0 is OUT, 1 is IN + unsigned int Recipient : 5{} +///< EOM set on last byte + unsigned int Type : 2{} +///< EOM set on last byte + unsigned int DirectionToHost : 1{} +///< 0 is OUT, 1 is IN } bmRequestType; - uint8_t bRequest ; ///< If bmRequestType.Type = Class, see usmtmc_request_type_enum - uint16_t wValue ; - uint16_t wIndex ; - uint16_t wLength ; // Number of bytes in data stage + uint8_t bRequest{} +///< If bmRequestType.Type = Class, see usmtmc_request_type_enum + uint16_t wValue{} + uint16_t wIndex{} + uint16_t wLength{} +// Number of bytes in data stage } usbtmc_class_specific_control_req; */ // bulk-in protocol errors enum { - USBTMC_BULK_IN_ERR_INCOMPLETE_HEADER = 1u, - USBTMC_BULK_IN_ERR_UNSUPPORTED = 2u, - USBTMC_BULK_IN_ERR_BAD_PARAMETER = 3u, - USBTMC_BULK_IN_ERR_DATA_TOO_SHORT = 4u, - USBTMC_BULK_IN_ERR_DATA_TOO_LONG = 5u, + USBTMC_BULK_IN_ERR_INCOMPLETE_HEADER = 1u, + USBTMC_BULK_IN_ERR_UNSUPPORTED = 2u, + USBTMC_BULK_IN_ERR_BAD_PARAMETER = 3u, + USBTMC_BULK_IN_ERR_DATA_TOO_SHORT = 4u, + USBTMC_BULK_IN_ERR_DATA_TOO_LONG = 5u, }; // built-in halt errors enum { - USBTMC_BULK_IN_ERR = 1u, ///< receives a USBTMC command message that expects a response while a - /// Bulk-IN transfer is in progress + USBTMC_BULK_IN_ERR = 1u, ///< receives a USBTMC command message that expects a response while a + /// Bulk-IN transfer is in progress }; typedef enum { - USBTMC_bREQUEST_INITIATE_ABORT_BULK_OUT = 1u, - USBTMC_bREQUEST_CHECK_ABORT_BULK_OUT_STATUS = 2u, - USBTMC_bREQUEST_INITIATE_ABORT_BULK_IN = 3u, - USBTMC_bREQUEST_CHECK_ABORT_BULK_IN_STATUS = 4u, - USBTMC_bREQUEST_INITIATE_CLEAR = 5u, - USBTMC_bREQUEST_CHECK_CLEAR_STATUS = 6u, - USBTMC_bREQUEST_GET_CAPABILITIES = 7u, - - USBTMC_bREQUEST_INDICATOR_PULSE = 64u, // Optional - - /****** USBTMC 488 *************/ - USB488_bREQUEST_READ_STATUS_BYTE = 128u, - USB488_bREQUEST_REN_CONTROL = 160u, - USB488_bREQUEST_GO_TO_LOCAL = 161u, - USB488_bREQUEST_LOCAL_LOCKOUT = 162u, + USBTMC_bREQUEST_INITIATE_ABORT_BULK_OUT = 1u, + USBTMC_bREQUEST_CHECK_ABORT_BULK_OUT_STATUS = 2u, + USBTMC_bREQUEST_INITIATE_ABORT_BULK_IN = 3u, + USBTMC_bREQUEST_CHECK_ABORT_BULK_IN_STATUS = 4u, + USBTMC_bREQUEST_INITIATE_CLEAR = 5u, + USBTMC_bREQUEST_CHECK_CLEAR_STATUS = 6u, + USBTMC_bREQUEST_GET_CAPABILITIES = 7u, + + USBTMC_bREQUEST_INDICATOR_PULSE = 64u, // Optional + + /****** USBTMC 488 *************/ + USB488_bREQUEST_READ_STATUS_BYTE = 128u, + USB488_bREQUEST_REN_CONTROL = 160u, + USB488_bREQUEST_GO_TO_LOCAL = 161u, + USB488_bREQUEST_LOCAL_LOCKOUT = 162u, } usmtmc_request_type_enum; typedef enum { - // The last and first valid bNotify1 for use by the USBTMC class specification. - USBTMC_bNOTIFY1_USBTMC_FIRST = 0x00, - USBTMC_bNOTIFY1_USBTMC_LAST = 0x3F, + // The last and first valid bNotify1 for use by the USBTMC class specification. + USBTMC_bNOTIFY1_USBTMC_FIRST = 0x00, + USBTMC_bNOTIFY1_USBTMC_LAST = 0x3F, - // The last and first valid bNotify1 for use by vendors. - USBTMC_bNOTIFY1_VENDOR_SPECIFIC_FIRST = 0x40, - USBTMC_bNOTIFY1_VENDOR_SPECIFIC_LAST = 0x7F, + // The last and first valid bNotify1 for use by vendors. + USBTMC_bNOTIFY1_VENDOR_SPECIFIC_FIRST = 0x40, + USBTMC_bNOTIFY1_VENDOR_SPECIFIC_LAST = 0x7F, - // The last and first valid bNotify1 for use by USBTMC subclass specifications. - USBTMC_bNOTIFY1_SUBCLASS_FIRST = 0x80, - USBTMC_bNOTIFY1_SUBCLASS_LAST = 0xFF, + // The last and first valid bNotify1 for use by USBTMC subclass specifications. + USBTMC_bNOTIFY1_SUBCLASS_FIRST = 0x80, + USBTMC_bNOTIFY1_SUBCLASS_LAST = 0xFF, - // From the USB488 Subclass Specification, Section 3.4. - USB488_bNOTIFY1_SRQ = 0x81, + // From the USB488 Subclass Specification, Section 3.4. + USB488_bNOTIFY1_SRQ = 0x81, } usbtmc_int_in_payload_format; typedef enum { - USBTMC_STATUS_SUCCESS = 0x01, - USBTMC_STATUS_PENDING = 0x02, - USBTMC_STATUS_FAILED = 0x80, - USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS = 0x81, - USBTMC_STATUS_SPLIT_NOT_IN_PROGRESS = 0x82, - USBTMC_STATUS_SPLIT_IN_PROGRESS = 0x83, - - /****** USBTMC 488 *************/ - USB488_STATUS_INTERRUPT_IN_BUSY = 0x20 + USBTMC_STATUS_SUCCESS = 0x01, + USBTMC_STATUS_PENDING = 0x02, + USBTMC_STATUS_FAILED = 0x80, + USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS = 0x81, + USBTMC_STATUS_SPLIT_NOT_IN_PROGRESS = 0x82, + USBTMC_STATUS_SPLIT_IN_PROGRESS = 0x83, + + /****** USBTMC 488 *************/ + USB488_STATUS_INTERRUPT_IN_BUSY = 0x20 } usbtmc_status_enum; /************************************************************ @@ -217,125 +213,109 @@ typedef enum { */ typedef struct TU_ATTR_PACKED { - uint8_t USBTMC_status; ///< usbtmc_status_enum - uint8_t _reserved; - uint16_t bcdUSBTMC; ///< USBTMC_VERSION - - struct TU_ATTR_PACKED - { - unsigned int listenOnly :1; - unsigned int talkOnly :1; - unsigned int supportsIndicatorPulse :1; - } bmIntfcCapabilities; - struct TU_ATTR_PACKED - { - unsigned int canEndBulkInOnTermChar :1; - } bmDevCapabilities; - uint8_t _reserved2[6]; - uint8_t _reserved3[12]; + uint8_t USBTMC_status; ///< usbtmc_status_enum + uint8_t _reserved; + uint16_t bcdUSBTMC; ///< USBTMC_VERSION + + struct TU_ATTR_PACKED { + unsigned int listenOnly : 1; + unsigned int talkOnly : 1; + unsigned int supportsIndicatorPulse : 1; + } bmIntfcCapabilities; + struct TU_ATTR_PACKED { + unsigned int canEndBulkInOnTermChar : 1; + } bmDevCapabilities; + uint8_t _reserved2[6]; + uint8_t _reserved3[12]; } usbtmc_response_capabilities_t; TU_VERIFY_STATIC(sizeof(usbtmc_response_capabilities_t) == 0x18, "struct wrong length"); -typedef struct TU_ATTR_PACKED -{ - uint8_t USBTMC_status; - struct TU_ATTR_PACKED - { - unsigned int BulkInFifoBytes :1; - } bmClear; +typedef struct TU_ATTR_PACKED { + uint8_t USBTMC_status; + struct TU_ATTR_PACKED { + unsigned int BulkInFifoBytes : 1; + } bmClear; } usbtmc_get_clear_status_rsp_t; TU_VERIFY_STATIC(sizeof(usbtmc_get_clear_status_rsp_t) == 2u, "struct wrong length"); // Used for both abort bulk IN and bulk OUT -typedef struct TU_ATTR_PACKED -{ - uint8_t USBTMC_status; - uint8_t bTag; +typedef struct TU_ATTR_PACKED { + uint8_t USBTMC_status; + uint8_t bTag; } usbtmc_initiate_abort_rsp_t; TU_VERIFY_STATIC(sizeof(usbtmc_get_clear_status_rsp_t) == 2u, "struct wrong length"); // Used for both check_abort_bulk_in_status and check_abort_bulk_out_status -typedef struct TU_ATTR_PACKED -{ - uint8_t USBTMC_status; - struct TU_ATTR_PACKED - { - unsigned int BulkInFifoBytes : 1; ///< Has queued data or a short packet that is queued - } bmAbortBulkIn; - uint8_t _reserved[2]; ///< Must be zero - uint32_t NBYTES_RXD_TXD; +typedef struct TU_ATTR_PACKED { + uint8_t USBTMC_status; + struct TU_ATTR_PACKED { + unsigned int BulkInFifoBytes : 1; ///< Has queued data or a short packet that is queued + } bmAbortBulkIn; + uint8_t _reserved[2]; ///< Must be zero + uint32_t NBYTES_RXD_TXD; } usbtmc_check_abort_bulk_rsp_t; TU_VERIFY_STATIC(sizeof(usbtmc_check_abort_bulk_rsp_t) == 8u, "struct wrong length"); -typedef struct TU_ATTR_PACKED -{ - uint8_t USBTMC_status; ///< usbtmc_status_enum - uint8_t _reserved; - uint16_t bcdUSBTMC; ///< USBTMC_VERSION - - struct TU_ATTR_PACKED - { - uint8_t listenOnly :1; - uint8_t talkOnly :1; - uint8_t supportsIndicatorPulse :1; - } bmIntfcCapabilities; - - struct TU_ATTR_PACKED - { - uint8_t canEndBulkInOnTermChar :1; - } bmDevCapabilities; - - uint8_t _reserved2[6]; - uint16_t bcdUSB488; - - struct TU_ATTR_PACKED - { - uint8_t supportsTrigger :1; - uint8_t supportsREN_GTL_LLO :1; - uint8_t is488_2 :1; - } bmIntfcCapabilities488; - - struct TU_ATTR_PACKED - { - uint8_t DT1 :1; - uint8_t RL1 :1; - uint8_t SR1 :1; - uint8_t SCPI :1; - } bmDevCapabilities488; - uint8_t _reserved3[8]; +typedef struct TU_ATTR_PACKED { + uint8_t USBTMC_status; ///< usbtmc_status_enum + uint8_t _reserved; + uint16_t bcdUSBTMC; ///< USBTMC_VERSION + + struct TU_ATTR_PACKED { + uint8_t listenOnly : 1; + uint8_t talkOnly : 1; + uint8_t supportsIndicatorPulse : 1; + } bmIntfcCapabilities; + + struct TU_ATTR_PACKED { + uint8_t canEndBulkInOnTermChar : 1; + } bmDevCapabilities; + + uint8_t _reserved2[6]; + uint16_t bcdUSB488; + + struct TU_ATTR_PACKED { + uint8_t supportsTrigger : 1; + uint8_t supportsREN_GTL_LLO : 1; + uint8_t is488_2 : 1; + } bmIntfcCapabilities488; + + struct TU_ATTR_PACKED { + uint8_t DT1 : 1; + uint8_t RL1 : 1; + uint8_t SR1 : 1; + uint8_t SCPI : 1; + } bmDevCapabilities488; + uint8_t _reserved3[8]; } usbtmc_response_capabilities_488_t; TU_VERIFY_STATIC(sizeof(usbtmc_response_capabilities_488_t) == 0x18, "struct wrong length"); -typedef struct TU_ATTR_PACKED -{ - uint8_t USBTMC_status; - uint8_t bTag; - uint8_t statusByte; +typedef struct TU_ATTR_PACKED { + uint8_t USBTMC_status; + uint8_t bTag; + uint8_t statusByte; } usbtmc_read_stb_rsp_488_t; TU_VERIFY_STATIC(sizeof(usbtmc_read_stb_rsp_488_t) == 3u, "struct wrong length"); -typedef struct TU_ATTR_PACKED -{ - uint8_t bNotify1; // Must be USB488_bNOTIFY1_SRQ - uint8_t StatusByte; +typedef struct TU_ATTR_PACKED { + uint8_t bNotify1; // Must be USB488_bNOTIFY1_SRQ + uint8_t StatusByte; } usbtmc_srq_interrupt_488_t; TU_VERIFY_STATIC(sizeof(usbtmc_srq_interrupt_488_t) == 2u, "struct wrong length"); -typedef struct TU_ATTR_PACKED -{ - struct TU_ATTR_PACKED - { - unsigned int bTag : 7; - unsigned int one : 1; - } bNotify1; - uint8_t StatusByte; +typedef struct TU_ATTR_PACKED { + struct TU_ATTR_PACKED { + unsigned int bTag : 7; + unsigned int one : 1; + } bNotify1; + uint8_t StatusByte; } usbtmc_read_stb_interrupt_488_t; TU_VERIFY_STATIC(sizeof(usbtmc_read_stb_interrupt_488_t) == 2u, "struct wrong length"); diff --git a/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.c b/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.c index 129ff465de9..7cfc4becfff 100644 --- a/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.c +++ b/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.c @@ -35,7 +35,6 @@ * host. */ - /* * In the case of single-CPU "no OS", this task is never preempted other than by * interrupts, and the USBTMC code isn't called by interrupts, so all is OK. For "no OS", @@ -59,7 +58,6 @@ * */ - // TODO: // USBTMC 3.2.2 error conditions not strictly followed // No local lock-out, REN, or GTL. @@ -96,67 +94,64 @@ tu_static char logMsg[150]; * consistent with USBTMC. */ -typedef enum -{ - STATE_CLOSED, // Endpoints have not yet been opened since USB reset - STATE_NAK, // Bulk-out endpoint is in NAK state. - STATE_IDLE, // Bulk-out endpoint is waiting for CMD. - STATE_RCV, // Bulk-out is receiving DEV_DEP message - STATE_TX_REQUESTED, - STATE_TX_INITIATED, - STATE_TX_SHORTED, - STATE_CLEARING, - STATE_ABORTING_BULK_IN, - STATE_ABORTING_BULK_IN_SHORTED, // aborting, and short packet has been queued for transmission - STATE_ABORTING_BULK_IN_ABORTED, // aborting, and short packet has been transmitted - STATE_ABORTING_BULK_OUT, - STATE_NUM_STATES +typedef enum { + STATE_CLOSED, // Endpoints have not yet been opened since USB reset + STATE_NAK, // Bulk-out endpoint is in NAK state. + STATE_IDLE, // Bulk-out endpoint is waiting for CMD. + STATE_RCV, // Bulk-out is receiving DEV_DEP message + STATE_TX_REQUESTED, + STATE_TX_INITIATED, + STATE_TX_SHORTED, + STATE_CLEARING, + STATE_ABORTING_BULK_IN, + STATE_ABORTING_BULK_IN_SHORTED, // aborting, and short packet has been queued for transmission + STATE_ABORTING_BULK_IN_ABORTED, // aborting, and short packet has been transmitted + STATE_ABORTING_BULK_OUT, + STATE_NUM_STATES } usbtmcd_state_enum; #if (CFG_TUD_USBTMC_ENABLE_488) - typedef usbtmc_response_capabilities_488_t usbtmc_capabilities_specific_t; +typedef usbtmc_response_capabilities_488_t usbtmc_capabilities_specific_t; #else - typedef usbtmc_response_capabilities_t usbtmc_capabilities_specific_t; +typedef usbtmc_response_capabilities_t usbtmc_capabilities_specific_t; #endif - -typedef struct -{ - volatile usbtmcd_state_enum state; - - uint8_t itf_id; - uint8_t rhport; - uint8_t ep_bulk_in; - uint8_t ep_bulk_out; - uint8_t ep_int_in; - uint32_t ep_bulk_in_wMaxPacketSize; - uint32_t ep_bulk_out_wMaxPacketSize; - // IN buffer is only used for first packet, not the remainder - // in order to deal with prepending header - CFG_TUSB_MEM_ALIGN uint8_t ep_bulk_in_buf[USBTMCD_BUFFER_SIZE]; - // OUT buffer receives one packet at a time - CFG_TUSB_MEM_ALIGN uint8_t ep_bulk_out_buf[USBTMCD_BUFFER_SIZE]; - // Buffer int msg to ensure alignment and placement correctness - CFG_TUSB_MEM_ALIGN uint8_t ep_int_in_buf[CFG_TUD_USBTMC_INT_EP_SIZE]; - - uint32_t transfer_size_remaining; // also used for requested length for bulk IN. - uint32_t transfer_size_sent; // To keep track of data bytes that have been queued in FIFO (not header bytes) - - uint8_t lastBulkOutTag; // used for aborts (mostly) - uint8_t lastBulkInTag; // used for aborts (mostly) - - uint8_t const * devInBuffer; // pointer to application-layer used for transmissions - - usbtmc_capabilities_specific_t const * capabilities; +typedef struct { + volatile usbtmcd_state_enum state; + + uint8_t itf_id; + uint8_t rhport; + uint8_t ep_bulk_in; + uint8_t ep_bulk_out; + uint8_t ep_int_in; + uint32_t ep_bulk_in_wMaxPacketSize; + uint32_t ep_bulk_out_wMaxPacketSize; + // IN buffer is only used for first packet, not the remainder + // in order to deal with prepending header + CFG_TUSB_MEM_ALIGN uint8_t ep_bulk_in_buf[USBTMCD_BUFFER_SIZE]; + // OUT buffer receives one packet at a time + CFG_TUSB_MEM_ALIGN uint8_t ep_bulk_out_buf[USBTMCD_BUFFER_SIZE]; + // Buffer int msg to ensure alignment and placement correctness + CFG_TUSB_MEM_ALIGN uint8_t ep_int_in_buf[CFG_TUD_USBTMC_INT_EP_SIZE]; + + uint32_t transfer_size_remaining; // also used for requested length for bulk IN. + uint32_t + transfer_size_sent; // To keep track of data bytes that have been queued in FIFO (not header bytes) + + uint8_t lastBulkOutTag; // used for aborts (mostly) + uint8_t lastBulkInTag; // used for aborts (mostly) + + uint8_t const *devInBuffer; // pointer to application-layer used for transmissions + + usbtmc_capabilities_specific_t const *capabilities; } usbtmc_interface_state_t; -CFG_TUD_MEM_SECTION tu_static usbtmc_interface_state_t usbtmc_state = -{ +CFG_TUD_MEM_SECTION tu_static usbtmc_interface_state_t usbtmc_state = { .itf_id = 0xFF, }; // We need all headers to fit in a single packet in this implementation, 32 bytes will fit all standard USBTMC headers -TU_VERIFY_STATIC(USBTMCD_BUFFER_SIZE >= 32u,"USBTMC dev buffer size too small"); +TU_VERIFY_STATIC(USBTMCD_BUFFER_SIZE >= 32u, "USBTMC dev buffer size too small"); static bool handle_devMsgOutStart(uint8_t rhport, void *data, size_t len); static bool handle_devMsgOut(uint8_t rhport, void *data, size_t len, size_t packetLen); @@ -173,24 +168,27 @@ static OSAL_MUTEX_DEF(usbtmcLockBuffer); osal_mutex_t usbtmcLock; // Our own private lock, mostly for the state variable. -#define criticalEnter() do { (void) osal_mutex_lock(usbtmcLock,OSAL_TIMEOUT_WAIT_FOREVER); } while (0) -#define criticalLeave() do { (void) osal_mutex_unlock(usbtmcLock); } while (0) +#define criticalEnter() \ + do { \ + (void)osal_mutex_lock(usbtmcLock, OSAL_TIMEOUT_WAIT_FOREVER); \ + } while (0) +#define criticalLeave() \ + do { \ + (void)osal_mutex_unlock(usbtmcLock); \ + } while (0) bool atomicChangeState(usbtmcd_state_enum expectedState, usbtmcd_state_enum newState) { - bool ret = true; - criticalEnter(); - usbtmcd_state_enum oldState = usbtmc_state.state; - if (oldState == expectedState) - { - usbtmc_state.state = newState; - } - else - { - ret = false; - } - criticalLeave(); - return ret; + bool ret = true; + criticalEnter(); + usbtmcd_state_enum oldState = usbtmc_state.state; + if (oldState == expectedState) { + usbtmc_state.state = newState; + } else { + ret = false; + } + criticalLeave(); + return ret; } // called from app @@ -200,179 +198,174 @@ bool atomicChangeState(usbtmcd_state_enum expectedState, usbtmcd_state_enum newS // We can't just send the whole thing at once because we need to concatanate the // header with the data. -bool tud_usbtmc_transmit_dev_msg_data( - const void * data, size_t len, - bool endOfMessage, - bool usingTermChar) +bool tud_usbtmc_transmit_dev_msg_data(const void *data, size_t len, bool endOfMessage, + bool usingTermChar) { - const unsigned int txBufLen = sizeof(usbtmc_state.ep_bulk_in_buf); + const unsigned int txBufLen = sizeof(usbtmc_state.ep_bulk_in_buf); #ifndef NDEBUG - TU_ASSERT(len > 0u); - TU_ASSERT(len <= usbtmc_state.transfer_size_remaining); - TU_ASSERT(usbtmc_state.transfer_size_sent == 0u); - if(usingTermChar) - { - TU_ASSERT(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar); - TU_ASSERT(termCharRequested); - TU_ASSERT(((uint8_t const*)data)[len-1u] == termChar); - } + TU_ASSERT(len > 0u); + TU_ASSERT(len <= usbtmc_state.transfer_size_remaining); + TU_ASSERT(usbtmc_state.transfer_size_sent == 0u); + if (usingTermChar) { + TU_ASSERT(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar); + TU_ASSERT(termCharRequested); + TU_ASSERT(((uint8_t const *)data)[len - 1u] == termChar); + } #endif - TU_VERIFY(usbtmc_state.state == STATE_TX_REQUESTED); - usbtmc_msg_dev_dep_msg_in_header_t *hdr = (usbtmc_msg_dev_dep_msg_in_header_t*)usbtmc_state.ep_bulk_in_buf; - tu_varclr(hdr); - hdr->header.MsgID = USBTMC_MSGID_DEV_DEP_MSG_IN; - hdr->header.bTag = usbtmc_state.lastBulkInTag; - hdr->header.bTagInverse = (uint8_t)~(usbtmc_state.lastBulkInTag); - hdr->TransferSize = len; - hdr->bmTransferAttributes.EOM = endOfMessage; - hdr->bmTransferAttributes.UsingTermChar = usingTermChar; - - // Copy in the header - const size_t headerLen = sizeof(*hdr); - const size_t dataLen = ((headerLen + hdr->TransferSize) <= txBufLen) ? - len : (txBufLen - headerLen); - const size_t packetLen = headerLen + dataLen; - - memcpy((uint8_t*)(usbtmc_state.ep_bulk_in_buf) + headerLen, data, dataLen); - usbtmc_state.transfer_size_remaining = len - dataLen; - usbtmc_state.transfer_size_sent = dataLen; - usbtmc_state.devInBuffer = (uint8_t const*) data + (dataLen); - - bool stateChanged = - atomicChangeState(STATE_TX_REQUESTED, (packetLen >= txBufLen) ? STATE_TX_INITIATED : STATE_TX_SHORTED); - TU_VERIFY(stateChanged); - TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf, (uint16_t)packetLen)); - return true; + TU_VERIFY(usbtmc_state.state == STATE_TX_REQUESTED); + usbtmc_msg_dev_dep_msg_in_header_t *hdr = + (usbtmc_msg_dev_dep_msg_in_header_t *)usbtmc_state.ep_bulk_in_buf; + tu_varclr(hdr); + hdr->header.MsgID = USBTMC_MSGID_DEV_DEP_MSG_IN; + hdr->header.bTag = usbtmc_state.lastBulkInTag; + hdr->header.bTagInverse = (uint8_t) ~(usbtmc_state.lastBulkInTag); + hdr->TransferSize = len; + hdr->bmTransferAttributes.EOM = endOfMessage; + hdr->bmTransferAttributes.UsingTermChar = usingTermChar; + + // Copy in the header + const size_t headerLen = sizeof(*hdr); + const size_t dataLen = ((headerLen + hdr->TransferSize) <= txBufLen) ? len : + (txBufLen - headerLen); + const size_t packetLen = headerLen + dataLen; + + memcpy((uint8_t *)(usbtmc_state.ep_bulk_in_buf) + headerLen, data, dataLen); + usbtmc_state.transfer_size_remaining = len - dataLen; + usbtmc_state.transfer_size_sent = dataLen; + usbtmc_state.devInBuffer = (uint8_t const *)data + (dataLen); + + bool stateChanged = atomicChangeState( + STATE_TX_REQUESTED, (packetLen >= txBufLen) ? STATE_TX_INITIATED : STATE_TX_SHORTED); + TU_VERIFY(stateChanged); + TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_bulk_in, + usbtmc_state.ep_bulk_in_buf, (uint16_t)packetLen)); + return true; } -bool tud_usbtmc_transmit_notification_data(const void * data, size_t len) +bool tud_usbtmc_transmit_notification_data(const void *data, size_t len) { #ifndef NDEBUG - TU_ASSERT(len > 0); - TU_ASSERT(usbtmc_state.ep_int_in != 0); + TU_ASSERT(len > 0); + TU_ASSERT(usbtmc_state.ep_int_in != 0); #endif - TU_VERIFY(usbd_edpt_busy(usbtmc_state.rhport, usbtmc_state.ep_int_in)); + TU_VERIFY(usbd_edpt_busy(usbtmc_state.rhport, usbtmc_state.ep_int_in)); - TU_VERIFY(tu_memcpy_s(usbtmc_state.ep_int_in_buf, sizeof(usbtmc_state.ep_int_in_buf), data, len) == 0); - TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_int_in, usbtmc_state.ep_int_in_buf, (uint16_t)len)); - return true; + TU_VERIFY(tu_memcpy_s(usbtmc_state.ep_int_in_buf, sizeof(usbtmc_state.ep_int_in_buf), data, + len) == 0); + TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_int_in, + usbtmc_state.ep_int_in_buf, (uint16_t)len)); + return true; } void usbtmcd_init_cb(void) { - usbtmc_state.capabilities = tud_usbtmc_get_capabilities_cb(); + usbtmc_state.capabilities = tud_usbtmc_get_capabilities_cb(); #ifndef NDEBUG -# if CFG_TUD_USBTMC_ENABLE_488 - if (usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger) { - TU_ASSERT(&tud_usbtmc_msg_trigger_cb != NULL,); - } - // Per USB488 spec: table 8 - TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.listenOnly,); - TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.talkOnly,); -# endif - if (usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse) { - TU_ASSERT(&tud_usbtmc_indicator_pulse_cb != NULL,); - } +#if CFG_TUD_USBTMC_ENABLE_488 + if (usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger) { + TU_ASSERT(&tud_usbtmc_msg_trigger_cb != NULL, ); + } + // Per USB488 spec: table 8 + TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.listenOnly, ); + TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.talkOnly, ); +#endif + if (usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse) { + TU_ASSERT(&tud_usbtmc_indicator_pulse_cb != NULL, ); + } #endif - usbtmcLock = osal_mutex_create(&usbtmcLockBuffer); + usbtmcLock = osal_mutex_create(&usbtmcLockBuffer); } -bool usbtmcd_deinit(void) { - #if OSAL_MUTEX_REQUIRED - osal_mutex_delete(usbtmcLock); - #endif - return true; +bool usbtmcd_deinit(void) +{ +#if OSAL_MUTEX_REQUIRED + osal_mutex_delete(usbtmcLock); +#endif + return true; } -uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) +uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - (void)rhport; + (void)rhport; - uint16_t drv_len; - uint8_t const * p_desc; - uint8_t found_endpoints = 0; + uint16_t drv_len; + uint8_t const *p_desc; + uint8_t found_endpoints = 0; - TU_VERIFY(itf_desc->bInterfaceClass == TUD_USBTMC_APP_CLASS , 0); - TU_VERIFY(itf_desc->bInterfaceSubClass == TUD_USBTMC_APP_SUBCLASS, 0); + TU_VERIFY(itf_desc->bInterfaceClass == TUD_USBTMC_APP_CLASS, 0); + TU_VERIFY(itf_desc->bInterfaceSubClass == TUD_USBTMC_APP_SUBCLASS, 0); #ifndef NDEBUG - // Only 2 or 3 endpoints are allowed for USBTMC. - TU_ASSERT((itf_desc->bNumEndpoints == 2) || (itf_desc->bNumEndpoints ==3), 0); + // Only 2 or 3 endpoints are allowed for USBTMC. + TU_ASSERT((itf_desc->bNumEndpoints == 2) || (itf_desc->bNumEndpoints == 3), 0); #endif - TU_ASSERT(usbtmc_state.state == STATE_CLOSED, 0); - - // Interface - drv_len = 0u; - p_desc = (uint8_t const *) itf_desc; - - usbtmc_state.itf_id = itf_desc->bInterfaceNumber; - usbtmc_state.rhport = rhport; - - while (found_endpoints < itf_desc->bNumEndpoints && drv_len <= max_len) - { - if ( TUSB_DESC_ENDPOINT == p_desc[DESC_OFFSET_TYPE]) - { - tusb_desc_endpoint_t const *ep_desc = (tusb_desc_endpoint_t const *)p_desc; - switch(ep_desc->bmAttributes.xfer) { - case TUSB_XFER_BULK: - // Ensure buffer is an exact multiple of the maxPacketSize - TU_ASSERT((USBTMCD_BUFFER_SIZE % tu_edpt_packet_size(ep_desc)) == 0, 0); - if (tu_edpt_dir(ep_desc->bEndpointAddress) == TUSB_DIR_IN) - { - usbtmc_state.ep_bulk_in = ep_desc->bEndpointAddress; - usbtmc_state.ep_bulk_in_wMaxPacketSize = tu_edpt_packet_size(ep_desc); - } else { - usbtmc_state.ep_bulk_out = ep_desc->bEndpointAddress; - usbtmc_state.ep_bulk_out_wMaxPacketSize = tu_edpt_packet_size(ep_desc); - } - - break; - case TUSB_XFER_INTERRUPT: + TU_ASSERT(usbtmc_state.state == STATE_CLOSED, 0); + + // Interface + drv_len = 0u; + p_desc = (uint8_t const *)itf_desc; + + usbtmc_state.itf_id = itf_desc->bInterfaceNumber; + usbtmc_state.rhport = rhport; + + while (found_endpoints < itf_desc->bNumEndpoints && drv_len <= max_len) { + if (TUSB_DESC_ENDPOINT == p_desc[DESC_OFFSET_TYPE]) { + tusb_desc_endpoint_t const *ep_desc = (tusb_desc_endpoint_t const *)p_desc; + switch (ep_desc->bmAttributes.xfer) { + case TUSB_XFER_BULK: + // Ensure buffer is an exact multiple of the maxPacketSize + TU_ASSERT((USBTMCD_BUFFER_SIZE % tu_edpt_packet_size(ep_desc)) == 0, 0); + if (tu_edpt_dir(ep_desc->bEndpointAddress) == TUSB_DIR_IN) { + usbtmc_state.ep_bulk_in = ep_desc->bEndpointAddress; + usbtmc_state.ep_bulk_in_wMaxPacketSize = tu_edpt_packet_size(ep_desc); + } else { + usbtmc_state.ep_bulk_out = ep_desc->bEndpointAddress; + usbtmc_state.ep_bulk_out_wMaxPacketSize = tu_edpt_packet_size(ep_desc); + } + + break; + case TUSB_XFER_INTERRUPT: #ifndef NDEBUG - TU_ASSERT(tu_edpt_dir(ep_desc->bEndpointAddress) == TUSB_DIR_IN, 0); - TU_ASSERT(usbtmc_state.ep_int_in == 0, 0); + TU_ASSERT(tu_edpt_dir(ep_desc->bEndpointAddress) == TUSB_DIR_IN, 0); + TU_ASSERT(usbtmc_state.ep_int_in == 0, 0); #endif - usbtmc_state.ep_int_in = ep_desc->bEndpointAddress; - break; - default: - TU_ASSERT(false, 0); - } - TU_ASSERT( usbd_edpt_open(rhport, ep_desc), 0); - found_endpoints++; - } + usbtmc_state.ep_int_in = ep_desc->bEndpointAddress; + break; + default: + TU_ASSERT(false, 0); + } + TU_ASSERT(usbd_edpt_open(rhport, ep_desc), 0); + found_endpoints++; + } - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - // bulk endpoints are required, but interrupt IN is optional + // bulk endpoints are required, but interrupt IN is optional #ifndef NDEBUG - TU_ASSERT(usbtmc_state.ep_bulk_in != 0, 0); - TU_ASSERT(usbtmc_state.ep_bulk_out != 0, 0); - if (itf_desc->bNumEndpoints == 2) - { - TU_ASSERT(usbtmc_state.ep_int_in == 0, 0); - } - else if (itf_desc->bNumEndpoints == 3) - { - TU_ASSERT(usbtmc_state.ep_int_in != 0, 0); - } + TU_ASSERT(usbtmc_state.ep_bulk_in != 0, 0); + TU_ASSERT(usbtmc_state.ep_bulk_out != 0, 0); + if (itf_desc->bNumEndpoints == 2) { + TU_ASSERT(usbtmc_state.ep_int_in == 0, 0); + } else if (itf_desc->bNumEndpoints == 3) { + TU_ASSERT(usbtmc_state.ep_int_in != 0, 0); + } #if (CFG_TUD_USBTMC_ENABLE_488) - if(usbtmc_state.capabilities->bmIntfcCapabilities488.is488_2 || - usbtmc_state.capabilities->bmDevCapabilities488.SR1) - { - TU_ASSERT(usbtmc_state.ep_int_in != 0, 0); - } + if (usbtmc_state.capabilities->bmIntfcCapabilities488.is488_2 || + usbtmc_state.capabilities->bmDevCapabilities488.SR1) { + TU_ASSERT(usbtmc_state.ep_int_in != 0, 0); + } #endif #endif - atomicChangeState(STATE_CLOSED, STATE_NAK); - tud_usbtmc_open_cb(itf_desc->iInterface); + atomicChangeState(STATE_CLOSED, STATE_NAK); + tud_usbtmc_open_cb(itf_desc->iInterface); - return drv_len; + return drv_len; } // Tell USBTMC class to set its bulk-in EP to ACK so that it can // receive USBTMC commands. @@ -382,508 +375,470 @@ uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const * itf_desc, // state. bool tud_usbtmc_start_bus_read(void) { - usbtmcd_state_enum oldState = usbtmc_state.state; - switch(oldState) - { - // These may transition to IDLE - case STATE_NAK: - case STATE_ABORTING_BULK_IN_ABORTED: - TU_VERIFY(atomicChangeState(oldState, STATE_IDLE)); - break; - // When receiving, let it remain receiving - case STATE_RCV: - break; - default: - return false; - } - TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_bulk_out, usbtmc_state.ep_bulk_out_buf, (uint16_t)usbtmc_state.ep_bulk_out_wMaxPacketSize)); - return true; + usbtmcd_state_enum oldState = usbtmc_state.state; + switch (oldState) { + // These may transition to IDLE + case STATE_NAK: + case STATE_ABORTING_BULK_IN_ABORTED: + TU_VERIFY(atomicChangeState(oldState, STATE_IDLE)); + break; + // When receiving, let it remain receiving + case STATE_RCV: + break; + default: + return false; + } + TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_bulk_out, + usbtmc_state.ep_bulk_out_buf, + (uint16_t)usbtmc_state.ep_bulk_out_wMaxPacketSize)); + return true; } void usbtmcd_reset_cb(uint8_t rhport) { - (void)rhport; - usbtmc_capabilities_specific_t const * capabilities = tud_usbtmc_get_capabilities_cb(); - - criticalEnter(); - tu_varclr(&usbtmc_state); - usbtmc_state.capabilities = capabilities; - usbtmc_state.itf_id = 0xFFu; - criticalLeave(); + (void)rhport; + usbtmc_capabilities_specific_t const *capabilities = tud_usbtmc_get_capabilities_cb(); + + criticalEnter(); + tu_varclr(&usbtmc_state); + usbtmc_state.capabilities = capabilities; + usbtmc_state.itf_id = 0xFFu; + criticalLeave(); } static bool handle_devMsgOutStart(uint8_t rhport, void *data, size_t len) { - (void)rhport; - // return true upon failure, as we can assume error is being handled elsewhere. - TU_VERIFY(atomicChangeState(STATE_IDLE, STATE_RCV), true); - usbtmc_state.transfer_size_sent = 0u; - - // must be a header, should have been confirmed before calling here. - usbtmc_msg_request_dev_dep_out *msg = (usbtmc_msg_request_dev_dep_out*)data; - usbtmc_state.transfer_size_remaining = msg->TransferSize; - TU_VERIFY(tud_usbtmc_msgBulkOut_start_cb(msg)); - - TU_VERIFY(handle_devMsgOut(rhport, (uint8_t*)data + sizeof(*msg), len - sizeof(*msg), len)); - usbtmc_state.lastBulkOutTag = msg->header.bTag; - return true; + (void)rhport; + // return true upon failure, as we can assume error is being handled elsewhere. + TU_VERIFY(atomicChangeState(STATE_IDLE, STATE_RCV), true); + usbtmc_state.transfer_size_sent = 0u; + + // must be a header, should have been confirmed before calling here. + usbtmc_msg_request_dev_dep_out *msg = (usbtmc_msg_request_dev_dep_out *)data; + usbtmc_state.transfer_size_remaining = msg->TransferSize; + TU_VERIFY(tud_usbtmc_msgBulkOut_start_cb(msg)); + + TU_VERIFY(handle_devMsgOut(rhport, (uint8_t *)data + sizeof(*msg), len - sizeof(*msg), len)); + usbtmc_state.lastBulkOutTag = msg->header.bTag; + return true; } static bool handle_devMsgOut(uint8_t rhport, void *data, size_t len, size_t packetLen) { - (void)rhport; - // return true upon failure, as we can assume error is being handled elsewhere. - TU_VERIFY(usbtmc_state.state == STATE_RCV,true); - - bool shortPacket = (packetLen < usbtmc_state.ep_bulk_out_wMaxPacketSize); + (void)rhport; + // return true upon failure, as we can assume error is being handled elsewhere. + TU_VERIFY(usbtmc_state.state == STATE_RCV, true); - // Packet is to be considered complete when we get enough data or at a short packet. - bool atEnd = false; - if(len >= usbtmc_state.transfer_size_remaining || shortPacket) - { - atEnd = true; - TU_VERIFY(atomicChangeState(STATE_RCV, STATE_NAK)); - } + bool shortPacket = (packetLen < usbtmc_state.ep_bulk_out_wMaxPacketSize); - len = tu_min32(len, usbtmc_state.transfer_size_remaining); + // Packet is to be considered complete when we get enough data or at a short packet. + bool atEnd = false; + if (len >= usbtmc_state.transfer_size_remaining || shortPacket) { + atEnd = true; + TU_VERIFY(atomicChangeState(STATE_RCV, STATE_NAK)); + } - usbtmc_state.transfer_size_remaining -= len; - usbtmc_state.transfer_size_sent += len; + len = tu_min32(len, usbtmc_state.transfer_size_remaining); - // App may (should?) call the wait_for_bus() command at this point - if(!tud_usbtmc_msg_data_cb(data, len, atEnd)) - { - // TODO: Go to an error state upon failure other than just stalling the EP? - return false; - } + usbtmc_state.transfer_size_remaining -= len; + usbtmc_state.transfer_size_sent += len; + // App may (should?) call the wait_for_bus() command at this point + if (!tud_usbtmc_msg_data_cb(data, len, atEnd)) { + // TODO: Go to an error state upon failure other than just stalling the EP? + return false; + } - return true; + return true; } static bool handle_devMsgIn(void *data, size_t len) { - TU_VERIFY(len == sizeof(usbtmc_msg_request_dev_dep_in)); - usbtmc_msg_request_dev_dep_in *msg = (usbtmc_msg_request_dev_dep_in*)data; - bool stateChanged = atomicChangeState(STATE_IDLE, STATE_TX_REQUESTED); - TU_VERIFY(stateChanged); - usbtmc_state.lastBulkInTag = msg->header.bTag; - usbtmc_state.transfer_size_remaining = msg->TransferSize; - usbtmc_state.transfer_size_sent = 0u; + TU_VERIFY(len == sizeof(usbtmc_msg_request_dev_dep_in)); + usbtmc_msg_request_dev_dep_in *msg = (usbtmc_msg_request_dev_dep_in *)data; + bool stateChanged = atomicChangeState(STATE_IDLE, STATE_TX_REQUESTED); + TU_VERIFY(stateChanged); + usbtmc_state.lastBulkInTag = msg->header.bTag; + usbtmc_state.transfer_size_remaining = msg->TransferSize; + usbtmc_state.transfer_size_sent = 0u; - termCharRequested = msg->bmTransferAttributes.TermCharEnabled; + termCharRequested = msg->bmTransferAttributes.TermCharEnabled; #ifndef NDEBUG - termChar = msg->TermChar; + termChar = msg->TermChar; #endif - if(termCharRequested) - TU_VERIFY(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar); + if (termCharRequested) + TU_VERIFY(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar); - TU_VERIFY(tud_usbtmc_msgBulkIn_request_cb(msg)); - return true; + TU_VERIFY(tud_usbtmc_msgBulkIn_request_cb(msg)); + return true; } bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - TU_VERIFY(result == XFER_RESULT_SUCCESS); - //uart_tx_str_sync("TMC XFER CB\r\n"); - if(usbtmc_state.state == STATE_CLEARING) { - return true; /* I think we can ignore everything here */ - } - - if(ep_addr == usbtmc_state.ep_bulk_out) - { - usbtmc_msg_generic_t *msg = NULL; - - switch(usbtmc_state.state) - { - case STATE_IDLE: - { - TU_VERIFY(xferred_bytes >= sizeof(usbtmc_msg_generic_t)); - msg = (usbtmc_msg_generic_t*)(usbtmc_state.ep_bulk_out_buf); - uint8_t invInvTag = (uint8_t)~(msg->header.bTagInverse); - TU_VERIFY(msg->header.bTag == invInvTag); - TU_VERIFY(msg->header.bTag != 0x00); - - switch(msg->header.MsgID) { - case USBTMC_MSGID_DEV_DEP_MSG_OUT: - if(!handle_devMsgOutStart(rhport, msg, xferred_bytes)) - { - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - return false; - } - break; + TU_VERIFY(result == XFER_RESULT_SUCCESS); + //uart_tx_str_sync("TMC XFER CB\r\n"); + if (usbtmc_state.state == STATE_CLEARING) { + return true; /* I think we can ignore everything here */ + } - case USBTMC_MSGID_DEV_DEP_MSG_IN: - TU_VERIFY(handle_devMsgIn(msg, xferred_bytes)); - break; + if (ep_addr == usbtmc_state.ep_bulk_out) { + usbtmc_msg_generic_t *msg = NULL; + + switch (usbtmc_state.state) { + case STATE_IDLE: { + TU_VERIFY(xferred_bytes >= sizeof(usbtmc_msg_generic_t)); + msg = (usbtmc_msg_generic_t *)(usbtmc_state.ep_bulk_out_buf); + uint8_t invInvTag = (uint8_t) ~(msg->header.bTagInverse); + TU_VERIFY(msg->header.bTag == invInvTag); + TU_VERIFY(msg->header.bTag != 0x00); + + switch (msg->header.MsgID) { + case USBTMC_MSGID_DEV_DEP_MSG_OUT: + if (!handle_devMsgOutStart(rhport, msg, xferred_bytes)) { + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + return false; + } + break; + + case USBTMC_MSGID_DEV_DEP_MSG_IN: + TU_VERIFY(handle_devMsgIn(msg, xferred_bytes)); + break; #if (CFG_TUD_USBTMC_ENABLE_488) - case USBTMC_MSGID_USB488_TRIGGER: - // Spec says we halt the EP if we didn't declare we support it. - TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger); - TU_VERIFY(tud_usbtmc_msg_trigger_cb(msg)); + case USBTMC_MSGID_USB488_TRIGGER: + // Spec says we halt the EP if we didn't declare we support it. + TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger); + TU_VERIFY(tud_usbtmc_msg_trigger_cb(msg)); - break; + break; #endif - case USBTMC_MSGID_VENDOR_SPECIFIC_MSG_OUT: - case USBTMC_MSGID_VENDOR_SPECIFIC_IN: - default: - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - return false; + case USBTMC_MSGID_VENDOR_SPECIFIC_MSG_OUT: + case USBTMC_MSGID_VENDOR_SPECIFIC_IN: + default: + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + return false; + } + return true; } - return true; - } - case STATE_RCV: - if(!handle_devMsgOut(rhport, usbtmc_state.ep_bulk_out_buf, xferred_bytes, xferred_bytes)) - { - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - return false; - } - return true; - - case STATE_ABORTING_BULK_OUT: - // Should be stalled by now, shouldn't have received a packet. - return false; + case STATE_RCV: + if (!handle_devMsgOut(rhport, usbtmc_state.ep_bulk_out_buf, xferred_bytes, + xferred_bytes)) { + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + return false; + } + return true; + + case STATE_ABORTING_BULK_OUT: + // Should be stalled by now, shouldn't have received a packet. + return false; - case STATE_TX_REQUESTED: - case STATE_TX_INITIATED: - case STATE_ABORTING_BULK_IN: - case STATE_ABORTING_BULK_IN_SHORTED: - case STATE_ABORTING_BULK_IN_ABORTED: - default: - return false; - } - } - else if(ep_addr == usbtmc_state.ep_bulk_in) - { - switch(usbtmc_state.state) { - case STATE_TX_SHORTED: - TU_VERIFY(atomicChangeState(STATE_TX_SHORTED, STATE_NAK)); - TU_VERIFY(tud_usbtmc_msgBulkIn_complete_cb()); - break; - - case STATE_TX_INITIATED: - if(usbtmc_state.transfer_size_remaining >= sizeof(usbtmc_state.ep_bulk_in_buf)) - { - // Copy buffer to ensure alignment correctness - memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, sizeof(usbtmc_state.ep_bulk_in_buf)); - TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, - usbtmc_state.ep_bulk_in_buf, sizeof(usbtmc_state.ep_bulk_in_buf))); - usbtmc_state.devInBuffer += sizeof(usbtmc_state.ep_bulk_in_buf); - usbtmc_state.transfer_size_remaining -= sizeof(usbtmc_state.ep_bulk_in_buf); - usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.ep_bulk_in_buf); - } - else // last packet - { - size_t packetLen = usbtmc_state.transfer_size_remaining; - memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, usbtmc_state.transfer_size_remaining); - usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.transfer_size_remaining); - usbtmc_state.transfer_size_remaining = 0; - usbtmc_state.devInBuffer = NULL; - TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf, (uint16_t)packetLen) ); - if(((packetLen % usbtmc_state.ep_bulk_in_wMaxPacketSize) != 0) || (packetLen == 0 )) - { - usbtmc_state.state = STATE_TX_SHORTED; + case STATE_TX_REQUESTED: + case STATE_TX_INITIATED: + case STATE_ABORTING_BULK_IN: + case STATE_ABORTING_BULK_IN_SHORTED: + case STATE_ABORTING_BULK_IN_ABORTED: + default: + return false; } - } - return true; - - case STATE_ABORTING_BULK_IN: - // need to send short packet (ZLP?) - TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,(uint16_t)0u)); - usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED; - return true; + } else if (ep_addr == usbtmc_state.ep_bulk_in) { + switch (usbtmc_state.state) { + case STATE_TX_SHORTED: + TU_VERIFY(atomicChangeState(STATE_TX_SHORTED, STATE_NAK)); + TU_VERIFY(tud_usbtmc_msgBulkIn_complete_cb()); + break; + + case STATE_TX_INITIATED: + if (usbtmc_state.transfer_size_remaining >= sizeof(usbtmc_state.ep_bulk_in_buf)) { + // Copy buffer to ensure alignment correctness + memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, + sizeof(usbtmc_state.ep_bulk_in_buf)); + TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, + usbtmc_state.ep_bulk_in_buf, + sizeof(usbtmc_state.ep_bulk_in_buf))); + usbtmc_state.devInBuffer += sizeof(usbtmc_state.ep_bulk_in_buf); + usbtmc_state.transfer_size_remaining -= sizeof(usbtmc_state.ep_bulk_in_buf); + usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.ep_bulk_in_buf); + } else // last packet + { + size_t packetLen = usbtmc_state.transfer_size_remaining; + memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, + usbtmc_state.transfer_size_remaining); + usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.transfer_size_remaining); + usbtmc_state.transfer_size_remaining = 0; + usbtmc_state.devInBuffer = NULL; + TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, + usbtmc_state.ep_bulk_in_buf, (uint16_t)packetLen)); + if (((packetLen % usbtmc_state.ep_bulk_in_wMaxPacketSize) != 0) || + (packetLen == 0)) { + usbtmc_state.state = STATE_TX_SHORTED; + } + } + return true; + + case STATE_ABORTING_BULK_IN: + // need to send short packet (ZLP?) + TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf, + (uint16_t)0u)); + usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED; + return true; + + case STATE_ABORTING_BULK_IN_SHORTED: + /* Done. :)*/ + usbtmc_state.state = STATE_ABORTING_BULK_IN_ABORTED; + return true; - case STATE_ABORTING_BULK_IN_SHORTED: - /* Done. :)*/ - usbtmc_state.state = STATE_ABORTING_BULK_IN_ABORTED; - return true; - - default: - TU_ASSERT(false); - } - } - else if (ep_addr == usbtmc_state.ep_int_in) { - if (tud_usbtmc_notification_complete_cb) { - TU_VERIFY(tud_usbtmc_notification_complete_cb()); + default: + TU_ASSERT(false); + } + } else if (ep_addr == usbtmc_state.ep_int_in) { + if (tud_usbtmc_notification_complete_cb) { + TU_VERIFY(tud_usbtmc_notification_complete_cb()); + } + return true; } - return true; - } - return false; + return false; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) +bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - // nothing to do with DATA and ACK stage - if ( stage != CONTROL_STAGE_SETUP ) return true; + // nothing to do with DATA and ACK stage + if (stage != CONTROL_STAGE_SETUP) + return true; - uint8_t tmcStatusCode = USBTMC_STATUS_FAILED; + uint8_t tmcStatusCode = USBTMC_STATUS_FAILED; #if (CFG_TUD_USBTMC_ENABLE_488) - uint8_t bTag; + uint8_t bTag; #endif - if((request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) && - (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_ENDPOINT) && - (request->bRequest == TUSB_REQ_CLEAR_FEATURE) && - (request->wValue == TUSB_REQ_FEATURE_EDPT_HALT)) - { - uint32_t ep_addr = (request->wIndex); - - // At this point, a transfer MAY be in progress. Based on USB spec, when clearing bulk EP HALT, - // the EP transfer buffer needs to be cleared and DTOG needs to be reset, even if - // the EP is not halted. The only USBD API interface to do this is to stall and then un-stall the EP. - if(ep_addr == usbtmc_state.ep_bulk_out) - { - criticalEnter(); - usbd_edpt_stall(rhport, (uint8_t)ep_addr); - usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); - usbtmc_state.state = STATE_NAK; // USBD core has placed EP in NAK state for us - criticalLeave(); - tud_usbtmc_bulkOut_clearFeature_cb(); - } - else if (ep_addr == usbtmc_state.ep_bulk_in) - { - usbd_edpt_stall(rhport, (uint8_t)ep_addr); - usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); - tud_usbtmc_bulkIn_clearFeature_cb(); - } - else if ((usbtmc_state.ep_int_in != 0) && (ep_addr == usbtmc_state.ep_int_in)) - { - // Clearing interrupt in EP - usbd_edpt_stall(rhport, (uint8_t)ep_addr); - usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); - } - else - { - return false; + if ((request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) && + (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_ENDPOINT) && + (request->bRequest == TUSB_REQ_CLEAR_FEATURE) && + (request->wValue == TUSB_REQ_FEATURE_EDPT_HALT)) { + uint32_t ep_addr = (request->wIndex); + + // At this point, a transfer MAY be in progress. Based on USB spec, when clearing bulk EP HALT, + // the EP transfer buffer needs to be cleared and DTOG needs to be reset, even if + // the EP is not halted. The only USBD API interface to do this is to stall and then un-stall the EP. + if (ep_addr == usbtmc_state.ep_bulk_out) { + criticalEnter(); + usbd_edpt_stall(rhport, (uint8_t)ep_addr); + usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); + usbtmc_state.state = STATE_NAK; // USBD core has placed EP in NAK state for us + criticalLeave(); + tud_usbtmc_bulkOut_clearFeature_cb(); + } else if (ep_addr == usbtmc_state.ep_bulk_in) { + usbd_edpt_stall(rhport, (uint8_t)ep_addr); + usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); + tud_usbtmc_bulkIn_clearFeature_cb(); + } else if ((usbtmc_state.ep_int_in != 0) && (ep_addr == usbtmc_state.ep_int_in)) { + // Clearing interrupt in EP + usbd_edpt_stall(rhport, (uint8_t)ep_addr); + usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); + } else { + return false; + } + return true; } - return true; - } - // Otherwise, we only handle class requests. - if(request->bmRequestType_bit.type != TUSB_REQ_TYPE_CLASS) - { - return false; - } - - // Verification that we own the interface is unneeded since it's been routed to us specifically. - - switch(request->bRequest) - { - // USBTMC required requests - case USBTMC_bREQUEST_INITIATE_ABORT_BULK_OUT: - { - usbtmc_initiate_abort_rsp_t rsp = { - .bTag = usbtmc_state.lastBulkOutTag, - }; - TU_VERIFY(request->bmRequestType == 0xA2); // in,class,interface - TU_VERIFY(request->wLength == sizeof(rsp)); - TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_out); - - // wValue is the requested bTag to abort - if(usbtmc_state.state != STATE_RCV) - { - rsp.USBTMC_status = USBTMC_STATUS_FAILED; - } - else if(usbtmc_state.lastBulkOutTag == (request->wValue & 0x7Fu)) - { - rsp.USBTMC_status = USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS; - } - else - { - rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; - // Check if we've queued a short packet - criticalEnter(); - usbtmc_state.state = STATE_ABORTING_BULK_OUT; - criticalLeave(); - TU_VERIFY(tud_usbtmc_initiate_abort_bulk_out_cb(&(rsp.USBTMC_status))); - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - } - TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp,sizeof(rsp))); - return true; - } - - case USBTMC_bREQUEST_CHECK_ABORT_BULK_OUT_STATUS: - { - usbtmc_check_abort_bulk_rsp_t rsp = { - .USBTMC_status = USBTMC_STATUS_SUCCESS, - .NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent - }; - TU_VERIFY(request->bmRequestType == 0xA2); // in,class,EP - TU_VERIFY(request->wLength == sizeof(rsp)); - TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_out); - TU_VERIFY(tud_usbtmc_check_abort_bulk_out_cb(&rsp)); - TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp,sizeof(rsp))); - return true; - } - - case USBTMC_bREQUEST_INITIATE_ABORT_BULK_IN: - { - usbtmc_initiate_abort_rsp_t rsp = { - .bTag = usbtmc_state.lastBulkInTag, - }; - TU_VERIFY(request->bmRequestType == 0xA2); // in,class,interface - TU_VERIFY(request->wLength == sizeof(rsp)); - TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_in); - // wValue is the requested bTag to abort - if((usbtmc_state.state == STATE_TX_REQUESTED || usbtmc_state.state == STATE_TX_INITIATED) && - usbtmc_state.lastBulkInTag == (request->wValue & 0x7Fu)) - { - rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; - usbtmc_state.transfer_size_remaining = 0u; - // Check if we've queued a short packet - criticalEnter(); - usbtmc_state.state = ((usbtmc_state.transfer_size_sent % usbtmc_state.ep_bulk_in_wMaxPacketSize) == 0) ? - STATE_ABORTING_BULK_IN : STATE_ABORTING_BULK_IN_SHORTED; - criticalLeave(); - if(usbtmc_state.transfer_size_sent == 0) - { - // Send short packet, nothing is in the buffer yet - TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,(uint16_t)0u)); - usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED; - } - TU_VERIFY(tud_usbtmc_initiate_abort_bulk_in_cb(&(rsp.USBTMC_status))); - } - else if((usbtmc_state.state == STATE_TX_REQUESTED || usbtmc_state.state == STATE_TX_INITIATED)) - { // FIXME: Unsure how to check if the OUT endpoint fifo is non-empty.... - rsp.USBTMC_status = USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS; + // Otherwise, we only handle class requests. + if (request->bmRequestType_bit.type != TUSB_REQ_TYPE_CLASS) { + return false; } - else - { - rsp.USBTMC_status = USBTMC_STATUS_FAILED; + + // Verification that we own the interface is unneeded since it's been routed to us specifically. + + switch (request->bRequest) { + // USBTMC required requests + case USBTMC_bREQUEST_INITIATE_ABORT_BULK_OUT: { + usbtmc_initiate_abort_rsp_t rsp = { + .bTag = usbtmc_state.lastBulkOutTag, + }; + TU_VERIFY(request->bmRequestType == 0xA2); // in,class,interface + TU_VERIFY(request->wLength == sizeof(rsp)); + TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_out); + + // wValue is the requested bTag to abort + if (usbtmc_state.state != STATE_RCV) { + rsp.USBTMC_status = USBTMC_STATUS_FAILED; + } else if (usbtmc_state.lastBulkOutTag == (request->wValue & 0x7Fu)) { + rsp.USBTMC_status = USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS; + } else { + rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; + // Check if we've queued a short packet + criticalEnter(); + usbtmc_state.state = STATE_ABORTING_BULK_OUT; + criticalLeave(); + TU_VERIFY(tud_usbtmc_initiate_abort_bulk_out_cb(&(rsp.USBTMC_status))); + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + } + TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); + return true; } - TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp,sizeof(rsp))); - return true; - } - case USBTMC_bREQUEST_CHECK_ABORT_BULK_IN_STATUS: - { - TU_VERIFY(request->bmRequestType == 0xA2); // in,class,EP - TU_VERIFY(request->wLength == 8u); + case USBTMC_bREQUEST_CHECK_ABORT_BULK_OUT_STATUS: { + usbtmc_check_abort_bulk_rsp_t rsp = { .USBTMC_status = USBTMC_STATUS_SUCCESS, + .NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent }; + TU_VERIFY(request->bmRequestType == 0xA2); // in,class,EP + TU_VERIFY(request->wLength == sizeof(rsp)); + TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_out); + TU_VERIFY(tud_usbtmc_check_abort_bulk_out_cb(&rsp)); + TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); + return true; + } - usbtmc_check_abort_bulk_rsp_t rsp = - { - .USBTMC_status = USBTMC_STATUS_FAILED, - .bmAbortBulkIn = - { - .BulkInFifoBytes = (usbtmc_state.state != STATE_ABORTING_BULK_IN_ABORTED) - }, - .NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent, - }; - TU_VERIFY(tud_usbtmc_check_abort_bulk_in_cb(&rsp)); - criticalEnter(); - switch(usbtmc_state.state) - { - case STATE_ABORTING_BULK_IN_ABORTED: - rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; - usbtmc_state.state = STATE_IDLE; - break; - case STATE_ABORTING_BULK_IN: - case STATE_ABORTING_BULK_OUT: - rsp.USBTMC_status = USBTMC_STATUS_PENDING; - break; - default: - break; + case USBTMC_bREQUEST_INITIATE_ABORT_BULK_IN: { + usbtmc_initiate_abort_rsp_t rsp = { + .bTag = usbtmc_state.lastBulkInTag, + }; + TU_VERIFY(request->bmRequestType == 0xA2); // in,class,interface + TU_VERIFY(request->wLength == sizeof(rsp)); + TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_in); + // wValue is the requested bTag to abort + if ((usbtmc_state.state == STATE_TX_REQUESTED || + usbtmc_state.state == STATE_TX_INITIATED) && + usbtmc_state.lastBulkInTag == (request->wValue & 0x7Fu)) { + rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; + usbtmc_state.transfer_size_remaining = 0u; + // Check if we've queued a short packet + criticalEnter(); + usbtmc_state.state = + ((usbtmc_state.transfer_size_sent % usbtmc_state.ep_bulk_in_wMaxPacketSize) == 0) ? + STATE_ABORTING_BULK_IN : + STATE_ABORTING_BULK_IN_SHORTED; + criticalLeave(); + if (usbtmc_state.transfer_size_sent == 0) { + // Send short packet, nothing is in the buffer yet + TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, + usbtmc_state.ep_bulk_in_buf, (uint16_t)0u)); + usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED; + } + TU_VERIFY(tud_usbtmc_initiate_abort_bulk_in_cb(&(rsp.USBTMC_status))); + } else if ((usbtmc_state.state == STATE_TX_REQUESTED || + usbtmc_state.state == + STATE_TX_INITIATED)) { // FIXME: Unsure how to check if the OUT endpoint fifo is non-empty.... + rsp.USBTMC_status = USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS; + } else { + rsp.USBTMC_status = USBTMC_STATUS_FAILED; + } + TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); + return true; } - criticalLeave(); - TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp,sizeof(rsp))); - return true; - } + case USBTMC_bREQUEST_CHECK_ABORT_BULK_IN_STATUS: { + TU_VERIFY(request->bmRequestType == 0xA2); // in,class,EP + TU_VERIFY(request->wLength == 8u); + + usbtmc_check_abort_bulk_rsp_t rsp = { + .USBTMC_status = USBTMC_STATUS_FAILED, + .bmAbortBulkIn = { .BulkInFifoBytes = + (usbtmc_state.state != STATE_ABORTING_BULK_IN_ABORTED) }, + .NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent, + }; + TU_VERIFY(tud_usbtmc_check_abort_bulk_in_cb(&rsp)); + criticalEnter(); + switch (usbtmc_state.state) { + case STATE_ABORTING_BULK_IN_ABORTED: + rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; + usbtmc_state.state = STATE_IDLE; + break; + case STATE_ABORTING_BULK_IN: + case STATE_ABORTING_BULK_OUT: + rsp.USBTMC_status = USBTMC_STATUS_PENDING; + break; + default: + break; + } + criticalLeave(); + TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); - case USBTMC_bREQUEST_INITIATE_CLEAR: - { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - TU_VERIFY(request->wLength == sizeof(tmcStatusCode)); - // After receiving an INITIATE_CLEAR request, the device must Halt the Bulk-OUT endpoint, queue the - // control endpoint response shown in Table 31, and clear all input buffers and output buffers. - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - usbtmc_state.transfer_size_remaining = 0; - criticalEnter(); - usbtmc_state.state = STATE_CLEARING; - criticalLeave(); - TU_VERIFY(tud_usbtmc_initiate_clear_cb(&tmcStatusCode)); - TU_VERIFY(tud_control_xfer(rhport, request, (void*)&tmcStatusCode,sizeof(tmcStatusCode))); - return true; + return true; } - case USBTMC_bREQUEST_CHECK_CLEAR_STATUS: - { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - usbtmc_get_clear_status_rsp_t clearStatusRsp = {0}; - TU_VERIFY(request->wLength == sizeof(clearStatusRsp)); - - if(usbd_edpt_busy(rhport, usbtmc_state.ep_bulk_in)) - { - // Stuff stuck in TX buffer? - clearStatusRsp.bmClear.BulkInFifoBytes = 1; - clearStatusRsp.USBTMC_status = USBTMC_STATUS_PENDING; - } - else - { - // Let app check if it's clear - TU_VERIFY(tud_usbtmc_check_clear_cb(&clearStatusRsp)); - } - if(clearStatusRsp.USBTMC_status == USBTMC_STATUS_SUCCESS) - { + case USBTMC_bREQUEST_INITIATE_CLEAR: { + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + TU_VERIFY(request->wLength == sizeof(tmcStatusCode)); + // After receiving an INITIATE_CLEAR request, the device must Halt the Bulk-OUT endpoint, queue the + // control endpoint response shown in Table 31, and clear all input buffers and output buffers. + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + usbtmc_state.transfer_size_remaining = 0; criticalEnter(); - usbtmc_state.state = STATE_IDLE; + usbtmc_state.state = STATE_CLEARING; criticalLeave(); - } - TU_VERIFY(tud_control_xfer(rhport, request, (void*)&clearStatusRsp,sizeof(clearStatusRsp))); - return true; + TU_VERIFY(tud_usbtmc_initiate_clear_cb(&tmcStatusCode)); + TU_VERIFY(tud_control_xfer(rhport, request, (void *)&tmcStatusCode, sizeof(tmcStatusCode))); + return true; } - case USBTMC_bREQUEST_GET_CAPABILITIES: - { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - TU_VERIFY(request->wLength == sizeof(*(usbtmc_state.capabilities))); - TU_VERIFY(tud_control_xfer(rhport, request, (void*)(uintptr_t) usbtmc_state.capabilities, sizeof(*usbtmc_state.capabilities))); - return true; + case USBTMC_bREQUEST_CHECK_CLEAR_STATUS: { + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + usbtmc_get_clear_status_rsp_t clearStatusRsp = { 0 }; + TU_VERIFY(request->wLength == sizeof(clearStatusRsp)); + + if (usbd_edpt_busy(rhport, usbtmc_state.ep_bulk_in)) { + // Stuff stuck in TX buffer? + clearStatusRsp.bmClear.BulkInFifoBytes = 1; + clearStatusRsp.USBTMC_status = USBTMC_STATUS_PENDING; + } else { + // Let app check if it's clear + TU_VERIFY(tud_usbtmc_check_clear_cb(&clearStatusRsp)); + } + if (clearStatusRsp.USBTMC_status == USBTMC_STATUS_SUCCESS) { + criticalEnter(); + usbtmc_state.state = STATE_IDLE; + criticalLeave(); + } + TU_VERIFY( + tud_control_xfer(rhport, request, (void *)&clearStatusRsp, sizeof(clearStatusRsp))); + return true; } - // USBTMC Optional Requests - case USBTMC_bREQUEST_INDICATOR_PULSE: // Optional + case USBTMC_bREQUEST_GET_CAPABILITIES: { + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + TU_VERIFY(request->wLength == sizeof(*(usbtmc_state.capabilities))); + TU_VERIFY(tud_control_xfer(rhport, request, (void *)(uintptr_t)usbtmc_state.capabilities, + sizeof(*usbtmc_state.capabilities))); + return true; + } + // USBTMC Optional Requests + + case USBTMC_bREQUEST_INDICATOR_PULSE: // Optional { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - TU_VERIFY(request->wLength == sizeof(tmcStatusCode)); - TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse); - TU_VERIFY(tud_usbtmc_indicator_pulse_cb(request, &tmcStatusCode)); - TU_VERIFY(tud_control_xfer(rhport, request, (void*)&tmcStatusCode, sizeof(tmcStatusCode))); - return true; + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + TU_VERIFY(request->wLength == sizeof(tmcStatusCode)); + TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse); + TU_VERIFY(tud_usbtmc_indicator_pulse_cb(request, &tmcStatusCode)); + TU_VERIFY(tud_control_xfer(rhport, request, (void *)&tmcStatusCode, sizeof(tmcStatusCode))); + return true; } #if (CFG_TUD_USBTMC_ENABLE_488) - // USB488 required requests - case USB488_bREQUEST_READ_STATUS_BYTE: - { - usbtmc_read_stb_rsp_488_t rsp; - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - TU_VERIFY(request->wLength == sizeof(rsp)); // in,class,interface - - bTag = request->wValue & 0x7F; - TU_VERIFY(request->bmRequestType == 0xA1); - TU_VERIFY((request->wValue & (~0x7F)) == 0u); // Other bits are required to be zero (USB488v1.0 Table 11) - TU_VERIFY(bTag >= 0x02 && bTag <= 127); - TU_VERIFY(request->wIndex == usbtmc_state.itf_id); - TU_VERIFY(request->wLength == 0x0003); - rsp.bTag = (uint8_t)bTag; - if(usbtmc_state.ep_int_in != 0) - { - rsp.statusByte = 0x00; // Use interrupt endpoint, instead. Must be 0x00 (USB488v1.0 4.3.1.2) - if(usbd_edpt_busy(rhport, usbtmc_state.ep_int_in)) - { - rsp.USBTMC_status = USB488_STATUS_INTERRUPT_IN_BUSY; - } - else - { - rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; - usbtmc_read_stb_interrupt_488_t intMsg = + // USB488 required requests + case USB488_bREQUEST_READ_STATUS_BYTE: { + usbtmc_read_stb_rsp_488_t rsp; + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + TU_VERIFY(request->wLength == sizeof(rsp)); // in,class,interface + + bTag = request->wValue & 0x7F; + TU_VERIFY(request->bmRequestType == 0xA1); + TU_VERIFY((request->wValue & (~0x7F)) == + 0u); // Other bits are required to be zero (USB488v1.0 Table 11) + TU_VERIFY(bTag >= 0x02 && bTag <= 127); + TU_VERIFY(request->wIndex == usbtmc_state.itf_id); + TU_VERIFY(request->wLength == 0x0003); + rsp.bTag = (uint8_t)bTag; + if (usbtmc_state.ep_int_in != 0) { + rsp.statusByte = + 0x00; // Use interrupt endpoint, instead. Must be 0x00 (USB488v1.0 4.3.1.2) + if (usbd_edpt_busy(rhport, usbtmc_state.ep_int_in)) { + rsp.USBTMC_status = USB488_STATUS_INTERRUPT_IN_BUSY; + } else { + rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; + usbtmc_read_stb_interrupt_488_t intMsg = { .bNotify1 = { .one = 1, @@ -891,30 +846,27 @@ bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request }, .StatusByte = tud_usbtmc_get_stb_cb(&(rsp.USBTMC_status)) }; - // Must be queued before control request response sent (USB488v1.0 4.3.1.2) - usbd_edpt_xfer(rhport, usbtmc_state.ep_int_in, (void*)&intMsg, sizeof(intMsg)); + // Must be queued before control request response sent (USB488v1.0 4.3.1.2) + usbd_edpt_xfer(rhport, usbtmc_state.ep_int_in, (void *)&intMsg, sizeof(intMsg)); + } + } else { + rsp.statusByte = tud_usbtmc_get_stb_cb(&(rsp.USBTMC_status)); } - } - else - { - rsp.statusByte = tud_usbtmc_get_stb_cb(&(rsp.USBTMC_status)); - } - TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp, sizeof(rsp))); - return true; + TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); + return true; } - // USB488 optional requests - case USB488_bREQUEST_REN_CONTROL: - case USB488_bREQUEST_GO_TO_LOCAL: - case USB488_bREQUEST_LOCAL_LOCKOUT: - { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - return false; + // USB488 optional requests + case USB488_bREQUEST_REN_CONTROL: + case USB488_bREQUEST_GO_TO_LOCAL: + case USB488_bREQUEST_LOCAL_LOCKOUT: { + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + return false; } #endif - default: - return false; - } + default: + return false; + } } #endif /* CFG_TUD_TSMC */ diff --git a/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.h b/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.h index b85ef12b59f..f2d0524d5c3 100644 --- a/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.h +++ b/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.h @@ -24,7 +24,6 @@ * This file is part of the TinyUSB stack. */ - #ifndef CLASS_USBTMC_USBTMC_DEVICE_H_ #define CLASS_USBTMC_USBTMC_DEVICE_H_ @@ -49,21 +48,23 @@ // * (successful) tud_usmtmc_bulkOut_clearFeature_cb #if (CFG_TUD_USBTMC_ENABLE_488) -usbtmc_response_capabilities_488_t const * tud_usbtmc_get_capabilities_cb(void); +usbtmc_response_capabilities_488_t const *tud_usbtmc_get_capabilities_cb(void); #else -usbtmc_response_capabilities_t const * tud_usbtmc_get_capabilities_cb(void); +usbtmc_response_capabilities_t const *tud_usbtmc_get_capabilities_cb(void); #endif void tud_usbtmc_open_cb(uint8_t interface_id); -bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const * msgHeader); +bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const *msgHeader); // transfer_complete does not imply that a message is complete. -bool tud_usbtmc_msg_data_cb( void *data, size_t len, bool transfer_complete); -void tud_usbtmc_bulkOut_clearFeature_cb(void); // Notice to clear and abort the pending BULK out transfer +bool tud_usbtmc_msg_data_cb(void *data, size_t len, bool transfer_complete); +void tud_usbtmc_bulkOut_clearFeature_cb( + void); // Notice to clear and abort the pending BULK out transfer -bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const * request); +bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const *request); bool tud_usbtmc_msgBulkIn_complete_cb(void); -void tud_usbtmc_bulkIn_clearFeature_cb(void); // Notice to clear and abort the pending BULK out transfer +void tud_usbtmc_bulkIn_clearFeature_cb( + void); // Notice to clear and abort the pending BULK out transfer bool tud_usbtmc_initiate_abort_bulk_in_cb(uint8_t *tmcResult); bool tud_usbtmc_initiate_abort_bulk_out_cb(uint8_t *tmcResult); @@ -78,11 +79,12 @@ bool tud_usbtmc_check_clear_cb(usbtmc_get_clear_status_rsp_t *rsp); TU_ATTR_WEAK bool tud_usbtmc_notification_complete_cb(void); // Indicator pulse should be 0.5 to 1.0 seconds long -TU_ATTR_WEAK bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const * msg, uint8_t *tmcResult); +TU_ATTR_WEAK bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const *msg, + uint8_t *tmcResult); #if (CFG_TUD_USBTMC_ENABLE_488) uint8_t tud_usbtmc_get_stb_cb(uint8_t *tmcResult); -TU_ATTR_WEAK bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t* msg); +TU_ATTR_WEAK bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t *msg); //TU_ATTR_WEAK bool tud_usbtmc_app_go_to_local_cb(); #endif @@ -90,9 +92,8 @@ TU_ATTR_WEAK bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t* msg); // // We keep a reference to the buffer, so it MUST not change until the app is // notified that the transfer is complete. -bool tud_usbtmc_transmit_dev_msg_data( - const void * data, size_t len, - bool endOfMessage, bool usingTermChar); +bool tud_usbtmc_transmit_dev_msg_data(const void *data, size_t len, bool endOfMessage, + bool usingTermChar); // Buffers a notification to be sent to the host. The data starts // with the bNotify1 field, see the USBTMC Specification, Table 13. @@ -101,18 +102,17 @@ bool tud_usbtmc_transmit_dev_msg_data( // returns false. // // Requires an interrupt endpoint in the interface. -bool tud_usbtmc_transmit_notification_data(const void * data, size_t len); +bool tud_usbtmc_transmit_notification_data(const void *data, size_t len); bool tud_usbtmc_start_bus_read(void); - /* "callbacks" from USB device core */ -void usbtmcd_init_cb(void); -bool usbtmcd_deinit(void); -uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -void usbtmcd_reset_cb(uint8_t rhport); -bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); -bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +void usbtmcd_init_cb(void); +bool usbtmcd_deinit(void); +uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +void usbtmcd_reset_cb(uint8_t rhport); +bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); +bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); #endif /* CLASS_USBTMC_USBTMC_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/vendor/vendor_device.c b/Libraries/tinyusb/src/class/vendor/vendor_device.c index 56ef098c7a1..a81f8041060 100644 --- a/Libraries/tinyusb/src/class/vendor/vendor_device.c +++ b/Libraries/tinyusb/src/class/vendor/vendor_device.c @@ -38,284 +38,275 @@ //--------------------------------------------------------------------+ #define BULK_PACKET_SIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -typedef struct -{ - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; +typedef struct { + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; - /*------------- From this point, data is not cleared by bus reset -------------*/ - tu_fifo_t rx_ff; - tu_fifo_t tx_ff; + /*------------- From this point, data is not cleared by bus reset -------------*/ + tu_fifo_t rx_ff; + tu_fifo_t tx_ff; - uint8_t rx_ff_buf[CFG_TUD_VENDOR_RX_BUFSIZE]; - uint8_t tx_ff_buf[CFG_TUD_VENDOR_TX_BUFSIZE]; + uint8_t rx_ff_buf[CFG_TUD_VENDOR_RX_BUFSIZE]; + uint8_t tx_ff_buf[CFG_TUD_VENDOR_TX_BUFSIZE]; - OSAL_MUTEX_DEF(rx_ff_mutex); - OSAL_MUTEX_DEF(tx_ff_mutex); + OSAL_MUTEX_DEF(rx_ff_mutex); + OSAL_MUTEX_DEF(tx_ff_mutex); - // Endpoint Transfer buffer - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_VENDOR_EPSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_VENDOR_EPSIZE]; + // Endpoint Transfer buffer + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_VENDOR_EPSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_VENDOR_EPSIZE]; } vendord_interface_t; CFG_TUD_MEM_SECTION tu_static vendord_interface_t _vendord_itf[CFG_TUD_VENDOR]; -#define ITF_MEM_RESET_SIZE offsetof(vendord_interface_t, rx_ff) - +#define ITF_MEM_RESET_SIZE offsetof(vendord_interface_t, rx_ff) -bool tud_vendor_n_mounted (uint8_t itf) +bool tud_vendor_n_mounted(uint8_t itf) { - return _vendord_itf[itf].ep_in && _vendord_itf[itf].ep_out; + return _vendord_itf[itf].ep_in && _vendord_itf[itf].ep_out; } -uint32_t tud_vendor_n_available (uint8_t itf) +uint32_t tud_vendor_n_available(uint8_t itf) { - return tu_fifo_count(&_vendord_itf[itf].rx_ff); + return tu_fifo_count(&_vendord_itf[itf].rx_ff); } -bool tud_vendor_n_peek(uint8_t itf, uint8_t* u8) +bool tud_vendor_n_peek(uint8_t itf, uint8_t *u8) { - return tu_fifo_peek(&_vendord_itf[itf].rx_ff, u8); + return tu_fifo_peek(&_vendord_itf[itf].rx_ff, u8); } //--------------------------------------------------------------------+ // Read API //--------------------------------------------------------------------+ -static void _prep_out_transaction (vendord_interface_t* p_itf) +static void _prep_out_transaction(vendord_interface_t *p_itf) { - uint8_t const rhport = 0; + uint8_t const rhport = 0; // claim endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_itf->ep_out), ); - - // Prepare for incoming data but only allow what we can store in the ring buffer. - uint16_t max_read = tu_fifo_remaining(&p_itf->rx_ff); - if ( max_read >= CFG_TUD_VENDOR_EPSIZE ) - { - usbd_edpt_xfer(rhport, p_itf->ep_out, p_itf->epout_buf, CFG_TUD_VENDOR_EPSIZE); - } - else - { - // Release endpoint since we don't make any transfer - usbd_edpt_release(rhport, p_itf->ep_out); - } + TU_VERIFY(usbd_edpt_claim(rhport, p_itf->ep_out), ); + + // Prepare for incoming data but only allow what we can store in the ring buffer. + uint16_t max_read = tu_fifo_remaining(&p_itf->rx_ff); + if (max_read >= CFG_TUD_VENDOR_EPSIZE) { + usbd_edpt_xfer(rhport, p_itf->ep_out, p_itf->epout_buf, CFG_TUD_VENDOR_EPSIZE); + } else { + // Release endpoint since we don't make any transfer + usbd_edpt_release(rhport, p_itf->ep_out); + } } -uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize) +uint32_t tud_vendor_n_read(uint8_t itf, void *buffer, uint32_t bufsize) { - vendord_interface_t* p_itf = &_vendord_itf[itf]; - uint32_t num_read = tu_fifo_read_n(&p_itf->rx_ff, buffer, (uint16_t) bufsize); - _prep_out_transaction(p_itf); - return num_read; + vendord_interface_t *p_itf = &_vendord_itf[itf]; + uint32_t num_read = tu_fifo_read_n(&p_itf->rx_ff, buffer, (uint16_t)bufsize); + _prep_out_transaction(p_itf); + return num_read; } -void tud_vendor_n_read_flush (uint8_t itf) +void tud_vendor_n_read_flush(uint8_t itf) { - vendord_interface_t* p_itf = &_vendord_itf[itf]; - tu_fifo_clear(&p_itf->rx_ff); - _prep_out_transaction(p_itf); + vendord_interface_t *p_itf = &_vendord_itf[itf]; + tu_fifo_clear(&p_itf->rx_ff); + _prep_out_transaction(p_itf); } //--------------------------------------------------------------------+ // Write API //--------------------------------------------------------------------+ -uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize) +uint32_t tud_vendor_n_write(uint8_t itf, void const *buffer, uint32_t bufsize) { - vendord_interface_t* p_itf = &_vendord_itf[itf]; - uint16_t ret = tu_fifo_write_n(&p_itf->tx_ff, buffer, (uint16_t) bufsize); - - // flush if queue more than packet size - if (tu_fifo_count(&p_itf->tx_ff) >= CFG_TUD_VENDOR_EPSIZE) { - tud_vendor_n_write_flush(itf); - } - return ret; + vendord_interface_t *p_itf = &_vendord_itf[itf]; + uint16_t ret = tu_fifo_write_n(&p_itf->tx_ff, buffer, (uint16_t)bufsize); + + // flush if queue more than packet size + if (tu_fifo_count(&p_itf->tx_ff) >= CFG_TUD_VENDOR_EPSIZE) { + tud_vendor_n_write_flush(itf); + } + return ret; } -uint32_t tud_vendor_n_write_flush (uint8_t itf) +uint32_t tud_vendor_n_write_flush(uint8_t itf) { - vendord_interface_t* p_itf = &_vendord_itf[itf]; + vendord_interface_t *p_itf = &_vendord_itf[itf]; - // Skip if usb is not ready yet - TU_VERIFY( tud_ready(), 0 ); + // Skip if usb is not ready yet + TU_VERIFY(tud_ready(), 0); - // No data to send - if ( !tu_fifo_count(&p_itf->tx_ff) ) return 0; + // No data to send + if (!tu_fifo_count(&p_itf->tx_ff)) + return 0; - uint8_t const rhport = 0; + uint8_t const rhport = 0; - // Claim the endpoint - TU_VERIFY( usbd_edpt_claim(rhport, p_itf->ep_in), 0 ); + // Claim the endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_itf->ep_in), 0); - // Pull data from FIFO - uint16_t const count = tu_fifo_read_n(&p_itf->tx_ff, p_itf->epin_buf, sizeof(p_itf->epin_buf)); + // Pull data from FIFO + uint16_t const count = tu_fifo_read_n(&p_itf->tx_ff, p_itf->epin_buf, sizeof(p_itf->epin_buf)); - if ( count ) - { - TU_ASSERT( usbd_edpt_xfer(rhport, p_itf->ep_in, p_itf->epin_buf, count), 0 ); - return count; - }else - { - // Release endpoint since we don't make any transfer - // Note: data is dropped if terminal is not connected - usbd_edpt_release(rhport, p_itf->ep_in); - return 0; - } + if (count) { + TU_ASSERT(usbd_edpt_xfer(rhport, p_itf->ep_in, p_itf->epin_buf, count), 0); + return count; + } else { + // Release endpoint since we don't make any transfer + // Note: data is dropped if terminal is not connected + usbd_edpt_release(rhport, p_itf->ep_in); + return 0; + } } -uint32_t tud_vendor_n_write_available (uint8_t itf) +uint32_t tud_vendor_n_write_available(uint8_t itf) { - return tu_fifo_remaining(&_vendord_itf[itf].tx_ff); + return tu_fifo_remaining(&_vendord_itf[itf].tx_ff); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void vendord_init(void) { - tu_memclr(_vendord_itf, sizeof(_vendord_itf)); +void vendord_init(void) +{ + tu_memclr(_vendord_itf, sizeof(_vendord_itf)); - for(uint8_t i=0; irx_ff, p_itf->rx_ff_buf, CFG_TUD_VENDOR_RX_BUFSIZE, 1, false); - tu_fifo_config(&p_itf->tx_ff, p_itf->tx_ff_buf, CFG_TUD_VENDOR_TX_BUFSIZE, 1, false); + // config fifo + tu_fifo_config(&p_itf->rx_ff, p_itf->rx_ff_buf, CFG_TUD_VENDOR_RX_BUFSIZE, 1, false); + tu_fifo_config(&p_itf->tx_ff, p_itf->tx_ff_buf, CFG_TUD_VENDOR_TX_BUFSIZE, 1, false); - #if OSAL_MUTEX_REQUIRED - osal_mutex_t mutex_rd = osal_mutex_create(&p_itf->rx_ff_mutex); - osal_mutex_t mutex_wr = osal_mutex_create(&p_itf->tx_ff_mutex); - TU_ASSERT(mutex_rd && mutex_wr,); +#if OSAL_MUTEX_REQUIRED + osal_mutex_t mutex_rd = osal_mutex_create(&p_itf->rx_ff_mutex); + osal_mutex_t mutex_wr = osal_mutex_create(&p_itf->tx_ff_mutex); + TU_ASSERT(mutex_rd && mutex_wr, ); - tu_fifo_config_mutex(&p_itf->rx_ff, NULL, mutex_rd); - tu_fifo_config_mutex(&p_itf->tx_ff, mutex_wr, NULL); - #endif - } + tu_fifo_config_mutex(&p_itf->rx_ff, NULL, mutex_rd); + tu_fifo_config_mutex(&p_itf->tx_ff, mutex_wr, NULL); +#endif + } } -bool vendord_deinit(void) { - #if OSAL_MUTEX_REQUIRED - for(uint8_t i=0; irx_ff.mutex_rd; - osal_mutex_t mutex_wr = p_itf->tx_ff.mutex_wr; - - if (mutex_rd) { - osal_mutex_delete(mutex_rd); - tu_fifo_config_mutex(&p_itf->rx_ff, NULL, NULL); - } +bool vendord_deinit(void) +{ +#if OSAL_MUTEX_REQUIRED + for (uint8_t i = 0; i < CFG_TUD_VENDOR; i++) { + vendord_interface_t *p_itf = &_vendord_itf[i]; + osal_mutex_t mutex_rd = p_itf->rx_ff.mutex_rd; + osal_mutex_t mutex_wr = p_itf->tx_ff.mutex_wr; + + if (mutex_rd) { + osal_mutex_delete(mutex_rd); + tu_fifo_config_mutex(&p_itf->rx_ff, NULL, NULL); + } - if (mutex_wr) { - osal_mutex_delete(mutex_wr); - tu_fifo_config_mutex(&p_itf->tx_ff, NULL, NULL); + if (mutex_wr) { + osal_mutex_delete(mutex_wr); + tu_fifo_config_mutex(&p_itf->tx_ff, NULL, NULL); + } } - } - #endif +#endif - return true; + return true; } void vendord_reset(uint8_t rhport) { - (void) rhport; + (void)rhport; - for(uint8_t i=0; irx_ff); - tu_fifo_clear(&p_itf->tx_ff); - } + tu_memclr(p_itf, ITF_MEM_RESET_SIZE); + tu_fifo_clear(&p_itf->rx_ff); + tu_fifo_clear(&p_itf->tx_ff); + } } -uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t max_len) +uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) { - TU_VERIFY(TUSB_CLASS_VENDOR_SPECIFIC == desc_itf->bInterfaceClass, 0); - - uint8_t const * p_desc = tu_desc_next(desc_itf); - uint8_t const * desc_end = p_desc + max_len; - - // Find available interface - vendord_interface_t* p_vendor = NULL; - for(uint8_t i=0; iitf_num = desc_itf->bInterfaceNumber; - if (desc_itf->bNumEndpoints) - { - // skip non-endpoint descriptors - while ( (TUSB_DESC_ENDPOINT != tu_desc_type(p_desc)) && (p_desc < desc_end) ) - { - p_desc = tu_desc_next(p_desc); + TU_VERIFY(TUSB_CLASS_VENDOR_SPECIFIC == desc_itf->bInterfaceClass, 0); + + uint8_t const *p_desc = tu_desc_next(desc_itf); + uint8_t const *desc_end = p_desc + max_len; + + // Find available interface + vendord_interface_t *p_vendor = NULL; + for (uint8_t i = 0; i < CFG_TUD_VENDOR; i++) { + if (_vendord_itf[i].ep_in == 0 && _vendord_itf[i].ep_out == 0) { + p_vendor = &_vendord_itf[i]; + break; + } } + TU_VERIFY(p_vendor, 0); + + p_vendor->itf_num = desc_itf->bInterfaceNumber; + if (desc_itf->bNumEndpoints) { + // skip non-endpoint descriptors + while ((TUSB_DESC_ENDPOINT != tu_desc_type(p_desc)) && (p_desc < desc_end)) { + p_desc = tu_desc_next(p_desc); + } - // Open endpoint pair with usbd helper - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_BULK, &p_vendor->ep_out, &p_vendor->ep_in), 0); + // Open endpoint pair with usbd helper + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_BULK, + &p_vendor->ep_out, &p_vendor->ep_in), + 0); - p_desc += desc_itf->bNumEndpoints*sizeof(tusb_desc_endpoint_t); + p_desc += desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t); - // Prepare for incoming data - if ( p_vendor->ep_out ) - { - _prep_out_transaction(p_vendor); - } + // Prepare for incoming data + if (p_vendor->ep_out) { + _prep_out_transaction(p_vendor); + } - if ( p_vendor->ep_in ) tud_vendor_n_write_flush((uint8_t)(p_vendor - _vendord_itf)); - } + if (p_vendor->ep_in) + tud_vendor_n_write_flush((uint8_t)(p_vendor - _vendord_itf)); + } - return (uint16_t) ((uintptr_t) p_desc - (uintptr_t) desc_itf); + return (uint16_t)((uintptr_t)p_desc - (uintptr_t)desc_itf); } bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) result; + (void)result; - uint8_t itf = 0; - vendord_interface_t* p_itf = _vendord_itf; + uint8_t itf = 0; + vendord_interface_t *p_itf = _vendord_itf; - for ( ; ; itf++, p_itf++) - { - if (itf >= TU_ARRAY_SIZE(_vendord_itf)) return false; + for (;; itf++, p_itf++) { + if (itf >= TU_ARRAY_SIZE(_vendord_itf)) + return false; - if ( ( ep_addr == p_itf->ep_out ) || ( ep_addr == p_itf->ep_in ) ) break; - } - - if ( ep_addr == p_itf->ep_out ) - { - // Receive new data - tu_fifo_write_n(&p_itf->rx_ff, p_itf->epout_buf, (uint16_t) xferred_bytes); - - // Invoked callback if any - if (tud_vendor_rx_cb) tud_vendor_rx_cb(itf); + if ((ep_addr == p_itf->ep_out) || (ep_addr == p_itf->ep_in)) + break; + } - _prep_out_transaction(p_itf); - } - else if ( ep_addr == p_itf->ep_in ) - { - if (tud_vendor_tx_cb) tud_vendor_tx_cb(itf, (uint16_t) xferred_bytes); - // Send complete, try to send more if possible - if ( 0 == tud_vendor_n_write_flush(itf) ) - { - // If there is no data left, a ZLP should be sent if - // xferred_bytes is multiple of EP Packet size and not zero - if ( !tu_fifo_count(&p_itf->tx_ff) && xferred_bytes && (0 == (xferred_bytes & (BULK_PACKET_SIZE-1))) ) - { - if ( usbd_edpt_claim(rhport, p_itf->ep_in) ) - { - usbd_edpt_xfer(rhport, p_itf->ep_in, NULL, 0); + if (ep_addr == p_itf->ep_out) { + // Receive new data + tu_fifo_write_n(&p_itf->rx_ff, p_itf->epout_buf, (uint16_t)xferred_bytes); + + // Invoked callback if any + if (tud_vendor_rx_cb) + tud_vendor_rx_cb(itf); + + _prep_out_transaction(p_itf); + } else if (ep_addr == p_itf->ep_in) { + if (tud_vendor_tx_cb) + tud_vendor_tx_cb(itf, (uint16_t)xferred_bytes); + // Send complete, try to send more if possible + if (0 == tud_vendor_n_write_flush(itf)) { + // If there is no data left, a ZLP should be sent if + // xferred_bytes is multiple of EP Packet size and not zero + if (!tu_fifo_count(&p_itf->tx_ff) && xferred_bytes && + (0 == (xferred_bytes & (BULK_PACKET_SIZE - 1)))) { + if (usbd_edpt_claim(rhport, p_itf->ep_in)) { + usbd_edpt_xfer(rhport, p_itf->ep_in, NULL, 0); + } + } } - } } - } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/vendor/vendor_device.h b/Libraries/tinyusb/src/class/vendor/vendor_device.h index cd69ec7c65e..d6d38189fbd 100644 --- a/Libraries/tinyusb/src/class/vendor/vendor_device.h +++ b/Libraries/tinyusb/src/class/vendor/vendor_device.h @@ -30,28 +30,28 @@ #include "common/tusb_common.h" #ifndef CFG_TUD_VENDOR_EPSIZE -#define CFG_TUD_VENDOR_EPSIZE 64 +#define CFG_TUD_VENDOR_EPSIZE 64 #endif #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ // Application API (Multiple Interfaces) //--------------------------------------------------------------------+ -bool tud_vendor_n_mounted (uint8_t itf); +bool tud_vendor_n_mounted(uint8_t itf); -uint32_t tud_vendor_n_available (uint8_t itf); -uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize); -bool tud_vendor_n_peek (uint8_t itf, uint8_t* ui8); -void tud_vendor_n_read_flush (uint8_t itf); +uint32_t tud_vendor_n_available(uint8_t itf); +uint32_t tud_vendor_n_read(uint8_t itf, void *buffer, uint32_t bufsize); +bool tud_vendor_n_peek(uint8_t itf, uint8_t *ui8); +void tud_vendor_n_read_flush(uint8_t itf); -uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize); -uint32_t tud_vendor_n_write_flush (uint8_t itf); -uint32_t tud_vendor_n_write_available (uint8_t itf); +uint32_t tud_vendor_n_write(uint8_t itf, void const *buffer, uint32_t bufsize); +uint32_t tud_vendor_n_write_flush(uint8_t itf); +uint32_t tud_vendor_n_write_available(uint8_t itf); -static inline uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str); +static inline uint32_t tud_vendor_n_write_str(uint8_t itf, char const *str); // backward compatible #define tud_vendor_n_flush(itf) tud_vendor_n_write_flush(itf) @@ -59,15 +59,15 @@ static inline uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str); //--------------------------------------------------------------------+ // Application API (Single Port) //--------------------------------------------------------------------+ -static inline bool tud_vendor_mounted (void); -static inline uint32_t tud_vendor_available (void); -static inline uint32_t tud_vendor_read (void* buffer, uint32_t bufsize); -static inline bool tud_vendor_peek (uint8_t* ui8); -static inline void tud_vendor_read_flush (void); -static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize); -static inline uint32_t tud_vendor_write_str (char const* str); -static inline uint32_t tud_vendor_write_available (void); -static inline uint32_t tud_vendor_write_flush (void); +static inline bool tud_vendor_mounted(void); +static inline uint32_t tud_vendor_available(void); +static inline uint32_t tud_vendor_read(void *buffer, uint32_t bufsize); +static inline bool tud_vendor_peek(uint8_t *ui8); +static inline void tud_vendor_read_flush(void); +static inline uint32_t tud_vendor_write(void const *buffer, uint32_t bufsize); +static inline uint32_t tud_vendor_write_str(char const *str); +static inline uint32_t tud_vendor_write_available(void); +static inline uint32_t tud_vendor_write_flush(void); // backward compatible #define tud_vendor_flush() tud_vendor_write_flush() @@ -85,29 +85,29 @@ TU_ATTR_WEAK void tud_vendor_tx_cb(uint8_t itf, uint32_t sent_bytes); // Inline Functions //--------------------------------------------------------------------+ -static inline uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str) +static inline uint32_t tud_vendor_n_write_str(uint8_t itf, char const *str) { - return tud_vendor_n_write(itf, str, strlen(str)); + return tud_vendor_n_write(itf, str, strlen(str)); } -static inline bool tud_vendor_mounted (void) +static inline bool tud_vendor_mounted(void) { - return tud_vendor_n_mounted(0); + return tud_vendor_n_mounted(0); } -static inline uint32_t tud_vendor_available (void) +static inline uint32_t tud_vendor_available(void) { - return tud_vendor_n_available(0); + return tud_vendor_n_available(0); } -static inline uint32_t tud_vendor_read (void* buffer, uint32_t bufsize) +static inline uint32_t tud_vendor_read(void *buffer, uint32_t bufsize) { - return tud_vendor_n_read(0, buffer, bufsize); + return tud_vendor_n_read(0, buffer, bufsize); } -static inline bool tud_vendor_peek (uint8_t* ui8) +static inline bool tud_vendor_peek(uint8_t *ui8) { - return tud_vendor_n_peek(0, ui8); + return tud_vendor_n_peek(0, ui8); } static inline void tud_vendor_read_flush(void) @@ -115,37 +115,37 @@ static inline void tud_vendor_read_flush(void) tud_vendor_n_read_flush(0); } -static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize) +static inline uint32_t tud_vendor_write(void const *buffer, uint32_t bufsize) { - return tud_vendor_n_write(0, buffer, bufsize); + return tud_vendor_n_write(0, buffer, bufsize); } -static inline uint32_t tud_vendor_write_flush (void) +static inline uint32_t tud_vendor_write_flush(void) { - return tud_vendor_n_write_flush(0); + return tud_vendor_n_write_flush(0); } -static inline uint32_t tud_vendor_write_str (char const* str) +static inline uint32_t tud_vendor_write_str(char const *str) { - return tud_vendor_n_write_str(0, str); + return tud_vendor_n_write_str(0, str); } -static inline uint32_t tud_vendor_write_available (void) +static inline uint32_t tud_vendor_write_available(void) { - return tud_vendor_n_write_available(0); + return tud_vendor_n_write_available(0); } //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void vendord_init(void); -bool vendord_deinit(void); -void vendord_reset(uint8_t rhport); -uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +void vendord_init(void); +bool vendord_deinit(void); +void vendord_reset(uint8_t rhport); +uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_VENDOR_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/vendor/vendor_host.c b/Libraries/tinyusb/src/class/vendor/vendor_host.c index e66c5007fae..eee65d22ccd 100644 --- a/Libraries/tinyusb/src/class/vendor/vendor_host.c +++ b/Libraries/tinyusb/src/class/vendor/vendor_host.c @@ -43,46 +43,46 @@ //--------------------------------------------------------------------+ custom_interface_info_t custom_interface[CFG_TUH_DEVICE_MAX]; -static tusb_error_t cush_validate_paras(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length) +static tusb_error_t cush_validate_paras(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, + void *p_buffer, uint16_t length) { - if ( !tusbh_custom_is_mounted(dev_addr, vendor_id, product_id) ) - { - return TUSB_ERROR_DEVICE_NOT_READY; - } + if (!tusbh_custom_is_mounted(dev_addr, vendor_id, product_id)) { + return TUSB_ERROR_DEVICE_NOT_READY; + } - TU_ASSERT( p_buffer != NULL && length != 0, TUSB_ERROR_INVALID_PARA); + TU_ASSERT(p_buffer != NULL && length != 0, TUSB_ERROR_INVALID_PARA); - return TUSB_ERROR_NONE; + return TUSB_ERROR_NONE; } //--------------------------------------------------------------------+ // APPLICATION API (need to check parameters) //--------------------------------------------------------------------+ -tusb_error_t tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length) +tusb_error_t tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, + void *p_buffer, uint16_t length) { - TU_ASSERT_ERR( cush_validate_paras(dev_addr, vendor_id, product_id, p_buffer, length) ); + TU_ASSERT_ERR(cush_validate_paras(dev_addr, vendor_id, product_id, p_buffer, length)); - if ( !hcd_pipe_is_idle(custom_interface[dev_addr-1].pipe_in) ) - { - return TUSB_ERROR_INTERFACE_IS_BUSY; - } + if (!hcd_pipe_is_idle(custom_interface[dev_addr - 1].pipe_in)) { + return TUSB_ERROR_INTERFACE_IS_BUSY; + } - (void) usbh_edpt_xfer( custom_interface[dev_addr-1].pipe_in, p_buffer, length); + (void)usbh_edpt_xfer(custom_interface[dev_addr - 1].pipe_in, p_buffer, length); - return TUSB_ERROR_NONE; + return TUSB_ERROR_NONE; } -tusb_error_t tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void const * p_data, uint16_t length) +tusb_error_t tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, + void const *p_data, uint16_t length) { - TU_ASSERT_ERR( cush_validate_paras(dev_addr, vendor_id, product_id, p_data, length) ); + TU_ASSERT_ERR(cush_validate_paras(dev_addr, vendor_id, product_id, p_data, length)); - if ( !hcd_pipe_is_idle(custom_interface[dev_addr-1].pipe_out) ) - { - return TUSB_ERROR_INTERFACE_IS_BUSY; - } + if (!hcd_pipe_is_idle(custom_interface[dev_addr - 1].pipe_out)) { + return TUSB_ERROR_INTERFACE_IS_BUSY; + } - (void) usbh_edpt_xfer( custom_interface[dev_addr-1].pipe_out, p_data, length); + (void)usbh_edpt_xfer(custom_interface[dev_addr - 1].pipe_out, p_data, length); - return TUSB_ERROR_NONE; + return TUSB_ERROR_NONE; } //--------------------------------------------------------------------+ @@ -90,57 +90,53 @@ tusb_error_t tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t p //--------------------------------------------------------------------+ void cush_init(void) { - tu_memclr(&custom_interface, sizeof(custom_interface_info_t) * CFG_TUH_DEVICE_MAX); + tu_memclr(&custom_interface, sizeof(custom_interface_info_t) * CFG_TUH_DEVICE_MAX); } -tusb_error_t cush_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length) +tusb_error_t cush_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, + uint16_t *p_length) { - // FIXME quick hack to test lpc1k custom class with 2 bulk endpoints - uint8_t const *p_desc = (uint8_t const *) p_interface_desc; - p_desc = tu_desc_next(p_desc); + // FIXME quick hack to test lpc1k custom class with 2 bulk endpoints + uint8_t const *p_desc = (uint8_t const *)p_interface_desc; + p_desc = tu_desc_next(p_desc); - //------------- Bulk Endpoints Descriptor -------------// - for(uint32_t i=0; i<2; i++) - { - tusb_desc_endpoint_t const *p_endpoint = (tusb_desc_endpoint_t const *) p_desc; - TU_ASSERT(TUSB_DESC_ENDPOINT == p_endpoint->bDescriptorType, TUSB_ERROR_INVALID_PARA); + //------------- Bulk Endpoints Descriptor -------------// + for (uint32_t i = 0; i < 2; i++) { + tusb_desc_endpoint_t const *p_endpoint = (tusb_desc_endpoint_t const *)p_desc; + TU_ASSERT(TUSB_DESC_ENDPOINT == p_endpoint->bDescriptorType, TUSB_ERROR_INVALID_PARA); - pipe_handle_t * p_pipe_hdl = ( p_endpoint->bEndpointAddress & TUSB_DIR_IN_MASK ) ? - &custom_interface[dev_addr-1].pipe_in : &custom_interface[dev_addr-1].pipe_out; - *p_pipe_hdl = usbh_edpt_open(dev_addr, p_endpoint, TUSB_CLASS_VENDOR_SPECIFIC); - TU_ASSERT ( pipehandle_is_valid(*p_pipe_hdl), TUSB_ERROR_HCD_OPEN_PIPE_FAILED ); + pipe_handle_t *p_pipe_hdl = (p_endpoint->bEndpointAddress & TUSB_DIR_IN_MASK) ? + &custom_interface[dev_addr - 1].pipe_in : + &custom_interface[dev_addr - 1].pipe_out; + *p_pipe_hdl = usbh_edpt_open(dev_addr, p_endpoint, TUSB_CLASS_VENDOR_SPECIFIC); + TU_ASSERT(pipehandle_is_valid(*p_pipe_hdl), TUSB_ERROR_HCD_OPEN_PIPE_FAILED); - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + } - (*p_length) = sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t); - return TUSB_ERROR_NONE; + (*p_length) = sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t); + return TUSB_ERROR_NONE; } -void cush_isr(pipe_handle_t pipe_hdl, xfer_result_t event) -{ - -} +void cush_isr(pipe_handle_t pipe_hdl, xfer_result_t event) {} void cush_close(uint8_t dev_addr) { - tusb_error_t err1, err2; - custom_interface_info_t * p_interface = &custom_interface[dev_addr-1]; + tusb_error_t err1, err2; + custom_interface_info_t *p_interface = &custom_interface[dev_addr - 1]; - // TODO re-consider to check pipe valid before calling pipe_close - if( pipehandle_is_valid( p_interface->pipe_in ) ) - { - err1 = hcd_pipe_close( p_interface->pipe_in ); - } + // TODO re-consider to check pipe valid before calling pipe_close + if (pipehandle_is_valid(p_interface->pipe_in)) { + err1 = hcd_pipe_close(p_interface->pipe_in); + } - if ( pipehandle_is_valid( p_interface->pipe_out ) ) - { - err2 = hcd_pipe_close( p_interface->pipe_out ); - } + if (pipehandle_is_valid(p_interface->pipe_out)) { + err2 = hcd_pipe_close(p_interface->pipe_out); + } - tu_memclr(p_interface, sizeof(custom_interface_info_t)); + tu_memclr(p_interface, sizeof(custom_interface_info_t)); - TU_ASSERT(err1 == TUSB_ERROR_NONE && err2 == TUSB_ERROR_NONE, (void) 0 ); + TU_ASSERT(err1 == TUSB_ERROR_NONE && err2 == TUSB_ERROR_NONE, (void)0); } #endif diff --git a/Libraries/tinyusb/src/class/vendor/vendor_host.h b/Libraries/tinyusb/src/class/vendor/vendor_host.h index acfebe7a4d8..38698c2bfdc 100644 --- a/Libraries/tinyusb/src/class/vendor/vendor_host.h +++ b/Libraries/tinyusb/src/class/vendor/vendor_host.h @@ -30,38 +30,42 @@ #include "common/tusb_common.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif typedef struct { - pipe_handle_t pipe_in; - pipe_handle_t pipe_out; -}custom_interface_info_t; + pipe_handle_t pipe_in; + pipe_handle_t pipe_out; +} custom_interface_info_t; //--------------------------------------------------------------------+ // USBH-CLASS DRIVER API //--------------------------------------------------------------------+ -static inline bool tusbh_custom_is_mounted(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id) +static inline bool tusbh_custom_is_mounted(uint8_t dev_addr, uint16_t vendor_id, + uint16_t product_id) { - (void) vendor_id; // TODO check this later - (void) product_id; -// return (tusbh_device_get_mounted_class_flag(dev_addr) & TU_BIT(TUSB_CLASS_MAPPED_INDEX_END-1) ) != 0; - return false; + (void)vendor_id; // TODO check this later + (void)product_id; + // return (tusbh_device_get_mounted_class_flag(dev_addr) & TU_BIT(TUSB_CLASS_MAPPED_INDEX_END-1) ) != 0; + return false; } -bool tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length); -bool tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void const * p_data, uint16_t length); +bool tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void *p_buffer, + uint16_t length); +bool tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, + void const *p_data, uint16_t length); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ void cush_init(void); -bool cush_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length); +bool cush_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, + uint16_t *p_length); void cush_isr(pipe_handle_t pipe_hdl, xfer_result_t event); void cush_close(uint8_t dev_addr); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_VENDOR_HOST_H_ */ diff --git a/Libraries/tinyusb/src/class/video/video.h b/Libraries/tinyusb/src/class/video/video.h index b8a9b6369ed..68a0ad533a4 100644 --- a/Libraries/tinyusb/src/class/video/video.h +++ b/Libraries/tinyusb/src/class/video/video.h @@ -30,176 +30,176 @@ #include "common/tusb_common.h" enum { - VIDEO_BCD_1_50 = 0x0150, + VIDEO_BCD_1_50 = 0x0150, }; // Table 3-19 Color Matching Descriptor typedef enum { - VIDEO_COLOR_PRIMARIES_UNDEFINED = 0x00, - VIDEO_COLOR_PRIMARIES_BT709, // sRGB (default) - VIDEO_COLOR_PRIMARIES_BT470_2M, - VIDEO_COLOR_PRIMARIES_BT470_2BG, - VIDEO_COLOR_PRIMARIES_SMPTE170M, - VIDEO_COLOR_PRIMARIES_SMPTE240M, + VIDEO_COLOR_PRIMARIES_UNDEFINED = 0x00, + VIDEO_COLOR_PRIMARIES_BT709, // sRGB (default) + VIDEO_COLOR_PRIMARIES_BT470_2M, + VIDEO_COLOR_PRIMARIES_BT470_2BG, + VIDEO_COLOR_PRIMARIES_SMPTE170M, + VIDEO_COLOR_PRIMARIES_SMPTE240M, } video_color_primaries_t; // Table 3-19 Color Matching Descriptor typedef enum { - VIDEO_COLOR_XFER_CH_UNDEFINED = 0x00, - VIDEO_COLOR_XFER_CH_BT709, // default - VIDEO_COLOR_XFER_CH_BT470_2M, - VIDEO_COLOR_XFER_CH_BT470_2BG, - VIDEO_COLOR_XFER_CH_SMPTE170M, - VIDEO_COLOR_XFER_CH_SMPTE240M, - VIDEO_COLOR_XFER_CH_LINEAR, - VIDEO_COLOR_XFER_CH_SRGB, + VIDEO_COLOR_XFER_CH_UNDEFINED = 0x00, + VIDEO_COLOR_XFER_CH_BT709, // default + VIDEO_COLOR_XFER_CH_BT470_2M, + VIDEO_COLOR_XFER_CH_BT470_2BG, + VIDEO_COLOR_XFER_CH_SMPTE170M, + VIDEO_COLOR_XFER_CH_SMPTE240M, + VIDEO_COLOR_XFER_CH_LINEAR, + VIDEO_COLOR_XFER_CH_SRGB, } video_color_transfer_characteristics_t; // Table 3-19 Color Matching Descriptor typedef enum { - VIDEO_COLOR_COEF_UNDEFINED = 0x00, - VIDEO_COLOR_COEF_BT709, - VIDEO_COLOR_COEF_FCC, - VIDEO_COLOR_COEF_BT470_2BG, - VIDEO_COLOR_COEF_SMPTE170M, // BT.601 default - VIDEO_COLOR_COEF_SMPTE240M, + VIDEO_COLOR_COEF_UNDEFINED = 0x00, + VIDEO_COLOR_COEF_BT709, + VIDEO_COLOR_COEF_FCC, + VIDEO_COLOR_COEF_BT470_2BG, + VIDEO_COLOR_COEF_SMPTE170M, // BT.601 default + VIDEO_COLOR_COEF_SMPTE240M, } video_color_matrix_coefficients_t; /* 4.2.1.2 Request Error Code Control */ typedef enum { - VIDEO_ERROR_NONE = 0, /* The request succeeded. */ - VIDEO_ERROR_NOT_READY, - VIDEO_ERROR_WRONG_STATE, - VIDEO_ERROR_POWER, - VIDEO_ERROR_OUT_OF_RANGE, - VIDEO_ERROR_INVALID_UNIT, - VIDEO_ERROR_INVALID_CONTROL, - VIDEO_ERROR_INVALID_REQUEST, - VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE, - VIDEO_ERROR_UNKNOWN = 0xFF, + VIDEO_ERROR_NONE = 0, /* The request succeeded. */ + VIDEO_ERROR_NOT_READY, + VIDEO_ERROR_WRONG_STATE, + VIDEO_ERROR_POWER, + VIDEO_ERROR_OUT_OF_RANGE, + VIDEO_ERROR_INVALID_UNIT, + VIDEO_ERROR_INVALID_CONTROL, + VIDEO_ERROR_INVALID_REQUEST, + VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE, + VIDEO_ERROR_UNKNOWN = 0xFF, } video_error_code_t; /* A.2 Interface Subclass */ typedef enum { - VIDEO_SUBCLASS_UNDEFINED = 0x00, - VIDEO_SUBCLASS_CONTROL, - VIDEO_SUBCLASS_STREAMING, - VIDEO_SUBCLASS_INTERFACE_COLLECTION, + VIDEO_SUBCLASS_UNDEFINED = 0x00, + VIDEO_SUBCLASS_CONTROL, + VIDEO_SUBCLASS_STREAMING, + VIDEO_SUBCLASS_INTERFACE_COLLECTION, } video_subclass_type_t; /* A.3 Interface Protocol */ typedef enum { - VIDEO_ITF_PROTOCOL_UNDEFINED = 0x00, - VIDEO_ITF_PROTOCOL_15, + VIDEO_ITF_PROTOCOL_UNDEFINED = 0x00, + VIDEO_ITF_PROTOCOL_15, } video_interface_protocol_code_t; /* A.5 Class-Specific VideoControl Interface Descriptor Subtypes */ typedef enum { - VIDEO_CS_ITF_VC_UNDEFINED = 0x00, - VIDEO_CS_ITF_VC_HEADER, - VIDEO_CS_ITF_VC_INPUT_TERMINAL, - VIDEO_CS_ITF_VC_OUTPUT_TERMINAL, - VIDEO_CS_ITF_VC_SELECTOR_UNIT, - VIDEO_CS_ITF_VC_PROCESSING_UNIT, - VIDEO_CS_ITF_VC_EXTENSION_UNIT, - VIDEO_CS_ITF_VC_ENCODING_UNIT, - VIDEO_CS_ITF_VC_MAX, + VIDEO_CS_ITF_VC_UNDEFINED = 0x00, + VIDEO_CS_ITF_VC_HEADER, + VIDEO_CS_ITF_VC_INPUT_TERMINAL, + VIDEO_CS_ITF_VC_OUTPUT_TERMINAL, + VIDEO_CS_ITF_VC_SELECTOR_UNIT, + VIDEO_CS_ITF_VC_PROCESSING_UNIT, + VIDEO_CS_ITF_VC_EXTENSION_UNIT, + VIDEO_CS_ITF_VC_ENCODING_UNIT, + VIDEO_CS_ITF_VC_MAX, } video_cs_vc_interface_subtype_t; /* A.6 Class-Specific VideoStreaming Interface Descriptor Subtypes */ typedef enum { - VIDEO_CS_ITF_VS_UNDEFINED = 0x00, - VIDEO_CS_ITF_VS_INPUT_HEADER = 0x01, - VIDEO_CS_ITF_VS_OUTPUT_HEADER = 0x02, - VIDEO_CS_ITF_VS_STILL_IMAGE_FRAME = 0x03, - VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED = 0x04, - VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED = 0x05, - VIDEO_CS_ITF_VS_FORMAT_MJPEG = 0x06, - VIDEO_CS_ITF_VS_FRAME_MJPEG = 0x07, - VIDEO_CS_ITF_VS_FORMAT_MPEG2TS = 0x0A, - VIDEO_CS_ITF_VS_FORMAT_DV = 0x0C, - VIDEO_CS_ITF_VS_COLORFORMAT = 0x0D, - VIDEO_CS_ITF_VS_FORMAT_FRAME_BASED = 0x10, - VIDEO_CS_ITF_VS_FRAME_FRAME_BASED = 0x11, - VIDEO_CS_ITF_VS_FORMAT_STREAM_BASED = 0x12, - VIDEO_CS_ITF_VS_FORMAT_H264 = 0x13, - VIDEO_CS_ITF_VS_FRAME_H264 = 0x14, - VIDEO_CS_ITF_VS_FORMAT_H264_SIMULCAST = 0x15, - VIDEO_CS_ITF_VS_FORMAT_VP8 = 0x16, - VIDEO_CS_ITF_VS_FRAME_VP8 = 0x17, - VIDEO_CS_ITF_VS_FORMAT_VP8_SIMULCAST = 0x18, + VIDEO_CS_ITF_VS_UNDEFINED = 0x00, + VIDEO_CS_ITF_VS_INPUT_HEADER = 0x01, + VIDEO_CS_ITF_VS_OUTPUT_HEADER = 0x02, + VIDEO_CS_ITF_VS_STILL_IMAGE_FRAME = 0x03, + VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED = 0x04, + VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED = 0x05, + VIDEO_CS_ITF_VS_FORMAT_MJPEG = 0x06, + VIDEO_CS_ITF_VS_FRAME_MJPEG = 0x07, + VIDEO_CS_ITF_VS_FORMAT_MPEG2TS = 0x0A, + VIDEO_CS_ITF_VS_FORMAT_DV = 0x0C, + VIDEO_CS_ITF_VS_COLORFORMAT = 0x0D, + VIDEO_CS_ITF_VS_FORMAT_FRAME_BASED = 0x10, + VIDEO_CS_ITF_VS_FRAME_FRAME_BASED = 0x11, + VIDEO_CS_ITF_VS_FORMAT_STREAM_BASED = 0x12, + VIDEO_CS_ITF_VS_FORMAT_H264 = 0x13, + VIDEO_CS_ITF_VS_FRAME_H264 = 0x14, + VIDEO_CS_ITF_VS_FORMAT_H264_SIMULCAST = 0x15, + VIDEO_CS_ITF_VS_FORMAT_VP8 = 0x16, + VIDEO_CS_ITF_VS_FRAME_VP8 = 0x17, + VIDEO_CS_ITF_VS_FORMAT_VP8_SIMULCAST = 0x18, } video_cs_vs_interface_subtype_t; /* A.7. Class-Specific Endpoint Descriptor Subtypes */ typedef enum { - VIDEO_CS_EP_UNDEFINED = 0x00, - VIDEO_CS_EP_GENERAL, - VIDEO_CS_EP_ENDPOINT, - VIDEO_CS_EP_INTERRUPT + VIDEO_CS_EP_UNDEFINED = 0x00, + VIDEO_CS_EP_GENERAL, + VIDEO_CS_EP_ENDPOINT, + VIDEO_CS_EP_INTERRUPT } video_cs_ep_subtype_t; /* A.8 Class-Specific Request Codes */ typedef enum { - VIDEO_REQUEST_UNDEFINED = 0x00, - VIDEO_REQUEST_SET_CUR = 0x01, - VIDEO_REQUEST_SET_CUR_ALL = 0x11, - VIDEO_REQUEST_GET_CUR = 0x81, - VIDEO_REQUEST_GET_MIN = 0x82, - VIDEO_REQUEST_GET_MAX = 0x83, - VIDEO_REQUEST_GET_RES = 0x84, - VIDEO_REQUEST_GET_LEN = 0x85, - VIDEO_REQUEST_GET_INFO = 0x86, - VIDEO_REQUEST_GET_DEF = 0x87, - VIDEO_REQUEST_GET_CUR_ALL = 0x91, - VIDEO_REQUEST_GET_MIN_ALL = 0x92, - VIDEO_REQUEST_GET_MAX_ALL = 0x93, - VIDEO_REQUEST_GET_RES_ALL = 0x94, - VIDEO_REQUEST_GET_DEF_ALL = 0x97 + VIDEO_REQUEST_UNDEFINED = 0x00, + VIDEO_REQUEST_SET_CUR = 0x01, + VIDEO_REQUEST_SET_CUR_ALL = 0x11, + VIDEO_REQUEST_GET_CUR = 0x81, + VIDEO_REQUEST_GET_MIN = 0x82, + VIDEO_REQUEST_GET_MAX = 0x83, + VIDEO_REQUEST_GET_RES = 0x84, + VIDEO_REQUEST_GET_LEN = 0x85, + VIDEO_REQUEST_GET_INFO = 0x86, + VIDEO_REQUEST_GET_DEF = 0x87, + VIDEO_REQUEST_GET_CUR_ALL = 0x91, + VIDEO_REQUEST_GET_MIN_ALL = 0x92, + VIDEO_REQUEST_GET_MAX_ALL = 0x93, + VIDEO_REQUEST_GET_RES_ALL = 0x94, + VIDEO_REQUEST_GET_DEF_ALL = 0x97 } video_control_request_t; /* A.9.1 VideoControl Interface Control Selectors */ typedef enum { - VIDEO_VC_CTL_UNDEFINED = 0x00, - VIDEO_VC_CTL_VIDEO_POWER_MODE, // 0x01 - VIDEO_VC_CTL_REQUEST_ERROR_CODE, // 0x02 + VIDEO_VC_CTL_UNDEFINED = 0x00, + VIDEO_VC_CTL_VIDEO_POWER_MODE, // 0x01 + VIDEO_VC_CTL_REQUEST_ERROR_CODE, // 0x02 } video_interface_control_selector_t; /* A.9.8 VideoStreaming Interface Control Selectors */ typedef enum { - VIDEO_VS_CTL_UNDEFINED = 0x00, - VIDEO_VS_CTL_PROBE, // 0x01 - VIDEO_VS_CTL_COMMIT, // 0x02 - VIDEO_VS_CTL_STILL_PROBE, // 0x03 - VIDEO_VS_CTL_STILL_COMMIT, // 0x04 - VIDEO_VS_CTL_STILL_IMAGE_TRIGGER, // 0x05 - VIDEO_VS_CTL_STREAM_ERROR_CODE, // 0x06 - VIDEO_VS_CTL_GENERATE_KEY_FRAME, // 0x07 - VIDEO_VS_CTL_UPDATE_FRAME_SEGMENT, // 0x08 - VIDEO_VS_CTL_SYNCH_DELAY_CONTROL, // 0x09 + VIDEO_VS_CTL_UNDEFINED = 0x00, + VIDEO_VS_CTL_PROBE, // 0x01 + VIDEO_VS_CTL_COMMIT, // 0x02 + VIDEO_VS_CTL_STILL_PROBE, // 0x03 + VIDEO_VS_CTL_STILL_COMMIT, // 0x04 + VIDEO_VS_CTL_STILL_IMAGE_TRIGGER, // 0x05 + VIDEO_VS_CTL_STREAM_ERROR_CODE, // 0x06 + VIDEO_VS_CTL_GENERATE_KEY_FRAME, // 0x07 + VIDEO_VS_CTL_UPDATE_FRAME_SEGMENT, // 0x08 + VIDEO_VS_CTL_SYNCH_DELAY_CONTROL, // 0x09 } video_interface_streaming_selector_t; /* B. Terminal Types */ typedef enum { - // Terminal - VIDEO_TT_VENDOR_SPECIFIC = 0x0100, - VIDEO_TT_STREAMING = 0x0101, - - // Input - VIDEO_ITT_VENDOR_SPECIFIC = 0x0200, - VIDEO_ITT_CAMERA = 0x0201, - VIDEO_ITT_MEDIA_TRANSPORT_INPUT = 0x0202, - - // Output - VIDEO_OTT_VENDOR_SPECIFIC = 0x0300, - VIDEO_OTT_DISPLAY = 0x0301, - VIDEO_OTT_MEDIA_TRANSPORT_OUTPUT = 0x0302, - - // External - VIDEO_ETT_VENDOR_SPEIFIC = 0x0400, - VIDEO_ETT_COMPOSITE_CONNECTOR = 0x0401, - VIDEO_ETT_SVIDEO_CONNECTOR = 0x0402, - VIDEO_ETT_COMPONENT_CONNECTOR = 0x0403, + // Terminal + VIDEO_TT_VENDOR_SPECIFIC = 0x0100, + VIDEO_TT_STREAMING = 0x0101, + + // Input + VIDEO_ITT_VENDOR_SPECIFIC = 0x0200, + VIDEO_ITT_CAMERA = 0x0201, + VIDEO_ITT_MEDIA_TRANSPORT_INPUT = 0x0202, + + // Output + VIDEO_OTT_VENDOR_SPECIFIC = 0x0300, + VIDEO_OTT_DISPLAY = 0x0301, + VIDEO_OTT_MEDIA_TRANSPORT_OUTPUT = 0x0302, + + // External + VIDEO_ETT_VENDOR_SPEIFIC = 0x0400, + VIDEO_ETT_COMPOSITE_CONNECTOR = 0x0401, + VIDEO_ETT_SVIDEO_CONNECTOR = 0x0402, + VIDEO_ETT_COMPONENT_CONNECTOR = 0x0403, } video_terminal_type_t; //--------------------------------------------------------------------+ @@ -208,62 +208,62 @@ typedef enum { /* 2.3.4.2 */ #define tusb_desc_video_control_header_nitf_t(_nitf) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint16_t bcdUVC; \ - uint16_t wTotalLength; \ - uint32_t dwClockFrequency; /* deprecated */ \ - uint8_t bInCollection; \ - uint8_t baInterfaceNr[_nitf]; \ - } - -typedef tusb_desc_video_control_header_nitf_t() tusb_desc_video_control_header_t; + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint16_t bcdUVC; \ + uint16_t wTotalLength; \ + uint32_t dwClockFrequency; /* deprecated */ \ + uint8_t bInCollection; \ + uint8_t baInterfaceNr[_nitf]; \ + } + +typedef tusb_desc_video_control_header_nitf_t() tusb_desc_video_control_header_t; typedef tusb_desc_video_control_header_nitf_t(1) tusb_desc_video_control_header_1itf_t; typedef tusb_desc_video_control_header_nitf_t(2) tusb_desc_video_control_header_2itf_t; typedef tusb_desc_video_control_header_nitf_t(3) tusb_desc_video_control_header_3itf_t; typedef tusb_desc_video_control_header_nitf_t(4) tusb_desc_video_control_header_4itf_t; typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bTerminalID; - uint16_t wTerminalType; - uint8_t bAssocTerminal; - uint8_t iTerminal; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t iTerminal; } tusb_desc_video_control_input_terminal_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_control_input_terminal_t) == 8, "size is not correct"); typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bTerminalID; - uint16_t wTerminalType; - uint8_t bAssocTerminal; - uint8_t bSourceID; - uint8_t iTerminal; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t bSourceID; + uint8_t iTerminal; } tusb_desc_video_control_output_terminal_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_control_output_terminal_t) == 9, "size is not correct"); typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bTerminalID; - uint16_t wTerminalType; - uint8_t bAssocTerminal; - uint8_t iTerminal; - - uint16_t wObjectiveFocalLengthMin; - uint16_t wObjectiveFocalLengthMax; - uint16_t wOcularFocalLength; - uint8_t bControlSize; - uint8_t bmControls[3]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t iTerminal; + + uint16_t wObjectiveFocalLengthMin; + uint16_t wObjectiveFocalLengthMax; + uint16_t wOcularFocalLength; + uint8_t bControlSize; + uint8_t bmControls[3]; } tusb_desc_video_control_camera_terminal_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_control_camera_terminal_t) == 18, "size is not correct"); @@ -273,76 +273,80 @@ TU_VERIFY_STATIC(sizeof(tusb_desc_video_control_camera_terminal_t) == 18, "size //--------------------------------------------------------------------+ /* 3.9.2.1 */ -#define tusb_desc_video_streaming_input_header_nbyte_t(_nb) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bNumFormats; /* Number of video payload Format descriptors for this interface */ \ - uint16_t wTotalLength; \ - uint8_t bEndpointAddress; \ - uint8_t bmInfo; /* Bit 0: dynamic format change supported */ \ - uint8_t bTerminalLink; \ - uint8_t bStillCaptureMethod; \ - uint8_t bTriggerSupport; /* Hardware trigger supported */ \ - uint8_t bTriggerUsage; \ - uint8_t bControlSize; /* sizeof of each control item */ \ - uint8_t bmaControls[_nb]; \ - } +#define tusb_desc_video_streaming_input_header_nbyte_t(_nb) \ + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bNumFormats; /* Number of video payload Format descriptors for this interface */ \ + uint16_t wTotalLength; \ + uint8_t bEndpointAddress; \ + uint8_t bmInfo; /* Bit 0: dynamic format change supported */ \ + uint8_t bTerminalLink; \ + uint8_t bStillCaptureMethod; \ + uint8_t bTriggerSupport; /* Hardware trigger supported */ \ + uint8_t bTriggerUsage; \ + uint8_t bControlSize; /* sizeof of each control item */ \ + uint8_t bmaControls[_nb]; \ + } typedef tusb_desc_video_streaming_input_header_nbyte_t() tusb_desc_video_streaming_input_header_t; -typedef tusb_desc_video_streaming_input_header_nbyte_t(1) tusb_desc_video_streaming_input_header_1byte_t; -typedef tusb_desc_video_streaming_input_header_nbyte_t(2) tusb_desc_video_streaming_input_header_2byte_t; -typedef tusb_desc_video_streaming_input_header_nbyte_t(3) tusb_desc_video_streaming_input_header_3byte_t; -typedef tusb_desc_video_streaming_input_header_nbyte_t(4) tusb_desc_video_streaming_input_header_4byte_t; +typedef tusb_desc_video_streaming_input_header_nbyte_t(1) + tusb_desc_video_streaming_input_header_1byte_t; +typedef tusb_desc_video_streaming_input_header_nbyte_t(2) + tusb_desc_video_streaming_input_header_2byte_t; +typedef tusb_desc_video_streaming_input_header_nbyte_t(3) + tusb_desc_video_streaming_input_header_3byte_t; +typedef tusb_desc_video_streaming_input_header_nbyte_t(4) + tusb_desc_video_streaming_input_header_4byte_t; /* 3.9.2.2 */ typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bNumFormats; - uint16_t wTotalLength; - uint8_t bEndpointAddress; - uint8_t bTerminalLink; - uint8_t bControlSize; - uint8_t bmaControls[]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bNumFormats; + uint16_t wTotalLength; + uint8_t bEndpointAddress; + uint8_t bTerminalLink; + uint8_t bControlSize; + uint8_t bmaControls[]; } tusb_desc_video_streaming_output_header_t; typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bNumFormats; - uint16_t wTotalLength; - uint8_t bEndpointAddress; - union { - struct { - uint8_t bmInfo; - uint8_t bTerminalLink; - uint8_t bStillCaptureMethod; - uint8_t bTriggerSupport; - uint8_t bTriggerUsage; - uint8_t bControlSize; - uint8_t bmaControls[]; - } input; - struct { - uint8_t bEndpointAddress; - uint8_t bTerminalLink; - uint8_t bControlSize; - uint8_t bmaControls[]; - } output; - }; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bNumFormats; + uint16_t wTotalLength; + uint8_t bEndpointAddress; + union { + struct { + uint8_t bmInfo; + uint8_t bTerminalLink; + uint8_t bStillCaptureMethod; + uint8_t bTriggerSupport; + uint8_t bTriggerUsage; + uint8_t bControlSize; + uint8_t bmaControls[]; + } input; + struct { + uint8_t bEndpointAddress; + uint8_t bTerminalLink; + uint8_t bControlSize; + uint8_t bmaControls[]; + } output; + }; } tusb_desc_video_streaming_inout_header_t; // 3.9.2.6 Color Matching Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bColorPrimaries; - uint8_t bTransferCharacteristics; - uint8_t bMatrixCoefficients; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bColorPrimaries; + uint8_t bTransferCharacteristics; + uint8_t bMatrixCoefficients; } tusb_desc_video_streaming_color_matching_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_streaming_color_matching_t) == 6, "size is not correct"); @@ -355,39 +359,39 @@ TU_VERIFY_STATIC(sizeof(tusb_desc_video_streaming_color_matching_t) == 6, "size //------------- Uncompressed -------------// // Uncompressed payload specs: 3.1.1 format descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint8_t bNumFrameDescriptors; // Number of frame descriptors for this format - uint8_t guidFormat[16]; - uint8_t bBitsPerPixel; - uint8_t bDefaultFrameIndex; - uint8_t bAspectRatioX; - uint8_t bAspectRatioY; - uint8_t bmInterlaceFlags; - uint8_t bCopyProtect; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; // Number of frame descriptors for this format + uint8_t guidFormat[16]; + uint8_t bBitsPerPixel; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; } tusb_desc_video_format_uncompressed_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_format_uncompressed_t) == 27, "size is not correct"); // Uncompressed payload specs: 3.1.2 frame descriptor -#define tusb_desc_video_frame_uncompressed_nint_t(_nint) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bFrameIndex; \ - uint8_t bmCapabilities; \ - uint16_t wWidth; \ - uint16_t wHeight; \ - uint32_t dwMinBitRate; \ - uint32_t dwMaxBitRate; \ - uint32_t dwMaxVideoFrameBufferSize; /* deprecated in 1.5 */ \ - uint32_t dwDefaultFrameInterval; /* 100ns unit */\ - uint8_t bFrameIntervalType; \ - uint32_t dwFrameInterval[_nint]; \ - } +#define tusb_desc_video_frame_uncompressed_nint_t(_nint) \ + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bFrameIndex; \ + uint8_t bmCapabilities; \ + uint16_t wWidth; \ + uint16_t wHeight; \ + uint32_t dwMinBitRate; \ + uint32_t dwMaxBitRate; \ + uint32_t dwMaxVideoFrameBufferSize; /* deprecated in 1.5 */ \ + uint32_t dwDefaultFrameInterval; /* 100ns unit */ \ + uint8_t bFrameIntervalType; \ + uint32_t dwFrameInterval[_nint]; \ + } typedef tusb_desc_video_frame_uncompressed_nint_t() tusb_desc_video_frame_uncompressed_t; typedef tusb_desc_video_frame_uncompressed_nint_t(1) tusb_desc_video_frame_uncompressed_1int_t; @@ -398,22 +402,23 @@ typedef tusb_desc_video_frame_uncompressed_nint_t(4) tusb_desc_video_frame_uncom // continuous = 3 intervals: min, max, step typedef tusb_desc_video_frame_uncompressed_3int_t tusb_desc_video_frame_uncompressed_continuous_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_video_frame_uncompressed_continuous_t) == 38, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_video_frame_uncompressed_continuous_t) == 38, + "size is not correct"); //------------- MJPEG -------------// // MJPEG payload specs: 3.1.1 format descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint8_t bNumFrameDescriptors; - uint8_t bmFlags; // Bit 0: fixed size samples (1 = yes) - uint8_t bDefaultFrameIndex; - uint8_t bAspectRatioX; - uint8_t bAspectRatioY; - uint8_t bmInterlaceFlags; - uint8_t bCopyProtect; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t bmFlags; // Bit 0: fixed size samples (1 = yes) + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; } tusb_desc_video_format_mjpeg_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_format_mjpeg_t) == 11, "size is not correct"); @@ -431,45 +436,45 @@ typedef tusb_desc_video_frame_mjpeg_3int_t tusb_desc_video_frame_mjpeg_continuou //------------- DV -------------// // DV payload specs: 3.1.1 typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint32_t dwMaxVideoFrameBufferSize; /* deprecated */ - uint8_t bFormatType; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint32_t dwMaxVideoFrameBufferSize; /* deprecated */ + uint8_t bFormatType; } tusb_desc_video_format_dv_t; // Frame Based payload specs: 3.1.1 typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint8_t bNumFrameDescriptors; - uint8_t guidFormat[16]; - uint8_t bBitsPerPixel; - uint8_t bDefaultFrameIndex; - uint8_t bAspectRatioX; - uint8_t bAspectRatioY; - uint8_t bmInterlaceFlags; - uint8_t bCopyProtect; - uint8_t bVaribaleSize; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t guidFormat[16]; + uint8_t bBitsPerPixel; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; + uint8_t bVaribaleSize; } tusb_desc_video_format_framebased_t; typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFrameIndex; - uint8_t bmCapabilities; - uint16_t wWidth; - uint16_t wHeight; - uint32_t dwMinBitRate; - uint32_t dwMaxBitRate; - uint32_t dwDefaultFrameInterval; - uint8_t bFrameIntervalType; - uint32_t dwBytesPerLine; - uint32_t dwFrameInterval[]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwBytesPerLine; + uint32_t dwFrameInterval[]; } tusb_desc_video_frame_framebased_t; //--------------------------------------------------------------------+ @@ -478,197 +483,218 @@ typedef struct TU_ATTR_PACKED { /* 2.4.3.3 */ typedef struct TU_ATTR_PACKED { - uint8_t bHeaderLength; - union { - uint8_t bmHeaderInfo; - struct { - uint8_t FrameID: 1; - uint8_t EndOfFrame: 1; - uint8_t PresentationTime: 1; - uint8_t SourceClockReference: 1; - uint8_t PayloadSpecific: 1; - uint8_t StillImage: 1; - uint8_t Error: 1; - uint8_t EndOfHeader: 1; + uint8_t bHeaderLength; + union { + uint8_t bmHeaderInfo; + struct { + uint8_t FrameID : 1; + uint8_t EndOfFrame : 1; + uint8_t PresentationTime : 1; + uint8_t SourceClockReference : 1; + uint8_t PayloadSpecific : 1; + uint8_t StillImage : 1; + uint8_t Error : 1; + uint8_t EndOfHeader : 1; + }; }; - }; } tusb_video_payload_header_t; /* 4.3.1.1 */ typedef struct TU_ATTR_PACKED { - union { - uint8_t bmHint; - struct TU_ATTR_PACKED { - uint16_t dwFrameInterval: 1; - uint16_t wKeyFrameRatel : 1; - uint16_t wPFrameRate : 1; - uint16_t wCompQuality : 1; - uint16_t wCompWindowSize: 1; - uint16_t : 0; - } Hint; - }; - uint8_t bFormatIndex; - uint8_t bFrameIndex; - uint32_t dwFrameInterval; - uint16_t wKeyFrameRate; - uint16_t wPFrameRate; - uint16_t wCompQuality; - uint16_t wCompWindowSize; - uint16_t wDelay; - uint32_t dwMaxVideoFrameSize; - uint32_t dwMaxPayloadTransferSize; - uint32_t dwClockFrequency; - union { - uint8_t bmFramingInfo; - struct TU_ATTR_PACKED { - uint8_t FrameID : 1; - uint8_t EndOfFrame: 1; - uint8_t EndOfSlice: 1; - uint8_t : 0; - } FramingInfo; - }; - uint8_t bPreferedVersion; - uint8_t bMinVersion; - uint8_t bMaxVersion; - uint8_t bUsage; - uint8_t bBitDepthLuma; - uint8_t bmSettings; - uint8_t bMaxNumberOfRefFramesPlus1; - uint16_t bmRateControlModes; - uint64_t bmLayoutPerStream; + union { + uint8_t bmHint; + struct TU_ATTR_PACKED { + uint16_t dwFrameInterval : 1; + uint16_t wKeyFrameRatel : 1; + uint16_t wPFrameRate : 1; + uint16_t wCompQuality : 1; + uint16_t wCompWindowSize : 1; + uint16_t : 0; + } Hint; + }; + uint8_t bFormatIndex; + uint8_t bFrameIndex; + uint32_t dwFrameInterval; + uint16_t wKeyFrameRate; + uint16_t wPFrameRate; + uint16_t wCompQuality; + uint16_t wCompWindowSize; + uint16_t wDelay; + uint32_t dwMaxVideoFrameSize; + uint32_t dwMaxPayloadTransferSize; + uint32_t dwClockFrequency; + union { + uint8_t bmFramingInfo; + struct TU_ATTR_PACKED { + uint8_t FrameID : 1; + uint8_t EndOfFrame : 1; + uint8_t EndOfSlice : 1; + uint8_t : 0; + } FramingInfo; + }; + uint8_t bPreferedVersion; + uint8_t bMinVersion; + uint8_t bMaxVersion; + uint8_t bUsage; + uint8_t bBitDepthLuma; + uint8_t bmSettings; + uint8_t bMaxNumberOfRefFramesPlus1; + uint16_t bmRateControlModes; + uint64_t bmLayoutPerStream; } video_probe_and_commit_control_t; -TU_VERIFY_STATIC( sizeof(video_probe_and_commit_control_t) == 48, "size is not correct"); - -#define TUD_VIDEO_DESC_IAD_LEN 8 -#define TUD_VIDEO_DESC_STD_VC_LEN 9 -#define TUD_VIDEO_DESC_CS_VC_LEN 12 -#define TUD_VIDEO_DESC_INPUT_TERM_LEN 8 -#define TUD_VIDEO_DESC_OUTPUT_TERM_LEN 9 -#define TUD_VIDEO_DESC_CAMERA_TERM_LEN 18 -#define TUD_VIDEO_DESC_STD_VS_LEN 9 -#define TUD_VIDEO_DESC_CS_VS_IN_LEN 13 -#define TUD_VIDEO_DESC_CS_VS_OUT_LEN 9 -#define TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN 27 -#define TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN 11 +TU_VERIFY_STATIC(sizeof(video_probe_and_commit_control_t) == 48, "size is not correct"); + +#define TUD_VIDEO_DESC_IAD_LEN 8 +#define TUD_VIDEO_DESC_STD_VC_LEN 9 +#define TUD_VIDEO_DESC_CS_VC_LEN 12 +#define TUD_VIDEO_DESC_INPUT_TERM_LEN 8 +#define TUD_VIDEO_DESC_OUTPUT_TERM_LEN 9 +#define TUD_VIDEO_DESC_CAMERA_TERM_LEN 18 +#define TUD_VIDEO_DESC_STD_VS_LEN 9 +#define TUD_VIDEO_DESC_CS_VS_IN_LEN 13 +#define TUD_VIDEO_DESC_CS_VS_OUT_LEN 9 +#define TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN 27 +#define TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN 11 #define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN 38 #define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC_LEN 26 -#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN 38 -#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC_LEN 26 -#define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN 6 +#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN 38 +#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC_LEN 26 +#define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN 6 /* 2.2 compression formats */ -#define TUD_VIDEO_GUID_YUY2 0x59,0x55,0x59,0x32,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 -#define TUD_VIDEO_GUID_NV12 0x4E,0x56,0x31,0x32,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 -#define TUD_VIDEO_GUID_M420 0x4D,0x34,0x32,0x30,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 -#define TUD_VIDEO_GUID_I420 0x49,0x34,0x32,0x30,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 - -#define TUD_VIDEO_DESC_IAD(_firstitf, _nitfs, _stridx) \ - TUD_VIDEO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, \ - _firstitf, _nitfs, TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_INTERFACE_COLLECTION, \ - VIDEO_ITF_PROTOCOL_UNDEFINED, _stridx - -#define TUD_VIDEO_DESC_STD_VC(_itfnum, _nEPs, _stridx) \ - TUD_VIDEO_DESC_STD_VC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, \ - _nEPs, TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_CONTROL, VIDEO_ITF_PROTOCOL_15, _stridx +#define TUD_VIDEO_GUID_YUY2 \ + 0x59, 0x55, 0x59, 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 +#define TUD_VIDEO_GUID_NV12 \ + 0x4E, 0x56, 0x31, 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 +#define TUD_VIDEO_GUID_M420 \ + 0x4D, 0x34, 0x32, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 +#define TUD_VIDEO_GUID_I420 \ + 0x49, 0x34, 0x32, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 + +#define TUD_VIDEO_DESC_IAD(_firstitf, _nitfs, _stridx) \ + TUD_VIDEO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, _firstitf, _nitfs, TUSB_CLASS_VIDEO, \ + VIDEO_SUBCLASS_INTERFACE_COLLECTION, VIDEO_ITF_PROTOCOL_UNDEFINED, _stridx + +#define TUD_VIDEO_DESC_STD_VC(_itfnum, _nEPs, _stridx) \ + TUD_VIDEO_DESC_STD_VC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, _nEPs, \ + TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_CONTROL, VIDEO_ITF_PROTOCOL_15, _stridx /* 3.7.2 */ -#define TUD_VIDEO_DESC_CS_VC(_bcdUVC, _totallen, _clkfreq, ...) \ - TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_HEADER, \ - U16_TO_U8S_LE(_bcdUVC), U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__))), \ - U32_TO_U8S_LE(_clkfreq), TU_ARGS_NUM(__VA_ARGS__), __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VC(_bcdUVC, _totallen, _clkfreq, ...) \ + TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ + VIDEO_CS_ITF_VC_HEADER, U16_TO_U8S_LE(_bcdUVC), \ + U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__))), \ + U32_TO_U8S_LE(_clkfreq), TU_ARGS_NUM(__VA_ARGS__), __VA_ARGS__ /* 3.7.2.1 */ -#define TUD_VIDEO_DESC_INPUT_TERM(_tid, _tt, _at, _stridx) \ - TUD_VIDEO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_INPUT_TERMINAL, \ - _tid, U16_TO_U8S_LE(_tt), _at, _stridx +#define TUD_VIDEO_DESC_INPUT_TERM(_tid, _tt, _at, _stridx) \ + TUD_VIDEO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_INPUT_TERMINAL, _tid, \ + U16_TO_U8S_LE(_tt), _at, _stridx /* 3.7.2.2 */ -#define TUD_VIDEO_DESC_OUTPUT_TERM(_tid, _tt, _at, _srcid, _stridx) \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_OUTPUT_TERMINAL, \ - _tid, U16_TO_U8S_LE(_tt), _at, _srcid, _stridx +#define TUD_VIDEO_DESC_OUTPUT_TERM(_tid, _tt, _at, _srcid, _stridx) \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_OUTPUT_TERMINAL, _tid, \ + U16_TO_U8S_LE(_tt), _at, _srcid, _stridx /* 3.7.2.3 */ -#define TUD_VIDEO_DESC_CAMERA_TERM(_tid, _at, _stridx, _focal_min, _focal_max, _focal, _ctls) \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_INPUT_TERMINAL, \ - _tid, U16_TO_U8S_LE(VIDEO_ITT_CAMERA), _at, _stridx, \ - U16_TO_U8S_LE(_focal_min), U16_TO_U8S_LE(_focal_max), U16_TO_U8S_LE(_focal), 3, \ - TU_U32_BYTE0(_ctls), TU_U32_BYTE1(_ctls), TU_U32_BYTE2(_ctls) +#define TUD_VIDEO_DESC_CAMERA_TERM(_tid, _at, _stridx, _focal_min, _focal_max, _focal, _ctls) \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_INPUT_TERMINAL, _tid, \ + U16_TO_U8S_LE(VIDEO_ITT_CAMERA), _at, _stridx, U16_TO_U8S_LE(_focal_min), \ + U16_TO_U8S_LE(_focal_max), U16_TO_U8S_LE(_focal), 3, TU_U32_BYTE0(_ctls), \ + TU_U32_BYTE1(_ctls), TU_U32_BYTE2(_ctls) /* 3.9.1 */ -#define TUD_VIDEO_DESC_STD_VS(_itfnum, _alt, _epn, _stridx) \ - TUD_VIDEO_DESC_STD_VS_LEN, TUSB_DESC_INTERFACE, _itfnum, _alt, \ - _epn, TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_STREAMING, VIDEO_ITF_PROTOCOL_15, _stridx +#define TUD_VIDEO_DESC_STD_VS(_itfnum, _alt, _epn, _stridx) \ + TUD_VIDEO_DESC_STD_VS_LEN, TUSB_DESC_INTERFACE, _itfnum, _alt, _epn, TUSB_CLASS_VIDEO, \ + VIDEO_SUBCLASS_STREAMING, VIDEO_ITF_PROTOCOL_15, _stridx /* 3.9.2.1 */ -#define TUD_VIDEO_DESC_CS_VS_INPUT(_numfmt, _totallen, _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, ...) \ - TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ - VIDEO_CS_ITF_VS_INPUT_HEADER, _numfmt, \ - U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ - _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VS_INPUT(_numfmt, _totallen, _ep, _inf, _termlnk, _sticaptmeth, _trgspt, \ + _trgusg, ...) \ + TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ + VIDEO_CS_ITF_VS_INPUT_HEADER, _numfmt, \ + U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_IN_LEN + \ + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ + _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, (TU_ARGS_NUM(__VA_ARGS__)), \ + __VA_ARGS__ /* 3.9.2.2 */ -#define TUD_VIDEO_DESC_CS_VS_OUTPUT(_numfmt, _totallen, _ep, _inf, _termlnk, ...) \ - TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ - VIDEO_CS_ITF_VS_OUTPUT_HEADER, _numfmt, \ - U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ - _ep, _inf, _termlnk, (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VS_OUTPUT(_numfmt, _totallen, _ep, _inf, _termlnk, ...) \ + TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ + VIDEO_CS_ITF_VS_OUTPUT_HEADER, _numfmt, \ + U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_OUT_LEN + \ + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ + _ep, _inf, _termlnk, (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ /* Uncompressed 3.1.1 */ -#define TUD_VIDEO_GUID(_g0,_g1,_g2,_g3,_g4,_g5,_g6,_g7,_g8,_g9,_g10,_g11,_g12,_g13,_g14,_g15) _g0,_g1,_g2,_g3,_g4,_g5,_g6,_g7,_g8,_g9,_g10,_g11,_g12,_g13,_g14,_g15 +#define TUD_VIDEO_GUID(_g0, _g1, _g2, _g3, _g4, _g5, _g6, _g7, _g8, _g9, _g10, _g11, _g12, _g13, \ + _g14, _g15) \ + _g0, _g1, _g2, _g3, _g4, _g5, _g6, _g7, _g8, _g9, _g10, _g11, _g12, _g13, _g14, _g15 -#define TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfrmdesc, \ - _guid, _bitsperpix, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED, \ - _fmtidx, _numfrmdesc, TUD_VIDEO_GUID(_guid), \ - _bitsperpix, _frmidx, _asrx, _asry, _interlace, _cp +#define TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfrmdesc, _guid, _bitsperpix, _frmidx, _asrx, \ + _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN, TUSB_DESC_CS_INTERFACE, \ + VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED, _fmtidx, _numfrmdesc, TUD_VIDEO_GUID(_guid), \ + _bitsperpix, _frmidx, _asrx, _asry, _interlace, _cp /* Uncompressed 3.1.2 Table 3-3 */ -#define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, _minfrminterval, _maxfrminterval, _frmintervalstep) \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED, \ - _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ - U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), 0, \ - U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), U32_TO_U8S_LE(_frmintervalstep) +#define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(_frmidx, _cap, _width, _height, _minbr, _maxbr, \ + _maxfrmbufsz, _frminterval, _minfrminterval, \ + _maxfrminterval, _frmintervalstep) \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN, TUSB_DESC_CS_INTERFACE, \ + VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED, _frmidx, _cap, U16_TO_U8S_LE(_width), \ + U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ + U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), 0, \ + U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), \ + U32_TO_U8S_LE(_frmintervalstep) /* Uncompressed 3.1.2 Table 3-4 */ -#define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, ...) \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ - TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED, \ - _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ - U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, \ + _maxfrmbufsz, _frminterval, ...) \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ + TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED, _frmidx, _cap, \ + U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), \ + U32_TO_U8S_LE(_maxbr), U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), \ + (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ /* Motion-JPEG 3.1.1 Table 3-1 */ -#define TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(_fmtidx, _numfrmdesc, _fixed_sz, _frmidx, _asrx, _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FORMAT_MJPEG, \ - _fmtidx, _numfrmdesc, _fixed_sz, _frmidx, _asrx, _asry, _interlace, _cp +#define TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(_fmtidx, _numfrmdesc, _fixed_sz, _frmidx, _asrx, _asry, \ + _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FORMAT_MJPEG, \ + _fmtidx, _numfrmdesc, _fixed_sz, _frmidx, _asrx, _asry, _interlace, _cp /* Motion-JPEG 3.1.1 Table 3-2 and 3-3 */ -#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, _minfrminterval, _maxfrminterval, _frmintervalstep) \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_MJPEG, \ - _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ - U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), 0, \ - U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), U32_TO_U8S_LE(_frmintervalstep) +#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(_frmidx, _cap, _width, _height, _minbr, _maxbr, \ + _maxfrmbufsz, _frminterval, _minfrminterval, \ + _maxfrminterval, _frmintervalstep) \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_MJPEG, \ + _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), \ + U32_TO_U8S_LE(_maxbr), U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), 0, \ + U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), \ + U32_TO_U8S_LE(_frmintervalstep) /* Motion-JPEG 3.1.1 Table 3-2 and 3-4 */ -#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, ...) \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ - TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_MJPEG, \ - _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ - U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, \ + _maxfrmbufsz, _frminterval, ...) \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ + TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_MJPEG, _frmidx, _cap, U16_TO_U8S_LE(_width), \ + U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ + U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), (TU_ARGS_NUM(__VA_ARGS__)), \ + __VA_ARGS__ /* 3.9.2.6 */ -#define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(_color, _trns, _mat) \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_COLORFORMAT, \ - _color, _trns, _mat +#define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(_color, _trns, _mat) \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_COLORFORMAT, \ + _color, _trns, _mat /* 3.10.1.1 */ -#define TUD_VIDEO_DESC_EP_ISO(_ep, _epsize, _ep_interval) \ - 7, TUSB_DESC_ENDPOINT, _ep, (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS),\ - U16_TO_U8S_LE(_epsize), _ep_interval +#define TUD_VIDEO_DESC_EP_ISO(_ep, _epsize, _ep_interval) \ + 7, TUSB_DESC_ENDPOINT, _ep, (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS), \ + U16_TO_U8S_LE(_epsize), _ep_interval /* 3.10.1.2 */ #define TUD_VIDEO_DESC_EP_BULK(_ep, _epsize, _ep_interval) \ - 7, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), _ep_interval + 7, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), _ep_interval #endif diff --git a/Libraries/tinyusb/src/class/video/video_device.c b/Libraries/tinyusb/src/class/video/video_device.c index 4218835aab9..a4d6d68bfbc 100644 --- a/Libraries/tinyusb/src/class/video/video_device.c +++ b/Libraries/tinyusb/src/class/video/video_device.c @@ -36,113 +36,115 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_VIDEO_LOG_LEVEL - #define CFG_TUD_VIDEO_LOG_LEVEL CFG_TUD_LOG_LEVEL +#define CFG_TUD_VIDEO_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_VIDEO_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_VIDEO_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -#define VS_STATE_PROBING 0 /* Configuration in progress */ -#define VS_STATE_COMMITTED 1 /* Ready for streaming or Streaming via bulk endpoint */ -#define VS_STATE_STREAMING 2 /* Streaming via isochronous endpoint */ +#define VS_STATE_PROBING 0 /* Configuration in progress */ +#define VS_STATE_COMMITTED 1 /* Ready for streaming or Streaming via bulk endpoint */ +#define VS_STATE_STREAMING 2 /* Streaming via isochronous endpoint */ typedef struct { - tusb_desc_interface_t std; - tusb_desc_video_control_header_t ctl; + tusb_desc_interface_t std; + tusb_desc_video_control_header_t ctl; } tusb_desc_vc_itf_t; typedef struct { - tusb_desc_interface_t std; - tusb_desc_video_streaming_inout_header_t stm; + tusb_desc_interface_t std; + tusb_desc_video_streaming_inout_header_t stm; } tusb_desc_vs_itf_t; typedef union { - tusb_desc_video_control_header_t ctl; - tusb_desc_video_streaming_inout_header_t stm; + tusb_desc_video_control_header_t ctl; + tusb_desc_video_streaming_inout_header_t stm; } tusb_desc_video_itf_hdr_t; typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubtype; - uint8_t bEntityId; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubtype; + uint8_t bEntityId; } tusb_desc_cs_video_entity_itf_t; typedef union { - struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint8_t bNumFrameDescriptors; - }; - tusb_desc_video_format_uncompressed_t uncompressed; - tusb_desc_video_format_mjpeg_t mjpeg; - tusb_desc_video_format_framebased_t frame_based; + struct TU_ATTR_PACKED { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + }; + tusb_desc_video_format_uncompressed_t uncompressed; + tusb_desc_video_format_mjpeg_t mjpeg; + tusb_desc_video_format_framebased_t frame_based; } tusb_desc_cs_video_fmt_t; typedef union { - struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFrameIndex; - uint8_t bmCapabilities; - uint16_t wWidth; - uint16_t wHeight; - }; - tusb_desc_video_frame_uncompressed_t uncompressed; - tusb_desc_video_frame_mjpeg_t mjpeg; - tusb_desc_video_frame_framebased_t frame_based; + struct TU_ATTR_PACKED { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + }; + tusb_desc_video_frame_uncompressed_t uncompressed; + tusb_desc_video_frame_mjpeg_t mjpeg; + tusb_desc_video_frame_framebased_t frame_based; } tusb_desc_cs_video_frm_t; /* video streaming interface */ typedef struct TU_ATTR_PACKED { - uint8_t index_vc; /* index of bound video control interface */ - uint8_t index_vs; /* index from the video control interface */ - struct { - uint16_t beg; /* Offset of the begging of video streaming interface descriptor */ - uint16_t end; /* Offset of the end of video streaming interface descriptor */ - uint16_t cur; /* Offset of the current settings */ - uint16_t ep[2]; /* Offset of endpoint descriptors. 0: streaming, 1: still capture */ - } desc; - uint8_t *buffer; /* frame buffer. assume linear buffer. no support for stride access */ - uint32_t bufsize; /* frame buffer size */ - uint32_t offset; /* offset for the next payload transfer */ - uint32_t max_payload_transfer_size; - uint8_t error_code;/* error code */ - uint8_t state; /* 0:probing 1:committed 2:streaming */ - - video_probe_and_commit_control_t probe_commit_payload; /* Probe and Commit control */ - /*------------- From this point, data is not cleared by bus reset -------------*/ - CFG_TUSB_MEM_ALIGN uint8_t ep_buf[CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE]; /* EP transfer buffer for streaming */ + uint8_t index_vc; /* index of bound video control interface */ + uint8_t index_vs; /* index from the video control interface */ + struct { + uint16_t beg; /* Offset of the begging of video streaming interface descriptor */ + uint16_t end; /* Offset of the end of video streaming interface descriptor */ + uint16_t cur; /* Offset of the current settings */ + uint16_t ep[2]; /* Offset of endpoint descriptors. 0: streaming, 1: still capture */ + } desc; + uint8_t *buffer; /* frame buffer. assume linear buffer. no support for stride access */ + uint32_t bufsize; /* frame buffer size */ + uint32_t offset; /* offset for the next payload transfer */ + uint32_t max_payload_transfer_size; + uint8_t error_code; /* error code */ + uint8_t state; /* 0:probing 1:committed 2:streaming */ + + video_probe_and_commit_control_t probe_commit_payload; /* Probe and Commit control */ + /*------------- From this point, data is not cleared by bus reset -------------*/ + CFG_TUSB_MEM_ALIGN uint8_t + ep_buf[CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE]; /* EP transfer buffer for streaming */ } videod_streaming_interface_t; /* video control interface */ typedef struct TU_ATTR_PACKED { - uint8_t const *beg; /* The head of the first video control interface descriptor */ - uint16_t len; /* Byte length of the descriptors */ - uint16_t cur; /* offset for current video control interface */ - uint8_t stm[CFG_TUD_VIDEO_STREAMING]; /* Indices of streaming interface */ - uint8_t error_code; /* error code */ - uint8_t power_mode; + uint8_t const *beg; /* The head of the first video control interface descriptor */ + uint16_t len; /* Byte length of the descriptors */ + uint16_t cur; /* offset for current video control interface */ + uint8_t stm[CFG_TUD_VIDEO_STREAMING]; /* Indices of streaming interface */ + uint8_t error_code; /* error code */ + uint8_t power_mode; - /*------------- From this point, data is not cleared by bus reset -------------*/ - // CFG_TUSB_MEM_ALIGN uint8_t ctl_buf[64]; /* EP transfer buffer for interrupt transfer */ + /*------------- From this point, data is not cleared by bus reset -------------*/ + // CFG_TUSB_MEM_ALIGN uint8_t ctl_buf[64]; /* EP transfer buffer for interrupt transfer */ } videod_interface_t; -#define ITF_STM_MEM_RESET_SIZE offsetof(videod_streaming_interface_t, ep_buf) +#define ITF_STM_MEM_RESET_SIZE offsetof(videod_streaming_interface_t, ep_buf) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ CFG_TUD_MEM_SECTION tu_static videod_interface_t _videod_itf[CFG_TUD_VIDEO]; -CFG_TUD_MEM_SECTION tu_static videod_streaming_interface_t _videod_streaming_itf[CFG_TUD_VIDEO_STREAMING]; +CFG_TUD_MEM_SECTION tu_static videod_streaming_interface_t + _videod_streaming_itf[CFG_TUD_VIDEO_STREAMING]; -tu_static uint8_t const _cap_get = 0x1u; /* support for GET */ +tu_static uint8_t const _cap_get = 0x1u; /* support for GET */ tu_static uint8_t const _cap_get_set = 0x3u; /* support for GET and SET */ //--------------------------------------------------------------------+ @@ -151,35 +153,34 @@ tu_static uint8_t const _cap_get_set = 0x3u; /* support for GET and SET */ #if CFG_TUSB_DEBUG >= CFG_TUD_VIDEO_LOG_LEVEL static tu_lookup_entry_t const tu_lookup_video_request[] = { - {.key = VIDEO_REQUEST_UNDEFINED, .data = "Undefined"}, - {.key = VIDEO_REQUEST_SET_CUR, .data = "SetCur"}, - {.key = VIDEO_REQUEST_SET_CUR_ALL, .data = "SetCurAll"}, - {.key = VIDEO_REQUEST_GET_CUR, .data = "GetCur"}, - {.key = VIDEO_REQUEST_GET_MIN, .data = "GetMin"}, - {.key = VIDEO_REQUEST_GET_MAX, .data = "GetMax"}, - {.key = VIDEO_REQUEST_GET_RES, .data = "GetRes"}, - {.key = VIDEO_REQUEST_GET_LEN, .data = "GetLen"}, - {.key = VIDEO_REQUEST_GET_INFO, .data = "GetInfo"}, - {.key = VIDEO_REQUEST_GET_DEF, .data = "GetDef"}, - {.key = VIDEO_REQUEST_GET_CUR_ALL, .data = "GetCurAll"}, - {.key = VIDEO_REQUEST_GET_MIN_ALL, .data = "GetMinAll"}, - {.key = VIDEO_REQUEST_GET_MAX_ALL, .data = "GetMaxAll"}, - {.key = VIDEO_REQUEST_GET_RES_ALL, .data = "GetResAll"}, - {.key = VIDEO_REQUEST_GET_DEF_ALL, .data = "GetDefAll"}, + { .key = VIDEO_REQUEST_UNDEFINED, .data = "Undefined" }, + { .key = VIDEO_REQUEST_SET_CUR, .data = "SetCur" }, + { .key = VIDEO_REQUEST_SET_CUR_ALL, .data = "SetCurAll" }, + { .key = VIDEO_REQUEST_GET_CUR, .data = "GetCur" }, + { .key = VIDEO_REQUEST_GET_MIN, .data = "GetMin" }, + { .key = VIDEO_REQUEST_GET_MAX, .data = "GetMax" }, + { .key = VIDEO_REQUEST_GET_RES, .data = "GetRes" }, + { .key = VIDEO_REQUEST_GET_LEN, .data = "GetLen" }, + { .key = VIDEO_REQUEST_GET_INFO, .data = "GetInfo" }, + { .key = VIDEO_REQUEST_GET_DEF, .data = "GetDef" }, + { .key = VIDEO_REQUEST_GET_CUR_ALL, .data = "GetCurAll" }, + { .key = VIDEO_REQUEST_GET_MIN_ALL, .data = "GetMinAll" }, + { .key = VIDEO_REQUEST_GET_MAX_ALL, .data = "GetMaxAll" }, + { .key = VIDEO_REQUEST_GET_RES_ALL, .data = "GetResAll" }, + { .key = VIDEO_REQUEST_GET_DEF_ALL, .data = "GetDefAll" }, }; -static tu_lookup_table_t const tu_table_video_request = { - .count = TU_ARRAY_SIZE(tu_lookup_video_request), - .items = tu_lookup_video_request -}; +static tu_lookup_table_t const tu_table_video_request = { .count = TU_ARRAY_SIZE( + tu_lookup_video_request), + .items = tu_lookup_video_request }; -static char const* const tu_str_video_vc_control_selector[] = { +static char const *const tu_str_video_vc_control_selector[] = { "Undefined", "Video Power Mode", "Request Error Code", }; -static char const* const tu_str_video_vs_control_selector[] = { +static char const *const tu_str_video_vs_control_selector[] = { "Undefined", "Probe", "Commit", @@ -203,8 +204,9 @@ static char const* const tu_str_video_vs_control_selector[] = { * @param[in] desc interface descriptor * * @return bInterfaceNumber */ -static inline uint8_t _desc_itfnum(void const *desc) { - return ((uint8_t const*)desc)[2]; +static inline uint8_t _desc_itfnum(void const *desc) +{ + return ((uint8_t const *)desc)[2]; } /** Get endpoint address from the endpoint descriptor @@ -212,8 +214,9 @@ static inline uint8_t _desc_itfnum(void const *desc) { * @param[in] desc endpoint descriptor * * @return bEndpointAddress */ -static inline uint8_t _desc_ep_addr(void const *desc) { - return ((uint8_t const*)desc)[2]; +static inline uint8_t _desc_ep_addr(void const *desc) +{ + return ((uint8_t const *)desc)[2]; } /** Get instance of streaming interface @@ -222,22 +225,29 @@ static inline uint8_t _desc_ep_addr(void const *desc) { * @param[in] stm_idx index number of streaming interface * * @return instance */ -static videod_streaming_interface_t* _get_instance_streaming(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { - videod_interface_t *ctl = &_videod_itf[ctl_idx]; - if (!ctl->beg) return NULL; - videod_streaming_interface_t *stm = &_videod_streaming_itf[ctl->stm[stm_idx]]; - if (!stm->desc.beg) return NULL; - return stm; +static videod_streaming_interface_t *_get_instance_streaming(uint_fast8_t ctl_idx, + uint_fast8_t stm_idx) +{ + videod_interface_t *ctl = &_videod_itf[ctl_idx]; + if (!ctl->beg) + return NULL; + videod_streaming_interface_t *stm = &_videod_streaming_itf[ctl->stm[stm_idx]]; + if (!stm->desc.beg) + return NULL; + return stm; } -static tusb_desc_vc_itf_t const* _get_desc_vc(videod_interface_t const *self) { - return (tusb_desc_vc_itf_t const *)(self->beg + self->cur); +static tusb_desc_vc_itf_t const *_get_desc_vc(videod_interface_t const *self) +{ + return (tusb_desc_vc_itf_t const *)(self->beg + self->cur); } -static tusb_desc_vs_itf_t const* _get_desc_vs(videod_streaming_interface_t const *self) { - if (!self->desc.cur) return NULL; - uint8_t const *desc = _videod_itf[self->index_vc].beg; - return (tusb_desc_vs_itf_t const*)(desc + self->desc.cur); +static tusb_desc_vs_itf_t const *_get_desc_vs(videod_streaming_interface_t const *self) +{ + if (!self->desc.cur) + return NULL; + uint8_t const *desc = _videod_itf[self->index_vc].beg; + return (tusb_desc_vs_itf_t const *)(desc + self->desc.cur); } /** Find the first descriptor of a given type @@ -248,12 +258,13 @@ static tusb_desc_vs_itf_t const* _get_desc_vs(videod_streaming_interface_t const * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const* _find_desc(void const *beg, void const *end, uint_fast8_t desc_type) { - void const *cur = beg; - while ((cur < end) && (desc_type != tu_desc_type(cur))) { - cur = tu_desc_next(cur); - } - return cur; +static void const *_find_desc(void const *beg, void const *end, uint_fast8_t desc_type) +{ + void const *cur = beg; + while ((cur < end) && (desc_type != tu_desc_type(cur))) { + cur = tu_desc_next(cur); + } + return cur; } /** Find the first descriptor of two given types @@ -265,13 +276,15 @@ static void const* _find_desc(void const *beg, void const *end, uint_fast8_t des * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const* _find_desc_2_type(void const *beg, void const *end, uint_fast8_t desc_type_0, uint_fast8_t desc_type_1) +static void const *_find_desc_2_type(void const *beg, void const *end, uint_fast8_t desc_type_0, + uint_fast8_t desc_type_1) { - void const *cur = beg; - while ((cur < end) && (desc_type_0 != tu_desc_type(cur)) && (desc_type_1 != tu_desc_type(cur))) { - cur = tu_desc_next(cur); - } - return cur; + void const *cur = beg; + while ((cur < end) && (desc_type_0 != tu_desc_type(cur)) && + (desc_type_1 != tu_desc_type(cur))) { + cur = tu_desc_next(cur); + } + return cur; } /** Find the first descriptor specified by the arguments @@ -284,18 +297,17 @@ static void const* _find_desc_2_type(void const *beg, void const *end, uint_fast * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const* _find_desc_3(void const *beg, void const *end, - uint_fast8_t desc_type, - uint_fast8_t element_0, - uint_fast8_t element_1) { - for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, desc_type)) { - uint8_t const *p = (uint8_t const *)cur; - if ((p[2] == element_0) && (p[3] == element_1)) { - return cur; +static void const *_find_desc_3(void const *beg, void const *end, uint_fast8_t desc_type, + uint_fast8_t element_0, uint_fast8_t element_1) +{ + for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, desc_type)) { + uint8_t const *p = (uint8_t const *)cur; + if ((p[2] == element_0) && (p[3] == element_1)) { + return cur; + } + cur = tu_desc_next(cur); } - cur = tu_desc_next(cur); - } - return end; + return end; } /** Return the next interface descriptor which has another interface number. @@ -309,14 +321,15 @@ static void const* _find_desc_3(void const *beg, void const *end, * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const* _next_desc_itf(void const *beg, void const *end) { - void const *cur = beg; - uint_fast8_t itfnum = ((tusb_desc_interface_t const*)cur)->bInterfaceNumber; - while ((cur < end) && - (itfnum == ((tusb_desc_interface_t const*)cur)->bInterfaceNumber)) { - cur = _find_desc_2_type(tu_desc_next(cur), end, TUSB_DESC_INTERFACE, TUSB_DESC_INTERFACE_ASSOCIATION); - } - return cur; +static void const *_next_desc_itf(void const *beg, void const *end) +{ + void const *cur = beg; + uint_fast8_t itfnum = ((tusb_desc_interface_t const *)cur)->bInterfaceNumber; + while ((cur < end) && (itfnum == ((tusb_desc_interface_t const *)cur)->bInterfaceNumber)) { + cur = _find_desc_2_type(tu_desc_next(cur), end, TUSB_DESC_INTERFACE, + TUSB_DESC_INTERFACE_ASSOCIATION); + } + return cur; } /** Find the first interface descriptor with the specified interface number and alternate setting number. @@ -328,9 +341,10 @@ static void const* _next_desc_itf(void const *beg, void const *end) { * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static inline uint8_t const* _find_desc_itf(void const *beg, void const *end, uint_fast8_t itfnum, uint_fast8_t altnum) +static inline uint8_t const *_find_desc_itf(void const *beg, void const *end, uint_fast8_t itfnum, + uint_fast8_t altnum) { - return (uint8_t const*) _find_desc_3(beg, end, TUSB_DESC_INTERFACE, itfnum, altnum); + return (uint8_t const *)_find_desc_3(beg, end, TUSB_DESC_INTERFACE, itfnum, altnum); } /** Find the first endpoint descriptor belonging to the current interface descriptor. @@ -342,21 +356,23 @@ static inline uint8_t const* _find_desc_itf(void const *beg, void const *end, ui * * @return The pointer for endpoint descriptor. * @retval end did not found endpoint descriptor */ -static void const* _find_desc_ep(void const *beg, void const *end) +static void const *_find_desc_ep(void const *beg, void const *end) { - for (void const *cur = beg; cur < end; cur = tu_desc_next(cur)) { - uint_fast8_t desc_type = tu_desc_type(cur); - if (TUSB_DESC_ENDPOINT == desc_type) return cur; - if (TUSB_DESC_INTERFACE == desc_type) break; - } - return end; + for (void const *cur = beg; cur < end; cur = tu_desc_next(cur)) { + uint_fast8_t desc_type = tu_desc_type(cur); + if (TUSB_DESC_ENDPOINT == desc_type) + return cur; + if (TUSB_DESC_INTERFACE == desc_type) + break; + } + return end; } /** Return the end of the video control descriptor. */ -static inline void const* _end_of_control_descriptor(void const *desc) +static inline void const *_end_of_control_descriptor(void const *desc) { - tusb_desc_vc_itf_t const *vc = (tusb_desc_vc_itf_t const *)desc; - return ((uint8_t const*) desc) + vc->std.bLength + tu_le16toh(vc->ctl.wTotalLength); + tusb_desc_vc_itf_t const *vc = (tusb_desc_vc_itf_t const *)desc; + return ((uint8_t const *)desc) + vc->std.bLength + tu_le16toh(vc->ctl.wTotalLength); } /** Find the first entity descriptor with the entity ID @@ -367,61 +383,58 @@ static inline void const* _end_of_control_descriptor(void const *desc) * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const* _find_desc_entity(void const *desc, uint_fast8_t entityid) +static void const *_find_desc_entity(void const *desc, uint_fast8_t entityid) { - void const *end = _end_of_control_descriptor(desc); - for (void const *cur = desc; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { - tusb_desc_cs_video_entity_itf_t const *itf = (tusb_desc_cs_video_entity_itf_t const *)cur; - if ((VIDEO_CS_ITF_VC_INPUT_TERMINAL <= itf->bDescriptorSubtype - && itf->bDescriptorSubtype < VIDEO_CS_ITF_VC_MAX) - && itf->bEntityId == entityid) { - return itf; + void const *end = _end_of_control_descriptor(desc); + for (void const *cur = desc; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { + tusb_desc_cs_video_entity_itf_t const *itf = (tusb_desc_cs_video_entity_itf_t const *)cur; + if ((VIDEO_CS_ITF_VC_INPUT_TERMINAL <= itf->bDescriptorSubtype && + itf->bDescriptorSubtype < VIDEO_CS_ITF_VC_MAX) && + itf->bEntityId == entityid) { + return itf; + } + cur = tu_desc_next(cur); } - cur = tu_desc_next(cur); - } - return end; + return end; } /** Return the end of the video streaming descriptor. */ -static inline void const* _end_of_streaming_descriptor(void const *desc) +static inline void const *_end_of_streaming_descriptor(void const *desc) { - tusb_desc_vs_itf_t const *vs = (tusb_desc_vs_itf_t const *)desc; - return ((uint8_t const*) desc) + vs->std.bLength + tu_le16toh(vs->stm.wTotalLength); + tusb_desc_vs_itf_t const *vs = (tusb_desc_vs_itf_t const *)desc; + return ((uint8_t const *)desc) + vs->std.bLength + tu_le16toh(vs->stm.wTotalLength); } /** Find the first format descriptor with the specified format number. */ static inline void const *_find_desc_format(void const *beg, void const *end, uint_fast8_t fmtnum) { - for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { - uint8_t const *p = (uint8_t const *)cur; - uint_fast8_t fmt = p[2]; - if ((fmt == VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED || - fmt == VIDEO_CS_ITF_VS_FORMAT_MJPEG || - fmt == VIDEO_CS_ITF_VS_FORMAT_DV || - fmt == VIDEO_CS_ITF_VS_FRAME_FRAME_BASED) && - fmtnum == p[3]) { - return cur; + for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { + uint8_t const *p = (uint8_t const *)cur; + uint_fast8_t fmt = p[2]; + if ((fmt == VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED || fmt == VIDEO_CS_ITF_VS_FORMAT_MJPEG || + fmt == VIDEO_CS_ITF_VS_FORMAT_DV || fmt == VIDEO_CS_ITF_VS_FRAME_FRAME_BASED) && + fmtnum == p[3]) { + return cur; + } + cur = tu_desc_next(cur); } - cur = tu_desc_next(cur); - } - return end; + return end; } /** Find the first frame descriptor with the specified format number. */ static inline void const *_find_desc_frame(void const *beg, void const *end, uint_fast8_t frmnum) { - for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { - uint8_t const *p = (uint8_t const *)cur; - uint_fast8_t frm = p[2]; - if ((frm == VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED || - frm == VIDEO_CS_ITF_VS_FRAME_MJPEG || - frm == VIDEO_CS_ITF_VS_FRAME_FRAME_BASED) && - frmnum == p[3]) { - return cur; + for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { + uint8_t const *p = (uint8_t const *)cur; + uint_fast8_t frm = p[2]; + if ((frm == VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED || frm == VIDEO_CS_ITF_VS_FRAME_MJPEG || + frm == VIDEO_CS_ITF_VS_FRAME_FRAME_BASED) && + frmnum == p[3]) { + return cur; + } + cur = tu_desc_next(cur); } - cur = tu_desc_next(cur); - } - return end; + return end; } /** Set uniquely determined values to variables that have not been set @@ -430,88 +443,93 @@ static inline void const *_find_desc_frame(void const *beg, void const *end, uin static bool _update_streaming_parameters(videod_streaming_interface_t const *stm, video_probe_and_commit_control_t *param) { - tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); - uint_fast8_t fmtnum = param->bFormatIndex; - TU_ASSERT(vs && fmtnum <= vs->stm.bNumFormats); - if (!fmtnum) { - if (1 < vs->stm.bNumFormats) return true; /* Need to negotiate all variables. */ - fmtnum = 1; - param->bFormatIndex = 1; - } - - /* Set the parameters determined by the format */ - param->wKeyFrameRate = 1; - param->wPFrameRate = 0; - param->wCompWindowSize = 1; /* GOP size? */ - param->wDelay = 0; /* milliseconds */ - param->dwClockFrequency = 27000000; /* same as MPEG-2 system time clock */ - param->bmFramingInfo = 0x3; /* enables FrameID and EndOfFrame */ - param->bPreferedVersion = 1; - param->bMinVersion = 1; - param->bMaxVersion = 1; - param->bUsage = 0; - param->bBitDepthLuma = 8; - - void const *end = _end_of_streaming_descriptor(vs); - tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); - TU_ASSERT(fmt != end); - - switch (fmt->bDescriptorSubType) { - case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: - param->wCompQuality = 1; /* 1 to 10000 */ - break; + tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); + uint_fast8_t fmtnum = param->bFormatIndex; + TU_ASSERT(vs && fmtnum <= vs->stm.bNumFormats); + if (!fmtnum) { + if (1 < vs->stm.bNumFormats) + return true; /* Need to negotiate all variables. */ + fmtnum = 1; + param->bFormatIndex = 1; + } + + /* Set the parameters determined by the format */ + param->wKeyFrameRate = 1; + param->wPFrameRate = 0; + param->wCompWindowSize = 1; /* GOP size? */ + param->wDelay = 0; /* milliseconds */ + param->dwClockFrequency = 27000000; /* same as MPEG-2 system time clock */ + param->bmFramingInfo = 0x3; /* enables FrameID and EndOfFrame */ + param->bPreferedVersion = 1; + param->bMinVersion = 1; + param->bMaxVersion = 1; + param->bUsage = 0; + param->bBitDepthLuma = 8; + + void const *end = _end_of_streaming_descriptor(vs); + tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); + TU_ASSERT(fmt != end); - case VIDEO_CS_ITF_VS_FORMAT_MJPEG: - break; - - default: return false; - } - - uint_fast8_t frmnum = param->bFrameIndex; - TU_ASSERT(frmnum <= fmt->bNumFrameDescriptors); - if (!frmnum) { - if (1 < fmt->bNumFrameDescriptors) return true; - frmnum = 1; - param->bFrameIndex = 1; - } - tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); - TU_ASSERT(frm != end); - - /* Set the parameters determined by the frame */ - uint_fast32_t frame_size = param->dwMaxVideoFrameSize; - if (!frame_size) { switch (fmt->bDescriptorSubType) { - case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: - frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * fmt->uncompressed.bBitsPerPixel / 8; + case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: + param->wCompQuality = 1; /* 1 to 10000 */ break; - case VIDEO_CS_ITF_VS_FORMAT_MJPEG: - frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * 16 / 8; /* YUV422 */ + case VIDEO_CS_ITF_VS_FORMAT_MJPEG: break; - default: break; + default: + return false; + } + + uint_fast8_t frmnum = param->bFrameIndex; + TU_ASSERT(frmnum <= fmt->bNumFrameDescriptors); + if (!frmnum) { + if (1 < fmt->bNumFrameDescriptors) + return true; + frmnum = 1; + param->bFrameIndex = 1; + } + tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); + TU_ASSERT(frm != end); + + /* Set the parameters determined by the frame */ + uint_fast32_t frame_size = param->dwMaxVideoFrameSize; + if (!frame_size) { + switch (fmt->bDescriptorSubType) { + case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: + frame_size = + (uint_fast32_t)frm->wWidth * frm->wHeight * fmt->uncompressed.bBitsPerPixel / 8; + break; + + case VIDEO_CS_ITF_VS_FORMAT_MJPEG: + frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * 16 / 8; /* YUV422 */ + break; + + default: + break; + } + param->dwMaxVideoFrameSize = frame_size; + } + + uint_fast32_t interval = param->dwFrameInterval; + if (!interval) { + if ((1 < frm->uncompressed.bFrameIntervalType) || + ((0 == frm->uncompressed.bFrameIntervalType) && + (frm->uncompressed.dwFrameInterval[1] != frm->uncompressed.dwFrameInterval[0]))) { + return true; + } + interval = frm->uncompressed.dwFrameInterval[0]; + param->dwFrameInterval = interval; } - param->dwMaxVideoFrameSize = frame_size; - } - - uint_fast32_t interval = param->dwFrameInterval; - if (!interval) { - if ((1 < frm->uncompressed.bFrameIntervalType) || - ((0 == frm->uncompressed.bFrameIntervalType) && - (frm->uncompressed.dwFrameInterval[1] != frm->uncompressed.dwFrameInterval[0]))) { - return true; + uint_fast32_t interval_ms = interval / 10000; + TU_ASSERT(interval_ms); + uint_fast32_t payload_size = (frame_size + interval_ms - 1) / interval_ms + 2; + if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size) { + payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE; } - interval = frm->uncompressed.dwFrameInterval[0]; - param->dwFrameInterval = interval; - } - uint_fast32_t interval_ms = interval / 10000; - TU_ASSERT(interval_ms); - uint_fast32_t payload_size = (frame_size + interval_ms - 1) / interval_ms + 2; - if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size) { - payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE; - } - param->dwMaxPayloadTransferSize = payload_size; - return true; + param->dwMaxPayloadTransferSize = payload_size; + return true; } /** Set the minimum, maximum, default values or resolutions to variables which need to negotiate with the host @@ -519,156 +537,165 @@ static bool _update_streaming_parameters(videod_streaming_interface_t const *stm * @param[in] request GET_MAX, GET_MIN, GET_RES or GET_DEF * @param[in,out] param Target */ -static bool _negotiate_streaming_parameters(videod_streaming_interface_t const *stm, uint_fast8_t request, +static bool _negotiate_streaming_parameters(videod_streaming_interface_t const *stm, + uint_fast8_t request, video_probe_and_commit_control_t *param) { - uint_fast8_t const fmtnum = param->bFormatIndex; - if (!fmtnum) { - switch (request) { - case VIDEO_REQUEST_GET_MAX: - if (_get_desc_vs(stm)) - param->bFormatIndex = _get_desc_vs(stm)->stm.bNumFormats; - break; + uint_fast8_t const fmtnum = param->bFormatIndex; + if (!fmtnum) { + switch (request) { + case VIDEO_REQUEST_GET_MAX: + if (_get_desc_vs(stm)) + param->bFormatIndex = _get_desc_vs(stm)->stm.bNumFormats; + break; - case VIDEO_REQUEST_GET_MIN: - case VIDEO_REQUEST_GET_DEF: - param->bFormatIndex = 1; - break; + case VIDEO_REQUEST_GET_MIN: + case VIDEO_REQUEST_GET_DEF: + param->bFormatIndex = 1; + break; - default: return false; + default: + return false; + } + /* Set the parameters determined by the format */ + param->wKeyFrameRate = 1; + param->wPFrameRate = 0; + param->wCompQuality = 1; /* 1 to 10000 */ + param->wCompWindowSize = 1; /* GOP size? */ + param->wDelay = 0; /* milliseconds */ + param->dwClockFrequency = 27000000; /* same as MPEG-2 system time clock */ + param->bmFramingInfo = 0x3; /* enables FrameID and EndOfFrame */ + param->bPreferedVersion = 1; + param->bMinVersion = 1; + param->bMaxVersion = 1; + param->bUsage = 0; + param->bBitDepthLuma = 8; + return true; } - /* Set the parameters determined by the format */ - param->wKeyFrameRate = 1; - param->wPFrameRate = 0; - param->wCompQuality = 1; /* 1 to 10000 */ - param->wCompWindowSize = 1; /* GOP size? */ - param->wDelay = 0; /* milliseconds */ - param->dwClockFrequency = 27000000; /* same as MPEG-2 system time clock */ - param->bmFramingInfo = 0x3; /* enables FrameID and EndOfFrame */ - param->bPreferedVersion = 1; - param->bMinVersion = 1; - param->bMaxVersion = 1; - param->bUsage = 0; - param->bBitDepthLuma = 8; - return true; - } - uint_fast8_t frmnum = param->bFrameIndex; - if (!frmnum) { - tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); - TU_ASSERT(vs); - void const *end = _end_of_streaming_descriptor(vs); - tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); - switch (request) { - case VIDEO_REQUEST_GET_MAX: - frmnum = fmt->bNumFrameDescriptors; - break; + uint_fast8_t frmnum = param->bFrameIndex; + if (!frmnum) { + tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); + TU_ASSERT(vs); + void const *end = _end_of_streaming_descriptor(vs); + tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); + switch (request) { + case VIDEO_REQUEST_GET_MAX: + frmnum = fmt->bNumFrameDescriptors; + break; - case VIDEO_REQUEST_GET_MIN: - frmnum = 1; - break; + case VIDEO_REQUEST_GET_MIN: + frmnum = 1; + break; + + case VIDEO_REQUEST_GET_DEF: + switch (fmt->bDescriptorSubType) { + case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: + frmnum = fmt->uncompressed.bDefaultFrameIndex; + break; - case VIDEO_REQUEST_GET_DEF: + case VIDEO_CS_ITF_VS_FORMAT_MJPEG: + frmnum = fmt->mjpeg.bDefaultFrameIndex; + break; + + default: + return false; + } + break; + default: + return false; + } + param->bFrameIndex = (uint8_t)frmnum; + /* Set the parameters determined by the frame */ + tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); + uint_fast32_t frame_size; switch (fmt->bDescriptorSubType) { - case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: - frmnum = fmt->uncompressed.bDefaultFrameIndex; + case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: + frame_size = + (uint_fast32_t)frm->wWidth * frm->wHeight * fmt->uncompressed.bBitsPerPixel / 8; break; - case VIDEO_CS_ITF_VS_FORMAT_MJPEG: - frmnum = fmt->mjpeg.bDefaultFrameIndex; + case VIDEO_CS_ITF_VS_FORMAT_MJPEG: + frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * 16 / 8; /* YUV422 */ break; - default: return false; + default: + return false; } - break; - default: return false; + param->dwMaxVideoFrameSize = frame_size; + return true; } - param->bFrameIndex = (uint8_t)frmnum; - /* Set the parameters determined by the frame */ - tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); - uint_fast32_t frame_size; - switch (fmt->bDescriptorSubType) { - case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: - frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * fmt->uncompressed.bBitsPerPixel / 8; - break; - case VIDEO_CS_ITF_VS_FORMAT_MJPEG: - frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * 16 / 8; /* YUV422 */ - break; - - default: return false; - } - param->dwMaxVideoFrameSize = frame_size; - return true; - } + if (!param->dwFrameInterval) { + tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); + TU_ASSERT(vs); + void const *end = _end_of_streaming_descriptor(vs); + tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); + tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); + + uint_fast32_t interval, interval_ms; + switch (request) { + case VIDEO_REQUEST_GET_MAX: { + uint_fast32_t min_interval, max_interval; + uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; + max_interval = num_intervals ? frm->uncompressed.dwFrameInterval[num_intervals - 1] : + frm->uncompressed.dwFrameInterval[1]; + min_interval = frm->uncompressed.dwFrameInterval[0]; + interval = max_interval; + interval_ms = min_interval / 10000; + break; + } - if (!param->dwFrameInterval) { - tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); - TU_ASSERT(vs); - void const *end = _end_of_streaming_descriptor(vs); - tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); - tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); + case VIDEO_REQUEST_GET_MIN: { + uint_fast32_t min_interval, max_interval; + uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; + max_interval = num_intervals ? frm->uncompressed.dwFrameInterval[num_intervals - 1] : + frm->uncompressed.dwFrameInterval[1]; + min_interval = frm->uncompressed.dwFrameInterval[0]; + interval = min_interval; + interval_ms = max_interval / 10000; + break; + } - uint_fast32_t interval, interval_ms; - switch (request) { - case VIDEO_REQUEST_GET_MAX: { - uint_fast32_t min_interval, max_interval; - uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; - max_interval = num_intervals ? frm->uncompressed.dwFrameInterval[num_intervals - 1]: frm->uncompressed.dwFrameInterval[1]; - min_interval = frm->uncompressed.dwFrameInterval[0]; - interval = max_interval; - interval_ms = min_interval / 10000; - break; - } - - case VIDEO_REQUEST_GET_MIN: { - uint_fast32_t min_interval, max_interval; - uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; - max_interval = num_intervals ? frm->uncompressed.dwFrameInterval[num_intervals - 1]: frm->uncompressed.dwFrameInterval[1]; - min_interval = frm->uncompressed.dwFrameInterval[0]; - interval = min_interval; - interval_ms = max_interval / 10000; - break; - } + case VIDEO_REQUEST_GET_DEF: + interval = frm->uncompressed.dwDefaultFrameInterval; + interval_ms = interval / 10000; + break; - case VIDEO_REQUEST_GET_DEF: - interval = frm->uncompressed.dwDefaultFrameInterval; - interval_ms = interval / 10000; - break; + case VIDEO_REQUEST_GET_RES: { + uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; + if (num_intervals) { + interval = 0; + interval_ms = 0; + } else { + interval = frm->uncompressed.dwFrameInterval[2]; + interval_ms = interval / 10000; + } + break; + } - case VIDEO_REQUEST_GET_RES: { - uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; - if (num_intervals) { - interval = 0; - interval_ms = 0; + default: + return false; + } + param->dwFrameInterval = interval; + if (!interval) { + param->dwMaxPayloadTransferSize = 0; } else { - interval = frm->uncompressed.dwFrameInterval[2]; - interval_ms = interval / 10000; + uint_fast32_t frame_size = param->dwMaxVideoFrameSize; + uint_fast32_t payload_size; + if (!interval_ms) { + payload_size = frame_size + 2; + } else { + payload_size = (frame_size + interval_ms - 1) / interval_ms + 2; + } + if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size) { + payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE; + } + param->dwMaxPayloadTransferSize = payload_size; } - break; - } - - default: return false; - } - param->dwFrameInterval = interval; - if (!interval) { - param->dwMaxPayloadTransferSize = 0; - } else { - uint_fast32_t frame_size = param->dwMaxVideoFrameSize; - uint_fast32_t payload_size; - if (!interval_ms) { - payload_size = frame_size + 2; - } else { - payload_size = (frame_size + interval_ms - 1) / interval_ms + 2; - } - if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size) { - payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE; - } - param->dwMaxPayloadTransferSize = payload_size; + return true; } return true; - } - return true; } /** Close current video control interface. @@ -677,22 +704,22 @@ static bool _negotiate_streaming_parameters(videod_streaming_interface_t const * * @param[in] altnum The target alternate setting number. */ static bool _close_vc_itf(uint8_t rhport, videod_interface_t *self) { - tusb_desc_vc_itf_t const *vc = _get_desc_vc(self); - - /* The next descriptor after the class-specific VC interface header descriptor. */ - void const *cur = (uint8_t const*)vc + vc->std.bLength + vc->ctl.bLength; - - /* The end of the video control interface descriptor. */ - void const *end = _end_of_control_descriptor(vc); - if (vc->std.bNumEndpoints) { - /* Find the notification endpoint descriptor. */ - cur = _find_desc(cur, end, TUSB_DESC_ENDPOINT); - TU_ASSERT(cur < end); - tusb_desc_endpoint_t const *notif = (tusb_desc_endpoint_t const *)cur; - usbd_edpt_close(rhport, notif->bEndpointAddress); - } - self->cur = 0; - return true; + tusb_desc_vc_itf_t const *vc = _get_desc_vc(self); + + /* The next descriptor after the class-specific VC interface header descriptor. */ + void const *cur = (uint8_t const *)vc + vc->std.bLength + vc->ctl.bLength; + + /* The end of the video control interface descriptor. */ + void const *end = _end_of_control_descriptor(vc); + if (vc->std.bNumEndpoints) { + /* Find the notification endpoint descriptor. */ + cur = _find_desc(cur, end, TUSB_DESC_ENDPOINT); + TU_ASSERT(cur < end); + tusb_desc_endpoint_t const *notif = (tusb_desc_endpoint_t const *)cur; + usbd_edpt_close(rhport, notif->bEndpointAddress); + } + self->cur = 0; + return true; } /** Set the alternate setting to own video control interface. @@ -701,48 +728,49 @@ static bool _close_vc_itf(uint8_t rhport, videod_interface_t *self) * @param[in] altnum The target alternate setting number. */ static bool _open_vc_itf(uint8_t rhport, videod_interface_t *self, uint_fast8_t altnum) { - TU_LOG_DRV(" open VC %d\r\n", altnum); - uint8_t const *beg = self->beg; - uint8_t const *end = beg + self->len; - - /* The first descriptor is a video control interface descriptor. */ - uint8_t const *cur = _find_desc_itf(beg, end, _desc_itfnum(beg), altnum); - TU_LOG_DRV(" cur %d\r\n", cur - beg); - TU_VERIFY(cur < end); - - tusb_desc_vc_itf_t const *vc = (tusb_desc_vc_itf_t const *)cur; - TU_LOG_DRV(" bInCollection %d\r\n", vc->ctl.bInCollection); - /* Support for up to 2 streaming interfaces only. */ - TU_ASSERT(vc->ctl.bInCollection <= CFG_TUD_VIDEO_STREAMING); - - /* Update to point the end of the video control interface descriptor. */ - end = _end_of_control_descriptor(cur); - - /* Advance to the next descriptor after the class-specific VC interface header descriptor. */ - cur += vc->std.bLength + vc->ctl.bLength; - TU_LOG_DRV(" bNumEndpoints %d\r\n", vc->std.bNumEndpoints); - /* Open the notification endpoint if it exist. */ - if (vc->std.bNumEndpoints) { - /* Support for 1 endpoint only. */ - TU_VERIFY(1 == vc->std.bNumEndpoints); - /* Find the notification endpoint descriptor. */ - cur = _find_desc(cur, end, TUSB_DESC_ENDPOINT); + TU_LOG_DRV(" open VC %d\r\n", altnum); + uint8_t const *beg = self->beg; + uint8_t const *end = beg + self->len; + + /* The first descriptor is a video control interface descriptor. */ + uint8_t const *cur = _find_desc_itf(beg, end, _desc_itfnum(beg), altnum); + TU_LOG_DRV(" cur %d\r\n", cur - beg); TU_VERIFY(cur < end); - tusb_desc_endpoint_t const *notif = (tusb_desc_endpoint_t const *)cur; - /* Open the notification endpoint */ - TU_ASSERT(usbd_edpt_open(rhport, notif)); - } - self->cur = (uint16_t) ((uint8_t const*)vc - beg); - return true; + + tusb_desc_vc_itf_t const *vc = (tusb_desc_vc_itf_t const *)cur; + TU_LOG_DRV(" bInCollection %d\r\n", vc->ctl.bInCollection); + /* Support for up to 2 streaming interfaces only. */ + TU_ASSERT(vc->ctl.bInCollection <= CFG_TUD_VIDEO_STREAMING); + + /* Update to point the end of the video control interface descriptor. */ + end = _end_of_control_descriptor(cur); + + /* Advance to the next descriptor after the class-specific VC interface header descriptor. */ + cur += vc->std.bLength + vc->ctl.bLength; + TU_LOG_DRV(" bNumEndpoints %d\r\n", vc->std.bNumEndpoints); + /* Open the notification endpoint if it exist. */ + if (vc->std.bNumEndpoints) { + /* Support for 1 endpoint only. */ + TU_VERIFY(1 == vc->std.bNumEndpoints); + /* Find the notification endpoint descriptor. */ + cur = _find_desc(cur, end, TUSB_DESC_ENDPOINT); + TU_VERIFY(cur < end); + tusb_desc_endpoint_t const *notif = (tusb_desc_endpoint_t const *)cur; + /* Open the notification endpoint */ + TU_ASSERT(usbd_edpt_open(rhport, notif)); + } + self->cur = (uint16_t)((uint8_t const *)vc - beg); + return true; } -static bool _init_vs_configuration(videod_streaming_interface_t *stm) { - /* initialize streaming settings */ - stm->state = VS_STATE_PROBING; - stm->max_payload_transfer_size = 0; - video_probe_and_commit_control_t *param = &stm->probe_commit_payload; - tu_memclr(param, sizeof(*param)); - return _update_streaming_parameters(stm, param); +static bool _init_vs_configuration(videod_streaming_interface_t *stm) +{ + /* initialize streaming settings */ + stm->state = VS_STATE_PROBING; + stm->max_payload_transfer_size = 0; + video_probe_and_commit_control_t *param = &stm->probe_commit_payload; + tu_memclr(param, sizeof(*param)); + return _update_streaming_parameters(stm, param); } /** Set the alternate setting to own video streaming interface. @@ -751,388 +779,419 @@ static bool _init_vs_configuration(videod_streaming_interface_t *stm) { * @param[in] altnum The target alternate setting number. */ static bool _open_vs_itf(uint8_t rhport, videod_streaming_interface_t *stm, uint_fast8_t altnum) { - uint_fast8_t i; - TU_LOG_DRV(" reopen VS %d\r\n", altnum); - uint8_t const *desc = _videod_itf[stm->index_vc].beg; + uint_fast8_t i; + TU_LOG_DRV(" reopen VS %d\r\n", altnum); + uint8_t const *desc = _videod_itf[stm->index_vc].beg; #ifndef TUP_DCD_EDPT_ISO_ALLOC - /* Close endpoints of previous settings. */ - for (i = 0; i < TU_ARRAY_SIZE(stm->desc.ep); ++i) { - uint_fast16_t ofs_ep = stm->desc.ep[i]; - if (!ofs_ep) break; - tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const*)(desc + ofs_ep); - /* Only ISO endpoints needs to be closed */ - if(ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - stm->desc.ep[i] = 0; - usbd_edpt_close(rhport, ep->bEndpointAddress); - TU_LOG_DRV(" close EP%02x\r\n", ep->bEndpointAddress); + /* Close endpoints of previous settings. */ + for (i = 0; i < TU_ARRAY_SIZE(stm->desc.ep); ++i) { + uint_fast16_t ofs_ep = stm->desc.ep[i]; + if (!ofs_ep) + break; + tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const *)(desc + ofs_ep); + /* Only ISO endpoints needs to be closed */ + if (ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { + stm->desc.ep[i] = 0; + usbd_edpt_close(rhport, ep->bEndpointAddress); + TU_LOG_DRV(" close EP%02x\r\n", ep->bEndpointAddress); + } } - } #endif - /* clear transfer management information */ - stm->buffer = NULL; - stm->bufsize = 0; - stm->offset = 0; - - /* Find a alternate interface */ - uint8_t const *beg = desc + stm->desc.beg; - uint8_t const *end = desc + stm->desc.end; - uint8_t const *cur = _find_desc_itf(beg, end, _desc_itfnum(beg), altnum); - TU_VERIFY(cur < end); - - uint_fast8_t numeps = ((tusb_desc_interface_t const *)cur)->bNumEndpoints; - TU_ASSERT(numeps <= TU_ARRAY_SIZE(stm->desc.ep)); - stm->desc.cur = (uint16_t)(cur - desc); /* Save the offset of the new settings */ - if (!altnum && (VS_STATE_COMMITTED != stm->state)) { - TU_VERIFY(_init_vs_configuration(stm)); - } - /* Open bulk or isochronous endpoints of the new settings. */ - for (i = 0, cur = tu_desc_next(cur); i < numeps; ++i, cur = tu_desc_next(cur)) { - cur = _find_desc_ep(cur, end); - TU_ASSERT(cur < end); - tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const*)cur; - uint_fast32_t max_size = stm->max_payload_transfer_size; - if (altnum && (TUSB_XFER_ISOCHRONOUS == ep->bmAttributes.xfer)) { - /* FS must be less than or equal to max packet size */ - TU_VERIFY (tu_edpt_packet_size(ep) >= max_size); + /* clear transfer management information */ + stm->buffer = NULL; + stm->bufsize = 0; + stm->offset = 0; + + /* Find a alternate interface */ + uint8_t const *beg = desc + stm->desc.beg; + uint8_t const *end = desc + stm->desc.end; + uint8_t const *cur = _find_desc_itf(beg, end, _desc_itfnum(beg), altnum); + TU_VERIFY(cur < end); + + uint_fast8_t numeps = ((tusb_desc_interface_t const *)cur)->bNumEndpoints; + TU_ASSERT(numeps <= TU_ARRAY_SIZE(stm->desc.ep)); + stm->desc.cur = (uint16_t)(cur - desc); /* Save the offset of the new settings */ + if (!altnum && (VS_STATE_COMMITTED != stm->state)) { + TU_VERIFY(_init_vs_configuration(stm)); + } + /* Open bulk or isochronous endpoints of the new settings. */ + for (i = 0, cur = tu_desc_next(cur); i < numeps; ++i, cur = tu_desc_next(cur)) { + cur = _find_desc_ep(cur, end); + TU_ASSERT(cur < end); + tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const *)cur; + uint_fast32_t max_size = stm->max_payload_transfer_size; + if (altnum && (TUSB_XFER_ISOCHRONOUS == ep->bmAttributes.xfer)) { + /* FS must be less than or equal to max packet size */ + TU_VERIFY(tu_edpt_packet_size(ep) >= max_size); #ifdef TUP_DCD_EDPT_ISO_ALLOC - usbd_edpt_iso_activate(rhport, ep); + usbd_edpt_iso_activate(rhport, ep); #else - TU_ASSERT(usbd_edpt_open(rhport, ep)); + TU_ASSERT(usbd_edpt_open(rhport, ep)); #endif - } else { - TU_VERIFY(TUSB_XFER_BULK == ep->bmAttributes.xfer); - TU_ASSERT(usbd_edpt_open(rhport, ep)); + } else { + TU_VERIFY(TUSB_XFER_BULK == ep->bmAttributes.xfer); + TU_ASSERT(usbd_edpt_open(rhport, ep)); + } + stm->desc.ep[i] = (uint16_t)(cur - desc); + TU_LOG_DRV(" open EP%02x\r\n", _desc_ep_addr(cur)); } - stm->desc.ep[i] = (uint16_t) (cur - desc); - TU_LOG_DRV(" open EP%02x\r\n", _desc_ep_addr(cur)); - } - if (altnum) { - stm->state = VS_STATE_STREAMING; - } - TU_LOG_DRV(" done\r\n"); - return true; + if (altnum) { + stm->state = VS_STATE_STREAMING; + } + TU_LOG_DRV(" done\r\n"); + return true; } /** Prepare the next packet payload. */ static uint_fast16_t _prepare_in_payload(videod_streaming_interface_t *stm) { - uint_fast16_t remaining = stm->bufsize - stm->offset; - uint_fast16_t hdr_len = stm->ep_buf[0]; - uint_fast16_t pkt_len = stm->max_payload_transfer_size; - if (hdr_len + remaining < pkt_len) { - pkt_len = hdr_len + remaining; - } - TU_ASSERT(pkt_len >= hdr_len); - uint_fast16_t data_len = pkt_len - hdr_len; - memcpy(&stm->ep_buf[hdr_len], stm->buffer + stm->offset, data_len); - stm->offset += data_len; - remaining -= data_len; - if (!remaining) { - tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t*)stm->ep_buf; - hdr->EndOfFrame = 1; - } - return hdr_len + data_len; + uint_fast16_t remaining = stm->bufsize - stm->offset; + uint_fast16_t hdr_len = stm->ep_buf[0]; + uint_fast16_t pkt_len = stm->max_payload_transfer_size; + if (hdr_len + remaining < pkt_len) { + pkt_len = hdr_len + remaining; + } + TU_ASSERT(pkt_len >= hdr_len); + uint_fast16_t data_len = pkt_len - hdr_len; + memcpy(&stm->ep_buf[hdr_len], stm->buffer + stm->offset, data_len); + stm->offset += data_len; + remaining -= data_len; + if (!remaining) { + tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t *)stm->ep_buf; + hdr->EndOfFrame = 1; + } + return hdr_len + data_len; } /** Handle a standard request to the video control interface. */ static int handle_video_ctl_std_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, - uint_fast8_t ctl_idx) + tusb_control_request_t const *request, uint_fast8_t ctl_idx) { - TU_LOG_DRV("\r\n"); - switch (request->bRequest) { + TU_LOG_DRV("\r\n"); + switch (request->bRequest) { case TUSB_REQ_GET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) - { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - tusb_desc_vc_itf_t const *vc = _get_desc_vc(&_videod_itf[ctl_idx]); - TU_VERIFY(vc, VIDEO_ERROR_UNKNOWN); + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + tusb_desc_vc_itf_t const *vc = _get_desc_vc(&_videod_itf[ctl_idx]); + TU_VERIFY(vc, VIDEO_ERROR_UNKNOWN); - uint8_t alt_num = vc->std.bAlternateSetting; + uint8_t alt_num = vc->std.bAlternateSetting; - TU_VERIFY(tud_control_xfer(rhport, request, &alt_num, sizeof(alt_num)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + TU_VERIFY(tud_control_xfer(rhport, request, &alt_num, sizeof(alt_num)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case TUSB_REQ_SET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) - { - TU_VERIFY(0 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(_close_vc_itf(rhport, &_videod_itf[ctl_idx]), VIDEO_ERROR_UNKNOWN); - TU_VERIFY(_open_vc_itf(rhport, &_videod_itf[ctl_idx], request->wValue), VIDEO_ERROR_UNKNOWN); - tud_control_status(rhport, request); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(0 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(_close_vc_itf(rhport, &_videod_itf[ctl_idx]), VIDEO_ERROR_UNKNOWN); + TU_VERIFY(_open_vc_itf(rhport, &_videod_itf[ctl_idx], request->wValue), + VIDEO_ERROR_UNKNOWN); + tud_control_status(rhport, request); + } + return VIDEO_ERROR_NONE; default: /* Unknown/Unsupported request */ - TU_BREAKPOINT(); - return VIDEO_ERROR_INVALID_REQUEST; - } + TU_BREAKPOINT(); + return VIDEO_ERROR_INVALID_REQUEST; + } } static int handle_video_ctl_cs_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, - uint_fast8_t ctl_idx) + tusb_control_request_t const *request, uint_fast8_t ctl_idx) { - videod_interface_t *self = &_videod_itf[ctl_idx]; + videod_interface_t *self = &_videod_itf[ctl_idx]; - /* 4.2.1 Interface Control Request */ - uint8_t const ctrl_sel = TU_U16_HIGH(request->wValue); - TU_LOG_DRV("%s_Control(%s)\r\n", tu_str_video_vc_control_selector[ctrl_sel], tu_lookup_find(&tu_table_video_request, request->bRequest)); + /* 4.2.1 Interface Control Request */ + uint8_t const ctrl_sel = TU_U16_HIGH(request->wValue); + TU_LOG_DRV("%s_Control(%s)\r\n", tu_str_video_vc_control_selector[ctrl_sel], + tu_lookup_find(&tu_table_video_request, request->bRequest)); - switch (ctrl_sel) { + switch (ctrl_sel) { case VIDEO_VC_CTL_VIDEO_POWER_MODE: - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_SET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, &self->power_mode, sizeof(self->power_mode)), VIDEO_ERROR_UNKNOWN); - } else if (stage == CONTROL_STAGE_DATA) { - if (tud_video_power_mode_cb) return tud_video_power_mode_cb(ctl_idx, self->power_mode); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, &self->power_mode, + sizeof(self->power_mode)), + VIDEO_ERROR_UNKNOWN); + } else if (stage == CONTROL_STAGE_DATA) { + if (tud_video_power_mode_cb) + return tud_video_power_mode_cb(ctl_idx, self->power_mode); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) - { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, &self->power_mode, sizeof(self->power_mode)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, &self->power_mode, + sizeof(self->power_mode)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) - { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t) &_cap_get_set, sizeof(_cap_get_set)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get_set, + sizeof(_cap_get_set)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; - default: break; - } - break; + default: + break; + } + break; case VIDEO_VC_CTL_REQUEST_ERROR_CODE: - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) - { - TU_VERIFY(tud_control_xfer(rhport, request, &self->error_code, sizeof(uint8_t)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(tud_control_xfer(rhport, request, &self->error_code, sizeof(uint8_t)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) - { - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t) &_cap_get, sizeof(_cap_get)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; - - default: break; - } - break; - - default: break; - } - - /* Unknown/Unsupported request */ - TU_BREAKPOINT(); - return VIDEO_ERROR_INVALID_REQUEST; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get, + sizeof(_cap_get)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; + + default: + break; + } + break; + + default: + break; + } + + /* Unknown/Unsupported request */ + TU_BREAKPOINT(); + return VIDEO_ERROR_INVALID_REQUEST; } static int handle_video_ctl_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, - uint_fast8_t ctl_idx) + tusb_control_request_t const *request, uint_fast8_t ctl_idx) { - switch (request->bmRequestType_bit.type) { + switch (request->bmRequestType_bit.type) { case TUSB_REQ_TYPE_STANDARD: - return handle_video_ctl_std_req(rhport, stage, request, ctl_idx); + return handle_video_ctl_std_req(rhport, stage, request, ctl_idx); case TUSB_REQ_TYPE_CLASS: { - uint_fast8_t entity_id = TU_U16_HIGH(request->wIndex); - if (!entity_id) { - return handle_video_ctl_cs_req(rhport, stage, request, ctl_idx); - } else { - TU_VERIFY(_find_desc_entity(_get_desc_vc(&_videod_itf[ctl_idx]), entity_id), VIDEO_ERROR_INVALID_REQUEST); - return VIDEO_ERROR_NONE; - } + uint_fast8_t entity_id = TU_U16_HIGH(request->wIndex); + if (!entity_id) { + return handle_video_ctl_cs_req(rhport, stage, request, ctl_idx); + } else { + TU_VERIFY(_find_desc_entity(_get_desc_vc(&_videod_itf[ctl_idx]), entity_id), + VIDEO_ERROR_INVALID_REQUEST); + return VIDEO_ERROR_NONE; + } } default: - return VIDEO_ERROR_INVALID_REQUEST; - } + return VIDEO_ERROR_INVALID_REQUEST; + } } static int handle_video_stm_std_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, - uint_fast8_t stm_idx) + tusb_control_request_t const *request, uint_fast8_t stm_idx) { - TU_LOG_DRV("\r\n"); - videod_streaming_interface_t *self = &_videod_streaming_itf[stm_idx]; - switch (request->bRequest) { + TU_LOG_DRV("\r\n"); + videod_streaming_interface_t *self = &_videod_streaming_itf[stm_idx]; + switch (request->bRequest) { case TUSB_REQ_GET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) - { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - tusb_desc_vs_itf_t const *vs = _get_desc_vs(self); - TU_VERIFY(vs, VIDEO_ERROR_UNKNOWN); - uint8_t alt_num = vs->std.bAlternateSetting; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + tusb_desc_vs_itf_t const *vs = _get_desc_vs(self); + TU_VERIFY(vs, VIDEO_ERROR_UNKNOWN); + uint8_t alt_num = vs->std.bAlternateSetting; - TU_VERIFY(tud_control_xfer(rhport, request, &alt_num, sizeof(alt_num)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + TU_VERIFY(tud_control_xfer(rhport, request, &alt_num, sizeof(alt_num)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case TUSB_REQ_SET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(_open_vs_itf(rhport, self, request->wValue), VIDEO_ERROR_UNKNOWN); - tud_control_status(rhport, request); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(_open_vs_itf(rhport, self, request->wValue), VIDEO_ERROR_UNKNOWN); + tud_control_status(rhport, request); + } + return VIDEO_ERROR_NONE; default: /* Unknown/Unsupported request */ - TU_BREAKPOINT(); - return VIDEO_ERROR_INVALID_REQUEST; - } + TU_BREAKPOINT(); + return VIDEO_ERROR_INVALID_REQUEST; + } } static int handle_video_stm_cs_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, - uint_fast8_t stm_idx) { - (void)rhport; - videod_streaming_interface_t *self = &_videod_streaming_itf[stm_idx]; + tusb_control_request_t const *request, uint_fast8_t stm_idx) +{ + (void)rhport; + videod_streaming_interface_t *self = &_videod_streaming_itf[stm_idx]; - uint8_t const ctrl_sel = TU_U16_HIGH(request->wValue); - TU_LOG_DRV("%s_Control(%s)\r\n", tu_str_video_vs_control_selector[ctrl_sel], tu_lookup_find(&tu_table_video_request, request->bRequest)); + uint8_t const ctrl_sel = TU_U16_HIGH(request->wValue); + TU_LOG_DRV("%s_Control(%s)\r\n", tu_str_video_vs_control_selector[ctrl_sel], + tu_lookup_find(&tu_table_video_request, request->bRequest)); - /* 4.2.1 Interface Control Request */ - switch (ctrl_sel) { + /* 4.2.1 Interface Control Request */ + switch (ctrl_sel) { case VIDEO_VS_CTL_STREAM_ERROR_CODE: - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - /* TODO */ - TU_VERIFY(tud_control_xfer(rhport, request, &self->error_code, sizeof(uint8_t)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + /* TODO */ + TU_VERIFY(tud_control_xfer(rhport, request, &self->error_code, sizeof(uint8_t)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t) &_cap_get, sizeof(_cap_get)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get, + sizeof(_cap_get)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; - default: break; - } - break; + default: + break; + } + break; case VIDEO_VS_CTL_PROBE: - if (self->state != VS_STATE_PROBING) { - self->state = VS_STATE_PROBING; - } + if (self->state != VS_STATE_PROBING) { + self->state = VS_STATE_PROBING; + } - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_SET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, sizeof(video_probe_and_commit_control_t)), - VIDEO_ERROR_UNKNOWN); - } else if (stage == CONTROL_STAGE_DATA) { - TU_VERIFY(_update_streaming_parameters(self, &self->probe_commit_payload), - VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, + sizeof(video_probe_and_commit_control_t)), + VIDEO_ERROR_UNKNOWN); + } else if (stage == CONTROL_STAGE_DATA) { + TU_VERIFY(_update_streaming_parameters(self, &self->probe_commit_payload), + VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, sizeof(video_probe_and_commit_control_t)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, + sizeof(video_probe_and_commit_control_t)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_MIN: case VIDEO_REQUEST_GET_MAX: case VIDEO_REQUEST_GET_RES: case VIDEO_REQUEST_GET_DEF: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); - video_probe_and_commit_control_t tmp = self->probe_commit_payload; - TU_VERIFY(_negotiate_streaming_parameters(self, request->bRequest, &tmp), VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); - TU_VERIFY(tud_control_xfer(rhport, request, &tmp, sizeof(tmp)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); + video_probe_and_commit_control_t tmp = self->probe_commit_payload; + TU_VERIFY(_negotiate_streaming_parameters(self, request->bRequest, &tmp), + VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); + TU_VERIFY(tud_control_xfer(rhport, request, &tmp, sizeof(tmp)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_LEN: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(2 == request->wLength, VIDEO_ERROR_UNKNOWN); - uint16_t len = sizeof(video_probe_and_commit_control_t); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)&len, sizeof(len)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(2 == request->wLength, VIDEO_ERROR_UNKNOWN); + uint16_t len = sizeof(video_probe_and_commit_control_t); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)&len, sizeof(len)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t)&_cap_get_set, sizeof(_cap_get_set)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get_set, + sizeof(_cap_get_set)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; - default: break; - } - break; + default: + break; + } + break; case VIDEO_VS_CTL_COMMIT: - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_SET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, sizeof(video_probe_and_commit_control_t)), VIDEO_ERROR_UNKNOWN); - } else if (stage == CONTROL_STAGE_DATA) { - video_probe_and_commit_control_t *param = &self->probe_commit_payload; - TU_VERIFY(_update_streaming_parameters(self, param), VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); - /* Set the negotiated value */ - self->max_payload_transfer_size = param->dwMaxPayloadTransferSize; - int ret = VIDEO_ERROR_NONE; - if (tud_video_commit_cb) { - ret = tud_video_commit_cb(self->index_vc, self->index_vs, param); + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, + sizeof(video_probe_and_commit_control_t)), + VIDEO_ERROR_UNKNOWN); + } else if (stage == CONTROL_STAGE_DATA) { + video_probe_and_commit_control_t *param = &self->probe_commit_payload; + TU_VERIFY(_update_streaming_parameters(self, param), + VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); + /* Set the negotiated value */ + self->max_payload_transfer_size = param->dwMaxPayloadTransferSize; + int ret = VIDEO_ERROR_NONE; + if (tud_video_commit_cb) { + ret = tud_video_commit_cb(self->index_vc, self->index_vs, param); + } + if (VIDEO_ERROR_NONE == ret) { + self->state = VS_STATE_COMMITTED; + self->buffer = NULL; + self->bufsize = 0; + self->offset = 0; + /* initialize payload header */ + tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t *)self->ep_buf; + hdr->bHeaderLength = sizeof(*hdr); + hdr->bmHeaderInfo = 0; + } } - if (VIDEO_ERROR_NONE == ret) { - self->state = VS_STATE_COMMITTED; - self->buffer = NULL; - self->bufsize = 0; - self->offset = 0; - /* initialize payload header */ - tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t*)self->ep_buf; - hdr->bHeaderLength = sizeof(*hdr); - hdr->bmHeaderInfo = 0; - } - } - return VIDEO_ERROR_NONE; + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, sizeof(video_probe_and_commit_control_t)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, + sizeof(video_probe_and_commit_control_t)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_LEN: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(2 == request->wLength, VIDEO_ERROR_UNKNOWN); - uint16_t len = sizeof(video_probe_and_commit_control_t); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)&len, sizeof(len)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(2 == request->wLength, VIDEO_ERROR_UNKNOWN); + uint16_t len = sizeof(video_probe_and_commit_control_t); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)&len, sizeof(len)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t) &_cap_get_set, sizeof(_cap_get_set)), VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get_set, + sizeof(_cap_get_set)), + VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; - default: break; - } - break; + default: + break; + } + break; case VIDEO_VS_CTL_STILL_PROBE: case VIDEO_VS_CTL_STILL_COMMIT: @@ -1140,31 +1199,33 @@ static int handle_video_stm_cs_req(uint8_t rhport, uint8_t stage, case VIDEO_VS_CTL_GENERATE_KEY_FRAME: case VIDEO_VS_CTL_UPDATE_FRAME_SEGMENT: case VIDEO_VS_CTL_SYNCH_DELAY_CONTROL: - /* TODO */ - break; + /* TODO */ + break; - default: break; - } + default: + break; + } - /* Unknown/Unsupported request */ - TU_BREAKPOINT(); - return VIDEO_ERROR_INVALID_REQUEST; + /* Unknown/Unsupported request */ + TU_BREAKPOINT(); + return VIDEO_ERROR_INVALID_REQUEST; } static int handle_video_stm_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, - uint_fast8_t stm_idx) + tusb_control_request_t const *request, uint_fast8_t stm_idx) { - switch (request->bmRequestType_bit.type) { + switch (request->bmRequestType_bit.type) { case TUSB_REQ_TYPE_STANDARD: - return handle_video_stm_std_req(rhport, stage, request, stm_idx); + return handle_video_stm_std_req(rhport, stage, request, stm_idx); case TUSB_REQ_TYPE_CLASS: - if (TU_U16_HIGH(request->wIndex)) return VIDEO_ERROR_INVALID_REQUEST; - return handle_video_stm_cs_req(rhport, stage, request, stm_idx); + if (TU_U16_HIGH(request->wIndex)) + return VIDEO_ERROR_INVALID_REQUEST; + return handle_video_stm_cs_req(rhport, stage, request, stm_idx); - default: return VIDEO_ERROR_INVALID_REQUEST; - } + default: + return VIDEO_ERROR_INVALID_REQUEST; + } } //--------------------------------------------------------------------+ @@ -1173,241 +1234,270 @@ static int handle_video_stm_req(uint8_t rhport, uint8_t stage, bool tud_video_n_connected(uint_fast8_t ctl_idx) { - TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); - videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, 0); - if (stm) return true; - return false; + TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); + videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, 0); + if (stm) + return true; + return false; } bool tud_video_n_streaming(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { - TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); - TU_ASSERT(stm_idx < CFG_TUD_VIDEO_STREAMING); - videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, stm_idx); - if (!stm || !stm->desc.ep[0]) return false; - if (stm->state == VS_STATE_PROBING) return false; + TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); + TU_ASSERT(stm_idx < CFG_TUD_VIDEO_STREAMING); + videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, stm_idx); + if (!stm || !stm->desc.ep[0]) + return false; + if (stm->state == VS_STATE_PROBING) + return false; #ifdef TUP_DCD_EDPT_ISO_ALLOC - uint8_t const *desc = _videod_itf[stm->index_vc].beg; - uint_fast16_t ofs_ep = stm->desc.ep[0]; - tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const*)(desc + ofs_ep); - if (ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - if (stm->state == VS_STATE_COMMITTED) return false; - } + uint8_t const *desc = _videod_itf[stm->index_vc].beg; + uint_fast16_t ofs_ep = stm->desc.ep[0]; + tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const *)(desc + ofs_ep); + if (ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { + if (stm->state == VS_STATE_COMMITTED) + return false; + } #endif - return true; + return true; } -bool tud_video_n_frame_xfer(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void *buffer, size_t bufsize) +bool tud_video_n_frame_xfer(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void *buffer, + size_t bufsize) { - TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); - TU_ASSERT(stm_idx < CFG_TUD_VIDEO_STREAMING); - if (!buffer || !bufsize) return false; - videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, stm_idx); - if (!stm || !stm->desc.ep[0] || stm->buffer) return false; - if (stm->state == VS_STATE_PROBING) return false; - - /* Find EP address */ - uint8_t const *desc = _videod_itf[stm->index_vc].beg; - uint8_t ep_addr = 0; - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { - uint_fast16_t ofs_ep = stm->desc.ep[i]; - if (!ofs_ep) continue; - ep_addr = _desc_ep_addr(desc + ofs_ep); - break; - } - if (!ep_addr) return false; - - TU_VERIFY( usbd_edpt_claim(0, ep_addr) ); - /* update the packet header */ - tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t*)stm->ep_buf; - hdr->FrameID ^= 1; - hdr->EndOfFrame = 0; - /* update the packet data */ - stm->buffer = (uint8_t*)buffer; - stm->bufsize = bufsize; - uint_fast16_t pkt_len = _prepare_in_payload(stm); - TU_ASSERT( usbd_edpt_xfer(0, ep_addr, stm->ep_buf, (uint16_t) pkt_len), 0); - return true; + TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); + TU_ASSERT(stm_idx < CFG_TUD_VIDEO_STREAMING); + if (!buffer || !bufsize) + return false; + videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, stm_idx); + if (!stm || !stm->desc.ep[0] || stm->buffer) + return false; + if (stm->state == VS_STATE_PROBING) + return false; + + /* Find EP address */ + uint8_t const *desc = _videod_itf[stm->index_vc].beg; + uint8_t ep_addr = 0; + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { + uint_fast16_t ofs_ep = stm->desc.ep[i]; + if (!ofs_ep) + continue; + ep_addr = _desc_ep_addr(desc + ofs_ep); + break; + } + if (!ep_addr) + return false; + + TU_VERIFY(usbd_edpt_claim(0, ep_addr)); + /* update the packet header */ + tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t *)stm->ep_buf; + hdr->FrameID ^= 1; + hdr->EndOfFrame = 0; + /* update the packet data */ + stm->buffer = (uint8_t *)buffer; + stm->bufsize = bufsize; + uint_fast16_t pkt_len = _prepare_in_payload(stm); + TU_ASSERT(usbd_edpt_xfer(0, ep_addr, stm->ep_buf, (uint16_t)pkt_len), 0); + return true; } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void videod_init(void) { - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO; ++i) { - videod_interface_t* ctl = &_videod_itf[i]; - tu_memclr(ctl, sizeof(*ctl)); - } - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { - videod_streaming_interface_t *stm = &_videod_streaming_itf[i]; - tu_memclr(stm, ITF_STM_MEM_RESET_SIZE); - } +void videod_init(void) +{ + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO; ++i) { + videod_interface_t *ctl = &_videod_itf[i]; + tu_memclr(ctl, sizeof(*ctl)); + } + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { + videod_streaming_interface_t *stm = &_videod_streaming_itf[i]; + tu_memclr(stm, ITF_STM_MEM_RESET_SIZE); + } } -bool videod_deinit(void) { - return true; +bool videod_deinit(void) +{ + return true; } -void videod_reset(uint8_t rhport) { - (void) rhport; - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO; ++i) { - videod_interface_t* ctl = &_videod_itf[i]; - tu_memclr(ctl, sizeof(*ctl)); - } - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { - videod_streaming_interface_t *stm = &_videod_streaming_itf[i]; - tu_memclr(stm, ITF_STM_MEM_RESET_SIZE); - } +void videod_reset(uint8_t rhport) +{ + (void)rhport; + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO; ++i) { + videod_interface_t *ctl = &_videod_itf[i]; + tu_memclr(ctl, sizeof(*ctl)); + } + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { + videod_streaming_interface_t *stm = &_videod_streaming_itf[i]; + tu_memclr(stm, ITF_STM_MEM_RESET_SIZE); + } } -uint16_t videod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { - TU_VERIFY((TUSB_CLASS_VIDEO == itf_desc->bInterfaceClass) && - (VIDEO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass) && - (VIDEO_ITF_PROTOCOL_15 == itf_desc->bInterfaceProtocol), 0); - - /* Find available interface */ - videod_interface_t *self = NULL; - uint8_t ctl_idx; - for (ctl_idx = 0; ctl_idx < CFG_TUD_VIDEO; ++ctl_idx) { - if (_videod_itf[ctl_idx].beg) continue; - self = &_videod_itf[ctl_idx]; - break; - } - TU_ASSERT(ctl_idx < CFG_TUD_VIDEO, 0); - - uint8_t const *end = (uint8_t const*)itf_desc + max_len; - self->beg = (uint8_t const*) itf_desc; - self->len = max_len; - - /*------------- Video Control Interface -------------*/ - TU_VERIFY(_open_vc_itf(rhport, self, 0), 0); - tusb_desc_vc_itf_t const *vc = _get_desc_vc(self); - uint_fast8_t bInCollection = vc->ctl.bInCollection; - - /* Find the end of the video interface descriptor */ - void const *cur = _next_desc_itf(itf_desc, end); - for (uint8_t stm_idx = 0; stm_idx < bInCollection; ++stm_idx) { - videod_streaming_interface_t *stm = NULL; - /* find free streaming interface handle */ - for (uint8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { - if (_videod_streaming_itf[i].desc.beg) continue; - stm = &_videod_streaming_itf[i]; - self->stm[stm_idx] = i; - break; +uint16_t videod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +{ + TU_VERIFY((TUSB_CLASS_VIDEO == itf_desc->bInterfaceClass) && + (VIDEO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass) && + (VIDEO_ITF_PROTOCOL_15 == itf_desc->bInterfaceProtocol), + 0); + + /* Find available interface */ + videod_interface_t *self = NULL; + uint8_t ctl_idx; + for (ctl_idx = 0; ctl_idx < CFG_TUD_VIDEO; ++ctl_idx) { + if (_videod_itf[ctl_idx].beg) + continue; + self = &_videod_itf[ctl_idx]; + break; } - TU_ASSERT(stm, 0); - stm->index_vc = ctl_idx; - stm->index_vs = stm_idx; - stm->desc.beg = (uint16_t) ((uintptr_t)cur - (uintptr_t)itf_desc); - cur = _next_desc_itf(cur, end); - stm->desc.end = (uint16_t) ((uintptr_t)cur - (uintptr_t)itf_desc); - stm->state = VS_STATE_PROBING; + TU_ASSERT(ctl_idx < CFG_TUD_VIDEO, 0); + + uint8_t const *end = (uint8_t const *)itf_desc + max_len; + self->beg = (uint8_t const *)itf_desc; + self->len = max_len; + + /*------------- Video Control Interface -------------*/ + TU_VERIFY(_open_vc_itf(rhport, self, 0), 0); + tusb_desc_vc_itf_t const *vc = _get_desc_vc(self); + uint_fast8_t bInCollection = vc->ctl.bInCollection; + + /* Find the end of the video interface descriptor */ + void const *cur = _next_desc_itf(itf_desc, end); + for (uint8_t stm_idx = 0; stm_idx < bInCollection; ++stm_idx) { + videod_streaming_interface_t *stm = NULL; + /* find free streaming interface handle */ + for (uint8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { + if (_videod_streaming_itf[i].desc.beg) + continue; + stm = &_videod_streaming_itf[i]; + self->stm[stm_idx] = i; + break; + } + TU_ASSERT(stm, 0); + stm->index_vc = ctl_idx; + stm->index_vs = stm_idx; + stm->desc.beg = (uint16_t)((uintptr_t)cur - (uintptr_t)itf_desc); + cur = _next_desc_itf(cur, end); + stm->desc.end = (uint16_t)((uintptr_t)cur - (uintptr_t)itf_desc); + stm->state = VS_STATE_PROBING; #ifdef TUP_DCD_EDPT_ISO_ALLOC - /* Allocate ISO endpoints */ - uint16_t ep_size = 0; - uint16_t ep_addr = 0; - uint8_t const *p_desc = (uint8_t const*)itf_desc + stm->desc.beg; - uint8_t const *p_desc_end = (uint8_t const*)itf_desc + stm->desc.end; - while (p_desc < p_desc_end) { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc; - if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - ep_addr = desc_ep->bEndpointAddress; - ep_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_size); + /* Allocate ISO endpoints */ + uint16_t ep_size = 0; + uint16_t ep_addr = 0; + uint8_t const *p_desc = (uint8_t const *)itf_desc + stm->desc.beg; + uint8_t const *p_desc_end = (uint8_t const *)itf_desc + stm->desc.end; + while (p_desc < p_desc_end) { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { + ep_addr = desc_ep->bEndpointAddress; + ep_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_size); + } + } + p_desc = tu_desc_next(p_desc); } - } - p_desc = tu_desc_next(p_desc); - } - if(ep_addr > 0 && ep_size > 0) usbd_edpt_iso_alloc(rhport, ep_addr, ep_size); + if (ep_addr > 0 && ep_size > 0) + usbd_edpt_iso_alloc(rhport, ep_addr, ep_size); #endif - if (0 == stm_idx && 1 == bInCollection) { - /* If there is only one streaming interface and no alternate settings, + if (0 == stm_idx && 1 == bInCollection) { + /* If there is only one streaming interface and no alternate settings, * host may not issue set_interface so open the streaming interface here. */ - uint8_t const *sbeg = (uint8_t const*)itf_desc + stm->desc.beg; - uint8_t const *send = (uint8_t const*)itf_desc + stm->desc.end; - if (send == _find_desc_itf(sbeg, send, _desc_itfnum(sbeg), 1)) { - TU_VERIFY(_open_vs_itf(rhport, stm, 0), 0); - } + uint8_t const *sbeg = (uint8_t const *)itf_desc + stm->desc.beg; + uint8_t const *send = (uint8_t const *)itf_desc + stm->desc.end; + if (send == _find_desc_itf(sbeg, send, _desc_itfnum(sbeg), 1)) { + TU_VERIFY(_open_vs_itf(rhport, stm, 0), 0); + } + } } - } - self->len = (uint16_t) ((uintptr_t)cur - (uintptr_t)itf_desc); - return (uint16_t) ((uintptr_t)cur - (uintptr_t)itf_desc); + self->len = (uint16_t)((uintptr_t)cur - (uintptr_t)itf_desc); + return (uint16_t)((uintptr_t)cur - (uintptr_t)itf_desc); } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - int err; - TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); - uint_fast8_t itfnum = tu_u16_low(request->wIndex); - /* Identify which control interface to use */ - uint_fast8_t itf; - for (itf = 0; itf < CFG_TUD_VIDEO; ++itf) { - void const *desc = _videod_itf[itf].beg; - if (!desc) continue; - if (itfnum == _desc_itfnum(desc)) break; - } - - if (itf < CFG_TUD_VIDEO) { - TU_LOG_DRV(" VC[%d]: ", itf); - err = handle_video_ctl_req(rhport, stage, request, itf); - _videod_itf[itf].error_code = (uint8_t)err; - if (err) return false; - return true; - } +bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +{ + int err; + TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); + uint_fast8_t itfnum = tu_u16_low(request->wIndex); + /* Identify which control interface to use */ + uint_fast8_t itf; + for (itf = 0; itf < CFG_TUD_VIDEO; ++itf) { + void const *desc = _videod_itf[itf].beg; + if (!desc) + continue; + if (itfnum == _desc_itfnum(desc)) + break; + } - /* Identify which streaming interface to use */ - for (itf = 0; itf < CFG_TUD_VIDEO_STREAMING; ++itf) { - videod_streaming_interface_t *stm = &_videod_streaming_itf[itf]; - if (!stm->desc.beg) continue; - uint8_t const *desc = _videod_itf[stm->index_vc].beg; - if (itfnum == _desc_itfnum(desc + stm->desc.beg)) break; - } - - if (itf < CFG_TUD_VIDEO_STREAMING) { - TU_LOG_DRV(" VS[%d]: ", itf); - err = handle_video_stm_req(rhport, stage, request, itf); - _videod_streaming_itf[itf].error_code = (uint8_t)err; - if (err) return false; - return true; - } - return false; + if (itf < CFG_TUD_VIDEO) { + TU_LOG_DRV(" VC[%d]: ", itf); + err = handle_video_ctl_req(rhport, stage, request, itf); + _videod_itf[itf].error_code = (uint8_t)err; + if (err) + return false; + return true; + } + + /* Identify which streaming interface to use */ + for (itf = 0; itf < CFG_TUD_VIDEO_STREAMING; ++itf) { + videod_streaming_interface_t *stm = &_videod_streaming_itf[itf]; + if (!stm->desc.beg) + continue; + uint8_t const *desc = _videod_itf[stm->index_vc].beg; + if (itfnum == _desc_itfnum(desc + stm->desc.beg)) + break; + } + + if (itf < CFG_TUD_VIDEO_STREAMING) { + TU_LOG_DRV(" VS[%d]: ", itf); + err = handle_video_stm_req(rhport, stage, request, itf); + _videod_streaming_itf[itf].error_code = (uint8_t)err; + if (err) + return false; + return true; + } + return false; } -bool videod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void)result; (void)xferred_bytes; - - /* find streaming handle */ - uint_fast8_t itf; - videod_interface_t *ctl; - videod_streaming_interface_t *stm; - for (itf = 0; itf < CFG_TUD_VIDEO_STREAMING; ++itf) { - stm = &_videod_streaming_itf[itf]; - uint_fast16_t const ep_ofs = stm->desc.ep[0]; - if (!ep_ofs) continue; - ctl = &_videod_itf[stm->index_vc]; - uint8_t const *desc = ctl->beg; - if (ep_addr == _desc_ep_addr(desc + ep_ofs)) break; - } - - TU_ASSERT(itf < CFG_TUD_VIDEO_STREAMING); - if (stm->offset < stm->bufsize) { - /* Claim the endpoint */ - TU_VERIFY( usbd_edpt_claim(rhport, ep_addr), 0); - uint_fast16_t pkt_len = _prepare_in_payload(stm); - TU_ASSERT( usbd_edpt_xfer(rhport, ep_addr, stm->ep_buf, (uint16_t) pkt_len), 0); - } else { - stm->buffer = NULL; - stm->bufsize = 0; - stm->offset = 0; - if (tud_video_frame_xfer_complete_cb) { - tud_video_frame_xfer_complete_cb(stm->index_vc, stm->index_vs); +bool videod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) +{ + (void)result; + (void)xferred_bytes; + + /* find streaming handle */ + uint_fast8_t itf; + videod_interface_t *ctl; + videod_streaming_interface_t *stm; + for (itf = 0; itf < CFG_TUD_VIDEO_STREAMING; ++itf) { + stm = &_videod_streaming_itf[itf]; + uint_fast16_t const ep_ofs = stm->desc.ep[0]; + if (!ep_ofs) + continue; + ctl = &_videod_itf[stm->index_vc]; + uint8_t const *desc = ctl->beg; + if (ep_addr == _desc_ep_addr(desc + ep_ofs)) + break; + } + + TU_ASSERT(itf < CFG_TUD_VIDEO_STREAMING); + if (stm->offset < stm->bufsize) { + /* Claim the endpoint */ + TU_VERIFY(usbd_edpt_claim(rhport, ep_addr), 0); + uint_fast16_t pkt_len = _prepare_in_payload(stm); + TU_ASSERT(usbd_edpt_xfer(rhport, ep_addr, stm->ep_buf, (uint16_t)pkt_len), 0); + } else { + stm->buffer = NULL; + stm->bufsize = 0; + stm->offset = 0; + if (tud_video_frame_xfer_complete_cb) { + tud_video_frame_xfer_complete_cb(stm->index_vc, stm->index_vs); + } } - } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/video/video_device.h b/Libraries/tinyusb/src/class/video/video_device.h index 92930c0132a..79d4ff2af39 100644 --- a/Libraries/tinyusb/src/class/video/video_device.h +++ b/Libraries/tinyusb/src/class/video/video_device.h @@ -52,7 +52,8 @@ bool tud_video_n_streaming(uint_fast8_t ctl_idx, uint_fast8_t stm_idx); * @param[in] stm_idx Destination streaming interface index * @param[in] buffer Frame buffer. The caller must not use this buffer until the operation is completed. * @param[in] bufsize Byte size of the frame buffer */ -bool tud_video_n_frame_xfer(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void *buffer, size_t bufsize); +bool tud_video_n_frame_xfer(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void *buffer, + size_t bufsize); /*------------- Optional callbacks -------------*/ /** Invoked when compeletion of a frame transfer @@ -84,15 +85,15 @@ TU_ATTR_WEAK int tud_video_commit_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, //--------------------------------------------------------------------+ // INTERNAL USBD-CLASS DRIVER API //--------------------------------------------------------------------+ -void videod_init (void); -bool videod_deinit (void); -void videod_reset (uint8_t rhport); -uint16_t videod_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); -bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); -bool videod_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); +void videod_init(void); +bool videod_deinit(void); +void videod_reset(uint8_t rhport); +uint16_t videod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +bool videod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/common/tusb_common.h b/Libraries/tinyusb/src/common/tusb_common.h index 0d4082c031f..9b070120eb1 100644 --- a/Libraries/tinyusb/src/common/tusb_common.h +++ b/Libraries/tinyusb/src/common/tusb_common.h @@ -28,35 +28,37 @@ #define _TUSB_COMMON_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ // Macros Helper //--------------------------------------------------------------------+ -#define TU_ARRAY_SIZE(_arr) ( sizeof(_arr) / sizeof(_arr[0]) ) -#define TU_MIN(_x, _y) ( ( (_x) < (_y) ) ? (_x) : (_y) ) -#define TU_MAX(_x, _y) ( ( (_x) > (_y) ) ? (_x) : (_y) ) -#define TU_DIV_CEIL(n, d) (((n) + (d) - 1) / (d)) +#define TU_ARRAY_SIZE(_arr) (sizeof(_arr) / sizeof(_arr[0])) +#define TU_MIN(_x, _y) (((_x) < (_y)) ? (_x) : (_y)) +#define TU_MAX(_x, _y) (((_x) > (_y)) ? (_x) : (_y)) +#define TU_DIV_CEIL(n, d) (((n) + (d)-1) / (d)) -#define TU_U16(_high, _low) ((uint16_t) (((_high) << 8) | (_low))) -#define TU_U16_HIGH(_u16) ((uint8_t) (((_u16) >> 8) & 0x00ff)) -#define TU_U16_LOW(_u16) ((uint8_t) ((_u16) & 0x00ff)) -#define U16_TO_U8S_BE(_u16) TU_U16_HIGH(_u16), TU_U16_LOW(_u16) -#define U16_TO_U8S_LE(_u16) TU_U16_LOW(_u16), TU_U16_HIGH(_u16) +#define TU_U16(_high, _low) ((uint16_t)(((_high) << 8) | (_low))) +#define TU_U16_HIGH(_u16) ((uint8_t)(((_u16) >> 8) & 0x00ff)) +#define TU_U16_LOW(_u16) ((uint8_t)((_u16)&0x00ff)) +#define U16_TO_U8S_BE(_u16) TU_U16_HIGH(_u16), TU_U16_LOW(_u16) +#define U16_TO_U8S_LE(_u16) TU_U16_LOW(_u16), TU_U16_HIGH(_u16) -#define TU_U32_BYTE3(_u32) ((uint8_t) ((((uint32_t) _u32) >> 24) & 0x000000ff)) // MSB -#define TU_U32_BYTE2(_u32) ((uint8_t) ((((uint32_t) _u32) >> 16) & 0x000000ff)) -#define TU_U32_BYTE1(_u32) ((uint8_t) ((((uint32_t) _u32) >> 8) & 0x000000ff)) -#define TU_U32_BYTE0(_u32) ((uint8_t) (((uint32_t) _u32) & 0x000000ff)) // LSB +#define TU_U32_BYTE3(_u32) ((uint8_t)((((uint32_t)_u32) >> 24) & 0x000000ff)) // MSB +#define TU_U32_BYTE2(_u32) ((uint8_t)((((uint32_t)_u32) >> 16) & 0x000000ff)) +#define TU_U32_BYTE1(_u32) ((uint8_t)((((uint32_t)_u32) >> 8) & 0x000000ff)) +#define TU_U32_BYTE0(_u32) ((uint8_t)(((uint32_t)_u32) & 0x000000ff)) // LSB -#define U32_TO_U8S_BE(_u32) TU_U32_BYTE3(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE0(_u32) -#define U32_TO_U8S_LE(_u32) TU_U32_BYTE0(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE3(_u32) +#define U32_TO_U8S_BE(_u32) \ + TU_U32_BYTE3(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE0(_u32) +#define U32_TO_U8S_LE(_u32) \ + TU_U32_BYTE0(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE3(_u32) -#define TU_BIT(n) (1UL << (n)) +#define TU_BIT(n) (1UL << (n)) // Generate a mask with bit from high (31) to low (0) set, e.g TU_GENMASK(3, 0) = 0b1111 -#define TU_GENMASK(h, l) ( (UINT32_MAX << (l)) & (UINT32_MAX >> (31 - (h))) ) +#define TU_GENMASK(h, l) ((UINT32_MAX << (l)) & (UINT32_MAX >> (31 - (h)))) //--------------------------------------------------------------------+ // Includes @@ -89,98 +91,183 @@ TU_ATTR_WEAK extern void tusb_app_dcache_flush(uintptr_t addr, uint32_t data_siz TU_ATTR_WEAK extern void tusb_app_dcache_invalidate(uintptr_t addr, uint32_t data_size); // Optional physical <-> virtual address translation -TU_ATTR_WEAK extern void* tusb_app_virt_to_phys(void *virt_addr); -TU_ATTR_WEAK extern void* tusb_app_phys_to_virt(void *phys_addr); +TU_ATTR_WEAK extern void *tusb_app_virt_to_phys(void *virt_addr); +TU_ATTR_WEAK extern void *tusb_app_phys_to_virt(void *phys_addr); //--------------------------------------------------------------------+ // Internal Inline Functions //--------------------------------------------------------------------+ //------------- Mem -------------// -#define tu_memclr(buffer, size) memset((buffer), 0, (size)) -#define tu_varclr(_var) tu_memclr(_var, sizeof(*(_var))) +#define tu_memclr(buffer, size) memset((buffer), 0, (size)) +#define tu_varclr(_var) tu_memclr(_var, sizeof(*(_var))) // This is a backport of memset_s from c11 -TU_ATTR_ALWAYS_INLINE static inline int tu_memset_s(void *dest, size_t destsz, int ch, size_t count) { - // TODO may check if desst and src is not NULL - if ( count > destsz ) { - return -1; - } - memset(dest, ch, count); - return 0; +TU_ATTR_ALWAYS_INLINE static inline int tu_memset_s(void *dest, size_t destsz, int ch, size_t count) +{ + // TODO may check if desst and src is not NULL + if (count > destsz) { + return -1; + } + memset(dest, ch, count); + return 0; } // This is a backport of memcpy_s from c11 -TU_ATTR_ALWAYS_INLINE static inline int tu_memcpy_s(void *dest, size_t destsz, const void *src, size_t count) { - // TODO may check if desst and src is not NULL - if ( count > destsz ) { - return -1; - } - memcpy(dest, src, count); - return 0; +TU_ATTR_ALWAYS_INLINE static inline int tu_memcpy_s(void *dest, size_t destsz, const void *src, + size_t count) +{ + // TODO may check if desst and src is not NULL + if (count > destsz) { + return -1; + } + memcpy(dest, src, count); + return 0; } - //------------- Bytes -------------// -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_u32(uint8_t b3, uint8_t b2, uint8_t b1, uint8_t b0) { - return ( ((uint32_t) b3) << 24) | ( ((uint32_t) b2) << 16) | ( ((uint32_t) b1) << 8) | b0; +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_u32(uint8_t b3, uint8_t b2, uint8_t b1, uint8_t b0) +{ + return (((uint32_t)b3) << 24) | (((uint32_t)b2) << 16) | (((uint32_t)b1) << 8) | b0; } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u16(uint8_t high, uint8_t low) { - return (uint16_t) ((((uint16_t) high) << 8) | low); +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u16(uint8_t high, uint8_t low) +{ + return (uint16_t)((((uint16_t)high) << 8) | low); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte3(uint32_t ui32) { return TU_U32_BYTE3(ui32); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte2(uint32_t ui32) { return TU_U32_BYTE2(ui32); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte1(uint32_t ui32) { return TU_U32_BYTE1(ui32); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte0(uint32_t ui32) { return TU_U32_BYTE0(ui32); } +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte3(uint32_t ui32) +{ + return TU_U32_BYTE3(ui32); +} +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte2(uint32_t ui32) +{ + return TU_U32_BYTE2(ui32); +} +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte1(uint32_t ui32) +{ + return TU_U32_BYTE1(ui32); +} +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte0(uint32_t ui32) +{ + return TU_U32_BYTE0(ui32); +} -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_high16(uint32_t ui32) { return (uint16_t) (ui32 >> 16); } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_low16 (uint32_t ui32) { return (uint16_t) (ui32 & 0x0000ffffu); } +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_high16(uint32_t ui32) +{ + return (uint16_t)(ui32 >> 16); +} +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_low16(uint32_t ui32) +{ + return (uint16_t)(ui32 & 0x0000ffffu); +} -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_high(uint16_t ui16) { return TU_U16_HIGH(ui16); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_low (uint16_t ui16) { return TU_U16_LOW(ui16); } +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_high(uint16_t ui16) +{ + return TU_U16_HIGH(ui16); +} +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_low(uint16_t ui16) +{ + return TU_U16_LOW(ui16); +} //------------- Bits -------------// -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_set (uint32_t value, uint8_t pos) { return value | TU_BIT(pos); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_clear(uint32_t value, uint8_t pos) { return value & (~TU_BIT(pos)); } -TU_ATTR_ALWAYS_INLINE static inline bool tu_bit_test (uint32_t value, uint8_t pos) { return (value & TU_BIT(pos)) ? true : false; } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_set(uint32_t value, uint8_t pos) +{ + return value | TU_BIT(pos); +} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_clear(uint32_t value, uint8_t pos) +{ + return value & (~TU_BIT(pos)); +} +TU_ATTR_ALWAYS_INLINE static inline bool tu_bit_test(uint32_t value, uint8_t pos) +{ + return (value & TU_BIT(pos)) ? true : false; +} //------------- Min -------------// -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_min8 (uint8_t x, uint8_t y ) { return (x < y) ? x : y; } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_min16 (uint16_t x, uint16_t y) { return (x < y) ? x : y; } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_min32 (uint32_t x, uint32_t y) { return (x < y) ? x : y; } +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_min8(uint8_t x, uint8_t y) +{ + return (x < y) ? x : y; +} +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_min16(uint16_t x, uint16_t y) +{ + return (x < y) ? x : y; +} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_min32(uint32_t x, uint32_t y) +{ + return (x < y) ? x : y; +} //------------- Max -------------// -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_max8 (uint8_t x, uint8_t y ) { return (x > y) ? x : y; } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_max16 (uint16_t x, uint16_t y) { return (x > y) ? x : y; } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_max32 (uint32_t x, uint32_t y) { return (x > y) ? x : y; } +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_max8(uint8_t x, uint8_t y) +{ + return (x > y) ? x : y; +} +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_max16(uint16_t x, uint16_t y) +{ + return (x > y) ? x : y; +} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_max32(uint32_t x, uint32_t y) +{ + return (x > y) ? x : y; +} //------------- Align -------------// -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align(uint32_t value, uint32_t alignment) { - return value & ((uint32_t) ~(alignment-1)); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align(uint32_t value, uint32_t alignment) +{ + return value & ((uint32_t) ~(alignment - 1)); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4 (uint32_t value) { return (value & 0xFFFFFFFCUL); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align8 (uint32_t value) { return (value & 0xFFFFFFF8UL); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align16 (uint32_t value) { return (value & 0xFFFFFFF0UL); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align32 (uint32_t value) { return (value & 0xFFFFFFE0UL); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4k (uint32_t value) { return (value & 0xFFFFF000UL); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_offset4k(uint32_t value) { return (value & 0xFFFUL); } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4(uint32_t value) +{ + return (value & 0xFFFFFFFCUL); +} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align8(uint32_t value) +{ + return (value & 0xFFFFFFF8UL); +} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align16(uint32_t value) +{ + return (value & 0xFFFFFFF0UL); +} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align32(uint32_t value) +{ + return (value & 0xFFFFFFE0UL); +} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4k(uint32_t value) +{ + return (value & 0xFFFFF000UL); +} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_offset4k(uint32_t value) +{ + return (value & 0xFFFUL); +} -TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned32(uint32_t value) { return (value & 0x1FUL) == 0; } -TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned64(uint64_t value) { return (value & 0x3FUL) == 0; } +TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned32(uint32_t value) +{ + return (value & 0x1FUL) == 0; +} +TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned64(uint64_t value) +{ + return (value & 0x3FUL) == 0; +} //------------- Mathematics -------------// -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_div_ceil(uint32_t v, uint32_t d) { return (v + d -1)/d; } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_div_ceil(uint32_t v, uint32_t d) +{ + return (v + d - 1) / d; +} // log2 of a value is its MSB's position // TODO use clz TODO remove static inline uint8_t tu_log2(uint32_t value) { - uint8_t result = 0; - while (value >>= 1) { result++; } - return result; + uint8_t result = 0; + while (value >>= 1) { + result++; + } + return result; } //static inline uint8_t tu_log2(uint32_t value) @@ -190,38 +277,42 @@ static inline uint8_t tu_log2(uint32_t value) static inline bool tu_is_power_of_two(uint32_t value) { - return (value != 0) && ((value & (value - 1)) == 0); + return (value != 0) && ((value & (value - 1)) == 0); } //------------- Unaligned Access -------------// #if TUP_ARCH_STRICT_ALIGN // Rely on compiler to generate correct code for unaligned access -typedef struct { uint16_t val; } TU_ATTR_PACKED tu_unaligned_uint16_t; -typedef struct { uint32_t val; } TU_ATTR_PACKED tu_unaligned_uint32_t; - -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void* mem) +typedef struct { + uint16_t val; +} TU_ATTR_PACKED tu_unaligned_uint16_t; +typedef struct { + uint32_t val; +} TU_ATTR_PACKED tu_unaligned_uint32_t; + +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) { - tu_unaligned_uint32_t const* ua32 = (tu_unaligned_uint32_t const*) mem; - return ua32->val; + tu_unaligned_uint32_t const *ua32 = (tu_unaligned_uint32_t const *)mem; + return ua32->val; } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void* mem, uint32_t value) +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) { - tu_unaligned_uint32_t* ua32 = (tu_unaligned_uint32_t*) mem; - ua32->val = value; + tu_unaligned_uint32_t *ua32 = (tu_unaligned_uint32_t *)mem; + ua32->val = value; } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void* mem) +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) { - tu_unaligned_uint16_t const* ua16 = (tu_unaligned_uint16_t const*) mem; - return ua16->val; + tu_unaligned_uint16_t const *ua16 = (tu_unaligned_uint16_t const *)mem; + return ua16->val; } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void* mem, uint16_t value) +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) { - tu_unaligned_uint16_t* ua16 = (tu_unaligned_uint16_t*) mem; - ua16->val = value; + tu_unaligned_uint16_t *ua16 = (tu_unaligned_uint16_t *)mem; + ua16->val = value; } #elif TUP_MCU_STRICT_ALIGN @@ -230,52 +321,55 @@ TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void* mem, uint16_ // We have to manually pick up bytes since tu_unaligned_uint32_t will still generate unaligned code // NOTE: volatile cast to memory to prevent compiler to optimize and generate unaligned code // TODO Big Endian may need minor changes -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void* mem) +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) { - volatile uint8_t const* buf8 = (uint8_t const*) mem; - return tu_u32(buf8[3], buf8[2], buf8[1], buf8[0]); + volatile uint8_t const *buf8 = (uint8_t const *)mem; + return tu_u32(buf8[3], buf8[2], buf8[1], buf8[0]); } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void* mem, uint32_t value) +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) { - volatile uint8_t* buf8 = (uint8_t*) mem; - buf8[0] = tu_u32_byte0(value); - buf8[1] = tu_u32_byte1(value); - buf8[2] = tu_u32_byte2(value); - buf8[3] = tu_u32_byte3(value); + volatile uint8_t *buf8 = (uint8_t *)mem; + buf8[0] = tu_u32_byte0(value); + buf8[1] = tu_u32_byte1(value); + buf8[2] = tu_u32_byte2(value); + buf8[3] = tu_u32_byte3(value); } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void* mem) +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) { - volatile uint8_t const* buf8 = (uint8_t const*) mem; - return tu_u16(buf8[1], buf8[0]); + volatile uint8_t const *buf8 = (uint8_t const *)mem; + return tu_u16(buf8[1], buf8[0]); } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void* mem, uint16_t value) +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) { - volatile uint8_t* buf8 = (uint8_t*) mem; - buf8[0] = tu_u16_low(value); - buf8[1] = tu_u16_high(value); + volatile uint8_t *buf8 = (uint8_t *)mem; + buf8[0] = tu_u16_low(value); + buf8[1] = tu_u16_high(value); } - #else // MCU that could access unaligned memory natively -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) { - return *((uint32_t const *) mem); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) +{ + return *((uint32_t const *)mem); } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) { - return *((uint16_t const *) mem); +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) +{ + return *((uint16_t const *)mem); } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) { - *((uint32_t *) mem) = value; +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) +{ + *((uint32_t *)mem) = value; } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) { - *((uint16_t *) mem) = value; +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) +{ + *((uint16_t *)mem) = value; } #endif @@ -284,33 +378,28 @@ TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_ //------------- Binary constant -------------// #if defined(__GNUC__) && !defined(__CC_ARM) -#define TU_BIN8(x) ((uint8_t) (0b##x)) -#define TU_BIN16(b1, b2) ((uint16_t) (0b##b1##b2)) -#define TU_BIN32(b1, b2, b3, b4) ((uint32_t) (0b##b1##b2##b3##b4)) +#define TU_BIN8(x) ((uint8_t)(0b##x)) +#define TU_BIN16(b1, b2) ((uint16_t)(0b##b1##b2)) +#define TU_BIN32(b1, b2, b3, b4) ((uint32_t)(0b##b1##b2##b3##b4)) #else // internal macro of B8, B16, B32 -#define _B8__(x) (((x&0x0000000FUL)?1:0) \ - +((x&0x000000F0UL)?2:0) \ - +((x&0x00000F00UL)?4:0) \ - +((x&0x0000F000UL)?8:0) \ - +((x&0x000F0000UL)?16:0) \ - +((x&0x00F00000UL)?32:0) \ - +((x&0x0F000000UL)?64:0) \ - +((x&0xF0000000UL)?128:0)) - -#define TU_BIN8(d) ((uint8_t) _B8__(0x##d##UL)) -#define TU_BIN16(dmsb,dlsb) (((uint16_t)TU_BIN8(dmsb)<<8) + TU_BIN8(dlsb)) -#define TU_BIN32(dmsb,db2,db3,dlsb) \ - (((uint32_t)TU_BIN8(dmsb)<<24) \ - + ((uint32_t)TU_BIN8(db2)<<16) \ - + ((uint32_t)TU_BIN8(db3)<<8) \ - + TU_BIN8(dlsb)) +#define _B8__(x) \ + (((x & 0x0000000FUL) ? 1 : 0) + ((x & 0x000000F0UL) ? 2 : 0) + ((x & 0x00000F00UL) ? 4 : 0) + \ + ((x & 0x0000F000UL) ? 8 : 0) + ((x & 0x000F0000UL) ? 16 : 0) + \ + ((x & 0x00F00000UL) ? 32 : 0) + ((x & 0x0F000000UL) ? 64 : 0) + \ + ((x & 0xF0000000UL) ? 128 : 0)) + +#define TU_BIN8(d) ((uint8_t)_B8__(0x##d##UL)) +#define TU_BIN16(dmsb, dlsb) (((uint16_t)TU_BIN8(dmsb) << 8) + TU_BIN8(dlsb)) +#define TU_BIN32(dmsb, db2, db3, dlsb) \ + (((uint32_t)TU_BIN8(dmsb) << 24) + ((uint32_t)TU_BIN8(db2) << 16) + \ + ((uint32_t)TU_BIN8(db3) << 8) + TU_BIN8(dlsb)) #endif #ifdef __cplusplus - } +} #endif #endif /* _TUSB_COMMON_H_ */ diff --git a/Libraries/tinyusb/src/common/tusb_compiler.h b/Libraries/tinyusb/src/common/tusb_compiler.h index ce5566ffe3d..7f6829f006a 100644 --- a/Libraries/tinyusb/src/common/tusb_compiler.h +++ b/Libraries/tinyusb/src/common/tusb_compiler.h @@ -32,44 +32,46 @@ #ifndef _TUSB_COMPILER_H_ #define _TUSB_COMPILER_H_ -#define TU_TOKEN(x) x -#define TU_STRING(x) #x ///< stringify without expand -#define TU_XSTRING(x) TU_STRING(x) ///< expand then stringify +#define TU_TOKEN(x) x +#define TU_STRING(x) #x ///< stringify without expand +#define TU_XSTRING(x) TU_STRING(x) ///< expand then stringify -#define TU_STRCAT(a, b) a##b ///< concat without expand -#define TU_STRCAT3(a, b, c) a##b##c ///< concat without expand +#define TU_STRCAT(a, b) a##b ///< concat without expand +#define TU_STRCAT3(a, b, c) a##b##c ///< concat without expand -#define TU_XSTRCAT(a, b) TU_STRCAT(a, b) ///< expand then concat -#define TU_XSTRCAT3(a, b, c) TU_STRCAT3(a, b, c) ///< expand then concat 3 tokens +#define TU_XSTRCAT(a, b) TU_STRCAT(a, b) ///< expand then concat +#define TU_XSTRCAT3(a, b, c) TU_STRCAT3(a, b, c) ///< expand then concat 3 tokens -#define TU_INCLUDE_PATH(_dir,_file) TU_XSTRING( TU_TOKEN(_dir)TU_TOKEN(_file) ) +#define TU_INCLUDE_PATH(_dir, _file) TU_XSTRING(TU_TOKEN(_dir) TU_TOKEN(_file)) #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ - #define _TU_COUNTER_ __COUNTER__ +#define _TU_COUNTER_ __COUNTER__ #else - #define _TU_COUNTER_ __LINE__ +#define _TU_COUNTER_ __LINE__ #endif // Compile-time Assert -#if defined (__cplusplus) && __cplusplus >= 201103L - #define TU_VERIFY_STATIC static_assert -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L - #define TU_VERIFY_STATIC _Static_assert +#if defined(__cplusplus) && __cplusplus >= 201103L +#define TU_VERIFY_STATIC static_assert +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#define TU_VERIFY_STATIC _Static_assert #elif defined(__CCRX__) - #define TU_VERIFY_STATIC(const_expr, _mess) typedef char TU_XSTRCAT(_verify_static_, _TU_COUNTER_)[(const_expr) ? 1 : 0]; +#define TU_VERIFY_STATIC(const_expr, _mess) \ + typedef char TU_XSTRCAT(_verify_static_, _TU_COUNTER_)[(const_expr) ? 1 : 0]; #else - #define TU_VERIFY_STATIC(const_expr, _mess) enum { TU_XSTRCAT(_verify_static_, _TU_COUNTER_) = 1/(!!(const_expr)) } +#define TU_VERIFY_STATIC(const_expr, _mess) \ + enum { TU_XSTRCAT(_verify_static_, _TU_COUNTER_) = 1 / (!!(const_expr)) } #endif /* --------------------- Fuzzing types -------------------------------------- */ #ifdef _FUZZ - #define tu_static static __thread +#define tu_static static __thread #else - #define tu_static static +#define tu_static static #endif // for declaration of reserved field, make use of _TU_COUNTER_ -#define TU_RESERVED TU_XSTRCAT(reserved, _TU_COUNTER_) +#define TU_RESERVED TU_XSTRCAT(reserved, _TU_COUNTER_) #define TU_LITTLE_ENDIAN (0x12u) #define TU_BIG_ENDIAN (0x21u) @@ -83,40 +85,40 @@ * - ##__VA_ARGS__ is used to deal with 0 paramerter (swallows comma) *------------------------------------------------------------------*/ #if !defined(__CCRX__) -#define TU_ARGS_NUM(...) _TU_NARG(_0, ##__VA_ARGS__, _RSEQ_N()) +#define TU_ARGS_NUM(...) _TU_NARG(_0, ##__VA_ARGS__, _RSEQ_N()) #else -#define TU_ARGS_NUM(...) _TU_NARG(_0, __VA_ARGS__, _RSEQ_N()) +#define TU_ARGS_NUM(...) _TU_NARG(_0, __VA_ARGS__, _RSEQ_N()) #endif -#define _TU_NARG(...) _GET_NTH_ARG(__VA_ARGS__) -#define _GET_NTH_ARG( \ - _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ - _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ - _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ - _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ - _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ - _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ - _61,_62,_63,N,...) N -#define _RSEQ_N() \ - 62,61,60, \ - 59,58,57,56,55,54,53,52,51,50, \ - 49,48,47,46,45,44,43,42,41,40, \ - 39,38,37,36,35,34,33,32,31,30, \ - 29,28,27,26,25,24,23,22,21,20, \ - 19,18,17,16,15,14,13,12,11,10, \ - 9,8,7,6,5,4,3,2,1,0 +#define _TU_NARG(...) _GET_NTH_ARG(__VA_ARGS__) +#define _GET_NTH_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, \ + _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, \ + _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \ + _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, \ + _63, N, ...) \ + N +#define _RSEQ_N() \ + 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \ + 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, \ + 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 // Apply an macro X to each of the arguments with an separated of choice -#define TU_ARGS_APPLY(_X, _s, ...) TU_XSTRCAT(_TU_ARGS_APPLY_, TU_ARGS_NUM(__VA_ARGS__))(_X, _s, __VA_ARGS__) - -#define _TU_ARGS_APPLY_1(_X, _s, _a1) _X(_a1) -#define _TU_ARGS_APPLY_2(_X, _s, _a1, _a2) _X(_a1) _s _X(_a2) -#define _TU_ARGS_APPLY_3(_X, _s, _a1, _a2, _a3) _X(_a1) _s _TU_ARGS_APPLY_2(_X, _s, _a2, _a3) -#define _TU_ARGS_APPLY_4(_X, _s, _a1, _a2, _a3, _a4) _X(_a1) _s _TU_ARGS_APPLY_3(_X, _s, _a2, _a3, _a4) -#define _TU_ARGS_APPLY_5(_X, _s, _a1, _a2, _a3, _a4, _a5) _X(_a1) _s _TU_ARGS_APPLY_4(_X, _s, _a2, _a3, _a4, _a5) -#define _TU_ARGS_APPLY_6(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6) _X(_a1) _s _TU_ARGS_APPLY_5(_X, _s, _a2, _a3, _a4, _a5, _a6) -#define _TU_ARGS_APPLY_7(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7) _X(_a1) _s _TU_ARGS_APPLY_6(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7) -#define _TU_ARGS_APPLY_8(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8) _X(_a1) _s _TU_ARGS_APPLY_7(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7, _a8) +#define TU_ARGS_APPLY(_X, _s, ...) \ + TU_XSTRCAT(_TU_ARGS_APPLY_, TU_ARGS_NUM(__VA_ARGS__))(_X, _s, __VA_ARGS__) + +#define _TU_ARGS_APPLY_1(_X, _s, _a1) _X(_a1) +#define _TU_ARGS_APPLY_2(_X, _s, _a1, _a2) _X(_a1) _s _X(_a2) +#define _TU_ARGS_APPLY_3(_X, _s, _a1, _a2, _a3) _X(_a1) _s _TU_ARGS_APPLY_2(_X, _s, _a2, _a3) +#define _TU_ARGS_APPLY_4(_X, _s, _a1, _a2, _a3, _a4) \ + _X(_a1) _s _TU_ARGS_APPLY_3(_X, _s, _a2, _a3, _a4) +#define _TU_ARGS_APPLY_5(_X, _s, _a1, _a2, _a3, _a4, _a5) \ + _X(_a1) _s _TU_ARGS_APPLY_4(_X, _s, _a2, _a3, _a4, _a5) +#define _TU_ARGS_APPLY_6(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6) \ + _X(_a1) _s _TU_ARGS_APPLY_5(_X, _s, _a2, _a3, _a4, _a5, _a6) +#define _TU_ARGS_APPLY_7(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7) \ + _X(_a1) _s _TU_ARGS_APPLY_6(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7) +#define _TU_ARGS_APPLY_8(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8) \ + _X(_a1) _s _TU_ARGS_APPLY_7(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7, _a8) //--------------------------------------------------------------------+ // Compiler porting with Attribute and Endian @@ -124,174 +126,183 @@ // TODO refactor since __attribute__ is supported across many compiler #if defined(__GNUC__) - #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) - #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) - #define TU_ATTR_PACKED __attribute__ ((packed)) - #define TU_ATTR_WEAK __attribute__ ((weak)) - // #define TU_ATTR_WEAK_ALIAS(f) __attribute__ ((weak, alias(#f)) - #ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug - #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) - #endif - #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used - #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused - #define TU_ATTR_USED __attribute__ ((used)) // Function/Variable is meant to be used - - #define TU_ATTR_PACKED_BEGIN - #define TU_ATTR_PACKED_END - #define TU_ATTR_BIT_FIELD_ORDER_BEGIN - #define TU_ATTR_BIT_FIELD_ORDER_END - - #if __GNUC__ < 5 - #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ - #else - #if __has_attribute(__fallthrough__) - #define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) - #else - #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ - #endif - #endif - - // Endian conversion use well-known host to network (big endian) naming - #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - #define TU_BYTE_ORDER TU_LITTLE_ENDIAN - #else - #define TU_BYTE_ORDER TU_BIG_ENDIAN - #endif - - // Unfortunately XC16 doesn't provide builtins for 32bit endian conversion - #if defined(__XC16) - #define TU_BSWAP16(u16) (__builtin_swap(u16)) - #define TU_BSWAP32(u32) ((((u32) & 0xff000000) >> 24) | \ - (((u32) & 0x00ff0000) >> 8) | \ - (((u32) & 0x0000ff00) << 8) | \ - (((u32) & 0x000000ff) << 24)) - #else - #define TU_BSWAP16(u16) (__builtin_bswap16(u16)) - #define TU_BSWAP32(u32) (__builtin_bswap32(u32)) - #endif - - #ifndef __ARMCC_VERSION - // List of obsolete callback function that is renamed and should not be defined. - // Put it here since only gcc support this pragma - #pragma GCC poison tud_vendor_control_request_cb - #endif +#define TU_ATTR_ALIGNED(Bytes) __attribute__((aligned(Bytes))) +#define TU_ATTR_SECTION(sec_name) __attribute__((section(#sec_name))) +#define TU_ATTR_PACKED __attribute__((packed)) +#define TU_ATTR_WEAK __attribute__((weak)) +// #define TU_ATTR_WEAK_ALIAS(f) __attribute__ ((weak, alias(#f)) +#ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug +#define TU_ATTR_ALWAYS_INLINE __attribute__((always_inline)) +#endif +#define TU_ATTR_DEPRECATED(mess) \ + __attribute__((deprecated(mess))) // warn if function with this attribute is used +#define TU_ATTR_UNUSED __attribute__((unused)) // Function/Variable is meant to be possibly unused +#define TU_ATTR_USED __attribute__((used)) // Function/Variable is meant to be used + +#define TU_ATTR_PACKED_BEGIN +#define TU_ATTR_PACKED_END +#define TU_ATTR_BIT_FIELD_ORDER_BEGIN +#define TU_ATTR_BIT_FIELD_ORDER_END + +#if __GNUC__ < 5 +#define TU_ATTR_FALLTHROUGH \ + do { \ + } while (0) /* fallthrough */ +#else +#if __has_attribute(__fallthrough__) +#define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) +#else +#define TU_ATTR_FALLTHROUGH \ + do { \ + } while (0) /* fallthrough */ +#endif +#endif + +// Endian conversion use well-known host to network (big endian) naming +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define TU_BYTE_ORDER TU_LITTLE_ENDIAN +#else +#define TU_BYTE_ORDER TU_BIG_ENDIAN +#endif + +// Unfortunately XC16 doesn't provide builtins for 32bit endian conversion +#if defined(__XC16) +#define TU_BSWAP16(u16) (__builtin_swap(u16)) +#define TU_BSWAP32(u32) \ + ((((u32)&0xff000000) >> 24) | (((u32)&0x00ff0000) >> 8) | (((u32)&0x0000ff00) << 8) | \ + (((u32)&0x000000ff) << 24)) +#else +#define TU_BSWAP16(u16) (__builtin_bswap16(u16)) +#define TU_BSWAP32(u32) (__builtin_bswap32(u32)) +#endif + +#ifndef __ARMCC_VERSION +// List of obsolete callback function that is renamed and should not be defined. +// Put it here since only gcc support this pragma +#pragma GCC poison tud_vendor_control_request_cb +#endif #elif defined(__TI_COMPILER_VERSION__) - #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) - #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) - #define TU_ATTR_PACKED __attribute__ ((packed)) - #define TU_ATTR_WEAK __attribute__ ((weak)) - #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) - #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used - #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused - #define TU_ATTR_USED __attribute__ ((used)) - #define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) - - #define TU_ATTR_PACKED_BEGIN - #define TU_ATTR_PACKED_END - #define TU_ATTR_BIT_FIELD_ORDER_BEGIN - #define TU_ATTR_BIT_FIELD_ORDER_END - - // __BYTE_ORDER is defined in the TI ARM compiler, but not MSP430 (which is little endian) - #if ((__BYTE_ORDER__) == (__ORDER_LITTLE_ENDIAN__)) || defined(__MSP430__) - #define TU_BYTE_ORDER TU_LITTLE_ENDIAN - #else - #define TU_BYTE_ORDER TU_BIG_ENDIAN - #endif - - #define TU_BSWAP16(u16) (__builtin_bswap16(u16)) - #define TU_BSWAP32(u32) (__builtin_bswap32(u32)) +#define TU_ATTR_ALIGNED(Bytes) __attribute__((aligned(Bytes))) +#define TU_ATTR_SECTION(sec_name) __attribute__((section(#sec_name))) +#define TU_ATTR_PACKED __attribute__((packed)) +#define TU_ATTR_WEAK __attribute__((weak)) +#define TU_ATTR_ALWAYS_INLINE __attribute__((always_inline)) +#define TU_ATTR_DEPRECATED(mess) \ + __attribute__((deprecated(mess))) // warn if function with this attribute is used +#define TU_ATTR_UNUSED __attribute__((unused)) // Function/Variable is meant to be possibly unused +#define TU_ATTR_USED __attribute__((used)) +#define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) + +#define TU_ATTR_PACKED_BEGIN +#define TU_ATTR_PACKED_END +#define TU_ATTR_BIT_FIELD_ORDER_BEGIN +#define TU_ATTR_BIT_FIELD_ORDER_END + +// __BYTE_ORDER is defined in the TI ARM compiler, but not MSP430 (which is little endian) +#if ((__BYTE_ORDER__) == (__ORDER_LITTLE_ENDIAN__)) || defined(__MSP430__) +#define TU_BYTE_ORDER TU_LITTLE_ENDIAN +#else +#define TU_BYTE_ORDER TU_BIG_ENDIAN +#endif + +#define TU_BSWAP16(u16) (__builtin_bswap16(u16)) +#define TU_BSWAP32(u32) (__builtin_bswap32(u32)) #elif defined(__ICCARM__) - #include - #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) - #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) - #define TU_ATTR_PACKED __attribute__ ((packed)) - #define TU_ATTR_WEAK __attribute__ ((weak)) - #ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug - #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) - #endif - #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used - #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused - #define TU_ATTR_USED __attribute__ ((used)) // Function/Variable is meant to be used - #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ - - #define TU_ATTR_PACKED_BEGIN - #define TU_ATTR_PACKED_END - #define TU_ATTR_BIT_FIELD_ORDER_BEGIN - #define TU_ATTR_BIT_FIELD_ORDER_END - - // Endian conversion use well-known host to network (big endian) naming - #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - #define TU_BYTE_ORDER TU_LITTLE_ENDIAN - #else - #define TU_BYTE_ORDER TU_BIG_ENDIAN - #endif - - #define TU_BSWAP16(u16) (__iar_builtin_REV16(u16)) - #define TU_BSWAP32(u32) (__iar_builtin_REV(u32)) +#include +#define TU_ATTR_ALIGNED(Bytes) __attribute__((aligned(Bytes))) +#define TU_ATTR_SECTION(sec_name) __attribute__((section(#sec_name))) +#define TU_ATTR_PACKED __attribute__((packed)) +#define TU_ATTR_WEAK __attribute__((weak)) +#ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug +#define TU_ATTR_ALWAYS_INLINE __attribute__((always_inline)) +#endif +#define TU_ATTR_DEPRECATED(mess) \ + __attribute__((deprecated(mess))) // warn if function with this attribute is used +#define TU_ATTR_UNUSED __attribute__((unused)) // Function/Variable is meant to be possibly unused +#define TU_ATTR_USED __attribute__((used)) // Function/Variable is meant to be used +#define TU_ATTR_FALLTHROUGH \ + do { \ + } while (0) /* fallthrough */ + +#define TU_ATTR_PACKED_BEGIN +#define TU_ATTR_PACKED_END +#define TU_ATTR_BIT_FIELD_ORDER_BEGIN +#define TU_ATTR_BIT_FIELD_ORDER_END + +// Endian conversion use well-known host to network (big endian) naming +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define TU_BYTE_ORDER TU_LITTLE_ENDIAN +#else +#define TU_BYTE_ORDER TU_BIG_ENDIAN +#endif -#elif defined(__CCRX__) - #define TU_ATTR_ALIGNED(Bytes) - #define TU_ATTR_SECTION(sec_name) - #define TU_ATTR_PACKED - #define TU_ATTR_WEAK - #define TU_ATTR_ALWAYS_INLINE - #define TU_ATTR_DEPRECATED(mess) - #define TU_ATTR_UNUSED - #define TU_ATTR_USED - #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ - - #define TU_ATTR_PACKED_BEGIN _Pragma("pack") - #define TU_ATTR_PACKED_END _Pragma("packoption") - #define TU_ATTR_BIT_FIELD_ORDER_BEGIN _Pragma("bit_order right") - #define TU_ATTR_BIT_FIELD_ORDER_END _Pragma("bit_order") - - // Endian conversion use well-known host to network (big endian) naming - #if defined(__LIT) - #define TU_BYTE_ORDER TU_LITTLE_ENDIAN - #else - #define TU_BYTE_ORDER TU_BIG_ENDIAN - #endif - - #define TU_BSWAP16(u16) ((unsigned short)_builtin_revw((unsigned long)u16)) - #define TU_BSWAP32(u32) (_builtin_revl(u32)) +#define TU_BSWAP16(u16) (__iar_builtin_REV16(u16)) +#define TU_BSWAP32(u32) (__iar_builtin_REV(u32)) +#elif defined(__CCRX__) +#define TU_ATTR_ALIGNED(Bytes) +#define TU_ATTR_SECTION(sec_name) +#define TU_ATTR_PACKED +#define TU_ATTR_WEAK +#define TU_ATTR_ALWAYS_INLINE +#define TU_ATTR_DEPRECATED(mess) +#define TU_ATTR_UNUSED +#define TU_ATTR_USED +#define TU_ATTR_FALLTHROUGH \ + do { \ + } while (0) /* fallthrough */ + +#define TU_ATTR_PACKED_BEGIN _Pragma("pack") +#define TU_ATTR_PACKED_END _Pragma("packoption") +#define TU_ATTR_BIT_FIELD_ORDER_BEGIN _Pragma("bit_order right") +#define TU_ATTR_BIT_FIELD_ORDER_END _Pragma("bit_order") + +// Endian conversion use well-known host to network (big endian) naming +#if defined(__LIT) +#define TU_BYTE_ORDER TU_LITTLE_ENDIAN #else - #error "Compiler attribute porting is required" +#define TU_BYTE_ORDER TU_BIG_ENDIAN #endif +#define TU_BSWAP16(u16) ((unsigned short)_builtin_revw((unsigned long)u16)) +#define TU_BSWAP32(u32) (_builtin_revl(u32)) + +#else +#error "Compiler attribute porting is required" +#endif #if (TU_BYTE_ORDER == TU_LITTLE_ENDIAN) - #define tu_htons(u16) (TU_BSWAP16(u16)) - #define tu_ntohs(u16) (TU_BSWAP16(u16)) +#define tu_htons(u16) (TU_BSWAP16(u16)) +#define tu_ntohs(u16) (TU_BSWAP16(u16)) - #define tu_htonl(u32) (TU_BSWAP32(u32)) - #define tu_ntohl(u32) (TU_BSWAP32(u32)) +#define tu_htonl(u32) (TU_BSWAP32(u32)) +#define tu_ntohl(u32) (TU_BSWAP32(u32)) - #define tu_htole16(u16) (u16) - #define tu_le16toh(u16) (u16) +#define tu_htole16(u16) (u16) +#define tu_le16toh(u16) (u16) - #define tu_htole32(u32) (u32) - #define tu_le32toh(u32) (u32) +#define tu_htole32(u32) (u32) +#define tu_le32toh(u32) (u32) #elif (TU_BYTE_ORDER == TU_BIG_ENDIAN) - #define tu_htons(u16) (u16) - #define tu_ntohs(u16) (u16) +#define tu_htons(u16) (u16) +#define tu_ntohs(u16) (u16) - #define tu_htonl(u32) (u32) - #define tu_ntohl(u32) (u32) +#define tu_htonl(u32) (u32) +#define tu_ntohl(u32) (u32) - #define tu_htole16(u16) (TU_BSWAP16(u16)) - #define tu_le16toh(u16) (TU_BSWAP16(u16)) +#define tu_htole16(u16) (TU_BSWAP16(u16)) +#define tu_le16toh(u16) (TU_BSWAP16(u16)) - #define tu_htole32(u32) (TU_BSWAP32(u32)) - #define tu_le32toh(u32) (TU_BSWAP32(u32)) +#define tu_htole32(u32) (TU_BSWAP32(u32)) +#define tu_le32toh(u32) (TU_BSWAP32(u32)) #else - #error Byte order is undefined +#error Byte order is undefined #endif #endif /* _TUSB_COMPILER_H_ */ diff --git a/Libraries/tinyusb/src/common/tusb_debug.h b/Libraries/tinyusb/src/common/tusb_debug.h index 2e9f1d9cdcd..a93a6da288b 100644 --- a/Libraries/tinyusb/src/common/tusb_debug.h +++ b/Libraries/tinyusb/src/common/tusb_debug.h @@ -28,7 +28,7 @@ #define _TUSB_DEBUG_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -44,92 +44,95 @@ // Enum to String for debugging purposes #if CFG_TUSB_DEBUG >= CFG_TUH_LOG_LEVEL || CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL -extern char const* const tu_str_speed[]; -extern char const* const tu_str_std_request[]; -extern char const* const tu_str_xfer_result[]; +extern char const *const tu_str_speed[]; +extern char const *const tu_str_std_request[]; +extern char const *const tu_str_xfer_result[]; #endif void tu_print_mem(void const *buf, uint32_t count, uint8_t indent); #ifdef CFG_TUSB_DEBUG_PRINTF - extern int CFG_TUSB_DEBUG_PRINTF(const char *format, ...); - #define tu_printf CFG_TUSB_DEBUG_PRINTF +extern int CFG_TUSB_DEBUG_PRINTF(const char *format, ...); +#define tu_printf CFG_TUSB_DEBUG_PRINTF #else - #define tu_printf printf +#define tu_printf printf #endif -static inline void tu_print_buf(uint8_t const* buf, uint32_t bufsize) { - for(uint32_t i=0; i= 2 - #define TU_LOG2 TU_LOG1 - #define TU_LOG2_MEM TU_LOG1_MEM - #define TU_LOG2_BUF TU_LOG1_BUF - #define TU_LOG2_INT TU_LOG1_INT - #define TU_LOG2_HEX TU_LOG1_HEX +#define TU_LOG2 TU_LOG1 +#define TU_LOG2_MEM TU_LOG1_MEM +#define TU_LOG2_BUF TU_LOG1_BUF +#define TU_LOG2_INT TU_LOG1_INT +#define TU_LOG2_HEX TU_LOG1_HEX #endif // Log Level 3: Info #if CFG_TUSB_DEBUG >= 3 - #define TU_LOG3 TU_LOG1 - #define TU_LOG3_MEM TU_LOG1_MEM - #define TU_LOG3_BUF TU_LOG1_BUF - #define TU_LOG3_INT TU_LOG1_INT - #define TU_LOG3_HEX TU_LOG1_HEX +#define TU_LOG3 TU_LOG1 +#define TU_LOG3_MEM TU_LOG1_MEM +#define TU_LOG3_BUF TU_LOG1_BUF +#define TU_LOG3_INT TU_LOG1_INT +#define TU_LOG3_HEX TU_LOG1_HEX #endif typedef struct { - uint32_t key; - const char* data; + uint32_t key; + const char *data; } tu_lookup_entry_t; typedef struct { - uint16_t count; - tu_lookup_entry_t const* items; + uint16_t count; + tu_lookup_entry_t const *items; } tu_lookup_table_t; -static inline const char* tu_lookup_find(tu_lookup_table_t const* p_table, uint32_t key) { - tu_static char not_found[11]; +static inline const char *tu_lookup_find(tu_lookup_table_t const *p_table, uint32_t key) +{ + tu_static char not_found[11]; - for(uint16_t i=0; icount; i++) { - if (p_table->items[i].key == key) return p_table->items[i].data; - } + for (uint16_t i = 0; i < p_table->count; i++) { + if (p_table->items[i].key == key) + return p_table->items[i].data; + } - // not found return the key value in hex - snprintf(not_found, sizeof(not_found), "0x%08lX", (unsigned long) key); + // not found return the key value in hex + snprintf(not_found, sizeof(not_found), "0x%08lX", (unsigned long)key); - return not_found; + return not_found; } #endif // CFG_TUSB_DEBUG #ifndef TU_LOG - #define TU_LOG(n, ...) - #define TU_LOG_MEM(n, ...) - #define TU_LOG_BUF(n, ...) - #define TU_LOG_INT(n, ...) - #define TU_LOG_HEX(n, ...) - #define TU_LOG_LOCATION() - #define TU_LOG_FAILED() +#define TU_LOG(n, ...) +#define TU_LOG_MEM(n, ...) +#define TU_LOG_BUF(n, ...) +#define TU_LOG_INT(n, ...) +#define TU_LOG_HEX(n, ...) +#define TU_LOG_LOCATION() +#define TU_LOG_FAILED() #endif // TODO replace all TU_LOGn with TU_LOG(n) @@ -141,31 +144,31 @@ static inline const char* tu_lookup_find(tu_lookup_table_t const* p_table, uint3 #define TU_LOG0_HEX(...) #ifndef TU_LOG1 - #define TU_LOG1(...) - #define TU_LOG1_MEM(...) - #define TU_LOG1_BUF(...) - #define TU_LOG1_INT(...) - #define TU_LOG1_HEX(...) +#define TU_LOG1(...) +#define TU_LOG1_MEM(...) +#define TU_LOG1_BUF(...) +#define TU_LOG1_INT(...) +#define TU_LOG1_HEX(...) #endif #ifndef TU_LOG2 - #define TU_LOG2(...) - #define TU_LOG2_MEM(...) - #define TU_LOG2_BUF(...) - #define TU_LOG2_INT(...) - #define TU_LOG2_HEX(...) +#define TU_LOG2(...) +#define TU_LOG2_MEM(...) +#define TU_LOG2_BUF(...) +#define TU_LOG2_INT(...) +#define TU_LOG2_HEX(...) #endif #ifndef TU_LOG3 - #define TU_LOG3(...) - #define TU_LOG3_MEM(...) - #define TU_LOG3_BUF(...) - #define TU_LOG3_INT(...) - #define TU_LOG3_HEX(...) +#define TU_LOG3(...) +#define TU_LOG3_MEM(...) +#define TU_LOG3_BUF(...) +#define TU_LOG3_INT(...) +#define TU_LOG3_HEX(...) #endif #ifdef __cplusplus - } +} #endif #endif /* _TUSB_DEBUG_H_ */ diff --git a/Libraries/tinyusb/src/common/tusb_fifo.c b/Libraries/tinyusb/src/common/tusb_fifo.c index 8a0fd441761..d233dfcb354 100644 --- a/Libraries/tinyusb/src/common/tusb_fifo.c +++ b/Libraries/tinyusb/src/common/tusb_fifo.c @@ -28,7 +28,7 @@ #include "osal/osal.h" #include "tusb_fifo.h" -#define TU_FIFO_DBG 0 +#define TU_FIFO_DBG 0 // Suppress IAR warning // Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement @@ -40,12 +40,14 @@ TU_ATTR_ALWAYS_INLINE static inline void _ff_lock(osal_mutex_t mutex) { - if (mutex) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); + if (mutex) + osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); } TU_ATTR_ALWAYS_INLINE static inline void _ff_unlock(osal_mutex_t mutex) { - if (mutex) osal_mutex_unlock(mutex); + if (mutex) + osal_mutex_unlock(mutex); } #else @@ -59,35 +61,36 @@ TU_ATTR_ALWAYS_INLINE static inline void _ff_unlock(osal_mutex_t mutex) * \brief Write modes intended to allow special read and write functions to be able to * copy data to and from USB hardware FIFOs as needed for e.g. STM32s and others */ -typedef enum -{ - TU_FIFO_COPY_INC, ///< Copy from/to an increasing source/destination address - default mode +typedef enum { + TU_FIFO_COPY_INC, ///< Copy from/to an increasing source/destination address - default mode #ifdef TUP_MEM_CONST_ADDR - TU_FIFO_COPY_CST_FULL_WORDS, ///< Copy from/to a constant source/destination address - required for e.g. STM32 to write into USB hardware FIFO + TU_FIFO_COPY_CST_FULL_WORDS, ///< Copy from/to a constant source/destination address - required for e.g. STM32 to write into USB hardware FIFO #endif } tu_fifo_copy_mode_t; -bool tu_fifo_config(tu_fifo_t *f, void* buffer, uint16_t depth, uint16_t item_size, bool overwritable) +bool tu_fifo_config(tu_fifo_t *f, void *buffer, uint16_t depth, uint16_t item_size, + bool overwritable) { - // Limit index space to 2*depth - this allows for a fast "modulo" calculation - // but limits the maximum depth to 2^16/2 = 2^15 and buffer overflows are detectable - // only if overflow happens once (important for unsupervised DMA applications) - if (depth > 0x8000) return false; + // Limit index space to 2*depth - this allows for a fast "modulo" calculation + // but limits the maximum depth to 2^16/2 = 2^15 and buffer overflows are detectable + // only if overflow happens once (important for unsupervised DMA applications) + if (depth > 0x8000) + return false; - _ff_lock(f->mutex_wr); - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_wr); + _ff_lock(f->mutex_rd); - f->buffer = (uint8_t*) buffer; - f->depth = depth; - f->item_size = (uint16_t) (item_size & 0x7FFF); - f->overwritable = overwritable; - f->rd_idx = 0; - f->wr_idx = 0; + f->buffer = (uint8_t *)buffer; + f->depth = depth; + f->item_size = (uint16_t)(item_size & 0x7FFF); + f->overwritable = overwritable; + f->rd_idx = 0; + f->wr_idx = 0; - _ff_unlock(f->mutex_wr); - _ff_unlock(f->mutex_rd); + _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_rd); - return true; + return true; } //--------------------------------------------------------------------+ @@ -98,228 +101,210 @@ bool tu_fifo_config(tu_fifo_t *f, void* buffer, uint16_t depth, uint16_t item_si // Intended to be used to read from hardware USB FIFO in e.g. STM32 where all data is read from a constant address // Code adapted from dcd_synopsys.c // TODO generalize with configurable 1 byte or 4 byte each read -static void _ff_push_const_addr(uint8_t * ff_buf, const void * app_buf, uint16_t len) +static void _ff_push_const_addr(uint8_t *ff_buf, const void *app_buf, uint16_t len) { - volatile const uint32_t * reg_rx = (volatile const uint32_t *) app_buf; + volatile const uint32_t *reg_rx = (volatile const uint32_t *)app_buf; - // Reading full available 32 bit words from const app address - uint16_t full_words = len >> 2; - while(full_words--) - { - tu_unaligned_write32(ff_buf, *reg_rx); - ff_buf += 4; - } + // Reading full available 32 bit words from const app address + uint16_t full_words = len >> 2; + while (full_words--) { + tu_unaligned_write32(ff_buf, *reg_rx); + ff_buf += 4; + } - // Read the remaining 1-3 bytes from const app address - uint8_t const bytes_rem = len & 0x03; - if ( bytes_rem ) - { - uint32_t tmp32 = *reg_rx; - memcpy(ff_buf, &tmp32, bytes_rem); - } + // Read the remaining 1-3 bytes from const app address + uint8_t const bytes_rem = len & 0x03; + if (bytes_rem) { + uint32_t tmp32 = *reg_rx; + memcpy(ff_buf, &tmp32, bytes_rem); + } } // Intended to be used to write to hardware USB FIFO in e.g. STM32 // where all data is written to a constant address in full word copies -static void _ff_pull_const_addr(void * app_buf, const uint8_t * ff_buf, uint16_t len) +static void _ff_pull_const_addr(void *app_buf, const uint8_t *ff_buf, uint16_t len) { - volatile uint32_t * reg_tx = (volatile uint32_t *) app_buf; + volatile uint32_t *reg_tx = (volatile uint32_t *)app_buf; - // Write full available 32 bit words to const address - uint16_t full_words = len >> 2; - while(full_words--) - { - *reg_tx = tu_unaligned_read32(ff_buf); - ff_buf += 4; - } + // Write full available 32 bit words to const address + uint16_t full_words = len >> 2; + while (full_words--) { + *reg_tx = tu_unaligned_read32(ff_buf); + ff_buf += 4; + } - // Write the remaining 1-3 bytes into const address - uint8_t const bytes_rem = len & 0x03; - if ( bytes_rem ) - { - uint32_t tmp32 = 0; - memcpy(&tmp32, ff_buf, bytes_rem); + // Write the remaining 1-3 bytes into const address + uint8_t const bytes_rem = len & 0x03; + if (bytes_rem) { + uint32_t tmp32 = 0; + memcpy(&tmp32, ff_buf, bytes_rem); - *reg_tx = tmp32; - } + *reg_tx = tmp32; + } } #endif // send one item to fifo WITHOUT updating write pointer -static inline void _ff_push(tu_fifo_t* f, void const * app_buf, uint16_t rel) +static inline void _ff_push(tu_fifo_t *f, void const *app_buf, uint16_t rel) { - memcpy(f->buffer + (rel * f->item_size), app_buf, f->item_size); + memcpy(f->buffer + (rel * f->item_size), app_buf, f->item_size); } // send n items to fifo WITHOUT updating write pointer -static void _ff_push_n(tu_fifo_t* f, void const * app_buf, uint16_t n, uint16_t wr_ptr, tu_fifo_copy_mode_t copy_mode) +static void _ff_push_n(tu_fifo_t *f, void const *app_buf, uint16_t n, uint16_t wr_ptr, + tu_fifo_copy_mode_t copy_mode) { - uint16_t const lin_count = f->depth - wr_ptr; - uint16_t const wrap_count = n - lin_count; + uint16_t const lin_count = f->depth - wr_ptr; + uint16_t const wrap_count = n - lin_count; - uint16_t lin_bytes = lin_count * f->item_size; - uint16_t wrap_bytes = wrap_count * f->item_size; + uint16_t lin_bytes = lin_count * f->item_size; + uint16_t wrap_bytes = wrap_count * f->item_size; - // current buffer of fifo - uint8_t* ff_buf = f->buffer + (wr_ptr * f->item_size); + // current buffer of fifo + uint8_t *ff_buf = f->buffer + (wr_ptr * f->item_size); - switch (copy_mode) - { + switch (copy_mode) { case TU_FIFO_COPY_INC: - if(n <= lin_count) - { - // Linear only - memcpy(ff_buf, app_buf, n*f->item_size); - } - else - { - // Wrap around - - // Write data to linear part of buffer - memcpy(ff_buf, app_buf, lin_bytes); - - // Write data wrapped around - // TU_ASSERT(nWrap_bytes <= f->depth, ); - memcpy(f->buffer, ((uint8_t const*) app_buf) + lin_bytes, wrap_bytes); - } - break; + if (n <= lin_count) { + // Linear only + memcpy(ff_buf, app_buf, n * f->item_size); + } else { + // Wrap around + + // Write data to linear part of buffer + memcpy(ff_buf, app_buf, lin_bytes); + + // Write data wrapped around + // TU_ASSERT(nWrap_bytes <= f->depth, ); + memcpy(f->buffer, ((uint8_t const *)app_buf) + lin_bytes, wrap_bytes); + } + break; #ifdef TUP_MEM_CONST_ADDR case TU_FIFO_COPY_CST_FULL_WORDS: - // Intended for hardware buffers from which it can be read word by word only - if(n <= lin_count) - { - // Linear only - _ff_push_const_addr(ff_buf, app_buf, n*f->item_size); - } - else - { - // Wrap around case - - // Write full words to linear part of buffer - uint16_t nLin_4n_bytes = lin_bytes & 0xFFFC; - _ff_push_const_addr(ff_buf, app_buf, nLin_4n_bytes); - ff_buf += nLin_4n_bytes; - - // There could be odd 1-3 bytes before the wrap-around boundary - uint8_t rem = lin_bytes & 0x03; - if (rem > 0) - { - volatile const uint32_t * rx_fifo = (volatile const uint32_t *) app_buf; - - uint8_t remrem = (uint8_t) tu_min16(wrap_bytes, 4-rem); - wrap_bytes -= remrem; - - uint32_t tmp32 = *rx_fifo; - uint8_t * src_u8 = ((uint8_t *) &tmp32); - - // Write 1-3 bytes before wrapped boundary - while(rem--) *ff_buf++ = *src_u8++; - - // Read more bytes to beginning to complete a word - ff_buf = f->buffer; - while(remrem--) *ff_buf++ = *src_u8++; + // Intended for hardware buffers from which it can be read word by word only + if (n <= lin_count) { + // Linear only + _ff_push_const_addr(ff_buf, app_buf, n * f->item_size); + } else { + // Wrap around case + + // Write full words to linear part of buffer + uint16_t nLin_4n_bytes = lin_bytes & 0xFFFC; + _ff_push_const_addr(ff_buf, app_buf, nLin_4n_bytes); + ff_buf += nLin_4n_bytes; + + // There could be odd 1-3 bytes before the wrap-around boundary + uint8_t rem = lin_bytes & 0x03; + if (rem > 0) { + volatile const uint32_t *rx_fifo = (volatile const uint32_t *)app_buf; + + uint8_t remrem = (uint8_t)tu_min16(wrap_bytes, 4 - rem); + wrap_bytes -= remrem; + + uint32_t tmp32 = *rx_fifo; + uint8_t *src_u8 = ((uint8_t *)&tmp32); + + // Write 1-3 bytes before wrapped boundary + while (rem--) *ff_buf++ = *src_u8++; + + // Read more bytes to beginning to complete a word + ff_buf = f->buffer; + while (remrem--) *ff_buf++ = *src_u8++; + } else { + ff_buf = f->buffer; // wrap around to beginning + } + + // Write data wrapped part + if (wrap_bytes > 0) + _ff_push_const_addr(ff_buf, app_buf, wrap_bytes); } - else - { - ff_buf = f->buffer; // wrap around to beginning - } - - // Write data wrapped part - if (wrap_bytes > 0) _ff_push_const_addr(ff_buf, app_buf, wrap_bytes); - } - break; + break; #endif - default: break; - } + default: + break; + } } // get one item from fifo WITHOUT updating read pointer -static inline void _ff_pull(tu_fifo_t* f, void * app_buf, uint16_t rel) +static inline void _ff_pull(tu_fifo_t *f, void *app_buf, uint16_t rel) { - memcpy(app_buf, f->buffer + (rel * f->item_size), f->item_size); + memcpy(app_buf, f->buffer + (rel * f->item_size), f->item_size); } // get n items from fifo WITHOUT updating read pointer -static void _ff_pull_n(tu_fifo_t* f, void* app_buf, uint16_t n, uint16_t rd_ptr, tu_fifo_copy_mode_t copy_mode) +static void _ff_pull_n(tu_fifo_t *f, void *app_buf, uint16_t n, uint16_t rd_ptr, + tu_fifo_copy_mode_t copy_mode) { - uint16_t const lin_count = f->depth - rd_ptr; - uint16_t const wrap_count = n - lin_count; // only used if wrapped + uint16_t const lin_count = f->depth - rd_ptr; + uint16_t const wrap_count = n - lin_count; // only used if wrapped - uint16_t lin_bytes = lin_count * f->item_size; - uint16_t wrap_bytes = wrap_count * f->item_size; + uint16_t lin_bytes = lin_count * f->item_size; + uint16_t wrap_bytes = wrap_count * f->item_size; - // current buffer of fifo - uint8_t* ff_buf = f->buffer + (rd_ptr * f->item_size); + // current buffer of fifo + uint8_t *ff_buf = f->buffer + (rd_ptr * f->item_size); - switch (copy_mode) - { + switch (copy_mode) { case TU_FIFO_COPY_INC: - if ( n <= lin_count ) - { - // Linear only - memcpy(app_buf, ff_buf, n*f->item_size); - } - else - { - // Wrap around - - // Read data from linear part of buffer - memcpy(app_buf, ff_buf, lin_bytes); - - // Read data wrapped part - memcpy((uint8_t*) app_buf + lin_bytes, f->buffer, wrap_bytes); - } - break; + if (n <= lin_count) { + // Linear only + memcpy(app_buf, ff_buf, n * f->item_size); + } else { + // Wrap around + + // Read data from linear part of buffer + memcpy(app_buf, ff_buf, lin_bytes); + + // Read data wrapped part + memcpy((uint8_t *)app_buf + lin_bytes, f->buffer, wrap_bytes); + } + break; #ifdef TUP_MEM_CONST_ADDR case TU_FIFO_COPY_CST_FULL_WORDS: - if ( n <= lin_count ) - { - // Linear only - _ff_pull_const_addr(app_buf, ff_buf, n*f->item_size); - } - else - { - // Wrap around case - - // Read full words from linear part of buffer - uint16_t lin_4n_bytes = lin_bytes & 0xFFFC; - _ff_pull_const_addr(app_buf, ff_buf, lin_4n_bytes); - ff_buf += lin_4n_bytes; - - // There could be odd 1-3 bytes before the wrap-around boundary - uint8_t rem = lin_bytes & 0x03; - if (rem > 0) - { - volatile uint32_t * reg_tx = (volatile uint32_t *) app_buf; - - uint8_t remrem = (uint8_t) tu_min16(wrap_bytes, 4-rem); - wrap_bytes -= remrem; - - uint32_t tmp32=0; - uint8_t * dst_u8 = (uint8_t *)&tmp32; - - // Read 1-3 bytes before wrapped boundary - while(rem--) *dst_u8++ = *ff_buf++; - - // Read more bytes from beginning to complete a word - ff_buf = f->buffer; - while(remrem--) *dst_u8++ = *ff_buf++; - - *reg_tx = tmp32; - } - else - { - ff_buf = f->buffer; // wrap around to beginning + if (n <= lin_count) { + // Linear only + _ff_pull_const_addr(app_buf, ff_buf, n * f->item_size); + } else { + // Wrap around case + + // Read full words from linear part of buffer + uint16_t lin_4n_bytes = lin_bytes & 0xFFFC; + _ff_pull_const_addr(app_buf, ff_buf, lin_4n_bytes); + ff_buf += lin_4n_bytes; + + // There could be odd 1-3 bytes before the wrap-around boundary + uint8_t rem = lin_bytes & 0x03; + if (rem > 0) { + volatile uint32_t *reg_tx = (volatile uint32_t *)app_buf; + + uint8_t remrem = (uint8_t)tu_min16(wrap_bytes, 4 - rem); + wrap_bytes -= remrem; + + uint32_t tmp32 = 0; + uint8_t *dst_u8 = (uint8_t *)&tmp32; + + // Read 1-3 bytes before wrapped boundary + while (rem--) *dst_u8++ = *ff_buf++; + + // Read more bytes from beginning to complete a word + ff_buf = f->buffer; + while (remrem--) *dst_u8++ = *ff_buf++; + + *reg_tx = tmp32; + } else { + ff_buf = f->buffer; // wrap around to beginning + } + + // Read data wrapped part + if (wrap_bytes > 0) + _ff_pull_const_addr(app_buf, ff_buf, wrap_bytes); } - - // Read data wrapped part - if (wrap_bytes > 0) _ff_pull_const_addr(app_buf, ff_buf, wrap_bytes); - } #endif - break; + break; - default: break; - } + default: + break; + } } //--------------------------------------------------------------------+ @@ -327,25 +312,23 @@ static void _ff_pull_n(tu_fifo_t* f, void* app_buf, uint16_t n, uint16_t rd_ptr, //--------------------------------------------------------------------+ // return only the index difference and as such can be used to determine an overflow i.e overflowable count -TU_ATTR_ALWAYS_INLINE static inline -uint16_t _ff_count(uint16_t depth, uint16_t wr_idx, uint16_t rd_idx) +TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_count(uint16_t depth, uint16_t wr_idx, + uint16_t rd_idx) { - // In case we have non-power of two depth we need a further modification - if (wr_idx >= rd_idx) - { - return (uint16_t) (wr_idx - rd_idx); - } else - { - return (uint16_t) (2*depth - (rd_idx - wr_idx)); - } + // In case we have non-power of two depth we need a further modification + if (wr_idx >= rd_idx) { + return (uint16_t)(wr_idx - rd_idx); + } else { + return (uint16_t)(2 * depth - (rd_idx - wr_idx)); + } } // return remaining slot in fifo -TU_ATTR_ALWAYS_INLINE static inline -uint16_t _ff_remaining(uint16_t depth, uint16_t wr_idx, uint16_t rd_idx) +TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_remaining(uint16_t depth, uint16_t wr_idx, + uint16_t rd_idx) { - uint16_t const count = _ff_count(depth, wr_idx, rd_idx); - return (depth > count) ? (depth - count) : 0; + uint16_t const count = _ff_count(depth, wr_idx, rd_idx); + return (depth > count) ? (depth - count) : 0; } //--------------------------------------------------------------------+ @@ -356,17 +339,16 @@ uint16_t _ff_remaining(uint16_t depth, uint16_t wr_idx, uint16_t rd_idx) // "absolute" index is only in the range of [0..2*depth) static uint16_t advance_index(uint16_t depth, uint16_t idx, uint16_t offset) { - // We limit the index space of p such that a correct wrap around happens - // Check for a wrap around or if we are in unused index space - This has to be checked first!! - // We are exploiting the wrap around to the correct index - uint16_t new_idx = (uint16_t) (idx + offset); - if ( (idx > new_idx) || (new_idx >= 2*depth) ) - { - uint16_t const non_used_index_space = (uint16_t) (UINT16_MAX - (2*depth-1)); - new_idx = (uint16_t) (new_idx + non_used_index_space); - } + // We limit the index space of p such that a correct wrap around happens + // Check for a wrap around or if we are in unused index space - This has to be checked first!! + // We are exploiting the wrap around to the correct index + uint16_t new_idx = (uint16_t)(idx + offset); + if ((idx > new_idx) || (new_idx >= 2 * depth)) { + uint16_t const non_used_index_space = (uint16_t)(UINT16_MAX - (2 * depth - 1)); + new_idx = (uint16_t)(new_idx + non_used_index_space); + } - return new_idx; + return new_idx; } #if 0 // not used but @@ -388,185 +370,175 @@ static uint16_t backward_index(uint16_t depth, uint16_t idx, uint16_t offset) #endif // index to pointer, simply an modulo with minus. -TU_ATTR_ALWAYS_INLINE static inline -uint16_t idx2ptr(uint16_t depth, uint16_t idx) +TU_ATTR_ALWAYS_INLINE static inline uint16_t idx2ptr(uint16_t depth, uint16_t idx) { - // Only run at most 3 times since index is limit in the range of [0..2*depth) - while ( idx >= depth ) idx -= depth; - return idx; + // Only run at most 3 times since index is limit in the range of [0..2*depth) + while (idx >= depth) idx -= depth; + return idx; } // Works on local copies of w // When an overwritable fifo is overflowed, rd_idx will be re-index so that it forms // an full fifo i.e _ff_count() = depth -TU_ATTR_ALWAYS_INLINE static inline -uint16_t _ff_correct_read_index(tu_fifo_t* f, uint16_t wr_idx) +TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_correct_read_index(tu_fifo_t *f, uint16_t wr_idx) { - uint16_t rd_idx; - if ( wr_idx >= f->depth ) - { - rd_idx = wr_idx - f->depth; - }else - { - rd_idx = wr_idx + f->depth; - } + uint16_t rd_idx; + if (wr_idx >= f->depth) { + rd_idx = wr_idx - f->depth; + } else { + rd_idx = wr_idx + f->depth; + } - f->rd_idx = rd_idx; + f->rd_idx = rd_idx; - return rd_idx; + return rd_idx; } // Works on local copies of w and r // Must be protected by mutexes since in case of an overflow read pointer gets modified -static bool _tu_fifo_peek(tu_fifo_t* f, void * p_buffer, uint16_t wr_idx, uint16_t rd_idx) +static bool _tu_fifo_peek(tu_fifo_t *f, void *p_buffer, uint16_t wr_idx, uint16_t rd_idx) { - uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); + uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); - // nothing to peek - if ( cnt == 0 ) return false; + // nothing to peek + if (cnt == 0) + return false; - // Check overflow and correct if required - if ( cnt > f->depth ) - { - rd_idx = _ff_correct_read_index(f, wr_idx); - cnt = f->depth; - } + // Check overflow and correct if required + if (cnt > f->depth) { + rd_idx = _ff_correct_read_index(f, wr_idx); + cnt = f->depth; + } - uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); + uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); - // Peek data - _ff_pull(f, p_buffer, rd_ptr); + // Peek data + _ff_pull(f, p_buffer, rd_ptr); - return true; + return true; } // Works on local copies of w and r // Must be protected by mutexes since in case of an overflow read pointer gets modified -static uint16_t _tu_fifo_peek_n(tu_fifo_t* f, void * p_buffer, uint16_t n, uint16_t wr_idx, uint16_t rd_idx, tu_fifo_copy_mode_t copy_mode) +static uint16_t _tu_fifo_peek_n(tu_fifo_t *f, void *p_buffer, uint16_t n, uint16_t wr_idx, + uint16_t rd_idx, tu_fifo_copy_mode_t copy_mode) { - uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); + uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); - // nothing to peek - if ( cnt == 0 ) return 0; + // nothing to peek + if (cnt == 0) + return 0; - // Check overflow and correct if required - if ( cnt > f->depth ) - { - rd_idx = _ff_correct_read_index(f, wr_idx); - cnt = f->depth; - } + // Check overflow and correct if required + if (cnt > f->depth) { + rd_idx = _ff_correct_read_index(f, wr_idx); + cnt = f->depth; + } - // Check if we can read something at and after offset - if too less is available we read what remains - if ( cnt < n ) n = cnt; + // Check if we can read something at and after offset - if too less is available we read what remains + if (cnt < n) + n = cnt; - uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); + uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); - // Peek data - _ff_pull_n(f, p_buffer, n, rd_ptr, copy_mode); + // Peek data + _ff_pull_n(f, p_buffer, n, rd_ptr, copy_mode); - return n; + return n; } -static uint16_t _tu_fifo_write_n(tu_fifo_t* f, const void * data, uint16_t n, tu_fifo_copy_mode_t copy_mode) +static uint16_t _tu_fifo_write_n(tu_fifo_t *f, const void *data, uint16_t n, + tu_fifo_copy_mode_t copy_mode) { - if ( n == 0 ) return 0; - - _ff_lock(f->mutex_wr); - - uint16_t wr_idx = f->wr_idx; - uint16_t rd_idx = f->rd_idx; - - uint8_t const* buf8 = (uint8_t const*) data; - - TU_LOG(TU_FIFO_DBG, "rd = %3u, wr = %3u, count = %3u, remain = %3u, n = %3u: ", - rd_idx, wr_idx, _ff_count(f->depth, wr_idx, rd_idx), _ff_remaining(f->depth, wr_idx, rd_idx), n); - - if ( !f->overwritable ) - { - // limit up to full - uint16_t const remain = _ff_remaining(f->depth, wr_idx, rd_idx); - n = tu_min16(n, remain); - } - else - { - // In over-writable mode, fifo_write() is allowed even when fifo is full. In such case, - // oldest data in fifo i.e at read pointer data will be overwritten - // Note: we can modify read buffer contents but we must not modify the read index itself within a write function! - // Since it would end up in a race condition with read functions! - if ( n >= f->depth ) - { - // Only copy last part - if ( copy_mode == TU_FIFO_COPY_INC ) - { - buf8 += (n - f->depth) * f->item_size; - }else - { - // TODO should read from hw fifo to discard data, however reading an odd number could - // accidentally discard data. - } - - n = f->depth; - - // We start writing at the read pointer's position since we fill the whole buffer - wr_idx = rd_idx; - } - else - { - uint16_t const overflowable_count = _ff_count(f->depth, wr_idx, rd_idx); - if (overflowable_count + n >= 2*f->depth) - { - // Double overflowed - // Index is bigger than the allowed range [0,2*depth) - // re-position write index to have a full fifo after pushed - wr_idx = advance_index(f->depth, rd_idx, f->depth - n); - - // TODO we should also shift out n bytes from read index since we avoid changing rd index !! - // However memmove() is expensive due to actual copying + wrapping consideration. - // Also race condition could happen anyway if read() is invoke while moving result in corrupted memory - // currently deliberately not implemented --> result in incorrect data read back - }else - { - // normal + single overflowed: - // Index is in the range of [0,2*depth) and thus detect and recoverable. Recovering is handled in read() - // Therefore we just increase write index - // we will correct (re-position) read index later on in fifo_read() function - } + if (n == 0) + return 0; + + _ff_lock(f->mutex_wr); + + uint16_t wr_idx = f->wr_idx; + uint16_t rd_idx = f->rd_idx; + + uint8_t const *buf8 = (uint8_t const *)data; + + TU_LOG(TU_FIFO_DBG, "rd = %3u, wr = %3u, count = %3u, remain = %3u, n = %3u: ", rd_idx, wr_idx, + _ff_count(f->depth, wr_idx, rd_idx), _ff_remaining(f->depth, wr_idx, rd_idx), n); + + if (!f->overwritable) { + // limit up to full + uint16_t const remain = _ff_remaining(f->depth, wr_idx, rd_idx); + n = tu_min16(n, remain); + } else { + // In over-writable mode, fifo_write() is allowed even when fifo is full. In such case, + // oldest data in fifo i.e at read pointer data will be overwritten + // Note: we can modify read buffer contents but we must not modify the read index itself within a write function! + // Since it would end up in a race condition with read functions! + if (n >= f->depth) { + // Only copy last part + if (copy_mode == TU_FIFO_COPY_INC) { + buf8 += (n - f->depth) * f->item_size; + } else { + // TODO should read from hw fifo to discard data, however reading an odd number could + // accidentally discard data. + } + + n = f->depth; + + // We start writing at the read pointer's position since we fill the whole buffer + wr_idx = rd_idx; + } else { + uint16_t const overflowable_count = _ff_count(f->depth, wr_idx, rd_idx); + if (overflowable_count + n >= 2 * f->depth) { + // Double overflowed + // Index is bigger than the allowed range [0,2*depth) + // re-position write index to have a full fifo after pushed + wr_idx = advance_index(f->depth, rd_idx, f->depth - n); + + // TODO we should also shift out n bytes from read index since we avoid changing rd index !! + // However memmove() is expensive due to actual copying + wrapping consideration. + // Also race condition could happen anyway if read() is invoke while moving result in corrupted memory + // currently deliberately not implemented --> result in incorrect data read back + } else { + // normal + single overflowed: + // Index is in the range of [0,2*depth) and thus detect and recoverable. Recovering is handled in read() + // Therefore we just increase write index + // we will correct (re-position) read index later on in fifo_read() function + } + } } - } - if (n) - { - uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + if (n) { + uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); - TU_LOG(TU_FIFO_DBG, "actual_n = %u, wr_ptr = %u", n, wr_ptr); + TU_LOG(TU_FIFO_DBG, "actual_n = %u, wr_ptr = %u", n, wr_ptr); - // Write data - _ff_push_n(f, buf8, n, wr_ptr, copy_mode); + // Write data + _ff_push_n(f, buf8, n, wr_ptr, copy_mode); - // Advance index - f->wr_idx = advance_index(f->depth, wr_idx, n); + // Advance index + f->wr_idx = advance_index(f->depth, wr_idx, n); - TU_LOG(TU_FIFO_DBG, "\tnew_wr = %u\r\n", f->wr_idx); - } + TU_LOG(TU_FIFO_DBG, "\tnew_wr = %u\r\n", f->wr_idx); + } - _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_wr); - return n; + return n; } -static uint16_t _tu_fifo_read_n(tu_fifo_t* f, void * buffer, uint16_t n, tu_fifo_copy_mode_t copy_mode) +static uint16_t _tu_fifo_read_n(tu_fifo_t *f, void *buffer, uint16_t n, + tu_fifo_copy_mode_t copy_mode) { - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_rd); - // Peek the data - // f->rd_idx might get modified in case of an overflow so we can not use a local variable - n = _tu_fifo_peek_n(f, buffer, n, f->wr_idx, f->rd_idx, copy_mode); + // Peek the data + // f->rd_idx might get modified in case of an overflow so we can not use a local variable + n = _tu_fifo_peek_n(f, buffer, n, f->wr_idx, f->rd_idx, copy_mode); - // Advance read pointer - f->rd_idx = advance_index(f->depth, f->rd_idx, n); + // Advance read pointer + f->rd_idx = advance_index(f->depth, f->rd_idx, n); - _ff_unlock(f->mutex_rd); - return n; + _ff_unlock(f->mutex_rd); + return n; } //--------------------------------------------------------------------+ @@ -588,9 +560,9 @@ static uint16_t _tu_fifo_read_n(tu_fifo_t* f, void * buffer, uint16_t n, tu_fifo @returns Number of items in FIFO */ /******************************************************************************/ -uint16_t tu_fifo_count(tu_fifo_t* f) +uint16_t tu_fifo_count(tu_fifo_t *f) { - return tu_min16(_ff_count(f->depth, f->wr_idx, f->rd_idx), f->depth); + return tu_min16(_ff_count(f->depth, f->wr_idx, f->rd_idx), f->depth); } /******************************************************************************/ @@ -606,9 +578,9 @@ uint16_t tu_fifo_count(tu_fifo_t* f) @returns Number of items in FIFO */ /******************************************************************************/ -bool tu_fifo_empty(tu_fifo_t* f) +bool tu_fifo_empty(tu_fifo_t *f) { - return f->wr_idx == f->rd_idx; + return f->wr_idx == f->rd_idx; } /******************************************************************************/ @@ -624,9 +596,9 @@ bool tu_fifo_empty(tu_fifo_t* f) @returns Number of items in FIFO */ /******************************************************************************/ -bool tu_fifo_full(tu_fifo_t* f) +bool tu_fifo_full(tu_fifo_t *f) { - return _ff_count(f->depth, f->wr_idx, f->rd_idx) >= f->depth; + return _ff_count(f->depth, f->wr_idx, f->rd_idx) >= f->depth; } /******************************************************************************/ @@ -642,9 +614,9 @@ bool tu_fifo_full(tu_fifo_t* f) @returns Number of items in FIFO */ /******************************************************************************/ -uint16_t tu_fifo_remaining(tu_fifo_t* f) +uint16_t tu_fifo_remaining(tu_fifo_t *f) { - return _ff_remaining(f->depth, f->wr_idx, f->rd_idx); + return _ff_remaining(f->depth, f->wr_idx, f->rd_idx); } /******************************************************************************/ @@ -668,17 +640,17 @@ uint16_t tu_fifo_remaining(tu_fifo_t* f) @returns True if overflow happened */ /******************************************************************************/ -bool tu_fifo_overflowed(tu_fifo_t* f) +bool tu_fifo_overflowed(tu_fifo_t *f) { - return _ff_count(f->depth, f->wr_idx, f->rd_idx) > f->depth; + return _ff_count(f->depth, f->wr_idx, f->rd_idx) > f->depth; } // Only use in case tu_fifo_overflow() returned true! -void tu_fifo_correct_read_pointer(tu_fifo_t* f) +void tu_fifo_correct_read_pointer(tu_fifo_t *f) { - _ff_lock(f->mutex_rd); - _ff_correct_read_index(f, f->wr_idx); - _ff_unlock(f->mutex_rd); + _ff_lock(f->mutex_rd); + _ff_correct_read_index(f, f->wr_idx); + _ff_unlock(f->mutex_rd); } /******************************************************************************/ @@ -697,19 +669,19 @@ void tu_fifo_correct_read_pointer(tu_fifo_t* f) @returns TRUE if the queue is not empty */ /******************************************************************************/ -bool tu_fifo_read(tu_fifo_t* f, void * buffer) +bool tu_fifo_read(tu_fifo_t *f, void *buffer) { - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_rd); - // Peek the data - // f->rd_idx might get modified in case of an overflow so we can not use a local variable - bool ret = _tu_fifo_peek(f, buffer, f->wr_idx, f->rd_idx); + // Peek the data + // f->rd_idx might get modified in case of an overflow so we can not use a local variable + bool ret = _tu_fifo_peek(f, buffer, f->wr_idx, f->rd_idx); - // Advance pointer - f->rd_idx = advance_index(f->depth, f->rd_idx, ret); + // Advance pointer + f->rd_idx = advance_index(f->depth, f->rd_idx, ret); - _ff_unlock(f->mutex_rd); - return ret; + _ff_unlock(f->mutex_rd); + return ret; } /******************************************************************************/ @@ -728,9 +700,9 @@ bool tu_fifo_read(tu_fifo_t* f, void * buffer) @returns number of items read from the FIFO */ /******************************************************************************/ -uint16_t tu_fifo_read_n(tu_fifo_t* f, void * buffer, uint16_t n) +uint16_t tu_fifo_read_n(tu_fifo_t *f, void *buffer, uint16_t n) { - return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_INC); + return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_INC); } #ifdef TUP_MEM_CONST_ADDR @@ -751,9 +723,9 @@ uint16_t tu_fifo_read_n(tu_fifo_t* f, void * buffer, uint16_t n) @returns number of items read from the FIFO */ /******************************************************************************/ -uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t* f, void * buffer, uint16_t n) +uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t *f, void *buffer, uint16_t n) { - return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_CST_FULL_WORDS); + return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_CST_FULL_WORDS); } #endif @@ -770,12 +742,12 @@ uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t* f, void * buffer, uint1 @returns TRUE if the queue is not empty */ /******************************************************************************/ -bool tu_fifo_peek(tu_fifo_t* f, void * p_buffer) +bool tu_fifo_peek(tu_fifo_t *f, void *p_buffer) { - _ff_lock(f->mutex_rd); - bool ret = _tu_fifo_peek(f, p_buffer, f->wr_idx, f->rd_idx); - _ff_unlock(f->mutex_rd); - return ret; + _ff_lock(f->mutex_rd); + bool ret = _tu_fifo_peek(f, p_buffer, f->wr_idx, f->rd_idx); + _ff_unlock(f->mutex_rd); + return ret; } /******************************************************************************/ @@ -793,12 +765,12 @@ bool tu_fifo_peek(tu_fifo_t* f, void * p_buffer) @returns Number of bytes written to p_buffer */ /******************************************************************************/ -uint16_t tu_fifo_peek_n(tu_fifo_t* f, void * p_buffer, uint16_t n) +uint16_t tu_fifo_peek_n(tu_fifo_t *f, void *p_buffer, uint16_t n) { - _ff_lock(f->mutex_rd); - uint16_t ret = _tu_fifo_peek_n(f, p_buffer, n, f->wr_idx, f->rd_idx, TU_FIFO_COPY_INC); - _ff_unlock(f->mutex_rd); - return ret; + _ff_lock(f->mutex_rd); + uint16_t ret = _tu_fifo_peek_n(f, p_buffer, n, f->wr_idx, f->rd_idx, TU_FIFO_COPY_INC); + _ff_unlock(f->mutex_rd); + return ret; } /******************************************************************************/ @@ -817,32 +789,30 @@ uint16_t tu_fifo_peek_n(tu_fifo_t* f, void * p_buffer, uint16_t n) FIFO will always return TRUE) */ /******************************************************************************/ -bool tu_fifo_write(tu_fifo_t* f, const void * data) +bool tu_fifo_write(tu_fifo_t *f, const void *data) { - _ff_lock(f->mutex_wr); + _ff_lock(f->mutex_wr); - bool ret; - uint16_t const wr_idx = f->wr_idx; + bool ret; + uint16_t const wr_idx = f->wr_idx; - if ( tu_fifo_full(f) && !f->overwritable ) - { - ret = false; - }else - { - uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + if (tu_fifo_full(f) && !f->overwritable) { + ret = false; + } else { + uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); - // Write data - _ff_push(f, data, wr_ptr); + // Write data + _ff_push(f, data, wr_ptr); - // Advance pointer - f->wr_idx = advance_index(f->depth, wr_idx, 1); + // Advance pointer + f->wr_idx = advance_index(f->depth, wr_idx, 1); - ret = true; - } + ret = true; + } - _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_wr); - return ret; + return ret; } /******************************************************************************/ @@ -859,9 +829,9 @@ bool tu_fifo_write(tu_fifo_t* f, const void * data) @return Number of written elements */ /******************************************************************************/ -uint16_t tu_fifo_write_n(tu_fifo_t* f, const void * data, uint16_t n) +uint16_t tu_fifo_write_n(tu_fifo_t *f, const void *data, uint16_t n) { - return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_INC); + return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_INC); } #ifdef TUP_MEM_CONST_ADDR @@ -880,9 +850,9 @@ uint16_t tu_fifo_write_n(tu_fifo_t* f, const void * data, uint16_t n) @return Number of written elements */ /******************************************************************************/ -uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t* f, const void * data, uint16_t n) +uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t *f, const void *data, uint16_t n) { - return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_CST_FULL_WORDS); + return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_CST_FULL_WORDS); } #endif @@ -896,15 +866,15 @@ uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t* f, const void * data, /******************************************************************************/ bool tu_fifo_clear(tu_fifo_t *f) { - _ff_lock(f->mutex_wr); - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_wr); + _ff_lock(f->mutex_rd); - f->rd_idx = 0; - f->wr_idx = 0; + f->rd_idx = 0; + f->wr_idx = 0; - _ff_unlock(f->mutex_wr); - _ff_unlock(f->mutex_rd); - return true; + _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_rd); + return true; } /******************************************************************************/ @@ -919,15 +889,15 @@ bool tu_fifo_clear(tu_fifo_t *f) /******************************************************************************/ bool tu_fifo_set_overwritable(tu_fifo_t *f, bool overwritable) { - _ff_lock(f->mutex_wr); - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_wr); + _ff_lock(f->mutex_rd); - f->overwritable = overwritable; + f->overwritable = overwritable; - _ff_unlock(f->mutex_wr); - _ff_unlock(f->mutex_rd); + _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_rd); - return true; + return true; } /******************************************************************************/ @@ -948,7 +918,7 @@ bool tu_fifo_set_overwritable(tu_fifo_t *f, bool overwritable) /******************************************************************************/ void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n) { - f->wr_idx = advance_index(f->depth, f->wr_idx, n); + f->wr_idx = advance_index(f->depth, f->wr_idx, n); } /******************************************************************************/ @@ -969,7 +939,7 @@ void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n) /******************************************************************************/ void tu_fifo_advance_read_pointer(tu_fifo_t *f, uint16_t n) { - f->rd_idx = advance_index(f->depth, f->rd_idx, n); + f->rd_idx = advance_index(f->depth, f->rd_idx, n); } /******************************************************************************/ @@ -989,55 +959,50 @@ void tu_fifo_advance_read_pointer(tu_fifo_t *f, uint16_t n) /******************************************************************************/ void tu_fifo_get_read_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info) { - // Operate on temporary values in case they change in between - uint16_t wr_idx = f->wr_idx; - uint16_t rd_idx = f->rd_idx; + // Operate on temporary values in case they change in between + uint16_t wr_idx = f->wr_idx; + uint16_t rd_idx = f->rd_idx; - uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); + uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); - // Check overflow and correct if required - may happen in case a DMA wrote too fast - if (cnt > f->depth) - { - _ff_lock(f->mutex_rd); - rd_idx = _ff_correct_read_index(f, wr_idx); - _ff_unlock(f->mutex_rd); + // Check overflow and correct if required - may happen in case a DMA wrote too fast + if (cnt > f->depth) { + _ff_lock(f->mutex_rd); + rd_idx = _ff_correct_read_index(f, wr_idx); + _ff_unlock(f->mutex_rd); - cnt = f->depth; - } + cnt = f->depth; + } - // Check if fifo is empty - if (cnt == 0) - { - info->len_lin = 0; - info->len_wrap = 0; - info->ptr_lin = NULL; - info->ptr_wrap = NULL; - return; - } + // Check if fifo is empty + if (cnt == 0) { + info->len_lin = 0; + info->len_wrap = 0; + info->ptr_lin = NULL; + info->ptr_wrap = NULL; + return; + } - // Get relative pointers - uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); - uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); + // Get relative pointers + uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); - // Copy pointer to buffer to start reading from - info->ptr_lin = &f->buffer[rd_ptr]; + // Copy pointer to buffer to start reading from + info->ptr_lin = &f->buffer[rd_ptr]; - // Check if there is a wrap around necessary - if (wr_ptr > rd_ptr) - { - // Non wrapping case - info->len_lin = cnt; + // Check if there is a wrap around necessary + if (wr_ptr > rd_ptr) { + // Non wrapping case + info->len_lin = cnt; - info->len_wrap = 0; - info->ptr_wrap = NULL; - } - else - { - info->len_lin = f->depth - rd_ptr; // Also the case if FIFO was full + info->len_wrap = 0; + info->ptr_wrap = NULL; + } else { + info->len_lin = f->depth - rd_ptr; // Also the case if FIFO was full - info->len_wrap = cnt - info->len_lin; - info->ptr_wrap = f->buffer; - } + info->len_wrap = cnt - info->len_lin; + info->ptr_wrap = f->buffer; + } } /******************************************************************************/ @@ -1057,37 +1022,35 @@ void tu_fifo_get_read_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info) /******************************************************************************/ void tu_fifo_get_write_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info) { - uint16_t wr_idx = f->wr_idx; - uint16_t rd_idx = f->rd_idx; - uint16_t remain = _ff_remaining(f->depth, wr_idx, rd_idx); - - if (remain == 0) - { - info->len_lin = 0; - info->len_wrap = 0; - info->ptr_lin = NULL; - info->ptr_wrap = NULL; - return; - } - - // Get relative pointers - uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); - uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); - - // Copy pointer to buffer to start writing to - info->ptr_lin = &f->buffer[wr_ptr]; + uint16_t wr_idx = f->wr_idx; + uint16_t rd_idx = f->rd_idx; + uint16_t remain = _ff_remaining(f->depth, wr_idx, rd_idx); + + if (remain == 0) { + info->len_lin = 0; + info->len_wrap = 0; + info->ptr_lin = NULL; + info->ptr_wrap = NULL; + return; + } - if (wr_ptr < rd_ptr) - { - // Non wrapping case - info->len_lin = rd_ptr-wr_ptr; - info->len_wrap = 0; - info->ptr_wrap = NULL; - } - else - { - info->len_lin = f->depth - wr_ptr; - info->len_wrap = remain - info->len_lin; // Remaining length - n already was limited to remain or FIFO depth - info->ptr_wrap = f->buffer; // Always start of buffer - } + // Get relative pointers + uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); + + // Copy pointer to buffer to start writing to + info->ptr_lin = &f->buffer[wr_ptr]; + + if (wr_ptr < rd_ptr) { + // Non wrapping case + info->len_lin = rd_ptr - wr_ptr; + info->len_wrap = 0; + info->ptr_wrap = NULL; + } else { + info->len_lin = f->depth - wr_ptr; + info->len_wrap = + remain - + info->len_lin; // Remaining length - n already was limited to remain or FIFO depth + info->ptr_wrap = f->buffer; // Always start of buffer + } } diff --git a/Libraries/tinyusb/src/common/tusb_fifo.h b/Libraries/tinyusb/src/common/tusb_fifo.h index 6c0efb50907..9f955cd410e 100644 --- a/Libraries/tinyusb/src/common/tusb_fifo.h +++ b/Libraries/tinyusb/src/common/tusb_fifo.h @@ -46,7 +46,7 @@ extern "C" { // mutex is only needed for RTOS // for OS None, we don't get preempted -#define CFG_FIFO_MUTEX OSAL_MUTEX_REQUIRED +#define CFG_FIFO_MUTEX OSAL_MUTEX_REQUIRED /* Write/Read index is always in the range of: * 0 .. 2*depth-1 @@ -104,92 +104,93 @@ extern "C" { * | R | 1 | 2 | W | 4 | 5 | */ typedef struct { - uint8_t* buffer ; // buffer pointer - uint16_t depth ; // max items + uint8_t *buffer; // buffer pointer + uint16_t depth; // max items - struct TU_ATTR_PACKED { - uint16_t item_size : 15; // size of each item - bool overwritable : 1 ; // ovwerwritable when full - }; + struct TU_ATTR_PACKED { + uint16_t item_size : 15; // size of each item + bool overwritable : 1; // ovwerwritable when full + }; - volatile uint16_t wr_idx ; // write index - volatile uint16_t rd_idx ; // read index + volatile uint16_t wr_idx; // write index + volatile uint16_t rd_idx; // read index #if OSAL_MUTEX_REQUIRED - osal_mutex_t mutex_wr; - osal_mutex_t mutex_rd; + osal_mutex_t mutex_wr; + osal_mutex_t mutex_rd; #endif } tu_fifo_t; typedef struct { - uint16_t len_lin ; ///< linear length in item size - uint16_t len_wrap ; ///< wrapped length in item size - void * ptr_lin ; ///< linear part start pointer - void * ptr_wrap ; ///< wrapped part start pointer + uint16_t len_lin; ///< linear length in item size + uint16_t len_wrap; ///< wrapped length in item size + void *ptr_lin; ///< linear part start pointer + void *ptr_wrap; ///< wrapped part start pointer } tu_fifo_buffer_info_t; -#define TU_FIFO_INIT(_buffer, _depth, _type, _overwritable){\ - .buffer = _buffer, \ - .depth = _depth, \ - .item_size = sizeof(_type), \ - .overwritable = _overwritable, \ -} +#define TU_FIFO_INIT(_buffer, _depth, _type, _overwritable) \ + { \ + .buffer = _buffer, .depth = _depth, .item_size = sizeof(_type), \ + .overwritable = _overwritable, \ + } -#define TU_FIFO_DEF(_name, _depth, _type, _overwritable) \ - uint8_t _name##_buf[_depth*sizeof(_type)]; \ +#define TU_FIFO_DEF(_name, _depth, _type, _overwritable) \ + uint8_t _name##_buf[_depth * sizeof(_type)]; \ tu_fifo_t _name = TU_FIFO_INIT(_name##_buf, _depth, _type, _overwritable) bool tu_fifo_set_overwritable(tu_fifo_t *f, bool overwritable); bool tu_fifo_clear(tu_fifo_t *f); -bool tu_fifo_config(tu_fifo_t *f, void* buffer, uint16_t depth, uint16_t item_size, bool overwritable); +bool tu_fifo_config(tu_fifo_t *f, void *buffer, uint16_t depth, uint16_t item_size, + bool overwritable); #if OSAL_MUTEX_REQUIRED -TU_ATTR_ALWAYS_INLINE static inline -void tu_fifo_config_mutex(tu_fifo_t *f, osal_mutex_t wr_mutex, osal_mutex_t rd_mutex) { - f->mutex_wr = wr_mutex; - f->mutex_rd = rd_mutex; +TU_ATTR_ALWAYS_INLINE static inline void tu_fifo_config_mutex(tu_fifo_t *f, osal_mutex_t wr_mutex, + osal_mutex_t rd_mutex) +{ + f->mutex_wr = wr_mutex; + f->mutex_rd = rd_mutex; } #else #define tu_fifo_config_mutex(_f, _wr_mutex, _rd_mutex) #endif -bool tu_fifo_write (tu_fifo_t* f, void const * p_data); -uint16_t tu_fifo_write_n (tu_fifo_t* f, void const * p_data, uint16_t n); +bool tu_fifo_write(tu_fifo_t *f, void const *p_data); +uint16_t tu_fifo_write_n(tu_fifo_t *f, void const *p_data, uint16_t n); #ifdef TUP_MEM_CONST_ADDR -uint16_t tu_fifo_write_n_const_addr_full_words (tu_fifo_t* f, const void * data, uint16_t n); +uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t *f, const void *data, uint16_t n); #endif -bool tu_fifo_read (tu_fifo_t* f, void * p_buffer); -uint16_t tu_fifo_read_n (tu_fifo_t* f, void * p_buffer, uint16_t n); +bool tu_fifo_read(tu_fifo_t *f, void *p_buffer); +uint16_t tu_fifo_read_n(tu_fifo_t *f, void *p_buffer, uint16_t n); #ifdef TUP_MEM_CONST_ADDR -uint16_t tu_fifo_read_n_const_addr_full_words (tu_fifo_t* f, void * buffer, uint16_t n); +uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t *f, void *buffer, uint16_t n); #endif -bool tu_fifo_peek (tu_fifo_t* f, void * p_buffer); -uint16_t tu_fifo_peek_n (tu_fifo_t* f, void * p_buffer, uint16_t n); +bool tu_fifo_peek(tu_fifo_t *f, void *p_buffer); +uint16_t tu_fifo_peek_n(tu_fifo_t *f, void *p_buffer, uint16_t n); -uint16_t tu_fifo_count (tu_fifo_t* f); -uint16_t tu_fifo_remaining (tu_fifo_t* f); -bool tu_fifo_empty (tu_fifo_t* f); -bool tu_fifo_full (tu_fifo_t* f); -bool tu_fifo_overflowed (tu_fifo_t* f); -void tu_fifo_correct_read_pointer (tu_fifo_t* f); +uint16_t tu_fifo_count(tu_fifo_t *f); +uint16_t tu_fifo_remaining(tu_fifo_t *f); +bool tu_fifo_empty(tu_fifo_t *f); +bool tu_fifo_full(tu_fifo_t *f); +bool tu_fifo_overflowed(tu_fifo_t *f); +void tu_fifo_correct_read_pointer(tu_fifo_t *f); -TU_ATTR_ALWAYS_INLINE static inline -uint16_t tu_fifo_depth(tu_fifo_t* f) { - return f->depth; +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_fifo_depth(tu_fifo_t *f) +{ + return f->depth; } // Pointer modifications intended to be used in combinations with DMAs. // USE WITH CARE - NO SAFETY CHECKS CONDUCTED HERE! NOT MUTEX PROTECTED! void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n); -void tu_fifo_advance_read_pointer (tu_fifo_t *f, uint16_t n); +void tu_fifo_advance_read_pointer(tu_fifo_t *f, uint16_t n); // If you want to read/write from/to the FIFO by use of a DMA, you may need to conduct two copies // to handle a possible wrapping part. These functions deliver a pointer to start // reading/writing from/to and a valid linear length along which no wrap occurs. -void tu_fifo_get_read_info (tu_fifo_t *f, tu_fifo_buffer_info_t *info); +void tu_fifo_get_read_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info); void tu_fifo_get_write_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info); #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/common/tusb_mcu.h b/Libraries/tinyusb/src/common/tusb_mcu.h index e86f55c1dce..3c0d3724f86 100644 --- a/Libraries/tinyusb/src/common/tusb_mcu.h +++ b/Libraries/tinyusb/src/common/tusb_mcu.h @@ -35,16 +35,16 @@ //------------- Unaligned Memory Access -------------// #ifdef __ARM_ARCH - // ARM Architecture set __ARM_FEATURE_UNALIGNED to 1 for mcu supports unaligned access - #if defined(__ARM_FEATURE_UNALIGNED) && __ARM_FEATURE_UNALIGNED == 1 - #define TUP_ARCH_STRICT_ALIGN 0 - #else - #define TUP_ARCH_STRICT_ALIGN 1 - #endif +// ARM Architecture set __ARM_FEATURE_UNALIGNED to 1 for mcu supports unaligned access +#if defined(__ARM_FEATURE_UNALIGNED) && __ARM_FEATURE_UNALIGNED == 1 +#define TUP_ARCH_STRICT_ALIGN 0 #else - // TODO default to strict align for others - // Should investigate other architecture such as risv, xtensa, mips for optimal setting - #define TUP_ARCH_STRICT_ALIGN 1 +#define TUP_ARCH_STRICT_ALIGN 1 +#endif +#else +// TODO default to strict align for others +// Should investigate other architecture such as risv, xtensa, mips for optimal setting +#define TUP_ARCH_STRICT_ALIGN 1 #endif /* USB Controller Attributes for Device, Host or MCU (both) @@ -57,430 +57,433 @@ //--------------------------------------------------------------------+ // NXP //--------------------------------------------------------------------+ -#if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) - #define TUP_USBIP_IP3511 - #define TUP_DCD_ENDPOINT_MAX 5 +#if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) +#define TUP_USBIP_IP3511 +#define TUP_DCD_ENDPOINT_MAX 5 #elif TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) - #define TUP_DCD_ENDPOINT_MAX 16 - #define TUP_USBIP_OHCI - #define TUP_OHCI_RHPORTS 2 +#define TUP_DCD_ENDPOINT_MAX 16 +#define TUP_USBIP_OHCI +#define TUP_OHCI_RHPORTS 2 #elif TU_CHECK_MCU(OPT_MCU_LPC51UXX) - #define TUP_USBIP_IP3511 - #define TUP_DCD_ENDPOINT_MAX 5 +#define TUP_USBIP_IP3511 +#define TUP_DCD_ENDPOINT_MAX 5 #elif TU_CHECK_MCU(OPT_MCU_LPC54) - // TODO USB0 has 5, USB1 has 6 - #define TUP_USBIP_IP3511 - #define TUP_DCD_ENDPOINT_MAX 6 +// TODO USB0 has 5, USB1 has 6 +#define TUP_USBIP_IP3511 +#define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_LPC55) - // TODO USB0 has 5, USB1 has 6 - #define TUP_USBIP_IP3511 - #define TUP_DCD_ENDPOINT_MAX 6 +// TODO USB0 has 5, USB1 has 6 +#define TUP_USBIP_IP3511 +#define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_LPC18XX, OPT_MCU_LPC43XX) - // USB0 has 6 with HS PHY, USB1 has 4 only FS - #define TUP_USBIP_CHIPIDEA_HS - #define TUP_USBIP_EHCI +// USB0 has 6 with HS PHY, USB1 has 4 only FS +#define TUP_USBIP_CHIPIDEA_HS +#define TUP_USBIP_EHCI - #define TUP_DCD_ENDPOINT_MAX 6 - #define TUP_RHPORT_HIGHSPEED 1 +#define TUP_DCD_ENDPOINT_MAX 6 +#define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_MCXN9) - // USB0 is chipidea FS - #define TUP_USBIP_CHIPIDEA_FS - #define TUP_USBIP_CHIPIDEA_FS_MCX +// USB0 is chipidea FS +#define TUP_USBIP_CHIPIDEA_FS +#define TUP_USBIP_CHIPIDEA_FS_MCX - // USB1 is chipidea HS - #define TUP_USBIP_CHIPIDEA_HS - #define TUP_USBIP_EHCI +// USB1 is chipidea HS +#define TUP_USBIP_CHIPIDEA_HS +#define TUP_USBIP_EHCI - #define TUP_DCD_ENDPOINT_MAX 8 - #define TUP_RHPORT_HIGHSPEED 1 +#define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_MCXA15) - // USB0 is chipidea FS - #define TUP_USBIP_CHIPIDEA_FS - #define TUP_USBIP_CHIPIDEA_FS_MCX +// USB0 is chipidea FS +#define TUP_USBIP_CHIPIDEA_FS +#define TUP_USBIP_CHIPIDEA_FS_MCX - #define TUP_DCD_ENDPOINT_MAX 16 +#define TUP_DCD_ENDPOINT_MAX 16 #elif TU_CHECK_MCU(OPT_MCU_MIMXRT1XXX) - #define TUP_USBIP_CHIPIDEA_HS - #define TUP_USBIP_EHCI +#define TUP_USBIP_CHIPIDEA_HS +#define TUP_USBIP_EHCI - #define TUP_DCD_ENDPOINT_MAX 8 - #define TUP_RHPORT_HIGHSPEED 1 +#define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_KINETIS_KL, OPT_MCU_KINETIS_K32L, OPT_MCU_KINETIS_K) - #define TUP_USBIP_CHIPIDEA_FS - #define TUP_USBIP_CHIPIDEA_FS_KINETIS - #define TUP_DCD_ENDPOINT_MAX 16 +#define TUP_USBIP_CHIPIDEA_FS +#define TUP_USBIP_CHIPIDEA_FS_KINETIS +#define TUP_DCD_ENDPOINT_MAX 16 #elif TU_CHECK_MCU(OPT_MCU_MM32F327X) - #define TUP_DCD_ENDPOINT_MAX 16 +#define TUP_DCD_ENDPOINT_MAX 16 //--------------------------------------------------------------------+ // Nordic //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_NRF5X) - // 8 CBI + 1 ISO - #define TUP_DCD_ENDPOINT_MAX 9 +// 8 CBI + 1 ISO +#define TUP_DCD_ENDPOINT_MAX 9 //--------------------------------------------------------------------+ // Microchip //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_SAMD21, OPT_MCU_SAMD51, OPT_MCU_SAME5X) || \ - TU_CHECK_MCU(OPT_MCU_SAMD11, OPT_MCU_SAML21, OPT_MCU_SAML22) - #define TUP_DCD_ENDPOINT_MAX 8 + TU_CHECK_MCU(OPT_MCU_SAMD11, OPT_MCU_SAML21, OPT_MCU_SAML22) +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_SAMG) - #define TUP_DCD_ENDPOINT_MAX 6 - #define TUD_ENDPOINT_EXCLUSIVE_NUMBER +#define TUP_DCD_ENDPOINT_MAX 6 +#define TUD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_SAMX7X) - #define TUP_DCD_ENDPOINT_MAX 10 - #define TUP_RHPORT_HIGHSPEED 1 - #define TUD_ENDPOINT_EXCLUSIVE_NUMBER +#define TUP_DCD_ENDPOINT_MAX 10 +#define TUP_RHPORT_HIGHSPEED 1 +#define TUD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_PIC32MZ) - #define TUP_DCD_ENDPOINT_MAX 8 - #define TUD_ENDPOINT_EXCLUSIVE_NUMBER +#define TUP_DCD_ENDPOINT_MAX 8 +#define TUD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_PIC32MX, OPT_MCU_PIC32MM, OPT_MCU_PIC32MK) || \ - TU_CHECK_MCU(OPT_MCU_PIC24, OPT_MCU_DSPIC33) - #define TUP_DCD_ENDPOINT_MAX 16 - #define TUD_ENDPOINT_EXCLUSIVE_NUMBER + TU_CHECK_MCU(OPT_MCU_PIC24, OPT_MCU_DSPIC33) +#define TUP_DCD_ENDPOINT_MAX 16 +#define TUD_ENDPOINT_EXCLUSIVE_NUMBER //--------------------------------------------------------------------+ // ST //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_STM32F0) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32F1) - // - F102, F103 use fsdev - // - F105, F107 use dwc2 - #if defined (STM32F105x8) || defined (STM32F105xB) || defined (STM32F105xC) || \ - defined (STM32F107xB) || defined (STM32F107xC) - #define TUP_USBIP_DWC2 - #define TUP_USBIP_DWC2_STM32 - - #define TUP_DCD_ENDPOINT_MAX 4 - #elif defined(STM32F102x6) || defined(STM32F102xB) || \ - defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 - #else - #error "Unsupported STM32F1 mcu" - #endif +// - F102, F103 use fsdev +// - F105, F107 use dwc2 +#if defined(STM32F105x8) || defined(STM32F105xB) || defined(STM32F105xC) || \ + defined(STM32F107xB) || defined(STM32F107xC) +#define TUP_USBIP_DWC2 +#define TUP_USBIP_DWC2_STM32 + +#define TUP_DCD_ENDPOINT_MAX 4 +#elif defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || \ + defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 +#else +#error "Unsupported STM32F1 mcu" +#endif #elif TU_CHECK_MCU(OPT_MCU_STM32F2) - #define TUP_USBIP_DWC2 - #define TUP_USBIP_DWC2_STM32 +#define TUP_USBIP_DWC2 +#define TUP_USBIP_DWC2_STM32 - // FS has 4 ep, HS has 5 ep - #define TUP_DCD_ENDPOINT_MAX 6 +// FS has 4 ep, HS has 5 ep +#define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_STM32F3) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32F4) - #define TUP_USBIP_DWC2 - #define TUP_USBIP_DWC2_STM32 +#define TUP_USBIP_DWC2 +#define TUP_USBIP_DWC2_STM32 - // For most mcu, FS has 4, HS has 6. TODO 446/469/479 HS has 9 - #define TUP_DCD_ENDPOINT_MAX 6 +// For most mcu, FS has 4, HS has 6. TODO 446/469/479 HS has 9 +#define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_STM32F7) - #define TUP_USBIP_DWC2 - #define TUP_USBIP_DWC2_STM32 +#define TUP_USBIP_DWC2 +#define TUP_USBIP_DWC2_STM32 - // FS has 6, HS has 9 - #define TUP_DCD_ENDPOINT_MAX 9 +// FS has 6, HS has 9 +#define TUP_DCD_ENDPOINT_MAX 9 - // MCU with on-chip HS Phy - #if defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F733xx) - #define TUP_RHPORT_HIGHSPEED 1 // Port0: FS, Port1: HS - #endif +// MCU with on-chip HS Phy +#if defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F733xx) +#define TUP_RHPORT_HIGHSPEED 1 // Port0: FS, Port1: HS +#endif #elif TU_CHECK_MCU(OPT_MCU_STM32H7) - #define TUP_USBIP_DWC2 - #define TUP_USBIP_DWC2_STM32 +#define TUP_USBIP_DWC2 +#define TUP_USBIP_DWC2_STM32 - #define TUP_DCD_ENDPOINT_MAX 9 +#define TUP_DCD_ENDPOINT_MAX 9 #elif TU_CHECK_MCU(OPT_MCU_STM32H5) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32G4) - // Device controller - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 +// Device controller +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 - // TypeC controller - #define TUP_USBIP_TYPEC_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 - #define TUP_TYPEC_RHPORTS_NUM 1 +// TypeC controller +#define TUP_USBIP_TYPEC_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_TYPEC_RHPORTS_NUM 1 #elif TU_CHECK_MCU(OPT_MCU_STM32G0) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32L0, OPT_MCU_STM32L1) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32L4) - // - L4x2, L4x3 use fsdev - // - L4x4, L4x6, L4x7, L4x9 use dwc2 - #if defined (STM32L475xx) || defined (STM32L476xx) || \ - defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || \ - defined (STM32L4A6xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || \ - defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || \ - defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) - #define TUP_USBIP_DWC2 - #define TUP_USBIP_DWC2_STM32 - - #define TUP_DCD_ENDPOINT_MAX 6 - #elif defined(STM32L412xx) || defined(STM32L422xx) || defined(STM32L432xx) || defined(STM32L433xx) || \ - defined(STM32L442xx) || defined(STM32L443xx) || defined(STM32L452xx) || defined(STM32L462xx) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 - #else - #error "Unsupported STM32L4 mcu" - #endif +// - L4x2, L4x3 use fsdev +// - L4x4, L4x6, L4x7, L4x9 use dwc2 +#if defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || \ + defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4P5xx) || defined(STM32L4Q5xx) || defined(STM32L4R5xx) || \ + defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || \ + defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define TUP_USBIP_DWC2 +#define TUP_USBIP_DWC2_STM32 + +#define TUP_DCD_ENDPOINT_MAX 6 +#elif defined(STM32L412xx) || defined(STM32L422xx) || defined(STM32L432xx) || \ + defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ + defined(STM32L452xx) || defined(STM32L462xx) +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 +#else +#error "Unsupported STM32L4 mcu" +#endif #elif TU_CHECK_MCU(OPT_MCU_STM32WB) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32U5) - #if defined (STM32U535xx) || defined (STM32U545xx) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 - - #else - #define TUP_USBIP_DWC2 - #define TUP_USBIP_DWC2_STM32 - - // U59x/5Ax/5Fx/5Gx are highspeed with built-in HS PHY - #if defined(STM32U595xx) || defined(STM32U599xx) || defined(STM32U5A5xx) || defined(STM32U5A9xx) || \ - defined(STM32U5F7xx) || defined(STM32U5F9xx) || defined(STM32U5G7xx) || defined(STM32U5G9xx) - #define TUP_DCD_ENDPOINT_MAX 9 - #define TUP_RHPORT_HIGHSPEED 1 - #else - #define TUP_DCD_ENDPOINT_MAX 6 - #endif - #endif +#if defined(STM32U535xx) || defined(STM32U545xx) +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 + +#else +#define TUP_USBIP_DWC2 +#define TUP_USBIP_DWC2_STM32 + +// U59x/5Ax/5Fx/5Gx are highspeed with built-in HS PHY +#if defined(STM32U595xx) || defined(STM32U599xx) || defined(STM32U5A5xx) || \ + defined(STM32U5A9xx) || defined(STM32U5F7xx) || defined(STM32U5F9xx) || \ + defined(STM32U5G7xx) || defined(STM32U5G9xx) +#define TUP_DCD_ENDPOINT_MAX 9 +#define TUP_RHPORT_HIGHSPEED 1 +#else +#define TUP_DCD_ENDPOINT_MAX 6 +#endif +#endif #elif TU_CHECK_MCU(OPT_MCU_STM32L5) - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_STM32 - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_STM32 +#define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // Sony //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_CXD56) - #define TUP_DCD_ENDPOINT_MAX 7 - #define TUP_RHPORT_HIGHSPEED 1 - #define TUD_ENDPOINT_EXCLUSIVE_NUMBER +#define TUP_DCD_ENDPOINT_MAX 7 +#define TUP_RHPORT_HIGHSPEED 1 +#define TUD_ENDPOINT_EXCLUSIVE_NUMBER //--------------------------------------------------------------------+ // TI //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_MSP430x5xx) - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_MSP432E4, OPT_MCU_TM4C123, OPT_MCU_TM4C129) - #define TUP_USBIP_MUSB - #define TUP_USBIP_MUSB_TI - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_MUSB +#define TUP_USBIP_MUSB_TI +#define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // ValentyUSB (Litex) //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_VALENTYUSB_EPTRI) - #define TUP_DCD_ENDPOINT_MAX 16 +#define TUP_DCD_ENDPOINT_MAX 16 //--------------------------------------------------------------------+ // Nuvoton //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_NUC121, OPT_MCU_NUC126) - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_NUC120) - #define TUP_DCD_ENDPOINT_MAX 6 +#define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_NUC505) - #define TUP_DCD_ENDPOINT_MAX 12 - #define TUP_RHPORT_HIGHSPEED 1 +#define TUP_DCD_ENDPOINT_MAX 12 +#define TUP_RHPORT_HIGHSPEED 1 //--------------------------------------------------------------------+ // Espressif //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3) - #define TUP_USBIP_DWC2 - #define TUP_DCD_ENDPOINT_MAX 6 +#define TUP_USBIP_DWC2 +#define TUP_DCD_ENDPOINT_MAX 6 -#elif TU_CHECK_MCU(OPT_MCU_ESP32, OPT_MCU_ESP32C2, OPT_MCU_ESP32C3, OPT_MCU_ESP32C6, OPT_MCU_ESP32H2) - #if (CFG_TUD_ENABLED || !(defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421)) - #error "MCUs are only supported with CFG_TUH_MAX3421 enabled" - #endif - #define TUP_DCD_ENDPOINT_MAX 0 +#elif TU_CHECK_MCU(OPT_MCU_ESP32, OPT_MCU_ESP32C2, OPT_MCU_ESP32C3, OPT_MCU_ESP32C6, \ + OPT_MCU_ESP32H2) +#if (CFG_TUD_ENABLED || !(defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421)) +#error "MCUs are only supported with CFG_TUH_MAX3421 enabled" +#endif +#define TUP_DCD_ENDPOINT_MAX 0 //--------------------------------------------------------------------+ // Dialog //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_DA1469X) - #define TUP_DCD_ENDPOINT_MAX 4 +#define TUP_DCD_ENDPOINT_MAX 4 //--------------------------------------------------------------------+ // Raspberry Pi //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_RP2040) - #define TUP_DCD_ENDPOINT_MAX 16 +#define TUP_DCD_ENDPOINT_MAX 16 - #define TU_ATTR_FAST_FUNC __attribute__((section(".time_critical.tinyusb"))) +#define TU_ATTR_FAST_FUNC __attribute__((section(".time_critical.tinyusb"))) //--------------------------------------------------------------------+ // Silabs //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_EFM32GG) - #define TUP_USBIP_DWC2 - #define TUP_DCD_ENDPOINT_MAX 7 +#define TUP_USBIP_DWC2 +#define TUP_DCD_ENDPOINT_MAX 7 //--------------------------------------------------------------------+ // Renesas //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_RX63X, OPT_MCU_RX65X, OPT_MCU_RX72N, OPT_MCU_RAXXX) - #define TUP_USBIP_RUSB2 - #define TUP_DCD_ENDPOINT_MAX 10 +#define TUP_USBIP_RUSB2 +#define TUP_DCD_ENDPOINT_MAX 10 //--------------------------------------------------------------------+ // GigaDevice //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_GD32VF103) - #define TUP_USBIP_DWC2 - #define TUP_DCD_ENDPOINT_MAX 4 +#define TUP_USBIP_DWC2 +#define TUP_DCD_ENDPOINT_MAX 4 //--------------------------------------------------------------------+ // Broadcom //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_BCM2711, OPT_MCU_BCM2835, OPT_MCU_BCM2837) - #define TUP_USBIP_DWC2 - #define TUP_DCD_ENDPOINT_MAX 8 - #define TUP_RHPORT_HIGHSPEED 1 +#define TUP_USBIP_DWC2 +#define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_RHPORT_HIGHSPEED 1 //--------------------------------------------------------------------+ // Infineon //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_XMC4000) - #define TUP_USBIP_DWC2 - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_USBIP_DWC2 +#define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // BridgeTek //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_FT90X) - #define TUP_DCD_ENDPOINT_MAX 8 - #define TUP_RHPORT_HIGHSPEED 1 - #define TUD_ENDPOINT_EXCLUSIVE_NUMBER +#define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_RHPORT_HIGHSPEED 1 +#define TUD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_FT93X) - #define TUP_DCD_ENDPOINT_MAX 16 - #define TUP_RHPORT_HIGHSPEED 1 - #define TUD_ENDPOINT_EXCLUSIVE_NUMBER +#define TUP_DCD_ENDPOINT_MAX 16 +#define TUP_RHPORT_HIGHSPEED 1 +#define TUD_ENDPOINT_EXCLUSIVE_NUMBER //--------------------------------------------------------------------+ // Allwinner //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_F1C100S) - #define TUP_DCD_ENDPOINT_MAX 4 +#define TUP_DCD_ENDPOINT_MAX 4 //--------------------------------------------------------------------+ // WCH //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_CH32F20X) - #define TUP_USBIP_WCH_USBHS - #define TUP_USBIP_WCH_USBFS +#define TUP_USBIP_WCH_USBHS +#define TUP_USBIP_WCH_USBFS - #if !defined(CFG_TUD_WCH_USBIP_USBFS) - #define CFG_TUD_WCH_USBIP_USBFS 0 - #endif +#if !defined(CFG_TUD_WCH_USBIP_USBFS) +#define CFG_TUD_WCH_USBIP_USBFS 0 +#endif - #if !defined(CFG_TUD_WCH_USBIP_USBHS) - #define CFG_TUD_WCH_USBIP_USBHS (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) - #endif +#if !defined(CFG_TUD_WCH_USBIP_USBHS) +#define CFG_TUD_WCH_USBIP_USBHS (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) +#endif - #define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS - #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) +#define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS +#define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) #elif TU_CHECK_MCU(OPT_MCU_CH32V103) - #define TUP_USBIP_WCH_USBFS +#define TUP_USBIP_WCH_USBFS - #if !defined(CFG_TUD_WCH_USBIP_USBFS) - #define CFG_TUD_WCH_USBIP_USBFS 1 - #endif +#if !defined(CFG_TUD_WCH_USBIP_USBFS) +#define CFG_TUD_WCH_USBIP_USBFS 1 +#endif - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_CH32V20X) - // v20x support both FSDEV (USBD) and USBFS, default to FSDEV - #define TUP_USBIP_WCH_USBFS - #define TUP_USBIP_FSDEV - #define TUP_USBIP_FSDEV_CH32 +// v20x support both FSDEV (USBD) and USBFS, default to FSDEV +#define TUP_USBIP_WCH_USBFS +#define TUP_USBIP_FSDEV +#define TUP_USBIP_FSDEV_CH32 - #if !defined(CFG_TUD_WCH_USBIP_USBFS) - #define CFG_TUD_WCH_USBIP_USBFS 0 - #endif +#if !defined(CFG_TUD_WCH_USBIP_USBFS) +#define CFG_TUD_WCH_USBIP_USBFS 0 +#endif - #if !defined(CFG_TUD_WCH_USBIP_FSDEV) - #define CFG_TUD_WCH_USBIP_FSDEV (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) - #endif +#if !defined(CFG_TUD_WCH_USBIP_FSDEV) +#define CFG_TUD_WCH_USBIP_FSDEV (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) +#endif - #define TUP_DCD_ENDPOINT_MAX 8 +#define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_CH32V307) - // v307 support both FS and HS, default to HS - #define TUP_USBIP_WCH_USBHS - #define TUP_USBIP_WCH_USBFS +// v307 support both FS and HS, default to HS +#define TUP_USBIP_WCH_USBHS +#define TUP_USBIP_WCH_USBFS - #if !defined(CFG_TUD_WCH_USBIP_USBFS) - #define CFG_TUD_WCH_USBIP_USBFS 0 - #endif +#if !defined(CFG_TUD_WCH_USBIP_USBFS) +#define CFG_TUD_WCH_USBIP_USBFS 0 +#endif - #if !defined(CFG_TUD_WCH_USBIP_USBHS) - #define CFG_TUD_WCH_USBIP_USBHS (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) - #endif +#if !defined(CFG_TUD_WCH_USBIP_USBHS) +#define CFG_TUD_WCH_USBIP_USBHS (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) +#endif - #define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS - #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) +#define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS +#define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) //--------------------------------------------------------------------+ // Analog Devices //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_MAX32650, OPT_MCU_MAX32666, OPT_MCU_MAX32690, OPT_MCU_MAX78002) - #define TUP_USBIP_MUSB - #define TUP_USBIP_MUSB_ADI - #define TUP_DCD_ENDPOINT_MAX 12 - #define TUP_RHPORT_HIGHSPEED 1 - #define TUD_ENDPOINT_EXCLUSIVE_NUMBER +#define TUP_USBIP_MUSB +#define TUP_USBIP_MUSB_ADI +#define TUP_DCD_ENDPOINT_MAX 12 +#define TUP_RHPORT_HIGHSPEED 1 +#define TUD_ENDPOINT_EXCLUSIVE_NUMBER #endif @@ -489,11 +492,10 @@ //--------------------------------------------------------------------+ #if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421 - #ifndef CFG_TUH_MAX3421_ENDPOINT_TOTAL - #define CFG_TUH_MAX3421_ENDPOINT_TOTAL (8 + 4*(CFG_TUH_DEVICE_MAX-1)) - #endif +#ifndef CFG_TUH_MAX3421_ENDPOINT_TOTAL +#define CFG_TUH_MAX3421_ENDPOINT_TOTAL (8 + 4 * (CFG_TUH_DEVICE_MAX - 1)) +#endif #endif - //--------------------------------------------------------------------+ // Default Values @@ -504,27 +506,27 @@ #endif #if !defined(TUP_DCD_ENDPOINT_MAX) && defined(CFG_TUD_ENABLED) && CFG_TUD_ENABLED - #warning "TUP_DCD_ENDPOINT_MAX is not defined for this MCU, default to 8" - #define TUP_DCD_ENDPOINT_MAX 8 +#warning "TUP_DCD_ENDPOINT_MAX is not defined for this MCU, default to 8" +#define TUP_DCD_ENDPOINT_MAX 8 #endif // Default to fullspeed if not defined #ifndef TUP_RHPORT_HIGHSPEED - #define TUP_RHPORT_HIGHSPEED 0 +#define TUP_RHPORT_HIGHSPEED 0 #endif // fast function, normally mean placing function in SRAM #ifndef TU_ATTR_FAST_FUNC - #define TU_ATTR_FAST_FUNC +#define TU_ATTR_FAST_FUNC #endif // USBIP that support ISO alloc & activate API #if defined(TUP_USBIP_DWC2) || defined(TUP_USBIP_FSDEV) || defined(TUP_USBIP_MUSB) - #define TUP_DCD_EDPT_ISO_ALLOC +#define TUP_DCD_EDPT_ISO_ALLOC #endif #if defined(TUP_USBIP_DWC2) - #define TUP_MEM_CONST_ADDR +#define TUP_MEM_CONST_ADDR #endif #endif diff --git a/Libraries/tinyusb/src/common/tusb_private.h b/Libraries/tinyusb/src/common/tusb_private.h index 373a502564c..fd288062252 100644 --- a/Libraries/tinyusb/src/common/tusb_private.h +++ b/Libraries/tinyusb/src/common/tusb_private.h @@ -24,96 +24,97 @@ * This file is part of the TinyUSB stack. */ - #ifndef _TUSB_PRIVATE_H_ #define _TUSB_PRIVATE_H_ // Internal Helper used by Host and Device Stack #ifdef __cplusplus - extern "C" { +extern "C" { #endif -typedef struct TU_ATTR_PACKED -{ - volatile uint8_t busy : 1; - volatile uint8_t stalled : 1; - volatile uint8_t claimed : 1; -}tu_edpt_state_t; +typedef struct TU_ATTR_PACKED { + volatile uint8_t busy : 1; + volatile uint8_t stalled : 1; + volatile uint8_t claimed : 1; +} tu_edpt_state_t; typedef struct { - bool is_host; // host or device most - union { - uint8_t daddr; - uint8_t rhport; - uint8_t hwid; - }; - uint8_t ep_addr; - uint8_t ep_speed; + bool is_host; // host or device most + union { + uint8_t daddr; + uint8_t rhport; + uint8_t hwid; + }; + uint8_t ep_addr; + uint8_t ep_speed; - uint16_t ep_packetsize; - uint16_t ep_bufsize; + uint16_t ep_packetsize; + uint16_t ep_bufsize; - // TODO xfer_fifo can skip this buffer - uint8_t* ep_buf; + // TODO xfer_fifo can skip this buffer + uint8_t *ep_buf; - tu_fifo_t ff; + tu_fifo_t ff; - // mutex: read if ep rx, write if e tx - OSAL_MUTEX_DEF(ff_mutexdef); + // mutex: read if ep rx, write if e tx + OSAL_MUTEX_DEF(ff_mutexdef); -}tu_edpt_stream_t; +} tu_edpt_stream_t; //--------------------------------------------------------------------+ // Endpoint //--------------------------------------------------------------------+ // Check if endpoint descriptor is valid per USB specs -bool tu_edpt_validate(tusb_desc_endpoint_t const * desc_ep, tusb_speed_t speed); +bool tu_edpt_validate(tusb_desc_endpoint_t const *desc_ep, tusb_speed_t speed); // Bind all endpoint of a interface descriptor to class driver -void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const* p_desc, uint16_t desc_len, uint8_t driver_id); +void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const *p_desc, + uint16_t desc_len, uint8_t driver_id); // Calculate total length of n interfaces (depending on IAD) -uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const* desc_itf, uint8_t itf_count, uint16_t max_len); +uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const *desc_itf, uint8_t itf_count, + uint16_t max_len); // Claim an endpoint with provided mutex -bool tu_edpt_claim(tu_edpt_state_t* ep_state, osal_mutex_t mutex); +bool tu_edpt_claim(tu_edpt_state_t *ep_state, osal_mutex_t mutex); // Release an endpoint with provided mutex -bool tu_edpt_release(tu_edpt_state_t* ep_state, osal_mutex_t mutex); +bool tu_edpt_release(tu_edpt_state_t *ep_state, osal_mutex_t mutex); //--------------------------------------------------------------------+ // Endpoint Stream //--------------------------------------------------------------------+ // Init an endpoint stream -bool tu_edpt_stream_init(tu_edpt_stream_t* s, bool is_host, bool is_tx, bool overwritable, - void* ff_buf, uint16_t ff_bufsize, uint8_t* ep_buf, uint16_t ep_bufsize); +bool tu_edpt_stream_init(tu_edpt_stream_t *s, bool is_host, bool is_tx, bool overwritable, + void *ff_buf, uint16_t ff_bufsize, uint8_t *ep_buf, uint16_t ep_bufsize); // Deinit an endpoint stream -bool tu_edpt_stream_deinit(tu_edpt_stream_t* s); +bool tu_edpt_stream_deinit(tu_edpt_stream_t *s); // Open an stream for an endpoint // hwid is either device address (host mode) or rhport (device mode) -TU_ATTR_ALWAYS_INLINE static inline -void tu_edpt_stream_open(tu_edpt_stream_t* s, uint8_t hwid, tusb_desc_endpoint_t const *desc_ep) { - tu_fifo_clear(&s->ff); - s->hwid = hwid; - s->ep_addr = desc_ep->bEndpointAddress; - s->ep_packetsize = tu_edpt_packet_size(desc_ep); +TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_open(tu_edpt_stream_t *s, uint8_t hwid, + tusb_desc_endpoint_t const *desc_ep) +{ + tu_fifo_clear(&s->ff); + s->hwid = hwid; + s->ep_addr = desc_ep->bEndpointAddress; + s->ep_packetsize = tu_edpt_packet_size(desc_ep); } -TU_ATTR_ALWAYS_INLINE static inline -void tu_edpt_stream_close(tu_edpt_stream_t* s) { - s->hwid = 0; - s->ep_addr = 0; +TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_close(tu_edpt_stream_t *s) +{ + s->hwid = 0; + s->ep_addr = 0; } // Clear fifo -TU_ATTR_ALWAYS_INLINE static inline -bool tu_edpt_stream_clear(tu_edpt_stream_t* s) { - return tu_fifo_clear(&s->ff); +TU_ATTR_ALWAYS_INLINE static inline bool tu_edpt_stream_clear(tu_edpt_stream_t *s) +{ + return tu_fifo_clear(&s->ff); } //--------------------------------------------------------------------+ @@ -121,18 +122,18 @@ bool tu_edpt_stream_clear(tu_edpt_stream_t* s) { //--------------------------------------------------------------------+ // Write to stream -uint32_t tu_edpt_stream_write(tu_edpt_stream_t* s, void const *buffer, uint32_t bufsize); +uint32_t tu_edpt_stream_write(tu_edpt_stream_t *s, void const *buffer, uint32_t bufsize); // Start an usb transfer if endpoint is not busy -uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t* s); +uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t *s); // Start an zero-length packet if needed -bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t* s, uint32_t last_xferred_bytes); +bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t *s, uint32_t last_xferred_bytes); // Get the number of bytes available for writing -TU_ATTR_ALWAYS_INLINE static inline -uint32_t tu_edpt_stream_write_available(tu_edpt_stream_t* s) { - return (uint32_t) tu_fifo_remaining(&s->ff); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_edpt_stream_write_available(tu_edpt_stream_t *s) +{ + return (uint32_t)tu_fifo_remaining(&s->ff); } //--------------------------------------------------------------------+ @@ -140,38 +141,41 @@ uint32_t tu_edpt_stream_write_available(tu_edpt_stream_t* s) { //--------------------------------------------------------------------+ // Read from stream -uint32_t tu_edpt_stream_read(tu_edpt_stream_t* s, void* buffer, uint32_t bufsize); +uint32_t tu_edpt_stream_read(tu_edpt_stream_t *s, void *buffer, uint32_t bufsize); // Start an usb transfer if endpoint is not busy -uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t* s); +uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t *s); // Must be called in the transfer complete callback -TU_ATTR_ALWAYS_INLINE static inline -void tu_edpt_stream_read_xfer_complete(tu_edpt_stream_t* s, uint32_t xferred_bytes) { - tu_fifo_write_n(&s->ff, s->ep_buf, (uint16_t) xferred_bytes); +TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_read_xfer_complete(tu_edpt_stream_t *s, + uint32_t xferred_bytes) +{ + tu_fifo_write_n(&s->ff, s->ep_buf, (uint16_t)xferred_bytes); } // Same as tu_edpt_stream_read_xfer_complete but skip the first n bytes -TU_ATTR_ALWAYS_INLINE static inline -void tu_edpt_stream_read_xfer_complete_offset(tu_edpt_stream_t* s, uint32_t xferred_bytes, uint32_t skip_offset) { - if (skip_offset < xferred_bytes) { - tu_fifo_write_n(&s->ff, s->ep_buf + skip_offset, (uint16_t) (xferred_bytes - skip_offset)); - } +TU_ATTR_ALWAYS_INLINE static inline void +tu_edpt_stream_read_xfer_complete_offset(tu_edpt_stream_t *s, uint32_t xferred_bytes, + uint32_t skip_offset) +{ + if (skip_offset < xferred_bytes) { + tu_fifo_write_n(&s->ff, s->ep_buf + skip_offset, (uint16_t)(xferred_bytes - skip_offset)); + } } // Get the number of bytes available for reading -TU_ATTR_ALWAYS_INLINE static inline -uint32_t tu_edpt_stream_read_available(tu_edpt_stream_t* s) { - return (uint32_t) tu_fifo_count(&s->ff); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_edpt_stream_read_available(tu_edpt_stream_t *s) +{ + return (uint32_t)tu_fifo_count(&s->ff); } -TU_ATTR_ALWAYS_INLINE static inline -bool tu_edpt_stream_peek(tu_edpt_stream_t* s, uint8_t* ch) { - return tu_fifo_peek(&s->ff, ch); +TU_ATTR_ALWAYS_INLINE static inline bool tu_edpt_stream_peek(tu_edpt_stream_t *s, uint8_t *ch) +{ + return tu_fifo_peek(&s->ff, ch); } #ifdef __cplusplus - } +} #endif #endif /* _TUSB_PRIVATE_H_ */ diff --git a/Libraries/tinyusb/src/common/tusb_types.h b/Libraries/tinyusb/src/common/tusb_types.h index 1501a5af6b6..fd68b2a3103 100644 --- a/Libraries/tinyusb/src/common/tusb_types.h +++ b/Libraries/tinyusb/src/common/tusb_types.h @@ -32,7 +32,7 @@ #include "tusb_compiler.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif /*------------------------------------------------------------------*/ @@ -41,231 +41,211 @@ /// defined base on EHCI specs value for Endpoint Speed typedef enum { - TUSB_SPEED_FULL = 0, - TUSB_SPEED_LOW = 1, - TUSB_SPEED_HIGH = 2, - TUSB_SPEED_INVALID = 0xff, + TUSB_SPEED_FULL = 0, + TUSB_SPEED_LOW = 1, + TUSB_SPEED_HIGH = 2, + TUSB_SPEED_INVALID = 0xff, } tusb_speed_t; /// defined base on USB Specs Endpoint's bmAttributes typedef enum { - TUSB_XFER_CONTROL = 0 , - TUSB_XFER_ISOCHRONOUS , - TUSB_XFER_BULK , - TUSB_XFER_INTERRUPT + TUSB_XFER_CONTROL = 0, + TUSB_XFER_ISOCHRONOUS, + TUSB_XFER_BULK, + TUSB_XFER_INTERRUPT } tusb_xfer_type_t; typedef enum { - TUSB_DIR_OUT = 0, - TUSB_DIR_IN = 1, + TUSB_DIR_OUT = 0, + TUSB_DIR_IN = 1, - TUSB_DIR_IN_MASK = 0x80 + TUSB_DIR_IN_MASK = 0x80 } tusb_dir_t; enum { - TUSB_EPSIZE_BULK_FS = 64, - TUSB_EPSIZE_BULK_HS = 512, + TUSB_EPSIZE_BULK_FS = 64, + TUSB_EPSIZE_BULK_HS = 512, - TUSB_EPSIZE_ISO_FS_MAX = 1023, - TUSB_EPSIZE_ISO_HS_MAX = 1024, + TUSB_EPSIZE_ISO_FS_MAX = 1023, + TUSB_EPSIZE_ISO_HS_MAX = 1024, }; /// Isochronous Endpoint Attributes typedef enum { - TUSB_ISO_EP_ATT_NO_SYNC = 0x00, - TUSB_ISO_EP_ATT_ASYNCHRONOUS = 0x04, - TUSB_ISO_EP_ATT_ADAPTIVE = 0x08, - TUSB_ISO_EP_ATT_SYNCHRONOUS = 0x0C, - TUSB_ISO_EP_ATT_DATA = 0x00, ///< Data End Point - TUSB_ISO_EP_ATT_EXPLICIT_FB = 0x10, ///< Feedback End Point - TUSB_ISO_EP_ATT_IMPLICIT_FB = 0x20, ///< Data endpoint that also serves as an implicit feedback + TUSB_ISO_EP_ATT_NO_SYNC = 0x00, + TUSB_ISO_EP_ATT_ASYNCHRONOUS = 0x04, + TUSB_ISO_EP_ATT_ADAPTIVE = 0x08, + TUSB_ISO_EP_ATT_SYNCHRONOUS = 0x0C, + TUSB_ISO_EP_ATT_DATA = 0x00, ///< Data End Point + TUSB_ISO_EP_ATT_EXPLICIT_FB = 0x10, ///< Feedback End Point + TUSB_ISO_EP_ATT_IMPLICIT_FB = 0x20, ///< Data endpoint that also serves as an implicit feedback } tusb_iso_ep_attribute_t; /// USB Descriptor Types typedef enum { - TUSB_DESC_DEVICE = 0x01, - TUSB_DESC_CONFIGURATION = 0x02, - TUSB_DESC_STRING = 0x03, - TUSB_DESC_INTERFACE = 0x04, - TUSB_DESC_ENDPOINT = 0x05, - TUSB_DESC_DEVICE_QUALIFIER = 0x06, - TUSB_DESC_OTHER_SPEED_CONFIG = 0x07, - TUSB_DESC_INTERFACE_POWER = 0x08, - TUSB_DESC_OTG = 0x09, - TUSB_DESC_DEBUG = 0x0A, - TUSB_DESC_INTERFACE_ASSOCIATION = 0x0B, - - TUSB_DESC_BOS = 0x0F, - TUSB_DESC_DEVICE_CAPABILITY = 0x10, - - TUSB_DESC_FUNCTIONAL = 0x21, - - // Class Specific Descriptor - TUSB_DESC_CS_DEVICE = 0x21, - TUSB_DESC_CS_CONFIGURATION = 0x22, - TUSB_DESC_CS_STRING = 0x23, - TUSB_DESC_CS_INTERFACE = 0x24, - TUSB_DESC_CS_ENDPOINT = 0x25, - - TUSB_DESC_SUPERSPEED_ENDPOINT_COMPANION = 0x30, - TUSB_DESC_SUPERSPEED_ISO_ENDPOINT_COMPANION = 0x31 + TUSB_DESC_DEVICE = 0x01, + TUSB_DESC_CONFIGURATION = 0x02, + TUSB_DESC_STRING = 0x03, + TUSB_DESC_INTERFACE = 0x04, + TUSB_DESC_ENDPOINT = 0x05, + TUSB_DESC_DEVICE_QUALIFIER = 0x06, + TUSB_DESC_OTHER_SPEED_CONFIG = 0x07, + TUSB_DESC_INTERFACE_POWER = 0x08, + TUSB_DESC_OTG = 0x09, + TUSB_DESC_DEBUG = 0x0A, + TUSB_DESC_INTERFACE_ASSOCIATION = 0x0B, + + TUSB_DESC_BOS = 0x0F, + TUSB_DESC_DEVICE_CAPABILITY = 0x10, + + TUSB_DESC_FUNCTIONAL = 0x21, + + // Class Specific Descriptor + TUSB_DESC_CS_DEVICE = 0x21, + TUSB_DESC_CS_CONFIGURATION = 0x22, + TUSB_DESC_CS_STRING = 0x23, + TUSB_DESC_CS_INTERFACE = 0x24, + TUSB_DESC_CS_ENDPOINT = 0x25, + + TUSB_DESC_SUPERSPEED_ENDPOINT_COMPANION = 0x30, + TUSB_DESC_SUPERSPEED_ISO_ENDPOINT_COMPANION = 0x31 } tusb_desc_type_t; typedef enum { - TUSB_REQ_GET_STATUS = 0 , - TUSB_REQ_CLEAR_FEATURE = 1 , - TUSB_REQ_RESERVED = 2 , - TUSB_REQ_SET_FEATURE = 3 , - TUSB_REQ_RESERVED2 = 4 , - TUSB_REQ_SET_ADDRESS = 5 , - TUSB_REQ_GET_DESCRIPTOR = 6 , - TUSB_REQ_SET_DESCRIPTOR = 7 , - TUSB_REQ_GET_CONFIGURATION = 8 , - TUSB_REQ_SET_CONFIGURATION = 9 , - TUSB_REQ_GET_INTERFACE = 10 , - TUSB_REQ_SET_INTERFACE = 11 , - TUSB_REQ_SYNCH_FRAME = 12 + TUSB_REQ_GET_STATUS = 0, + TUSB_REQ_CLEAR_FEATURE = 1, + TUSB_REQ_RESERVED = 2, + TUSB_REQ_SET_FEATURE = 3, + TUSB_REQ_RESERVED2 = 4, + TUSB_REQ_SET_ADDRESS = 5, + TUSB_REQ_GET_DESCRIPTOR = 6, + TUSB_REQ_SET_DESCRIPTOR = 7, + TUSB_REQ_GET_CONFIGURATION = 8, + TUSB_REQ_SET_CONFIGURATION = 9, + TUSB_REQ_GET_INTERFACE = 10, + TUSB_REQ_SET_INTERFACE = 11, + TUSB_REQ_SYNCH_FRAME = 12 } tusb_request_code_t; typedef enum { - TUSB_REQ_FEATURE_EDPT_HALT = 0, - TUSB_REQ_FEATURE_REMOTE_WAKEUP = 1, - TUSB_REQ_FEATURE_TEST_MODE = 2 + TUSB_REQ_FEATURE_EDPT_HALT = 0, + TUSB_REQ_FEATURE_REMOTE_WAKEUP = 1, + TUSB_REQ_FEATURE_TEST_MODE = 2 } tusb_request_feature_selector_t; typedef enum { - TUSB_REQ_TYPE_STANDARD = 0, - TUSB_REQ_TYPE_CLASS, - TUSB_REQ_TYPE_VENDOR, - TUSB_REQ_TYPE_INVALID + TUSB_REQ_TYPE_STANDARD = 0, + TUSB_REQ_TYPE_CLASS, + TUSB_REQ_TYPE_VENDOR, + TUSB_REQ_TYPE_INVALID } tusb_request_type_t; typedef enum { - TUSB_REQ_RCPT_DEVICE =0, - TUSB_REQ_RCPT_INTERFACE, - TUSB_REQ_RCPT_ENDPOINT, - TUSB_REQ_RCPT_OTHER + TUSB_REQ_RCPT_DEVICE = 0, + TUSB_REQ_RCPT_INTERFACE, + TUSB_REQ_RCPT_ENDPOINT, + TUSB_REQ_RCPT_OTHER } tusb_request_recipient_t; // https://www.usb.org/defined-class-codes typedef enum { - TUSB_CLASS_UNSPECIFIED = 0 , - TUSB_CLASS_AUDIO = 1 , - TUSB_CLASS_CDC = 2 , - TUSB_CLASS_HID = 3 , - TUSB_CLASS_RESERVED_4 = 4 , - TUSB_CLASS_PHYSICAL = 5 , - TUSB_CLASS_IMAGE = 6 , - TUSB_CLASS_PRINTER = 7 , - TUSB_CLASS_MSC = 8 , - TUSB_CLASS_HUB = 9 , - TUSB_CLASS_CDC_DATA = 10 , - TUSB_CLASS_SMART_CARD = 11 , - TUSB_CLASS_RESERVED_12 = 12 , - TUSB_CLASS_CONTENT_SECURITY = 13 , - TUSB_CLASS_VIDEO = 14 , - TUSB_CLASS_PERSONAL_HEALTHCARE = 15 , - TUSB_CLASS_AUDIO_VIDEO = 16 , - - TUSB_CLASS_DIAGNOSTIC = 0xDC , - TUSB_CLASS_WIRELESS_CONTROLLER = 0xE0 , - TUSB_CLASS_MISC = 0xEF , - TUSB_CLASS_APPLICATION_SPECIFIC = 0xFE , - TUSB_CLASS_VENDOR_SPECIFIC = 0xFF + TUSB_CLASS_UNSPECIFIED = 0, + TUSB_CLASS_AUDIO = 1, + TUSB_CLASS_CDC = 2, + TUSB_CLASS_HID = 3, + TUSB_CLASS_RESERVED_4 = 4, + TUSB_CLASS_PHYSICAL = 5, + TUSB_CLASS_IMAGE = 6, + TUSB_CLASS_PRINTER = 7, + TUSB_CLASS_MSC = 8, + TUSB_CLASS_HUB = 9, + TUSB_CLASS_CDC_DATA = 10, + TUSB_CLASS_SMART_CARD = 11, + TUSB_CLASS_RESERVED_12 = 12, + TUSB_CLASS_CONTENT_SECURITY = 13, + TUSB_CLASS_VIDEO = 14, + TUSB_CLASS_PERSONAL_HEALTHCARE = 15, + TUSB_CLASS_AUDIO_VIDEO = 16, + + TUSB_CLASS_DIAGNOSTIC = 0xDC, + TUSB_CLASS_WIRELESS_CONTROLLER = 0xE0, + TUSB_CLASS_MISC = 0xEF, + TUSB_CLASS_APPLICATION_SPECIFIC = 0xFE, + TUSB_CLASS_VENDOR_SPECIFIC = 0xFF } tusb_class_code_t; -typedef enum -{ - MISC_SUBCLASS_COMMON = 2 -}misc_subclass_type_t; +typedef enum { MISC_SUBCLASS_COMMON = 2 } misc_subclass_type_t; -typedef enum { - MISC_PROTOCOL_IAD = 1 -} misc_protocol_type_t; +typedef enum { MISC_PROTOCOL_IAD = 1 } misc_protocol_type_t; -typedef enum { - APP_SUBCLASS_USBTMC = 0x03, - APP_SUBCLASS_DFU_RUNTIME = 0x01 -} app_subclass_type_t; +typedef enum { APP_SUBCLASS_USBTMC = 0x03, APP_SUBCLASS_DFU_RUNTIME = 0x01 } app_subclass_type_t; typedef enum { - DEVICE_CAPABILITY_WIRELESS_USB = 0x01, - DEVICE_CAPABILITY_USB20_EXTENSION = 0x02, - DEVICE_CAPABILITY_SUPERSPEED_USB = 0x03, - DEVICE_CAPABILITY_CONTAINER_id = 0x04, - DEVICE_CAPABILITY_PLATFORM = 0x05, - DEVICE_CAPABILITY_POWER_DELIVERY = 0x06, - DEVICE_CAPABILITY_BATTERY_INFO = 0x07, - DEVICE_CAPABILITY_PD_CONSUMER_PORT = 0x08, - DEVICE_CAPABILITY_PD_PROVIDER_PORT = 0x09, - DEVICE_CAPABILITY_SUPERSPEED_PLUS = 0x0A, - DEVICE_CAPABILITY_PRECESION_TIME_MEASUREMENT = 0x0B, - DEVICE_CAPABILITY_WIRELESS_USB_EXT = 0x0C, - DEVICE_CAPABILITY_BILLBOARD = 0x0D, - DEVICE_CAPABILITY_AUTHENTICATION = 0x0E, - DEVICE_CAPABILITY_BILLBOARD_EX = 0x0F, - DEVICE_CAPABILITY_CONFIGURATION_SUMMARY = 0x10 + DEVICE_CAPABILITY_WIRELESS_USB = 0x01, + DEVICE_CAPABILITY_USB20_EXTENSION = 0x02, + DEVICE_CAPABILITY_SUPERSPEED_USB = 0x03, + DEVICE_CAPABILITY_CONTAINER_id = 0x04, + DEVICE_CAPABILITY_PLATFORM = 0x05, + DEVICE_CAPABILITY_POWER_DELIVERY = 0x06, + DEVICE_CAPABILITY_BATTERY_INFO = 0x07, + DEVICE_CAPABILITY_PD_CONSUMER_PORT = 0x08, + DEVICE_CAPABILITY_PD_PROVIDER_PORT = 0x09, + DEVICE_CAPABILITY_SUPERSPEED_PLUS = 0x0A, + DEVICE_CAPABILITY_PRECESION_TIME_MEASUREMENT = 0x0B, + DEVICE_CAPABILITY_WIRELESS_USB_EXT = 0x0C, + DEVICE_CAPABILITY_BILLBOARD = 0x0D, + DEVICE_CAPABILITY_AUTHENTICATION = 0x0E, + DEVICE_CAPABILITY_BILLBOARD_EX = 0x0F, + DEVICE_CAPABILITY_CONFIGURATION_SUMMARY = 0x10 } device_capability_type_t; enum { - TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP = 1u << 5, - TUSB_DESC_CONFIG_ATT_SELF_POWERED = 1u << 6, + TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP = 1u << 5, + TUSB_DESC_CONFIG_ATT_SELF_POWERED = 1u << 6, }; -#define TUSB_DESC_CONFIG_POWER_MA(x) ((x)/2) +#define TUSB_DESC_CONFIG_POWER_MA(x) ((x) / 2) // USB 2.0 Spec Table 9-7: Test Mode Selectors typedef enum { - TUSB_FEATURE_TEST_J = 1, - TUSB_FEATURE_TEST_K, - TUSB_FEATURE_TEST_SE0_NAK, - TUSB_FEATURE_TEST_PACKET, - TUSB_FEATURE_TEST_FORCE_ENABLE, + TUSB_FEATURE_TEST_J = 1, + TUSB_FEATURE_TEST_K, + TUSB_FEATURE_TEST_SE0_NAK, + TUSB_FEATURE_TEST_PACKET, + TUSB_FEATURE_TEST_FORCE_ENABLE, } tusb_feature_test_mode_t; //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ typedef enum { - XFER_RESULT_SUCCESS = 0, - XFER_RESULT_FAILED, - XFER_RESULT_STALLED, - XFER_RESULT_TIMEOUT, - XFER_RESULT_INVALID + XFER_RESULT_SUCCESS = 0, + XFER_RESULT_FAILED, + XFER_RESULT_STALLED, + XFER_RESULT_TIMEOUT, + XFER_RESULT_INVALID } xfer_result_t; // TODO remove -enum { - DESC_OFFSET_LEN = 0, - DESC_OFFSET_TYPE = 1 -}; +enum { DESC_OFFSET_LEN = 0, DESC_OFFSET_TYPE = 1 }; -enum { - INTERFACE_INVALID_NUMBER = 0xff -}; +enum { INTERFACE_INVALID_NUMBER = 0xff }; typedef enum { - MS_OS_20_SET_HEADER_DESCRIPTOR = 0x00, - MS_OS_20_SUBSET_HEADER_CONFIGURATION = 0x01, - MS_OS_20_SUBSET_HEADER_FUNCTION = 0x02, - MS_OS_20_FEATURE_COMPATBLE_ID = 0x03, - MS_OS_20_FEATURE_REG_PROPERTY = 0x04, - MS_OS_20_FEATURE_MIN_RESUME_TIME = 0x05, - MS_OS_20_FEATURE_MODEL_ID = 0x06, - MS_OS_20_FEATURE_CCGP_DEVICE = 0x07, - MS_OS_20_FEATURE_VENDOR_REVISION = 0x08 + MS_OS_20_SET_HEADER_DESCRIPTOR = 0x00, + MS_OS_20_SUBSET_HEADER_CONFIGURATION = 0x01, + MS_OS_20_SUBSET_HEADER_FUNCTION = 0x02, + MS_OS_20_FEATURE_COMPATBLE_ID = 0x03, + MS_OS_20_FEATURE_REG_PROPERTY = 0x04, + MS_OS_20_FEATURE_MIN_RESUME_TIME = 0x05, + MS_OS_20_FEATURE_MODEL_ID = 0x06, + MS_OS_20_FEATURE_CCGP_DEVICE = 0x07, + MS_OS_20_FEATURE_VENDOR_REVISION = 0x08 } microsoft_os_20_type_t; -enum { - CONTROL_STAGE_IDLE, - CONTROL_STAGE_SETUP, - CONTROL_STAGE_DATA, - CONTROL_STAGE_ACK -}; +enum { CONTROL_STAGE_IDLE, CONTROL_STAGE_SETUP, CONTROL_STAGE_DATA, CONTROL_STAGE_ACK }; -enum { - TUSB_INDEX_INVALID_8 = 0xFFu -}; +enum { TUSB_INDEX_INVALID_8 = 0xFFu }; //--------------------------------------------------------------------+ // USB Descriptors @@ -277,180 +257,193 @@ TU_ATTR_BIT_FIELD_ORDER_BEGIN /// USB Device Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength ; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType ; ///< DEVICE Descriptor Type. - uint16_t bcdUSB ; ///< BUSB Specification Release Number in Binary-Coded Decimal (i.e., 2.10 is 210H). - - uint8_t bDeviceClass ; ///< Class code (assigned by the USB-IF). - uint8_t bDeviceSubClass ; ///< Subclass code (assigned by the USB-IF). - uint8_t bDeviceProtocol ; ///< Protocol code (assigned by the USB-IF). - uint8_t bMaxPacketSize0 ; ///< Maximum packet size for endpoint zero (only 8, 16, 32, or 64 are valid). For HS devices is fixed to 64. - - uint16_t idVendor ; ///< Vendor ID (assigned by the USB-IF). - uint16_t idProduct ; ///< Product ID (assigned by the manufacturer). - uint16_t bcdDevice ; ///< Device release number in binary-coded decimal. - uint8_t iManufacturer ; ///< Index of string descriptor describing manufacturer. - uint8_t iProduct ; ///< Index of string descriptor describing product. - uint8_t iSerialNumber ; ///< Index of string descriptor describing the device's serial number. - - uint8_t bNumConfigurations ; ///< Number of possible configurations. + uint8_t bLength; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType; ///< DEVICE Descriptor Type. + uint16_t + bcdUSB; ///< BUSB Specification Release Number in Binary-Coded Decimal (i.e., 2.10 is 210H). + + uint8_t bDeviceClass; ///< Class code (assigned by the USB-IF). + uint8_t bDeviceSubClass; ///< Subclass code (assigned by the USB-IF). + uint8_t bDeviceProtocol; ///< Protocol code (assigned by the USB-IF). + uint8_t + bMaxPacketSize0; ///< Maximum packet size for endpoint zero (only 8, 16, 32, or 64 are valid). For HS devices is fixed to 64. + + uint16_t idVendor; ///< Vendor ID (assigned by the USB-IF). + uint16_t idProduct; ///< Product ID (assigned by the manufacturer). + uint16_t bcdDevice; ///< Device release number in binary-coded decimal. + uint8_t iManufacturer; ///< Index of string descriptor describing manufacturer. + uint8_t iProduct; ///< Index of string descriptor describing product. + uint8_t iSerialNumber; ///< Index of string descriptor describing the device's serial number. + + uint8_t bNumConfigurations; ///< Number of possible configurations. } tusb_desc_device_t; -TU_VERIFY_STATIC( sizeof(tusb_desc_device_t) == 18, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_device_t) == 18, "size is not correct"); // USB Binary Device Object Store (BOS) Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength ; ///< Size of this descriptor in bytes - uint8_t bDescriptorType ; ///< CONFIGURATION Descriptor Type - uint16_t wTotalLength ; ///< Total length of data returned for this descriptor - uint8_t bNumDeviceCaps ; ///< Number of device capability descriptors in the BOS + uint8_t bLength; ///< Size of this descriptor in bytes + uint8_t bDescriptorType; ///< CONFIGURATION Descriptor Type + uint16_t wTotalLength; ///< Total length of data returned for this descriptor + uint8_t bNumDeviceCaps; ///< Number of device capability descriptors in the BOS } tusb_desc_bos_t; -TU_VERIFY_STATIC( sizeof(tusb_desc_bos_t) == 5, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_bos_t) == 5, "size is not correct"); /// USB Configuration Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength ; ///< Size of this descriptor in bytes - uint8_t bDescriptorType ; ///< CONFIGURATION Descriptor Type - uint16_t wTotalLength ; ///< Total length of data returned for this configuration. Includes the combined length of all descriptors (configuration, interface, endpoint, and class- or vendor-specific) returned for this configuration. - - uint8_t bNumInterfaces ; ///< Number of interfaces supported by this configuration - uint8_t bConfigurationValue ; ///< Value to use as an argument to the SetConfiguration() request to select this configuration. - uint8_t iConfiguration ; ///< Index of string descriptor describing this configuration - uint8_t bmAttributes ; ///< Configuration characteristics \n D7: Reserved (set to one)\n D6: Self-powered \n D5: Remote Wakeup \n D4...0: Reserved (reset to zero) \n D7 is reserved and must be set to one for historical reasons. \n A device configuration that uses power from the bus and a local source reports a non-zero value in bMaxPower to indicate the amount of bus power required and sets D6. The actual power source at runtime may be determined using the GetStatus(DEVICE) request (see USB 2.0 spec Section 9.4.5). \n If a device configuration supports remote wakeup, D5 is set to one. - uint8_t bMaxPower ; ///< Maximum power consumption of the USB device from the bus in this specific configuration when the device is fully operational. Expressed in 2 mA units (i.e., 50 = 100 mA). + uint8_t bLength; ///< Size of this descriptor in bytes + uint8_t bDescriptorType; ///< CONFIGURATION Descriptor Type + uint16_t + wTotalLength; ///< Total length of data returned for this configuration. Includes the combined length of all descriptors (configuration, interface, endpoint, and class- or vendor-specific) returned for this configuration. + + uint8_t bNumInterfaces; ///< Number of interfaces supported by this configuration + uint8_t + bConfigurationValue; ///< Value to use as an argument to the SetConfiguration() request to select this configuration. + uint8_t iConfiguration; ///< Index of string descriptor describing this configuration + uint8_t + bmAttributes; ///< Configuration characteristics \n D7: Reserved (set to one)\n D6: Self-powered \n D5: Remote Wakeup \n D4...0: Reserved (reset to zero) \n D7 is reserved and must be set to one for historical reasons. \n A device configuration that uses power from the bus and a local source reports a non-zero value in bMaxPower to indicate the amount of bus power required and sets D6. The actual power source at runtime may be determined using the GetStatus(DEVICE) request (see USB 2.0 spec Section 9.4.5). \n If a device configuration supports remote wakeup, D5 is set to one. + uint8_t + bMaxPower; ///< Maximum power consumption of the USB device from the bus in this specific configuration when the device is fully operational. Expressed in 2 mA units (i.e., 50 = 100 mA). } tusb_desc_configuration_t; -TU_VERIFY_STATIC( sizeof(tusb_desc_configuration_t) == 9, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_configuration_t) == 9, "size is not correct"); /// USB Interface Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength ; ///< Size of this descriptor in bytes - uint8_t bDescriptorType ; ///< INTERFACE Descriptor Type - - uint8_t bInterfaceNumber ; ///< Number of this interface. Zero-based value identifying the index in the array of concurrent interfaces supported by this configuration. - uint8_t bAlternateSetting ; ///< Value used to select this alternate setting for the interface identified in the prior field - uint8_t bNumEndpoints ; ///< Number of endpoints used by this interface (excluding endpoint zero). If this value is zero, this interface only uses the Default Control Pipe. - uint8_t bInterfaceClass ; ///< Class code (assigned by the USB-IF). \li A value of zero is reserved for future standardization. \li If this field is set to FFH, the interface class is vendor-specific. \li All other values are reserved for assignment by the USB-IF. - uint8_t bInterfaceSubClass ; ///< Subclass code (assigned by the USB-IF). \n These codes are qualified by the value of the bInterfaceClass field. \li If the bInterfaceClass field is reset to zero, this field must also be reset to zero. \li If the bInterfaceClass field is not set to FFH, all values are reserved for assignment by the USB-IF. - uint8_t bInterfaceProtocol ; ///< Protocol code (assigned by the USB). \n These codes are qualified by the value of the bInterfaceClass and the bInterfaceSubClass fields. If an interface supports class-specific requests, this code identifies the protocols that the device uses as defined by the specification of the device class. \li If this field is reset to zero, the device does not use a class-specific protocol on this interface. \li If this field is set to FFH, the device uses a vendor-specific protocol for this interface. - uint8_t iInterface ; ///< Index of string descriptor describing this interface + uint8_t bLength; ///< Size of this descriptor in bytes + uint8_t bDescriptorType; ///< INTERFACE Descriptor Type + + uint8_t + bInterfaceNumber; ///< Number of this interface. Zero-based value identifying the index in the array of concurrent interfaces supported by this configuration. + uint8_t + bAlternateSetting; ///< Value used to select this alternate setting for the interface identified in the prior field + uint8_t + bNumEndpoints; ///< Number of endpoints used by this interface (excluding endpoint zero). If this value is zero, this interface only uses the Default Control Pipe. + uint8_t + bInterfaceClass; ///< Class code (assigned by the USB-IF). \li A value of zero is reserved for future standardization. \li If this field is set to FFH, the interface class is vendor-specific. \li All other values are reserved for assignment by the USB-IF. + uint8_t + bInterfaceSubClass; ///< Subclass code (assigned by the USB-IF). \n These codes are qualified by the value of the bInterfaceClass field. \li If the bInterfaceClass field is reset to zero, this field must also be reset to zero. \li If the bInterfaceClass field is not set to FFH, all values are reserved for assignment by the USB-IF. + uint8_t + bInterfaceProtocol; ///< Protocol code (assigned by the USB). \n These codes are qualified by the value of the bInterfaceClass and the bInterfaceSubClass fields. If an interface supports class-specific requests, this code identifies the protocols that the device uses as defined by the specification of the device class. \li If this field is reset to zero, the device does not use a class-specific protocol on this interface. \li If this field is set to FFH, the device uses a vendor-specific protocol for this interface. + uint8_t iInterface; ///< Index of string descriptor describing this interface } tusb_desc_interface_t; -TU_VERIFY_STATIC( sizeof(tusb_desc_interface_t) == 9, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_interface_t) == 9, "size is not correct"); /// USB Endpoint Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength ; // Size of this descriptor in bytes - uint8_t bDescriptorType ; // ENDPOINT Descriptor Type + uint8_t bLength; // Size of this descriptor in bytes + uint8_t bDescriptorType; // ENDPOINT Descriptor Type - uint8_t bEndpointAddress ; // The address of the endpoint + uint8_t bEndpointAddress; // The address of the endpoint - struct TU_ATTR_PACKED { - uint8_t xfer : 2; // Control, ISO, Bulk, Interrupt - uint8_t sync : 2; // None, Asynchronous, Adaptive, Synchronous - uint8_t usage : 2; // Data, Feedback, Implicit feedback - uint8_t : 2; - } bmAttributes; + struct TU_ATTR_PACKED { + uint8_t xfer : 2; // Control, ISO, Bulk, Interrupt + uint8_t sync : 2; // None, Asynchronous, Adaptive, Synchronous + uint8_t usage : 2; // Data, Feedback, Implicit feedback + uint8_t : 2; + } bmAttributes; - uint16_t wMaxPacketSize ; // Bit 10..0 : max packet size, bit 12..11 additional transaction per highspeed micro-frame - uint8_t bInterval ; // Polling interval, in frames or microframes depending on the operating speed + uint16_t + wMaxPacketSize; // Bit 10..0 : max packet size, bit 12..11 additional transaction per highspeed micro-frame + uint8_t bInterval; // Polling interval, in frames or microframes depending on the operating speed } tusb_desc_endpoint_t; -TU_VERIFY_STATIC( sizeof(tusb_desc_endpoint_t) == 7, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_endpoint_t) == 7, "size is not correct"); /// USB Other Speed Configuration Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength ; ///< Size of descriptor - uint8_t bDescriptorType ; ///< Other_speed_Configuration Type - uint16_t wTotalLength ; ///< Total length of data returned - - uint8_t bNumInterfaces ; ///< Number of interfaces supported by this speed configuration - uint8_t bConfigurationValue ; ///< Value to use to select configuration - uint8_t iConfiguration ; ///< Index of string descriptor - uint8_t bmAttributes ; ///< Same as Configuration descriptor - uint8_t bMaxPower ; ///< Same as Configuration descriptor + uint8_t bLength; ///< Size of descriptor + uint8_t bDescriptorType; ///< Other_speed_Configuration Type + uint16_t wTotalLength; ///< Total length of data returned + + uint8_t bNumInterfaces; ///< Number of interfaces supported by this speed configuration + uint8_t bConfigurationValue; ///< Value to use to select configuration + uint8_t iConfiguration; ///< Index of string descriptor + uint8_t bmAttributes; ///< Same as Configuration descriptor + uint8_t bMaxPower; ///< Same as Configuration descriptor } tusb_desc_other_speed_t; /// USB Device Qualifier Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength ; ///< Size of descriptor - uint8_t bDescriptorType ; ///< Device Qualifier Type - uint16_t bcdUSB ; ///< USB specification version number (e.g., 0200H for V2.00) + uint8_t bLength; ///< Size of descriptor + uint8_t bDescriptorType; ///< Device Qualifier Type + uint16_t bcdUSB; ///< USB specification version number (e.g., 0200H for V2.00) - uint8_t bDeviceClass ; ///< Class Code - uint8_t bDeviceSubClass ; ///< SubClass Code - uint8_t bDeviceProtocol ; ///< Protocol Code + uint8_t bDeviceClass; ///< Class Code + uint8_t bDeviceSubClass; ///< SubClass Code + uint8_t bDeviceProtocol; ///< Protocol Code - uint8_t bMaxPacketSize0 ; ///< Maximum packet size for other speed - uint8_t bNumConfigurations ; ///< Number of Other-speed Configurations - uint8_t bReserved ; ///< Reserved for future use, must be zero + uint8_t bMaxPacketSize0; ///< Maximum packet size for other speed + uint8_t bNumConfigurations; ///< Number of Other-speed Configurations + uint8_t bReserved; ///< Reserved for future use, must be zero } tusb_desc_device_qualifier_t; -TU_VERIFY_STATIC( sizeof(tusb_desc_device_qualifier_t) == 10, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_device_qualifier_t) == 10, "size is not correct"); /// USB Interface Association Descriptor (IAD ECN) typedef struct TU_ATTR_PACKED { - uint8_t bLength ; ///< Size of descriptor - uint8_t bDescriptorType ; ///< Other_speed_Configuration Type + uint8_t bLength; ///< Size of descriptor + uint8_t bDescriptorType; ///< Other_speed_Configuration Type - uint8_t bFirstInterface ; ///< Index of the first associated interface. - uint8_t bInterfaceCount ; ///< Total number of associated interfaces. + uint8_t bFirstInterface; ///< Index of the first associated interface. + uint8_t bInterfaceCount; ///< Total number of associated interfaces. - uint8_t bFunctionClass ; ///< Interface class ID. - uint8_t bFunctionSubClass ; ///< Interface subclass ID. - uint8_t bFunctionProtocol ; ///< Interface protocol ID. + uint8_t bFunctionClass; ///< Interface class ID. + uint8_t bFunctionSubClass; ///< Interface subclass ID. + uint8_t bFunctionProtocol; ///< Interface protocol ID. - uint8_t iFunction ; ///< Index of the string descriptor describing the interface association. + uint8_t iFunction; ///< Index of the string descriptor describing the interface association. } tusb_desc_interface_assoc_t; -TU_VERIFY_STATIC( sizeof(tusb_desc_interface_assoc_t) == 8, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_interface_assoc_t) == 8, "size is not correct"); // USB String Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength ; ///< Size of this descriptor in bytes - uint8_t bDescriptorType ; ///< Descriptor Type - uint16_t unicode_string[]; + uint8_t bLength; ///< Size of this descriptor in bytes + uint8_t bDescriptorType; ///< Descriptor Type + uint16_t unicode_string[]; } tusb_desc_string_t; // USB Binary Device Object Store (BOS) typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType ; - uint8_t bDevCapabilityType; - uint8_t bReserved; - uint8_t PlatformCapabilityUUID[16]; - uint8_t CapabilityData[]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDevCapabilityType; + uint8_t bReserved; + uint8_t PlatformCapabilityUUID[16]; + uint8_t CapabilityData[]; } tusb_desc_bos_platform_t; // USB WebUSB URL Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bScheme; - char url[]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bScheme; + char url[]; } tusb_desc_webusb_url_t; // DFU Functional Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - - union { - struct TU_ATTR_PACKED { - uint8_t bitCanDnload : 1; - uint8_t bitCanUpload : 1; - uint8_t bitManifestationTolerant : 1; - uint8_t bitWillDetach : 1; - uint8_t reserved : 4; - } bmAttributes; - - uint8_t bAttributes; - }; - - uint16_t wDetachTimeOut; - uint16_t wTransferSize; - uint16_t bcdDFUVersion; + uint8_t bLength; + uint8_t bDescriptorType; + + union { + struct TU_ATTR_PACKED { + uint8_t bitCanDnload : 1; + uint8_t bitCanUpload : 1; + uint8_t bitManifestationTolerant : 1; + uint8_t bitWillDetach : 1; + uint8_t reserved : 4; + } bmAttributes; + + uint8_t bAttributes; + }; + + uint16_t wDetachTimeOut; + uint16_t wTransferSize; + uint16_t bcdDFUVersion; } tusb_desc_dfu_functional_t; //--------------------------------------------------------------------+ @@ -458,53 +451,60 @@ typedef struct TU_ATTR_PACKED { //--------------------------------------------------------------------+ typedef struct TU_ATTR_PACKED { - union { - struct TU_ATTR_PACKED { - uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. - uint8_t type : 2; ///< Request type tusb_request_type_t. - uint8_t direction : 1; ///< Direction type. tusb_dir_t - } bmRequestType_bit; - - uint8_t bmRequestType; - }; - - uint8_t bRequest; - uint16_t wValue; - uint16_t wIndex; - uint16_t wLength; + union { + struct TU_ATTR_PACKED { + uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. + uint8_t type : 2; ///< Request type tusb_request_type_t. + uint8_t direction : 1; ///< Direction type. tusb_dir_t + } bmRequestType_bit; + + uint8_t bmRequestType; + }; + + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; } tusb_control_request_t; -TU_VERIFY_STATIC( sizeof(tusb_control_request_t) == 8, "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_control_request_t) == 8, "size is not correct"); -TU_ATTR_PACKED_END // End of all packed definitions -TU_ATTR_BIT_FIELD_ORDER_END +TU_ATTR_PACKED_END // End of all packed definitions + TU_ATTR_BIT_FIELD_ORDER_END -//--------------------------------------------------------------------+ -// Endpoint helper -//--------------------------------------------------------------------+ + //--------------------------------------------------------------------+ + // Endpoint helper + //--------------------------------------------------------------------+ -// Get direction from Endpoint address -TU_ATTR_ALWAYS_INLINE static inline tusb_dir_t tu_edpt_dir(uint8_t addr) { - return (addr & TUSB_DIR_IN_MASK) ? TUSB_DIR_IN : TUSB_DIR_OUT; + // Get direction from Endpoint address + TU_ATTR_ALWAYS_INLINE static inline tusb_dir_t + tu_edpt_dir(uint8_t addr) +{ + return (addr & TUSB_DIR_IN_MASK) ? TUSB_DIR_IN : TUSB_DIR_OUT; } // Get Endpoint number from address -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_number(uint8_t addr) { - return (uint8_t)(addr & (~TUSB_DIR_IN_MASK)); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_number(uint8_t addr) +{ + return (uint8_t)(addr & (~TUSB_DIR_IN_MASK)); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_addr(uint8_t num, uint8_t dir) { - return (uint8_t)(num | (dir ? TUSB_DIR_IN_MASK : 0)); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_addr(uint8_t num, uint8_t dir) +{ + return (uint8_t)(num | (dir ? TUSB_DIR_IN_MASK : 0)); } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_edpt_packet_size(tusb_desc_endpoint_t const* desc_ep) { - return tu_le16toh(desc_ep->wMaxPacketSize) & 0x7FF; +TU_ATTR_ALWAYS_INLINE static inline uint16_t +tu_edpt_packet_size(tusb_desc_endpoint_t const *desc_ep) +{ + return tu_le16toh(desc_ep->wMaxPacketSize) & 0x7FF; } #if CFG_TUSB_DEBUG -TU_ATTR_ALWAYS_INLINE static inline const char *tu_edpt_type_str(tusb_xfer_type_t t) { - tu_static const char *str[] = {"control", "isochronous", "bulk", "interrupt"}; - return str[t]; +TU_ATTR_ALWAYS_INLINE static inline const char *tu_edpt_type_str(tusb_xfer_type_t t) +{ + tu_static const char *str[] = { "control", "isochronous", "bulk", "interrupt" }; + return str[t]; } #endif @@ -513,32 +513,36 @@ TU_ATTR_ALWAYS_INLINE static inline const char *tu_edpt_type_str(tusb_xfer_type_ //--------------------------------------------------------------------+ // return next descriptor -TU_ATTR_ALWAYS_INLINE static inline uint8_t const * tu_desc_next(void const* desc) { - uint8_t const* desc8 = (uint8_t const*) desc; - return desc8 + desc8[DESC_OFFSET_LEN]; +TU_ATTR_ALWAYS_INLINE static inline uint8_t const *tu_desc_next(void const *desc) +{ + uint8_t const *desc8 = (uint8_t const *)desc; + return desc8 + desc8[DESC_OFFSET_LEN]; } // get descriptor type -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_type(void const* desc) { - return ((uint8_t const*) desc)[DESC_OFFSET_TYPE]; +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_type(void const *desc) +{ + return ((uint8_t const *)desc)[DESC_OFFSET_TYPE]; } // get descriptor length -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_len(void const* desc) { - return ((uint8_t const*) desc)[DESC_OFFSET_LEN]; +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_len(void const *desc) +{ + return ((uint8_t const *)desc)[DESC_OFFSET_LEN]; } // find descriptor that match byte1 (type) -uint8_t const * tu_desc_find(uint8_t const* desc, uint8_t const* end, uint8_t byte1); +uint8_t const *tu_desc_find(uint8_t const *desc, uint8_t const *end, uint8_t byte1); // find descriptor that match byte1 (type) and byte2 -uint8_t const * tu_desc_find2(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2); +uint8_t const *tu_desc_find2(uint8_t const *desc, uint8_t const *end, uint8_t byte1, uint8_t byte2); // find descriptor that match byte1 (type) and byte2 -uint8_t const * tu_desc_find3(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2, uint8_t byte3); +uint8_t const *tu_desc_find3(uint8_t const *desc, uint8_t const *end, uint8_t byte1, uint8_t byte2, + uint8_t byte3); #ifdef __cplusplus - } +} #endif #endif // TUSB_TYPES_H_ diff --git a/Libraries/tinyusb/src/common/tusb_verify.h b/Libraries/tinyusb/src/common/tusb_verify.h index 4344575b708..ae49387c731 100644 --- a/Libraries/tinyusb/src/common/tusb_verify.h +++ b/Libraries/tinyusb/src/common/tusb_verify.h @@ -61,7 +61,7 @@ *------------------------------------------------------------------*/ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -69,47 +69,64 @@ //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG - #include - #define TU_MESS_FAILED() tu_printf("%s %d: ASSERT FAILED\r\n", __func__, __LINE__) +#include +#define TU_MESS_FAILED() tu_printf("%s %d: ASSERT FAILED\r\n", __func__, __LINE__) #else - #define TU_MESS_FAILED() do {} while (0) +#define TU_MESS_FAILED() \ + do { \ + } while (0) #endif // Halt CPU (breakpoint) when hitting error, only apply for Cortex M3, M4, M7, M33. M55 -#if defined(__ARM_ARCH_7M__) || defined (__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8_1M_MAIN__) || \ - defined(__ARM7M__) || defined (__ARM7EM__) || defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) - #define TU_BREAKPOINT() do { \ - volatile uint32_t* ARM_CM_DHCSR = ((volatile uint32_t*) 0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \ - if ( (*ARM_CM_DHCSR) & 1UL ) __asm("BKPT #0\n"); /* Only halt mcu if debugger is attached */ \ - } while(0) +#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__) || \ + defined(__ARM_ARCH_8_1M_MAIN__) || defined(__ARM7M__) || defined(__ARM7EM__) || \ + defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) +#define TU_BREAKPOINT() \ + do { \ + volatile uint32_t *ARM_CM_DHCSR = \ + ((volatile uint32_t *)0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \ + if ((*ARM_CM_DHCSR) & 1UL) \ + __asm("BKPT #0\n"); /* Only halt mcu if debugger is attached */ \ + } while (0) #elif defined(__riscv) && !TUP_MCU_ESPRESSIF - #define TU_BREAKPOINT() do { __asm("ebreak\n"); } while(0) +#define TU_BREAKPOINT() \ + do { \ + __asm("ebreak\n"); \ + } while (0) #elif defined(_mips) - #define TU_BREAKPOINT() do { __asm("sdbbp 0"); } while (0) +#define TU_BREAKPOINT() \ + do { \ + __asm("sdbbp 0"); \ + } while (0) #else - #define TU_BREAKPOINT() do {} while (0) +#define TU_BREAKPOINT() \ + do { \ + } while (0) #endif // Helper to implement optional parameter for TU_VERIFY Macro family -#define _GET_3RD_ARG(arg1, arg2, arg3, ...) arg3 +#define _GET_3RD_ARG(arg1, arg2, arg3, ...) arg3 /*------------------------------------------------------------------*/ /* TU_VERIFY * - TU_VERIFY_1ARGS : return false if failed * - TU_VERIFY_2ARGS : return provided value if failed *------------------------------------------------------------------*/ -#define TU_VERIFY_DEFINE(_cond, _ret) \ - do { \ - if ( !(_cond) ) { return _ret; } \ - } while(0) +#define TU_VERIFY_DEFINE(_cond, _ret) \ + do { \ + if (!(_cond)) { \ + return _ret; \ + } \ + } while (0) -#define TU_VERIFY_1ARGS(_cond) TU_VERIFY_DEFINE(_cond, false) -#define TU_VERIFY_2ARGS(_cond, _ret) TU_VERIFY_DEFINE(_cond, _ret) +#define TU_VERIFY_1ARGS(_cond) TU_VERIFY_DEFINE(_cond, false) +#define TU_VERIFY_2ARGS(_cond, _ret) TU_VERIFY_DEFINE(_cond, _ret) -#define TU_VERIFY(...) _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, _dummy)(__VA_ARGS__) +#define TU_VERIFY(...) \ + _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, _dummy)(__VA_ARGS__) /*------------------------------------------------------------------*/ /* ASSERT @@ -117,20 +134,25 @@ * - 1 arg : return false if failed * - 2 arg : return error if failed *------------------------------------------------------------------*/ -#define TU_ASSERT_DEFINE(_cond, _ret) \ - do { \ - if ( !(_cond) ) { TU_MESS_FAILED(); TU_BREAKPOINT(); return _ret; } \ - } while(0) - -#define TU_ASSERT_1ARGS(_cond) TU_ASSERT_DEFINE(_cond, false) -#define TU_ASSERT_2ARGS(_cond, _ret) TU_ASSERT_DEFINE(_cond, _ret) +#define TU_ASSERT_DEFINE(_cond, _ret) \ + do { \ + if (!(_cond)) { \ + TU_MESS_FAILED(); \ + TU_BREAKPOINT(); \ + return _ret; \ + } \ + } while (0) + +#define TU_ASSERT_1ARGS(_cond) TU_ASSERT_DEFINE(_cond, false) +#define TU_ASSERT_2ARGS(_cond, _ret) TU_ASSERT_DEFINE(_cond, _ret) #ifndef TU_ASSERT -#define TU_ASSERT(...) _GET_3RD_ARG(__VA_ARGS__, TU_ASSERT_2ARGS, TU_ASSERT_1ARGS, _dummy)(__VA_ARGS__) +#define TU_ASSERT(...) \ + _GET_3RD_ARG(__VA_ARGS__, TU_ASSERT_2ARGS, TU_ASSERT_1ARGS, _dummy)(__VA_ARGS__) #endif #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/device/dcd.h b/Libraries/tinyusb/src/device/dcd.h index d1d4e489765..f2a68d73d7a 100644 --- a/Libraries/tinyusb/src/device/dcd.h +++ b/Libraries/tinyusb/src/device/dcd.h @@ -32,7 +32,7 @@ #include "common/tusb_fifo.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -40,49 +40,49 @@ //--------------------------------------------------------------------+ typedef enum { - DCD_EVENT_INVALID = 0, // 0 - DCD_EVENT_BUS_RESET, // 1 - DCD_EVENT_UNPLUGGED, // 2 - DCD_EVENT_SOF, // 3 - DCD_EVENT_SUSPEND, // 4 TODO LPM Sleep L1 support - DCD_EVENT_RESUME, // 5 - DCD_EVENT_SETUP_RECEIVED, // 6 - DCD_EVENT_XFER_COMPLETE, // 7 - USBD_EVENT_FUNC_CALL, // 8 Not an DCD event, just a convenient way to defer ISR function - DCD_EVENT_COUNT + DCD_EVENT_INVALID = 0, // 0 + DCD_EVENT_BUS_RESET, // 1 + DCD_EVENT_UNPLUGGED, // 2 + DCD_EVENT_SOF, // 3 + DCD_EVENT_SUSPEND, // 4 TODO LPM Sleep L1 support + DCD_EVENT_RESUME, // 5 + DCD_EVENT_SETUP_RECEIVED, // 6 + DCD_EVENT_XFER_COMPLETE, // 7 + USBD_EVENT_FUNC_CALL, // 8 Not an DCD event, just a convenient way to defer ISR function + DCD_EVENT_COUNT } dcd_eventid_t; typedef struct TU_ATTR_ALIGNED(4) { - uint8_t rhport; - uint8_t event_id; - - union { - // BUS RESET - struct { - tusb_speed_t speed; - } bus_reset; - - // SOF - struct { - uint32_t frame_count; - }sof; - - // SETUP_RECEIVED - tusb_control_request_t setup_received; - - // XFER_COMPLETE - struct { - uint8_t ep_addr; - uint8_t result; - uint32_t len; - }xfer_complete; - - // FUNC_CALL - struct { - void (*func) (void*); - void* param; - }func_call; - }; + uint8_t rhport; + uint8_t event_id; + + union { + // BUS RESET + struct { + tusb_speed_t speed; + } bus_reset; + + // SOF + struct { + uint32_t frame_count; + } sof; + + // SETUP_RECEIVED + tusb_control_request_t setup_received; + + // XFER_COMPLETE + struct { + uint8_t ep_addr; + uint8_t result; + uint32_t len; + } xfer_complete; + + // FUNC_CALL + struct { + void (*func)(void *); + void *param; + } func_call; + }; } dcd_event_t; //TU_VERIFY_STATIC(sizeof(dcd_event_t) <= 12, "size is not correct"); @@ -93,15 +93,15 @@ typedef struct TU_ATTR_ALIGNED(4) { // clean/flush data cache: write cache -> memory. // Required before an DMA TX transfer to make sure data is in memory -void dcd_dcache_clean(void const* addr, uint32_t data_size) TU_ATTR_WEAK; +void dcd_dcache_clean(void const *addr, uint32_t data_size) TU_ATTR_WEAK; // invalidate data cache: mark cache as invalid, next read will read from memory // Required BOTH before and after an DMA RX transfer -void dcd_dcache_invalidate(void const* addr, uint32_t data_size) TU_ATTR_WEAK; +void dcd_dcache_invalidate(void const *addr, uint32_t data_size) TU_ATTR_WEAK; // clean and invalidate data cache // Required before an DMA transfer where memory is both read/write by DMA -void dcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) TU_ATTR_WEAK; +void dcd_dcache_clean_invalidate(void const *addr, uint32_t data_size) TU_ATTR_WEAK; //--------------------------------------------------------------------+ // Controller API @@ -117,7 +117,7 @@ bool dcd_deinit(uint8_t rhport); void dcd_int_handler(uint8_t rhport); // Enable device interrupt -void dcd_int_enable (uint8_t rhport); +void dcd_int_enable(uint8_t rhport); // Disable device interrupt void dcd_int_disable(uint8_t rhport); @@ -147,29 +147,30 @@ void dcd_enter_test_mode(uint8_t rhport, tusb_feature_test_mode_t test_selector) // Invoked when a control transfer's status stage is complete. // May help DCD to prepare for next control transfer, this API is optional. -void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * request); +void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const *request); // Configure endpoint's registers according to descriptor -bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); +bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep); // Close all non-control endpoints, cancel all pending transfers if any. // Invoked when switching from a non-zero Configuration by SET_CONFIGURE therefore // required for multiple configuration support. -void dcd_edpt_close_all (uint8_t rhport); +void dcd_edpt_close_all(uint8_t rhport); // Submit a transfer, When complete dcd_event_xfer_complete() is invoked to notify the stack -bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); +bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes); // Submit an transfer using fifo, When complete dcd_event_xfer_complete() is invoked to notify the stack // This API is optional, may be useful for register-based for transferring data. -bool dcd_edpt_xfer_fifo (uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes) TU_ATTR_WEAK; +bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, + uint16_t total_bytes) TU_ATTR_WEAK; // Stall endpoint, any queuing transfer should be removed from endpoint -void dcd_edpt_stall (uint8_t rhport, uint8_t ep_addr); +void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr); // clear stall, data toggle is also reset to DATA0 // This API never calls with control endpoints, since it is auto cleared when receiving setup packet -void dcd_edpt_clear_stall (uint8_t rhport, uint8_t ep_addr); +void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr); #ifdef TUP_DCD_EDPT_ISO_ALLOC // Allocate packet buffer used by ISO endpoints @@ -177,11 +178,11 @@ void dcd_edpt_clear_stall (uint8_t rhport, uint8_t ep_addr); bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size); // Configure and enable an ISO endpoint according to descriptor -bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); +bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep); #else // Close an endpoint. -void dcd_edpt_close (uint8_t rhport, uint8_t ep_addr) TU_ATTR_WEAK; +void dcd_edpt_close(uint8_t rhport, uint8_t ep_addr) TU_ATTR_WEAK; #endif @@ -190,48 +191,59 @@ void dcd_edpt_close (uint8_t rhport, uint8_t ep_addr) TU_ATTR_WEAK; //--------------------------------------------------------------------+ // Called by DCD to notify device stack -extern void dcd_event_handler(dcd_event_t const * event, bool in_isr); +extern void dcd_event_handler(dcd_event_t const *event, bool in_isr); // helper to send bus signal event -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_signal (uint8_t rhport, dcd_eventid_t eid, bool in_isr) { - dcd_event_t event = { .rhport = rhport, .event_id = eid }; - dcd_event_handler(&event, in_isr); +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_signal(uint8_t rhport, dcd_eventid_t eid, + bool in_isr) +{ + dcd_event_t event = { .rhport = rhport, .event_id = eid }; + dcd_event_handler(&event, in_isr); } // helper to send bus reset event -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_reset (uint8_t rhport, tusb_speed_t speed, bool in_isr) { - dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_BUS_RESET }; - event.bus_reset.speed = speed; - dcd_event_handler(&event, in_isr); +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_reset(uint8_t rhport, tusb_speed_t speed, + bool in_isr) +{ + dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_BUS_RESET }; + event.bus_reset.speed = speed; + dcd_event_handler(&event, in_isr); } // helper to send setup received -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_setup_received(uint8_t rhport, uint8_t const * setup, bool in_isr) { - dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SETUP_RECEIVED }; - memcpy(&event.setup_received, setup, sizeof(tusb_control_request_t)); +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_setup_received(uint8_t rhport, + uint8_t const *setup, bool in_isr) +{ + dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SETUP_RECEIVED }; + memcpy(&event.setup_received, setup, sizeof(tusb_control_request_t)); - dcd_event_handler(&event, in_isr); + dcd_event_handler(&event, in_isr); } // helper to send transfer complete event -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_xfer_complete (uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr) { - dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_XFER_COMPLETE }; +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_xfer_complete(uint8_t rhport, uint8_t ep_addr, + uint32_t xferred_bytes, + uint8_t result, bool in_isr) +{ + dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_XFER_COMPLETE }; - event.xfer_complete.ep_addr = ep_addr; - event.xfer_complete.len = xferred_bytes; - event.xfer_complete.result = result; + event.xfer_complete.ep_addr = ep_addr; + event.xfer_complete.len = xferred_bytes; + event.xfer_complete.result = result; - dcd_event_handler(&event, in_isr); + dcd_event_handler(&event, in_isr); } -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_sof(uint8_t rhport, uint32_t frame_count, bool in_isr) { - dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SOF }; - event.sof.frame_count = frame_count; - dcd_event_handler(&event, in_isr); +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_sof(uint8_t rhport, uint32_t frame_count, + bool in_isr) +{ + dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SOF }; + event.sof.frame_count = frame_count; + dcd_event_handler(&event, in_isr); } #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/device/usbd.c b/Libraries/tinyusb/src/device/usbd.c index 67faf0da769..31870584edf 100644 --- a/Libraries/tinyusb/src/device/usbd.c +++ b/Libraries/tinyusb/src/device/usbd.c @@ -39,66 +39,74 @@ // USBD Configuration //--------------------------------------------------------------------+ #ifndef CFG_TUD_TASK_QUEUE_SZ - #define CFG_TUD_TASK_QUEUE_SZ 16 +#define CFG_TUD_TASK_QUEUE_SZ 16 #endif //--------------------------------------------------------------------+ // Weak stubs: invoked if no strong implementation is available //--------------------------------------------------------------------+ -TU_ATTR_WEAK void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr) { - (void) rhport; - (void) eventid; - (void) in_isr; +TU_ATTR_WEAK void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr) +{ + (void)rhport; + (void)eventid; + (void)in_isr; } -TU_ATTR_WEAK void tud_sof_cb(uint32_t frame_count) { - (void) frame_count; +TU_ATTR_WEAK void tud_sof_cb(uint32_t frame_count) +{ + (void)frame_count; } -TU_ATTR_WEAK uint8_t const* tud_descriptor_bos_cb(void) { - return NULL; +TU_ATTR_WEAK uint8_t const *tud_descriptor_bos_cb(void) +{ + return NULL; } -TU_ATTR_WEAK uint8_t const* tud_descriptor_device_qualifier_cb(void) { - return NULL; +TU_ATTR_WEAK uint8_t const *tud_descriptor_device_qualifier_cb(void) +{ + return NULL; } -TU_ATTR_WEAK uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void) index; - return NULL; +TU_ATTR_WEAK uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) +{ + (void)index; + return NULL; } -TU_ATTR_WEAK void tud_mount_cb(void) { -} +TU_ATTR_WEAK void tud_mount_cb(void) {} -TU_ATTR_WEAK void tud_umount_cb(void) { -} +TU_ATTR_WEAK void tud_umount_cb(void) {} -TU_ATTR_WEAK void tud_suspend_cb(bool remote_wakeup_en) { - (void) remote_wakeup_en; +TU_ATTR_WEAK void tud_suspend_cb(bool remote_wakeup_en) +{ + (void)remote_wakeup_en; } -TU_ATTR_WEAK void tud_resume_cb(void) { -} +TU_ATTR_WEAK void tud_resume_cb(void) {} -TU_ATTR_WEAK bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const* request) { - (void) rhport; - (void) stage; - (void) request; - return false; +TU_ATTR_WEAK bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request) +{ + (void)rhport; + (void)stage; + (void)request; + return false; } -TU_ATTR_WEAK bool dcd_deinit(uint8_t rhport) { - (void) rhport; - return false; +TU_ATTR_WEAK bool dcd_deinit(uint8_t rhport) +{ + (void)rhport; + return false; } -TU_ATTR_WEAK void dcd_connect(uint8_t rhport) { - (void) rhport; +TU_ATTR_WEAK void dcd_connect(uint8_t rhport) +{ + (void)rhport; } -TU_ATTR_WEAK void dcd_disconnect(uint8_t rhport) { - (void) rhport; +TU_ATTR_WEAK void dcd_disconnect(uint8_t rhport) +{ + (void)rhport; } //--------------------------------------------------------------------+ @@ -109,25 +117,26 @@ TU_ATTR_WEAK void dcd_disconnect(uint8_t rhport) { enum { DRVID_INVALID = 0xFFu }; typedef struct { - struct TU_ATTR_PACKED { - volatile uint8_t connected : 1; - volatile uint8_t addressed : 1; - volatile uint8_t suspended : 1; + struct TU_ATTR_PACKED { + volatile uint8_t connected : 1; + volatile uint8_t addressed : 1; + volatile uint8_t suspended : 1; - uint8_t remote_wakeup_en : 1; // enable/disable by host - uint8_t remote_wakeup_support : 1; // configuration descriptor's attribute - uint8_t self_powered : 1; // configuration descriptor's attribute - }; - volatile uint8_t cfg_num; // current active configuration (0x00 is not configured) - uint8_t speed; - volatile uint8_t sof_consumer; + uint8_t remote_wakeup_en : 1; // enable/disable by host + uint8_t remote_wakeup_support : 1; // configuration descriptor's attribute + uint8_t self_powered : 1; // configuration descriptor's attribute + }; + volatile uint8_t cfg_num; // current active configuration (0x00 is not configured) + uint8_t speed; + volatile uint8_t sof_consumer; - uint8_t itf2drv[CFG_TUD_INTERFACE_MAX]; // map interface number to driver (0xff is invalid) - uint8_t ep2drv[CFG_TUD_ENDPPOINT_MAX][2]; // map endpoint to driver ( 0xff is invalid ), can use only 4-bit each + uint8_t itf2drv[CFG_TUD_INTERFACE_MAX]; // map interface number to driver (0xff is invalid) + uint8_t ep2drv[CFG_TUD_ENDPPOINT_MAX] + [2]; // map endpoint to driver ( 0xff is invalid ), can use only 4-bit each - tu_edpt_state_t ep_status[CFG_TUD_ENDPPOINT_MAX][2]; + tu_edpt_state_t ep_status[CFG_TUD_ENDPPOINT_MAX][2]; -}usbd_device_t; +} usbd_device_t; tu_static usbd_device_t _usbd_dev; static volatile uint8_t _usbd_queued_setup; @@ -136,192 +145,170 @@ static volatile uint8_t _usbd_queued_setup; // Class Driver //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL - #define DRIVER_NAME(_name) _name +#define DRIVER_NAME(_name) _name #else - #define DRIVER_NAME(_name) NULL +#define DRIVER_NAME(_name) NULL #endif // Built-in class drivers tu_static usbd_class_driver_t const _usbd_driver[] = { - #if CFG_TUD_CDC - { - .name = DRIVER_NAME("CDC"), - .init = cdcd_init, - .deinit = cdcd_deinit, - .reset = cdcd_reset, - .open = cdcd_open, - .control_xfer_cb = cdcd_control_xfer_cb, - .xfer_cb = cdcd_xfer_cb, - .sof = NULL - }, - #endif +#if CFG_TUD_CDC + { .name = DRIVER_NAME("CDC"), + .init = cdcd_init, + .deinit = cdcd_deinit, + .reset = cdcd_reset, + .open = cdcd_open, + .control_xfer_cb = cdcd_control_xfer_cb, + .xfer_cb = cdcd_xfer_cb, + .sof = NULL }, +#endif - #if CFG_TUD_MSC - { - .name = DRIVER_NAME("MSC"), - .init = mscd_init, - .deinit = NULL, - .reset = mscd_reset, - .open = mscd_open, - .control_xfer_cb = mscd_control_xfer_cb, - .xfer_cb = mscd_xfer_cb, - .sof = NULL - }, - #endif +#if CFG_TUD_MSC + { .name = DRIVER_NAME("MSC"), + .init = mscd_init, + .deinit = NULL, + .reset = mscd_reset, + .open = mscd_open, + .control_xfer_cb = mscd_control_xfer_cb, + .xfer_cb = mscd_xfer_cb, + .sof = NULL }, +#endif - #if CFG_TUD_HID - { - .name = DRIVER_NAME("HID"), - .init = hidd_init, - .deinit = hidd_deinit, - .reset = hidd_reset, - .open = hidd_open, - .control_xfer_cb = hidd_control_xfer_cb, - .xfer_cb = hidd_xfer_cb, - .sof = NULL - }, - #endif +#if CFG_TUD_HID + { .name = DRIVER_NAME("HID"), + .init = hidd_init, + .deinit = hidd_deinit, + .reset = hidd_reset, + .open = hidd_open, + .control_xfer_cb = hidd_control_xfer_cb, + .xfer_cb = hidd_xfer_cb, + .sof = NULL }, +#endif - #if CFG_TUD_AUDIO - { - .name = DRIVER_NAME("AUDIO"), - .init = audiod_init, - .deinit = audiod_deinit, - .reset = audiod_reset, - .open = audiod_open, - .control_xfer_cb = audiod_control_xfer_cb, - .xfer_cb = audiod_xfer_cb, - .sof = audiod_sof_isr - }, - #endif +#if CFG_TUD_AUDIO + { .name = DRIVER_NAME("AUDIO"), + .init = audiod_init, + .deinit = audiod_deinit, + .reset = audiod_reset, + .open = audiod_open, + .control_xfer_cb = audiod_control_xfer_cb, + .xfer_cb = audiod_xfer_cb, + .sof = audiod_sof_isr }, +#endif - #if CFG_TUD_VIDEO - { - .name = DRIVER_NAME("VIDEO"), - .init = videod_init, - .deinit = videod_deinit, - .reset = videod_reset, - .open = videod_open, - .control_xfer_cb = videod_control_xfer_cb, - .xfer_cb = videod_xfer_cb, - .sof = NULL - }, - #endif +#if CFG_TUD_VIDEO + { .name = DRIVER_NAME("VIDEO"), + .init = videod_init, + .deinit = videod_deinit, + .reset = videod_reset, + .open = videod_open, + .control_xfer_cb = videod_control_xfer_cb, + .xfer_cb = videod_xfer_cb, + .sof = NULL }, +#endif - #if CFG_TUD_MIDI - { - .name = DRIVER_NAME("MIDI"), - .init = midid_init, - .deinit = midid_deinit, - .open = midid_open, - .reset = midid_reset, - .control_xfer_cb = midid_control_xfer_cb, - .xfer_cb = midid_xfer_cb, - .sof = NULL - }, - #endif +#if CFG_TUD_MIDI + { .name = DRIVER_NAME("MIDI"), + .init = midid_init, + .deinit = midid_deinit, + .open = midid_open, + .reset = midid_reset, + .control_xfer_cb = midid_control_xfer_cb, + .xfer_cb = midid_xfer_cb, + .sof = NULL }, +#endif - #if CFG_TUD_VENDOR - { - .name = DRIVER_NAME("VENDOR"), - .init = vendord_init, - .deinit = vendord_deinit, - .reset = vendord_reset, - .open = vendord_open, - .control_xfer_cb = tud_vendor_control_xfer_cb, - .xfer_cb = vendord_xfer_cb, - .sof = NULL - }, - #endif +#if CFG_TUD_VENDOR + { .name = DRIVER_NAME("VENDOR"), + .init = vendord_init, + .deinit = vendord_deinit, + .reset = vendord_reset, + .open = vendord_open, + .control_xfer_cb = tud_vendor_control_xfer_cb, + .xfer_cb = vendord_xfer_cb, + .sof = NULL }, +#endif - #if CFG_TUD_USBTMC - { - .name = DRIVER_NAME("TMC"), - .init = usbtmcd_init_cb, - .deinit = usbtmcd_deinit, - .reset = usbtmcd_reset_cb, - .open = usbtmcd_open_cb, - .control_xfer_cb = usbtmcd_control_xfer_cb, - .xfer_cb = usbtmcd_xfer_cb, - .sof = NULL - }, - #endif +#if CFG_TUD_USBTMC + { .name = DRIVER_NAME("TMC"), + .init = usbtmcd_init_cb, + .deinit = usbtmcd_deinit, + .reset = usbtmcd_reset_cb, + .open = usbtmcd_open_cb, + .control_xfer_cb = usbtmcd_control_xfer_cb, + .xfer_cb = usbtmcd_xfer_cb, + .sof = NULL }, +#endif - #if CFG_TUD_DFU_RUNTIME - { - .name = DRIVER_NAME("DFU-RUNTIME"), - .init = dfu_rtd_init, - .deinit = dfu_rtd_deinit, - .reset = dfu_rtd_reset, - .open = dfu_rtd_open, - .control_xfer_cb = dfu_rtd_control_xfer_cb, - .xfer_cb = NULL, - .sof = NULL - }, - #endif +#if CFG_TUD_DFU_RUNTIME + { .name = DRIVER_NAME("DFU-RUNTIME"), + .init = dfu_rtd_init, + .deinit = dfu_rtd_deinit, + .reset = dfu_rtd_reset, + .open = dfu_rtd_open, + .control_xfer_cb = dfu_rtd_control_xfer_cb, + .xfer_cb = NULL, + .sof = NULL }, +#endif - #if CFG_TUD_DFU - { - .name = DRIVER_NAME("DFU"), - .init = dfu_moded_init, - .deinit = dfu_moded_deinit, - .reset = dfu_moded_reset, - .open = dfu_moded_open, - .control_xfer_cb = dfu_moded_control_xfer_cb, - .xfer_cb = NULL, - .sof = NULL - }, - #endif +#if CFG_TUD_DFU + { .name = DRIVER_NAME("DFU"), + .init = dfu_moded_init, + .deinit = dfu_moded_deinit, + .reset = dfu_moded_reset, + .open = dfu_moded_open, + .control_xfer_cb = dfu_moded_control_xfer_cb, + .xfer_cb = NULL, + .sof = NULL }, +#endif - #if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM +#if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM { - .name = DRIVER_NAME("NET"), - .init = netd_init, - .deinit = netd_deinit, - .reset = netd_reset, - .open = netd_open, - .control_xfer_cb = netd_control_xfer_cb, - .xfer_cb = netd_xfer_cb, - .sof = NULL, + .name = DRIVER_NAME("NET"), + .init = netd_init, + .deinit = netd_deinit, + .reset = netd_reset, + .open = netd_open, + .control_xfer_cb = netd_control_xfer_cb, + .xfer_cb = netd_xfer_cb, + .sof = NULL, }, - #endif +#endif - #if CFG_TUD_BTH - { - .name = DRIVER_NAME("BTH"), - .init = btd_init, - .deinit = btd_deinit, - .reset = btd_reset, - .open = btd_open, - .control_xfer_cb = btd_control_xfer_cb, - .xfer_cb = btd_xfer_cb, - .sof = NULL - }, - #endif +#if CFG_TUD_BTH + { .name = DRIVER_NAME("BTH"), + .init = btd_init, + .deinit = btd_deinit, + .reset = btd_reset, + .open = btd_open, + .control_xfer_cb = btd_control_xfer_cb, + .xfer_cb = btd_xfer_cb, + .sof = NULL }, +#endif }; enum { BUILTIN_DRIVER_COUNT = TU_ARRAY_SIZE(_usbd_driver) }; // Additional class drivers implemented by application -tu_static usbd_class_driver_t const * _app_driver = NULL; +tu_static usbd_class_driver_t const *_app_driver = NULL; tu_static uint8_t _app_driver_count = 0; -#define TOTAL_DRIVER_COUNT (_app_driver_count + BUILTIN_DRIVER_COUNT) +#define TOTAL_DRIVER_COUNT (_app_driver_count + BUILTIN_DRIVER_COUNT) // virtually joins built-in and application drivers together. // Application is positioned first to allow overwriting built-in ones. -TU_ATTR_ALWAYS_INLINE static inline usbd_class_driver_t const * get_driver(uint8_t drvid) { - usbd_class_driver_t const * driver = NULL; - if ( drvid < _app_driver_count ) { - // Application drivers - driver = &_app_driver[drvid]; - } else if ( drvid < TOTAL_DRIVER_COUNT && BUILTIN_DRIVER_COUNT > 0 ){ - driver = &_usbd_driver[drvid - _app_driver_count]; - } - return driver; +TU_ATTR_ALWAYS_INLINE static inline usbd_class_driver_t const *get_driver(uint8_t drvid) +{ + usbd_class_driver_t const *driver = NULL; + if (drvid < _app_driver_count) { + // Application drivers + driver = &_app_driver[drvid]; + } else if (drvid < TOTAL_DRIVER_COUNT && BUILTIN_DRIVER_COUNT > 0) { + driver = &_usbd_driver[drvid - _app_driver_count]; + } + return driver; } - //--------------------------------------------------------------------+ // DCD Event //--------------------------------------------------------------------+ @@ -336,67 +323,64 @@ tu_static osal_queue_t _usbd_q; // Mutex for claiming endpoint #if OSAL_MUTEX_REQUIRED - tu_static osal_mutex_def_t _ubsd_mutexdef; - tu_static osal_mutex_t _usbd_mutex; +tu_static osal_mutex_def_t _ubsd_mutexdef; +tu_static osal_mutex_t _usbd_mutex; #else - #define _usbd_mutex NULL +#define _usbd_mutex NULL #endif -TU_ATTR_ALWAYS_INLINE static inline bool queue_event(dcd_event_t const * event, bool in_isr) { - TU_ASSERT(osal_queue_send(_usbd_q, event, in_isr)); - tud_event_hook_cb(event->rhport, event->event_id, in_isr); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool queue_event(dcd_event_t const *event, bool in_isr) +{ + TU_ASSERT(osal_queue_send(_usbd_q, event, in_isr)); + tud_event_hook_cb(event->rhport, event->event_id, in_isr); + return true; } //--------------------------------------------------------------------+ // Prototypes //--------------------------------------------------------------------+ -static bool process_control_request(uint8_t rhport, tusb_control_request_t const * p_request); +static bool process_control_request(uint8_t rhport, tusb_control_request_t const *p_request); static bool process_set_config(uint8_t rhport, uint8_t cfg_num); -static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const * p_request); +static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const *p_request); #if CFG_TUD_TEST_MODE -static bool process_test_mode_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - TU_VERIFY(CONTROL_STAGE_ACK == stage); - uint8_t const selector = tu_u16_high(request->wIndex); - TU_LOG_USBD(" Enter Test Mode (test selector index: %d)\r\n", selector); - dcd_enter_test_mode(rhport, (tusb_feature_test_mode_t) selector); - return true; +static bool process_test_mode_cb(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request) +{ + TU_VERIFY(CONTROL_STAGE_ACK == stage); + uint8_t const selector = tu_u16_high(request->wIndex); + TU_LOG_USBD(" Enter Test Mode (test selector index: %d)\r\n", selector); + dcd_enter_test_mode(rhport, (tusb_feature_test_mode_t)selector); + return true; } #endif // from usbd_control.c void usbd_control_reset(void); void usbd_control_set_request(tusb_control_request_t const *request); -void usbd_control_set_complete_callback( usbd_control_xfer_cb_t fp ); -bool usbd_control_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); - +void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp); +bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, + uint32_t xferred_bytes); //--------------------------------------------------------------------+ // Debug //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL -tu_static char const* const _usbd_event_str[DCD_EVENT_COUNT] = { - "Invalid", - "Bus Reset", - "Unplugged", - "SOF", - "Suspend", - "Resume", - "Setup Received", - "Xfer Complete", - "Func Call" +tu_static char const *const _usbd_event_str[DCD_EVENT_COUNT] = { + "Invalid", "Bus Reset", "Unplugged", "SOF", "Suspend", + "Resume", "Setup Received", "Xfer Complete", "Func Call" }; // for usbd_control to print the name of control complete driver -void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback) { - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const* driver = get_driver(i); - if (driver && driver->control_xfer_cb == callback) { - TU_LOG_USBD("%s control complete\r\n", driver->name); - return; +void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback) +{ + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const *driver = get_driver(i); + if (driver && driver->control_xfer_cb == callback) { + TU_LOG_USBD("%s control complete\r\n", driver->name); + return; + } } - } } #endif @@ -404,151 +388,168 @@ void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback) { //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ -tusb_speed_t tud_speed_get(void) { - return (tusb_speed_t) _usbd_dev.speed; +tusb_speed_t tud_speed_get(void) +{ + return (tusb_speed_t)_usbd_dev.speed; } -bool tud_connected(void) { - return _usbd_dev.connected; +bool tud_connected(void) +{ + return _usbd_dev.connected; } -bool tud_mounted(void) { - return _usbd_dev.cfg_num ? true : false; +bool tud_mounted(void) +{ + return _usbd_dev.cfg_num ? true : false; } -bool tud_suspended(void) { - return _usbd_dev.suspended; +bool tud_suspended(void) +{ + return _usbd_dev.suspended; } -bool tud_remote_wakeup(void) { - // only wake up host if this feature is supported and enabled and we are suspended - TU_VERIFY (_usbd_dev.suspended && _usbd_dev.remote_wakeup_support && _usbd_dev.remote_wakeup_en); - dcd_remote_wakeup(_usbd_rhport); - return true; +bool tud_remote_wakeup(void) +{ + // only wake up host if this feature is supported and enabled and we are suspended + TU_VERIFY(_usbd_dev.suspended && _usbd_dev.remote_wakeup_support && _usbd_dev.remote_wakeup_en); + dcd_remote_wakeup(_usbd_rhport); + return true; } -bool tud_disconnect(void) { - dcd_disconnect(_usbd_rhport); - return true; +bool tud_disconnect(void) +{ + dcd_disconnect(_usbd_rhport); + return true; } -bool tud_connect(void) { - dcd_connect(_usbd_rhport); - return true; +bool tud_connect(void) +{ + dcd_connect(_usbd_rhport); + return true; } -void tud_sof_cb_enable(bool en) { - usbd_sof_enable(_usbd_rhport, SOF_CONSUMER_USER, en); +void tud_sof_cb_enable(bool en) +{ + usbd_sof_enable(_usbd_rhport, SOF_CONSUMER_USER, en); } //--------------------------------------------------------------------+ // USBD Task //--------------------------------------------------------------------+ -bool tud_inited(void) { - return _usbd_rhport != RHPORT_INVALID; +bool tud_inited(void) +{ + return _usbd_rhport != RHPORT_INVALID; } -bool tud_init(uint8_t rhport) { - // skip if already initialized - if (tud_inited()) return true; +bool tud_init(uint8_t rhport) +{ + // skip if already initialized + if (tud_inited()) + return true; - TU_LOG_USBD("USBD init on controller %u, Highspeed = %u\r\n", rhport, TUD_OPT_HIGH_SPEED); - TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(usbd_device_t)); - TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(dcd_event_t)); - TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_fifo_t)); - TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_edpt_stream_t)); + TU_LOG_USBD("USBD init on controller %u, Highspeed = %u\r\n", rhport, TUD_OPT_HIGH_SPEED); + TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(usbd_device_t)); + TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(dcd_event_t)); + TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_fifo_t)); + TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_edpt_stream_t)); - tu_varclr(&_usbd_dev); - _usbd_queued_setup = 0; + tu_varclr(&_usbd_dev); + _usbd_queued_setup = 0; #if OSAL_MUTEX_REQUIRED - // Init device mutex - _usbd_mutex = osal_mutex_create(&_ubsd_mutexdef); - TU_ASSERT(_usbd_mutex); + // Init device mutex + _usbd_mutex = osal_mutex_create(&_ubsd_mutexdef); + TU_ASSERT(_usbd_mutex); #endif - // Init device queue & task - _usbd_q = osal_queue_create(&_usbd_qdef); - TU_ASSERT(_usbd_q); + // Init device queue & task + _usbd_q = osal_queue_create(&_usbd_qdef); + TU_ASSERT(_usbd_q); - // Get application driver if available - if (usbd_app_driver_get_cb) { - _app_driver = usbd_app_driver_get_cb(&_app_driver_count); - } + // Get application driver if available + if (usbd_app_driver_get_cb) { + _app_driver = usbd_app_driver_get_cb(&_app_driver_count); + } - // Init class drivers - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const* driver = get_driver(i); - TU_ASSERT(driver && driver->init); - TU_LOG_USBD("%s init\r\n", driver->name); - driver->init(); - } + // Init class drivers + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const *driver = get_driver(i); + TU_ASSERT(driver && driver->init); + TU_LOG_USBD("%s init\r\n", driver->name); + driver->init(); + } - _usbd_rhport = rhport; + _usbd_rhport = rhport; - // Init device controller driver - dcd_init(rhport); - dcd_int_enable(rhport); + // Init device controller driver + dcd_init(rhport); + dcd_int_enable(rhport); - return true; + return true; } -bool tud_deinit(uint8_t rhport) { - // skip if not initialized - if (!tud_inited()) return true; - - TU_LOG_USBD("USBD deinit on controller %u\r\n", rhport); - - // Deinit device controller driver - dcd_int_disable(rhport); - dcd_disconnect(rhport); - dcd_deinit(rhport); - - // Deinit class drivers - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const* driver = get_driver(i); - if(driver && driver->deinit) { - TU_LOG_USBD("%s deinit\r\n", driver->name); - driver->deinit(); +bool tud_deinit(uint8_t rhport) +{ + // skip if not initialized + if (!tud_inited()) + return true; + + TU_LOG_USBD("USBD deinit on controller %u\r\n", rhport); + + // Deinit device controller driver + dcd_int_disable(rhport); + dcd_disconnect(rhport); + dcd_deinit(rhport); + + // Deinit class drivers + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const *driver = get_driver(i); + if (driver && driver->deinit) { + TU_LOG_USBD("%s deinit\r\n", driver->name); + driver->deinit(); + } } - } - // Deinit device queue & task - osal_queue_delete(_usbd_q); - _usbd_q = NULL; + // Deinit device queue & task + osal_queue_delete(_usbd_q); + _usbd_q = NULL; #if OSAL_MUTEX_REQUIRED - // TODO make sure there is no task waiting on this mutex - osal_mutex_delete(_usbd_mutex); - _usbd_mutex = NULL; + // TODO make sure there is no task waiting on this mutex + osal_mutex_delete(_usbd_mutex); + _usbd_mutex = NULL; #endif - _usbd_rhport = RHPORT_INVALID; + _usbd_rhport = RHPORT_INVALID; - return true; + return true; } -static void configuration_reset(uint8_t rhport) { - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const* driver = get_driver(i); - TU_ASSERT(driver,); - driver->reset(rhport); - } +static void configuration_reset(uint8_t rhport) +{ + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const *driver = get_driver(i); + TU_ASSERT(driver, ); + driver->reset(rhport); + } - tu_varclr(&_usbd_dev); - memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping - memset(_usbd_dev.ep2drv, DRVID_INVALID, sizeof(_usbd_dev.ep2drv)); // invalid mapping + tu_varclr(&_usbd_dev); + memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping + memset(_usbd_dev.ep2drv, DRVID_INVALID, sizeof(_usbd_dev.ep2drv)); // invalid mapping } -static void usbd_reset(uint8_t rhport) { - configuration_reset(rhport); - usbd_control_reset(); +static void usbd_reset(uint8_t rhport) +{ + configuration_reset(rhport); + usbd_control_reset(); } -bool tud_task_event_ready(void) { - // Skip if stack is not initialized - if (!tud_inited()) return false; - return !osal_queue_empty(_usbd_q); +bool tud_task_event_ready(void) +{ + // Skip if stack is not initialized + if (!tud_inited()) + return false; + return !osal_queue_empty(_usbd_q); } /* USB Device Driver task @@ -565,130 +566,140 @@ bool tud_task_event_ready(void) { } } */ -void tud_task_ext(uint32_t timeout_ms, bool in_isr) { - (void) in_isr; // not implemented yet +void tud_task_ext(uint32_t timeout_ms, bool in_isr) +{ + (void)in_isr; // not implemented yet - // Skip if stack is not initialized - if (!tud_inited()) return; + // Skip if stack is not initialized + if (!tud_inited()) + return; - // Loop until there is no more events in the queue - while (1) { - dcd_event_t event; - if (!osal_queue_receive(_usbd_q, &event, timeout_ms)) return; + // Loop until there is no more events in the queue + while (1) { + dcd_event_t event; + if (!osal_queue_receive(_usbd_q, &event, timeout_ms)) + return; #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL - if (event.event_id == DCD_EVENT_SETUP_RECEIVED) TU_LOG_USBD("\r\n"); // extra line for setup - TU_LOG_USBD("USBD %s ", event.event_id < DCD_EVENT_COUNT ? _usbd_event_str[event.event_id] : "CORRUPTED"); + if (event.event_id == DCD_EVENT_SETUP_RECEIVED) + TU_LOG_USBD("\r\n"); // extra line for setup + TU_LOG_USBD("USBD %s ", event.event_id < DCD_EVENT_COUNT ? _usbd_event_str[event.event_id] : + "CORRUPTED"); #endif - switch (event.event_id) { - case DCD_EVENT_BUS_RESET: - TU_LOG_USBD(": %s Speed\r\n", tu_str_speed[event.bus_reset.speed]); - usbd_reset(event.rhport); - _usbd_dev.speed = event.bus_reset.speed; - break; + switch (event.event_id) { + case DCD_EVENT_BUS_RESET: + TU_LOG_USBD(": %s Speed\r\n", tu_str_speed[event.bus_reset.speed]); + usbd_reset(event.rhport); + _usbd_dev.speed = event.bus_reset.speed; + break; - case DCD_EVENT_UNPLUGGED: - TU_LOG_USBD("\r\n"); - usbd_reset(event.rhport); - tud_umount_cb(); - break; + case DCD_EVENT_UNPLUGGED: + TU_LOG_USBD("\r\n"); + usbd_reset(event.rhport); + tud_umount_cb(); + break; - case DCD_EVENT_SETUP_RECEIVED: - TU_ASSERT(_usbd_queued_setup > 0,); - _usbd_queued_setup--; - TU_LOG_BUF(CFG_TUD_LOG_LEVEL, &event.setup_received, 8); - if (_usbd_queued_setup) { - TU_LOG_USBD(" Skipped since there is other SETUP in queue\r\n"); - break; - } + case DCD_EVENT_SETUP_RECEIVED: + TU_ASSERT(_usbd_queued_setup > 0, ); + _usbd_queued_setup--; + TU_LOG_BUF(CFG_TUD_LOG_LEVEL, &event.setup_received, 8); + if (_usbd_queued_setup) { + TU_LOG_USBD(" Skipped since there is other SETUP in queue\r\n"); + break; + } - // Mark as connected after receiving 1st setup packet. - // But it is easier to set it every time instead of wasting time to check then set - _usbd_dev.connected = 1; - - // mark both in & out control as free - _usbd_dev.ep_status[0][TUSB_DIR_OUT].busy = 0; - _usbd_dev.ep_status[0][TUSB_DIR_OUT].claimed = 0; - _usbd_dev.ep_status[0][TUSB_DIR_IN].busy = 0; - _usbd_dev.ep_status[0][TUSB_DIR_IN].claimed = 0; - - // Process control request - if (!process_control_request(event.rhport, &event.setup_received)) { - TU_LOG_USBD(" Stall EP0\r\n"); - // Failed -> stall both control endpoint IN and OUT - dcd_edpt_stall(event.rhport, 0); - dcd_edpt_stall(event.rhport, 0 | TUSB_DIR_IN_MASK); - } - break; + // Mark as connected after receiving 1st setup packet. + // But it is easier to set it every time instead of wasting time to check then set + _usbd_dev.connected = 1; + + // mark both in & out control as free + _usbd_dev.ep_status[0][TUSB_DIR_OUT].busy = 0; + _usbd_dev.ep_status[0][TUSB_DIR_OUT].claimed = 0; + _usbd_dev.ep_status[0][TUSB_DIR_IN].busy = 0; + _usbd_dev.ep_status[0][TUSB_DIR_IN].claimed = 0; + + // Process control request + if (!process_control_request(event.rhport, &event.setup_received)) { + TU_LOG_USBD(" Stall EP0\r\n"); + // Failed -> stall both control endpoint IN and OUT + dcd_edpt_stall(event.rhport, 0); + dcd_edpt_stall(event.rhport, 0 | TUSB_DIR_IN_MASK); + } + break; - case DCD_EVENT_XFER_COMPLETE: { - // Invoke the class callback associated with the endpoint address - uint8_t const ep_addr = event.xfer_complete.ep_addr; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const ep_dir = tu_edpt_dir(ep_addr); + case DCD_EVENT_XFER_COMPLETE: { + // Invoke the class callback associated with the endpoint address + uint8_t const ep_addr = event.xfer_complete.ep_addr; + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const ep_dir = tu_edpt_dir(ep_addr); - TU_LOG_USBD("on EP %02X with %u bytes\r\n", ep_addr, (unsigned int) event.xfer_complete.len); + TU_LOG_USBD("on EP %02X with %u bytes\r\n", ep_addr, + (unsigned int)event.xfer_complete.len); - _usbd_dev.ep_status[epnum][ep_dir].busy = 0; - _usbd_dev.ep_status[epnum][ep_dir].claimed = 0; + _usbd_dev.ep_status[epnum][ep_dir].busy = 0; + _usbd_dev.ep_status[epnum][ep_dir].claimed = 0; - if (0 == epnum) { - usbd_control_xfer_cb(event.rhport, ep_addr, (xfer_result_t) event.xfer_complete.result, - event.xfer_complete.len); - } else { - usbd_class_driver_t const* driver = get_driver(_usbd_dev.ep2drv[epnum][ep_dir]); - TU_ASSERT(driver,); + if (0 == epnum) { + usbd_control_xfer_cb(event.rhport, ep_addr, + (xfer_result_t)event.xfer_complete.result, + event.xfer_complete.len); + } else { + usbd_class_driver_t const *driver = get_driver(_usbd_dev.ep2drv[epnum][ep_dir]); + TU_ASSERT(driver, ); - TU_LOG_USBD(" %s xfer callback\r\n", driver->name); - driver->xfer_cb(event.rhport, ep_addr, (xfer_result_t) event.xfer_complete.result, event.xfer_complete.len); + TU_LOG_USBD(" %s xfer callback\r\n", driver->name); + driver->xfer_cb(event.rhport, ep_addr, (xfer_result_t)event.xfer_complete.result, + event.xfer_complete.len); + } + break; } - break; - } - case DCD_EVENT_SUSPEND: - // NOTE: When plugging/unplugging device, the D+/D- state are unstable and - // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ), which result in a series of event - // e.g suspend -> resume -> unplug/plug. Skip suspend/resume if not connected - if (_usbd_dev.connected) { - TU_LOG_USBD(": Remote Wakeup = %u\r\n", _usbd_dev.remote_wakeup_en); - tud_suspend_cb(_usbd_dev.remote_wakeup_en); - } else { - TU_LOG_USBD(" Skipped\r\n"); - } - break; + case DCD_EVENT_SUSPEND: + // NOTE: When plugging/unplugging device, the D+/D- state are unstable and + // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ), which result in a series of event + // e.g suspend -> resume -> unplug/plug. Skip suspend/resume if not connected + if (_usbd_dev.connected) { + TU_LOG_USBD(": Remote Wakeup = %u\r\n", _usbd_dev.remote_wakeup_en); + tud_suspend_cb(_usbd_dev.remote_wakeup_en); + } else { + TU_LOG_USBD(" Skipped\r\n"); + } + break; - case DCD_EVENT_RESUME: - if (_usbd_dev.connected) { - TU_LOG_USBD("\r\n"); - tud_resume_cb(); - } else { - TU_LOG_USBD(" Skipped\r\n"); - } - break; + case DCD_EVENT_RESUME: + if (_usbd_dev.connected) { + TU_LOG_USBD("\r\n"); + tud_resume_cb(); + } else { + TU_LOG_USBD(" Skipped\r\n"); + } + break; - case USBD_EVENT_FUNC_CALL: - TU_LOG_USBD("\r\n"); - if (event.func_call.func) event.func_call.func(event.func_call.param); - break; + case USBD_EVENT_FUNC_CALL: + TU_LOG_USBD("\r\n"); + if (event.func_call.func) + event.func_call.func(event.func_call.param); + break; - case DCD_EVENT_SOF: - if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { - TU_LOG_USBD("\r\n"); - tud_sof_cb(event.sof.frame_count); - } - break; + case DCD_EVENT_SOF: + if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { + TU_LOG_USBD("\r\n"); + tud_sof_cb(event.sof.frame_count); + } + break; - default: - TU_BREAKPOINT(); - break; - } + default: + TU_BREAKPOINT(); + break; + } #if CFG_TUSB_OS != OPT_OS_NONE && CFG_TUSB_OS != OPT_OS_PICO - // return if there is no more events, for application to run other background - if (osal_queue_empty(_usbd_q)) return; + // return if there is no more events, for application to run other background + if (osal_queue_empty(_usbd_q)) + return; #endif - } + } } //--------------------------------------------------------------------+ @@ -696,523 +707,540 @@ void tud_task_ext(uint32_t timeout_ms, bool in_isr) { //--------------------------------------------------------------------+ // Helper to invoke class driver control request handler -static bool invoke_class_control(uint8_t rhport, usbd_class_driver_t const * driver, tusb_control_request_t const * request) { - usbd_control_set_complete_callback(driver->control_xfer_cb); - TU_LOG_USBD(" %s control request\r\n", driver->name); - return driver->control_xfer_cb(rhport, CONTROL_STAGE_SETUP, request); +static bool invoke_class_control(uint8_t rhport, usbd_class_driver_t const *driver, + tusb_control_request_t const *request) +{ + usbd_control_set_complete_callback(driver->control_xfer_cb); + TU_LOG_USBD(" %s control request\r\n", driver->name); + return driver->control_xfer_cb(rhport, CONTROL_STAGE_SETUP, request); } // This handles the actual request and its response. // Returns false if unable to complete the request, causing caller to stall control endpoints. -static bool process_control_request(uint8_t rhport, tusb_control_request_t const * p_request) { - usbd_control_set_complete_callback(NULL); - TU_ASSERT(p_request->bmRequestType_bit.type < TUSB_REQ_TYPE_INVALID); +static bool process_control_request(uint8_t rhport, tusb_control_request_t const *p_request) +{ + usbd_control_set_complete_callback(NULL); + TU_ASSERT(p_request->bmRequestType_bit.type < TUSB_REQ_TYPE_INVALID); - // Vendor request - if ( p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_VENDOR ) { - usbd_control_set_complete_callback(tud_vendor_control_xfer_cb); - return tud_vendor_control_xfer_cb(rhport, CONTROL_STAGE_SETUP, p_request); - } + // Vendor request + if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_VENDOR) { + usbd_control_set_complete_callback(tud_vendor_control_xfer_cb); + return tud_vendor_control_xfer_cb(rhport, CONTROL_STAGE_SETUP, p_request); + } #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL - if (TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type && p_request->bRequest <= TUSB_REQ_SYNCH_FRAME) { - TU_LOG_USBD(" %s", tu_str_std_request[p_request->bRequest]); - if (TUSB_REQ_GET_DESCRIPTOR != p_request->bRequest) TU_LOG_USBD("\r\n"); - } + if (TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type && + p_request->bRequest <= TUSB_REQ_SYNCH_FRAME) { + TU_LOG_USBD(" %s", tu_str_std_request[p_request->bRequest]); + if (TUSB_REQ_GET_DESCRIPTOR != p_request->bRequest) + TU_LOG_USBD("\r\n"); + } #endif - switch ( p_request->bmRequestType_bit.recipient ) { + switch (p_request->bmRequestType_bit.recipient) { //------------- Device Requests e.g in enumeration -------------// case TUSB_REQ_RCPT_DEVICE: - if ( TUSB_REQ_TYPE_CLASS == p_request->bmRequestType_bit.type ) { - uint8_t const itf = tu_u16_low(p_request->wIndex); - TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); + if (TUSB_REQ_TYPE_CLASS == p_request->bmRequestType_bit.type) { + uint8_t const itf = tu_u16_low(p_request->wIndex); + TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); - usbd_class_driver_t const * driver = get_driver(_usbd_dev.itf2drv[itf]); - TU_VERIFY(driver); + usbd_class_driver_t const *driver = get_driver(_usbd_dev.itf2drv[itf]); + TU_VERIFY(driver); - // forward to class driver: "non-STD request to Interface" - return invoke_class_control(rhport, driver, p_request); - } + // forward to class driver: "non-STD request to Interface" + return invoke_class_control(rhport, driver, p_request); + } - if ( TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type ) { - // Non-standard request is not supported - TU_BREAKPOINT(); - return false; - } + if (TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type) { + // Non-standard request is not supported + TU_BREAKPOINT(); + return false; + } - switch ( p_request->bRequest ) { + switch (p_request->bRequest) { case TUSB_REQ_SET_ADDRESS: - // Depending on mcu, status phase could be sent either before or after changing device address, - // or even require stack to not response with status at all - // Therefore DCD must take full responsibility to response and include zlp status packet if needed. - usbd_control_set_request(p_request); // set request since DCD has no access to tud_control_status() API - dcd_set_address(rhport, (uint8_t) p_request->wValue); - // skip tud_control_status() - _usbd_dev.addressed = 1; - break; + // Depending on mcu, status phase could be sent either before or after changing device address, + // or even require stack to not response with status at all + // Therefore DCD must take full responsibility to response and include zlp status packet if needed. + usbd_control_set_request( + p_request); // set request since DCD has no access to tud_control_status() API + dcd_set_address(rhport, (uint8_t)p_request->wValue); + // skip tud_control_status() + _usbd_dev.addressed = 1; + break; case TUSB_REQ_GET_CONFIGURATION: { - uint8_t cfg_num = _usbd_dev.cfg_num; - tud_control_xfer(rhport, p_request, &cfg_num, 1); - } - break; + uint8_t cfg_num = _usbd_dev.cfg_num; + tud_control_xfer(rhport, p_request, &cfg_num, 1); + } break; case TUSB_REQ_SET_CONFIGURATION: { - uint8_t const cfg_num = (uint8_t) p_request->wValue; - - // Only process if new configure is different - if (_usbd_dev.cfg_num != cfg_num) { - if ( _usbd_dev.cfg_num ) { - // already configured: need to clear all endpoints and driver first - TU_LOG_USBD(" Clear current Configuration (%u) before switching\r\n", _usbd_dev.cfg_num); - - // disable SOF - dcd_sof_enable(rhport, false); - - // close all non-control endpoints, cancel all pending transfers if any - dcd_edpt_close_all(rhport); - - // close all drivers and current configured state except bus speed - uint8_t const speed = _usbd_dev.speed; - configuration_reset(rhport); - - _usbd_dev.speed = speed; // restore speed + uint8_t const cfg_num = (uint8_t)p_request->wValue; + + // Only process if new configure is different + if (_usbd_dev.cfg_num != cfg_num) { + if (_usbd_dev.cfg_num) { + // already configured: need to clear all endpoints and driver first + TU_LOG_USBD(" Clear current Configuration (%u) before switching\r\n", + _usbd_dev.cfg_num); + + // disable SOF + dcd_sof_enable(rhport, false); + + // close all non-control endpoints, cancel all pending transfers if any + dcd_edpt_close_all(rhport); + + // close all drivers and current configured state except bus speed + uint8_t const speed = _usbd_dev.speed; + configuration_reset(rhport); + + _usbd_dev.speed = speed; // restore speed + } + + _usbd_dev.cfg_num = cfg_num; + + // Handle the new configuration and execute the corresponding callback + if (cfg_num) { + // switch to new configuration if not zero + if (!process_set_config(rhport, cfg_num)) { + TU_MESS_FAILED(); + TU_BREAKPOINT(); + _usbd_dev.cfg_num = 0; + return false; + } + tud_mount_cb(); + } else { + tud_umount_cb(); + } } - _usbd_dev.cfg_num = cfg_num; - - // Handle the new configuration and execute the corresponding callback - if ( cfg_num ) { - // switch to new configuration if not zero - if (!process_set_config(rhport, cfg_num)) { - TU_MESS_FAILED(); - TU_BREAKPOINT(); - _usbd_dev.cfg_num = 0; - return false; - } - tud_mount_cb(); - } else { - tud_umount_cb(); - } - } - - tud_control_status(rhport, p_request); - } - break; + tud_control_status(rhport, p_request); + } break; case TUSB_REQ_GET_DESCRIPTOR: - TU_VERIFY( process_get_descriptor(rhport, p_request) ); - break; + TU_VERIFY(process_get_descriptor(rhport, p_request)); + break; case TUSB_REQ_SET_FEATURE: - switch(p_request->wValue) { + switch (p_request->wValue) { case TUSB_REQ_FEATURE_REMOTE_WAKEUP: - TU_LOG_USBD(" Enable Remote Wakeup\r\n"); - // Host may enable remote wake up before suspending especially HID device - _usbd_dev.remote_wakeup_en = true; - tud_control_status(rhport, p_request); - break; + TU_LOG_USBD(" Enable Remote Wakeup\r\n"); + // Host may enable remote wake up before suspending especially HID device + _usbd_dev.remote_wakeup_en = true; + tud_control_status(rhport, p_request); + break; - #if CFG_TUD_TEST_MODE +#if CFG_TUD_TEST_MODE case TUSB_REQ_FEATURE_TEST_MODE: { - // Only handle the test mode if supported and valid - TU_VERIFY(0 == tu_u16_low(p_request->wIndex)); + // Only handle the test mode if supported and valid + TU_VERIFY(0 == tu_u16_low(p_request->wIndex)); - uint8_t const selector = tu_u16_high(p_request->wIndex); - TU_VERIFY(TUSB_FEATURE_TEST_J <= selector && selector <= TUSB_FEATURE_TEST_FORCE_ENABLE); + uint8_t const selector = tu_u16_high(p_request->wIndex); + TU_VERIFY(TUSB_FEATURE_TEST_J <= selector && + selector <= TUSB_FEATURE_TEST_FORCE_ENABLE); - usbd_control_set_complete_callback(process_test_mode_cb); - tud_control_status(rhport, p_request); - break; + usbd_control_set_complete_callback(process_test_mode_cb); + tud_control_status(rhport, p_request); + break; } - #endif /* CFG_TUD_TEST_MODE */ +#endif /* CFG_TUD_TEST_MODE */ // Stall unsupported feature selector - default: return false; - } - break; + default: + return false; + } + break; case TUSB_REQ_CLEAR_FEATURE: - // Only support remote wakeup for device feature - TU_VERIFY(TUSB_REQ_FEATURE_REMOTE_WAKEUP == p_request->wValue); + // Only support remote wakeup for device feature + TU_VERIFY(TUSB_REQ_FEATURE_REMOTE_WAKEUP == p_request->wValue); - TU_LOG_USBD(" Disable Remote Wakeup\r\n"); + TU_LOG_USBD(" Disable Remote Wakeup\r\n"); - // Host may disable remote wake up after resuming - _usbd_dev.remote_wakeup_en = false; - tud_control_status(rhport, p_request); - break; + // Host may disable remote wake up after resuming + _usbd_dev.remote_wakeup_en = false; + tud_control_status(rhport, p_request); + break; case TUSB_REQ_GET_STATUS: { - // Device status bit mask - // - Bit 0: Self Powered - // - Bit 1: Remote Wakeup enabled - uint16_t status = (uint16_t) ((_usbd_dev.self_powered ? 1u : 0u) | (_usbd_dev.remote_wakeup_en ? 2u : 0u)); - tud_control_xfer(rhport, p_request, &status, 2); - break; + // Device status bit mask + // - Bit 0: Self Powered + // - Bit 1: Remote Wakeup enabled + uint16_t status = (uint16_t)((_usbd_dev.self_powered ? 1u : 0u) | + (_usbd_dev.remote_wakeup_en ? 2u : 0u)); + tud_control_xfer(rhport, p_request, &status, 2); + break; } // Unknown/Unsupported request - default: TU_BREAKPOINT(); return false; - } - break; + default: + TU_BREAKPOINT(); + return false; + } + break; //------------- Class/Interface Specific Request -------------// case TUSB_REQ_RCPT_INTERFACE: { - uint8_t const itf = tu_u16_low(p_request->wIndex); - TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); - - usbd_class_driver_t const * driver = get_driver(_usbd_dev.itf2drv[itf]); - TU_VERIFY(driver); - - // all requests to Interface (STD or Class) is forwarded to class driver. - // notable requests are: GET HID REPORT DESCRIPTOR, SET_INTERFACE, GET_INTERFACE - if ( !invoke_class_control(rhport, driver, p_request) ) { - // For GET_INTERFACE and SET_INTERFACE, it is mandatory to respond even if the class - // driver doesn't use alternate settings or implement this - TU_VERIFY(TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type); - - switch(p_request->bRequest) { - case TUSB_REQ_GET_INTERFACE: - case TUSB_REQ_SET_INTERFACE: - // Clear complete callback if driver set since it can also stall the request. - usbd_control_set_complete_callback(NULL); - - if (TUSB_REQ_GET_INTERFACE == p_request->bRequest) { - uint8_t alternate = 0; - tud_control_xfer(rhport, p_request, &alternate, 1); - }else { - tud_control_status(rhport, p_request); - } - break; + uint8_t const itf = tu_u16_low(p_request->wIndex); + TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); - default: return false; + usbd_class_driver_t const *driver = get_driver(_usbd_dev.itf2drv[itf]); + TU_VERIFY(driver); + + // all requests to Interface (STD or Class) is forwarded to class driver. + // notable requests are: GET HID REPORT DESCRIPTOR, SET_INTERFACE, GET_INTERFACE + if (!invoke_class_control(rhport, driver, p_request)) { + // For GET_INTERFACE and SET_INTERFACE, it is mandatory to respond even if the class + // driver doesn't use alternate settings or implement this + TU_VERIFY(TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type); + + switch (p_request->bRequest) { + case TUSB_REQ_GET_INTERFACE: + case TUSB_REQ_SET_INTERFACE: + // Clear complete callback if driver set since it can also stall the request. + usbd_control_set_complete_callback(NULL); + + if (TUSB_REQ_GET_INTERFACE == p_request->bRequest) { + uint8_t alternate = 0; + tud_control_xfer(rhport, p_request, &alternate, 1); + } else { + tud_control_status(rhport, p_request); + } + break; + + default: + return false; + } } - } - break; + break; } //------------- Endpoint Request -------------// case TUSB_REQ_RCPT_ENDPOINT: { - uint8_t const ep_addr = tu_u16_low(p_request->wIndex); - uint8_t const ep_num = tu_edpt_number(ep_addr); - uint8_t const ep_dir = tu_edpt_dir(ep_addr); - - TU_ASSERT(ep_num < TU_ARRAY_SIZE(_usbd_dev.ep2drv) ); - usbd_class_driver_t const * driver = get_driver(_usbd_dev.ep2drv[ep_num][ep_dir]); - - if ( TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type ) { - // Forward class request to its driver - TU_VERIFY(driver); - return invoke_class_control(rhport, driver, p_request); - } else { - // Handle STD request to endpoint - switch ( p_request->bRequest ) { - case TUSB_REQ_GET_STATUS: { - uint16_t status = usbd_edpt_stalled(rhport, ep_addr) ? 0x0001 : 0x0000; - tud_control_xfer(rhport, p_request, &status, 2); - } - break; - - case TUSB_REQ_CLEAR_FEATURE: - case TUSB_REQ_SET_FEATURE: { - if ( TUSB_REQ_FEATURE_EDPT_HALT == p_request->wValue ) { - if ( TUSB_REQ_CLEAR_FEATURE == p_request->bRequest ) { - usbd_edpt_clear_stall(rhport, ep_addr); - }else { - usbd_edpt_stall(rhport, ep_addr); - } - } - - if (driver) { - // Some classes such as USBTMC needs to clear/re-init its buffer when receiving CLEAR_FEATURE request - // We will also forward std request targeted endpoint to class drivers as well + uint8_t const ep_addr = tu_u16_low(p_request->wIndex); + uint8_t const ep_num = tu_edpt_number(ep_addr); + uint8_t const ep_dir = tu_edpt_dir(ep_addr); - // STD request must always be ACKed regardless of driver returned value - // Also clear complete callback if driver set since it can also stall the request. - (void) invoke_class_control(rhport, driver, p_request); - usbd_control_set_complete_callback(NULL); + TU_ASSERT(ep_num < TU_ARRAY_SIZE(_usbd_dev.ep2drv)); + usbd_class_driver_t const *driver = get_driver(_usbd_dev.ep2drv[ep_num][ep_dir]); - // skip ZLP status if driver already did that - if ( !_usbd_dev.ep_status[0][TUSB_DIR_IN].busy ) tud_control_status(rhport, p_request); + if (TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type) { + // Forward class request to its driver + TU_VERIFY(driver); + return invoke_class_control(rhport, driver, p_request); + } else { + // Handle STD request to endpoint + switch (p_request->bRequest) { + case TUSB_REQ_GET_STATUS: { + uint16_t status = usbd_edpt_stalled(rhport, ep_addr) ? 0x0001 : 0x0000; + tud_control_xfer(rhport, p_request, &status, 2); + } break; + + case TUSB_REQ_CLEAR_FEATURE: + case TUSB_REQ_SET_FEATURE: { + if (TUSB_REQ_FEATURE_EDPT_HALT == p_request->wValue) { + if (TUSB_REQ_CLEAR_FEATURE == p_request->bRequest) { + usbd_edpt_clear_stall(rhport, ep_addr); + } else { + usbd_edpt_stall(rhport, ep_addr); + } + } + + if (driver) { + // Some classes such as USBTMC needs to clear/re-init its buffer when receiving CLEAR_FEATURE request + // We will also forward std request targeted endpoint to class drivers as well + + // STD request must always be ACKed regardless of driver returned value + // Also clear complete callback if driver set since it can also stall the request. + (void)invoke_class_control(rhport, driver, p_request); + usbd_control_set_complete_callback(NULL); + + // skip ZLP status if driver already did that + if (!_usbd_dev.ep_status[0][TUSB_DIR_IN].busy) + tud_control_status(rhport, p_request); + } + } break; + + // Unknown/Unsupported request + default: + TU_BREAKPOINT(); + return false; } - } - break; - - // Unknown/Unsupported request - default: - TU_BREAKPOINT(); - return false; } - } - } - break; + } break; // Unknown recipient default: - TU_BREAKPOINT(); - return false; - } + TU_BREAKPOINT(); + return false; + } - return true; + return true; } // Process Set Configure Request // This function parse configuration descriptor & open drivers accordingly static bool process_set_config(uint8_t rhport, uint8_t cfg_num) { - // index is cfg_num-1 - tusb_desc_configuration_t const * desc_cfg = (tusb_desc_configuration_t const *) tud_descriptor_configuration_cb(cfg_num-1); - TU_ASSERT(desc_cfg != NULL && desc_cfg->bDescriptorType == TUSB_DESC_CONFIGURATION); - - // Parse configuration descriptor - _usbd_dev.remote_wakeup_support = (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP) ? 1u : 0u; - _usbd_dev.self_powered = (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_SELF_POWERED ) ? 1u : 0u; - - // Parse interface descriptor - uint8_t const * p_desc = ((uint8_t const*) desc_cfg) + sizeof(tusb_desc_configuration_t); - uint8_t const * desc_end = ((uint8_t const*) desc_cfg) + tu_le16toh(desc_cfg->wTotalLength); + // index is cfg_num-1 + tusb_desc_configuration_t const *desc_cfg = + (tusb_desc_configuration_t const *)tud_descriptor_configuration_cb(cfg_num - 1); + TU_ASSERT(desc_cfg != NULL && desc_cfg->bDescriptorType == TUSB_DESC_CONFIGURATION); + + // Parse configuration descriptor + _usbd_dev.remote_wakeup_support = + (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP) ? 1u : 0u; + _usbd_dev.self_powered = (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_SELF_POWERED) ? 1u : 0u; + + // Parse interface descriptor + uint8_t const *p_desc = ((uint8_t const *)desc_cfg) + sizeof(tusb_desc_configuration_t); + uint8_t const *desc_end = ((uint8_t const *)desc_cfg) + tu_le16toh(desc_cfg->wTotalLength); + + while (p_desc < desc_end) { + uint8_t assoc_itf_count = 1; + + // Class will always starts with Interface Association (if any) and then Interface descriptor + if (TUSB_DESC_INTERFACE_ASSOCIATION == tu_desc_type(p_desc)) { + tusb_desc_interface_assoc_t const *desc_iad = + (tusb_desc_interface_assoc_t const *)p_desc; + assoc_itf_count = desc_iad->bInterfaceCount; + + p_desc = tu_desc_next(p_desc); // next to Interface + + // IAD's first interface number and class should match with opened interface + //TU_ASSERT(desc_iad->bFirstInterface == desc_itf->bInterfaceNumber && + // desc_iad->bFunctionClass == desc_itf->bInterfaceClass); + } - while( p_desc < desc_end ) - { - uint8_t assoc_itf_count = 1; + TU_ASSERT(TUSB_DESC_INTERFACE == tu_desc_type(p_desc)); + tusb_desc_interface_t const *desc_itf = (tusb_desc_interface_t const *)p_desc; + + // Find driver for this interface + uint16_t const remaining_len = (uint16_t)(desc_end - p_desc); + uint8_t drv_id; + for (drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) { + usbd_class_driver_t const *driver = get_driver(drv_id); + TU_ASSERT(driver); + uint16_t const drv_len = driver->open(rhport, desc_itf, remaining_len); + + if ((sizeof(tusb_desc_interface_t) <= drv_len) && (drv_len <= remaining_len)) { + // Open successfully + TU_LOG_USBD(" %s opened\r\n", driver->name); + + // Some drivers use 2 or more interfaces but may not have IAD e.g MIDI (always) or + // BTH (even CDC) with class in device descriptor (single interface) + if (assoc_itf_count == 1) { +#if CFG_TUD_CDC + if (driver->open == cdcd_open) + assoc_itf_count = 2; +#endif - // Class will always starts with Interface Association (if any) and then Interface descriptor - if ( TUSB_DESC_INTERFACE_ASSOCIATION == tu_desc_type(p_desc) ) - { - tusb_desc_interface_assoc_t const * desc_iad = (tusb_desc_interface_assoc_t const *) p_desc; - assoc_itf_count = desc_iad->bInterfaceCount; +#if CFG_TUD_MIDI + if (driver->open == midid_open) + assoc_itf_count = 2; +#endif - p_desc = tu_desc_next(p_desc); // next to Interface +#if CFG_TUD_BTH && CFG_TUD_BTH_ISO_ALT_COUNT + if (driver->open == btd_open) + assoc_itf_count = 2; +#endif + } - // IAD's first interface number and class should match with opened interface - //TU_ASSERT(desc_iad->bFirstInterface == desc_itf->bInterfaceNumber && - // desc_iad->bFunctionClass == desc_itf->bInterfaceClass); - } + // bind (associated) interfaces to found driver + for (uint8_t i = 0; i < assoc_itf_count; i++) { + uint8_t const itf_num = desc_itf->bInterfaceNumber + i; - TU_ASSERT( TUSB_DESC_INTERFACE == tu_desc_type(p_desc) ); - tusb_desc_interface_t const * desc_itf = (tusb_desc_interface_t const*) p_desc; + // Interface number must not be used already + TU_ASSERT(DRVID_INVALID == _usbd_dev.itf2drv[itf_num]); + _usbd_dev.itf2drv[itf_num] = drv_id; + } - // Find driver for this interface - uint16_t const remaining_len = (uint16_t) (desc_end-p_desc); - uint8_t drv_id; - for (drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) - { - usbd_class_driver_t const *driver = get_driver(drv_id); - TU_ASSERT(driver); - uint16_t const drv_len = driver->open(rhport, desc_itf, remaining_len); - - if ( (sizeof(tusb_desc_interface_t) <= drv_len) && (drv_len <= remaining_len) ) - { - // Open successfully - TU_LOG_USBD(" %s opened\r\n", driver->name); - - // Some drivers use 2 or more interfaces but may not have IAD e.g MIDI (always) or - // BTH (even CDC) with class in device descriptor (single interface) - if ( assoc_itf_count == 1) - { - #if CFG_TUD_CDC - if ( driver->open == cdcd_open ) assoc_itf_count = 2; - #endif - - #if CFG_TUD_MIDI - if ( driver->open == midid_open ) assoc_itf_count = 2; - #endif - - #if CFG_TUD_BTH && CFG_TUD_BTH_ISO_ALT_COUNT - if ( driver->open == btd_open ) assoc_itf_count = 2; - #endif - } + // bind all endpoints to found driver + tu_edpt_bind_driver(_usbd_dev.ep2drv, desc_itf, drv_len, drv_id); - // bind (associated) interfaces to found driver - for(uint8_t i=0; ibInterfaceNumber+i; + // next Interface + p_desc += drv_len; - // Interface number must not be used already - TU_ASSERT(DRVID_INVALID == _usbd_dev.itf2drv[itf_num]); - _usbd_dev.itf2drv[itf_num] = drv_id; + break; // exit driver find loop + } } - // bind all endpoints to found driver - tu_edpt_bind_driver(_usbd_dev.ep2drv, desc_itf, drv_len, drv_id); - - // next Interface - p_desc += drv_len; - - break; // exit driver find loop - } + // Failed if there is no supported drivers + TU_ASSERT(drv_id < TOTAL_DRIVER_COUNT); } - // Failed if there is no supported drivers - TU_ASSERT(drv_id < TOTAL_DRIVER_COUNT); - } - - return true; + return true; } // return descriptor's buffer and update desc_len -static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const * p_request) +static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const *p_request) { - tusb_desc_type_t const desc_type = (tusb_desc_type_t) tu_u16_high(p_request->wValue); - uint8_t const desc_index = tu_u16_low( p_request->wValue ); + tusb_desc_type_t const desc_type = (tusb_desc_type_t)tu_u16_high(p_request->wValue); + uint8_t const desc_index = tu_u16_low(p_request->wValue); - switch(desc_type) - { + switch (desc_type) { case TUSB_DESC_DEVICE: { - TU_LOG_USBD(" Device\r\n"); - - void* desc_device = (void*) (uintptr_t) tud_descriptor_device_cb(); - TU_ASSERT(desc_device); - - // Only response with exactly 1 Packet if: not addressed and host requested more data than device descriptor has. - // This only happens with the very first get device descriptor and EP0 size = 8 or 16. - if ((CFG_TUD_ENDPOINT0_SIZE < sizeof(tusb_desc_device_t)) && !_usbd_dev.addressed && - ((tusb_control_request_t const*) p_request)->wLength > sizeof(tusb_desc_device_t)) { - // Hack here: we modify the request length to prevent usbd_control response with zlp - // since we are responding with 1 packet & less data than wLength. - tusb_control_request_t mod_request = *p_request; - mod_request.wLength = CFG_TUD_ENDPOINT0_SIZE; - - return tud_control_xfer(rhport, &mod_request, desc_device, CFG_TUD_ENDPOINT0_SIZE); - }else { - return tud_control_xfer(rhport, p_request, desc_device, sizeof(tusb_desc_device_t)); - } + TU_LOG_USBD(" Device\r\n"); + + void *desc_device = (void *)(uintptr_t)tud_descriptor_device_cb(); + TU_ASSERT(desc_device); + + // Only response with exactly 1 Packet if: not addressed and host requested more data than device descriptor has. + // This only happens with the very first get device descriptor and EP0 size = 8 or 16. + if ((CFG_TUD_ENDPOINT0_SIZE < sizeof(tusb_desc_device_t)) && !_usbd_dev.addressed && + ((tusb_control_request_t const *)p_request)->wLength > sizeof(tusb_desc_device_t)) { + // Hack here: we modify the request length to prevent usbd_control response with zlp + // since we are responding with 1 packet & less data than wLength. + tusb_control_request_t mod_request = *p_request; + mod_request.wLength = CFG_TUD_ENDPOINT0_SIZE; + + return tud_control_xfer(rhport, &mod_request, desc_device, CFG_TUD_ENDPOINT0_SIZE); + } else { + return tud_control_xfer(rhport, p_request, desc_device, sizeof(tusb_desc_device_t)); + } } - // break; // unreachable + // break; // unreachable case TUSB_DESC_BOS: { - TU_LOG_USBD(" BOS\r\n"); + TU_LOG_USBD(" BOS\r\n"); - // requested by host if USB > 2.0 ( i.e 2.1 or 3.x ) - uintptr_t desc_bos = (uintptr_t) tud_descriptor_bos_cb(); - TU_VERIFY(desc_bos); + // requested by host if USB > 2.0 ( i.e 2.1 or 3.x ) + uintptr_t desc_bos = (uintptr_t)tud_descriptor_bos_cb(); + TU_VERIFY(desc_bos); - // Use offsetof to avoid pointer to the odd/misaligned address - uint16_t const total_len = tu_le16toh( tu_unaligned_read16((const void*) (desc_bos + offsetof(tusb_desc_bos_t, wTotalLength))) ); + // Use offsetof to avoid pointer to the odd/misaligned address + uint16_t const total_len = tu_le16toh(tu_unaligned_read16( + (const void *)(desc_bos + offsetof(tusb_desc_bos_t, wTotalLength)))); - return tud_control_xfer(rhport, p_request, (void*) desc_bos, total_len); + return tud_control_xfer(rhport, p_request, (void *)desc_bos, total_len); } - // break; // unreachable + // break; // unreachable case TUSB_DESC_CONFIGURATION: case TUSB_DESC_OTHER_SPEED_CONFIG: { - uintptr_t desc_config; - - if ( desc_type == TUSB_DESC_CONFIGURATION ) { - TU_LOG_USBD(" Configuration[%u]\r\n", desc_index); - desc_config = (uintptr_t) tud_descriptor_configuration_cb(desc_index); - TU_ASSERT(desc_config); - }else { - // Host only request this after getting Device Qualifier descriptor - TU_LOG_USBD(" Other Speed Configuration\r\n"); - desc_config = (uintptr_t) tud_descriptor_other_speed_configuration_cb(desc_index); - TU_VERIFY(desc_config); - } + uintptr_t desc_config; - // Use offsetof to avoid pointer to the odd/misaligned address - uint16_t const total_len = tu_le16toh( tu_unaligned_read16((const void*) (desc_config + offsetof(tusb_desc_configuration_t, wTotalLength))) ); + if (desc_type == TUSB_DESC_CONFIGURATION) { + TU_LOG_USBD(" Configuration[%u]\r\n", desc_index); + desc_config = (uintptr_t)tud_descriptor_configuration_cb(desc_index); + TU_ASSERT(desc_config); + } else { + // Host only request this after getting Device Qualifier descriptor + TU_LOG_USBD(" Other Speed Configuration\r\n"); + desc_config = (uintptr_t)tud_descriptor_other_speed_configuration_cb(desc_index); + TU_VERIFY(desc_config); + } - return tud_control_xfer(rhport, p_request, (void*) desc_config, total_len); + // Use offsetof to avoid pointer to the odd/misaligned address + uint16_t const total_len = tu_le16toh(tu_unaligned_read16( + (const void *)(desc_config + offsetof(tusb_desc_configuration_t, wTotalLength)))); + + return tud_control_xfer(rhport, p_request, (void *)desc_config, total_len); } - // break; // unreachable + // break; // unreachable - case TUSB_DESC_STRING: - { - TU_LOG_USBD(" String[%u]\r\n", desc_index); + case TUSB_DESC_STRING: { + TU_LOG_USBD(" String[%u]\r\n", desc_index); - // String Descriptor always uses the desc set from user - uint8_t const* desc_str = (uint8_t const*) tud_descriptor_string_cb(desc_index, tu_le16toh(p_request->wIndex)); - TU_VERIFY(desc_str); + // String Descriptor always uses the desc set from user + uint8_t const *desc_str = + (uint8_t const *)tud_descriptor_string_cb(desc_index, tu_le16toh(p_request->wIndex)); + TU_VERIFY(desc_str); - // first byte of descriptor is its size - return tud_control_xfer(rhport, p_request, (void*) (uintptr_t) desc_str, tu_desc_len(desc_str)); + // first byte of descriptor is its size + return tud_control_xfer(rhport, p_request, (void *)(uintptr_t)desc_str, + tu_desc_len(desc_str)); } - // break; // unreachable + // break; // unreachable case TUSB_DESC_DEVICE_QUALIFIER: { - TU_LOG_USBD(" Device Qualifier\r\n"); - uint8_t const* desc_qualifier = tud_descriptor_device_qualifier_cb(); - TU_VERIFY(desc_qualifier); - return tud_control_xfer(rhport, p_request, (void*) (uintptr_t) desc_qualifier, tu_desc_len(desc_qualifier)); + TU_LOG_USBD(" Device Qualifier\r\n"); + uint8_t const *desc_qualifier = tud_descriptor_device_qualifier_cb(); + TU_VERIFY(desc_qualifier); + return tud_control_xfer(rhport, p_request, (void *)(uintptr_t)desc_qualifier, + tu_desc_len(desc_qualifier)); } - // break; // unreachable + // break; // unreachable - default: return false; - } + default: + return false; + } } //--------------------------------------------------------------------+ // DCD Event Handler //--------------------------------------------------------------------+ -TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const* event, bool in_isr) { - bool send = false; - switch (event->event_id) { +TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const *event, bool in_isr) +{ + bool send = false; + switch (event->event_id) { case DCD_EVENT_UNPLUGGED: - _usbd_dev.connected = 0; - _usbd_dev.addressed = 0; - _usbd_dev.cfg_num = 0; - _usbd_dev.suspended = 0; - send = true; - break; + _usbd_dev.connected = 0; + _usbd_dev.addressed = 0; + _usbd_dev.cfg_num = 0; + _usbd_dev.suspended = 0; + send = true; + break; case DCD_EVENT_SUSPEND: - // NOTE: When plugging/unplugging device, the D+/D- state are unstable and - // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ). - // In addition, some MCUs such as SAMD or boards that haven no VBUS detection cannot distinguish - // suspended vs disconnected. We will skip handling SUSPEND/RESUME event if not currently connected - if (_usbd_dev.connected) { - _usbd_dev.suspended = 1; - send = true; - } - break; + // NOTE: When plugging/unplugging device, the D+/D- state are unstable and + // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ). + // In addition, some MCUs such as SAMD or boards that haven no VBUS detection cannot distinguish + // suspended vs disconnected. We will skip handling SUSPEND/RESUME event if not currently connected + if (_usbd_dev.connected) { + _usbd_dev.suspended = 1; + send = true; + } + break; case DCD_EVENT_RESUME: - // skip event if not connected (especially required for SAMD) - if (_usbd_dev.connected) { - _usbd_dev.suspended = 0; - send = true; - } - break; + // skip event if not connected (especially required for SAMD) + if (_usbd_dev.connected) { + _usbd_dev.suspended = 0; + send = true; + } + break; case DCD_EVENT_SOF: - // SOF driver handler in ISR context - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const* driver = get_driver(i); - if (driver && driver->sof) { - driver->sof(event->rhport, event->sof.frame_count); + // SOF driver handler in ISR context + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const *driver = get_driver(i); + if (driver && driver->sof) { + driver->sof(event->rhport, event->sof.frame_count); + } } - } - // Some MCUs after running dcd_remote_wakeup() does not have way to detect the end of remote wakeup - // which last 1-15 ms. DCD can use SOF as a clear indicator that bus is back to operational - if (_usbd_dev.suspended) { - _usbd_dev.suspended = 0; + // Some MCUs after running dcd_remote_wakeup() does not have way to detect the end of remote wakeup + // which last 1-15 ms. DCD can use SOF as a clear indicator that bus is back to operational + if (_usbd_dev.suspended) { + _usbd_dev.suspended = 0; - dcd_event_t const event_resume = {.rhport = event->rhport, .event_id = DCD_EVENT_RESUME}; - queue_event(&event_resume, in_isr); - } + dcd_event_t const event_resume = { .rhport = event->rhport, + .event_id = DCD_EVENT_RESUME }; + queue_event(&event_resume, in_isr); + } - if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { - dcd_event_t const event_sof = {.rhport = event->rhport, .event_id = DCD_EVENT_SOF, .sof.frame_count = event->sof.frame_count}; - queue_event(&event_sof, in_isr); - } - break; + if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { + dcd_event_t const event_sof = { .rhport = event->rhport, + .event_id = DCD_EVENT_SOF, + .sof.frame_count = event->sof.frame_count }; + queue_event(&event_sof, in_isr); + } + break; case DCD_EVENT_SETUP_RECEIVED: - _usbd_queued_setup++; - send = true; - break; + _usbd_queued_setup++; + send = true; + break; default: - send = true; - break; - } + send = true; + break; + } - if (send) { - queue_event(event, in_isr); - } + if (send) { + queue_event(event, in_isr); + } } //--------------------------------------------------------------------+ @@ -1221,269 +1249,284 @@ TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const* event, bool in_isr) void usbd_int_set(bool enabled) { - if (enabled) - { - dcd_int_enable(_usbd_rhport); - }else - { - dcd_int_disable(_usbd_rhport); - } + if (enabled) { + dcd_int_enable(_usbd_rhport); + } else { + dcd_int_disable(_usbd_rhport); + } } // Parse consecutive endpoint descriptors (IN & OUT) -bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const* p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t* ep_out, uint8_t* ep_in) +bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const *p_desc, uint8_t ep_count, uint8_t xfer_type, + uint8_t *ep_out, uint8_t *ep_in) { - for(int i=0; ibDescriptorType && xfer_type == desc_ep->bmAttributes.xfer); - TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); + TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && + xfer_type == desc_ep->bmAttributes.xfer); + TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); - if ( tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN ) - { - (*ep_in) = desc_ep->bEndpointAddress; - }else - { - (*ep_out) = desc_ep->bEndpointAddress; - } + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { + (*ep_in) = desc_ep->bEndpointAddress; + } else { + (*ep_out) = desc_ep->bEndpointAddress; + } - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + } - return true; + return true; } // Helper to defer an isr function -void usbd_defer_func(osal_task_func_t func, void* param, bool in_isr) { - dcd_event_t event = { - .rhport = 0, - .event_id = USBD_EVENT_FUNC_CALL, - }; - event.func_call.func = func; - event.func_call.param = param; - - queue_event(&event, in_isr); +void usbd_defer_func(osal_task_func_t func, void *param, bool in_isr) +{ + dcd_event_t event = { + .rhport = 0, + .event_id = USBD_EVENT_FUNC_CALL, + }; + event.func_call.func = func; + event.func_call.param = param; + + queue_event(&event, in_isr); } //--------------------------------------------------------------------+ // USBD Endpoint API //--------------------------------------------------------------------+ -bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const* desc_ep) { - rhport = _usbd_rhport; +bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep) +{ + rhport = _usbd_rhport; - TU_ASSERT(tu_edpt_number(desc_ep->bEndpointAddress) < CFG_TUD_ENDPPOINT_MAX); - TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed)); + TU_ASSERT(tu_edpt_number(desc_ep->bEndpointAddress) < CFG_TUD_ENDPPOINT_MAX); + TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t)_usbd_dev.speed)); - return dcd_edpt_open(rhport, desc_ep); + return dcd_edpt_open(rhport, desc_ep); } -bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr) { - (void) rhport; +bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr) +{ + (void)rhport; - // TODO add this check later, also make sure we don't starve an out endpoint while suspending - // TU_VERIFY(tud_ready()); + // TODO add this check later, also make sure we don't starve an out endpoint while suspending + // TU_VERIFY(tud_ready()); - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); - tu_edpt_state_t* ep_state = &_usbd_dev.ep_status[epnum][dir]; + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); + tu_edpt_state_t *ep_state = &_usbd_dev.ep_status[epnum][dir]; - return tu_edpt_claim(ep_state, _usbd_mutex); + return tu_edpt_claim(ep_state, _usbd_mutex); } -bool usbd_edpt_release(uint8_t rhport, uint8_t ep_addr) { - (void) rhport; +bool usbd_edpt_release(uint8_t rhport, uint8_t ep_addr) +{ + (void)rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); - tu_edpt_state_t* ep_state = &_usbd_dev.ep_status[epnum][dir]; + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); + tu_edpt_state_t *ep_state = &_usbd_dev.ep_status[epnum][dir]; - return tu_edpt_release(ep_state, _usbd_mutex); + return tu_edpt_release(ep_state, _usbd_mutex); } -bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t* buffer, uint16_t total_bytes) { - rhport = _usbd_rhport; +bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes) +{ + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - // TODO skip ready() check for now since enumeration also use this API - // TU_VERIFY(tud_ready()); + // TODO skip ready() check for now since enumeration also use this API + // TU_VERIFY(tud_ready()); - TU_LOG_USBD(" Queue EP %02X with %u bytes ...\r\n", ep_addr, total_bytes); + TU_LOG_USBD(" Queue EP %02X with %u bytes ...\r\n", ep_addr, total_bytes); #if CFG_TUD_LOG_LEVEL >= 3 - if(dir == TUSB_DIR_IN) { - TU_LOG_MEM(CFG_TUD_LOG_LEVEL, buffer, total_bytes, 2); - } + if (dir == TUSB_DIR_IN) { + TU_LOG_MEM(CFG_TUD_LOG_LEVEL, buffer, total_bytes, 2); + } #endif - // Attempt to transfer on a busy endpoint, sound like an race condition ! - TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); + // Attempt to transfer on a busy endpoint, sound like an race condition ! + TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); - // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() - // could return and USBD task can preempt and clear the busy - _usbd_dev.ep_status[epnum][dir].busy = 1; + // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() + // could return and USBD task can preempt and clear the busy + _usbd_dev.ep_status[epnum][dir].busy = 1; - if (dcd_edpt_xfer(rhport, ep_addr, buffer, total_bytes)) { - return true; - } else { - // DCD error, mark endpoint as ready to allow next transfer - _usbd_dev.ep_status[epnum][dir].busy = 0; - _usbd_dev.ep_status[epnum][dir].claimed = 0; - TU_LOG_USBD("FAILED\r\n"); - TU_BREAKPOINT(); - return false; - } + if (dcd_edpt_xfer(rhport, ep_addr, buffer, total_bytes)) { + return true; + } else { + // DCD error, mark endpoint as ready to allow next transfer + _usbd_dev.ep_status[epnum][dir].busy = 0; + _usbd_dev.ep_status[epnum][dir].claimed = 0; + TU_LOG_USBD("FAILED\r\n"); + TU_BREAKPOINT(); + return false; + } } // The number of bytes has to be given explicitly to allow more flexible control of how many // bytes should be written and second to keep the return value free to give back a boolean // success message. If total_bytes is too big, the FIFO will copy only what is available // into the USB buffer! -bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t* ff, uint16_t total_bytes) { - rhport = _usbd_rhport; +bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes) +{ + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - TU_LOG_USBD(" Queue ISO EP %02X with %u bytes ... ", ep_addr, total_bytes); + TU_LOG_USBD(" Queue ISO EP %02X with %u bytes ... ", ep_addr, total_bytes); - // Attempt to transfer on a busy endpoint, sound like an race condition ! - TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); + // Attempt to transfer on a busy endpoint, sound like an race condition ! + TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); - // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() could return - // and usbd task can preempt and clear the busy - _usbd_dev.ep_status[epnum][dir].busy = 1; + // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() could return + // and usbd task can preempt and clear the busy + _usbd_dev.ep_status[epnum][dir].busy = 1; - if (dcd_edpt_xfer_fifo(rhport, ep_addr, ff, total_bytes)) { - TU_LOG_USBD("OK\r\n"); - return true; - } else { - // DCD error, mark endpoint as ready to allow next transfer - _usbd_dev.ep_status[epnum][dir].busy = 0; - _usbd_dev.ep_status[epnum][dir].claimed = 0; - TU_LOG_USBD("failed\r\n"); - TU_BREAKPOINT(); - return false; - } + if (dcd_edpt_xfer_fifo(rhport, ep_addr, ff, total_bytes)) { + TU_LOG_USBD("OK\r\n"); + return true; + } else { + // DCD error, mark endpoint as ready to allow next transfer + _usbd_dev.ep_status[epnum][dir].busy = 0; + _usbd_dev.ep_status[epnum][dir].claimed = 0; + TU_LOG_USBD("failed\r\n"); + TU_BREAKPOINT(); + return false; + } } -bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr) { - (void) rhport; +bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr) +{ + (void)rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - return _usbd_dev.ep_status[epnum][dir].busy; + return _usbd_dev.ep_status[epnum][dir].busy; } -void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr) { - rhport = _usbd_rhport; +void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr) +{ + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - // only stalled if currently cleared - TU_LOG_USBD(" Stall EP %02X\r\n", ep_addr); - dcd_edpt_stall(rhport, ep_addr); - _usbd_dev.ep_status[epnum][dir].stalled = 1; - _usbd_dev.ep_status[epnum][dir].busy = 1; + // only stalled if currently cleared + TU_LOG_USBD(" Stall EP %02X\r\n", ep_addr); + dcd_edpt_stall(rhport, ep_addr); + _usbd_dev.ep_status[epnum][dir].stalled = 1; + _usbd_dev.ep_status[epnum][dir].busy = 1; } -void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) { - rhport = _usbd_rhport; +void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) +{ + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - // only clear if currently stalled - TU_LOG_USBD(" Clear Stall EP %02X\r\n", ep_addr); - dcd_edpt_clear_stall(rhport, ep_addr); - _usbd_dev.ep_status[epnum][dir].stalled = 0; - _usbd_dev.ep_status[epnum][dir].busy = 0; + // only clear if currently stalled + TU_LOG_USBD(" Clear Stall EP %02X\r\n", ep_addr); + dcd_edpt_clear_stall(rhport, ep_addr); + _usbd_dev.ep_status[epnum][dir].stalled = 0; + _usbd_dev.ep_status[epnum][dir].busy = 0; } -bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr) { - (void) rhport; +bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr) +{ + (void)rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - return _usbd_dev.ep_status[epnum][dir].stalled; + return _usbd_dev.ep_status[epnum][dir].stalled; } /** * usbd_edpt_close will disable an endpoint. * In progress transfers on this EP may be delivered after this call. */ -void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr) { +void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr) +{ #ifdef TUP_DCD_EDPT_ISO_ALLOC - (void) rhport; (void) ep_addr; - // ISO alloc/activate Should be used instead + (void)rhport; + (void)ep_addr; + // ISO alloc/activate Should be used instead #else - rhport = _usbd_rhport; + rhport = _usbd_rhport; - TU_LOG_USBD(" CLOSING Endpoint: 0x%02X\r\n", ep_addr); + TU_LOG_USBD(" CLOSING Endpoint: 0x%02X\r\n", ep_addr); - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - dcd_edpt_close(rhport, ep_addr); - _usbd_dev.ep_status[epnum][dir].stalled = 0; - _usbd_dev.ep_status[epnum][dir].busy = 0; - _usbd_dev.ep_status[epnum][dir].claimed = 0; + dcd_edpt_close(rhport, ep_addr); + _usbd_dev.ep_status[epnum][dir].stalled = 0; + _usbd_dev.ep_status[epnum][dir].busy = 0; + _usbd_dev.ep_status[epnum][dir].claimed = 0; #endif - return; + return; } -void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en) { - rhport = _usbd_rhport; - - uint8_t consumer_old = _usbd_dev.sof_consumer; - // Keep track how many class instances need the SOF interrupt - if (en) { - _usbd_dev.sof_consumer |= (uint8_t)(1 << consumer); - } else { - _usbd_dev.sof_consumer &= (uint8_t)(~(1 << consumer)); - } - - // Test logically unequal - if(!_usbd_dev.sof_consumer != !consumer_old) { - dcd_sof_enable(rhport, _usbd_dev.sof_consumer); - } +void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en) +{ + rhport = _usbd_rhport; + + uint8_t consumer_old = _usbd_dev.sof_consumer; + // Keep track how many class instances need the SOF interrupt + if (en) { + _usbd_dev.sof_consumer |= (uint8_t)(1 << consumer); + } else { + _usbd_dev.sof_consumer &= (uint8_t)(~(1 << consumer)); + } + + // Test logically unequal + if (!_usbd_dev.sof_consumer != !consumer_old) { + dcd_sof_enable(rhport, _usbd_dev.sof_consumer); + } } -bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) { +bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) +{ #ifdef TUP_DCD_EDPT_ISO_ALLOC - rhport = _usbd_rhport; + rhport = _usbd_rhport; - TU_ASSERT(tu_edpt_number(ep_addr) < CFG_TUD_ENDPPOINT_MAX); - return dcd_edpt_iso_alloc(rhport, ep_addr, largest_packet_size); + TU_ASSERT(tu_edpt_number(ep_addr) < CFG_TUD_ENDPPOINT_MAX); + return dcd_edpt_iso_alloc(rhport, ep_addr, largest_packet_size); #else - (void) rhport; (void) ep_addr; (void) largest_packet_size; - return false; + (void)rhport; + (void)ep_addr; + (void)largest_packet_size; + return false; #endif } -bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const* desc_ep) { +bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep) +{ #ifdef TUP_DCD_EDPT_ISO_ALLOC - rhport = _usbd_rhport; + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(desc_ep->bEndpointAddress); - uint8_t const dir = tu_edpt_dir(desc_ep->bEndpointAddress); + uint8_t const epnum = tu_edpt_number(desc_ep->bEndpointAddress); + uint8_t const dir = tu_edpt_dir(desc_ep->bEndpointAddress); - TU_ASSERT(epnum < CFG_TUD_ENDPPOINT_MAX); - TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed)); + TU_ASSERT(epnum < CFG_TUD_ENDPPOINT_MAX); + TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t)_usbd_dev.speed)); - _usbd_dev.ep_status[epnum][dir].stalled = 0; - _usbd_dev.ep_status[epnum][dir].busy = 0; - _usbd_dev.ep_status[epnum][dir].claimed = 0; - return dcd_edpt_iso_activate(rhport, desc_ep); + _usbd_dev.ep_status[epnum][dir].stalled = 0; + _usbd_dev.ep_status[epnum][dir].busy = 0; + _usbd_dev.ep_status[epnum][dir].claimed = 0; + return dcd_edpt_iso_activate(rhport, desc_ep); #else - (void) rhport; (void) desc_ep; - return false; + (void)rhport; + (void)desc_ep; + return false; #endif } diff --git a/Libraries/tinyusb/src/device/usbd.h b/Libraries/tinyusb/src/device/usbd.h index 7913096e391..9d1a3648da2 100644 --- a/Libraries/tinyusb/src/device/usbd.h +++ b/Libraries/tinyusb/src/device/usbd.h @@ -38,7 +38,7 @@ extern "C" { //--------------------------------------------------------------------+ // Init device stack on roothub port -bool tud_init (uint8_t rhport); +bool tud_init(uint8_t rhport); // Deinit device stack on roothub port bool tud_deinit(uint8_t rhport); @@ -52,9 +52,9 @@ bool tud_inited(void); void tud_task_ext(uint32_t timeout_ms, bool in_isr); // Task function should be called in main/rtos loop -TU_ATTR_ALWAYS_INLINE static inline -void tud_task (void) { - tud_task_ext(UINT32_MAX, false); +TU_ATTR_ALWAYS_INLINE static inline void tud_task(void) +{ + tud_task_ext(UINT32_MAX, false); } // Check if there is pending events need processing by tud_task() @@ -65,7 +65,7 @@ extern void dcd_int_handler(uint8_t rhport); #endif // Interrupt handler, name alias to DCD -#define tud_int_handler dcd_int_handler +#define tud_int_handler dcd_int_handler // Get current bus speed tusb_speed_t tud_speed_get(void); @@ -81,9 +81,9 @@ bool tud_mounted(void); bool tud_suspended(void); // Check if device is ready to transfer -TU_ATTR_ALWAYS_INLINE static inline -bool tud_ready(void) { - return tud_mounted() && !tud_suspended(); +TU_ATTR_ALWAYS_INLINE static inline bool tud_ready(void) +{ + return tud_mounted() && !tud_suspended(); } // Remote wake up host, only if suspended and enabled by host @@ -103,10 +103,11 @@ void tud_sof_cb_enable(bool en); // Carry out Data and Status stage of control transfer // - If len = 0, it is equivalent to sending status only // - If len > wLength : it will be truncated -bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const * request, void* buffer, uint16_t len); +bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const *request, void *buffer, + uint16_t len); // Send STATUS (zero length) packet -bool tud_control_status(uint8_t rhport, tusb_control_request_t const * request); +bool tud_control_status(uint8_t rhport, tusb_control_request_t const *request); //--------------------------------------------------------------------+ // Application Callbacks @@ -114,30 +115,30 @@ bool tud_control_status(uint8_t rhport, tusb_control_request_t const * request); // Invoked when received GET DEVICE DESCRIPTOR request // Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void); +uint8_t const *tud_descriptor_device_cb(void); // Invoked when received GET CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index); +uint8_t const *tud_descriptor_configuration_cb(uint8_t index); // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid); +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid); // Invoked when received GET BOS DESCRIPTOR request // Application return pointer to descriptor -uint8_t const * tud_descriptor_bos_cb(void); +uint8_t const *tud_descriptor_bos_cb(void); // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const* tud_descriptor_device_qualifier_cb(void); +uint8_t const *tud_descriptor_device_qualifier_cb(void); // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index); +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index); // Invoked when device is mounted (configured) void tud_mount_cb(void); @@ -159,135 +160,140 @@ void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr); void tud_sof_cb(uint32_t frame_count); // Invoked when received control request with VENDOR TYPE -bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request); //--------------------------------------------------------------------+ // Binary Device Object Store (BOS) Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_BOS_DESC_LEN 5 +#define TUD_BOS_DESC_LEN 5 // total length, number of device caps #define TUD_BOS_DESCRIPTOR(_total_len, _caps_num) \ - 5, TUSB_DESC_BOS, U16_TO_U8S_LE(_total_len), _caps_num + 5, TUSB_DESC_BOS, U16_TO_U8S_LE(_total_len), _caps_num // Device Capability Platform 128-bit UUID + Data -#define TUD_BOS_PLATFORM_DESCRIPTOR(...) \ - 4+TU_ARGS_NUM(__VA_ARGS__), TUSB_DESC_DEVICE_CAPABILITY, DEVICE_CAPABILITY_PLATFORM, 0x00, __VA_ARGS__ +#define TUD_BOS_PLATFORM_DESCRIPTOR(...) \ + 4 + TU_ARGS_NUM(__VA_ARGS__), TUSB_DESC_DEVICE_CAPABILITY, DEVICE_CAPABILITY_PLATFORM, 0x00, \ + __VA_ARGS__ //------------- WebUSB BOS Platform -------------// // Descriptor Length -#define TUD_BOS_WEBUSB_DESC_LEN 24 +#define TUD_BOS_WEBUSB_DESC_LEN 24 // Vendor Code, iLandingPage #define TUD_BOS_WEBUSB_DESCRIPTOR(_vendor_code, _ipage) \ - TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_WEBUSB_UUID, U16_TO_U8S_LE(0x0100), _vendor_code, _ipage) + TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_WEBUSB_UUID, U16_TO_U8S_LE(0x0100), _vendor_code, _ipage) -#define TUD_BOS_WEBUSB_UUID \ - 0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, \ - 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65 +#define TUD_BOS_WEBUSB_UUID \ + 0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65 //------------- Microsoft OS 2.0 Platform -------------// -#define TUD_BOS_MICROSOFT_OS_DESC_LEN 28 +#define TUD_BOS_MICROSOFT_OS_DESC_LEN 28 // Total Length of descriptor set, vendor code -#define TUD_BOS_MS_OS_20_DESCRIPTOR(_desc_set_len, _vendor_code) \ - TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_MS_OS_20_UUID, U32_TO_U8S_LE(0x06030000), U16_TO_U8S_LE(_desc_set_len), _vendor_code, 0) +#define TUD_BOS_MS_OS_20_DESCRIPTOR(_desc_set_len, _vendor_code) \ + TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_MS_OS_20_UUID, U32_TO_U8S_LE(0x06030000), \ + U16_TO_U8S_LE(_desc_set_len), _vendor_code, 0) #define TUD_BOS_MS_OS_20_UUID \ - 0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, \ - 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F + 0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F //--------------------------------------------------------------------+ // Configuration Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_CONFIG_DESC_LEN (9) +#define TUD_CONFIG_DESC_LEN (9) // Config number, interface count, string index, total length, attribute, power in mA #define TUD_CONFIG_DESCRIPTOR(config_num, _itfcount, _stridx, _total_len, _attribute, _power_ma) \ - 9, TUSB_DESC_CONFIGURATION, U16_TO_U8S_LE(_total_len), _itfcount, config_num, _stridx, TU_BIT(7) | _attribute, (_power_ma)/2 + 9, TUSB_DESC_CONFIGURATION, U16_TO_U8S_LE(_total_len), _itfcount, config_num, _stridx, \ + TU_BIT(7) | _attribute, (_power_ma) / 2 //--------------------------------------------------------------------+ // CDC Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 66 bytes -#define TUD_CDC_DESC_LEN (8+9+5+5+4+5+7+9+7+7) +#define TUD_CDC_DESC_LEN (8 + 9 + 5 + 5 + 4 + 5 + 7 + 9 + 7 + 7) // CDC Descriptor Template // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -#define TUD_CDC_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ - /* Interface Associate */\ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, 0,\ - /* CDC Control Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, _stridx,\ - /* CDC Header */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0120),\ - /* CDC Call */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, (uint8_t)((_itfnum) + 1),\ - /* CDC ACM: support line request + send break */\ - 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 6,\ - /* CDC Union */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ - /* Endpoint Notification */\ - 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 16,\ - /* CDC Data Interface */\ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ - /* Endpoint Out */\ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ - /* Endpoint In */\ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_CDC_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ + /* Interface Associate */ \ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, \ + CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, \ + 0, /* CDC Control Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, \ + CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, \ + _stridx, /* CDC Header */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0120), /* CDC Call */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, \ + (uint8_t)((_itfnum) + 1), /* CDC ACM: support line request + send break */ \ + 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 6, /* CDC Union */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, \ + (uint8_t)((_itfnum) + 1), /* Endpoint Notification */ \ + 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), \ + 16, /* CDC Data Interface */ \ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, \ + 0, /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ + 0, /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // MSC Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 23 bytes -#define TUD_MSC_DESC_LEN (9 + 7 + 7) +#define TUD_MSC_DESC_LEN (9 + 7 + 7) // Interface number, string index, EP Out & EP In address, EP size -#define TUD_MSC_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ - /* Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_MSC, MSC_SUBCLASS_SCSI, MSC_PROTOCOL_BOT, _stridx,\ - /* Endpoint Out */\ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ - /* Endpoint In */\ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 - +#define TUD_MSC_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ + /* Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_MSC, MSC_SUBCLASS_SCSI, MSC_PROTOCOL_BOT, \ + _stridx, /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ + 0, /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // HID Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 25 bytes -#define TUD_HID_DESC_LEN (9 + 9 + 7) +#define TUD_HID_DESC_LEN (9 + 9 + 7) // HID Input only descriptor // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval -#define TUD_HID_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epin, _epsize, _ep_interval) \ - /* Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_HID, (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, _stridx,\ - /* HID descriptor */\ - 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, U16_TO_U8S_LE(_report_desc_len),\ - /* Endpoint In */\ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval +#define TUD_HID_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epin, _epsize, \ + _ep_interval) \ + /* Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_HID, \ + (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, \ + _stridx, /* HID descriptor */ \ + 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, \ + U16_TO_U8S_LE(_report_desc_len), /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval // Length of template descriptor: 32 bytes -#define TUD_HID_INOUT_DESC_LEN (9 + 9 + 7 + 7) +#define TUD_HID_INOUT_DESC_LEN (9 + 9 + 7 + 7) // HID Input & Output descriptor // Interface number, string index, protocol, report descriptor len, EP OUT & IN address, size & polling interval -#define TUD_HID_INOUT_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epout, _epin, _epsize, _ep_interval) \ - /* Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_HID, (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, _stridx,\ - /* HID descriptor */\ - 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, U16_TO_U8S_LE(_report_desc_len),\ - /* Endpoint Out */\ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval, \ - /* Endpoint In */\ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval +#define TUD_HID_INOUT_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epout, \ + _epin, _epsize, _ep_interval) \ + /* Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_HID, \ + (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, \ + _stridx, /* HID descriptor */ \ + 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, \ + U16_TO_U8S_LE(_report_desc_len), /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), \ + _ep_interval, /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval //--------------------------------------------------------------------+ // MIDI Descriptor Templates @@ -295,61 +301,60 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_requ //--------------------------------------------------------------------+ #define TUD_MIDI_DESC_HEAD_LEN (9 + 9 + 9 + 7) -#define TUD_MIDI_DESC_HEAD(_itfnum, _stridx, _numcables) \ - /* Audio Control (AC) Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_FUNC_PROTOCOL_CODE_UNDEF, _stridx,\ - /* AC Header */\ - 9, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), U16_TO_U8S_LE(0x0009), 1, (uint8_t)((_itfnum) + 1),\ - /* MIDI Streaming (MS) Interface */\ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_MIDI_STREAMING, AUDIO_FUNC_PROTOCOL_CODE_UNDEF, 0,\ - /* MS Header */\ - 7, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), U16_TO_U8S_LE(7 + (_numcables) * TUD_MIDI_DESC_JACK_LEN + 2 * TUD_MIDI_DESC_EP_LEN(_numcables)) +#define TUD_MIDI_DESC_HEAD(_itfnum, _stridx, _numcables) \ + /* Audio Control (AC) Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, \ + AUDIO_FUNC_PROTOCOL_CODE_UNDEF, _stridx, /* AC Header */ \ + 9, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), \ + U16_TO_U8S_LE(0x0009), 1, (uint8_t)((_itfnum) + 1), /* MIDI Streaming (MS) Interface */ \ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_AUDIO, \ + AUDIO_SUBCLASS_MIDI_STREAMING, AUDIO_FUNC_PROTOCOL_CODE_UNDEF, 0, /* MS Header */ \ + 7, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), \ + U16_TO_U8S_LE(7 + (_numcables)*TUD_MIDI_DESC_JACK_LEN + \ + 2 * TUD_MIDI_DESC_EP_LEN(_numcables)) -#define TUD_MIDI_JACKID_IN_EMB(_cablenum) \ - (uint8_t)(((_cablenum) - 1) * 4 + 1) +#define TUD_MIDI_JACKID_IN_EMB(_cablenum) (uint8_t)(((_cablenum)-1) * 4 + 1) -#define TUD_MIDI_JACKID_IN_EXT(_cablenum) \ - (uint8_t)(((_cablenum) - 1) * 4 + 2) +#define TUD_MIDI_JACKID_IN_EXT(_cablenum) (uint8_t)(((_cablenum)-1) * 4 + 2) -#define TUD_MIDI_JACKID_OUT_EMB(_cablenum) \ - (uint8_t)(((_cablenum) - 1) * 4 + 3) +#define TUD_MIDI_JACKID_OUT_EMB(_cablenum) (uint8_t)(((_cablenum)-1) * 4 + 3) -#define TUD_MIDI_JACKID_OUT_EXT(_cablenum) \ - (uint8_t)(((_cablenum) - 1) * 4 + 4) +#define TUD_MIDI_JACKID_OUT_EXT(_cablenum) (uint8_t)(((_cablenum)-1) * 4 + 4) #define TUD_MIDI_DESC_JACK_LEN (6 + 6 + 9 + 9) -#define TUD_MIDI_DESC_JACK_DESC(_cablenum, _stridx) \ - /* MS In Jack (Embedded) */\ - 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EMBEDDED, TUD_MIDI_JACKID_IN_EMB(_cablenum), _stridx,\ - /* MS In Jack (External) */\ - 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EXTERNAL, TUD_MIDI_JACKID_IN_EXT(_cablenum), _stridx,\ - /* MS Out Jack (Embedded), connected to In Jack External */\ - 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EMBEDDED, TUD_MIDI_JACKID_OUT_EMB(_cablenum), 1, TUD_MIDI_JACKID_IN_EXT(_cablenum), 1, _stridx,\ - /* MS Out Jack (External), connected to In Jack Embedded */\ - 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EXTERNAL, TUD_MIDI_JACKID_OUT_EXT(_cablenum), 1, TUD_MIDI_JACKID_IN_EMB(_cablenum), 1, _stridx +#define TUD_MIDI_DESC_JACK_DESC(_cablenum, _stridx) \ + /* MS In Jack (Embedded) */ \ + 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EMBEDDED, \ + TUD_MIDI_JACKID_IN_EMB(_cablenum), _stridx, /* MS In Jack (External) */ \ + 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EXTERNAL, \ + TUD_MIDI_JACKID_IN_EXT(_cablenum), \ + _stridx, /* MS Out Jack (Embedded), connected to In Jack External */ \ + 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EMBEDDED, \ + TUD_MIDI_JACKID_OUT_EMB(_cablenum), 1, TUD_MIDI_JACKID_IN_EXT(_cablenum), 1, \ + _stridx, /* MS Out Jack (External), connected to In Jack Embedded */ \ + 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EXTERNAL, \ + TUD_MIDI_JACKID_OUT_EXT(_cablenum), 1, TUD_MIDI_JACKID_IN_EMB(_cablenum), 1, _stridx #define TUD_MIDI_DESC_JACK(_cablenum) TUD_MIDI_DESC_JACK_DESC(_cablenum, 0) #define TUD_MIDI_DESC_EP_LEN(_numcables) (9 + 4 + (_numcables)) -#define TUD_MIDI_DESC_EP(_epout, _epsize, _numcables) \ - /* Endpoint: Note Audio v1.0's endpoint has 9 bytes instead of 7 */\ - 9, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0, 0, 0, \ - /* MS Endpoint (connected to embedded jack) */\ - (uint8_t)(4 + (_numcables)), TUSB_DESC_CS_ENDPOINT, MIDI_CS_ENDPOINT_GENERAL, _numcables +#define TUD_MIDI_DESC_EP(_epout, _epsize, _numcables) \ + /* Endpoint: Note Audio v1.0's endpoint has 9 bytes instead of 7 */ \ + 9, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0, 0, \ + 0, /* MS Endpoint (connected to embedded jack) */ \ + (uint8_t)(4 + (_numcables)), TUSB_DESC_CS_ENDPOINT, MIDI_CS_ENDPOINT_GENERAL, _numcables // Length of template descriptor (88 bytes) -#define TUD_MIDI_DESC_LEN (TUD_MIDI_DESC_HEAD_LEN + TUD_MIDI_DESC_JACK_LEN + TUD_MIDI_DESC_EP_LEN(1) * 2) +#define TUD_MIDI_DESC_LEN \ + (TUD_MIDI_DESC_HEAD_LEN + TUD_MIDI_DESC_JACK_LEN + TUD_MIDI_DESC_EP_LEN(1) * 2) // MIDI simple descriptor // - 1 Embedded Jack In connected to 1 External Jack Out // - 1 Embedded Jack out connected to 1 External Jack In -#define TUD_MIDI_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ - TUD_MIDI_DESC_HEAD(_itfnum, _stridx, 1),\ - TUD_MIDI_DESC_JACK_DESC(1, 0),\ - TUD_MIDI_DESC_EP(_epout, _epsize, 1),\ - TUD_MIDI_JACKID_IN_EMB(1),\ - TUD_MIDI_DESC_EP(_epin, _epsize, 1),\ - TUD_MIDI_JACKID_OUT_EMB(1) +#define TUD_MIDI_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ + TUD_MIDI_DESC_HEAD(_itfnum, _stridx, 1), TUD_MIDI_DESC_JACK_DESC(1, 0), \ + TUD_MIDI_DESC_EP(_epout, _epsize, 1), TUD_MIDI_JACKID_IN_EMB(1), \ + TUD_MIDI_DESC_EP(_epin, _epsize, 1), TUD_MIDI_JACKID_OUT_EMB(1) //--------------------------------------------------------------------+ // Audio v2.0 Descriptor Templates @@ -357,269 +362,388 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_requ /* Standard Interface Association Descriptor (IAD) */ #define TUD_AUDIO_DESC_IAD_LEN 8 -#define TUD_AUDIO_DESC_IAD(_firstitf, _nitfs, _stridx) \ - TUD_AUDIO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, _firstitf, _nitfs, TUSB_CLASS_AUDIO, AUDIO_FUNCTION_SUBCLASS_UNDEFINED, AUDIO_FUNC_PROTOCOL_CODE_V2, _stridx +#define TUD_AUDIO_DESC_IAD(_firstitf, _nitfs, _stridx) \ + TUD_AUDIO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, _firstitf, _nitfs, TUSB_CLASS_AUDIO, \ + AUDIO_FUNCTION_SUBCLASS_UNDEFINED, AUDIO_FUNC_PROTOCOL_CODE_V2, _stridx /* Standard AC Interface Descriptor(4.7.1) */ #define TUD_AUDIO_DESC_STD_AC_LEN 9 -#define TUD_AUDIO_DESC_STD_AC(_itfnum, _nEPs, _stridx) /* _nEPs is 0 or 1 */\ - TUD_AUDIO_DESC_STD_AC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, _nEPs, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_INT_PROTOCOL_CODE_V2, _stridx +#define TUD_AUDIO_DESC_STD_AC(_itfnum, _nEPs, _stridx) /* _nEPs is 0 or 1 */ \ + TUD_AUDIO_DESC_STD_AC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, _nEPs, \ + TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_INT_PROTOCOL_CODE_V2, _stridx /* Class-Specific AC Interface Header Descriptor(4.7.2) */ #define TUD_AUDIO_DESC_CS_AC_LEN 9 -#define TUD_AUDIO_DESC_CS_AC(_bcdADC, _category, _totallen, _ctrl) /* _bcdADC : Audio Device Class Specification Release Number in Binary-Coded Decimal, _category : see audio_function_t, _totallen : Total number of bytes returned for the class-specific AudioControl interface i.e. Clock Source, Unit and Terminal descriptors - Do not include TUD_AUDIO_DESC_CS_AC_LEN, we already do this here*/ \ - TUD_AUDIO_DESC_CS_AC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(_bcdADC), _category, U16_TO_U8S_LE(_totallen + TUD_AUDIO_DESC_CS_AC_LEN), _ctrl +#define TUD_AUDIO_DESC_CS_AC( \ + _bcdADC, _category, _totallen, \ + _ctrl) /* _bcdADC : Audio Device Class Specification Release Number in Binary-Coded Decimal, _category : see audio_function_t, _totallen : Total number of bytes returned for the class-specific AudioControl interface i.e. Clock Source, Unit and Terminal descriptors - Do not include TUD_AUDIO_DESC_CS_AC_LEN, we already do this here*/ \ + TUD_AUDIO_DESC_CS_AC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, \ + U16_TO_U8S_LE(_bcdADC), _category, U16_TO_U8S_LE(_totallen + TUD_AUDIO_DESC_CS_AC_LEN), \ + _ctrl /* Clock Source Descriptor(4.7.2.1) */ #define TUD_AUDIO_DESC_CLK_SRC_LEN 8 -#define TUD_AUDIO_DESC_CLK_SRC(_clkid, _attr, _ctrl, _assocTerm, _stridx) \ - TUD_AUDIO_DESC_CLK_SRC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE, _clkid, _attr, _ctrl, _assocTerm, _stridx +#define TUD_AUDIO_DESC_CLK_SRC(_clkid, _attr, _ctrl, _assocTerm, _stridx) \ + TUD_AUDIO_DESC_CLK_SRC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE, \ + _clkid, _attr, _ctrl, _assocTerm, _stridx /* Input Terminal Descriptor(4.7.2.4) */ #define TUD_AUDIO_DESC_INPUT_TERM_LEN 17 -#define TUD_AUDIO_DESC_INPUT_TERM(_termid, _termtype, _assocTerm, _clkid, _nchannelslogical, _channelcfg, _idxchannelnames, _ctrl, _stridx) \ - TUD_AUDIO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL, _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _clkid, _nchannelslogical, U32_TO_U8S_LE(_channelcfg), _idxchannelnames, U16_TO_U8S_LE(_ctrl), _stridx +#define TUD_AUDIO_DESC_INPUT_TERM(_termid, _termtype, _assocTerm, _clkid, _nchannelslogical, \ + _channelcfg, _idxchannelnames, _ctrl, _stridx) \ + TUD_AUDIO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL, \ + _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _clkid, _nchannelslogical, \ + U32_TO_U8S_LE(_channelcfg), _idxchannelnames, U16_TO_U8S_LE(_ctrl), _stridx /* Output Terminal Descriptor(4.7.2.5) */ #define TUD_AUDIO_DESC_OUTPUT_TERM_LEN 12 #define TUD_AUDIO_DESC_OUTPUT_TERM(_termid, _termtype, _assocTerm, _srcid, _clkid, _ctrl, _stridx) \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL, _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _srcid, _clkid, U16_TO_U8S_LE(_ctrl), _stridx + TUD_AUDIO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL, \ + _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _srcid, _clkid, U16_TO_U8S_LE(_ctrl), \ + _stridx /* Feature Unit Descriptor(4.7.2.8) */ // 1 - Channel -#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN 6+(1+1)*4 -#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _stridx) \ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), _stridx +#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN 6 + (1 + 1) * 4 +#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, \ + _stridx) \ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, \ + AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), \ + U32_TO_U8S_LE(_ctrlch1), _stridx // 2 - Channels -#define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN (6+(2+1)*4) -#define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _ctrlch2, _stridx) \ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), _stridx +#define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN (6 + (2 + 1) * 4) +#define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, \ + _ctrlch2, _stridx) \ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, \ + AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), \ + U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), _stridx // 4 - Channels -#define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN (6+(4+1)*4) -#define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _ctrlch2, _ctrlch3, _ctrlch4, _stridx) \ - TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), U32_TO_U8S_LE(_ctrlch3), U32_TO_U8S_LE(_ctrlch4), _stridx +#define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN (6 + (4 + 1) * 4) +#define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, \ + _ctrlch2, _ctrlch3, _ctrlch4, _stridx) \ + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, \ + AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), \ + U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), U32_TO_U8S_LE(_ctrlch3), \ + U32_TO_U8S_LE(_ctrlch4), _stridx // For more channels, add definitions here /* Standard AC Interrupt Endpoint Descriptor(4.8.2.1) */ #define TUD_AUDIO_DESC_STD_AC_INT_EP_LEN 7 -#define TUD_AUDIO_DESC_STD_AC_INT_EP(_ep, _interval) \ - TUD_AUDIO_DESC_STD_AC_INT_EP_LEN, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(6), _interval +#define TUD_AUDIO_DESC_STD_AC_INT_EP(_ep, _interval) \ + TUD_AUDIO_DESC_STD_AC_INT_EP_LEN, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_INTERRUPT, \ + U16_TO_U8S_LE(6), _interval /* Standard AS Interface Descriptor(4.9.1) */ #define TUD_AUDIO_DESC_STD_AS_INT_LEN 9 -#define TUD_AUDIO_DESC_STD_AS_INT(_itfnum, _altset, _nEPs, _stridx) \ - TUD_AUDIO_DESC_STD_AS_INT_LEN, TUSB_DESC_INTERFACE, _itfnum, _altset, _nEPs, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_STREAMING, AUDIO_INT_PROTOCOL_CODE_V2, _stridx +#define TUD_AUDIO_DESC_STD_AS_INT(_itfnum, _altset, _nEPs, _stridx) \ + TUD_AUDIO_DESC_STD_AS_INT_LEN, TUSB_DESC_INTERFACE, _itfnum, _altset, _nEPs, TUSB_CLASS_AUDIO, \ + AUDIO_SUBCLASS_STREAMING, AUDIO_INT_PROTOCOL_CODE_V2, _stridx /* Class-Specific AS Interface Descriptor(4.9.2) */ #define TUD_AUDIO_DESC_CS_AS_INT_LEN 16 -#define TUD_AUDIO_DESC_CS_AS_INT(_termid, _ctrl, _formattype, _formats, _nchannelsphysical, _channelcfg, _stridx) \ - TUD_AUDIO_DESC_CS_AS_INT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_AS_GENERAL, _termid, _ctrl, _formattype, U32_TO_U8S_LE(_formats), _nchannelsphysical, U32_TO_U8S_LE(_channelcfg), _stridx +#define TUD_AUDIO_DESC_CS_AS_INT(_termid, _ctrl, _formattype, _formats, _nchannelsphysical, \ + _channelcfg, _stridx) \ + TUD_AUDIO_DESC_CS_AS_INT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_AS_GENERAL, \ + _termid, _ctrl, _formattype, U32_TO_U8S_LE(_formats), _nchannelsphysical, \ + U32_TO_U8S_LE(_channelcfg), _stridx /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ #define TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN 6 -#define TUD_AUDIO_DESC_TYPE_I_FORMAT(_subslotsize, _bitresolution) /* _subslotsize is number of bytes per sample (i.e. subslot) and can be 1,2,3, or 4 */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_FORMAT_TYPE, AUDIO_FORMAT_TYPE_I, _subslotsize, _bitresolution +#define TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + _subslotsize, \ + _bitresolution) /* _subslotsize is number of bytes per sample (i.e. subslot) and can be 1,2,3, or 4 */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_FORMAT_TYPE, \ + AUDIO_FORMAT_TYPE_I, _subslotsize, _bitresolution /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ #define TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN 7 -#define TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep, _attr, _maxEPsize, _interval) \ - TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN, TUSB_DESC_ENDPOINT, _ep, _attr, U16_TO_U8S_LE(_maxEPsize), _interval +#define TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep, _attr, _maxEPsize, _interval) \ + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN, TUSB_DESC_ENDPOINT, _ep, _attr, U16_TO_U8S_LE(_maxEPsize), \ + _interval /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ #define TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN 8 -#define TUD_AUDIO_DESC_CS_AS_ISO_EP(_attr, _ctrl, _lockdelayunit, _lockdelay) \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN, TUSB_DESC_CS_ENDPOINT, AUDIO_CS_EP_SUBTYPE_GENERAL, _attr, _ctrl, _lockdelayunit, U16_TO_U8S_LE(_lockdelay) +#define TUD_AUDIO_DESC_CS_AS_ISO_EP(_attr, _ctrl, _lockdelayunit, _lockdelay) \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN, TUSB_DESC_CS_ENDPOINT, AUDIO_CS_EP_SUBTYPE_GENERAL, _attr, \ + _ctrl, _lockdelayunit, U16_TO_U8S_LE(_lockdelay) /* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */ #define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN 7 -#define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(_ep, _epsize, _interval) \ - TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN, TUSB_DESC_ENDPOINT, _ep, (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_NO_SYNC | (uint8_t)TUSB_ISO_EP_ATT_EXPLICIT_FB), U16_TO_U8S_LE(_epsize), _interval +#define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(_ep, _epsize, _interval) \ + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN, TUSB_DESC_ENDPOINT, _ep, \ + (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_NO_SYNC | \ + (uint8_t)TUSB_ISO_EP_ATT_EXPLICIT_FB), \ + U16_TO_U8S_LE(_epsize), _interval // AUDIO simple descriptor (UAC2) for 1 microphone input // - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source -#define TUD_AUDIO_MIC_ONE_CH_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ - + TUD_AUDIO_DESC_STD_AC_LEN\ - + TUD_AUDIO_DESC_CS_AC_LEN\ - + TUD_AUDIO_DESC_CLK_SRC_LEN\ - + TUD_AUDIO_DESC_INPUT_TERM_LEN\ - + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ - + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) - -#define TUD_AUDIO_MIC_ONE_CH_DESC_N_AS_INT 1 // Number of AS interfaces - -#define TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epin, _epsize) \ - /* Standard Interface Association Descriptor (IAD) */\ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ - /* Standard AC Interface Descriptor(4.7.1) */\ - TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ - /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ - TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ - /* Clock Source Descriptor(4.7.2.1) */\ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ - /* Input Terminal Descriptor(4.7.2.4) */\ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\ - /* Output Terminal Descriptor(4.7.2.5) */\ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ - /* Feature Unit Descriptor(4.7.2.8) */\ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 1 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epsize, /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_MIC_ONE_CH_DESC_LEN \ + (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ + TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN + TUD_AUDIO_DESC_STD_AS_INT_LEN + \ + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) + +#define TUD_AUDIO_MIC_ONE_CH_DESC_N_AS_INT 1 // Number of AS interfaces + +#define TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, \ + _epin, _epsize) \ + /* Standard Interface Association Descriptor (IAD) */ \ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, \ + /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ + TUD_AUDIO_DESC_STD_AC( \ + /*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, \ + /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ + TUD_AUDIO_DESC_CS_AC( \ + /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, \ + /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, \ + /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, \ + /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), \ + /*_assocTerm*/ 0x01, \ + /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, \ + /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, \ + /*_nchannelslogical*/ 0x01, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_idxchannelnames*/ 0x00, \ + /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, \ + /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, \ + /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, \ + /*_ctrl*/ 0x0000, \ + /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL( \ + /*_unitid*/ 0x02, /*_srcid*/ 0x01, \ + /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ + /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, \ + /*_nEPs*/ 0x00, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, \ + /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + _nBytesPerSample, \ + _nBitsUsedPerSample), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epin, /*_attr*/ \ + (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ + (uint8_t)TUSB_ISO_EP_ATT_DATA), \ + /*_maxEPsize*/ _epsize, /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000) // AUDIO simple descriptor (UAC2) for 4 microphone input // - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source -#define TUD_AUDIO_MIC_FOUR_CH_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ - + TUD_AUDIO_DESC_STD_AC_LEN\ - + TUD_AUDIO_DESC_CS_AC_LEN\ - + TUD_AUDIO_DESC_CLK_SRC_LEN\ - + TUD_AUDIO_DESC_INPUT_TERM_LEN\ - + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ - + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) - -#define TUD_AUDIO_MIC_FOUR_CH_DESC_N_AS_INT 1 // Number of AS interfaces - -#define TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epin, _epsize) \ - /* Standard Interface Association Descriptor (IAD) */\ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ - /* Standard AC Interface Descriptor(4.7.1) */\ - TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ - /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ - TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ - /* Clock Source Descriptor(4.7.2.1) */\ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ - /* Input Terminal Descriptor(4.7.2.4) */\ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x04, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\ - /* Output Terminal Descriptor(4.7.2.5) */\ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ - /* Feature Unit Descriptor(4.7.2.8) */\ - TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch2*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch3*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch4*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 1 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x04, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epsize, /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_MIC_FOUR_CH_DESC_LEN \ + (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ + TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN + TUD_AUDIO_DESC_STD_AS_INT_LEN + \ + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) + +#define TUD_AUDIO_MIC_FOUR_CH_DESC_N_AS_INT 1 // Number of AS interfaces + +#define TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, \ + _epin, _epsize) \ + /* Standard Interface Association Descriptor (IAD) */ \ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, \ + /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ + TUD_AUDIO_DESC_STD_AC( \ + /*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, \ + /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ + TUD_AUDIO_DESC_CS_AC( \ + /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, \ + /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, \ + /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, \ + /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), \ + /*_assocTerm*/ 0x01, \ + /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, \ + /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, \ + /*_nchannelslogical*/ 0x04, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_idxchannelnames*/ 0x00, \ + /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, \ + /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, \ + /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, \ + /*_ctrl*/ 0x0000, \ + /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL( \ + /*_unitid*/ 0x02, /*_srcid*/ 0x01, \ + /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ + /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ + /*_ctrlch2*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ + /*_ctrlch3*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ + /*_ctrlch4*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, \ + /*_nEPs*/ 0x00, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ + /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, \ + /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x04, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + _nBytesPerSample, \ + _nBitsUsedPerSample), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epin, /*_attr*/ \ + (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ + (uint8_t)TUSB_ISO_EP_ATT_DATA), \ + /*_maxEPsize*/ _epsize, /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000) // AUDIO simple descriptor (UAC2) for mono speaker // - 1 Input Terminal, 2 Feature Unit (Mute and Volume Control), 3 Output Terminal, 4 Clock Source -#define TUD_AUDIO_SPEAKER_MONO_FB_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ - + TUD_AUDIO_DESC_STD_AC_LEN\ - + TUD_AUDIO_DESC_CS_AC_LEN\ - + TUD_AUDIO_DESC_CLK_SRC_LEN\ - + TUD_AUDIO_DESC_INPUT_TERM_LEN\ - + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ - + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_STD_AS_INT_LEN\ - + TUD_AUDIO_DESC_CS_AS_INT_LEN\ - + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ - + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN) - -#define TUD_AUDIO_SPEAKER_MONO_FB_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epout, _epoutsize, _epfb, _epfbsize) \ - /* Standard Interface Association Descriptor (IAD) */\ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ - /* Standard AC Interface Descriptor(4.7.1) */\ - TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ - /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ - TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_DESKTOP_SPEAKER, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ - /* Clock Source Descriptor(4.7.2.1) */\ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ - /* Input Terminal Descriptor(4.7.2.4) */\ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ - /* Output Terminal Descriptor(4.7.2.5) */\ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ - /* Feature Unit Descriptor(4.7.2.8) */\ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ - /* Standard AS Interface Descriptor(4.9.1) */\ - /* Interface 1, Alternate 1 - alternate interface for data streaming */\ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x02, /*_stridx*/ 0x00),\ - /* Class-Specific AS Interface Descriptor(4.9.2) */\ - TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x01, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ - /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ - TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ - /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epoutsize, /*_interval*/ 0x01),\ - /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ - TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ - /* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */\ - TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(/*_ep*/ _epfb, /*_epsize*/ _epfbsize, /*_interval*/ 1) +#define TUD_AUDIO_SPEAKER_MONO_FB_DESC_LEN \ + (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ + TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN + TUD_AUDIO_DESC_STD_AS_INT_LEN + \ + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN) + +#define TUD_AUDIO_SPEAKER_MONO_FB_DESCRIPTOR( \ + _itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epout, _epoutsize, _epfb, _epfbsize) \ + /* Standard Interface Association Descriptor (IAD) */ \ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, \ + /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ + TUD_AUDIO_DESC_STD_AC( \ + /*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, \ + /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ + TUD_AUDIO_DESC_CS_AC( \ + /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_DESKTOP_SPEAKER, \ + /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, \ + /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, \ + /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), \ + /*_assocTerm*/ 0x01, \ + /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ + TUD_AUDIO_DESC_INPUT_TERM( \ + /*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, \ + /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ + /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ + /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, \ + /*_termtype*/ AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER, \ + /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, \ + /*_ctrl*/ 0x0000, \ + /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL( \ + /*_unitid*/ 0x02, /*_srcid*/ 0x01, \ + /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ + /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ + AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, \ + /*_nEPs*/ 0x00, /*_stridx*/ \ + 0x00), \ + /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ + TUD_AUDIO_DESC_STD_AS_INT( \ + /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x02, \ + /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ + TUD_AUDIO_DESC_CS_AS_INT( \ + /*_termid*/ 0x01, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, \ + /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, \ + /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ + /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ + TUD_AUDIO_DESC_TYPE_I_FORMAT( \ + _nBytesPerSample, \ + _nBitsUsedPerSample), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_EP( \ + /*_ep*/ _epout, /*_attr*/ \ + (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ + (uint8_t)TUSB_ISO_EP_ATT_DATA), \ + /*_maxEPsize*/ _epoutsize, /*_interval*/ \ + 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ + TUD_AUDIO_DESC_CS_AS_ISO_EP( \ + /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ + /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ + /*_lockdelay*/ 0x0000), /* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */ \ + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(/*_ep*/ _epfb, /*_epsize*/ _epfbsize, /*_interval*/ 1) // Calculate wMaxPacketSize of Endpoints -#define TUD_AUDIO_EP_SIZE(_maxFrequency, _nBytesPerSample, _nChannels) \ - ((((_maxFrequency + (TUD_OPT_HIGH_SPEED ? 7999 : 999)) / (TUD_OPT_HIGH_SPEED ? 8000 : 1000)) + 1) * _nBytesPerSample * _nChannels) - +#define TUD_AUDIO_EP_SIZE(_maxFrequency, _nBytesPerSample, _nChannels) \ + ((((_maxFrequency + (TUD_OPT_HIGH_SPEED ? 7999 : 999)) / (TUD_OPT_HIGH_SPEED ? 8000 : 1000)) + \ + 1) * \ + _nBytesPerSample * _nChannels) //--------------------------------------------------------------------+ // USBTMC/USB488 Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_USBTMC_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) +#define TUD_USBTMC_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) #define TUD_USBTMC_APP_SUBCLASS 0x03u -#define TUD_USBTMC_PROTOCOL_STD 0x00u +#define TUD_USBTMC_PROTOCOL_STD 0x00u #define TUD_USBTMC_PROTOCOL_USB488 0x01u // Interface number, number of endpoints, EP string index, USB_TMC_PROTOCOL*, bulk-out endpoint ID, // bulk-in endpoint ID -#define TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, _stridx, _itfProtocol) \ - /* Interface */ \ - 0x09, TUSB_DESC_INTERFACE, _itfnum, 0x00, _bNumEndpoints, TUD_USBTMC_APP_CLASS, TUD_USBTMC_APP_SUBCLASS, _itfProtocol, _stridx +#define TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, _stridx, _itfProtocol) \ + /* Interface */ \ + 0x09, TUSB_DESC_INTERFACE, _itfnum, 0x00, _bNumEndpoints, TUD_USBTMC_APP_CLASS, \ + TUD_USBTMC_APP_SUBCLASS, _itfProtocol, _stridx #define TUD_USBTMC_IF_DESCRIPTOR_LEN 9u -#define TUD_USBTMC_BULK_DESCRIPTORS(_epout, _epin, _bulk_epsize) \ - /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), 0u, \ - /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), 0u +#define TUD_USBTMC_BULK_DESCRIPTORS(_epout, _epin, _bulk_epsize) \ + /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), \ + 0u, /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), 0u -#define TUD_USBTMC_BULK_DESCRIPTORS_LEN (7u+7u) +#define TUD_USBTMC_BULK_DESCRIPTORS_LEN (7u + 7u) -/* optional interrupt endpoint */ \ -// _int_pollingInterval : for LS/FS, expressed in frames (1ms each). 16 may be a good number? -#define TUD_USBTMC_INT_DESCRIPTOR(_ep_interrupt, _ep_interrupt_size, _int_pollingInterval ) \ - 7, TUSB_DESC_ENDPOINT, _ep_interrupt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_interrupt_size), _int_pollingInterval +/* optional interrupt endpoint */ // _int_pollingInterval : for LS/FS, expressed in frames (1ms each). 16 may be a good number? +#define TUD_USBTMC_INT_DESCRIPTOR(_ep_interrupt, _ep_interrupt_size, _int_pollingInterval) \ + 7, TUSB_DESC_ENDPOINT, _ep_interrupt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_interrupt_size), \ + _int_pollingInterval #define TUD_USBTMC_INT_DESCRIPTOR_LEN (7u) @@ -627,22 +751,22 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_requ // Vendor Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_VENDOR_DESC_LEN (9+7+7) +#define TUD_VENDOR_DESC_LEN (9 + 7 + 7) // Interface number, string index, EP Out & IN address, EP size -#define TUD_VENDOR_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ - /* Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_VENDOR_SPECIFIC, 0x00, 0x00, _stridx,\ - /* Endpoint Out */\ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ - /* Endpoint In */\ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_VENDOR_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ + /* Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_VENDOR_SPECIFIC, 0x00, 0x00, \ + _stridx, /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ + 0, /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // DFU Runtime Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_DFU_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) +#define TUD_DFU_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) #define TUD_DFU_APP_SUBCLASS (APP_SUBCLASS_DFU_RUNTIME) // Length of template descriptr: 18 bytes @@ -650,91 +774,87 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_requ // DFU runtime descriptor // Interface number, string index, attributes, detach timeout, transfer size -#define TUD_DFU_RT_DESCRIPTOR(_itfnum, _stridx, _attr, _timeout, _xfer_size) \ - /* Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, DFU_PROTOCOL_RT, _stridx, \ - /* Function */ \ - 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), U16_TO_U8S_LE(0x0101) +#define TUD_DFU_RT_DESCRIPTOR(_itfnum, _stridx, _attr, _timeout, _xfer_size) \ + /* Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, \ + DFU_PROTOCOL_RT, _stridx, /* Function */ \ + 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), \ + U16_TO_U8S_LE(0x0101) //--------------------------------------------------------------------+ // DFU Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 9 bytes + number of alternatives * 9 -#define TUD_DFU_DESC_LEN(_alt_count) (9 + (_alt_count) * 9) +#define TUD_DFU_DESC_LEN(_alt_count) (9 + (_alt_count)*9) // Interface number, Alternate count, starting string index, attributes, detach timeout, transfer size // Note: Alternate count must be numeric or macro, string index is increased by one for each Alt interface -#define TUD_DFU_DESCRIPTOR(_itfnum, _alt_count, _stridx, _attr, _timeout, _xfer_size) \ - TU_XSTRCAT(_TUD_DFU_ALT_,_alt_count)(_itfnum, 0, _stridx), \ - /* Function */ \ - 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), U16_TO_U8S_LE(0x0101) +#define TUD_DFU_DESCRIPTOR(_itfnum, _alt_count, _stridx, _attr, _timeout, _xfer_size) \ + TU_XSTRCAT(_TUD_DFU_ALT_, _alt_count) \ + (_itfnum, 0, _stridx), /* Function */ \ + 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), \ + U16_TO_U8S_LE(0x0101) -#define _TUD_DFU_ALT(_itfnum, _alt, _stridx) \ - /* Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, DFU_PROTOCOL_DFU, _stridx +#define _TUD_DFU_ALT(_itfnum, _alt, _stridx) \ + /* Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, \ + DFU_PROTOCOL_DFU, _stridx -#define _TUD_DFU_ALT_1(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx) +#define _TUD_DFU_ALT_1(_itfnum, _alt_count, _stridx) _TUD_DFU_ALT(_itfnum, _alt_count, _stridx) #define _TUD_DFU_ALT_2(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ - _TUD_DFU_ALT_1(_itfnum, _alt_count+1, _stridx+1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_1(_itfnum, _alt_count + 1, _stridx + 1) #define _TUD_DFU_ALT_3(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ - _TUD_DFU_ALT_2(_itfnum, _alt_count+1, _stridx+1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_2(_itfnum, _alt_count + 1, _stridx + 1) #define _TUD_DFU_ALT_4(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ - _TUD_DFU_ALT_3(_itfnum, _alt_count+1, _stridx+1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_3(_itfnum, _alt_count + 1, _stridx + 1) #define _TUD_DFU_ALT_5(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ - _TUD_DFU_ALT_4(_itfnum, _alt_count+1, _stridx+1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_4(_itfnum, _alt_count + 1, _stridx + 1) #define _TUD_DFU_ALT_6(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ - _TUD_DFU_ALT_5(_itfnum, _alt_count+1, _stridx+1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_5(_itfnum, _alt_count + 1, _stridx + 1) #define _TUD_DFU_ALT_7(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ - _TUD_DFU_ALT_6(_itfnum, _alt_count+1, _stridx+1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_6(_itfnum, _alt_count + 1, _stridx + 1) #define _TUD_DFU_ALT_8(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ - _TUD_DFU_ALT_7(_itfnum, _alt_count+1, _stridx+1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_7(_itfnum, _alt_count + 1, _stridx + 1) //--------------------------------------------------------------------+ // CDC-ECM Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 71 bytes -#define TUD_CDC_ECM_DESC_LEN (8+9+5+5+13+7+9+9+7+7) +#define TUD_CDC_ECM_DESC_LEN (8 + 9 + 5 + 5 + 13 + 7 + 9 + 9 + 7 + 7) // CDC-ECM Descriptor Template // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. -#define TUD_CDC_ECM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize, _maxsegmentsize) \ - /* Interface Association */\ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, 0,\ - /* CDC Control Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, _desc_stridx,\ - /* CDC-ECM Header */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0120),\ - /* CDC-ECM Union */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ - /* CDC-ECM Functional Descriptor */\ - 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0,\ - /* Endpoint Notification */\ - 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 1,\ - /* CDC Data Interface (default inactive) */\ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 0, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ - /* CDC Data Interface (alternative active) */\ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 1, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ - /* Endpoint In */\ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ - /* Endpoint Out */\ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_CDC_ECM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, \ + _epout, _epin, _epsize, _maxsegmentsize) \ + /* Interface Association */ \ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, \ + CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, 0, /* CDC Control Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, \ + CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, _desc_stridx, /* CDC-ECM Header */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, \ + U16_TO_U8S_LE(0x0120), /* CDC-ECM Union */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, \ + (uint8_t)((_itfnum) + 1), /* CDC-ECM Functional Descriptor */ \ + 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, \ + U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0, /* Endpoint Notification */ \ + 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), \ + 1, /* CDC Data Interface (default inactive) */ \ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 0, TUSB_CLASS_CDC_DATA, 0, 0, \ + 0, /* CDC Data Interface (alternative active) */ \ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 1, 2, TUSB_CLASS_CDC_DATA, 0, 0, \ + 0, /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ + 0, /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // RNDIS Descriptor Templates @@ -742,132 +862,142 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_requ #if 0 /* Windows XP */ -#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_CDC +#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_CDC #define TUD_RNDIS_ITF_SUBCLASS CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL #define TUD_RNDIS_ITF_PROTOCOL 0xFF /* CDC_COMM_PROTOCOL_MICROSOFT_RNDIS */ #else /* Windows 7+ */ -#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_WIRELESS_CONTROLLER +#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_WIRELESS_CONTROLLER #define TUD_RNDIS_ITF_SUBCLASS 0x01 #define TUD_RNDIS_ITF_PROTOCOL 0x03 #endif // Length of template descriptor: 66 bytes -#define TUD_RNDIS_DESC_LEN (8+9+5+5+4+5+7+9+7+7) +#define TUD_RNDIS_DESC_LEN (8 + 9 + 5 + 5 + 4 + 5 + 7 + 9 + 7 + 7) // RNDIS Descriptor Template // Interface number, string index, EP notification address and size, EP data address (out, in) and size. #define TUD_RNDIS_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ - /* Interface Association */\ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, TUD_RNDIS_ITF_PROTOCOL, 0,\ - /* CDC Control Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, TUD_RNDIS_ITF_PROTOCOL, _stridx,\ - /* CDC-ACM Header */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0110),\ - /* CDC Call Management */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, (uint8_t)((_itfnum) + 1),\ - /* ACM */\ - 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 0,\ - /* CDC Union */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ - /* Endpoint Notification */\ - 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 1,\ - /* CDC Data Interface */\ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ - /* Endpoint In */\ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ - /* Endpoint Out */\ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 + /* Interface Association */ \ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, \ + TUD_RNDIS_ITF_PROTOCOL, 0, /* CDC Control Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, \ + TUD_RNDIS_ITF_PROTOCOL, _stridx, /* CDC-ACM Header */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, \ + U16_TO_U8S_LE(0x0110), /* CDC Call Management */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, \ + (uint8_t)((_itfnum) + 1), /* ACM */ \ + 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 0, /* CDC Union */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, \ + (uint8_t)((_itfnum) + 1), /* Endpoint Notification */ \ + 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), \ + 1, /* CDC Data Interface */ \ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, \ + 0, /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ + 0, /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // Bluetooth Radio Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_BT_APP_CLASS (TUSB_CLASS_WIRELESS_CONTROLLER) -#define TUD_BT_APP_SUBCLASS 0x01 -#define TUD_BT_PROTOCOL_PRIMARY_CONTROLLER 0x01 -#define TUD_BT_PROTOCOL_AMP_CONTROLLER 0x02 +#define TUD_BT_APP_CLASS (TUSB_CLASS_WIRELESS_CONTROLLER) +#define TUD_BT_APP_SUBCLASS 0x01 +#define TUD_BT_PROTOCOL_PRIMARY_CONTROLLER 0x01 +#define TUD_BT_PROTOCOL_AMP_CONTROLLER 0x02 // Length of template descriptor: 38 bytes + number of ISO alternatives * 23 #define TUD_BTH_DESC_LEN (8 + 9 + 7 + 7 + 7 + (CFG_TUD_BTH_ISO_ALT_COUNT) * (9 + 7 + 7)) /* Primary Interface */ -#define TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size) \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 3, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, _stridx, \ - /* Endpoint In for events */ \ - 7, TUSB_DESC_ENDPOINT, _ep_evt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_evt_size), _ep_evt_interval, \ - /* Endpoint In for ACL data */ \ - 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), 1, \ - /* Endpoint Out for ACL data */ \ - 7, TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), 1 - -#define TUD_BTH_ISO_ITF(_itfnum, _alt, _ep_in, _ep_out, _n) ,\ - /* Interface with 2 endpoints */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0, \ - /* Isochronous endpoints */ \ - 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1, \ - 7, TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1 +#define TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, \ + _ep_out, _ep_size) \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 3, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, \ + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, _stridx, /* Endpoint In for events */ \ + 7, TUSB_DESC_ENDPOINT, _ep_evt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_evt_size), \ + _ep_evt_interval, /* Endpoint In for ACL data */ \ + 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), \ + 1, /* Endpoint Out for ACL data */ \ + 7, TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), 1 + +#define TUD_BTH_ISO_ITF(_itfnum, _alt, _ep_in, _ep_out, _n) \ + , /* Interface with 2 endpoints */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, \ + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0, /* Isochronous endpoints */ \ + 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1, 7, \ + TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1 #define _FIRST(a, ...) a #define _REST(a, ...) __VA_ARGS__ #define TUD_BTH_ISO_ITF_0(_itfnum, ...) -#define TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 1, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 2, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 3, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 4, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 5, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_6(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 6, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, ...) \ + TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-1, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, ...) \ + TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-2, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, ...) \ + TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-3, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, ...) \ + TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-4, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, ...) \ + TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-5, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_6(_itfnum, _ep_in, _ep_out, ...) \ + TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-6, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) #define TUD_BTH_ISO_ITFS(_itfnum, _ep_in, _ep_out, ...) \ - TU_XSTRCAT(TUD_BTH_ISO_ITF_, CFG_TUD_BTH_ISO_ALT_COUNT)(_itfnum, _ep_in, _ep_out, __VA_ARGS__) + TU_XSTRCAT(TUD_BTH_ISO_ITF_, CFG_TUD_BTH_ISO_ALT_COUNT)(_itfnum, _ep_in, _ep_out, __VA_ARGS__) // BT Primary controller descriptor // Interface number, string index, attributes, event endpoint, event endpoint size, interval, data in, data out, data endpoint size, iso endpoint sizes // TODO BTH should also use IAD like CDC for composite device -#define TUD_BTH_DESCRIPTOR(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size,...) \ - /* Interface Associate */\ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0,\ - TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size) \ - TUD_BTH_ISO_ITFS(_itfnum + 1, _ep_in + 1, _ep_out + 1, __VA_ARGS__) +#define TUD_BTH_DESCRIPTOR(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, \ + _ep_out, _ep_size, ...) \ + /* Interface Associate */ \ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, \ + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0, \ + TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, \ + _ep_out, _ep_size) \ + TUD_BTH_ISO_ITFS(_itfnum + 1, _ep_in + 1, _ep_out + 1, __VA_ARGS__) //--------------------------------------------------------------------+ // CDC-NCM Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor -#define TUD_CDC_NCM_DESC_LEN (8+9+5+5+13+6+7+9+9+7+7) +#define TUD_CDC_NCM_DESC_LEN (8 + 9 + 5 + 5 + 13 + 6 + 7 + 9 + 9 + 7 + 7) // CDC-ECM Descriptor Template // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. -#define TUD_CDC_NCM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize, _maxsegmentsize) \ - /* Interface Association */\ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, 0,\ - /* CDC Control Interface */\ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, _desc_stridx,\ - /* CDC-NCM Header */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0110),\ - /* CDC-NCM Union */\ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ - /* CDC-NCM Functional Descriptor */\ - 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0, \ - /* CDC-NCM Functional Descriptor */\ - 6, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_NCM, U16_TO_U8S_LE(0x0100), 0, \ - /* Endpoint Notification */\ - 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 50,\ - /* CDC Data Interface (default inactive) */\ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 0, TUSB_CLASS_CDC_DATA, 0, NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0,\ - /* CDC Data Interface (alternative active) */\ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 1, 2, TUSB_CLASS_CDC_DATA, 0, NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0,\ - /* Endpoint In */\ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ - /* Endpoint Out */\ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_CDC_NCM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, \ + _epout, _epin, _epsize, _maxsegmentsize) \ + /* Interface Association */ \ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, \ + CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, 0, /* CDC Control Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, \ + CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, _desc_stridx, /* CDC-NCM Header */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, \ + U16_TO_U8S_LE(0x0110), /* CDC-NCM Union */ \ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, \ + (uint8_t)((_itfnum) + 1), /* CDC-NCM Functional Descriptor */ \ + 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, \ + U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0, /* CDC-NCM Functional Descriptor */ \ + 6, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_NCM, U16_TO_U8S_LE(0x0100), \ + 0, /* Endpoint Notification */ \ + 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), \ + 50, /* CDC Data Interface (default inactive) */ \ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 0, TUSB_CLASS_CDC_DATA, 0, \ + NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0, /* CDC Data Interface (alternative active) */ \ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 1, 2, TUSB_CLASS_CDC_DATA, 0, \ + NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0, /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ + 0, /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 #ifdef __cplusplus } diff --git a/Libraries/tinyusb/src/device/usbd_control.c b/Libraries/tinyusb/src/device/usbd_control.c index 35cce1f7ee5..3d82edc9f82 100644 --- a/Libraries/tinyusb/src/device/usbd_control.c +++ b/Libraries/tinyusb/src/device/usbd_control.c @@ -35,9 +35,10 @@ //--------------------------------------------------------------------+ // Callback weak stubs (called if application does not provide) //--------------------------------------------------------------------+ -TU_ATTR_WEAK void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const* request) { - (void) rhport; - (void) request; +TU_ATTR_WEAK void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const *request) +{ + (void)rhport; + (void)request; } //--------------------------------------------------------------------+ @@ -48,175 +49,183 @@ TU_ATTR_WEAK void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request extern void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback); #endif -enum { - EDPT_CTRL_OUT = 0x00, - EDPT_CTRL_IN = 0x80 -}; +enum { EDPT_CTRL_OUT = 0x00, EDPT_CTRL_IN = 0x80 }; typedef struct { - tusb_control_request_t request; - uint8_t* buffer; - uint16_t data_len; - uint16_t total_xferred; - usbd_control_xfer_cb_t complete_cb; + tusb_control_request_t request; + uint8_t *buffer; + uint16_t data_len; + uint16_t total_xferred; + usbd_control_xfer_cb_t complete_cb; } usbd_control_xfer_t; tu_static usbd_control_xfer_t _ctrl_xfer; -CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN -tu_static uint8_t _usbd_ctrl_buf[CFG_TUD_ENDPOINT0_SIZE]; +CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t _usbd_ctrl_buf[CFG_TUD_ENDPOINT0_SIZE]; //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ // Queue ZLP status transaction -static inline bool _status_stage_xact(uint8_t rhport, tusb_control_request_t const* request) { - // Opposite to endpoint in Data Phase - uint8_t const ep_addr = request->bmRequestType_bit.direction ? EDPT_CTRL_OUT : EDPT_CTRL_IN; - return usbd_edpt_xfer(rhport, ep_addr, NULL, 0); +static inline bool _status_stage_xact(uint8_t rhport, tusb_control_request_t const *request) +{ + // Opposite to endpoint in Data Phase + uint8_t const ep_addr = request->bmRequestType_bit.direction ? EDPT_CTRL_OUT : EDPT_CTRL_IN; + return usbd_edpt_xfer(rhport, ep_addr, NULL, 0); } // Status phase -bool tud_control_status(uint8_t rhport, tusb_control_request_t const* request) { - _ctrl_xfer.request = (*request); - _ctrl_xfer.buffer = NULL; - _ctrl_xfer.total_xferred = 0; - _ctrl_xfer.data_len = 0; - - return _status_stage_xact(rhport, request); +bool tud_control_status(uint8_t rhport, tusb_control_request_t const *request) +{ + _ctrl_xfer.request = (*request); + _ctrl_xfer.buffer = NULL; + _ctrl_xfer.total_xferred = 0; + _ctrl_xfer.data_len = 0; + + return _status_stage_xact(rhport, request); } // Queue a transaction in Data Stage // Each transaction has up to Endpoint0's max packet size. // This function can also transfer an zero-length packet -static bool _data_stage_xact(uint8_t rhport) { - uint16_t const xact_len = tu_min16(_ctrl_xfer.data_len - _ctrl_xfer.total_xferred, - CFG_TUD_ENDPOINT0_SIZE); - - uint8_t ep_addr = EDPT_CTRL_OUT; - - if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_IN) { - ep_addr = EDPT_CTRL_IN; - if (xact_len) { - TU_VERIFY(0 == tu_memcpy_s(_usbd_ctrl_buf, CFG_TUD_ENDPOINT0_SIZE, _ctrl_xfer.buffer, xact_len)); +static bool _data_stage_xact(uint8_t rhport) +{ + uint16_t const xact_len = + tu_min16(_ctrl_xfer.data_len - _ctrl_xfer.total_xferred, CFG_TUD_ENDPOINT0_SIZE); + + uint8_t ep_addr = EDPT_CTRL_OUT; + + if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_IN) { + ep_addr = EDPT_CTRL_IN; + if (xact_len) { + TU_VERIFY(0 == tu_memcpy_s(_usbd_ctrl_buf, CFG_TUD_ENDPOINT0_SIZE, _ctrl_xfer.buffer, + xact_len)); + } } - } - return usbd_edpt_xfer(rhport, ep_addr, xact_len ? _usbd_ctrl_buf : NULL, xact_len); + return usbd_edpt_xfer(rhport, ep_addr, xact_len ? _usbd_ctrl_buf : NULL, xact_len); } // Transmit data to/from the control endpoint. // If the request's wLength is zero, a status packet is sent instead. -bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const* request, void* buffer, uint16_t len) { - _ctrl_xfer.request = (*request); - _ctrl_xfer.buffer = (uint8_t*) buffer; - _ctrl_xfer.total_xferred = 0U; - _ctrl_xfer.data_len = tu_min16(len, request->wLength); - - if (request->wLength > 0U) { - if (_ctrl_xfer.data_len > 0U) { - TU_ASSERT(buffer); +bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const *request, void *buffer, + uint16_t len) +{ + _ctrl_xfer.request = (*request); + _ctrl_xfer.buffer = (uint8_t *)buffer; + _ctrl_xfer.total_xferred = 0U; + _ctrl_xfer.data_len = tu_min16(len, request->wLength); + + if (request->wLength > 0U) { + if (_ctrl_xfer.data_len > 0U) { + TU_ASSERT(buffer); + } + + // TU_LOG2(" Control total data length is %u bytes\r\n", _ctrl_xfer.data_len); + + // Data stage + TU_ASSERT(_data_stage_xact(rhport)); + } else { + // Status stage + TU_ASSERT(_status_stage_xact(rhport, request)); } -// TU_LOG2(" Control total data length is %u bytes\r\n", _ctrl_xfer.data_len); - - // Data stage - TU_ASSERT(_data_stage_xact(rhport)); - } else { - // Status stage - TU_ASSERT(_status_stage_xact(rhport, request)); - } - - return true; + return true; } //--------------------------------------------------------------------+ // USBD API //--------------------------------------------------------------------+ void usbd_control_reset(void); -void usbd_control_set_request(tusb_control_request_t const* request); +void usbd_control_set_request(tusb_control_request_t const *request); void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp); -bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, + uint32_t xferred_bytes); -void usbd_control_reset(void) { - tu_varclr(&_ctrl_xfer); +void usbd_control_reset(void) +{ + tu_varclr(&_ctrl_xfer); } // Set complete callback -void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp) { - _ctrl_xfer.complete_cb = fp; +void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp) +{ + _ctrl_xfer.complete_cb = fp; } // for dcd_set_address where DCD is responsible for status response -void usbd_control_set_request(tusb_control_request_t const* request) { - _ctrl_xfer.request = (*request); - _ctrl_xfer.buffer = NULL; - _ctrl_xfer.total_xferred = 0; - _ctrl_xfer.data_len = 0; +void usbd_control_set_request(tusb_control_request_t const *request) +{ + _ctrl_xfer.request = (*request); + _ctrl_xfer.buffer = NULL; + _ctrl_xfer.total_xferred = 0; + _ctrl_xfer.data_len = 0; } // callback when a transaction complete on // - DATA stage of control endpoint or // - Status stage -bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) result; +bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, + uint32_t xferred_bytes) +{ + (void)result; + + // Endpoint Address is opposite to direction bit, this is Status Stage complete event + if (tu_edpt_dir(ep_addr) != _ctrl_xfer.request.bmRequestType_bit.direction) { + TU_ASSERT(0 == xferred_bytes); - // Endpoint Address is opposite to direction bit, this is Status Stage complete event - if (tu_edpt_dir(ep_addr) != _ctrl_xfer.request.bmRequestType_bit.direction) { - TU_ASSERT(0 == xferred_bytes); + // invoke optional dcd hook if available + dcd_edpt0_status_complete(rhport, &_ctrl_xfer.request); - // invoke optional dcd hook if available - dcd_edpt0_status_complete(rhport, &_ctrl_xfer.request); + if (_ctrl_xfer.complete_cb) { + // TODO refactor with usbd_driver_print_control_complete_name + _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_ACK, &_ctrl_xfer.request); + } - if (_ctrl_xfer.complete_cb) { - // TODO refactor with usbd_driver_print_control_complete_name - _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_ACK, &_ctrl_xfer.request); + return true; } - return true; - } - - if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_OUT) { - TU_VERIFY(_ctrl_xfer.buffer); - memcpy(_ctrl_xfer.buffer, _usbd_ctrl_buf, xferred_bytes); - TU_LOG_MEM(CFG_TUD_LOG_LEVEL, _usbd_ctrl_buf, xferred_bytes, 2); - } - - _ctrl_xfer.total_xferred += (uint16_t) xferred_bytes; - _ctrl_xfer.buffer += xferred_bytes; - - // Data Stage is complete when all request's length are transferred or - // a short packet is sent including zero-length packet. - if ((_ctrl_xfer.request.wLength == _ctrl_xfer.total_xferred) || - (xferred_bytes < CFG_TUD_ENDPOINT0_SIZE)) { - // DATA stage is complete - bool is_ok = true; - - // invoke complete callback if set - // callback can still stall control in status phase e.g out data does not make sense - if (_ctrl_xfer.complete_cb) { - #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL - usbd_driver_print_control_complete_name(_ctrl_xfer.complete_cb); - #endif - - is_ok = _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_DATA, &_ctrl_xfer.request); + if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_OUT) { + TU_VERIFY(_ctrl_xfer.buffer); + memcpy(_ctrl_xfer.buffer, _usbd_ctrl_buf, xferred_bytes); + TU_LOG_MEM(CFG_TUD_LOG_LEVEL, _usbd_ctrl_buf, xferred_bytes, 2); } - if (is_ok) { - // Send status - TU_ASSERT(_status_stage_xact(rhport, &_ctrl_xfer.request)); + _ctrl_xfer.total_xferred += (uint16_t)xferred_bytes; + _ctrl_xfer.buffer += xferred_bytes; + + // Data Stage is complete when all request's length are transferred or + // a short packet is sent including zero-length packet. + if ((_ctrl_xfer.request.wLength == _ctrl_xfer.total_xferred) || + (xferred_bytes < CFG_TUD_ENDPOINT0_SIZE)) { + // DATA stage is complete + bool is_ok = true; + + // invoke complete callback if set + // callback can still stall control in status phase e.g out data does not make sense + if (_ctrl_xfer.complete_cb) { +#if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL + usbd_driver_print_control_complete_name(_ctrl_xfer.complete_cb); +#endif + + is_ok = _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_DATA, &_ctrl_xfer.request); + } + + if (is_ok) { + // Send status + TU_ASSERT(_status_stage_xact(rhport, &_ctrl_xfer.request)); + } else { + // Stall both IN and OUT control endpoint + dcd_edpt_stall(rhport, EDPT_CTRL_OUT); + dcd_edpt_stall(rhport, EDPT_CTRL_IN); + } } else { - // Stall both IN and OUT control endpoint - dcd_edpt_stall(rhport, EDPT_CTRL_OUT); - dcd_edpt_stall(rhport, EDPT_CTRL_IN); + // More data to transfer + TU_ASSERT(_data_stage_xact(rhport)); } - } else { - // More data to transfer - TU_ASSERT(_data_stage_xact(rhport)); - } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/device/usbd_pvt.h b/Libraries/tinyusb/src/device/usbd_pvt.h index 335d46cd89f..da521b2d2fc 100644 --- a/Libraries/tinyusb/src/device/usbd_pvt.h +++ b/Libraries/tinyusb/src/device/usbd_pvt.h @@ -30,18 +30,18 @@ #include "common/tusb_fifo.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#define TU_LOG_USBD(...) TU_LOG(CFG_TUD_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_USBD(...) TU_LOG(CFG_TUD_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTYPES //--------------------------------------------------------------------+ typedef enum { - SOF_CONSUMER_USER = 0, - SOF_CONSUMER_AUDIO, + SOF_CONSUMER_USER = 0, + SOF_CONSUMER_AUDIO, } sof_consumer_t; //--------------------------------------------------------------------+ @@ -49,22 +49,23 @@ typedef enum { //--------------------------------------------------------------------+ typedef struct { - char const* name; - void (* init ) (void); - bool (* deinit ) (void); - void (* reset ) (uint8_t rhport); - uint16_t (* open ) (uint8_t rhport, tusb_desc_interface_t const * desc_intf, uint16_t max_len); - bool (* control_xfer_cb ) (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); - bool (* xfer_cb ) (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); - void (* sof ) (uint8_t rhport, uint32_t frame_count); // optional + char const *name; + void (*init)(void); + bool (*deinit)(void); + void (*reset)(uint8_t rhport); + uint16_t (*open)(uint8_t rhport, tusb_desc_interface_t const *desc_intf, uint16_t max_len); + bool (*control_xfer_cb)(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); + bool (*xfer_cb)(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); + void (*sof)(uint8_t rhport, uint32_t frame_count); // optional } usbd_class_driver_t; // Invoked when initializing device stack to get additional class drivers. // Can be implemented by application to extend/overwrite class driver support. // Note: The drivers array must be accessible at all time when stack is active -usbd_class_driver_t const* usbd_app_driver_get_cb(uint8_t* driver_count) TU_ATTR_WEAK; +usbd_class_driver_t const *usbd_app_driver_get_cb(uint8_t *driver_count) TU_ATTR_WEAK; -typedef bool (*usbd_control_xfer_cb_t)(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +typedef bool (*usbd_control_xfer_cb_t)(uint8_t rhport, uint8_t stage, + tusb_control_request_t const *request); void usbd_int_set(bool enabled); @@ -74,16 +75,16 @@ void usbd_int_set(bool enabled); //--------------------------------------------------------------------+ // Open an endpoint -bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); +bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep); // Close an endpoint void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr); // Submit a usb transfer -bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); +bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes); // Submit a usb ISO transfer by use of a FIFO (ring buffer) - all bytes in FIFO get transmitted -bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes); +bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes); // Claim an endpoint before submitting a transfer. // If caller does not make any transfer, it must release endpoint for others. @@ -108,12 +109,12 @@ bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr); bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size); // Configure and enable an ISO endpoint according to descriptor -bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc); +bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *p_endpoint_desc); // Check if endpoint is ready (not busy and not stalled) -TU_ATTR_ALWAYS_INLINE static inline -bool usbd_edpt_ready(uint8_t rhport, uint8_t ep_addr) { - return !usbd_edpt_busy(rhport, ep_addr) && !usbd_edpt_stalled(rhport, ep_addr); +TU_ATTR_ALWAYS_INLINE static inline bool usbd_edpt_ready(uint8_t rhport, uint8_t ep_addr) +{ + return !usbd_edpt_busy(rhport, ep_addr) && !usbd_edpt_stalled(rhport, ep_addr); } // Enable SOF interrupt @@ -123,11 +124,12 @@ void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en); /* Helper *------------------------------------------------------------------*/ -bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const* p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t* ep_out, uint8_t* ep_in); +bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const *p_desc, uint8_t ep_count, uint8_t xfer_type, + uint8_t *ep_out, uint8_t *ep_in); void usbd_defer_func(osal_task_func_t func, void *param, bool in_isr); #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/osal/osal.h b/Libraries/tinyusb/src/osal/osal.h index 8f45ea5c18a..b291a8be27b 100644 --- a/Libraries/tinyusb/src/osal/osal.h +++ b/Libraries/tinyusb/src/osal/osal.h @@ -28,45 +28,47 @@ #define _TUSB_OSAL_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif #include "common/tusb_common.h" -typedef void (*osal_task_func_t)( void * ); +typedef void (*osal_task_func_t)(void *); // Timeout -#define OSAL_TIMEOUT_NOTIMEOUT (0) // Return immediately -#define OSAL_TIMEOUT_NORMAL (10) // Default timeout -#define OSAL_TIMEOUT_WAIT_FOREVER (UINT32_MAX) // Wait forever -#define OSAL_TIMEOUT_CONTROL_XFER OSAL_TIMEOUT_WAIT_FOREVER +#define OSAL_TIMEOUT_NOTIMEOUT (0) // Return immediately +#define OSAL_TIMEOUT_NORMAL (10) // Default timeout +#define OSAL_TIMEOUT_WAIT_FOREVER (UINT32_MAX) // Wait forever +#define OSAL_TIMEOUT_CONTROL_XFER OSAL_TIMEOUT_WAIT_FOREVER // Mutex is required when using a preempted RTOS or MCU has multiple cores #if (CFG_TUSB_OS == OPT_OS_NONE) && !TUP_MCU_MULTIPLE_CORE - #define OSAL_MUTEX_REQUIRED 0 - #define OSAL_MUTEX_DEF(_name) uint8_t :0 +#define OSAL_MUTEX_REQUIRED 0 +#define OSAL_MUTEX_DEF(_name) \ +uint8_t: \ + 0 #else - #define OSAL_MUTEX_REQUIRED 1 - #define OSAL_MUTEX_DEF(_name) osal_mutex_def_t _name +#define OSAL_MUTEX_REQUIRED 1 +#define OSAL_MUTEX_DEF(_name) osal_mutex_def_t _name #endif // OS thin implementation #if CFG_TUSB_OS == OPT_OS_NONE - #include "osal_none.h" +#include "osal_none.h" #elif CFG_TUSB_OS == OPT_OS_FREERTOS - #include "osal_freertos.h" +#include "osal_freertos.h" #elif CFG_TUSB_OS == OPT_OS_MYNEWT - #include "osal_mynewt.h" +#include "osal_mynewt.h" #elif CFG_TUSB_OS == OPT_OS_PICO - #include "osal_pico.h" +#include "osal_pico.h" #elif CFG_TUSB_OS == OPT_OS_RTTHREAD - #include "osal_rtthread.h" +#include "osal_rtthread.h" #elif CFG_TUSB_OS == OPT_OS_RTX4 - #include "osal_rtx4.h" +#include "osal_rtx4.h" #elif CFG_TUSB_OS == OPT_OS_CUSTOM - #include "tusb_os_custom.h" // implemented by application +#include "tusb_os_custom.h" // implemented by application #else - #error OS is not supported yet +#error OS is not supported yet #endif //--------------------------------------------------------------------+ @@ -93,7 +95,7 @@ typedef void (*osal_task_func_t)( void * ); //--------------------------------------------------------------------+ #ifdef __cplusplus - } +} #endif #endif /* _TUSB_OSAL_H_ */ diff --git a/Libraries/tinyusb/src/osal/osal_freertos.h b/Libraries/tinyusb/src/osal/osal_freertos.h index a3a0f3a3fed..4bec88224de 100644 --- a/Libraries/tinyusb/src/osal/osal_freertos.h +++ b/Libraries/tinyusb/src/osal/osal_freertos.h @@ -28,10 +28,10 @@ #define TUSB_OSAL_FREERTOS_H_ // FreeRTOS Headers -#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH,FreeRTOS.h) -#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH,semphr.h) -#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH,queue.h) -#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH,task.h) +#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH, FreeRTOS.h) +#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH, semphr.h) +#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH, queue.h) +#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH, task.h) #ifdef __cplusplus extern "C" { @@ -42,184 +42,210 @@ extern "C" { //--------------------------------------------------------------------+ #if configSUPPORT_STATIC_ALLOCATION - typedef StaticSemaphore_t osal_semaphore_def_t; - typedef StaticSemaphore_t osal_mutex_def_t; +typedef StaticSemaphore_t osal_semaphore_def_t; +typedef StaticSemaphore_t osal_mutex_def_t; #else - // not used therefore defined to smallest possible type to save space - typedef uint8_t osal_semaphore_def_t; - typedef uint8_t osal_mutex_def_t; +// not used therefore defined to smallest possible type to save space +typedef uint8_t osal_semaphore_def_t; +typedef uint8_t osal_mutex_def_t; #endif typedef SemaphoreHandle_t osal_semaphore_t; typedef SemaphoreHandle_t osal_mutex_t; typedef QueueHandle_t osal_queue_t; -typedef struct -{ - uint16_t depth; - uint16_t item_sz; - void* buf; +typedef struct { + uint16_t depth; + uint16_t item_sz; + void *buf; -#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE>0) - char const* name; +#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE > 0) + char const *name; #endif #if configSUPPORT_STATIC_ALLOCATION - StaticQueue_t sq; + StaticQueue_t sq; #endif } osal_queue_def_t; -#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE>0) - #define _OSAL_Q_NAME(_name) .name = #_name +#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE > 0) +#define _OSAL_Q_NAME(_name) .name = #_name #else - #define _OSAL_Q_NAME(_name) +#define _OSAL_Q_NAME(_name) #endif // _int_set is not used with an RTOS -#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - static _type _name##_##buf[_depth];\ - osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, _OSAL_Q_NAME(_name) } +#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ + static _type _name##_##buf[_depth]; \ + osal_queue_def_t _name = { \ + .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, _OSAL_Q_NAME(_name) \ + } //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline uint32_t _osal_ms2tick(uint32_t msec) { - if ( msec == OSAL_TIMEOUT_WAIT_FOREVER ) return portMAX_DELAY; - if ( msec == 0 ) return 0; +TU_ATTR_ALWAYS_INLINE static inline uint32_t _osal_ms2tick(uint32_t msec) +{ + if (msec == OSAL_TIMEOUT_WAIT_FOREVER) + return portMAX_DELAY; + if (msec == 0) + return 0; - uint32_t ticks = pdMS_TO_TICKS(msec); + uint32_t ticks = pdMS_TO_TICKS(msec); - // configTICK_RATE_HZ is less than 1000 and 1 tick > 1 ms - // we still need to delay at least 1 tick - if ( ticks == 0 ) ticks = 1; + // configTICK_RATE_HZ is less than 1000 and 1 tick > 1 ms + // we still need to delay at least 1 tick + if (ticks == 0) + ticks = 1; - return ticks; + return ticks; } -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { - vTaskDelay(pdMS_TO_TICKS(msec)); +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) +{ + vTaskDelay(pdMS_TO_TICKS(msec)); } //--------------------------------------------------------------------+ // Semaphore API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t *semdef) { +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t +osal_semaphore_create(osal_semaphore_def_t *semdef) +{ #if configSUPPORT_STATIC_ALLOCATION - return xSemaphoreCreateBinaryStatic(semdef); + return xSemaphoreCreateBinaryStatic(semdef); #else - (void) semdef; - return xSemaphoreCreateBinary(); + (void)semdef; + return xSemaphoreCreateBinary(); #endif } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { - vSemaphoreDelete(semd_hdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) +{ + vSemaphoreDelete(semd_hdl); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { - if ( !in_isr ) { - return xSemaphoreGive(sem_hdl) != 0; - } else { - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - BaseType_t res = xSemaphoreGiveFromISR(sem_hdl, &xHigherPriorityTaskWoken); +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) +{ + if (!in_isr) { + return xSemaphoreGive(sem_hdl) != 0; + } else { + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + BaseType_t res = xSemaphoreGiveFromISR(sem_hdl, &xHigherPriorityTaskWoken); #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 - // not needed after https://github.com/espressif/esp-idf/commit/c5fd79547ac9b7bae06fa660e9f814d18d3390b7 - if ( xHigherPriorityTaskWoken ) portYIELD_FROM_ISR(); + // not needed after https://github.com/espressif/esp-idf/commit/c5fd79547ac9b7bae06fa660e9f814d18d3390b7 + if (xHigherPriorityTaskWoken) + portYIELD_FROM_ISR(); #else - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); #endif - return res != 0; - } + return res != 0; + } } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { - return xSemaphoreTake(sem_hdl, _osal_ms2tick(msec)); +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, + uint32_t msec) +{ + return xSemaphoreTake(sem_hdl, _osal_ms2tick(msec)); } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) { - xQueueReset(sem_hdl); +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) +{ + xQueueReset(sem_hdl); } //--------------------------------------------------------------------+ // MUTEX API (priority inheritance) //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) { +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) +{ #if configSUPPORT_STATIC_ALLOCATION - return xSemaphoreCreateMutexStatic(mdef); + return xSemaphoreCreateMutexStatic(mdef); #else - (void) mdef; - return xSemaphoreCreateMutex(); + (void)mdef; + return xSemaphoreCreateMutex(); #endif } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { - vSemaphoreDelete(mutex_hdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) +{ + vSemaphoreDelete(mutex_hdl); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { - return osal_semaphore_wait(mutex_hdl, msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) +{ + return osal_semaphore_wait(mutex_hdl, msec); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { - return xSemaphoreGive(mutex_hdl); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) +{ + return xSemaphoreGive(mutex_hdl); } //--------------------------------------------------------------------+ // QUEUE API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { - osal_queue_t q; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) +{ + osal_queue_t q; #if configSUPPORT_STATIC_ALLOCATION - q = xQueueCreateStatic(qdef->depth, qdef->item_sz, (uint8_t*) qdef->buf, &qdef->sq); + q = xQueueCreateStatic(qdef->depth, qdef->item_sz, (uint8_t *)qdef->buf, &qdef->sq); #else - q = xQueueCreate(qdef->depth, qdef->item_sz); + q = xQueueCreate(qdef->depth, qdef->item_sz); #endif -#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE>0) - vQueueAddToRegistry(q, qdef->name); +#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE > 0) + vQueueAddToRegistry(q, qdef->name); #endif - return q; + return q; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { - vQueueDelete(qhdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) +{ + vQueueDelete(qhdl); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { - return xQueueReceive(qhdl, data, _osal_ms2tick(msec)); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, + uint32_t msec) +{ + return xQueueReceive(qhdl, data, _osal_ms2tick(msec)); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, bool in_isr) { - if ( !in_isr ) { - return xQueueSendToBack(qhdl, data, OSAL_TIMEOUT_WAIT_FOREVER) != 0; - } else { - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - BaseType_t res = xQueueSendToBackFromISR(qhdl, data, &xHigherPriorityTaskWoken); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, + bool in_isr) +{ + if (!in_isr) { + return xQueueSendToBack(qhdl, data, OSAL_TIMEOUT_WAIT_FOREVER) != 0; + } else { + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + BaseType_t res = xQueueSendToBackFromISR(qhdl, data, &xHigherPriorityTaskWoken); #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 - // not needed after https://github.com/espressif/esp-idf/commit/c5fd79547ac9b7bae06fa660e9f814d18d3390b7 (IDF v5) - if ( xHigherPriorityTaskWoken ) portYIELD_FROM_ISR(); + // not needed after https://github.com/espressif/esp-idf/commit/c5fd79547ac9b7bae06fa660e9f814d18d3390b7 (IDF v5) + if (xHigherPriorityTaskWoken) + portYIELD_FROM_ISR(); #else - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); #endif - return res != 0; - } + return res != 0; + } } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { - return uxQueueMessagesWaiting(qhdl) == 0; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) +{ + return uxQueueMessagesWaiting(qhdl) == 0; } #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/osal/osal_mynewt.h b/Libraries/tinyusb/src/osal/osal_mynewt.h index 16def0d2a49..17cac209e97 100644 --- a/Libraries/tinyusb/src/osal/osal_mynewt.h +++ b/Libraries/tinyusb/src/osal/osal_mynewt.h @@ -30,67 +30,81 @@ #include "os/os.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { - os_time_delay( os_time_ms_to_ticks32(msec) ); +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) +{ + os_time_delay(os_time_ms_to_ticks32(msec)); } //--------------------------------------------------------------------+ // Semaphore API //--------------------------------------------------------------------+ -typedef struct os_sem osal_semaphore_def_t; -typedef struct os_sem* osal_semaphore_t; +typedef struct os_sem osal_semaphore_def_t; +typedef struct os_sem *osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) { - return (os_sem_init(semdef, 0) == OS_OK) ? (osal_semaphore_t) semdef : NULL; +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t +osal_semaphore_create(osal_semaphore_def_t *semdef) +{ + return (os_sem_init(semdef, 0) == OS_OK) ? (osal_semaphore_t)semdef : NULL; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { - (void) semd_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) +{ + (void)semd_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { - (void) in_isr; - return os_sem_release(sem_hdl) == OS_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) +{ + (void)in_isr; + return os_sem_release(sem_hdl) == OS_OK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { - uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? OS_TIMEOUT_NEVER : os_time_ms_to_ticks32(msec); - return os_sem_pend(sem_hdl, ticks) == OS_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, + uint32_t msec) +{ + uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? OS_TIMEOUT_NEVER : + os_time_ms_to_ticks32(msec); + return os_sem_pend(sem_hdl, ticks) == OS_OK; } -static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) { - // TODO implement later +static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) +{ + // TODO implement later } //--------------------------------------------------------------------+ // MUTEX API (priority inheritance) //--------------------------------------------------------------------+ typedef struct os_mutex osal_mutex_def_t; -typedef struct os_mutex* osal_mutex_t; +typedef struct os_mutex *osal_mutex_t; -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { - return (os_mutex_init(mdef) == OS_OK) ? (osal_mutex_t) mdef : NULL; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) +{ + return (os_mutex_init(mdef) == OS_OK) ? (osal_mutex_t)mdef : NULL; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { - (void) mutex_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) +{ + (void)mutex_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { - uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? OS_TIMEOUT_NEVER : os_time_ms_to_ticks32(msec); - return os_mutex_pend(mutex_hdl, ticks) == OS_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) +{ + uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? OS_TIMEOUT_NEVER : + os_time_ms_to_ticks32(msec); + return os_mutex_pend(mutex_hdl, ticks) == OS_OK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { - return os_mutex_release(mutex_hdl) == OS_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) +{ + return os_mutex_release(mutex_hdl) == OS_OK; } //--------------------------------------------------------------------+ @@ -98,80 +112,91 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd //--------------------------------------------------------------------+ // role device/host is used by OS NONE for mutex (disable usb isr) only -#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - static _type _name##_##buf[_depth];\ - static struct os_event _name##_##evbuf[_depth];\ - osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, .evbuf = _name##_##evbuf};\ +#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ + static _type _name##_##buf[_depth]; \ + static struct os_event _name##_##evbuf[_depth]; \ + osal_queue_def_t _name = { \ + .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, .evbuf = _name##_##evbuf \ + }; typedef struct { - uint16_t depth; - uint16_t item_sz; - void* buf; - void* evbuf; + uint16_t depth; + uint16_t item_sz; + void *buf; + void *evbuf; - struct os_mempool mpool; - struct os_mempool epool; + struct os_mempool mpool; + struct os_mempool epool; - struct os_eventq evq; -}osal_queue_def_t; + struct os_eventq evq; +} osal_queue_def_t; -typedef osal_queue_def_t* osal_queue_t; +typedef osal_queue_def_t *osal_queue_t; -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { - if ( OS_OK != os_mempool_init(&qdef->mpool, qdef->depth, qdef->item_sz, qdef->buf, "usb queue") ) return NULL; - if ( OS_OK != os_mempool_init(&qdef->epool, qdef->depth, sizeof(struct os_event), qdef->evbuf, "usb evqueue") ) return NULL; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) +{ + if (OS_OK != os_mempool_init(&qdef->mpool, qdef->depth, qdef->item_sz, qdef->buf, "usb queue")) + return NULL; + if (OS_OK != os_mempool_init(&qdef->epool, qdef->depth, sizeof(struct os_event), qdef->evbuf, + "usb evqueue")) + return NULL; - os_eventq_init(&qdef->evq); - return (osal_queue_t) qdef; + os_eventq_init(&qdef->evq); + return (osal_queue_t)qdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { - (void) qhdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) +{ + (void)qhdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { - (void) msec; // os_eventq_get() does not take timeout, always behave as msec = WAIT_FOREVER +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, + uint32_t msec) +{ + (void)msec; // os_eventq_get() does not take timeout, always behave as msec = WAIT_FOREVER - struct os_event* ev; - ev = os_eventq_get(&qhdl->evq); + struct os_event *ev; + ev = os_eventq_get(&qhdl->evq); - memcpy(data, ev->ev_arg, qhdl->item_sz); // copy message - os_memblock_put(&qhdl->mpool, ev->ev_arg); // put back mem block - os_memblock_put(&qhdl->epool, ev); // put back ev block + memcpy(data, ev->ev_arg, qhdl->item_sz); // copy message + os_memblock_put(&qhdl->mpool, ev->ev_arg); // put back mem block + os_memblock_put(&qhdl->epool, ev); // put back ev block - return true; + return true; } -static inline bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in_isr) { - (void) in_isr; +static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, bool in_isr) +{ + (void)in_isr; - // get a block from mem pool for data - void* ptr = os_memblock_get(&qhdl->mpool); - if (!ptr) return false; - memcpy(ptr, data, qhdl->item_sz); + // get a block from mem pool for data + void *ptr = os_memblock_get(&qhdl->mpool); + if (!ptr) + return false; + memcpy(ptr, data, qhdl->item_sz); - // get a block from event pool to put into queue - struct os_event* ev = (struct os_event*) os_memblock_get(&qhdl->epool); - if (!ev) { - os_memblock_put(&qhdl->mpool, ptr); - return false; - } - tu_memclr(ev, sizeof(struct os_event)); - ev->ev_arg = ptr; + // get a block from event pool to put into queue + struct os_event *ev = (struct os_event *)os_memblock_get(&qhdl->epool); + if (!ev) { + os_memblock_put(&qhdl->mpool, ptr); + return false; + } + tu_memclr(ev, sizeof(struct os_event)); + ev->ev_arg = ptr; - os_eventq_put(&qhdl->evq, ev); + os_eventq_put(&qhdl->evq, ev); - return true; + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { - return STAILQ_EMPTY(&qhdl->evq.evq_list); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) +{ + return STAILQ_EMPTY(&qhdl->evq.evq_list); } - #ifdef __cplusplus - } +} #endif #endif /* OSAL_MYNEWT_H_ */ diff --git a/Libraries/tinyusb/src/osal/osal_none.h b/Libraries/tinyusb/src/osal/osal_none.h index c93f7a86c9b..144e77f1fd4 100644 --- a/Libraries/tinyusb/src/osal/osal_none.h +++ b/Libraries/tinyusb/src/osal/osal_none.h @@ -44,40 +44,46 @@ TU_ATTR_WEAK void osal_task_delay(uint32_t msec); // Binary Semaphore API //--------------------------------------------------------------------+ typedef struct { - volatile uint16_t count; + volatile uint16_t count; } osal_semaphore_def_t; -typedef osal_semaphore_def_t* osal_semaphore_t; +typedef osal_semaphore_def_t *osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) { - semdef->count = 0; - return semdef; +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t +osal_semaphore_create(osal_semaphore_def_t *semdef) +{ + semdef->count = 0; + return semdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { - (void) semd_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) +{ + (void)semd_hdl; + return true; // nothing to do } - -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { - (void) in_isr; - sem_hdl->count++; - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) +{ + (void)in_isr; + sem_hdl->count++; + return true; } // TODO blocking for now -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { - (void) msec; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, + uint32_t msec) +{ + (void)msec; - while (sem_hdl->count == 0) {} - sem_hdl->count--; + while (sem_hdl->count == 0) {} + sem_hdl->count--; - return true; + return true; } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) { - sem_hdl->count = 0; +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) +{ + sem_hdl->count = 0; } //--------------------------------------------------------------------+ @@ -91,29 +97,33 @@ typedef osal_semaphore_t osal_mutex_t; // Note: multiple cores MCUs usually do provide IPC API for mutex // or we can use std atomic function -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { - mdef->count = 1; - return mdef; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) +{ + mdef->count = 1; + return mdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { - (void) mutex_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) +{ + (void)mutex_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock (osal_mutex_t mutex_hdl, uint32_t msec) { - return osal_semaphore_wait(mutex_hdl, msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) +{ + return osal_semaphore_wait(mutex_hdl, msec); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { - return osal_semaphore_post(mutex_hdl, false); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) +{ + return osal_semaphore_post(mutex_hdl, false); } #else -#define osal_mutex_create(_mdef) (NULL) -#define osal_mutex_lock(_mutex_hdl, _ms) (true) -#define osal_mutex_unlock(_mutex_hdl) (true) +#define osal_mutex_create(_mdef) (NULL) +#define osal_mutex_lock(_mutex_hdl, _ms) (true) +#define osal_mutex_unlock(_mutex_hdl) (true) #endif @@ -123,70 +133,77 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd #include "common/tusb_fifo.h" typedef struct { - void (* interrupt_set)(bool); - tu_fifo_t ff; + void (*interrupt_set)(bool); + tu_fifo_t ff; } osal_queue_def_t; -typedef osal_queue_def_t* osal_queue_t; +typedef osal_queue_def_t *osal_queue_t; // _int_set is used as mutex in OS NONE (disable/enable USB ISR) #define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - uint8_t _name##_buf[_depth*sizeof(_type)]; \ - osal_queue_def_t _name = { \ - .interrupt_set = _int_set, \ - .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) \ - } + uint8_t _name##_buf[_depth * sizeof(_type)]; \ + osal_queue_def_t _name = { .interrupt_set = _int_set, \ + .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) } // lock queue by disable USB interrupt -TU_ATTR_ALWAYS_INLINE static inline void _osal_q_lock(osal_queue_t qhdl) { - // disable dcd/hcd interrupt - qhdl->interrupt_set(false); +TU_ATTR_ALWAYS_INLINE static inline void _osal_q_lock(osal_queue_t qhdl) +{ + // disable dcd/hcd interrupt + qhdl->interrupt_set(false); } // unlock queue -TU_ATTR_ALWAYS_INLINE static inline void _osal_q_unlock(osal_queue_t qhdl) { - // enable dcd/hcd interrupt - qhdl->interrupt_set(true); +TU_ATTR_ALWAYS_INLINE static inline void _osal_q_unlock(osal_queue_t qhdl) +{ + // enable dcd/hcd interrupt + qhdl->interrupt_set(true); } -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { - tu_fifo_clear(&qdef->ff); - return (osal_queue_t) qdef; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) +{ + tu_fifo_clear(&qdef->ff); + return (osal_queue_t)qdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { - (void) qhdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) +{ + (void)qhdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { - (void) msec; // not used, always behave as msec = 0 +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, + uint32_t msec) +{ + (void)msec; // not used, always behave as msec = 0 - _osal_q_lock(qhdl); - bool success = tu_fifo_read(&qhdl->ff, data); - _osal_q_unlock(qhdl); + _osal_q_lock(qhdl); + bool success = tu_fifo_read(&qhdl->ff, data); + _osal_q_unlock(qhdl); - return success; + return success; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const* data, bool in_isr) { - if (!in_isr) { - _osal_q_lock(qhdl); - } +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, + bool in_isr) +{ + if (!in_isr) { + _osal_q_lock(qhdl); + } - bool success = tu_fifo_write(&qhdl->ff, data); + bool success = tu_fifo_write(&qhdl->ff, data); - if (!in_isr) { - _osal_q_unlock(qhdl); - } + if (!in_isr) { + _osal_q_unlock(qhdl); + } - return success; + return success; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { - // Skip queue lock/unlock since this function is primarily called - // with interrupt disabled before going into low power mode - return tu_fifo_empty(&qhdl->ff); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) +{ + // Skip queue lock/unlock since this function is primarily called + // with interrupt disabled before going into low power mode + return tu_fifo_empty(&qhdl->ff); } #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/osal/osal_pico.h b/Libraries/tinyusb/src/osal/osal_pico.h index 315de0950a8..4ffe1d92432 100644 --- a/Libraries/tinyusb/src/osal/osal_pico.h +++ b/Libraries/tinyusb/src/osal/osal_pico.h @@ -39,62 +39,74 @@ extern "C" { //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { - sleep_ms(msec); +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) +{ + sleep_ms(msec); } //--------------------------------------------------------------------+ // Binary Semaphore API //--------------------------------------------------------------------+ -typedef struct semaphore osal_semaphore_def_t, * osal_semaphore_t; +typedef struct semaphore osal_semaphore_def_t, *osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) { - sem_init(semdef, 0, 255); - return semdef; +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t +osal_semaphore_create(osal_semaphore_def_t *semdef) +{ + sem_init(semdef, 0, 255); + return semdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { - (void) semd_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) +{ + (void)semd_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { - (void) in_isr; - sem_release(sem_hdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) +{ + (void)in_isr; + sem_release(sem_hdl); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { - return sem_acquire_timeout_ms(sem_hdl, msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, + uint32_t msec) +{ + return sem_acquire_timeout_ms(sem_hdl, msec); } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) { - sem_reset(sem_hdl, 0); +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) +{ + sem_reset(sem_hdl, 0); } //--------------------------------------------------------------------+ // MUTEX API // Within tinyusb, mutex is never used in ISR context //--------------------------------------------------------------------+ -typedef struct mutex osal_mutex_def_t, * osal_mutex_t; +typedef struct mutex osal_mutex_def_t, *osal_mutex_t; -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { - mutex_init(mdef); - return mdef; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) +{ + mutex_init(mdef); + return mdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { - (void) mutex_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) +{ + (void)mutex_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { - return mutex_enter_timeout_ms(mutex_hdl, msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) +{ + return mutex_enter_timeout_ms(mutex_hdl, msec); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { - mutex_exit(mutex_hdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) +{ + mutex_exit(mutex_hdl); + return true; } //--------------------------------------------------------------------+ @@ -103,58 +115,63 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd #include "common/tusb_fifo.h" typedef struct { - tu_fifo_t ff; - struct critical_section critsec; // osal_queue may be used in IRQs, so need critical section + tu_fifo_t ff; + struct critical_section critsec; // osal_queue may be used in IRQs, so need critical section } osal_queue_def_t; -typedef osal_queue_def_t* osal_queue_t; +typedef osal_queue_def_t *osal_queue_t; // role device/host is used by OS NONE for mutex (disable usb isr) only -#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - uint8_t _name##_buf[_depth*sizeof(_type)]; \ - osal_queue_def_t _name = { \ - .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) \ - } +#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ + uint8_t _name##_buf[_depth * sizeof(_type)]; \ + osal_queue_def_t _name = { .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) } -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { - critical_section_init(&qdef->critsec); - tu_fifo_clear(&qdef->ff); - return (osal_queue_t) qdef; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) +{ + critical_section_init(&qdef->critsec); + tu_fifo_clear(&qdef->ff); + return (osal_queue_t)qdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { - osal_queue_def_t* qdef = (osal_queue_def_t*) qhdl; - critical_section_deinit(&qdef->critsec); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) +{ + osal_queue_def_t *qdef = (osal_queue_def_t *)qhdl; + critical_section_deinit(&qdef->critsec); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { - (void) msec; // not used, always behave as msec = 0 +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, + uint32_t msec) +{ + (void)msec; // not used, always behave as msec = 0 - critical_section_enter_blocking(&qhdl->critsec); - bool success = tu_fifo_read(&qhdl->ff, data); - critical_section_exit(&qhdl->critsec); + critical_section_enter_blocking(&qhdl->critsec); + bool success = tu_fifo_read(&qhdl->ff, data); + critical_section_exit(&qhdl->critsec); - return success; + return success; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const* data, bool in_isr) { - (void) in_isr; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, + bool in_isr) +{ + (void)in_isr; - critical_section_enter_blocking(&qhdl->critsec); - bool success = tu_fifo_write(&qhdl->ff, data); - critical_section_exit(&qhdl->critsec); + critical_section_enter_blocking(&qhdl->critsec); + bool success = tu_fifo_write(&qhdl->ff, data); + critical_section_exit(&qhdl->critsec); - return success; + return success; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { - // TODO: revisit; whether this is true or not currently, tu_fifo_empty is a single - // volatile read. +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) +{ + // TODO: revisit; whether this is true or not currently, tu_fifo_empty is a single + // volatile read. - // Skip queue lock/unlock since this function is primarily called - // with interrupt disabled before going into low power mode - return tu_fifo_empty(&qhdl->ff); + // Skip queue lock/unlock since this function is primarily called + // with interrupt disabled before going into low power mode + return tu_fifo_empty(&qhdl->ff); } #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/osal/osal_rtthread.h b/Libraries/tinyusb/src/osal/osal_rtthread.h index c27814835be..9624b83ba88 100644 --- a/Libraries/tinyusb/src/osal/osal_rtthread.h +++ b/Libraries/tinyusb/src/osal/osal_rtthread.h @@ -38,8 +38,9 @@ extern "C" { //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { - rt_thread_mdelay(msec); +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) +{ + rt_thread_mdelay(msec); } //--------------------------------------------------------------------+ @@ -48,27 +49,33 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { typedef struct rt_semaphore osal_semaphore_def_t; typedef rt_sem_t osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline -osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t *semdef) { - rt_sem_init(semdef, "tusb", 0, RT_IPC_FLAG_PRIO); - return semdef; +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t +osal_semaphore_create(osal_semaphore_def_t *semdef) +{ + rt_sem_init(semdef, "tusb", 0, RT_IPC_FLAG_PRIO); + return semdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { - return RT_EOK == rt_sem_detach(semd_hdl); +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) +{ + return RT_EOK == rt_sem_detach(semd_hdl); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { - (void) in_isr; - return rt_sem_release(sem_hdl) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) +{ + (void)in_isr; + return rt_sem_release(sem_hdl) == RT_EOK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { - return rt_sem_take(sem_hdl, rt_tick_from_millisecond((rt_int32_t) msec)) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, + uint32_t msec) +{ + return rt_sem_take(sem_hdl, rt_tick_from_millisecond((rt_int32_t)msec)) == RT_EOK; } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) { - rt_sem_control(sem_hdl, RT_IPC_CMD_RESET, 0); +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) +{ + rt_sem_control(sem_hdl, RT_IPC_CMD_RESET, 0); } //--------------------------------------------------------------------+ @@ -77,21 +84,25 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t c typedef struct rt_mutex osal_mutex_def_t; typedef rt_mutex_t osal_mutex_t; -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) { - rt_mutex_init(mdef, "tusb", RT_IPC_FLAG_PRIO); - return mdef; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) +{ + rt_mutex_init(mdef, "tusb", RT_IPC_FLAG_PRIO); + return mdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { - return RT_EOK == rt_mutex_detach(mutex_hdl); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) +{ + return RT_EOK == rt_mutex_detach(mutex_hdl); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { - return rt_mutex_take(mutex_hdl, rt_tick_from_millisecond((rt_int32_t) msec)) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) +{ + return rt_mutex_take(mutex_hdl, rt_tick_from_millisecond((rt_int32_t)msec)) == RT_EOK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { - return rt_mutex_release(mutex_hdl) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) +{ + return rt_mutex_release(mutex_hdl) == RT_EOK; } //--------------------------------------------------------------------+ @@ -100,7 +111,7 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd // role device/host is used by OS NONE for mutex (disable usb isr) only #define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - static _type _name##_##buf[_depth]; \ + static _type _name##_##buf[_depth]; \ osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf }; typedef struct { @@ -113,32 +124,39 @@ typedef struct { typedef rt_mq_t osal_queue_t; -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) { - rt_mq_init(&(qdef->sq), "tusb", qdef->buf, qdef->item_sz, - qdef->item_sz * qdef->depth, RT_IPC_FLAG_PRIO); - return &(qdef->sq); +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) +{ + rt_mq_init(&(qdef->sq), "tusb", qdef->buf, qdef->item_sz, qdef->item_sz * qdef->depth, + RT_IPC_FLAG_PRIO); + return &(qdef->sq); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { - return RT_EOK == rt_mq_detach(qhdl); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) +{ + return RT_EOK == rt_mq_detach(qhdl); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, uint32_t msec) { - rt_tick_t tick = rt_tick_from_millisecond((rt_int32_t) msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, + uint32_t msec) +{ + rt_tick_t tick = rt_tick_from_millisecond((rt_int32_t)msec); #if RT_VERSION_MAJOR >= 5 - return rt_mq_recv(qhdl, data, qhdl->msg_size, tick) > 0; + return rt_mq_recv(qhdl, data, qhdl->msg_size, tick) > 0; #else - return rt_mq_recv(qhdl, data, qhdl->msg_size, tick) == RT_EOK; -#endif /* RT_VERSION_MAJOR >= 5 */ + return rt_mq_recv(qhdl, data, qhdl->msg_size, tick) == RT_EOK; +#endif /* RT_VERSION_MAJOR >= 5 */ } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, bool in_isr) { - (void) in_isr; - return rt_mq_send(qhdl, (void *)data, qhdl->msg_size) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, + bool in_isr) +{ + (void)in_isr; + return rt_mq_send(qhdl, (void *)data, qhdl->msg_size) == RT_EOK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { - return (qhdl->entry) == 0; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) +{ + return (qhdl->entry) == 0; } #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/osal/osal_rtx4.h b/Libraries/tinyusb/src/osal/osal_rtx4.h index 35909e4d6b8..5e8d726f19a 100644 --- a/Libraries/tinyusb/src/osal/osal_rtx4.h +++ b/Libraries/tinyusb/src/osal/osal_rtx4.h @@ -37,23 +37,25 @@ extern "C" { //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { - uint16_t hi = msec >> 16; - uint16_t lo = msec; - while (hi--) { - os_dly_wait(0xFFFE); - } - os_dly_wait(lo); -} - -TU_ATTR_ALWAYS_INLINE static inline uint16_t msec2wait(uint32_t msec) { - if (msec == OSAL_TIMEOUT_WAIT_FOREVER) { - return 0xFFFF; - } else if (msec >= 0xFFFE) { - return 0xFFFE; - } else { - return msec; - } +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) +{ + uint16_t hi = msec >> 16; + uint16_t lo = msec; + while (hi--) { + os_dly_wait(0xFFFE); + } + os_dly_wait(lo); +} + +TU_ATTR_ALWAYS_INLINE static inline uint16_t msec2wait(uint32_t msec) +{ + if (msec == OSAL_TIMEOUT_WAIT_FOREVER) { + return 0xFFFF; + } else if (msec >= 0xFFFE) { + return 0xFFFE; + } else { + return msec; + } } //--------------------------------------------------------------------+ @@ -62,31 +64,37 @@ TU_ATTR_ALWAYS_INLINE static inline uint16_t msec2wait(uint32_t msec) { typedef OS_SEM osal_semaphore_def_t; typedef OS_ID osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline OS_ID osal_semaphore_create(osal_semaphore_def_t* semdef) { - os_sem_init(semdef, 0); - return semdef; +TU_ATTR_ALWAYS_INLINE static inline OS_ID osal_semaphore_create(osal_semaphore_def_t *semdef) +{ + os_sem_init(semdef, 0); + return semdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { - (void) semd_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) +{ + (void)semd_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { - if ( !in_isr ) { - os_sem_send(sem_hdl); - } else { - isr_sem_send(sem_hdl); - } - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) +{ + if (!in_isr) { + os_sem_send(sem_hdl); + } else { + isr_sem_send(sem_hdl); + } + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait (osal_semaphore_t sem_hdl, uint32_t msec) { - return os_sem_wait(sem_hdl, msec2wait(msec)) != OS_R_TMO; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, + uint32_t msec) +{ + return os_sem_wait(sem_hdl, msec2wait(msec)) != OS_R_TMO; } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) { - // TODO: implement +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) +{ + // TODO: implement } //--------------------------------------------------------------------+ @@ -95,22 +103,26 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t c typedef OS_MUT osal_mutex_def_t; typedef OS_ID osal_mutex_t; -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { - os_mut_init(mdef); - return mdef; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) +{ + os_mut_init(mdef); + return mdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { - (void) mutex_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) +{ + (void)mutex_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock (osal_mutex_t mutex_hdl, uint32_t msec) { - return os_mut_wait(mutex_hdl, msec2wait(msec)) != OS_R_TMO; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) +{ + return os_mut_wait(mutex_hdl, msec2wait(msec)) != OS_R_TMO; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { - return os_mut_release(mutex_hdl) == OS_R_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) +{ + return os_mut_release(mutex_hdl) == OS_R_OK; } //--------------------------------------------------------------------+ @@ -118,56 +130,65 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd //--------------------------------------------------------------------+ // role device/host is used by OS NONE for mutex (disable usb isr) only -#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - os_mbx_declare(_name##__mbox, _depth); \ - _declare_box(_name##__pool, sizeof(_type), _depth); \ - osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .pool = _name##__pool, .mbox = _name##__mbox }; +#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ + os_mbx_declare(_name##__mbox, _depth); \ + _declare_box(_name##__pool, sizeof(_type), _depth); \ + osal_queue_def_t _name = { \ + .depth = _depth, .item_sz = sizeof(_type), .pool = _name##__pool, .mbox = _name##__mbox \ + }; typedef struct { - uint16_t depth; - uint16_t item_sz; - U32* pool; - U32* mbox; -}osal_queue_def_t; + uint16_t depth; + uint16_t item_sz; + U32 *pool; + U32 *mbox; +} osal_queue_def_t; -typedef osal_queue_def_t* osal_queue_t; +typedef osal_queue_def_t *osal_queue_t; -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { - os_mbx_init(qdef->mbox, (qdef->depth + 4) * 4); - _init_box(qdef->pool, ((qdef->item_sz+3)/4)*(qdef->depth) + 3, qdef->item_sz); - return qdef; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) +{ + os_mbx_init(qdef->mbox, (qdef->depth + 4) * 4); + _init_box(qdef->pool, ((qdef->item_sz + 3) / 4) * (qdef->depth) + 3, qdef->item_sz); + return qdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { - void* buf; - os_mbx_wait(qhdl->mbox, &buf, msec2wait(msec)); - memcpy(data, buf, qhdl->item_sz); - _free_box(qhdl->pool, buf); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, + uint32_t msec) +{ + void *buf; + os_mbx_wait(qhdl->mbox, &buf, msec2wait(msec)); + memcpy(data, buf, qhdl->item_sz); + _free_box(qhdl->pool, buf); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { - (void) qhdl; - return true; // nothing to do ? +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) +{ + (void)qhdl; + return true; // nothing to do ? } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in_isr) { - void* buf = _alloc_box(qhdl->pool); - memcpy(buf, data, qhdl->item_sz); - if ( !in_isr ) { - os_mbx_send(qhdl->mbox, buf, 0xFFFF); - } else { - isr_mbx_send(qhdl->mbox, buf); - } - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, + bool in_isr) +{ + void *buf = _alloc_box(qhdl->pool); + memcpy(buf, data, qhdl->item_sz); + if (!in_isr) { + os_mbx_send(qhdl->mbox, buf, 0xFFFF); + } else { + isr_mbx_send(qhdl->mbox, buf); + } + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { - return os_mbx_check(qhdl->mbox) == qhdl->depth; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) +{ + return os_mbx_check(qhdl->mbox) == qhdl->depth; } #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/portable/mentor/musb/dcd_musb.c b/Libraries/tinyusb/src/portable/mentor/musb/dcd_musb.c index a40b3dc0791..d24157f8f89 100644 --- a/Libraries/tinyusb/src/portable/mentor/musb/dcd_musb.c +++ b/Libraries/tinyusb/src/portable/mentor/musb/dcd_musb.c @@ -30,7 +30,7 @@ #if CFG_TUD_ENABLED && defined(TUP_USBIP_MUSB) #define MUSB_DEBUG 2 -#define MUSB_REGS(rhport) ((musb_regs_t*) MUSB_BASES[rhport]) +#define MUSB_REGS(rhport) ((musb_regs_t *)MUSB_BASES[rhport]) #if __GNUC__ > 8 && defined(__ARM_FEATURE_UNALIGNED) /* GCC warns that an address may be unaligned, even though @@ -45,40 +45,38 @@ _Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\""); // - musb_dcd_int_enable/disable/clear/get_enable // - musb_dcd_int_handler_enter/exit #if defined(TUP_USBIP_MUSB_TI) - #include "musb_ti.h" +#include "musb_ti.h" #elif defined(TUP_USBIP_MUSB_ADI) - #include "musb_max32.h" +#include "musb_max32.h" #else - #error "Unsupported MCU" +#error "Unsupported MCU" #endif /*------------------------------------------------------------------ * MACRO TYPEDEF CONSTANT ENUM DECLARATION *------------------------------------------------------------------*/ -#define REQUEST_TYPE_INVALID (0xFFu) +#define REQUEST_TYPE_INVALID (0xFFu) typedef union { - volatile uint8_t u8; - volatile uint16_t u16; - volatile uint32_t u32; + volatile uint8_t u8; + volatile uint16_t u16; + volatile uint32_t u32; } hw_fifo_t; -typedef struct TU_ATTR_PACKED -{ - void *buf; /* the start address of a transfer data buffer */ - uint16_t length; /* the number of bytes in the buffer */ - uint16_t remaining; /* the number of bytes remaining in the buffer */ +typedef struct TU_ATTR_PACKED { + void *buf; /* the start address of a transfer data buffer */ + uint16_t length; /* the number of bytes in the buffer */ + uint16_t remaining; /* the number of bytes remaining in the buffer */ } pipe_state_t; -typedef struct -{ - tusb_control_request_t setup_packet; - uint16_t remaining_ctrl; /* The number of bytes remaining in data stage of control transfer. */ - int8_t status_out; - pipe_state_t pipe0; - pipe_state_t pipe[2][TUP_DCD_ENDPOINT_MAX-1]; /* pipe[direction][endpoint number - 1] */ - uint16_t pipe_buf_is_fifo[2]; /* Bitmap. Each bit means whether 1:TU_FIFO or 0:POD. */ +typedef struct { + tusb_control_request_t setup_packet; + uint16_t remaining_ctrl; /* The number of bytes remaining in data stage of control transfer. */ + int8_t status_out; + pipe_state_t pipe0; + pipe_state_t pipe[2][TUP_DCD_ENDPOINT_MAX - 1]; /* pipe[direction][endpoint number - 1] */ + uint16_t pipe_buf_is_fifo[2]; /* Bitmap. Each bit means whether 1:TU_FIFO or 0:POD. */ } dcd_data_t; static dcd_data_t _dcd; @@ -97,464 +95,477 @@ static dcd_data_t _dcd; static uint32_t alloced_fifo_bytes; // ffsize is log2(mps) - 3 (round up) -TU_ATTR_ALWAYS_INLINE static inline uint8_t hwfifo_byte2size(uint16_t nbytes) { - uint8_t ffsize = 28 - tu_min8(28, __builtin_clz(nbytes)); - if ((8u << ffsize) < nbytes) { - ++ffsize; - } - return ffsize; +TU_ATTR_ALWAYS_INLINE static inline uint8_t hwfifo_byte2size(uint16_t nbytes) +{ + uint8_t ffsize = 28 - tu_min8(28, __builtin_clz(nbytes)); + if ((8u << ffsize) < nbytes) { + ++ffsize; + } + return ffsize; } -TU_ATTR_ALWAYS_INLINE static inline void hwfifo_reset(musb_regs_t* musb, unsigned epnum, unsigned is_rx) { - (void) epnum; - musb->fifo_size[is_rx] = 0; - musb->fifo_addr[is_rx] = 0; +TU_ATTR_ALWAYS_INLINE static inline void hwfifo_reset(musb_regs_t *musb, unsigned epnum, + unsigned is_rx) +{ + (void)epnum; + musb->fifo_size[is_rx] = 0; + musb->fifo_addr[is_rx] = 0; } -TU_ATTR_ALWAYS_INLINE static inline bool hwfifo_config(musb_regs_t* musb, unsigned epnum, unsigned is_rx, unsigned mps, - bool double_packet) { - (void) epnum; - uint8_t ffsize = hwfifo_byte2size(mps); - mps = 8 << ffsize; // round up to the next power of 2 +TU_ATTR_ALWAYS_INLINE static inline bool +hwfifo_config(musb_regs_t *musb, unsigned epnum, unsigned is_rx, unsigned mps, bool double_packet) +{ + (void)epnum; + uint8_t ffsize = hwfifo_byte2size(mps); + mps = 8 << ffsize; // round up to the next power of 2 - if (double_packet) { - ffsize |= MUSB_FIFOSZ_DOUBLE_PACKET; - mps <<= 1; - } + if (double_packet) { + ffsize |= MUSB_FIFOSZ_DOUBLE_PACKET; + mps <<= 1; + } - TU_ASSERT(alloced_fifo_bytes + mps <= MUSB_CFG_DYNAMIC_FIFO_SIZE); - musb->fifo_addr[is_rx] = alloced_fifo_bytes / 8; - musb->fifo_size[is_rx] = ffsize; + TU_ASSERT(alloced_fifo_bytes + mps <= MUSB_CFG_DYNAMIC_FIFO_SIZE); + musb->fifo_addr[is_rx] = alloced_fifo_bytes / 8; + musb->fifo_size[is_rx] = ffsize; - alloced_fifo_bytes += mps; - return true; + alloced_fifo_bytes += mps; + return true; } #else -TU_ATTR_ALWAYS_INLINE static inline void hwfifo_reset(musb_regs_t* musb, unsigned epnum, unsigned is_rx) { - (void) musb; (void) epnum; (void) is_rx; - // nothing to do for static FIFO +TU_ATTR_ALWAYS_INLINE static inline void hwfifo_reset(musb_regs_t *musb, unsigned epnum, + unsigned is_rx) +{ + (void)musb; + (void)epnum; + (void)is_rx; + // nothing to do for static FIFO } -TU_ATTR_ALWAYS_INLINE static inline bool hwfifo_config(musb_regs_t* musb, unsigned epnum, unsigned is_rx, unsigned mps, - bool double_packet) { - (void) epnum; (void) mps; - if (!double_packet) { - #if defined(TUP_USBIP_MUSB_ADI) - musb->indexed_csr.maxp_csr[is_rx].csrh |= MUSB_CSRH_DISABLE_DOUBLE_PACKET(is_rx); - #else - if (is_rx) { - musb->rx_doulbe_packet_disable |= 1u << epnum; - } else { - musb->tx_double_packet_disable |= 1u << epnum; +TU_ATTR_ALWAYS_INLINE static inline bool +hwfifo_config(musb_regs_t *musb, unsigned epnum, unsigned is_rx, unsigned mps, bool double_packet) +{ + (void)epnum; + (void)mps; + if (!double_packet) { +#if defined(TUP_USBIP_MUSB_ADI) + musb->indexed_csr.maxp_csr[is_rx].csrh |= MUSB_CSRH_DISABLE_DOUBLE_PACKET(is_rx); +#else + if (is_rx) { + musb->rx_doulbe_packet_disable |= 1u << epnum; + } else { + musb->tx_double_packet_disable |= 1u << epnum; + } +#endif } - #endif - } - return true; + return true; } #endif // Flush FIFO and clear data toggle -TU_ATTR_ALWAYS_INLINE static inline void hwfifo_flush(musb_regs_t* musb, unsigned epnum, unsigned is_rx, bool clear_dtog) { - (void) epnum; - const uint8_t csrl_dtog = clear_dtog ? MUSB_CSRL_CLEAR_DATA_TOGGLE(is_rx) : 0; - musb_ep_maxp_csr_t* maxp_csr = &musb->indexed_csr.maxp_csr[is_rx]; - // may need to flush twice for double packet - for (unsigned i=0; i<2; i++) { - if (maxp_csr->csrl & MUSB_CSRL_PACKET_READY(is_rx)) { - maxp_csr->csrl = MUSB_CSRL_FLUSH_FIFO(is_rx) | csrl_dtog; +TU_ATTR_ALWAYS_INLINE static inline void hwfifo_flush(musb_regs_t *musb, unsigned epnum, + unsigned is_rx, bool clear_dtog) +{ + (void)epnum; + const uint8_t csrl_dtog = clear_dtog ? MUSB_CSRL_CLEAR_DATA_TOGGLE(is_rx) : 0; + musb_ep_maxp_csr_t *maxp_csr = &musb->indexed_csr.maxp_csr[is_rx]; + // may need to flush twice for double packet + for (unsigned i = 0; i < 2; i++) { + if (maxp_csr->csrl & MUSB_CSRL_PACKET_READY(is_rx)) { + maxp_csr->csrl = MUSB_CSRL_FLUSH_FIFO(is_rx) | csrl_dtog; + } } - } } static void pipe_write_packet(void *buf, volatile void *fifo, unsigned len) { - volatile hw_fifo_t *reg = (volatile hw_fifo_t*)fifo; - uintptr_t addr = (uintptr_t)buf; - while (len >= 4) { - reg->u32 = *(uint32_t const *)addr; - addr += 4; - len -= 4; - } - if (len >= 2) { - reg->u16 = *(uint16_t const *)addr; - addr += 2; - len -= 2; - } - if (len) { - reg->u8 = *(uint8_t const *)addr; - } + volatile hw_fifo_t *reg = (volatile hw_fifo_t *)fifo; + uintptr_t addr = (uintptr_t)buf; + while (len >= 4) { + reg->u32 = *(uint32_t const *)addr; + addr += 4; + len -= 4; + } + if (len >= 2) { + reg->u16 = *(uint16_t const *)addr; + addr += 2; + len -= 2; + } + if (len) { + reg->u8 = *(uint8_t const *)addr; + } } static void pipe_read_packet(void *buf, volatile void *fifo, unsigned len) { - volatile hw_fifo_t *reg = (volatile hw_fifo_t*)fifo; - uintptr_t addr = (uintptr_t)buf; - while (len >= 4) { - *(uint32_t *)addr = reg->u32; - addr += 4; - len -= 4; - } - if (len >= 2) { - *(uint16_t *)addr = reg->u16; - addr += 2; - len -= 2; - } - if (len) { - *(uint8_t *)addr = reg->u8; - } + volatile hw_fifo_t *reg = (volatile hw_fifo_t *)fifo; + uintptr_t addr = (uintptr_t)buf; + while (len >= 4) { + *(uint32_t *)addr = reg->u32; + addr += 4; + len -= 4; + } + if (len >= 2) { + *(uint16_t *)addr = reg->u16; + addr += 2; + len -= 2; + } + if (len) { + *(uint8_t *)addr = reg->u8; + } } static void pipe_read_write_packet_ff(tu_fifo_t *f, volatile void *fifo, unsigned len, unsigned dir) { - static const struct { - void (*tu_fifo_get_info)(tu_fifo_t *f, tu_fifo_buffer_info_t *info); - void (*tu_fifo_advance)(tu_fifo_t *f, uint16_t n); - void (*pipe_read_write)(void *buf, volatile void *fifo, unsigned len); - } ops[] = { - /* OUT */ {tu_fifo_get_write_info,tu_fifo_advance_write_pointer,pipe_read_packet}, - /* IN */ {tu_fifo_get_read_info, tu_fifo_advance_read_pointer, pipe_write_packet}, - }; - tu_fifo_buffer_info_t info; - ops[dir].tu_fifo_get_info(f, &info); - unsigned total_len = len; - len = TU_MIN(total_len, info.len_lin); - ops[dir].pipe_read_write(info.ptr_lin, fifo, len); - unsigned rem = total_len - len; - if (rem) { - len = TU_MIN(rem, info.len_wrap); - ops[dir].pipe_read_write(info.ptr_wrap, fifo, len); - rem -= len; - } - ops[dir].tu_fifo_advance(f, total_len - rem); -} - -static void process_setup_packet(uint8_t rhport) { - musb_regs_t* musb_regs = MUSB_REGS(rhport); - - // Read setup packet - uint32_t *p = (void*)&_dcd.setup_packet; - volatile uint32_t *fifo_ptr = &musb_regs->fifo[0]; - p[0] = *fifo_ptr; - p[1] = *fifo_ptr; - - _dcd.pipe0.buf = NULL; - _dcd.pipe0.length = 0; - _dcd.pipe0.remaining = 0; - dcd_event_setup_received(rhport, (const uint8_t*)(uintptr_t)&_dcd.setup_packet, true); - - const unsigned len = _dcd.setup_packet.wLength; - _dcd.remaining_ctrl = len; - const unsigned dir_in = tu_edpt_dir(_dcd.setup_packet.bmRequestType); - /* Clear RX FIFO and reverse the transaction direction */ - if (len && dir_in) { - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, 0); - ep_csr->csr0l = MUSB_CSRL0_RXRDYC; - } + static const struct { + void (*tu_fifo_get_info)(tu_fifo_t *f, tu_fifo_buffer_info_t *info); + void (*tu_fifo_advance)(tu_fifo_t *f, uint16_t n); + void (*pipe_read_write)(void *buf, volatile void *fifo, unsigned len); + } ops[] = { + /* OUT */ { tu_fifo_get_write_info, tu_fifo_advance_write_pointer, pipe_read_packet }, + /* IN */ { tu_fifo_get_read_info, tu_fifo_advance_read_pointer, pipe_write_packet }, + }; + tu_fifo_buffer_info_t info; + ops[dir].tu_fifo_get_info(f, &info); + unsigned total_len = len; + len = TU_MIN(total_len, info.len_lin); + ops[dir].pipe_read_write(info.ptr_lin, fifo, len); + unsigned rem = total_len - len; + if (rem) { + len = TU_MIN(rem, info.len_wrap); + ops[dir].pipe_read_write(info.ptr_wrap, fifo, len); + rem -= len; + } + ops[dir].tu_fifo_advance(f, total_len - rem); +} + +static void process_setup_packet(uint8_t rhport) +{ + musb_regs_t *musb_regs = MUSB_REGS(rhport); + + // Read setup packet + uint32_t *p = (void *)&_dcd.setup_packet; + volatile uint32_t *fifo_ptr = &musb_regs->fifo[0]; + p[0] = *fifo_ptr; + p[1] = *fifo_ptr; + + _dcd.pipe0.buf = NULL; + _dcd.pipe0.length = 0; + _dcd.pipe0.remaining = 0; + dcd_event_setup_received(rhport, (const uint8_t *)(uintptr_t)&_dcd.setup_packet, true); + + const unsigned len = _dcd.setup_packet.wLength; + _dcd.remaining_ctrl = len; + const unsigned dir_in = tu_edpt_dir(_dcd.setup_packet.bmRequestType); + /* Clear RX FIFO and reverse the transaction direction */ + if (len && dir_in) { + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, 0); + ep_csr->csr0l = MUSB_CSRL0_RXRDYC; + } } static bool handle_xfer_in(uint8_t rhport, uint_fast8_t ep_addr) { - unsigned epnum = tu_edpt_number(ep_addr); - unsigned epnum_minus1 = epnum - 1; - pipe_state_t *pipe = &_dcd.pipe[tu_edpt_dir(ep_addr)][epnum_minus1]; - const unsigned rem = pipe->remaining; + unsigned epnum = tu_edpt_number(ep_addr); + unsigned epnum_minus1 = epnum - 1; + pipe_state_t *pipe = &_dcd.pipe[tu_edpt_dir(ep_addr)][epnum_minus1]; + const unsigned rem = pipe->remaining; + + if (!rem) { + pipe->buf = NULL; + return true; + } - if (!rem) { - pipe->buf = NULL; - return true; - } - - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epnum); - const unsigned mps = ep_csr->tx_maxp; - const unsigned len = TU_MIN(mps, rem); - void *buf = pipe->buf; - volatile void *fifo_ptr = &musb_regs->fifo[epnum]; - // TU_LOG1(" %p mps %d len %d rem %d\r\n", buf, mps, len, rem); - if (len) { - if (_dcd.pipe_buf_is_fifo[TUSB_DIR_IN] & TU_BIT(epnum_minus1)) { - pipe_read_write_packet_ff(buf, fifo_ptr, len, TUSB_DIR_IN); - } else { - pipe_write_packet(buf, fifo_ptr, len); - pipe->buf = buf + len; + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epnum); + const unsigned mps = ep_csr->tx_maxp; + const unsigned len = TU_MIN(mps, rem); + void *buf = pipe->buf; + volatile void *fifo_ptr = &musb_regs->fifo[epnum]; + // TU_LOG1(" %p mps %d len %d rem %d\r\n", buf, mps, len, rem); + if (len) { + if (_dcd.pipe_buf_is_fifo[TUSB_DIR_IN] & TU_BIT(epnum_minus1)) { + pipe_read_write_packet_ff(buf, fifo_ptr, len, TUSB_DIR_IN); + } else { + pipe_write_packet(buf, fifo_ptr, len); + pipe->buf = buf + len; + } + pipe->remaining = rem - len; } - pipe->remaining = rem - len; - } - ep_csr->tx_csrl = MUSB_TXCSRL1_TXRDY; - // TU_LOG1(" TXCSRL%d = %x %d\r\n", epnum, ep_csr->tx_csrl, rem - len); - return false; + ep_csr->tx_csrl = MUSB_TXCSRL1_TXRDY; + // TU_LOG1(" TXCSRL%d = %x %d\r\n", epnum, ep_csr->tx_csrl, rem - len); + return false; } static bool handle_xfer_out(uint8_t rhport, uint_fast8_t ep_addr) { - unsigned epnum = tu_edpt_number(ep_addr); - unsigned epnum_minus1 = epnum - 1; - pipe_state_t *pipe = &_dcd.pipe[tu_edpt_dir(ep_addr)][epnum_minus1]; - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epnum); - // TU_LOG1(" RXCSRL%d = %x\r\n", epnum_minus1 + 1, ep_csr->rx_csrl); - - TU_ASSERT(ep_csr->rx_csrl & MUSB_RXCSRL1_RXRDY); - - const unsigned mps = ep_csr->rx_maxp; - const unsigned rem = pipe->remaining; - const unsigned vld = ep_csr->rx_count; - const unsigned len = TU_MIN(TU_MIN(rem, mps), vld); - void *buf = pipe->buf; - volatile void *fifo_ptr = &musb_regs->fifo[epnum]; - if (len) { - if (_dcd.pipe_buf_is_fifo[TUSB_DIR_OUT] & TU_BIT(epnum_minus1)) { - pipe_read_write_packet_ff(buf, fifo_ptr, len, TUSB_DIR_OUT); - } else { - pipe_read_packet(buf, fifo_ptr, len); - pipe->buf = buf + len; + unsigned epnum = tu_edpt_number(ep_addr); + unsigned epnum_minus1 = epnum - 1; + pipe_state_t *pipe = &_dcd.pipe[tu_edpt_dir(ep_addr)][epnum_minus1]; + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epnum); + // TU_LOG1(" RXCSRL%d = %x\r\n", epnum_minus1 + 1, ep_csr->rx_csrl); + + TU_ASSERT(ep_csr->rx_csrl & MUSB_RXCSRL1_RXRDY); + + const unsigned mps = ep_csr->rx_maxp; + const unsigned rem = pipe->remaining; + const unsigned vld = ep_csr->rx_count; + const unsigned len = TU_MIN(TU_MIN(rem, mps), vld); + void *buf = pipe->buf; + volatile void *fifo_ptr = &musb_regs->fifo[epnum]; + if (len) { + if (_dcd.pipe_buf_is_fifo[TUSB_DIR_OUT] & TU_BIT(epnum_minus1)) { + pipe_read_write_packet_ff(buf, fifo_ptr, len, TUSB_DIR_OUT); + } else { + pipe_read_packet(buf, fifo_ptr, len); + pipe->buf = buf + len; + } + pipe->remaining = rem - len; } - pipe->remaining = rem - len; - } - if ((len < mps) || (rem == len)) { - pipe->buf = NULL; - return NULL != buf; - } - ep_csr->rx_csrl = 0; /* Clear RXRDY bit */ - return false; + if ((len < mps) || (rem == len)) { + pipe->buf = NULL; + return NULL != buf; + } + ep_csr->rx_csrl = 0; /* Clear RXRDY bit */ + return false; } static bool edpt_n_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes) { - unsigned epnum = tu_edpt_number(ep_addr); - unsigned epnum_minus1 = epnum - 1; - unsigned dir_in = tu_edpt_dir(ep_addr); + unsigned epnum = tu_edpt_number(ep_addr); + unsigned epnum_minus1 = epnum - 1; + unsigned dir_in = tu_edpt_dir(ep_addr); - pipe_state_t *pipe = &_dcd.pipe[dir_in][epnum_minus1]; - pipe->buf = buffer; - pipe->length = total_bytes; - pipe->remaining = total_bytes; + pipe_state_t *pipe = &_dcd.pipe[dir_in][epnum_minus1]; + pipe->buf = buffer; + pipe->length = total_bytes; + pipe->remaining = total_bytes; - if (dir_in) { - handle_xfer_in(rhport, ep_addr); - } else { - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epnum); - if (ep_csr->rx_csrl & MUSB_RXCSRL1_RXRDY) ep_csr->rx_csrl = 0; - } - return true; + if (dir_in) { + handle_xfer_in(rhport, ep_addr); + } else { + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epnum); + if (ep_csr->rx_csrl & MUSB_RXCSRL1_RXRDY) + ep_csr->rx_csrl = 0; + } + return true; } static bool edpt0_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes) { - (void)rhport; - TU_ASSERT(total_bytes <= 64); /* Current implementation supports for only up to 64 bytes. */ - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, 0); - const unsigned req = _dcd.setup_packet.bmRequestType; - TU_ASSERT(req != REQUEST_TYPE_INVALID || total_bytes == 0); - - if (req == REQUEST_TYPE_INVALID || _dcd.status_out) { - /* STATUS OUT stage. + (void)rhport; + TU_ASSERT(total_bytes <= 64); /* Current implementation supports for only up to 64 bytes. */ + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, 0); + const unsigned req = _dcd.setup_packet.bmRequestType; + TU_ASSERT(req != REQUEST_TYPE_INVALID || total_bytes == 0); + + if (req == REQUEST_TYPE_INVALID || _dcd.status_out) { + /* STATUS OUT stage. * MUSB controller automatically handles STATUS OUT packets without * software helps. We do not have to do anything. And STATUS stage * may have already finished and received the next setup packet * without calling this function, so we have no choice but to * invoke the callback function of status packet here. */ - // TU_LOG1(" STATUS OUT ep_csr->csr0l = %x\r\n", ep_csr->csr0l); - _dcd.status_out = 0; - if (req == REQUEST_TYPE_INVALID) { - dcd_event_xfer_complete(rhport, ep_addr, total_bytes, XFER_RESULT_SUCCESS, false); - } else { - /* The next setup packet has already been received, it aborts + // TU_LOG1(" STATUS OUT ep_csr->csr0l = %x\r\n", ep_csr->csr0l); + _dcd.status_out = 0; + if (req == REQUEST_TYPE_INVALID) { + dcd_event_xfer_complete(rhport, ep_addr, total_bytes, XFER_RESULT_SUCCESS, false); + } else { + /* The next setup packet has already been received, it aborts * invoking callback function to avoid confusing TUSB stack. */ - TU_LOG1("Drop CONTROL_STAGE_ACK\r\n"); + TU_LOG1("Drop CONTROL_STAGE_ACK\r\n"); + } + return true; + } + const unsigned dir_in = tu_edpt_dir(ep_addr); + if (tu_edpt_dir(req) == dir_in) { /* DATA stage */ + TU_ASSERT(total_bytes <= _dcd.remaining_ctrl); + const unsigned rem = _dcd.remaining_ctrl; + const unsigned len = TU_MIN(TU_MIN(rem, 64), total_bytes); + volatile void *fifo_ptr = &musb_regs->fifo[0]; + if (dir_in) { + pipe_write_packet(buffer, fifo_ptr, len); + + _dcd.pipe0.buf = buffer + len; + _dcd.pipe0.length = len; + _dcd.pipe0.remaining = 0; + + _dcd.remaining_ctrl = rem - len; + if ((len < 64) || (rem == len)) { + _dcd.setup_packet.bmRequestType = + REQUEST_TYPE_INVALID; /* Change to STATUS/SETUP stage */ + _dcd.status_out = 1; + /* Flush TX FIFO and reverse the transaction direction. */ + ep_csr->csr0l = MUSB_CSRL0_TXRDY | MUSB_CSRL0_DATAEND; + } else { + ep_csr->csr0l = MUSB_CSRL0_TXRDY; /* Flush TX FIFO to return ACK. */ + } + // TU_LOG1(" IN ep_csr->csr0l = %x\r\n", ep_csr->csr0l); + } else { + // TU_LOG1(" OUT ep_csr->csr0l = %x\r\n", ep_csr->csr0l); + _dcd.pipe0.buf = buffer; + _dcd.pipe0.length = len; + _dcd.pipe0.remaining = len; + ep_csr->csr0l = MUSB_CSRL0_RXRDYC; /* Clear RX FIFO to return ACK. */ + } + } else if (dir_in) { + // TU_LOG1(" STATUS IN ep_csr->csr0l = %x\r\n", ep_csr->csr0l); + _dcd.pipe0.buf = NULL; + _dcd.pipe0.length = 0; + _dcd.pipe0.remaining = 0; + /* Clear RX FIFO and reverse the transaction direction */ + ep_csr->csr0l = MUSB_CSRL0_RXRDYC | MUSB_CSRL0_DATAEND; } return true; - } - const unsigned dir_in = tu_edpt_dir(ep_addr); - if (tu_edpt_dir(req) == dir_in) { /* DATA stage */ - TU_ASSERT(total_bytes <= _dcd.remaining_ctrl); - const unsigned rem = _dcd.remaining_ctrl; - const unsigned len = TU_MIN(TU_MIN(rem, 64), total_bytes); - volatile void *fifo_ptr = &musb_regs->fifo[0]; - if (dir_in) { - pipe_write_packet(buffer, fifo_ptr, len); - - _dcd.pipe0.buf = buffer + len; - _dcd.pipe0.length = len; - _dcd.pipe0.remaining = 0; - - _dcd.remaining_ctrl = rem - len; - if ((len < 64) || (rem == len)) { - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; /* Change to STATUS/SETUP stage */ - _dcd.status_out = 1; - /* Flush TX FIFO and reverse the transaction direction. */ - ep_csr->csr0l = MUSB_CSRL0_TXRDY | MUSB_CSRL0_DATAEND; - } else { - ep_csr->csr0l = MUSB_CSRL0_TXRDY; /* Flush TX FIFO to return ACK. */ - } - // TU_LOG1(" IN ep_csr->csr0l = %x\r\n", ep_csr->csr0l); - } else { - // TU_LOG1(" OUT ep_csr->csr0l = %x\r\n", ep_csr->csr0l); - _dcd.pipe0.buf = buffer; - _dcd.pipe0.length = len; - _dcd.pipe0.remaining = len; - ep_csr->csr0l = MUSB_CSRL0_RXRDYC; /* Clear RX FIFO to return ACK. */ - } - } else if (dir_in) { - // TU_LOG1(" STATUS IN ep_csr->csr0l = %x\r\n", ep_csr->csr0l); - _dcd.pipe0.buf = NULL; - _dcd.pipe0.length = 0; - _dcd.pipe0.remaining = 0; - /* Clear RX FIFO and reverse the transaction direction */ - ep_csr->csr0l = MUSB_CSRL0_RXRDYC | MUSB_CSRL0_DATAEND; - } - return true; } static void process_ep0(uint8_t rhport) { - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, 0); - uint_fast8_t csrl = ep_csr->csr0l; - - // TU_LOG1(" EP0 ep_csr->csr0l = %x\r\n", csrl); - // 21.1.5: endpoint 0 service routine as peripheral - - if (csrl & MUSB_CSRL0_STALLED) { - /* Returned STALL packet to HOST. */ - ep_csr->csr0l = 0; /* Clear STALL */ - return; - } - - unsigned req = _dcd.setup_packet.bmRequestType; - if (csrl & MUSB_CSRL0_SETEND) { - TU_LOG1(" ABORT by the next packets\r\n"); - ep_csr->csr0l = MUSB_CSRL0_SETENDC; - if (req != REQUEST_TYPE_INVALID && _dcd.pipe0.buf) { - /* DATA stage was aborted by receiving STATUS or SETUP packet. */ - _dcd.pipe0.buf = NULL; - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; - dcd_event_xfer_complete(rhport, - req & TUSB_DIR_IN_MASK, - _dcd.pipe0.length - _dcd.pipe0.remaining, - XFER_RESULT_SUCCESS, true); - } - req = REQUEST_TYPE_INVALID; - if (!(csrl & MUSB_CSRL0_RXRDY)) return; /* Received SETUP packet */ - } - - if (csrl & MUSB_CSRL0_RXRDY) { - /* Received SETUP or DATA OUT packet */ - if (req == REQUEST_TYPE_INVALID) { - /* SETUP */ - TU_ASSERT(sizeof(tusb_control_request_t) == ep_csr->count0,); - process_setup_packet(rhport); - return; + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, 0); + uint_fast8_t csrl = ep_csr->csr0l; + + // TU_LOG1(" EP0 ep_csr->csr0l = %x\r\n", csrl); + // 21.1.5: endpoint 0 service routine as peripheral + + if (csrl & MUSB_CSRL0_STALLED) { + /* Returned STALL packet to HOST. */ + ep_csr->csr0l = 0; /* Clear STALL */ + return; } - if (_dcd.pipe0.buf) { - /* DATA OUT */ - const unsigned vld = ep_csr->count0; - const unsigned rem = _dcd.pipe0.remaining; - const unsigned len = TU_MIN(TU_MIN(rem, 64), vld); - volatile void *fifo_ptr = &musb_regs->fifo[0]; - pipe_read_packet(_dcd.pipe0.buf, fifo_ptr, len); - - _dcd.pipe0.remaining = rem - len; - _dcd.remaining_ctrl -= len; - - _dcd.pipe0.buf = NULL; - dcd_event_xfer_complete(rhport, - tu_edpt_addr(0, TUSB_DIR_OUT), - _dcd.pipe0.length - _dcd.pipe0.remaining, - XFER_RESULT_SUCCESS, true); - } - return; - } - - /* When CSRL0 is zero, it means that completion of sending a any length packet + + unsigned req = _dcd.setup_packet.bmRequestType; + if (csrl & MUSB_CSRL0_SETEND) { + TU_LOG1(" ABORT by the next packets\r\n"); + ep_csr->csr0l = MUSB_CSRL0_SETENDC; + if (req != REQUEST_TYPE_INVALID && _dcd.pipe0.buf) { + /* DATA stage was aborted by receiving STATUS or SETUP packet. */ + _dcd.pipe0.buf = NULL; + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; + dcd_event_xfer_complete(rhport, req & TUSB_DIR_IN_MASK, + _dcd.pipe0.length - _dcd.pipe0.remaining, XFER_RESULT_SUCCESS, + true); + } + req = REQUEST_TYPE_INVALID; + if (!(csrl & MUSB_CSRL0_RXRDY)) + return; /* Received SETUP packet */ + } + + if (csrl & MUSB_CSRL0_RXRDY) { + /* Received SETUP or DATA OUT packet */ + if (req == REQUEST_TYPE_INVALID) { + /* SETUP */ + TU_ASSERT(sizeof(tusb_control_request_t) == ep_csr->count0, ); + process_setup_packet(rhport); + return; + } + if (_dcd.pipe0.buf) { + /* DATA OUT */ + const unsigned vld = ep_csr->count0; + const unsigned rem = _dcd.pipe0.remaining; + const unsigned len = TU_MIN(TU_MIN(rem, 64), vld); + volatile void *fifo_ptr = &musb_regs->fifo[0]; + pipe_read_packet(_dcd.pipe0.buf, fifo_ptr, len); + + _dcd.pipe0.remaining = rem - len; + _dcd.remaining_ctrl -= len; + + _dcd.pipe0.buf = NULL; + dcd_event_xfer_complete(rhport, tu_edpt_addr(0, TUSB_DIR_OUT), + _dcd.pipe0.length - _dcd.pipe0.remaining, XFER_RESULT_SUCCESS, + true); + } + return; + } + + /* When CSRL0 is zero, it means that completion of sending a any length packet * or receiving a zero length packet. */ - if (req != REQUEST_TYPE_INVALID && !tu_edpt_dir(req)) { - /* STATUS IN */ - if (*(const uint16_t*)(uintptr_t)&_dcd.setup_packet == 0x0500) { - /* The address must be changed on completion of the control transfer. */ - musb_regs->faddr = (uint8_t)_dcd.setup_packet.wValue; + if (req != REQUEST_TYPE_INVALID && !tu_edpt_dir(req)) { + /* STATUS IN */ + if (*(const uint16_t *)(uintptr_t)&_dcd.setup_packet == 0x0500) { + /* The address must be changed on completion of the control transfer. */ + musb_regs->faddr = (uint8_t)_dcd.setup_packet.wValue; + } + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; + dcd_event_xfer_complete(rhport, tu_edpt_addr(0, TUSB_DIR_IN), + _dcd.pipe0.length - _dcd.pipe0.remaining, XFER_RESULT_SUCCESS, + true); + return; + } + if (_dcd.pipe0.buf) { + /* DATA IN */ + _dcd.pipe0.buf = NULL; + dcd_event_xfer_complete(rhport, tu_edpt_addr(0, TUSB_DIR_IN), + _dcd.pipe0.length - _dcd.pipe0.remaining, XFER_RESULT_SUCCESS, + true); } - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; - dcd_event_xfer_complete(rhport, - tu_edpt_addr(0, TUSB_DIR_IN), - _dcd.pipe0.length - _dcd.pipe0.remaining, - XFER_RESULT_SUCCESS, true); - return; - } - if (_dcd.pipe0.buf) { - /* DATA IN */ - _dcd.pipe0.buf = NULL; - dcd_event_xfer_complete(rhport, - tu_edpt_addr(0, TUSB_DIR_IN), - _dcd.pipe0.length - _dcd.pipe0.remaining, - XFER_RESULT_SUCCESS, true); - } } static void process_edpt_n(uint8_t rhport, uint_fast8_t ep_addr) { - bool completed; - const unsigned dir_in = tu_edpt_dir(ep_addr); - const unsigned epn = tu_edpt_number(ep_addr); - const unsigned epn_minus1 = epn - 1; - - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epn); - if (dir_in) { - // TU_LOG1(" TX CSRL%d = %x\r\n", epn, ep_csr->tx_csrl); - if (ep_csr->tx_csrl & MUSB_TXCSRL1_STALLED) { - ep_csr->tx_csrl &= ~(MUSB_TXCSRL1_STALLED | MUSB_TXCSRL1_UNDRN); - return; - } - completed = handle_xfer_in(rhport, ep_addr); - } else { - // TU_LOG1(" RX CSRL%d = %x\r\n", epn, ep_csr->rx_csrl); - if (ep_csr->rx_csrl & MUSB_RXCSRL1_STALLED) { - ep_csr->rx_csrl &= ~(MUSB_RXCSRL1_STALLED | MUSB_RXCSRL1_OVER); - return; - } - completed = handle_xfer_out(rhport, ep_addr); - } - - if (completed) { - pipe_state_t *pipe = &_dcd.pipe[dir_in][epn_minus1]; - dcd_event_xfer_complete(rhport, ep_addr, - pipe->length - pipe->remaining, - XFER_RESULT_SUCCESS, true); - } + bool completed; + const unsigned dir_in = tu_edpt_dir(ep_addr); + const unsigned epn = tu_edpt_number(ep_addr); + const unsigned epn_minus1 = epn - 1; + + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epn); + if (dir_in) { + // TU_LOG1(" TX CSRL%d = %x\r\n", epn, ep_csr->tx_csrl); + if (ep_csr->tx_csrl & MUSB_TXCSRL1_STALLED) { + ep_csr->tx_csrl &= ~(MUSB_TXCSRL1_STALLED | MUSB_TXCSRL1_UNDRN); + return; + } + completed = handle_xfer_in(rhport, ep_addr); + } else { + // TU_LOG1(" RX CSRL%d = %x\r\n", epn, ep_csr->rx_csrl); + if (ep_csr->rx_csrl & MUSB_RXCSRL1_STALLED) { + ep_csr->rx_csrl &= ~(MUSB_RXCSRL1_STALLED | MUSB_RXCSRL1_OVER); + return; + } + completed = handle_xfer_out(rhport, ep_addr); + } + + if (completed) { + pipe_state_t *pipe = &_dcd.pipe[dir_in][epn_minus1]; + dcd_event_xfer_complete(rhport, ep_addr, pipe->length - pipe->remaining, + XFER_RESULT_SUCCESS, true); + } } // Upon BUS RESET is detected, hardware havs already done: // faddr = 0, index = 0, flushes all ep fifos, clears all ep csr, enabled all ep interrupts -static void process_bus_reset(uint8_t rhport) { - musb_regs_t* musb = MUSB_REGS(rhport); +static void process_bus_reset(uint8_t rhport) +{ + musb_regs_t *musb = MUSB_REGS(rhport); #if MUSB_CFG_DYNAMIC_FIFO - alloced_fifo_bytes = CFG_TUD_ENDPOINT0_SIZE; + alloced_fifo_bytes = CFG_TUD_ENDPOINT0_SIZE; #endif - /* When bmRequestType is REQUEST_TYPE_INVALID(0xFF), a control transfer state is SETUP or STATUS stage. */ - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; - _dcd.status_out = 0; - /* When pipe0.buf has not NULL, DATA stage works in progress. */ - _dcd.pipe0.buf = NULL; + /* When bmRequestType is REQUEST_TYPE_INVALID(0xFF), a control transfer state is SETUP or STATUS stage. */ + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; + _dcd.status_out = 0; + /* When pipe0.buf has not NULL, DATA stage works in progress. */ + _dcd.pipe0.buf = NULL; - musb->intr_txen = 1; /* Enable only EP0 */ - musb->intr_rxen = 0; + musb->intr_txen = 1; /* Enable only EP0 */ + musb->intr_rxen = 0; - /* Clear FIFO settings */ - for (unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) { - musb->index = i; - hwfifo_reset(musb, i, 0); - hwfifo_reset(musb, i, 1); - } - dcd_event_bus_reset(rhport, (musb->power & MUSB_POWER_HSMODE) ? TUSB_SPEED_HIGH : TUSB_SPEED_FULL, true); + /* Clear FIFO settings */ + for (unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) { + musb->index = i; + hwfifo_reset(musb, i, 0); + hwfifo_reset(musb, i, 1); + } + dcd_event_bus_reset( + rhport, (musb->power & MUSB_POWER_HSMODE) ? TUSB_SPEED_HIGH : TUSB_SPEED_FULL, true); } /*------------------------------------------------------------------ @@ -562,93 +573,101 @@ static void process_bus_reset(uint8_t rhport) { *------------------------------------------------------------------*/ #if CFG_TUSB_DEBUG >= MUSB_DEBUG -void print_musb_info(musb_regs_t* musb_regs) { - // print version, epinfo, raminfo, config_data0, fifo_size - TU_LOG1("musb version = %u.%u\r\n", musb_regs->hwvers_bit.major, musb_regs->hwvers_bit.minor); - TU_LOG1("Number of endpoints: %u TX, %u RX\r\n", musb_regs->epinfo_bit.tx_ep_num, musb_regs->epinfo_bit.rx_ep_num); - TU_LOG1("RAM Info: %u DMA Channel, %u RAM address width\r\n", musb_regs->raminfo_bit.dma_channel, musb_regs->raminfo_bit.ram_bits); +void print_musb_info(musb_regs_t *musb_regs) +{ + // print version, epinfo, raminfo, config_data0, fifo_size + TU_LOG1("musb version = %u.%u\r\n", musb_regs->hwvers_bit.major, musb_regs->hwvers_bit.minor); + TU_LOG1("Number of endpoints: %u TX, %u RX\r\n", musb_regs->epinfo_bit.tx_ep_num, + musb_regs->epinfo_bit.rx_ep_num); + TU_LOG1("RAM Info: %u DMA Channel, %u RAM address width\r\n", + musb_regs->raminfo_bit.dma_channel, musb_regs->raminfo_bit.ram_bits); - musb_regs->index = 0; - TU_LOG1("config_data0 = 0x%x\r\n", musb_regs->indexed_csr.config_data0); + musb_regs->index = 0; + TU_LOG1("config_data0 = 0x%x\r\n", musb_regs->indexed_csr.config_data0); #if MUSB_CFG_DYNAMIC_FIFO - TU_LOG1("Dynamic FIFO configuration\r\n"); + TU_LOG1("Dynamic FIFO configuration\r\n"); #else - for (uint8_t i=1; i <= musb_regs->epinfo_bit.tx_ep_num; i++) { - musb_regs->index = i; - TU_LOG1("FIFO %u Size: TX %u RX %u\r\n", i, musb_regs->indexed_csr.fifo_size_bit.tx, musb_regs->indexed_csr.fifo_size_bit.rx); - } + for (uint8_t i = 1; i <= musb_regs->epinfo_bit.tx_ep_num; i++) { + musb_regs->index = i; + TU_LOG1("FIFO %u Size: TX %u RX %u\r\n", i, musb_regs->indexed_csr.fifo_size_bit.tx, + musb_regs->indexed_csr.fifo_size_bit.rx); + } #endif } #endif -void dcd_init(uint8_t rhport) { - musb_regs_t* musb_regs = MUSB_REGS(rhport); +void dcd_init(uint8_t rhport) +{ + musb_regs_t *musb_regs = MUSB_REGS(rhport); #if CFG_TUSB_DEBUG >= MUSB_DEBUG - print_musb_info(musb_regs); + print_musb_info(musb_regs); #endif - musb_regs->intr_usben |= MUSB_IE_SUSPND; - musb_dcd_int_clear(rhport); - musb_dcd_phy_init(rhport); - dcd_connect(rhport); + musb_regs->intr_usben |= MUSB_IE_SUSPND; + musb_dcd_int_clear(rhport); + musb_dcd_phy_init(rhport); + dcd_connect(rhport); } -void dcd_int_enable(uint8_t rhport) { - musb_dcd_int_enable(rhport); +void dcd_int_enable(uint8_t rhport) +{ + musb_dcd_int_enable(rhport); } -void dcd_int_disable(uint8_t rhport) { - musb_dcd_int_disable(rhport); +void dcd_int_disable(uint8_t rhport) +{ + musb_dcd_int_disable(rhport); } // Receive Set Address request, mcu port must also include status IN response void dcd_set_address(uint8_t rhport, uint8_t dev_addr) { - (void)dev_addr; - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, 0); + (void)dev_addr; + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, 0); - _dcd.pipe0.buf = NULL; - _dcd.pipe0.length = 0; - _dcd.pipe0.remaining = 0; - /* Clear RX FIFO to return ACK. */ - ep_csr->csr0l = MUSB_CSRL0_RXRDYC | MUSB_CSRL0_DATAEND; + _dcd.pipe0.buf = NULL; + _dcd.pipe0.length = 0; + _dcd.pipe0.remaining = 0; + /* Clear RX FIFO to return ACK. */ + ep_csr->csr0l = MUSB_CSRL0_RXRDYC | MUSB_CSRL0_DATAEND; } // Wake up host -void dcd_remote_wakeup(uint8_t rhport) { - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_regs->power |= MUSB_POWER_RESUME; +void dcd_remote_wakeup(uint8_t rhport) +{ + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_regs->power |= MUSB_POWER_RESUME; - unsigned cnt = SystemCoreClock / 1000; - while (cnt--) __NOP(); + unsigned cnt = SystemCoreClock / 1000; + while (cnt--) __NOP(); - musb_regs->power &= ~MUSB_POWER_RESUME; + musb_regs->power &= ~MUSB_POWER_RESUME; } // Connect by enabling internal pull-up resistor on D+/D- void dcd_connect(uint8_t rhport) { - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_regs->power |= TUD_OPT_HIGH_SPEED ? MUSB_POWER_HSENAB : 0; - musb_regs->power |= MUSB_POWER_SOFTCONN; + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_regs->power |= TUD_OPT_HIGH_SPEED ? MUSB_POWER_HSENAB : 0; + musb_regs->power |= MUSB_POWER_SOFTCONN; } // Disconnect by disabling internal pull-up resistor on D+/D- void dcd_disconnect(uint8_t rhport) { - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_regs->power &= ~MUSB_POWER_SOFTCONN; + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_regs->power &= ~MUSB_POWER_SOFTCONN; } void dcd_sof_enable(uint8_t rhport, bool en) { - (void) rhport; - (void) en; + (void)rhport; + (void)en; - // TODO implement later + // TODO implement later } //--------------------------------------------------------------------+ @@ -660,243 +679,253 @@ void dcd_sof_enable(uint8_t rhport, bool en) // } // Configure endpoint's registers according to descriptor -bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * ep_desc) { - const unsigned ep_addr = ep_desc->bEndpointAddress; - const unsigned epn = tu_edpt_number(ep_addr); - const unsigned dir_in = tu_edpt_dir(ep_addr); - const unsigned mps = tu_edpt_packet_size(ep_desc); - - pipe_state_t *pipe = &_dcd.pipe[dir_in][epn - 1]; - pipe->buf = NULL; - pipe->length = 0; - pipe->remaining = 0; - - musb_regs_t* musb = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb, epn); - const uint8_t is_rx = 1 - dir_in; - musb_ep_maxp_csr_t* maxp_csr = &ep_csr->maxp_csr[is_rx]; - - maxp_csr->maxp = mps; - maxp_csr->csrh = 0; +bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *ep_desc) +{ + const unsigned ep_addr = ep_desc->bEndpointAddress; + const unsigned epn = tu_edpt_number(ep_addr); + const unsigned dir_in = tu_edpt_dir(ep_addr); + const unsigned mps = tu_edpt_packet_size(ep_desc); + + pipe_state_t *pipe = &_dcd.pipe[dir_in][epn - 1]; + pipe->buf = NULL; + pipe->length = 0; + pipe->remaining = 0; + + musb_regs_t *musb = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb, epn); + const uint8_t is_rx = 1 - dir_in; + musb_ep_maxp_csr_t *maxp_csr = &ep_csr->maxp_csr[is_rx]; + + maxp_csr->maxp = mps; + maxp_csr->csrh = 0; #if MUSB_CFG_SHARED_FIFO - if (dir_in) { - maxp_csr->csrh |= MUSB_CSRH_TX_MODE; - } + if (dir_in) { + maxp_csr->csrh |= MUSB_CSRH_TX_MODE; + } #endif - hwfifo_flush(musb, epn, is_rx, true); + hwfifo_flush(musb, epn, is_rx, true); - TU_ASSERT(hwfifo_config(musb, epn, is_rx, mps, false)); - musb->intren_ep[is_rx] |= TU_BIT(epn); + TU_ASSERT(hwfifo_config(musb, epn, is_rx, mps, false)); + musb->intren_ep[is_rx] |= TU_BIT(epn); - return true; + return true; } -bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) { - const unsigned epn = tu_edpt_number(ep_addr); - const unsigned dir_in = tu_edpt_dir(ep_addr); - musb_regs_t* musb = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb, epn); - const uint8_t is_rx = 1 - dir_in; - ep_csr->maxp_csr[is_rx].csrh = 0; - return hwfifo_config(musb, epn, is_rx, largest_packet_size, true); +bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) +{ + const unsigned epn = tu_edpt_number(ep_addr); + const unsigned dir_in = tu_edpt_dir(ep_addr); + musb_regs_t *musb = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb, epn); + const uint8_t is_rx = 1 - dir_in; + ep_csr->maxp_csr[is_rx].csrh = 0; + return hwfifo_config(musb, epn, is_rx, largest_packet_size, true); } -bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *ep_desc ) { - const unsigned ep_addr = ep_desc->bEndpointAddress; - const unsigned epn = tu_edpt_number(ep_addr); - const unsigned dir_in = tu_edpt_dir(ep_addr); - const unsigned mps = tu_edpt_packet_size(ep_desc); +bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *ep_desc) +{ + const unsigned ep_addr = ep_desc->bEndpointAddress; + const unsigned epn = tu_edpt_number(ep_addr); + const unsigned dir_in = tu_edpt_dir(ep_addr); + const unsigned mps = tu_edpt_packet_size(ep_desc); - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); - pipe_state_t *pipe = &_dcd.pipe[dir_in][epn - 1]; - pipe->buf = NULL; - pipe->length = 0; - pipe->remaining = 0; + pipe_state_t *pipe = &_dcd.pipe[dir_in][epn - 1]; + pipe->buf = NULL; + pipe->length = 0; + pipe->remaining = 0; - musb_regs_t* musb = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb, epn); - const uint8_t is_rx = 1 - dir_in; - musb_ep_maxp_csr_t* maxp_csr = &ep_csr->maxp_csr[is_rx]; + musb_regs_t *musb = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb, epn); + const uint8_t is_rx = 1 - dir_in; + musb_ep_maxp_csr_t *maxp_csr = &ep_csr->maxp_csr[is_rx]; - maxp_csr->maxp = mps; - maxp_csr->csrh |= MUSB_CSRH_ISO; + maxp_csr->maxp = mps; + maxp_csr->csrh |= MUSB_CSRH_ISO; #if MUSB_CFG_SHARED_FIFO - if (dir_in) { - maxp_csr->csrh |= MUSB_CSRH_TX_MODE; - } + if (dir_in) { + maxp_csr->csrh |= MUSB_CSRH_TX_MODE; + } #endif - hwfifo_flush(musb, epn, is_rx, true); + hwfifo_flush(musb, epn, is_rx, true); #if MUSB_CFG_DYNAMIC_FIFO - // fifo space is already allocated, keep the address and just change packet size - musb->fifo_size[is_rx] = hwfifo_byte2size(mps) | MUSB_FIFOSZ_DOUBLE_PACKET; + // fifo space is already allocated, keep the address and just change packet size + musb->fifo_size[is_rx] = hwfifo_byte2size(mps) | MUSB_FIFOSZ_DOUBLE_PACKET; #endif - musb->intren_ep[is_rx] |= TU_BIT(epn); + musb->intren_ep[is_rx] |= TU_BIT(epn); - if (ie) musb_dcd_int_enable(rhport); + if (ie) + musb_dcd_int_enable(rhport); - return true; + return true; } void dcd_edpt_close_all(uint8_t rhport) { - musb_regs_t* musb = MUSB_REGS(rhport); - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); - - musb->intr_txen = 1; /* Enable only EP0 */ - musb->intr_rxen = 0; - for (unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) { - musb_ep_csr_t* ep_csr = get_ep_csr(musb, i); - for (unsigned d = 0; d < 2; d++) { - musb_ep_maxp_csr_t* maxp_csr = &ep_csr->maxp_csr[d]; - hwfifo_flush(musb, i, d, true); - hwfifo_reset(musb, i, d); - maxp_csr->maxp = 0; - maxp_csr->csrh = 0; + musb_regs_t *musb = MUSB_REGS(rhport); + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); + + musb->intr_txen = 1; /* Enable only EP0 */ + musb->intr_rxen = 0; + for (unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) { + musb_ep_csr_t *ep_csr = get_ep_csr(musb, i); + for (unsigned d = 0; d < 2; d++) { + musb_ep_maxp_csr_t *maxp_csr = &ep_csr->maxp_csr[d]; + hwfifo_flush(musb, i, d, true); + hwfifo_reset(musb, i, d); + maxp_csr->maxp = 0; + maxp_csr->csrh = 0; + } } - } #if MUSB_CFG_DYNAMIC_FIFO - alloced_fifo_bytes = CFG_TUD_ENDPOINT0_SIZE; + alloced_fifo_bytes = CFG_TUD_ENDPOINT0_SIZE; #endif - if (ie) musb_dcd_int_enable(rhport); + if (ie) + musb_dcd_int_enable(rhport); } // Submit a transfer, When complete dcd_event_xfer_complete() is invoked to notify the stack -bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes) +bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes) { - (void)rhport; - bool ret; - // TU_LOG1("X %x %d\r\n", ep_addr, total_bytes); - unsigned const epnum = tu_edpt_number(ep_addr); - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); - - if (epnum) { - _dcd.pipe_buf_is_fifo[tu_edpt_dir(ep_addr)] &= ~TU_BIT(epnum - 1); - ret = edpt_n_xfer(rhport, ep_addr, buffer, total_bytes); - } else { - ret = edpt0_xfer(rhport, ep_addr, buffer, total_bytes); - } + (void)rhport; + bool ret; + // TU_LOG1("X %x %d\r\n", ep_addr, total_bytes); + unsigned const epnum = tu_edpt_number(ep_addr); + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); + + if (epnum) { + _dcd.pipe_buf_is_fifo[tu_edpt_dir(ep_addr)] &= ~TU_BIT(epnum - 1); + ret = edpt_n_xfer(rhport, ep_addr, buffer, total_bytes); + } else { + ret = edpt0_xfer(rhport, ep_addr, buffer, total_bytes); + } - if (ie) musb_dcd_int_enable(rhport); - return ret; + if (ie) + musb_dcd_int_enable(rhport); + return ret; } // Submit a transfer where is managed by FIFO, When complete dcd_event_xfer_complete() is invoked to notify the stack // - optional, however, must be listed in usbd.c -bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes) +bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes) { - (void)rhport; - bool ret; - // TU_LOG1("X %x %d\r\n", ep_addr, total_bytes); - unsigned const epnum = tu_edpt_number(ep_addr); - TU_ASSERT(epnum); - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); - _dcd.pipe_buf_is_fifo[tu_edpt_dir(ep_addr)] |= TU_BIT(epnum - 1); - ret = edpt_n_xfer(rhport, ep_addr, (uint8_t*)ff, total_bytes); - if (ie) musb_dcd_int_enable(rhport); - return ret; + (void)rhport; + bool ret; + // TU_LOG1("X %x %d\r\n", ep_addr, total_bytes); + unsigned const epnum = tu_edpt_number(ep_addr); + TU_ASSERT(epnum); + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); + _dcd.pipe_buf_is_fifo[tu_edpt_dir(ep_addr)] |= TU_BIT(epnum - 1); + ret = edpt_n_xfer(rhport, ep_addr, (uint8_t *)ff, total_bytes); + if (ie) + musb_dcd_int_enable(rhport); + return ret; } // Stall endpoint -void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr) { - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); - - unsigned const epn = tu_edpt_number(ep_addr); - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epn); - - if (0 == epn) { - if (!ep_addr) { /* Ignore EP80 */ - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; - _dcd.pipe0.buf = NULL; - ep_csr->csr0l = MUSB_CSRL0_STALL; +void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr) +{ + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); + + unsigned const epn = tu_edpt_number(ep_addr); + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epn); + + if (0 == epn) { + if (!ep_addr) { /* Ignore EP80 */ + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; + _dcd.pipe0.buf = NULL; + ep_csr->csr0l = MUSB_CSRL0_STALL; + } + } else { + const uint8_t is_rx = 1 - tu_edpt_dir(ep_addr); + ep_csr->maxp_csr[is_rx].csrl = MUSB_CSRL_SEND_STALL(is_rx); } - } else { - const uint8_t is_rx = 1 - tu_edpt_dir(ep_addr); - ep_csr->maxp_csr[is_rx].csrl = MUSB_CSRL_SEND_STALL(is_rx); - } - if (ie) musb_dcd_int_enable(rhport); + if (ie) + musb_dcd_int_enable(rhport); } // clear stall, data toggle is also reset to DATA0 void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) { - (void)rhport; - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); + (void)rhport; + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); - unsigned const epn = tu_edpt_number(ep_addr); - musb_regs_t* musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epn); - const uint8_t is_rx = 1 - tu_edpt_dir(ep_addr); + unsigned const epn = tu_edpt_number(ep_addr); + musb_regs_t *musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epn); + const uint8_t is_rx = 1 - tu_edpt_dir(ep_addr); - ep_csr->maxp_csr[is_rx].csrl = MUSB_CSRL_CLEAR_DATA_TOGGLE(is_rx); + ep_csr->maxp_csr[is_rx].csrl = MUSB_CSRL_CLEAR_DATA_TOGGLE(is_rx); - if (ie) musb_dcd_int_enable(rhport); + if (ie) + musb_dcd_int_enable(rhport); } /*------------------------------------------------------------------- * ISR *-------------------------------------------------------------------*/ -void dcd_int_handler(uint8_t rhport) { - musb_regs_t* musb_regs = MUSB_REGS(rhport); - const uint8_t saved_index = musb_regs->index; // save endpoint index - - //Part specific ISR setup/entry - musb_dcd_int_handler_enter(rhport); - - uint_fast8_t intr_usb = musb_regs->intr_usb; // a read will clear this interrupt status - uint_fast8_t intr_tx = musb_regs->intr_tx; // a read will clear this interrupt status - uint_fast8_t intr_rx = musb_regs->intr_rx; // a read will clear this interrupt status - // TU_LOG1("D%2x T%2x R%2x\r\n", is, txis, rxis); - - intr_usb &= musb_regs->intr_usben; /* Clear disabled interrupts */ - if (intr_usb & MUSB_IS_DISCON) { - } - if (intr_usb & MUSB_IS_SOF) { - dcd_event_bus_signal(rhport, DCD_EVENT_SOF, true); - } - if (intr_usb & MUSB_IS_RESET) { - process_bus_reset(rhport); - } - if (intr_usb & MUSB_IS_RESUME) { - dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true); - } - if (intr_usb & MUSB_IS_SUSPEND) { - dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true); - } - - intr_tx &= musb_regs->intr_txen; /* Clear disabled interrupts */ - if (intr_tx & TU_BIT(0)) { - process_ep0(rhport); - intr_tx &= ~TU_BIT(0); - } - while (intr_tx) { - unsigned const num = __builtin_ctz(intr_tx); - process_edpt_n(rhport, tu_edpt_addr(num, TUSB_DIR_IN)); - intr_tx &= ~TU_BIT(num); - } - - intr_rx &= musb_regs->intr_rxen; /* Clear disabled interrupts */ - while (intr_rx) { - unsigned const num = __builtin_ctz(intr_rx); - process_edpt_n(rhport, tu_edpt_addr(num, TUSB_DIR_OUT)); - intr_rx &= ~TU_BIT(num); - } - - musb_regs->index = saved_index; // restore endpoint index +void dcd_int_handler(uint8_t rhport) +{ + musb_regs_t *musb_regs = MUSB_REGS(rhport); + const uint8_t saved_index = musb_regs->index; // save endpoint index + + //Part specific ISR setup/entry + musb_dcd_int_handler_enter(rhport); + + uint_fast8_t intr_usb = musb_regs->intr_usb; // a read will clear this interrupt status + uint_fast8_t intr_tx = musb_regs->intr_tx; // a read will clear this interrupt status + uint_fast8_t intr_rx = musb_regs->intr_rx; // a read will clear this interrupt status + // TU_LOG1("D%2x T%2x R%2x\r\n", is, txis, rxis); + + intr_usb &= musb_regs->intr_usben; /* Clear disabled interrupts */ + if (intr_usb & MUSB_IS_DISCON) {} + if (intr_usb & MUSB_IS_SOF) { + dcd_event_bus_signal(rhport, DCD_EVENT_SOF, true); + } + if (intr_usb & MUSB_IS_RESET) { + process_bus_reset(rhport); + } + if (intr_usb & MUSB_IS_RESUME) { + dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true); + } + if (intr_usb & MUSB_IS_SUSPEND) { + dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true); + } + + intr_tx &= musb_regs->intr_txen; /* Clear disabled interrupts */ + if (intr_tx & TU_BIT(0)) { + process_ep0(rhport); + intr_tx &= ~TU_BIT(0); + } + while (intr_tx) { + unsigned const num = __builtin_ctz(intr_tx); + process_edpt_n(rhport, tu_edpt_addr(num, TUSB_DIR_IN)); + intr_tx &= ~TU_BIT(num); + } + + intr_rx &= musb_regs->intr_rxen; /* Clear disabled interrupts */ + while (intr_rx) { + unsigned const num = __builtin_ctz(intr_rx); + process_edpt_n(rhport, tu_edpt_addr(num, TUSB_DIR_OUT)); + intr_rx &= ~TU_BIT(num); + } + + musb_regs->index = saved_index; // restore endpoint index } #endif diff --git a/Libraries/tinyusb/src/portable/mentor/musb/musb_max32.h b/Libraries/tinyusb/src/portable/mentor/musb/musb_max32.h index 35849b5f837..dfaddbf4a09 100644 --- a/Libraries/tinyusb/src/portable/mentor/musb/musb_max32.h +++ b/Libraries/tinyusb/src/portable/mentor/musb/musb_max32.h @@ -34,8 +34,8 @@ extern "C" { #include "mxc_device.h" #include "usbhs_regs.h" -#define MUSB_CFG_SHARED_FIFO 1 // shared FIFO for TX and RX endpoints -#define MUSB_CFG_DYNAMIC_FIFO 0 // dynamic EP FIFO sizing +#define MUSB_CFG_SHARED_FIFO 1 // shared FIFO for TX and RX endpoints +#define MUSB_CFG_DYNAMIC_FIFO 0 // dynamic EP FIFO sizing const uintptr_t MUSB_BASES[] = { MXC_BASE_USBHS }; @@ -43,83 +43,87 @@ const uintptr_t MUSB_BASES[] = { MXC_BASE_USBHS }; #define USBHS_M31_CLOCK_RECOVERY // Mapping of IRQ numbers to port. Currently just 1. -static const IRQn_Type musb_irqs[] = { - USB_IRQn -}; +static const IRQn_Type musb_irqs[] = { USB_IRQn }; -TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_enable(uint8_t rhport) { - NVIC_EnableIRQ(musb_irqs[rhport]); +TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_enable(uint8_t rhport) +{ + NVIC_EnableIRQ(musb_irqs[rhport]); } -TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_disable(uint8_t rhport) { - NVIC_DisableIRQ(musb_irqs[rhport]); +TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_disable(uint8_t rhport) +{ + NVIC_DisableIRQ(musb_irqs[rhport]); } -TU_ATTR_ALWAYS_INLINE static inline unsigned musb_dcd_get_int_enable(uint8_t rhport) { - #ifdef NVIC_GetEnableIRQ // only defined in CMSIS 5 - return NVIC_GetEnableIRQ(musb_irqs[rhport]); - #else - uint32_t IRQn = (uint32_t) musb_irqs[rhport]; - return ((NVIC->ISER[IRQn >> 5UL] & (1UL << (IRQn & 0x1FUL))) != 0UL) ? 1UL : 0UL; - #endif +TU_ATTR_ALWAYS_INLINE static inline unsigned musb_dcd_get_int_enable(uint8_t rhport) +{ +#ifdef NVIC_GetEnableIRQ // only defined in CMSIS 5 + return NVIC_GetEnableIRQ(musb_irqs[rhport]); +#else + uint32_t IRQn = (uint32_t)musb_irqs[rhport]; + return ((NVIC->ISER[IRQn >> 5UL] & (1UL << (IRQn & 0x1FUL))) != 0UL) ? 1UL : 0UL; +#endif } -TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_clear(uint8_t rhport) { - NVIC_ClearPendingIRQ(musb_irqs[rhport]); +TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_clear(uint8_t rhport) +{ + NVIC_ClearPendingIRQ(musb_irqs[rhport]); } -static inline void musb_dcd_int_handler_enter(uint8_t rhport) { - mxc_usbhs_regs_t* hs_phy = MXC_USBHS; - uint32_t mxm_int, mxm_int_en, mxm_is; +static inline void musb_dcd_int_handler_enter(uint8_t rhport) +{ + mxc_usbhs_regs_t *hs_phy = MXC_USBHS; + uint32_t mxm_int, mxm_int_en, mxm_is; - //Handle PHY specific events - mxm_int = hs_phy->mxm_int; - mxm_int_en = hs_phy->mxm_int_en; - mxm_is = mxm_int & mxm_int_en; - hs_phy->mxm_int = mxm_is; + //Handle PHY specific events + mxm_int = hs_phy->mxm_int; + mxm_int_en = hs_phy->mxm_int_en; + mxm_is = mxm_int & mxm_int_en; + hs_phy->mxm_int = mxm_is; - if (mxm_is & MXC_F_USBHS_MXM_INT_NOVBUS) { - dcd_event_bus_signal(rhport, DCD_EVENT_UNPLUGGED, true); - } + if (mxm_is & MXC_F_USBHS_MXM_INT_NOVBUS) { + dcd_event_bus_signal(rhport, DCD_EVENT_UNPLUGGED, true); + } } -static inline void musb_dcd_phy_init(uint8_t rhport) { - (void) rhport; - mxc_usbhs_regs_t* hs_phy = MXC_USBHS; - - // Interrupt for VBUS disconnect - hs_phy->mxm_int_en |= MXC_F_USBHS_MXM_INT_EN_NOVBUS; - - musb_dcd_int_clear(rhport); - - // Unsuspend the MAC - hs_phy->mxm_suspend = 0; - - // Configure PHY - hs_phy->m31_phy_xcfgi_31_0 = (0x1 << 3) | (0x1 << 11); - hs_phy->m31_phy_xcfgi_63_32 = 0; - hs_phy->m31_phy_xcfgi_95_64 = 0x1 << (72 - 64); - hs_phy->m31_phy_xcfgi_127_96 = 0; - - #ifdef USBHS_M31_CLOCK_RECOVERY - hs_phy->m31_phy_noncry_rstb = 1; - hs_phy->m31_phy_noncry_en = 1; - hs_phy->m31_phy_outclksel = 0; - hs_phy->m31_phy_coreclkin = 0; - hs_phy->m31_phy_xtlsel = 2; /* Select 25 MHz clock */ - #else - hs_phy->m31_phy_noncry_rstb = 0; - hs_phy->m31_phy_noncry_en = 0; - hs_phy->m31_phy_outclksel = 1; - hs_phy->m31_phy_coreclkin = 1; - hs_phy->m31_phy_xtlsel = 3; /* Select 30 MHz clock */ - #endif - hs_phy->m31_phy_pll_en = 1; - hs_phy->m31_phy_oscouten = 1; - - /* Reset PHY */ - hs_phy->m31_phy_ponrst = 0; - hs_phy->m31_phy_ponrst = 1; +static inline void musb_dcd_phy_init(uint8_t rhport) +{ + (void)rhport; + mxc_usbhs_regs_t *hs_phy = MXC_USBHS; + + // Interrupt for VBUS disconnect + hs_phy->mxm_int_en |= MXC_F_USBHS_MXM_INT_EN_NOVBUS; + + musb_dcd_int_clear(rhport); + + // Unsuspend the MAC + hs_phy->mxm_suspend = 0; + + // Configure PHY + hs_phy->m31_phy_xcfgi_31_0 = (0x1 << 3) | (0x1 << 11); + hs_phy->m31_phy_xcfgi_63_32 = 0; + hs_phy->m31_phy_xcfgi_95_64 = 0x1 << (72 - 64); + hs_phy->m31_phy_xcfgi_127_96 = 0; + +#ifdef USBHS_M31_CLOCK_RECOVERY + hs_phy->m31_phy_noncry_rstb = 1; + hs_phy->m31_phy_noncry_en = 1; + hs_phy->m31_phy_outclksel = 0; + hs_phy->m31_phy_coreclkin = 0; + hs_phy->m31_phy_xtlsel = 2; /* Select 25 MHz clock */ +#else + hs_phy->m31_phy_noncry_rstb = 0; + hs_phy->m31_phy_noncry_en = 0; + hs_phy->m31_phy_outclksel = 1; + hs_phy->m31_phy_coreclkin = 1; + hs_phy->m31_phy_xtlsel = 3; /* Select 30 MHz clock */ +#endif + hs_phy->m31_phy_pll_en = 1; + hs_phy->m31_phy_oscouten = 1; + + /* Reset PHY */ + hs_phy->m31_phy_ponrst = 0; + hs_phy->m31_phy_ponrst = 1; } // static inline void musb_dcd_setup_fifo(uint8_t rhport, unsigned epnum, unsigned dir_in, unsigned mps) { diff --git a/Libraries/tinyusb/src/portable/mentor/musb/musb_type.h b/Libraries/tinyusb/src/portable/mentor/musb/musb_type.h index 4e448c0eda2..89c32c81ef4 100644 --- a/Libraries/tinyusb/src/portable/mentor/musb/musb_type.h +++ b/Libraries/tinyusb/src/portable/mentor/musb/musb_type.h @@ -64,234 +64,234 @@ #include "stdint.h" #ifdef __cplusplus - extern "C" { +extern "C" { #endif #ifndef __IO - #define __IO volatile +#define __IO volatile #endif #ifndef __I - #define __I volatile const +#define __I volatile const #endif #ifndef __O - #define __O volatile +#define __O volatile #endif #ifndef __R - #define __R volatile const +#define __R volatile const #endif typedef struct TU_ATTR_PACKED { - __IO uint16_t maxp; // 0x00, 0x04: MAXP - __IO uint8_t csrl; // 0x02, 0x06: CSRL - __IO uint8_t csrh; // 0x03, 0x07: CSRH -}musb_ep_maxp_csr_t; + __IO uint16_t maxp; // 0x00, 0x04: MAXP + __IO uint8_t csrl; // 0x02, 0x06: CSRL + __IO uint8_t csrh; // 0x03, 0x07: CSRH +} musb_ep_maxp_csr_t; // 0: TX (device IN, host OUT) // 1: RX (device OUT, host IN) typedef struct TU_ATTR_PACKED { - union { - struct { - __IO uint16_t tx_maxp; // 0x00: TXMAXP - union { - __IO uint8_t csr0l; // 0x02: CSR0 - __IO uint8_t tx_csrl; // 0x02: TX CSRL - }; - union { - __IO uint8_t csr0h; // 0x03: CSR0H - __IO uint8_t tx_csrh; // 0x03: TX CSRH - }; - - __IO uint16_t rx_maxp; // 0x04: RX MAXP - __IO uint8_t rx_csrl; // 0x06: RX CSRL - __IO uint8_t rx_csrh; // 0x07: RX CSRH + union { + struct { + __IO uint16_t tx_maxp; // 0x00: TXMAXP + union { + __IO uint8_t csr0l; // 0x02: CSR0 + __IO uint8_t tx_csrl; // 0x02: TX CSRL + }; + union { + __IO uint8_t csr0h; // 0x03: CSR0H + __IO uint8_t tx_csrh; // 0x03: TX CSRH + }; + + __IO uint16_t rx_maxp; // 0x04: RX MAXP + __IO uint8_t rx_csrl; // 0x06: RX CSRL + __IO uint8_t rx_csrh; // 0x07: RX CSRH + }; + + musb_ep_maxp_csr_t maxp_csr[2]; }; - musb_ep_maxp_csr_t maxp_csr[2]; - }; - - union { - __IO uint16_t count0; // 0x08: COUNT0 - __IO uint16_t rx_count; // 0x08: RX COUNT - }; - union { - __IO uint8_t type0; // 0x0A: TYPE0 (host only) - __IO uint8_t tx_type; // 0x0A: TX TYPE - }; - __IO uint8_t tx_interval; // 0x0B: TX INTERVAL - __IO uint8_t rx_type; // 0x0C: RX TYPE - __IO uint8_t rx_interval; // 0x0D: RX INTERVAL - __IO uint8_t reserved_0x0e; // 0x0E: Reserved - union { - __IO uint8_t config_data0; // 0x0F: CONFIG DATA - struct { - __IO uint8_t utmi_data_width : 1; // [0] UTMI Data Width - __IO uint8_t softconn_en : 1; // [1] Soft Connect Enable - __IO uint8_t dynamic_fifo : 1; // [2] Dynamic FIFO Sizing - __IO uint8_t hb_tx_en : 1; // [3] High Bandwidth TX ISO Enable - __IO uint8_t hb_rx_en : 1; // [4] High Bandwidth RX ISO Enable - __IO uint8_t big_endian : 1; // [5] Big Endian - __IO uint8_t mp_tx_en : 1; // [6] Auto splitting BULK TX Enable - __IO uint8_t mp_rx_en : 1; // [7] Auto amalgamation BULK RX Enable - } config_data0_bit; - - __IO uint8_t fifo_size; // 0x0F: FIFO_SIZE - struct { - __IO uint8_t tx : 4; // [3:0] TX FIFO Size - __IO uint8_t rx : 4; // [7:4] RX FIFO Size - }fifo_size_bit; - }; + union { + __IO uint16_t count0; // 0x08: COUNT0 + __IO uint16_t rx_count; // 0x08: RX COUNT + }; + union { + __IO uint8_t type0; // 0x0A: TYPE0 (host only) + __IO uint8_t tx_type; // 0x0A: TX TYPE + }; + __IO uint8_t tx_interval; // 0x0B: TX INTERVAL + __IO uint8_t rx_type; // 0x0C: RX TYPE + __IO uint8_t rx_interval; // 0x0D: RX INTERVAL + __IO uint8_t reserved_0x0e; // 0x0E: Reserved + union { + __IO uint8_t config_data0; // 0x0F: CONFIG DATA + struct { + __IO uint8_t utmi_data_width : 1; // [0] UTMI Data Width + __IO uint8_t softconn_en : 1; // [1] Soft Connect Enable + __IO uint8_t dynamic_fifo : 1; // [2] Dynamic FIFO Sizing + __IO uint8_t hb_tx_en : 1; // [3] High Bandwidth TX ISO Enable + __IO uint8_t hb_rx_en : 1; // [4] High Bandwidth RX ISO Enable + __IO uint8_t big_endian : 1; // [5] Big Endian + __IO uint8_t mp_tx_en : 1; // [6] Auto splitting BULK TX Enable + __IO uint8_t mp_rx_en : 1; // [7] Auto amalgamation BULK RX Enable + } config_data0_bit; + + __IO uint8_t fifo_size; // 0x0F: FIFO_SIZE + struct { + __IO uint8_t tx : 4; // [3:0] TX FIFO Size + __IO uint8_t rx : 4; // [7:4] RX FIFO Size + } fifo_size_bit; + }; } musb_ep_csr_t; TU_VERIFY_STATIC(sizeof(musb_ep_csr_t) == 16, "size is not correct"); typedef struct TU_ATTR_PACKED { - //------------- Common -------------// - __IO uint8_t faddr; // 0x00: FADDR - union { - __IO uint8_t power; // 0x01: POWER - struct { - __IO uint8_t suspend_mode_en : 1; // [0] SUSPEND Mode Enable - __IO uint8_t suspend_mode : 1; // [1] SUSPEND Mode - __IO uint8_t resume_mode : 1; // [2] RESUME - __IO uint8_t reset : 1; // [3] RESET - __IO uint8_t highspeed_mode : 1; // [4] High Speed Mode - __IO uint8_t highspeed_en : 1; // [5] High Speed Enable - __IO uint8_t soft_conn : 1; // [6] Soft Connect/Disconnect - __IO uint8_t iso_update : 1; // [7] Isochronous Update - } power_bit; - }; - - union { - struct { - __IO uint16_t intr_tx; // 0x02: INTR_TX - __IO uint16_t intr_rx; // 0x04: INTR_RX + //------------- Common -------------// + __IO uint8_t faddr; // 0x00: FADDR + union { + __IO uint8_t power; // 0x01: POWER + struct { + __IO uint8_t suspend_mode_en : 1; // [0] SUSPEND Mode Enable + __IO uint8_t suspend_mode : 1; // [1] SUSPEND Mode + __IO uint8_t resume_mode : 1; // [2] RESUME + __IO uint8_t reset : 1; // [3] RESET + __IO uint8_t highspeed_mode : 1; // [4] High Speed Mode + __IO uint8_t highspeed_en : 1; // [5] High Speed Enable + __IO uint8_t soft_conn : 1; // [6] Soft Connect/Disconnect + __IO uint8_t iso_update : 1; // [7] Isochronous Update + } power_bit; }; - __IO uint16_t intr_ep[2]; // 0x02-0x05: INTR_EP0-1 - }; + union { + struct { + __IO uint16_t intr_tx; // 0x02: INTR_TX + __IO uint16_t intr_rx; // 0x04: INTR_RX + }; - union { - struct { - __IO uint16_t intr_txen; // 0x06: INTR_TXEN - __IO uint16_t intr_rxen; // 0x08: INTR_RXEN + __IO uint16_t intr_ep[2]; // 0x02-0x05: INTR_EP0-1 }; - __IO uint16_t intren_ep[2]; // 0x06-0x09: INTREN_EP0-1 - }; + union { + struct { + __IO uint16_t intr_txen; // 0x06: INTR_TXEN + __IO uint16_t intr_rxen; // 0x08: INTR_RXEN + }; + + __IO uint16_t intren_ep[2]; // 0x06-0x09: INTREN_EP0-1 + }; - __IO uint8_t intr_usb; // 0x0A: INTRUSB - __IO uint8_t intr_usben; // 0x0B: INTRUSBEN + __IO uint8_t intr_usb; // 0x0A: INTRUSB + __IO uint8_t intr_usben; // 0x0B: INTRUSBEN - __IO uint16_t frame; // 0x0C: FRAME - __IO uint8_t index; // 0x0E: INDEX - __IO uint8_t testmode; // 0x0F: TESTMODE + __IO uint16_t frame; // 0x0C: FRAME + __IO uint8_t index; // 0x0E: INDEX + __IO uint8_t testmode; // 0x0F: TESTMODE - //------------- Endpoint CSR (indexed) -------------// - musb_ep_csr_t indexed_csr; // 0x10-0x1F: Indexed CSR 0-15 + //------------- Endpoint CSR (indexed) -------------// + musb_ep_csr_t indexed_csr; // 0x10-0x1F: Indexed CSR 0-15 - //------------- FIFOs -------------// - __IO uint32_t fifo[16]; // 0x20-0x5C: FIFO 0-15 + //------------- FIFOs -------------// + __IO uint32_t fifo[16]; // 0x20-0x5C: FIFO 0-15 - // Common (2) - __IO uint8_t devctl; // 0x60: DEVCTL - __IO uint8_t misc; // 0x61: MISC + // Common (2) + __IO uint8_t devctl; // 0x60: DEVCTL + __IO uint8_t misc; // 0x61: MISC - //------------- Dynammic FIFO (indexed) -------------// - union { - struct { - __IO uint8_t txfifo_sz; // 0x62: TXFIFO_SZ - __IO uint8_t rxfifo_sz; // 0x63: RXFIFO_SZ + //------------- Dynammic FIFO (indexed) -------------// + union { + struct { + __IO uint8_t txfifo_sz; // 0x62: TXFIFO_SZ + __IO uint8_t rxfifo_sz; // 0x63: RXFIFO_SZ + }; + __IO uint8_t fifo_size[2]; }; - __IO uint8_t fifo_size[2]; - }; - union { - struct { - __IO uint16_t txfifo_addr; // 0x64: TXFIFO_ADDR - __IO uint16_t rxfifo_addr; // 0x66: RXFIFO_ADDR + union { + struct { + __IO uint16_t txfifo_addr; // 0x64: TXFIFO_ADDR + __IO uint16_t rxfifo_addr; // 0x66: RXFIFO_ADDR + }; + __IO uint16_t fifo_addr[2]; }; - __IO uint16_t fifo_addr[2]; - }; - - //------------- Additional Control and Configuration -------------// - union { - __O uint32_t vcontrol; // 0x68: PHY VCONTROL - __IO uint32_t vstatus; // 0x68: PHY VSTATUS - }; - union { - __IO uint16_t hwvers; // 0x6C: HWVERS - struct { - __IO uint16_t minor : 10; // [9:0] Minor - __IO uint16_t major : 5; // [14:10] Major - __IO uint16_t rc : 1; // [15] Release Candidate - } hwvers_bit; - }; - __R uint16_t rsv_0x6e_0x77[5]; // 0x6E-0x77: Reserved - - //------------- Additional Configuration -------------// - union { - __IO uint8_t epinfo; // 0x78: EPINFO + + //------------- Additional Control and Configuration -------------// + union { + __O uint32_t vcontrol; // 0x68: PHY VCONTROL + __IO uint32_t vstatus; // 0x68: PHY VSTATUS + }; + union { + __IO uint16_t hwvers; // 0x6C: HWVERS + struct { + __IO uint16_t minor : 10; // [9:0] Minor + __IO uint16_t major : 5; // [14:10] Major + __IO uint16_t rc : 1; // [15] Release Candidate + } hwvers_bit; + }; + __R uint16_t rsv_0x6e_0x77[5]; // 0x6E-0x77: Reserved + + //------------- Additional Configuration -------------// + union { + __IO uint8_t epinfo; // 0x78: EPINFO + struct { + __IO uint8_t tx_ep_num : 4; // [3:0] TX Endpoints + __IO uint8_t rx_ep_num : 4; // [7:4] RX Endpoints + } epinfo_bit; + }; + union { + __IO uint8_t raminfo; // 0x79: RAMINFO + struct { + __IO uint8_t ram_bits : 4; // [3:0] RAM Address Bus Width + __IO uint8_t dma_channel : 4; // [7:4] DMA Channels + } raminfo_bit; + }; + union { + __IO uint8_t link_info; // 0x7A: LINK_INFO + __IO uint8_t adi_softreset; // 0x7A: AnalogDevice SOFTRESET + }; + __IO uint8_t vplen; // 0x7B: VPLEN + __IO uint8_t hs_eof1; // 0x7C: HS_EOF1 + __IO uint8_t fs_eof1; // 0x7D: FS_EOF1 + __IO uint8_t ls_eof1; // 0x7E: LS_EOF1 + __IO uint8_t soft_rst; // 0x7F: SOFT_RST + + //------------- Target Endpoints (multipoint option) -------------// + __IO uint16_t ctuch; // 0x80: CTUCH + __IO uint16_t cthsrtn; // 0x82: CTHSRTN + __R uint32_t rsv_0x84_0xff[31]; // 0x84-0xFF: Reserved + + //------------- Non-Indexed Endpoint CSRs -------------// + // TI tm4c can access this directly, but should use indexed_csr for portability + musb_ep_csr_t abs_csr[16]; // 0x100-0x1FF: EP0-15 CSR + + //------------- DMA -------------// + __IO uint8_t dma_intr; // 0x200: DMA_INTR + __R uint8_t rsv_0x201_0x203[3]; // 0x201-0x203: Reserved struct { - __IO uint8_t tx_ep_num : 4; // [3:0] TX Endpoints - __IO uint8_t rx_ep_num : 4; // [7:4] RX Endpoints - } epinfo_bit; - }; - union { - __IO uint8_t raminfo; // 0x79: RAMINFO + __IO uint16_t cntl; // 0x204: DMA_CNTL + __IO uint16_t rsv_0x206; // 0x206: Reserved + __IO uint32_t addr; // 0x208: DMA_ADDR + __IO uint32_t count; // 0x20C: DMA_COUNT + __IO uint32_t rsv_0x210; // 0x210: Reserved + } dma[8]; + __R uint32_t rsv_0x284_0x2FF[31]; // 0x284-0x2FF: Reserved + + //------------- Extended -------------// + __R uint32_t rsv_0x300; // 0x300: Reserved struct { - __IO uint8_t ram_bits : 4; // [3:0] RAM Address Bus Width - __IO uint8_t dma_channel : 4; // [7:4] DMA Channels - }raminfo_bit; - }; - union { - __IO uint8_t link_info; // 0x7A: LINK_INFO - __IO uint8_t adi_softreset; // 0x7A: AnalogDevice SOFTRESET - }; - __IO uint8_t vplen; // 0x7B: VPLEN - __IO uint8_t hs_eof1; // 0x7C: HS_EOF1 - __IO uint8_t fs_eof1; // 0x7D: FS_EOF1 - __IO uint8_t ls_eof1; // 0x7E: LS_EOF1 - __IO uint8_t soft_rst; // 0x7F: SOFT_RST - - //------------- Target Endpoints (multipoint option) -------------// - __IO uint16_t ctuch; // 0x80: CTUCH - __IO uint16_t cthsrtn; // 0x82: CTHSRTN - __R uint32_t rsv_0x84_0xff[31]; // 0x84-0xFF: Reserved - - //------------- Non-Indexed Endpoint CSRs -------------// - // TI tm4c can access this directly, but should use indexed_csr for portability - musb_ep_csr_t abs_csr[16]; // 0x100-0x1FF: EP0-15 CSR - - //------------- DMA -------------// - __IO uint8_t dma_intr; // 0x200: DMA_INTR - __R uint8_t rsv_0x201_0x203[3]; // 0x201-0x203: Reserved - struct { - __IO uint16_t cntl; // 0x204: DMA_CNTL - __IO uint16_t rsv_0x206; // 0x206: Reserved - __IO uint32_t addr; // 0x208: DMA_ADDR - __IO uint32_t count; // 0x20C: DMA_COUNT - __IO uint32_t rsv_0x210; // 0x210: Reserved - }dma[8]; - __R uint32_t rsv_0x284_0x2FF[31]; // 0x284-0x2FF: Reserved - - //------------- Extended -------------// - __R uint32_t rsv_0x300; // 0x300: Reserved - struct { - __IO uint16_t count; // 0x304: REQ_PACKET_COUNT - __R uint16_t rsv_0x306; // 0x306: Reserved - }req_packet[15]; - - __IO uint16_t rx_doulbe_packet_disable; // 0x340: RX_DOUBLE_PACKET_DISABLE - __IO uint16_t tx_double_packet_disable; // 0x342: TX_DOUBLE_PACKET_DISABLE - - __IO uint16_t chirp_timeout; // 0x344: CHIRP_TIMEOUT - __IO uint16_t hs_to_utm; // 0x346: HS_TO_UTM delay - __IO uint16_t hs_timeout_adder; // 0x348: HS_TIMEOUT_ADDER - - __R uint8_t rsv_34A_34f[6]; // 0x34A-0x34F: Reserved + __IO uint16_t count; // 0x304: REQ_PACKET_COUNT + __R uint16_t rsv_0x306; // 0x306: Reserved + } req_packet[15]; + + __IO uint16_t rx_doulbe_packet_disable; // 0x340: RX_DOUBLE_PACKET_DISABLE + __IO uint16_t tx_double_packet_disable; // 0x342: TX_DOUBLE_PACKET_DISABLE + + __IO uint16_t chirp_timeout; // 0x344: CHIRP_TIMEOUT + __IO uint16_t hs_to_utm; // 0x346: HS_TO_UTM delay + __IO uint16_t hs_timeout_adder; // 0x348: HS_TIMEOUT_ADDER + + __R uint8_t rsv_34A_34f[6]; // 0x34A-0x34F: Reserved } musb_regs_t; TU_VERIFY_STATIC(sizeof(musb_regs_t) == 0x350, "size is not correct"); @@ -299,9 +299,11 @@ TU_VERIFY_STATIC(sizeof(musb_regs_t) == 0x350, "size is not correct"); //--------------------------------------------------------------------+ // Helper //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_regs, unsigned epnum) { - musb_regs->index = epnum; - return &musb_regs->indexed_csr; +TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_regs, + unsigned epnum) +{ + musb_regs->index = epnum; + return &musb_regs->indexed_csr; } //--------------------------------------------------------------------+ @@ -309,117 +311,116 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ //--------------------------------------------------------------------+ // 0x01: Power -#define MUSB_POWER_ISOUP 0x0080 // Isochronous Update -#define MUSB_POWER_SOFTCONN 0x0040 // Soft Connect/Disconnect -#define MUSB_POWER_HSENAB 0x0020 // High Speed Enable -#define MUSB_POWER_HSMODE 0x0010 // High Speed Enable -#define MUSB_POWER_RESET 0x0008 // RESET Signaling -#define MUSB_POWER_RESUME 0x0004 // RESUME Signaling -#define MUSB_POWER_SUSPEND 0x0002 // SUSPEND Mode -#define MUSB_POWER_PWRDNPHY 0x0001 // Power Down PHY +#define MUSB_POWER_ISOUP 0x0080 // Isochronous Update +#define MUSB_POWER_SOFTCONN 0x0040 // Soft Connect/Disconnect +#define MUSB_POWER_HSENAB 0x0020 // High Speed Enable +#define MUSB_POWER_HSMODE 0x0010 // High Speed Enable +#define MUSB_POWER_RESET 0x0008 // RESET Signaling +#define MUSB_POWER_RESUME 0x0004 // RESUME Signaling +#define MUSB_POWER_SUSPEND 0x0002 // SUSPEND Mode +#define MUSB_POWER_PWRDNPHY 0x0001 // Power Down PHY // Interrupt TX/RX Status and Enable: each bit is for an endpoint // 0x6c: HWVERS -#define MUSB_HWVERS_RC_SHIFT 15 -#define MUSB_HWVERS_RC_MASK 0x8000 +#define MUSB_HWVERS_RC_SHIFT 15 +#define MUSB_HWVERS_RC_MASK 0x8000 #define MUSB_HWVERS_MAJOR_SHIFT 10 -#define MUSB_HWVERS_MAJOR_MASK 0x7C00 +#define MUSB_HWVERS_MAJOR_MASK 0x7C00 #define MUSB_HWVERS_MINOR_SHIFT 0 -#define MUSB_HWVERS_MINOR_MASK 0x03FF +#define MUSB_HWVERS_MINOR_MASK 0x03FF // 0x12, 0x16: TX/RX CSRL -#define MUSB_CSRL_PACKET_READY(_rx) (1u << 0) -#define MUSB_CSRL_FLUSH_FIFO(_rx) (1u << ((_rx) ? 4 : 3)) -#define MUSB_CSRL_SEND_STALL(_rx) (1u << ((_rx) ? 5 : 4)) -#define MUSB_CSRL_STALLED(_rx) (1u << ((_rx) ? 6 : 5)) +#define MUSB_CSRL_PACKET_READY(_rx) (1u << 0) +#define MUSB_CSRL_FLUSH_FIFO(_rx) (1u << ((_rx) ? 4 : 3)) +#define MUSB_CSRL_SEND_STALL(_rx) (1u << ((_rx) ? 5 : 4)) +#define MUSB_CSRL_STALLED(_rx) (1u << ((_rx) ? 6 : 5)) #define MUSB_CSRL_CLEAR_DATA_TOGGLE(_rx) (1u << ((_rx) ? 7 : 6)) // 0x13, 0x17: TX/RX CSRH #define MUSB_CSRH_DISABLE_DOUBLE_PACKET(_rx) (1u << 1) -#define MUSB_CSRH_TX_MODE (1u << 5) // 1 = TX, 0 = RX. only relevant for SHARED FIFO -#define MUSB_CSRH_ISO (1u << 6) +#define MUSB_CSRH_TX_MODE (1u << 5) // 1 = TX, 0 = RX. only relevant for SHARED FIFO +#define MUSB_CSRH_ISO (1u << 6) // 0x62, 0x63: TXFIFO_SZ, RXFIFO_SZ -#define MUSB_FIFOSZ_DOUBLE_PACKET (1u << 4) - +#define MUSB_FIFOSZ_DOUBLE_PACKET (1u << 4) //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_IS register. // //***************************************************************************** -#define MUSB_IS_VBUSERR 0x0080 // VBUS Error (OTG only) -#define MUSB_IS_SESREQ 0x0040 // SESSION REQUEST (OTG only) -#define MUSB_IS_DISCON 0x0020 // Session Disconnect (OTG only) -#define MUSB_IS_CONN 0x0010 // Session Connect -#define MUSB_IS_SOF 0x0008 // Start of Frame -#define MUSB_IS_BABBLE 0x0004 // Babble Detected -#define MUSB_IS_RESET 0x0004 // RESET Signaling Detected -#define MUSB_IS_RESUME 0x0002 // RESUME Signaling Detected -#define MUSB_IS_SUSPEND 0x0001 // SUSPEND Signaling Detected +#define MUSB_IS_VBUSERR 0x0080 // VBUS Error (OTG only) +#define MUSB_IS_SESREQ 0x0040 // SESSION REQUEST (OTG only) +#define MUSB_IS_DISCON 0x0020 // Session Disconnect (OTG only) +#define MUSB_IS_CONN 0x0010 // Session Connect +#define MUSB_IS_SOF 0x0008 // Start of Frame +#define MUSB_IS_BABBLE 0x0004 // Babble Detected +#define MUSB_IS_RESET 0x0004 // RESET Signaling Detected +#define MUSB_IS_RESUME 0x0002 // RESUME Signaling Detected +#define MUSB_IS_SUSPEND 0x0001 // SUSPEND Signaling Detected //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_IE register. // //***************************************************************************** -#define MUSB_IE_VBUSERR 0x0080 // Enable VBUS Error Interrupt (OTG only) -#define MUSB_IE_SESREQ 0x0040 // Enable Session Request (OTG only) -#define MUSB_IE_DISCON 0x0020 // Enable Disconnect Interrupt -#define MUSB_IE_CONN 0x0010 // Enable Connect Interrupt -#define MUSB_IE_SOF 0x0008 // Enable Start-of-Frame Interrupt -#define MUSB_IE_BABBLE 0x0004 // Enable Babble Interrupt -#define MUSB_IE_RESET 0x0004 // Enable RESET Interrupt -#define MUSB_IE_RESUME 0x0002 // Enable RESUME Interrupt -#define MUSB_IE_SUSPND 0x0001 // Enable SUSPEND Interrupt +#define MUSB_IE_VBUSERR 0x0080 // Enable VBUS Error Interrupt (OTG only) +#define MUSB_IE_SESREQ 0x0040 // Enable Session Request (OTG only) +#define MUSB_IE_DISCON 0x0020 // Enable Disconnect Interrupt +#define MUSB_IE_CONN 0x0010 // Enable Connect Interrupt +#define MUSB_IE_SOF 0x0008 // Enable Start-of-Frame Interrupt +#define MUSB_IE_BABBLE 0x0004 // Enable Babble Interrupt +#define MUSB_IE_RESET 0x0004 // Enable RESET Interrupt +#define MUSB_IE_RESUME 0x0002 // Enable RESUME Interrupt +#define MUSB_IE_SUSPND 0x0001 // Enable SUSPEND Interrupt //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_FRAME register. // //***************************************************************************** -#define MUSB_FRAME_M 0x07FF // Frame Number -#define MUSB_FRAME_S 0 +#define MUSB_FRAME_M 0x07FF // Frame Number +#define MUSB_FRAME_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TEST register. // //***************************************************************************** -#define MUSB_TEST_FORCEH 0x0080 // Force Host Mode -#define MUSB_TEST_FIFOACC 0x0040 // FIFO Access -#define MUSB_TEST_FORCEFS 0x0020 // Force Full-Speed Mode -#define MUSB_TEST_FORCEHS 0x0010 // Force High-Speed Mode -#define MUSB_TEST_TESTPKT 0x0008 // Test Packet Mode Enable -#define MUSB_TEST_TESTK 0x0004 // Test_K Mode Enable -#define MUSB_TEST_TESTJ 0x0002 // Test_J Mode Enable -#define MUSB_TEST_TESTSE0NAK 0x0001 // Test_SE0_NAK Test Mode Enable +#define MUSB_TEST_FORCEH 0x0080 // Force Host Mode +#define MUSB_TEST_FIFOACC 0x0040 // FIFO Access +#define MUSB_TEST_FORCEFS 0x0020 // Force Full-Speed Mode +#define MUSB_TEST_FORCEHS 0x0010 // Force High-Speed Mode +#define MUSB_TEST_TESTPKT 0x0008 // Test Packet Mode Enable +#define MUSB_TEST_TESTK 0x0004 // Test_K Mode Enable +#define MUSB_TEST_TESTJ 0x0002 // Test_J Mode Enable +#define MUSB_TEST_TESTSE0NAK 0x0001 // Test_SE0_NAK Test Mode Enable //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_DEVCTL register. // //***************************************************************************** -#define MUSB_DEVCTL_DEV 0x0080 // Device Mode (OTG only) -#define MUSB_DEVCTL_FSDEV 0x0040 // Full-Speed Device Detected -#define MUSB_DEVCTL_LSDEV 0x0020 // Low-Speed Device Detected -#define MUSB_DEVCTL_VBUS_M 0x0018 // VBUS Level (OTG only) -#define MUSB_DEVCTL_VBUS_NONE 0x0000 // Below SessionEnd -#define MUSB_DEVCTL_VBUS_SEND 0x0008 // Above SessionEnd, below AValid -#define MUSB_DEVCTL_VBUS_AVALID 0x0010 // Above AValid, below VBUSValid -#define MUSB_DEVCTL_VBUS_VALID 0x0018 // Above VBUSValid -#define MUSB_DEVCTL_HOST 0x0004 // Host Mode -#define MUSB_DEVCTL_HOSTREQ 0x0002 // Host Request (OTG only) -#define MUSB_DEVCTL_SESSION 0x0001 // Session Start/End (OTG only) +#define MUSB_DEVCTL_DEV 0x0080 // Device Mode (OTG only) +#define MUSB_DEVCTL_FSDEV 0x0040 // Full-Speed Device Detected +#define MUSB_DEVCTL_LSDEV 0x0020 // Low-Speed Device Detected +#define MUSB_DEVCTL_VBUS_M 0x0018 // VBUS Level (OTG only) +#define MUSB_DEVCTL_VBUS_NONE 0x0000 // Below SessionEnd +#define MUSB_DEVCTL_VBUS_SEND 0x0008 // Above SessionEnd, below AValid +#define MUSB_DEVCTL_VBUS_AVALID 0x0010 // Above AValid, below VBUSValid +#define MUSB_DEVCTL_VBUS_VALID 0x0018 // Above VBUSValid +#define MUSB_DEVCTL_HOST 0x0004 // Host Mode +#define MUSB_DEVCTL_HOSTREQ 0x0002 // Host Request (OTG only) +#define MUSB_DEVCTL_SESSION 0x0001 // Session Start/End (OTG only) //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CCONF register. // //***************************************************************************** -#define MUSB_CCONF_TXEDMA 0x0002 // TX Early DMA Enable -#define MUSB_CCONF_RXEDMA 0x0001 // TX Early DMA Enable +#define MUSB_CCONF_TXEDMA 0x0002 // TX Early DMA Enable +#define MUSB_CCONF_RXEDMA 0x0001 // TX Early DMA Enable //***************************************************************************** // @@ -427,8 +428,8 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ // register. // //***************************************************************************** -#define MUSB_ULPIVBUSCTL_USEEXTVBUSIND 0x0002 // Use External VBUS Indicator -#define MUSB_ULPIVBUSCTL_USEEXTVBUS 0x0001 // Use External VBUS +#define MUSB_ULPIVBUSCTL_USEEXTVBUSIND 0x0002 // Use External VBUS Indicator +#define MUSB_ULPIVBUSCTL_USEEXTVBUS 0x0001 // Use External VBUS //***************************************************************************** // @@ -436,16 +437,16 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ // register. // //***************************************************************************** -#define MUSB_ULPIREGDATA_REGDATA_M 0x00FF // Register Data -#define MUSB_ULPIREGDATA_REGDATA_S 0 +#define MUSB_ULPIREGDATA_REGDATA_M 0x00FF // Register Data +#define MUSB_ULPIREGDATA_REGDATA_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_ULPIREGADDR // register. // //***************************************************************************** -#define MUSB_ULPIREGADDR_ADDR_M 0x00FF // Register Address -#define MUSB_ULPIREGADDR_ADDR_S 0 +#define MUSB_ULPIREGADDR_ADDR_M 0x00FF // Register Address +#define MUSB_ULPIREGADDR_ADDR_S 0 //***************************************************************************** // @@ -453,199 +454,199 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ // register. // //***************************************************************************** -#define MUSB_ULPIREGCTL_RDWR 0x0004 // Read/Write Control -#define MUSB_ULPIREGCTL_REGCMPLT 0x0002 // Register Access Complete -#define MUSB_ULPIREGCTL_REGACC 0x0001 // Initiate Register Access +#define MUSB_ULPIREGCTL_RDWR 0x0004 // Read/Write Control +#define MUSB_ULPIREGCTL_REGCMPLT 0x0002 // Register Access Complete +#define MUSB_ULPIREGCTL_REGACC 0x0001 // Initiate Register Access //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_EPINFO register. // //***************************************************************************** -#define MUSB_EPINFO_RXEP_M 0x00F0 // RX Endpoints -#define MUSB_EPINFO_TXEP_M 0x000F // TX Endpoints -#define MUSB_EPINFO_RXEP_S 4 -#define MUSB_EPINFO_TXEP_S 0 +#define MUSB_EPINFO_RXEP_M 0x00F0 // RX Endpoints +#define MUSB_EPINFO_TXEP_M 0x000F // TX Endpoints +#define MUSB_EPINFO_RXEP_S 4 +#define MUSB_EPINFO_TXEP_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_RAMINFO register. // //***************************************************************************** -#define MUSB_RAMINFO_DMACHAN_M 0x00F0 // DMA Channels -#define MUSB_RAMINFO_RAMBITS_M 0x000F // RAM Address Bus Width -#define MUSB_RAMINFO_DMACHAN_S 4 -#define MUSB_RAMINFO_RAMBITS_S 0 +#define MUSB_RAMINFO_DMACHAN_M 0x00F0 // DMA Channels +#define MUSB_RAMINFO_RAMBITS_M 0x000F // RAM Address Bus Width +#define MUSB_RAMINFO_DMACHAN_S 4 +#define MUSB_RAMINFO_RAMBITS_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CONTIM register. // //***************************************************************************** -#define MUSB_CONTIM_WTCON_M 0x00F0 // Connect Wait -#define MUSB_CONTIM_WTID_M 0x000F // Wait ID -#define MUSB_CONTIM_WTCON_S 4 -#define MUSB_CONTIM_WTID_S 0 +#define MUSB_CONTIM_WTCON_M 0x00F0 // Connect Wait +#define MUSB_CONTIM_WTID_M 0x000F // Wait ID +#define MUSB_CONTIM_WTCON_S 4 +#define MUSB_CONTIM_WTID_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_VPLEN register. // //***************************************************************************** -#define MUSB_VPLEN_VPLEN_M 0x00FF // VBUS Pulse Length -#define MUSB_VPLEN_VPLEN_S 0 +#define MUSB_VPLEN_VPLEN_M 0x00FF // VBUS Pulse Length +#define MUSB_VPLEN_VPLEN_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_HSEOF register. // //***************************************************************************** -#define MUSB_HSEOF_HSEOFG_M 0x00FF // HIgh-Speed End-of-Frame Gap -#define MUSB_HSEOF_HSEOFG_S 0 +#define MUSB_HSEOF_HSEOFG_M 0x00FF // HIgh-Speed End-of-Frame Gap +#define MUSB_HSEOF_HSEOFG_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_FSEOF register. // //***************************************************************************** -#define MUSB_FSEOF_FSEOFG_M 0x00FF // Full-Speed End-of-Frame Gap -#define MUSB_FSEOF_FSEOFG_S 0 +#define MUSB_FSEOF_FSEOFG_M 0x00FF // Full-Speed End-of-Frame Gap +#define MUSB_FSEOF_FSEOFG_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_LSEOF register. // //***************************************************************************** -#define MUSB_LSEOF_LSEOFG_M 0x00FF // Low-Speed End-of-Frame Gap -#define MUSB_LSEOF_LSEOFG_S 0 +#define MUSB_LSEOF_LSEOFG_M 0x00FF // Low-Speed End-of-Frame Gap +#define MUSB_LSEOF_LSEOFG_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CSRL0 register. // //***************************************************************************** -#define MUSB_CSRL0_NAKTO 0x0080 // NAK Timeout -#define MUSB_CSRL0_SETENDC 0x0080 // Setup End Clear -#define MUSB_CSRL0_STATUS 0x0040 // STATUS Packet -#define MUSB_CSRL0_RXRDYC 0x0040 // RXRDY Clear -#define MUSB_CSRL0_REQPKT 0x0020 // Request Packet -#define MUSB_CSRL0_STALL 0x0020 // Send Stall -#define MUSB_CSRL0_SETEND 0x0010 // Setup End -#define MUSB_CSRL0_ERROR 0x0010 // Error -#define MUSB_CSRL0_DATAEND 0x0008 // Data End -#define MUSB_CSRL0_SETUP 0x0008 // Setup Packet -#define MUSB_CSRL0_STALLED 0x0004 // Endpoint Stalled -#define MUSB_CSRL0_TXRDY 0x0002 // Transmit Packet Ready -#define MUSB_CSRL0_RXRDY 0x0001 // Receive Packet Ready +#define MUSB_CSRL0_NAKTO 0x0080 // NAK Timeout +#define MUSB_CSRL0_SETENDC 0x0080 // Setup End Clear +#define MUSB_CSRL0_STATUS 0x0040 // STATUS Packet +#define MUSB_CSRL0_RXRDYC 0x0040 // RXRDY Clear +#define MUSB_CSRL0_REQPKT 0x0020 // Request Packet +#define MUSB_CSRL0_STALL 0x0020 // Send Stall +#define MUSB_CSRL0_SETEND 0x0010 // Setup End +#define MUSB_CSRL0_ERROR 0x0010 // Error +#define MUSB_CSRL0_DATAEND 0x0008 // Data End +#define MUSB_CSRL0_SETUP 0x0008 // Setup Packet +#define MUSB_CSRL0_STALLED 0x0004 // Endpoint Stalled +#define MUSB_CSRL0_TXRDY 0x0002 // Transmit Packet Ready +#define MUSB_CSRL0_RXRDY 0x0001 // Receive Packet Ready //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CSRH0 register. // //***************************************************************************** -#define MUSB_CSRH0_DISPING 0x0008 // PING Disable -#define MUSB_CSRH0_DTWE 0x0004 // Data Toggle Write Enable -#define MUSB_CSRH0_DT 0x0002 // Data Toggle -#define MUSB_CSRH0_FLUSH 0x0001 // Flush FIFO +#define MUSB_CSRH0_DISPING 0x0008 // PING Disable +#define MUSB_CSRH0_DTWE 0x0004 // Data Toggle Write Enable +#define MUSB_CSRH0_DT 0x0002 // Data Toggle +#define MUSB_CSRH0_FLUSH 0x0001 // Flush FIFO //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TYPE0 register. // //***************************************************************************** -#define MUSB_TYPE0_SPEED_M 0x00C0 // Operating Speed -#define MUSB_TYPE0_SPEED_HIGH 0x0040 // High -#define MUSB_TYPE0_SPEED_FULL 0x0080 // Full -#define MUSB_TYPE0_SPEED_LOW 0x00C0 // Low +#define MUSB_TYPE0_SPEED_M 0x00C0 // Operating Speed +#define MUSB_TYPE0_SPEED_HIGH 0x0040 // High +#define MUSB_TYPE0_SPEED_FULL 0x0080 // Full +#define MUSB_TYPE0_SPEED_LOW 0x00C0 // Low //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_NAKLMT register. // //***************************************************************************** -#define MUSB_NAKLMT_NAKLMT_M 0x001F // EP0 NAK Limit -#define MUSB_NAKLMT_NAKLMT_S 0 +#define MUSB_NAKLMT_NAKLMT_M 0x001F // EP0 NAK Limit +#define MUSB_NAKLMT_NAKLMT_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TXCSRL1 register. // //***************************************************************************** -#define MUSB_TXCSRL1_NAKTO 0x0080 // NAK Timeout -#define MUSB_TXCSRL1_CLRDT 0x0040 // Clear Data Toggle -#define MUSB_TXCSRL1_STALLED 0x0020 // Endpoint Stalled -#define MUSB_TXCSRL1_STALL 0x0010 // Send STALL -#define MUSB_TXCSRL1_SETUP 0x0010 // Setup Packet -#define MUSB_TXCSRL1_FLUSH 0x0008 // Flush FIFO -#define MUSB_TXCSRL1_ERROR 0x0004 // Error -#define MUSB_TXCSRL1_UNDRN 0x0004 // Underrun -#define MUSB_TXCSRL1_FIFONE 0x0002 // FIFO Not Empty -#define MUSB_TXCSRL1_TXRDY 0x0001 // Transmit Packet Ready +#define MUSB_TXCSRL1_NAKTO 0x0080 // NAK Timeout +#define MUSB_TXCSRL1_CLRDT 0x0040 // Clear Data Toggle +#define MUSB_TXCSRL1_STALLED 0x0020 // Endpoint Stalled +#define MUSB_TXCSRL1_STALL 0x0010 // Send STALL +#define MUSB_TXCSRL1_SETUP 0x0010 // Setup Packet +#define MUSB_TXCSRL1_FLUSH 0x0008 // Flush FIFO +#define MUSB_TXCSRL1_ERROR 0x0004 // Error +#define MUSB_TXCSRL1_UNDRN 0x0004 // Underrun +#define MUSB_TXCSRL1_FIFONE 0x0002 // FIFO Not Empty +#define MUSB_TXCSRL1_TXRDY 0x0001 // Transmit Packet Ready //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TXCSRH1 register. // //***************************************************************************** -#define MUSB_TXCSRH1_AUTOSET 0x0080 // Auto Set -#define MUSB_TXCSRH1_ISO 0x0040 // Isochronous Transfers -#define MUSB_TXCSRH1_MODE 0x0020 // Mode -#define MUSB_TXCSRH1_DMAEN 0x0010 // DMA Request Enable -#define MUSB_TXCSRH1_FDT 0x0008 // Force Data Toggle -#define MUSB_TXCSRH1_DMAMOD 0x0004 // DMA Request Mode -#define MUSB_TXCSRH1_DTWE 0x0002 // Data Toggle Write Enable -#define MUSB_TXCSRH1_DT 0x0001 // Data Toggle +#define MUSB_TXCSRH1_AUTOSET 0x0080 // Auto Set +#define MUSB_TXCSRH1_ISO 0x0040 // Isochronous Transfers +#define MUSB_TXCSRH1_MODE 0x0020 // Mode +#define MUSB_TXCSRH1_DMAEN 0x0010 // DMA Request Enable +#define MUSB_TXCSRH1_FDT 0x0008 // Force Data Toggle +#define MUSB_TXCSRH1_DMAMOD 0x0004 // DMA Request Mode +#define MUSB_TXCSRH1_DTWE 0x0002 // Data Toggle Write Enable +#define MUSB_TXCSRH1_DT 0x0001 // Data Toggle //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_RXCSRL1 register. // //***************************************************************************** -#define MUSB_RXCSRL1_CLRDT 0x0080 // Clear Data Toggle -#define MUSB_RXCSRL1_STALLED 0x0040 // Endpoint Stalled -#define MUSB_RXCSRL1_STALL 0x0020 // Send STALL -#define MUSB_RXCSRL1_REQPKT 0x0020 // Request Packet -#define MUSB_RXCSRL1_FLUSH 0x0010 // Flush FIFO -#define MUSB_RXCSRL1_DATAERR 0x0008 // Data Error -#define MUSB_RXCSRL1_NAKTO 0x0008 // NAK Timeout -#define MUSB_RXCSRL1_OVER 0x0004 // Overrun -#define MUSB_RXCSRL1_ERROR 0x0004 // Error -#define MUSB_RXCSRL1_FULL 0x0002 // FIFO Full -#define MUSB_RXCSRL1_RXRDY 0x0001 // Receive Packet Ready +#define MUSB_RXCSRL1_CLRDT 0x0080 // Clear Data Toggle +#define MUSB_RXCSRL1_STALLED 0x0040 // Endpoint Stalled +#define MUSB_RXCSRL1_STALL 0x0020 // Send STALL +#define MUSB_RXCSRL1_REQPKT 0x0020 // Request Packet +#define MUSB_RXCSRL1_FLUSH 0x0010 // Flush FIFO +#define MUSB_RXCSRL1_DATAERR 0x0008 // Data Error +#define MUSB_RXCSRL1_NAKTO 0x0008 // NAK Timeout +#define MUSB_RXCSRL1_OVER 0x0004 // Overrun +#define MUSB_RXCSRL1_ERROR 0x0004 // Error +#define MUSB_RXCSRL1_FULL 0x0002 // FIFO Full +#define MUSB_RXCSRL1_RXRDY 0x0001 // Receive Packet Ready //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_RXCSRH1 register. // //***************************************************************************** -#define MUSB_RXCSRH1_AUTOCL 0x0080 // Auto Clear -#define MUSB_RXCSRH1_AUTORQ 0x0040 // Auto Request -#define MUSB_RXCSRH1_ISO 0x0040 // Isochronous Transfers -#define MUSB_RXCSRH1_DMAEN 0x0020 // DMA Request Enable -#define MUSB_RXCSRH1_DISNYET 0x0010 // Disable NYET -#define MUSB_RXCSRH1_PIDERR 0x0010 // PID Error -#define MUSB_RXCSRH1_DMAMOD 0x0008 // DMA Request Mode -#define MUSB_RXCSRH1_DTWE 0x0004 // Data Toggle Write Enable -#define MUSB_RXCSRH1_DT 0x0002 // Data Toggle -#define MUSB_RXCSRH1_INCOMPRX 0x0001 // Incomplete RX Transmission Status +#define MUSB_RXCSRH1_AUTOCL 0x0080 // Auto Clear +#define MUSB_RXCSRH1_AUTORQ 0x0040 // Auto Request +#define MUSB_RXCSRH1_ISO 0x0040 // Isochronous Transfers +#define MUSB_RXCSRH1_DMAEN 0x0020 // DMA Request Enable +#define MUSB_RXCSRH1_DISNYET 0x0010 // Disable NYET +#define MUSB_RXCSRH1_PIDERR 0x0010 // PID Error +#define MUSB_RXCSRH1_DMAMOD 0x0008 // DMA Request Mode +#define MUSB_RXCSRH1_DTWE 0x0004 // Data Toggle Write Enable +#define MUSB_RXCSRH1_DT 0x0002 // Data Toggle +#define MUSB_RXCSRH1_INCOMPRX 0x0001 // Incomplete RX Transmission Status //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TXTYPE1 register. // //***************************************************************************** -#define MUSB_TXTYPE1_SPEED_M 0x00C0 // Operating Speed -#define MUSB_TXTYPE1_SPEED_DFLT 0x0000 // Default -#define MUSB_TXTYPE1_SPEED_HIGH 0x0040 // High -#define MUSB_TXTYPE1_SPEED_FULL 0x0080 // Full -#define MUSB_TXTYPE1_SPEED_LOW 0x00C0 // Low -#define MUSB_TXTYPE1_PROTO_M 0x0030 // Protocol -#define MUSB_TXTYPE1_PROTO_CTRL 0x0000 // Control -#define MUSB_TXTYPE1_PROTO_ISOC 0x0010 // Isochronous -#define MUSB_TXTYPE1_PROTO_BULK 0x0020 // Bulk -#define MUSB_TXTYPE1_PROTO_INT 0x0030 // Interrupt -#define MUSB_TXTYPE1_TEP_M 0x000F // Target Endpoint Number -#define MUSB_TXTYPE1_TEP_S 0 +#define MUSB_TXTYPE1_SPEED_M 0x00C0 // Operating Speed +#define MUSB_TXTYPE1_SPEED_DFLT 0x0000 // Default +#define MUSB_TXTYPE1_SPEED_HIGH 0x0040 // High +#define MUSB_TXTYPE1_SPEED_FULL 0x0080 // Full +#define MUSB_TXTYPE1_SPEED_LOW 0x00C0 // Low +#define MUSB_TXTYPE1_PROTO_M 0x0030 // Protocol +#define MUSB_TXTYPE1_PROTO_CTRL 0x0000 // Control +#define MUSB_TXTYPE1_PROTO_ISOC 0x0010 // Isochronous +#define MUSB_TXTYPE1_PROTO_BULK 0x0020 // Bulk +#define MUSB_TXTYPE1_PROTO_INT 0x0030 // Interrupt +#define MUSB_TXTYPE1_TEP_M 0x000F // Target Endpoint Number +#define MUSB_TXTYPE1_TEP_S 0 //***************************************************************************** // @@ -653,8 +654,8 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ // register. // //***************************************************************************** -#define MUSB_TXINTERVAL1_NAKLMT_M 0x00FF // NAK Limit -#define MUSB_TXINTERVAL1_TXPOLL_M 0x00FF // TX Polling +#define MUSB_TXINTERVAL1_NAKLMT_M 0x00FF // NAK Limit +#define MUSB_TXINTERVAL1_TXPOLL_M 0x00FF // TX Polling #define MUSB_TXINTERVAL1_TXPOLL_S 0 #define MUSB_TXINTERVAL1_NAKLMT_S 0 @@ -663,18 +664,18 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ // The following are defines for the bit fields in the MUSB_O_RXTYPE1 register. // //***************************************************************************** -#define MUSB_RXTYPE1_SPEED_M 0x00C0 // Operating Speed -#define MUSB_RXTYPE1_SPEED_DFLT 0x0000 // Default -#define MUSB_RXTYPE1_SPEED_HIGH 0x0040 // High -#define MUSB_RXTYPE1_SPEED_FULL 0x0080 // Full -#define MUSB_RXTYPE1_SPEED_LOW 0x00C0 // Low -#define MUSB_RXTYPE1_PROTO_M 0x0030 // Protocol -#define MUSB_RXTYPE1_PROTO_CTRL 0x0000 // Control -#define MUSB_RXTYPE1_PROTO_ISOC 0x0010 // Isochronous -#define MUSB_RXTYPE1_PROTO_BULK 0x0020 // Bulk -#define MUSB_RXTYPE1_PROTO_INT 0x0030 // Interrupt -#define MUSB_RXTYPE1_TEP_M 0x000F // Target Endpoint Number -#define MUSB_RXTYPE1_TEP_S 0 +#define MUSB_RXTYPE1_SPEED_M 0x00C0 // Operating Speed +#define MUSB_RXTYPE1_SPEED_DFLT 0x0000 // Default +#define MUSB_RXTYPE1_SPEED_HIGH 0x0040 // High +#define MUSB_RXTYPE1_SPEED_FULL 0x0080 // Full +#define MUSB_RXTYPE1_SPEED_LOW 0x00C0 // Low +#define MUSB_RXTYPE1_PROTO_M 0x0030 // Protocol +#define MUSB_RXTYPE1_PROTO_CTRL 0x0000 // Control +#define MUSB_RXTYPE1_PROTO_ISOC 0x0010 // Isochronous +#define MUSB_RXTYPE1_PROTO_BULK 0x0020 // Bulk +#define MUSB_RXTYPE1_PROTO_INT 0x0030 // Interrupt +#define MUSB_RXTYPE1_TEP_M 0x000F // Target Endpoint Number +#define MUSB_RXTYPE1_TEP_S 0 //***************************************************************************** // @@ -682,8 +683,8 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ // register. // //***************************************************************************** -#define MUSB_RXINTERVAL1_TXPOLL_M 0x00FF // RX Polling -#define MUSB_RXINTERVAL1_NAKLMT_M 0x00FF // NAK Limit +#define MUSB_RXINTERVAL1_TXPOLL_M 0x00FF // RX Polling +#define MUSB_RXINTERVAL1_NAKLMT_M 0x00FF // NAK Limit #define MUSB_RXINTERVAL1_TXPOLL_S 0 #define MUSB_RXINTERVAL1_NAKLMT_S 0 @@ -692,28 +693,30 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ // The following are defines for the bit fields in the MUSB_O_DMACTL0 register. // //***************************************************************************** -#define MUSB_DMACTL0_BRSTM_M 0x0600 // Burst Mode -#define MUSB_DMACTL0_BRSTM_ANY 0x0000 // Bursts of unspecified length -#define MUSB_DMACTL0_BRSTM_INC4 0x0200 // INCR4 or unspecified length -#define MUSB_DMACTL0_BRSTM_INC8 0x0400 // INCR8, INCR4 or unspecified - // length -#define MUSB_DMACTL0_BRSTM_INC16 0x0600 // INCR16, INCR8, INCR4 or - // unspecified length -#define MUSB_DMACTL0_ERR 0x0100 // Bus Error Bit -#define MUSB_DMACTL0_EP_M 0x00F0 // Endpoint number -#define MUSB_DMACTL0_IE 0x0008 // DMA Interrupt Enable -#define MUSB_DMACTL0_MODE 0x0004 // DMA Transfer Mode -#define MUSB_DMACTL0_DIR 0x0002 // DMA Direction -#define MUSB_DMACTL0_ENABLE 0x0001 // DMA Transfer Enable -#define MUSB_DMACTL0_EP_S 4 +#define MUSB_DMACTL0_BRSTM_M 0x0600 // Burst Mode +#define MUSB_DMACTL0_BRSTM_ANY 0x0000 // Bursts of unspecified length +#define MUSB_DMACTL0_BRSTM_INC4 0x0200 // INCR4 or unspecified length +#define MUSB_DMACTL0_BRSTM_INC8 \ + 0x0400 // INCR8, INCR4 or unspecified \ + // length +#define MUSB_DMACTL0_BRSTM_INC16 \ + 0x0600 // INCR16, INCR8, INCR4 or \ + // unspecified length +#define MUSB_DMACTL0_ERR 0x0100 // Bus Error Bit +#define MUSB_DMACTL0_EP_M 0x00F0 // Endpoint number +#define MUSB_DMACTL0_IE 0x0008 // DMA Interrupt Enable +#define MUSB_DMACTL0_MODE 0x0004 // DMA Transfer Mode +#define MUSB_DMACTL0_DIR 0x0002 // DMA Direction +#define MUSB_DMACTL0_ENABLE 0x0001 // DMA Transfer Enable +#define MUSB_DMACTL0_EP_S 4 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_DMAADDR0 register. // //***************************************************************************** -#define MUSB_DMAADDR0_ADDR_M 0xFFFFFFFC // DMA Address -#define MUSB_DMAADDR0_ADDR_S 2 +#define MUSB_DMAADDR0_ADDR_M 0xFFFFFFFC // DMA Address +#define MUSB_DMAADDR0_ADDR_S 2 //***************************************************************************** // @@ -721,36 +724,37 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_ // register. // //***************************************************************************** -#define MUSB_DMACOUNT0_COUNT_M 0xFFFFFFFC // DMA Count -#define MUSB_DMACOUNT0_COUNT_S 2 +#define MUSB_DMACOUNT0_COUNT_M 0xFFFFFFFC // DMA Count +#define MUSB_DMACOUNT0_COUNT_S 2 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CTO register. // //***************************************************************************** -#define MUSB_CTO_CCTV_M 0xFFFF // Configurable Chirp Timeout Value -#define MUSB_CTO_CCTV_S 0 +#define MUSB_CTO_CCTV_M 0xFFFF // Configurable Chirp Timeout Value +#define MUSB_CTO_CCTV_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_HHSRTN register. // //***************************************************************************** -#define MUSB_HHSRTN_HHSRTN_M 0xFFFF // HIgh Speed to UTM Operating - // Delay -#define MUSB_HHSRTN_HHSRTN_S 0 +#define MUSB_HHSRTN_HHSRTN_M \ + 0xFFFF // HIgh Speed to UTM Operating \ + // Delay +#define MUSB_HHSRTN_HHSRTN_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_HSBT register. // //***************************************************************************** -#define MUSB_HSBT_HSBT_M 0x000F // High Speed Timeout Adder -#define MUSB_HSBT_HSBT_S 0 +#define MUSB_HSBT_HSBT_M 0x000F // High Speed Timeout Adder +#define MUSB_HSBT_HSBT_S 0 #ifdef __cplusplus - } +} #endif #endif diff --git a/Libraries/tinyusb/src/tusb.c b/Libraries/tinyusb/src/tusb.c index 860e8ac350c..a71deb399e6 100644 --- a/Libraries/tinyusb/src/tusb.c +++ b/Libraries/tinyusb/src/tusb.c @@ -43,325 +43,350 @@ // Public API //--------------------------------------------------------------------+ -bool tusb_init(void) { - #if CFG_TUD_ENABLED && defined(TUD_OPT_RHPORT) - // init device stack CFG_TUSB_RHPORTx_MODE must be defined - TU_ASSERT ( tud_init(TUD_OPT_RHPORT) ); - #endif - - #if CFG_TUH_ENABLED && defined(TUH_OPT_RHPORT) - // init host stack CFG_TUSB_RHPORTx_MODE must be defined - TU_ASSERT( tuh_init(TUH_OPT_RHPORT) ); - #endif - - return true; +bool tusb_init(void) +{ +#if CFG_TUD_ENABLED && defined(TUD_OPT_RHPORT) + // init device stack CFG_TUSB_RHPORTx_MODE must be defined + TU_ASSERT(tud_init(TUD_OPT_RHPORT)); +#endif + +#if CFG_TUH_ENABLED && defined(TUH_OPT_RHPORT) + // init host stack CFG_TUSB_RHPORTx_MODE must be defined + TU_ASSERT(tuh_init(TUH_OPT_RHPORT)); +#endif + + return true; } -bool tusb_inited(void) { - bool ret = false; +bool tusb_inited(void) +{ + bool ret = false; - #if CFG_TUD_ENABLED - ret = ret || tud_inited(); - #endif +#if CFG_TUD_ENABLED + ret = ret || tud_inited(); +#endif - #if CFG_TUH_ENABLED - ret = ret || tuh_inited(); - #endif +#if CFG_TUH_ENABLED + ret = ret || tuh_inited(); +#endif - return ret; + return ret; } //--------------------------------------------------------------------+ // Descriptor helper //--------------------------------------------------------------------+ -uint8_t const* tu_desc_find(uint8_t const* desc, uint8_t const* end, uint8_t byte1) { - while (desc + 1 < end) { - if (desc[1] == byte1) return desc; - desc += desc[DESC_OFFSET_LEN]; - } - return NULL; +uint8_t const *tu_desc_find(uint8_t const *desc, uint8_t const *end, uint8_t byte1) +{ + while (desc + 1 < end) { + if (desc[1] == byte1) + return desc; + desc += desc[DESC_OFFSET_LEN]; + } + return NULL; } -uint8_t const* tu_desc_find2(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2) { - while (desc + 2 < end) { - if (desc[1] == byte1 && desc[2] == byte2) return desc; - desc += desc[DESC_OFFSET_LEN]; - } - return NULL; +uint8_t const *tu_desc_find2(uint8_t const *desc, uint8_t const *end, uint8_t byte1, uint8_t byte2) +{ + while (desc + 2 < end) { + if (desc[1] == byte1 && desc[2] == byte2) + return desc; + desc += desc[DESC_OFFSET_LEN]; + } + return NULL; } -uint8_t const* tu_desc_find3(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2, uint8_t byte3) { - while (desc + 3 < end) { - if (desc[1] == byte1 && desc[2] == byte2 && desc[3] == byte3) return desc; - desc += desc[DESC_OFFSET_LEN]; - } - return NULL; +uint8_t const *tu_desc_find3(uint8_t const *desc, uint8_t const *end, uint8_t byte1, uint8_t byte2, + uint8_t byte3) +{ + while (desc + 3 < end) { + if (desc[1] == byte1 && desc[2] == byte2 && desc[3] == byte3) + return desc; + desc += desc[DESC_OFFSET_LEN]; + } + return NULL; } //--------------------------------------------------------------------+ // Endpoint Helper for both Host and Device stack //--------------------------------------------------------------------+ -bool tu_edpt_claim(tu_edpt_state_t* ep_state, osal_mutex_t mutex) { - (void) mutex; +bool tu_edpt_claim(tu_edpt_state_t *ep_state, osal_mutex_t mutex) +{ + (void)mutex; - // pre-check to help reducing mutex lock - TU_VERIFY((ep_state->busy == 0) && (ep_state->claimed == 0)); - (void) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); + // pre-check to help reducing mutex lock + TU_VERIFY((ep_state->busy == 0) && (ep_state->claimed == 0)); + (void)osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); - // can only claim the endpoint if it is not busy and not claimed yet. - bool const available = (ep_state->busy == 0) && (ep_state->claimed == 0); - if (available) { - ep_state->claimed = 1; - } + // can only claim the endpoint if it is not busy and not claimed yet. + bool const available = (ep_state->busy == 0) && (ep_state->claimed == 0); + if (available) { + ep_state->claimed = 1; + } - (void) osal_mutex_unlock(mutex); - return available; + (void)osal_mutex_unlock(mutex); + return available; } -bool tu_edpt_release(tu_edpt_state_t* ep_state, osal_mutex_t mutex) { - (void) mutex; - (void) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); +bool tu_edpt_release(tu_edpt_state_t *ep_state, osal_mutex_t mutex) +{ + (void)mutex; + (void)osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); - // can only release the endpoint if it is claimed and not busy - bool const ret = (ep_state->claimed == 1) && (ep_state->busy == 0); - if (ret) { - ep_state->claimed = 0; - } + // can only release the endpoint if it is claimed and not busy + bool const ret = (ep_state->claimed == 1) && (ep_state->busy == 0); + if (ret) { + ep_state->claimed = 0; + } - (void) osal_mutex_unlock(mutex); - return ret; + (void)osal_mutex_unlock(mutex); + return ret; } -bool tu_edpt_validate(tusb_desc_endpoint_t const* desc_ep, tusb_speed_t speed) { - uint16_t const max_packet_size = tu_edpt_packet_size(desc_ep); - TU_LOG2(" Open EP %02X with Size = %u\r\n", desc_ep->bEndpointAddress, max_packet_size); +bool tu_edpt_validate(tusb_desc_endpoint_t const *desc_ep, tusb_speed_t speed) +{ + uint16_t const max_packet_size = tu_edpt_packet_size(desc_ep); + TU_LOG2(" Open EP %02X with Size = %u\r\n", desc_ep->bEndpointAddress, max_packet_size); - switch (desc_ep->bmAttributes.xfer) { + switch (desc_ep->bmAttributes.xfer) { case TUSB_XFER_ISOCHRONOUS: { - uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 1023); - TU_ASSERT(max_packet_size <= spec_size); - break; + uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 1023); + TU_ASSERT(max_packet_size <= spec_size); + break; } case TUSB_XFER_BULK: - if (speed == TUSB_SPEED_HIGH) { - // Bulk highspeed must be EXACTLY 512 - TU_ASSERT(max_packet_size == 512); - } else { - // TODO Bulk fullspeed can only be 8, 16, 32, 64 - TU_ASSERT(max_packet_size <= 64); - } - break; + if (speed == TUSB_SPEED_HIGH) { + // Bulk highspeed must be EXACTLY 512 + TU_ASSERT(max_packet_size == 512); + } else { + // TODO Bulk fullspeed can only be 8, 16, 32, 64 + TU_ASSERT(max_packet_size <= 64); + } + break; case TUSB_XFER_INTERRUPT: { - uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 64); - TU_ASSERT(max_packet_size <= spec_size); - break; + uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 64); + TU_ASSERT(max_packet_size <= spec_size); + break; } default: - return false; - } + return false; + } - return true; + return true; } -void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const* desc_itf, uint16_t desc_len, - uint8_t driver_id) { - uint8_t const* p_desc = (uint8_t const*) desc_itf; - uint8_t const* desc_end = p_desc + desc_len; - - while (p_desc < desc_end) { - if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { - uint8_t const ep_addr = ((tusb_desc_endpoint_t const*) p_desc)->bEndpointAddress; - TU_LOG(2, " Bind EP %02x to driver id %u\r\n", ep_addr, driver_id); - ep2drv[tu_edpt_number(ep_addr)][tu_edpt_dir(ep_addr)] = driver_id; +void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const *desc_itf, + uint16_t desc_len, uint8_t driver_id) +{ + uint8_t const *p_desc = (uint8_t const *)desc_itf; + uint8_t const *desc_end = p_desc + desc_len; + + while (p_desc < desc_end) { + if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { + uint8_t const ep_addr = ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress; + TU_LOG(2, " Bind EP %02x to driver id %u\r\n", ep_addr, driver_id); + ep2drv[tu_edpt_number(ep_addr)][tu_edpt_dir(ep_addr)] = driver_id; + } + p_desc = tu_desc_next(p_desc); } - p_desc = tu_desc_next(p_desc); - } } -uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const* desc_itf, uint8_t itf_count, uint16_t max_len) { - uint8_t const* p_desc = (uint8_t const*) desc_itf; - uint16_t len = 0; - - while (itf_count--) { - // Next on interface desc - len += tu_desc_len(desc_itf); - p_desc = tu_desc_next(p_desc); - - while (len < max_len) { - // return on IAD regardless of itf count - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE_ASSOCIATION) { - return len; - } - if ((tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) && - ((tusb_desc_interface_t const*) p_desc)->bAlternateSetting == 0) { - break; - } - - len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); +uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const *desc_itf, uint8_t itf_count, + uint16_t max_len) +{ + uint8_t const *p_desc = (uint8_t const *)desc_itf; + uint16_t len = 0; + + while (itf_count--) { + // Next on interface desc + len += tu_desc_len(desc_itf); + p_desc = tu_desc_next(p_desc); + + while (len < max_len) { + // return on IAD regardless of itf count + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE_ASSOCIATION) { + return len; + } + if ((tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) && + ((tusb_desc_interface_t const *)p_desc)->bAlternateSetting == 0) { + break; + } + + len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } } - } - return len; + return len; } //--------------------------------------------------------------------+ // Endpoint Stream Helper for both Host and Device stack //--------------------------------------------------------------------+ -bool tu_edpt_stream_init(tu_edpt_stream_t* s, bool is_host, bool is_tx, bool overwritable, - void* ff_buf, uint16_t ff_bufsize, uint8_t* ep_buf, uint16_t ep_bufsize) { - osal_mutex_t new_mutex = osal_mutex_create(&s->ff_mutexdef); - (void) new_mutex; - (void) is_tx; +bool tu_edpt_stream_init(tu_edpt_stream_t *s, bool is_host, bool is_tx, bool overwritable, + void *ff_buf, uint16_t ff_bufsize, uint8_t *ep_buf, uint16_t ep_bufsize) +{ + osal_mutex_t new_mutex = osal_mutex_create(&s->ff_mutexdef); + (void)new_mutex; + (void)is_tx; - s->is_host = is_host; - tu_fifo_config(&s->ff, ff_buf, ff_bufsize, 1, overwritable); - tu_fifo_config_mutex(&s->ff, is_tx ? new_mutex : NULL, is_tx ? NULL : new_mutex); + s->is_host = is_host; + tu_fifo_config(&s->ff, ff_buf, ff_bufsize, 1, overwritable); + tu_fifo_config_mutex(&s->ff, is_tx ? new_mutex : NULL, is_tx ? NULL : new_mutex); - s->ep_buf = ep_buf; - s->ep_bufsize = ep_bufsize; + s->ep_buf = ep_buf; + s->ep_bufsize = ep_bufsize; - return true; + return true; } -bool tu_edpt_stream_deinit(tu_edpt_stream_t* s) { - (void) s; - #if OSAL_MUTEX_REQUIRED - if (s->ff.mutex_wr) osal_mutex_delete(s->ff.mutex_wr); - if (s->ff.mutex_rd) osal_mutex_delete(s->ff.mutex_rd); - #endif - return true; +bool tu_edpt_stream_deinit(tu_edpt_stream_t *s) +{ + (void)s; +#if OSAL_MUTEX_REQUIRED + if (s->ff.mutex_wr) + osal_mutex_delete(s->ff.mutex_wr); + if (s->ff.mutex_rd) + osal_mutex_delete(s->ff.mutex_rd); +#endif + return true; } -TU_ATTR_ALWAYS_INLINE static inline -bool stream_claim(tu_edpt_stream_t* s) { - if (s->is_host) { - #if CFG_TUH_ENABLED - return usbh_edpt_claim(s->daddr, s->ep_addr); - #endif - } else { - #if CFG_TUD_ENABLED - return usbd_edpt_claim(s->rhport, s->ep_addr); - #endif - } - return false; +TU_ATTR_ALWAYS_INLINE static inline bool stream_claim(tu_edpt_stream_t *s) +{ + if (s->is_host) { +#if CFG_TUH_ENABLED + return usbh_edpt_claim(s->daddr, s->ep_addr); +#endif + } else { +#if CFG_TUD_ENABLED + return usbd_edpt_claim(s->rhport, s->ep_addr); +#endif + } + return false; } -TU_ATTR_ALWAYS_INLINE static inline -bool stream_xfer(tu_edpt_stream_t* s, uint16_t count) { - if (s->is_host) { - #if CFG_TUH_ENABLED - return usbh_edpt_xfer(s->daddr, s->ep_addr, count ? s->ep_buf : NULL, count); - #endif - } else { - #if CFG_TUD_ENABLED - return usbd_edpt_xfer(s->rhport, s->ep_addr, count ? s->ep_buf : NULL, count); - #endif - } - return false; +TU_ATTR_ALWAYS_INLINE static inline bool stream_xfer(tu_edpt_stream_t *s, uint16_t count) +{ + if (s->is_host) { +#if CFG_TUH_ENABLED + return usbh_edpt_xfer(s->daddr, s->ep_addr, count ? s->ep_buf : NULL, count); +#endif + } else { +#if CFG_TUD_ENABLED + return usbd_edpt_xfer(s->rhport, s->ep_addr, count ? s->ep_buf : NULL, count); +#endif + } + return false; } -TU_ATTR_ALWAYS_INLINE static inline -bool stream_release(tu_edpt_stream_t* s) { - if (s->is_host) { - #if CFG_TUH_ENABLED - return usbh_edpt_release(s->daddr, s->ep_addr); - #endif - } else { - #if CFG_TUD_ENABLED - return usbd_edpt_release(s->rhport, s->ep_addr); - #endif - } - return false; +TU_ATTR_ALWAYS_INLINE static inline bool stream_release(tu_edpt_stream_t *s) +{ + if (s->is_host) { +#if CFG_TUH_ENABLED + return usbh_edpt_release(s->daddr, s->ep_addr); +#endif + } else { +#if CFG_TUD_ENABLED + return usbd_edpt_release(s->rhport, s->ep_addr); +#endif + } + return false; } //--------------------------------------------------------------------+ // Stream Write //--------------------------------------------------------------------+ -bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t* s, uint32_t last_xferred_bytes) { - // ZLP condition: no pending data, last transferred bytes is multiple of packet size - TU_VERIFY(!tu_fifo_count(&s->ff) && last_xferred_bytes && (0 == (last_xferred_bytes & (s->ep_packetsize - 1)))); - TU_VERIFY(stream_claim(s)); - TU_ASSERT(stream_xfer(s, 0)); - return true; +bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t *s, uint32_t last_xferred_bytes) +{ + // ZLP condition: no pending data, last transferred bytes is multiple of packet size + TU_VERIFY(!tu_fifo_count(&s->ff) && last_xferred_bytes && + (0 == (last_xferred_bytes & (s->ep_packetsize - 1)))); + TU_VERIFY(stream_claim(s)); + TU_ASSERT(stream_xfer(s, 0)); + return true; } -uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t* s) { - // skip if no data - TU_VERIFY(tu_fifo_count(&s->ff), 0); - - // Claim the endpoint - TU_VERIFY(stream_claim(s), 0); - - // Pull data from FIFO -> EP buf - uint16_t const count = tu_fifo_read_n(&s->ff, s->ep_buf, s->ep_bufsize); - - if (count) { - TU_ASSERT(stream_xfer(s, count), 0); - return count; - } else { - // Release endpoint since we don't make any transfer - // Note: data is dropped if terminal is not connected - stream_release(s); - return 0; - } +uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t *s) +{ + // skip if no data + TU_VERIFY(tu_fifo_count(&s->ff), 0); + + // Claim the endpoint + TU_VERIFY(stream_claim(s), 0); + + // Pull data from FIFO -> EP buf + uint16_t const count = tu_fifo_read_n(&s->ff, s->ep_buf, s->ep_bufsize); + + if (count) { + TU_ASSERT(stream_xfer(s, count), 0); + return count; + } else { + // Release endpoint since we don't make any transfer + // Note: data is dropped if terminal is not connected + stream_release(s); + return 0; + } } -uint32_t tu_edpt_stream_write(tu_edpt_stream_t* s, void const* buffer, uint32_t bufsize) { - TU_VERIFY(bufsize); // TODO support ZLP - uint16_t ret = tu_fifo_write_n(&s->ff, buffer, (uint16_t) bufsize); +uint32_t tu_edpt_stream_write(tu_edpt_stream_t *s, void const *buffer, uint32_t bufsize) +{ + TU_VERIFY(bufsize); // TODO support ZLP + uint16_t ret = tu_fifo_write_n(&s->ff, buffer, (uint16_t)bufsize); - // flush if fifo has more than packet size or - // in rare case: fifo depth is configured too small (which never reach packet size) - if ((tu_fifo_count(&s->ff) >= s->ep_packetsize) || (tu_fifo_depth(&s->ff) < s->ep_packetsize)) { - tu_edpt_stream_write_xfer(s); - } + // flush if fifo has more than packet size or + // in rare case: fifo depth is configured too small (which never reach packet size) + if ((tu_fifo_count(&s->ff) >= s->ep_packetsize) || (tu_fifo_depth(&s->ff) < s->ep_packetsize)) { + tu_edpt_stream_write_xfer(s); + } - return ret; + return ret; } //--------------------------------------------------------------------+ // Stream Read //--------------------------------------------------------------------+ -uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t* s) { - uint16_t available = tu_fifo_remaining(&s->ff); - - // Prepare for incoming data but only allow what we can store in the ring buffer. - // TODO Actually we can still carry out the transfer, keeping count of received bytes - // and slowly move it to the FIFO when read(). - // This pre-check reduces endpoint claiming - TU_VERIFY(available >= s->ep_packetsize); - - // claim endpoint - TU_VERIFY(stream_claim(s), 0); - - // get available again since fifo can be changed before endpoint is claimed - available = tu_fifo_remaining(&s->ff); - - if (available >= s->ep_packetsize) { - // multiple of packet size limit by ep bufsize - uint16_t count = (uint16_t) (available & ~(s->ep_packetsize - 1)); - count = tu_min16(count, s->ep_bufsize); - - TU_ASSERT(stream_xfer(s, count), 0); - return count; - } else { - // Release endpoint since we don't make any transfer - stream_release(s); - return 0; - } +uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t *s) +{ + uint16_t available = tu_fifo_remaining(&s->ff); + + // Prepare for incoming data but only allow what we can store in the ring buffer. + // TODO Actually we can still carry out the transfer, keeping count of received bytes + // and slowly move it to the FIFO when read(). + // This pre-check reduces endpoint claiming + TU_VERIFY(available >= s->ep_packetsize); + + // claim endpoint + TU_VERIFY(stream_claim(s), 0); + + // get available again since fifo can be changed before endpoint is claimed + available = tu_fifo_remaining(&s->ff); + + if (available >= s->ep_packetsize) { + // multiple of packet size limit by ep bufsize + uint16_t count = (uint16_t)(available & ~(s->ep_packetsize - 1)); + count = tu_min16(count, s->ep_bufsize); + + TU_ASSERT(stream_xfer(s, count), 0); + return count; + } else { + // Release endpoint since we don't make any transfer + stream_release(s); + return 0; + } } -uint32_t tu_edpt_stream_read(tu_edpt_stream_t* s, void* buffer, uint32_t bufsize) { - uint32_t num_read = tu_fifo_read_n(&s->ff, buffer, (uint16_t) bufsize); - tu_edpt_stream_read_xfer(s); - return num_read; +uint32_t tu_edpt_stream_read(tu_edpt_stream_t *s, void *buffer, uint32_t bufsize) +{ + uint32_t num_read = tu_fifo_read_n(&s->ff, buffer, (uint16_t)bufsize); + tu_edpt_stream_read_xfer(s); + return num_read; } //--------------------------------------------------------------------+ @@ -372,36 +397,25 @@ uint32_t tu_edpt_stream_read(tu_edpt_stream_t* s, void* buffer, uint32_t bufsize #include #if CFG_TUSB_DEBUG >= CFG_TUH_LOG_LEVEL || CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL -char const* const tu_str_speed[] = {"Full", "Low", "High"}; -char const* const tu_str_std_request[] = { - "Get Status", - "Clear Feature", - "Reserved", - "Set Feature", - "Reserved", - "Set Address", - "Get Descriptor", - "Set Descriptor", - "Get Configuration", - "Set Configuration", - "Get Interface", - "Set Interface", - "Synch Frame" +char const *const tu_str_speed[] = { "Full", "Low", "High" }; +char const *const tu_str_std_request[] = { + "Get Status", "Clear Feature", "Reserved", "Set Feature", "Reserved", + "Set Address", "Get Descriptor", "Set Descriptor", "Get Configuration", "Set Configuration", + "Get Interface", "Set Interface", "Synch Frame" }; -char const* const tu_str_xfer_result[] = { - "OK", "FAILED", "STALLED", "TIMEOUT" -}; +char const *const tu_str_xfer_result[] = { "OK", "FAILED", "STALLED", "TIMEOUT" }; #endif -static void dump_str_line(uint8_t const* buf, uint16_t count) { - tu_printf(" |"); - // each line is 16 bytes - for (uint16_t i = 0; i < count; i++) { - int ch = buf[i]; - tu_printf("%c", isprint(ch) ? ch : '.'); - } - tu_printf("|\r\n"); +static void dump_str_line(uint8_t const *buf, uint16_t count) +{ + tu_printf(" |"); + // each line is 16 bytes + for (uint16_t i = 0; i < count; i++) { + int ch = buf[i]; + tu_printf("%c", isprint(ch) ? ch : '.'); + } + tu_printf("|\r\n"); } /* Print out memory contents @@ -409,47 +423,49 @@ static void dump_str_line(uint8_t const* buf, uint16_t count) { * - count : number of item * - indent: prefix spaces on every line */ -void tu_print_mem(void const* buf, uint32_t count, uint8_t indent) { - uint8_t const size = 1; // fixed 1 byte for now - if (!buf || !count) { - tu_printf("NULL\r\n"); - return; - } - - uint8_t const* buf8 = (uint8_t const*) buf; - char format[] = "%00X"; - format[2] += (uint8_t) (2 * size); // 1 byte = 2 hex digits - const uint8_t item_per_line = 16 / size; - - for (unsigned int i = 0; i < count; i++) { - unsigned int value = 0; - - if (i % item_per_line == 0) { - // Print Ascii - if (i != 0) dump_str_line(buf8 - 16, 16); - for (uint8_t s = 0; s < indent; s++) tu_printf(" "); - // print offset or absolute address - tu_printf("%04X: ", 16 * i / item_per_line); +void tu_print_mem(void const *buf, uint32_t count, uint8_t indent) +{ + uint8_t const size = 1; // fixed 1 byte for now + if (!buf || !count) { + tu_printf("NULL\r\n"); + return; } - tu_memcpy_s(&value, sizeof(value), buf8, size); - buf8 += size; + uint8_t const *buf8 = (uint8_t const *)buf; + char format[] = "%00X"; + format[2] += (uint8_t)(2 * size); // 1 byte = 2 hex digits + const uint8_t item_per_line = 16 / size; + + for (unsigned int i = 0; i < count; i++) { + unsigned int value = 0; + + if (i % item_per_line == 0) { + // Print Ascii + if (i != 0) + dump_str_line(buf8 - 16, 16); + for (uint8_t s = 0; s < indent; s++) tu_printf(" "); + // print offset or absolute address + tu_printf("%04X: ", 16 * i / item_per_line); + } - tu_printf(" "); - tu_printf(format, value); - } + tu_memcpy_s(&value, sizeof(value), buf8, size); + buf8 += size; + + tu_printf(" "); + tu_printf(format, value); + } - // fill up last row to 16 for printing ascii - const uint32_t remain = count % 16; - uint8_t nback = (uint8_t) (remain ? remain : 16); - if (remain) { - for (uint32_t i = 0; i < 16 - remain; i++) { - tu_printf(" "); - for (int j = 0; j < 2 * size; j++) tu_printf(" "); + // fill up last row to 16 for printing ascii + const uint32_t remain = count % 16; + uint8_t nback = (uint8_t)(remain ? remain : 16); + if (remain) { + for (uint32_t i = 0; i < 16 - remain; i++) { + tu_printf(" "); + for (int j = 0; j < 2 * size; j++) tu_printf(" "); + } } - } - dump_str_line(buf8 - nback, nback); + dump_str_line(buf8 - nback, nback); } #endif diff --git a/Libraries/tinyusb/src/tusb.h b/Libraries/tinyusb/src/tusb.h index 4f69a141403..9aad1685b94 100644 --- a/Libraries/tinyusb/src/tusb.h +++ b/Libraries/tinyusb/src/tusb.h @@ -28,7 +28,7 @@ #define _TUSB_H_ #ifdef __cplusplus - extern "C" { +extern "C" { #endif //--------------------------------------------------------------------+ @@ -40,91 +40,90 @@ //------------- TypeC -------------// #if CFG_TUC_ENABLED - #include "typec/usbc.h" +#include "typec/usbc.h" #endif //------------- HOST -------------// #if CFG_TUH_ENABLED - #include "host/usbh.h" +#include "host/usbh.h" - #if CFG_TUH_HID - #include "class/hid/hid_host.h" - #endif +#if CFG_TUH_HID +#include "class/hid/hid_host.h" +#endif - #if CFG_TUH_MSC - #include "class/msc/msc_host.h" - #endif +#if CFG_TUH_MSC +#include "class/msc/msc_host.h" +#endif - #if CFG_TUH_CDC - #include "class/cdc/cdc_host.h" - #endif +#if CFG_TUH_CDC +#include "class/cdc/cdc_host.h" +#endif - #if CFG_TUH_VENDOR - #include "class/vendor/vendor_host.h" - #endif +#if CFG_TUH_VENDOR +#include "class/vendor/vendor_host.h" +#endif #else - #ifndef tuh_int_handler - #define tuh_int_handler(...) - #endif +#ifndef tuh_int_handler +#define tuh_int_handler(...) +#endif #endif //------------- DEVICE -------------// #if CFG_TUD_ENABLED - #include "device/usbd.h" +#include "device/usbd.h" - #if CFG_TUD_HID - #include "class/hid/hid_device.h" - #endif +#if CFG_TUD_HID +#include "class/hid/hid_device.h" +#endif - #if CFG_TUD_CDC - #include "class/cdc/cdc_device.h" - #endif +#if CFG_TUD_CDC +#include "class/cdc/cdc_device.h" +#endif - #if CFG_TUD_MSC - #include "class/msc/msc_device.h" - #endif +#if CFG_TUD_MSC +#include "class/msc/msc_device.h" +#endif - #if CFG_TUD_AUDIO - #include "class/audio/audio_device.h" - #endif +#if CFG_TUD_AUDIO +#include "class/audio/audio_device.h" +#endif - #if CFG_TUD_VIDEO - #include "class/video/video_device.h" - #endif +#if CFG_TUD_VIDEO +#include "class/video/video_device.h" +#endif - #if CFG_TUD_MIDI - #include "class/midi/midi_device.h" - #endif +#if CFG_TUD_MIDI +#include "class/midi/midi_device.h" +#endif - #if CFG_TUD_VENDOR - #include "class/vendor/vendor_device.h" - #endif +#if CFG_TUD_VENDOR +#include "class/vendor/vendor_device.h" +#endif - #if CFG_TUD_USBTMC - #include "class/usbtmc/usbtmc_device.h" - #endif +#if CFG_TUD_USBTMC +#include "class/usbtmc/usbtmc_device.h" +#endif - #if CFG_TUD_DFU_RUNTIME - #include "class/dfu/dfu_rt_device.h" - #endif +#if CFG_TUD_DFU_RUNTIME +#include "class/dfu/dfu_rt_device.h" +#endif - #if CFG_TUD_DFU - #include "class/dfu/dfu_device.h" - #endif +#if CFG_TUD_DFU +#include "class/dfu/dfu_device.h" +#endif - #if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM - #include "class/net/net_device.h" - #endif +#if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM +#include "class/net/net_device.h" +#endif - #if CFG_TUD_BTH - #include "class/bth/bth_device.h" - #endif +#if CFG_TUD_BTH +#include "class/bth/bth_device.h" +#endif #else - #ifndef tud_int_handler - #define tud_int_handler(...) - #endif +#ifndef tud_int_handler +#define tud_int_handler(...) +#endif #endif - //--------------------------------------------------------------------+ // APPLICATION API @@ -142,7 +141,7 @@ bool tusb_inited(void); // bool tusb_teardown(void); #ifdef __cplusplus - } +} #endif #endif /* _TUSB_H_ */ diff --git a/Libraries/tinyusb/src/tusb_option.h b/Libraries/tinyusb/src/tusb_option.h index fb0209023d1..c1c7b8f57c3 100644 --- a/Libraries/tinyusb/src/tusb_option.h +++ b/Libraries/tinyusb/src/tusb_option.h @@ -30,202 +30,205 @@ #include "common/tusb_compiler.h" // Version is release as major.minor.revision eg 1.0.0 -#define TUSB_VERSION_MAJOR 0 -#define TUSB_VERSION_MINOR 17 -#define TUSB_VERSION_REVISION 0 +#define TUSB_VERSION_MAJOR 0 +#define TUSB_VERSION_MINOR 17 +#define TUSB_VERSION_REVISION 0 -#define TUSB_VERSION_NUMBER (TUSB_VERSION_MAJOR * 10000 + TUSB_VERSION_MINOR * 100 + TUSB_VERSION_REVISION) -#define TUSB_VERSION_STRING TU_STRING(TUSB_VERSION_MAJOR) "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION) +#define TUSB_VERSION_NUMBER \ + (TUSB_VERSION_MAJOR * 10000 + TUSB_VERSION_MINOR * 100 + TUSB_VERSION_REVISION) +#define TUSB_VERSION_STRING \ + TU_STRING(TUSB_VERSION_MAJOR) \ + "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION) //--------------------------------------------------------------------+ // Supported MCUs // CFG_TUSB_MCU must be defined to one of following value //--------------------------------------------------------------------+ -#define OPT_MCU_NONE 0 +#define OPT_MCU_NONE 0 // LPC -#define OPT_MCU_LPC11UXX 1 ///< NXP LPC11Uxx -#define OPT_MCU_LPC13XX 2 ///< NXP LPC13xx -#define OPT_MCU_LPC15XX 3 ///< NXP LPC15xx -#define OPT_MCU_LPC175X_6X 4 ///< NXP LPC175x, LPC176x -#define OPT_MCU_LPC177X_8X 5 ///< NXP LPC177x, LPC178x -#define OPT_MCU_LPC18XX 6 ///< NXP LPC18xx -#define OPT_MCU_LPC40XX 7 ///< NXP LPC40xx -#define OPT_MCU_LPC43XX 8 ///< NXP LPC43xx -#define OPT_MCU_LPC51 9 ///< NXP LPC51 -#define OPT_MCU_LPC51UXX OPT_MCU_LPC51 ///< NXP LPC51 -#define OPT_MCU_LPC54 10 ///< NXP LPC54 -#define OPT_MCU_LPC55 11 ///< NXP LPC55 +#define OPT_MCU_LPC11UXX 1 ///< NXP LPC11Uxx +#define OPT_MCU_LPC13XX 2 ///< NXP LPC13xx +#define OPT_MCU_LPC15XX 3 ///< NXP LPC15xx +#define OPT_MCU_LPC175X_6X 4 ///< NXP LPC175x, LPC176x +#define OPT_MCU_LPC177X_8X 5 ///< NXP LPC177x, LPC178x +#define OPT_MCU_LPC18XX 6 ///< NXP LPC18xx +#define OPT_MCU_LPC40XX 7 ///< NXP LPC40xx +#define OPT_MCU_LPC43XX 8 ///< NXP LPC43xx +#define OPT_MCU_LPC51 9 ///< NXP LPC51 +#define OPT_MCU_LPC51UXX OPT_MCU_LPC51 ///< NXP LPC51 +#define OPT_MCU_LPC54 10 ///< NXP LPC54 +#define OPT_MCU_LPC55 11 ///< NXP LPC55 // legacy naming -#define OPT_MCU_LPC54XXX OPT_MCU_LPC54 -#define OPT_MCU_LPC55XX OPT_MCU_LPC55 +#define OPT_MCU_LPC54XXX OPT_MCU_LPC54 +#define OPT_MCU_LPC55XX OPT_MCU_LPC55 // NRF -#define OPT_MCU_NRF5X 100 ///< Nordic nRF5x series +#define OPT_MCU_NRF5X 100 ///< Nordic nRF5x series // SAM -#define OPT_MCU_SAMD21 200 ///< MicroChip SAMD21 -#define OPT_MCU_SAMD51 201 ///< MicroChip SAMD51 -#define OPT_MCU_SAMG 202 ///< MicroChip SAMDG series -#define OPT_MCU_SAME5X 203 ///< MicroChip SAM E5x -#define OPT_MCU_SAMD11 204 ///< MicroChip SAMD11 -#define OPT_MCU_SAML22 205 ///< MicroChip SAML22 -#define OPT_MCU_SAML21 206 ///< MicroChip SAML21 -#define OPT_MCU_SAMX7X 207 ///< MicroChip SAME70, S70, V70, V71 family +#define OPT_MCU_SAMD21 200 ///< MicroChip SAMD21 +#define OPT_MCU_SAMD51 201 ///< MicroChip SAMD51 +#define OPT_MCU_SAMG 202 ///< MicroChip SAMDG series +#define OPT_MCU_SAME5X 203 ///< MicroChip SAM E5x +#define OPT_MCU_SAMD11 204 ///< MicroChip SAMD11 +#define OPT_MCU_SAML22 205 ///< MicroChip SAML22 +#define OPT_MCU_SAML21 206 ///< MicroChip SAML21 +#define OPT_MCU_SAMX7X 207 ///< MicroChip SAME70, S70, V70, V71 family // STM32 -#define OPT_MCU_STM32F0 300 ///< ST F0 -#define OPT_MCU_STM32F1 301 ///< ST F1 -#define OPT_MCU_STM32F2 302 ///< ST F2 -#define OPT_MCU_STM32F3 303 ///< ST F3 -#define OPT_MCU_STM32F4 304 ///< ST F4 -#define OPT_MCU_STM32F7 305 ///< ST F7 -#define OPT_MCU_STM32H7 306 ///< ST H7 -#define OPT_MCU_STM32L1 308 ///< ST L1 -#define OPT_MCU_STM32L0 307 ///< ST L0 -#define OPT_MCU_STM32L4 309 ///< ST L4 -#define OPT_MCU_STM32G0 310 ///< ST G0 -#define OPT_MCU_STM32G4 311 ///< ST G4 -#define OPT_MCU_STM32WB 312 ///< ST WB -#define OPT_MCU_STM32U5 313 ///< ST U5 -#define OPT_MCU_STM32L5 314 ///< ST L5 -#define OPT_MCU_STM32H5 315 ///< ST H5 +#define OPT_MCU_STM32F0 300 ///< ST F0 +#define OPT_MCU_STM32F1 301 ///< ST F1 +#define OPT_MCU_STM32F2 302 ///< ST F2 +#define OPT_MCU_STM32F3 303 ///< ST F3 +#define OPT_MCU_STM32F4 304 ///< ST F4 +#define OPT_MCU_STM32F7 305 ///< ST F7 +#define OPT_MCU_STM32H7 306 ///< ST H7 +#define OPT_MCU_STM32L1 308 ///< ST L1 +#define OPT_MCU_STM32L0 307 ///< ST L0 +#define OPT_MCU_STM32L4 309 ///< ST L4 +#define OPT_MCU_STM32G0 310 ///< ST G0 +#define OPT_MCU_STM32G4 311 ///< ST G4 +#define OPT_MCU_STM32WB 312 ///< ST WB +#define OPT_MCU_STM32U5 313 ///< ST U5 +#define OPT_MCU_STM32L5 314 ///< ST L5 +#define OPT_MCU_STM32H5 315 ///< ST H5 // Sony -#define OPT_MCU_CXD56 400 ///< SONY CXD56 +#define OPT_MCU_CXD56 400 ///< SONY CXD56 // TI -#define OPT_MCU_MSP430x5xx 500 ///< TI MSP430x5xx -#define OPT_MCU_MSP432E4 510 ///< TI MSP432E4xx -#define OPT_MCU_TM4C123 511 ///< TI Tiva-C 123x -#define OPT_MCU_TM4C129 512 ///< TI Tiva-C 129x +#define OPT_MCU_MSP430x5xx 500 ///< TI MSP430x5xx +#define OPT_MCU_MSP432E4 510 ///< TI MSP432E4xx +#define OPT_MCU_TM4C123 511 ///< TI Tiva-C 123x +#define OPT_MCU_TM4C129 512 ///< TI Tiva-C 129x // ValentyUSB eptri -#define OPT_MCU_VALENTYUSB_EPTRI 600 ///< Fomu eptri config +#define OPT_MCU_VALENTYUSB_EPTRI 600 ///< Fomu eptri config // NXP iMX RT -#define OPT_MCU_MIMXRT1XXX 700 ///< NXP iMX RT1xxx Series -#define OPT_MCU_MIMXRT10XX OPT_MCU_MIMXRT1XXX ///< RT10xx -#define OPT_MCU_MIMXRT11XX OPT_MCU_MIMXRT1XXX ///< RT11xx +#define OPT_MCU_MIMXRT1XXX 700 ///< NXP iMX RT1xxx Series +#define OPT_MCU_MIMXRT10XX OPT_MCU_MIMXRT1XXX ///< RT10xx +#define OPT_MCU_MIMXRT11XX OPT_MCU_MIMXRT1XXX ///< RT11xx // Nuvoton -#define OPT_MCU_NUC121 800 -#define OPT_MCU_NUC126 801 -#define OPT_MCU_NUC120 802 -#define OPT_MCU_NUC505 803 +#define OPT_MCU_NUC121 800 +#define OPT_MCU_NUC126 801 +#define OPT_MCU_NUC120 802 +#define OPT_MCU_NUC505 803 // Espressif -#define OPT_MCU_ESP32S2 900 ///< Espressif ESP32-S2 -#define OPT_MCU_ESP32S3 901 ///< Espressif ESP32-S3 -#define OPT_MCU_ESP32 902 ///< Espressif ESP32 (for host max3421e) -#define OPT_MCU_ESP32C3 903 ///< Espressif ESP32-C3 -#define OPT_MCU_ESP32C6 904 ///< Espressif ESP32-C6 -#define OPT_MCU_ESP32C2 905 ///< Espressif ESP32-C2 -#define OPT_MCU_ESP32H2 906 ///< Espressif ESP32-H2 -#define TUP_MCU_ESPRESSIF (CFG_TUSB_MCU >= 900 && CFG_TUSB_MCU < 1000) // check if Espressif MCU +#define OPT_MCU_ESP32S2 900 ///< Espressif ESP32-S2 +#define OPT_MCU_ESP32S3 901 ///< Espressif ESP32-S3 +#define OPT_MCU_ESP32 902 ///< Espressif ESP32 (for host max3421e) +#define OPT_MCU_ESP32C3 903 ///< Espressif ESP32-C3 +#define OPT_MCU_ESP32C6 904 ///< Espressif ESP32-C6 +#define OPT_MCU_ESP32C2 905 ///< Espressif ESP32-C2 +#define OPT_MCU_ESP32H2 906 ///< Espressif ESP32-H2 +#define TUP_MCU_ESPRESSIF (CFG_TUSB_MCU >= 900 && CFG_TUSB_MCU < 1000) // check if Espressif MCU // Dialog -#define OPT_MCU_DA1469X 1000 ///< Dialog Semiconductor DA1469x +#define OPT_MCU_DA1469X 1000 ///< Dialog Semiconductor DA1469x // Raspberry Pi -#define OPT_MCU_RP2040 1100 ///< Raspberry Pi RP2040 +#define OPT_MCU_RP2040 1100 ///< Raspberry Pi RP2040 // NXP Kinetis -#define OPT_MCU_KINETIS_KL 1200 ///< NXP KL series -#define OPT_MCU_KINETIS_K32L 1201 ///< NXP K32L series -#define OPT_MCU_KINETIS_K32 1201 ///< Alias to K32L -#define OPT_MCU_KINETIS_K 1202 ///< NXP K series +#define OPT_MCU_KINETIS_KL 1200 ///< NXP KL series +#define OPT_MCU_KINETIS_K32L 1201 ///< NXP K32L series +#define OPT_MCU_KINETIS_K32 1201 ///< Alias to K32L +#define OPT_MCU_KINETIS_K 1202 ///< NXP K series -#define OPT_MCU_MKL25ZXX 1200 ///< Alias to KL (obsolete) -#define OPT_MCU_K32L2BXX 1201 ///< Alias to K32 (obsolete) +#define OPT_MCU_MKL25ZXX 1200 ///< Alias to KL (obsolete) +#define OPT_MCU_K32L2BXX 1201 ///< Alias to K32 (obsolete) // Silabs -#define OPT_MCU_EFM32GG 1300 ///< Silabs EFM32GG +#define OPT_MCU_EFM32GG 1300 ///< Silabs EFM32GG // Renesas RX -#define OPT_MCU_RX63X 1400 ///< Renesas RX63N/631 -#define OPT_MCU_RX65X 1401 ///< Renesas RX65N/RX651 -#define OPT_MCU_RX72N 1402 ///< Renesas RX72N -#define OPT_MCU_RAXXX 1403 ///< Renesas RAxxx families +#define OPT_MCU_RX63X 1400 ///< Renesas RX63N/631 +#define OPT_MCU_RX65X 1401 ///< Renesas RX65N/RX651 +#define OPT_MCU_RX72N 1402 ///< Renesas RX72N +#define OPT_MCU_RAXXX 1403 ///< Renesas RAxxx families // Mind Motion -#define OPT_MCU_MM32F327X 1500 ///< Mind Motion MM32F327 +#define OPT_MCU_MM32F327X 1500 ///< Mind Motion MM32F327 // GigaDevice -#define OPT_MCU_GD32VF103 1600 ///< GigaDevice GD32VF103 +#define OPT_MCU_GD32VF103 1600 ///< GigaDevice GD32VF103 // Broadcom -#define OPT_MCU_BCM2711 1700 ///< Broadcom BCM2711 -#define OPT_MCU_BCM2835 1701 ///< Broadcom BCM2835 -#define OPT_MCU_BCM2837 1702 ///< Broadcom BCM2837 +#define OPT_MCU_BCM2711 1700 ///< Broadcom BCM2711 +#define OPT_MCU_BCM2835 1701 ///< Broadcom BCM2835 +#define OPT_MCU_BCM2837 1702 ///< Broadcom BCM2837 // Infineon -#define OPT_MCU_XMC4000 1800 ///< Infineon XMC4000 +#define OPT_MCU_XMC4000 1800 ///< Infineon XMC4000 // PIC -#define OPT_MCU_PIC32MZ 1900 ///< MicroChip PIC32MZ family -#define OPT_MCU_PIC32MM 1901 ///< MicroChip PIC32MM family -#define OPT_MCU_PIC32MX 1902 ///< MicroChip PIC32MX family -#define OPT_MCU_PIC32MK 1903 ///< MicroChip PIC32MK family -#define OPT_MCU_PIC24 1910 ///< MicroChip PIC24 family -#define OPT_MCU_DSPIC33 1911 ///< MicroChip DSPIC33 family +#define OPT_MCU_PIC32MZ 1900 ///< MicroChip PIC32MZ family +#define OPT_MCU_PIC32MM 1901 ///< MicroChip PIC32MM family +#define OPT_MCU_PIC32MX 1902 ///< MicroChip PIC32MX family +#define OPT_MCU_PIC32MK 1903 ///< MicroChip PIC32MK family +#define OPT_MCU_PIC24 1910 ///< MicroChip PIC24 family +#define OPT_MCU_DSPIC33 1911 ///< MicroChip DSPIC33 family // BridgeTek -#define OPT_MCU_FT90X 2000 ///< BridgeTek FT90x -#define OPT_MCU_FT93X 2001 ///< BridgeTek FT93x +#define OPT_MCU_FT90X 2000 ///< BridgeTek FT90x +#define OPT_MCU_FT93X 2001 ///< BridgeTek FT93x // Allwinner -#define OPT_MCU_F1C100S 2100 ///< Allwinner F1C100s family +#define OPT_MCU_F1C100S 2100 ///< Allwinner F1C100s family // WCH -#define OPT_MCU_CH32V307 2200 ///< WCH CH32V307 -#define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x -#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20X -#define OPT_MCU_CH32V103 2230 ///< WCH CH32V103 +#define OPT_MCU_CH32V307 2200 ///< WCH CH32V307 +#define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x +#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20X +#define OPT_MCU_CH32V103 2230 ///< WCH CH32V103 // NXP LPC MCX -#define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series -#define OPT_MCU_MCXA15 2301 ///< NXP MCX A15 Series +#define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series +#define OPT_MCU_MCXA15 2301 ///< NXP MCX A15 Series // Analog Devices -#define OPT_MCU_MAX32690 2400 ///< ADI MAX32690 -#define OPT_MCU_MAX32666 2401 ///< ADI MAX32666/5 -#define OPT_MCU_MAX32650 2402 ///< ADI MAX32650/1/2 -#define OPT_MCU_MAX78002 2403 ///< ADI MAX78002 +#define OPT_MCU_MAX32690 2400 ///< ADI MAX32690 +#define OPT_MCU_MAX32666 2401 ///< ADI MAX32666/5 +#define OPT_MCU_MAX32650 2402 ///< ADI MAX32650/1/2 +#define OPT_MCU_MAX78002 2403 ///< ADI MAX78002 // Check if configured MCU is one of listed // Apply _TU_CHECK_MCU with || as separator to list of input -#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m) -#define TU_CHECK_MCU(...) (TU_ARGS_APPLY(_TU_CHECK_MCU, ||, __VA_ARGS__)) +#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m) +#define TU_CHECK_MCU(...) (TU_ARGS_APPLY(_TU_CHECK_MCU, ||, __VA_ARGS__)) //--------------------------------------------------------------------+ // Supported OS //--------------------------------------------------------------------+ -#define OPT_OS_NONE 1 ///< No RTOS -#define OPT_OS_FREERTOS 2 ///< FreeRTOS -#define OPT_OS_MYNEWT 3 ///< Mynewt OS -#define OPT_OS_CUSTOM 4 ///< Custom OS is implemented by application -#define OPT_OS_PICO 5 ///< Raspberry Pi Pico SDK -#define OPT_OS_RTTHREAD 6 ///< RT-Thread -#define OPT_OS_RTX4 7 ///< Keil RTX 4 +#define OPT_OS_NONE 1 ///< No RTOS +#define OPT_OS_FREERTOS 2 ///< FreeRTOS +#define OPT_OS_MYNEWT 3 ///< Mynewt OS +#define OPT_OS_CUSTOM 4 ///< Custom OS is implemented by application +#define OPT_OS_PICO 5 ///< Raspberry Pi Pico SDK +#define OPT_OS_RTTHREAD 6 ///< RT-Thread +#define OPT_OS_RTX4 7 ///< Keil RTX 4 //--------------------------------------------------------------------+ // Mode and Speed //--------------------------------------------------------------------+ // Low byte is operational mode -#define OPT_MODE_NONE 0x0000 ///< Disabled -#define OPT_MODE_DEVICE 0x0001 ///< Device Mode -#define OPT_MODE_HOST 0x0002 ///< Host Mode +#define OPT_MODE_NONE 0x0000 ///< Disabled +#define OPT_MODE_DEVICE 0x0001 ///< Device Mode +#define OPT_MODE_HOST 0x0002 ///< Host Mode // High byte is max operational speed (corresponding to tusb_speed_t) -#define OPT_MODE_DEFAULT_SPEED 0x0000 ///< Default (max) speed supported by MCU -#define OPT_MODE_LOW_SPEED 0x0100 ///< Low Speed -#define OPT_MODE_FULL_SPEED 0x0200 ///< Full Speed -#define OPT_MODE_HIGH_SPEED 0x0400 ///< High Speed -#define OPT_MODE_SPEED_MASK 0xff00 +#define OPT_MODE_DEFAULT_SPEED 0x0000 ///< Default (max) speed supported by MCU +#define OPT_MODE_LOW_SPEED 0x0100 ///< Low Speed +#define OPT_MODE_FULL_SPEED 0x0200 ///< Full Speed +#define OPT_MODE_HIGH_SPEED 0x0400 ///< High Speed +#define OPT_MODE_SPEED_MASK 0xff00 //--------------------------------------------------------------------+ // Include tusb_config.h and tusb_mcu.h @@ -233,9 +236,9 @@ // Allow to use command line to change the config name/location #ifdef CFG_TUSB_CONFIG_FILE - #include CFG_TUSB_CONFIG_FILE +#include CFG_TUSB_CONFIG_FILE #else - #include "tusb_config.h" +#include "tusb_config.h" #endif #include "common/tusb_mcu.h" @@ -246,60 +249,61 @@ //------------- Root hub as Device -------------// -#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_DEVICE) - #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) - #define TUD_OPT_RHPORT 0 -#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_DEVICE) - #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) - #define TUD_OPT_RHPORT 1 +#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE)&OPT_MODE_DEVICE) +#define TUD_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) +#define TUD_OPT_RHPORT 0 +#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE)&OPT_MODE_DEVICE) +#define TUD_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) +#define TUD_OPT_RHPORT 1 #else - #define TUD_RHPORT_MODE OPT_MODE_NONE +#define TUD_RHPORT_MODE OPT_MODE_NONE #endif #ifndef CFG_TUD_ENABLED - // fallback to use CFG_TUSB_RHPORTx_MODE - #define CFG_TUD_ENABLED (TUD_RHPORT_MODE & OPT_MODE_DEVICE) +// fallback to use CFG_TUSB_RHPORTx_MODE +#define CFG_TUD_ENABLED (TUD_RHPORT_MODE & OPT_MODE_DEVICE) #endif #ifndef CFG_TUD_MAX_SPEED - // fallback to use CFG_TUSB_RHPORTx_MODE - #define CFG_TUD_MAX_SPEED (TUD_RHPORT_MODE & OPT_MODE_SPEED_MASK) +// fallback to use CFG_TUSB_RHPORTx_MODE +#define CFG_TUD_MAX_SPEED (TUD_RHPORT_MODE & OPT_MODE_SPEED_MASK) #endif // For backward compatible #define TUSB_OPT_DEVICE_ENABLED CFG_TUD_ENABLED // highspeed support indicator -#define TUD_OPT_HIGH_SPEED (CFG_TUD_MAX_SPEED ? (CFG_TUD_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) +#define TUD_OPT_HIGH_SPEED \ + (CFG_TUD_MAX_SPEED ? (CFG_TUD_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) //------------- Root hub as Host -------------// -#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_HOST) - #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) - #define TUH_OPT_RHPORT 0 -#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HOST) - #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) - #define TUH_OPT_RHPORT 1 +#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE)&OPT_MODE_HOST) +#define TUH_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) +#define TUH_OPT_RHPORT 0 +#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE)&OPT_MODE_HOST) +#define TUH_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) +#define TUH_OPT_RHPORT 1 #else - #define TUH_RHPORT_MODE OPT_MODE_NONE +#define TUH_RHPORT_MODE OPT_MODE_NONE #endif #ifndef CFG_TUH_ENABLED - // fallback to use CFG_TUSB_RHPORTx_MODE - #define CFG_TUH_ENABLED (TUH_RHPORT_MODE & OPT_MODE_HOST) +// fallback to use CFG_TUSB_RHPORTx_MODE +#define CFG_TUH_ENABLED (TUH_RHPORT_MODE & OPT_MODE_HOST) #endif #ifndef CFG_TUH_MAX_SPEED - // fallback to use CFG_TUSB_RHPORTx_MODE - #define CFG_TUH_MAX_SPEED (TUH_RHPORT_MODE & OPT_MODE_SPEED_MASK) +// fallback to use CFG_TUSB_RHPORTx_MODE +#define CFG_TUH_MAX_SPEED (TUH_RHPORT_MODE & OPT_MODE_SPEED_MASK) #endif // For backward compatible -#define TUSB_OPT_HOST_ENABLED CFG_TUH_ENABLED +#define TUSB_OPT_HOST_ENABLED CFG_TUH_ENABLED // highspeed support indicator -#define TUH_OPT_HIGH_SPEED (CFG_TUH_MAX_SPEED ? (CFG_TUH_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) - +#define TUH_OPT_HIGH_SPEED \ + (CFG_TUH_MAX_SPEED ? (CFG_TUH_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) //--------------------------------------------------------------------+ // TODO move later @@ -310,50 +314,49 @@ // to generate unaligned access code. // LPC_IP3511 Highspeed cannot access unaligned memory on USB_RAM #if TUD_OPT_HIGH_SPEED && TU_CHECK_MCU(OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX) - #define TUP_MCU_STRICT_ALIGN 1 +#define TUP_MCU_STRICT_ALIGN 1 #else - #define TUP_MCU_STRICT_ALIGN 0 +#define TUP_MCU_STRICT_ALIGN 0 #endif - //--------------------------------------------------------------------+ // Common Options (Default) //--------------------------------------------------------------------+ // Debug enable to print out error message #ifndef CFG_TUSB_DEBUG - #define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Level where CFG_TUSB_DEBUG must be at least for USBH is logged #ifndef CFG_TUH_LOG_LEVEL - #define CFG_TUH_LOG_LEVEL 2 +#define CFG_TUH_LOG_LEVEL 2 #endif // Level where CFG_TUSB_DEBUG must be at least for USBD is logged #ifndef CFG_TUD_LOG_LEVEL - #define CFG_TUD_LOG_LEVEL 2 +#define CFG_TUD_LOG_LEVEL 2 #endif // Memory section for placing buffer used for usb transferring. If MEM_SECTION is different for // host and device use: CFG_TUD_MEM_SECTION, CFG_TUH_MEM_SECTION instead #ifndef CFG_TUSB_MEM_SECTION - #define CFG_TUSB_MEM_SECTION +#define CFG_TUSB_MEM_SECTION #endif // Alignment requirement of buffer used for usb transferring. if MEM_ALIGN is different for // host and device controller use: CFG_TUD_MEM_ALIGN, CFG_TUH_MEM_ALIGN instead #ifndef CFG_TUSB_MEM_ALIGN - #define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4) +#define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4) #endif // OS selection #ifndef CFG_TUSB_OS - #define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_OS_INC_PATH - #define CFG_TUSB_OS_INC_PATH +#define CFG_TUSB_OS_INC_PATH #endif //-------------------------------------------------------------------- @@ -362,39 +365,39 @@ // Attribute to place data in accessible RAM for device controller (default: CFG_TUSB_MEM_SECTION) #ifndef CFG_TUD_MEM_SECTION - #define CFG_TUD_MEM_SECTION CFG_TUSB_MEM_SECTION +#define CFG_TUD_MEM_SECTION CFG_TUSB_MEM_SECTION #endif // Attribute to align memory for device controller (default: CFG_TUSB_MEM_ALIGN) #ifndef CFG_TUD_MEM_ALIGN - #define CFG_TUD_MEM_ALIGN CFG_TUSB_MEM_ALIGN +#define CFG_TUD_MEM_ALIGN CFG_TUSB_MEM_ALIGN #endif #ifndef CFG_TUD_ENDPOINT0_SIZE - #define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif #ifndef CFG_TUD_INTERFACE_MAX - #define CFG_TUD_INTERFACE_MAX 16 +#define CFG_TUD_INTERFACE_MAX 16 #endif // default to max hardware endpoint, but can be smaller to save RAM #ifndef CFG_TUD_ENDPPOINT_MAX - #define CFG_TUD_ENDPPOINT_MAX TUP_DCD_ENDPOINT_MAX +#define CFG_TUD_ENDPPOINT_MAX TUP_DCD_ENDPOINT_MAX #endif #if CFG_TUD_ENDPPOINT_MAX > TUP_DCD_ENDPOINT_MAX - #error "CFG_TUD_ENDPPOINT_MAX must be less than or equal to TUP_DCD_ENDPOINT_MAX" +#error "CFG_TUD_ENDPPOINT_MAX must be less than or equal to TUP_DCD_ENDPOINT_MAX" #endif // USB 2.0 7.1.20: compliance test mode support #ifndef CFG_TUD_TEST_MODE - #define CFG_TUD_TEST_MODE 0 +#define CFG_TUD_TEST_MODE 0 #endif //------------- Device Class Driver -------------// #ifndef CFG_TUD_BTH - #define CFG_TUD_BTH 0 +#define CFG_TUD_BTH 0 #endif #if CFG_TUD_BTH && !defined(CFG_TUD_BTH_ISO_ALT_COUNT) @@ -402,164 +405,171 @@ #endif #ifndef CFG_TUD_CDC - #define CFG_TUD_CDC 0 +#define CFG_TUD_CDC 0 #endif #ifndef CFG_TUD_MSC - #define CFG_TUD_MSC 0 +#define CFG_TUD_MSC 0 #endif #ifndef CFG_TUD_HID - #define CFG_TUD_HID 0 +#define CFG_TUD_HID 0 #endif #ifndef CFG_TUD_AUDIO - #define CFG_TUD_AUDIO 0 +#define CFG_TUD_AUDIO 0 #endif #ifndef CFG_TUD_VIDEO - #define CFG_TUD_VIDEO 0 +#define CFG_TUD_VIDEO 0 #endif #ifndef CFG_TUD_MIDI - #define CFG_TUD_MIDI 0 +#define CFG_TUD_MIDI 0 #endif #ifndef CFG_TUD_VENDOR - #define CFG_TUD_VENDOR 0 +#define CFG_TUD_VENDOR 0 #endif #ifndef CFG_TUD_USBTMC - #define CFG_TUD_USBTMC 0 +#define CFG_TUD_USBTMC 0 #endif #ifndef CFG_TUD_DFU_RUNTIME - #define CFG_TUD_DFU_RUNTIME 0 +#define CFG_TUD_DFU_RUNTIME 0 #endif #ifndef CFG_TUD_DFU - #define CFG_TUD_DFU 0 +#define CFG_TUD_DFU 0 #endif #ifndef CFG_TUD_ECM_RNDIS - #ifdef CFG_TUD_NET - #warning "CFG_TUD_NET is renamed to CFG_TUD_ECM_RNDIS" - #define CFG_TUD_ECM_RNDIS CFG_TUD_NET - #else - #define CFG_TUD_ECM_RNDIS 0 - #endif +#ifdef CFG_TUD_NET +#warning "CFG_TUD_NET is renamed to CFG_TUD_ECM_RNDIS" +#define CFG_TUD_ECM_RNDIS CFG_TUD_NET +#else +#define CFG_TUD_ECM_RNDIS 0 +#endif #endif #ifndef CFG_TUD_NCM - #define CFG_TUD_NCM 0 +#define CFG_TUD_NCM 0 #endif //-------------------------------------------------------------------- // Host Options (Default) //-------------------------------------------------------------------- #if CFG_TUH_ENABLED - #ifndef CFG_TUH_DEVICE_MAX - #define CFG_TUH_DEVICE_MAX 1 - #endif +#ifndef CFG_TUH_DEVICE_MAX +#define CFG_TUH_DEVICE_MAX 1 +#endif - #ifndef CFG_TUH_ENUMERATION_BUFSIZE - #define CFG_TUH_ENUMERATION_BUFSIZE 256 - #endif +#ifndef CFG_TUH_ENUMERATION_BUFSIZE +#define CFG_TUH_ENUMERATION_BUFSIZE 256 +#endif #endif // CFG_TUH_ENABLED // Attribute to place data in accessible RAM for host controller (default: CFG_TUSB_MEM_SECTION) #ifndef CFG_TUH_MEM_SECTION - #define CFG_TUH_MEM_SECTION CFG_TUSB_MEM_SECTION +#define CFG_TUH_MEM_SECTION CFG_TUSB_MEM_SECTION #endif // Attribute to align memory for host controller #ifndef CFG_TUH_MEM_ALIGN - #define CFG_TUH_MEM_ALIGN CFG_TUSB_MEM_ALIGN +#define CFG_TUH_MEM_ALIGN CFG_TUSB_MEM_ALIGN #endif //------------- CLASS -------------// #ifndef CFG_TUH_HUB - #define CFG_TUH_HUB 0 +#define CFG_TUH_HUB 0 #endif #ifndef CFG_TUH_CDC - #define CFG_TUH_CDC 0 +#define CFG_TUH_CDC 0 #endif // FTDI is not part of CDC class, only to re-use CDC driver API #ifndef CFG_TUH_CDC_FTDI - #define CFG_TUH_CDC_FTDI 0 +#define CFG_TUH_CDC_FTDI 0 #endif // List of product IDs that can use the FTDI CDC driver. 0x0403 is FTDI's VID #ifndef CFG_TUH_CDC_FTDI_VID_PID_LIST - #define CFG_TUH_CDC_FTDI_VID_PID_LIST \ - {0x0403, 0x6001}, {0x0403, 0x6006}, {0x0403, 0x6010}, {0x0403, 0x6011}, \ - {0x0403, 0x6014}, {0x0403, 0x6015}, {0x0403, 0x8372}, {0x0403, 0xFBFA}, \ - {0x0403, 0xCD18} +#define CFG_TUH_CDC_FTDI_VID_PID_LIST \ + { 0x0403, 0x6001 }, { 0x0403, 0x6006 }, { 0x0403, 0x6010 }, { 0x0403, 0x6011 }, \ + { 0x0403, 0x6014 }, { 0x0403, 0x6015 }, { 0x0403, 0x8372 }, { 0x0403, 0xFBFA }, \ + { \ + 0x0403, 0xCD18 \ + } #endif // CP210X is not part of CDC class, only to re-use CDC driver API #ifndef CFG_TUH_CDC_CP210X - #define CFG_TUH_CDC_CP210X 0 +#define CFG_TUH_CDC_CP210X 0 #endif // List of product IDs that can use the CP210X CDC driver. 0x10C4 is Silicon Labs' VID #ifndef CFG_TUH_CDC_CP210X_VID_PID_LIST - #define CFG_TUH_CDC_CP210X_VID_PID_LIST \ - {0x10C4, 0xEA60}, {0x10C4, 0xEA70} +#define CFG_TUH_CDC_CP210X_VID_PID_LIST \ + { 0x10C4, 0xEA60 }, \ + { \ + 0x10C4, 0xEA70 \ + } #endif #ifndef CFG_TUH_CDC_CH34X - // CH34X is not part of CDC class, only to re-use CDC driver API - #define CFG_TUH_CDC_CH34X 0 +// CH34X is not part of CDC class, only to re-use CDC driver API +#define CFG_TUH_CDC_CH34X 0 #endif // List of product IDs that can use the CH34X CDC driver #ifndef CFG_TUH_CDC_CH34X_VID_PID_LIST - #define CFG_TUH_CDC_CH34X_VID_PID_LIST \ - { 0x1a86, 0x5523 }, /* ch341 chip */ \ - { 0x1a86, 0x7522 }, /* ch340k chip */ \ - { 0x1a86, 0x7523 }, /* ch340 chip */ \ - { 0x1a86, 0xe523 }, /* ch330 chip */ \ - { 0x4348, 0x5523 }, /* ch340 custom chip */ \ - { 0x2184, 0x0057 }, /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ \ - { 0x9986, 0x7523 } /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ +#define CFG_TUH_CDC_CH34X_VID_PID_LIST \ + { 0x1a86, 0x5523 }, /* ch341 chip */ \ + { 0x1a86, 0x7522 }, /* ch340k chip */ \ + { 0x1a86, 0x7523 }, /* ch340 chip */ \ + { 0x1a86, 0xe523 }, /* ch330 chip */ \ + { 0x4348, 0x5523 }, /* ch340 custom chip */ \ + { 0x2184, 0x0057 }, /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ \ + { \ + 0x9986, 0x7523 \ + } /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ #endif #ifndef CFG_TUH_HID - #define CFG_TUH_HID 0 +#define CFG_TUH_HID 0 #endif #ifndef CFG_TUH_MIDI - #define CFG_TUH_MIDI 0 +#define CFG_TUH_MIDI 0 #endif #ifndef CFG_TUH_MSC - #define CFG_TUH_MSC 0 +#define CFG_TUH_MSC 0 #endif #ifndef CFG_TUH_VENDOR - #define CFG_TUH_VENDOR 0 +#define CFG_TUH_VENDOR 0 #endif #ifndef CFG_TUH_API_EDPT_XFER - #define CFG_TUH_API_EDPT_XFER 0 +#define CFG_TUH_API_EDPT_XFER 0 #endif // Enable PIO-USB software host controller #ifndef CFG_TUH_RPI_PIO_USB - #define CFG_TUH_RPI_PIO_USB 0 +#define CFG_TUH_RPI_PIO_USB 0 #endif #ifndef CFG_TUD_RPI_PIO_USB - #define CFG_TUD_RPI_PIO_USB 0 +#define CFG_TUD_RPI_PIO_USB 0 #endif // MAX3421 Host controller option #ifndef CFG_TUH_MAX3421 - #define CFG_TUH_MAX3421 0 +#define CFG_TUH_MAX3421 0 #endif //--------------------------------------------------------------------+ @@ -576,7 +586,7 @@ // Configuration Validation //------------------------------------------------------------------ #if CFG_TUD_ENDPOINT0_SIZE > 64 - #error Control Endpoint Max Packet Size cannot be larger than 64 +#error Control Endpoint Max Packet Size cannot be larger than 64 #endif // To avoid GCC compiler warnings when -pedantic option is used (strict ISO C) From 45bb9e80ec175c2f22b57a988ac526dfccd94702 Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 11:49:01 -0500 Subject: [PATCH 18/27] Fix comment --- Examples/MAX32655/Demo_2048/RISCV/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index b283dc951cf..41098f65460 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -344,7 +344,7 @@ int main(void) SendGameStateToARMCore(Game_2048_CheckState()); - // Signal ARM core to + // Signal ARM core to update initial grid. MXC_SEMA_FreeSema(SEMA_IDX_ARM); // Wait for ARM core to finish displaying the starting grid. From f5ef19686b4f0860d91aecd7d12d9fbae206347a Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 11:53:15 -0500 Subject: [PATCH 19/27] Exclude tinyusb from clang-format log --- .github/workflows/clang-format-run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/clang-format-run.sh b/.github/workflows/clang-format-run.sh index 4cd87b6d671..4f3a1a03890 100644 --- a/.github/workflows/clang-format-run.sh +++ b/.github/workflows/clang-format-run.sh @@ -37,10 +37,10 @@ FILES="" if [[ $# -eq 0 ]] then # Find the c files - FILES=$(find . -iname "*.c" -not -name "*cnn.c" -a -not -name "*softmax.c" -a -not -regex ".*/Libraries/MiscDrivers/BarcodeDecoder/.*" -a -not -regex ".*/Examples/.*/Coremark/.*" -a -not -regex ".*/Libraries/\(Cordio\|FCL\|FreeRTOS\|FreeRTOS\-Plus\|LC3\|littlefs\|lwIP\|MAXUSB\|SDHC\|LVGL\|Coremark\)/.*") + FILES=$(find . -iname "*.c" -not -name "*cnn.c" -a -not -name "*softmax.c" -a -not -regex ".*/Libraries/MiscDrivers/BarcodeDecoder/.*" -a -not -regex ".*/Examples/.*/Coremark/.*" -a -not -regex ".*/Libraries/\(Cordio\|FCL\|FreeRTOS\|FreeRTOS\-Plus\|LC3\|littlefs\|lwIP\|MAXUSB\|SDHC\|LVGL\|Coremark\|tinyusb\)/.*") # Find the header files - FILES=$FILES+$(find . -iname "*.h" -not -name "*regs*" -a -not -name "*weights.h" -a -not -name "*cnn.h" -a -not -name "*sampledata.h" -a -not -name "*sampleoutput.h" -a -not -regex ".*/Libraries/MiscDrivers/BarcodeDecoder/.*" -a -not -regex ".*/Examples/.*/Coremark/.*" -a -not -regex ".*/Libraries/\(Cordio\|FCL\|FreeRTOS\|FreeRTOS\-Plus\|LC3\|littlefs\|lwIP\|MAXUSB\|SDHC\|LVGL\|Coremark\)/.*") + FILES=$FILES+$(find . -iname "*.h" -not -name "*regs*" -a -not -name "*weights.h" -a -not -name "*cnn.h" -a -not -name "*sampledata.h" -a -not -name "*sampleoutput.h" -a -not -regex ".*/Libraries/MiscDrivers/BarcodeDecoder/.*" -a -not -regex ".*/Examples/.*/Coremark/.*" -a -not -regex ".*/Libraries/\(Cordio\|FCL\|FreeRTOS\|FreeRTOS\-Plus\|LC3\|littlefs\|lwIP\|MAXUSB\|SDHC\|LVGL\|Coremark\|tinyusb\)/.*") else # Accumulate the input arguments into FILES FILES="$*" From 00076db1f757f7d9004f3e8ee89b89903efbf4cf Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 11:53:41 -0500 Subject: [PATCH 20/27] Revert "Fix comment" This reverts commit 45bb9e80ec175c2f22b57a988ac526dfccd94702. --- Examples/MAX32655/Demo_2048/RISCV/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 41098f65460..b283dc951cf 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -344,7 +344,7 @@ int main(void) SendGameStateToARMCore(Game_2048_CheckState()); - // Signal ARM core to update initial grid. + // Signal ARM core to MXC_SEMA_FreeSema(SEMA_IDX_ARM); // Wait for ARM core to finish displaying the starting grid. From a20373375e1a6db61e3317794ef5dd9131b6bb73 Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 11:56:10 -0500 Subject: [PATCH 21/27] Revert "clang-format bot reformatting." This reverts commit 1b74b093db52f630b8451400bdf5dccc14532a7d. --- .../MAX32655/Demo_2048/ARM/inc/graphics.h | 178 +- .../MAX32655/Demo_2048/ARM/inc/ipc_defines.h | 15 +- Examples/MAX32655/Demo_2048/ARM/main.c | 69 +- .../Demo_2048/ARM/resources/all_imgs.c | 123340 +-------------- .../MAX32655/Demo_2048/ARM/resources/bitmap.h | 12 +- .../MAX32655/Demo_2048/ARM/src/graphics.c | 844 +- .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 7 +- .../Demo_2048/RISCV/inc/ipc_defines.h | 15 +- Examples/MAX32655/Demo_2048/RISCV/main.c | 88 +- .../MAX32655/Demo_2048/RISCV/src/controller.c | 4 + .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 80 +- Libraries/MiscDrivers/Display/tft_ssd2119.c | 35 +- Libraries/MiscDrivers/Display/tft_ssd2119.h | 11 +- .../device/audio_4_channel_mic/src/main.c | 602 +- .../audio_4_channel_mic/src/tusb_config.h | 76 +- .../audio_4_channel_mic/src/usb_descriptors.c | 157 +- .../src/FreeRTOSConfig/FreeRTOSConfig.h | 166 +- .../src/freertos_hook.c | 81 +- .../audio_4_channel_mic_freertos/src/main.c | 706 +- .../src/tusb_config.h | 78 +- .../src/usb_descriptors.c | 157 +- .../examples/device/audio_test/src/main.c | 504 +- .../device/audio_test/src/tusb_config.h | 60 +- .../device/audio_test/src/usb_descriptors.c | 155 +- .../src/FreeRTOSConfig/FreeRTOSConfig.h | 166 +- .../audio_test_freertos/src/freertos_hook.c | 81 +- .../device/audio_test_freertos/src/main.c | 594 +- .../audio_test_freertos/src/tusb_config.h | 62 +- .../audio_test_freertos/src/usb_descriptors.c | 155 +- .../device/audio_test_multi_rate/src/main.c | 593 +- .../audio_test_multi_rate/src/tusb_config.h | 75 +- .../src/usb_descriptors.c | 153 +- .../src/usb_descriptors.h | 164 +- .../examples/device/board_test/src/main.c | 51 +- .../device/board_test/src/tusb_config.h | 16 +- .../examples/device/cdc_dual_ports/src/main.c | 161 +- .../device/cdc_dual_ports/src/tusb_config.h | 36 +- .../cdc_dual_ports/src/usb_descriptors.c | 275 +- .../examples/device/cdc_msc/src/main.c | 141 +- .../examples/device/cdc_msc/src/msc_disk.c | 316 +- .../examples/device/cdc_msc/src/tusb_config.h | 38 +- .../device/cdc_msc/src/usb_descriptors.c | 267 +- .../src/FreeRTOSConfig/FreeRTOSConfig.h | 166 +- .../cdc_msc_freertos/src/freertos_hook.c | 81 +- .../device/cdc_msc_freertos/src/main.c | 260 +- .../device/cdc_msc_freertos/src/msc_disk.c | 294 +- .../device/cdc_msc_freertos/src/tusb_config.h | 40 +- .../cdc_msc_freertos/src/usb_descriptors.c | 276 +- .../examples/device/cdc_uac2/src/cdc_app.c | 54 +- .../examples/device/cdc_uac2/src/common.h | 38 +- .../examples/device/cdc_uac2/src/main.c | 33 +- .../device/cdc_uac2/src/tusb_config.h | 121 +- .../examples/device/cdc_uac2/src/uac2_app.c | 367 +- .../device/cdc_uac2/src/usb_descriptors.c | 218 +- .../device/cdc_uac2/src/usb_descriptors.h | 303 +- .../tinyusb/examples/device/dfu/src/main.c | 133 +- .../examples/device/dfu/src/tusb_config.h | 24 +- .../examples/device/dfu/src/usb_descriptors.c | 157 +- .../examples/device/dfu_runtime/src/main.c | 58 +- .../device/dfu_runtime/src/tusb_config.h | 20 +- .../device/dfu_runtime/src/usb_descriptors.c | 154 +- .../device/dynamic_configuration/src/main.c | 176 +- .../dynamic_configuration/src/msc_disk.c | 294 +- .../dynamic_configuration/src/tusb_config.h | 40 +- .../src/usb_descriptors.c | 303 +- .../device/hid_boot_interface/src/main.c | 255 +- .../hid_boot_interface/src/tusb_config.h | 32 +- .../hid_boot_interface/src/usb_descriptors.c | 178 +- .../hid_boot_interface/src/usb_descriptors.h | 7 +- .../examples/device/hid_composite/src/main.c | 340 +- .../device/hid_composite/src/tusb_config.h | 32 +- .../hid_composite/src/usb_descriptors.c | 218 +- .../hid_composite/src/usb_descriptors.h | 13 +- .../src/FreeRTOSConfig/FreeRTOSConfig.h | 166 +- .../src/freertos_hook.c | 81 +- .../device/hid_composite_freertos/src/main.c | 424 +- .../hid_composite_freertos/src/tusb_config.h | 34 +- .../src/usb_descriptors.c | 216 +- .../src/usb_descriptors.h | 13 +- .../device/hid_generic_inout/src/main.c | 88 +- .../hid_generic_inout/src/tusb_config.h | 32 +- .../hid_generic_inout/src/usb_descriptors.c | 161 +- .../device/hid_multiple_interface/src/main.c | 184 +- .../hid_multiple_interface/src/tusb_config.h | 32 +- .../src/usb_descriptors.c | 190 +- .../examples/device/midi_test/src/main.c | 121 +- .../device/midi_test/src/tusb_config.h | 34 +- .../device/midi_test/src/usb_descriptors.c | 193 +- .../examples/device/msc_dual_lun/src/main.c | 73 +- .../device/msc_dual_lun/src/msc_disk_dual.c | 436 +- .../device/msc_dual_lun/src/tusb_config.h | 32 +- .../device/msc_dual_lun/src/usb_descriptors.c | 203 +- .../device/net_lwip_webserver/src/arch/cc.h | 19 +- .../device/net_lwip_webserver/src/lwipopts.h | 54 +- .../device/net_lwip_webserver/src/main.c | 247 +- .../net_lwip_webserver/src/tusb_config.h | 36 +- .../net_lwip_webserver/src/usb_descriptors.c | 261 +- .../examples/device/uac2_headset/src/main.c | 564 +- .../device/uac2_headset/src/tusb_config.h | 116 +- .../device/uac2_headset/src/usb_descriptors.c | 195 +- .../device/uac2_headset/src/usb_descriptors.h | 306 +- .../tinyusb/examples/device/usbtmc/src/main.c | 99 +- .../examples/device/usbtmc/src/tusb_config.h | 26 +- .../device/usbtmc/src/usb_descriptors.c | 229 +- .../examples/device/usbtmc/src/usbtmc_app.c | 305 +- .../device/video_capture/src/images.h | 27106 +--- .../examples/device/video_capture/src/main.c | 398 +- .../device/video_capture/src/tusb_config.h | 28 +- .../video_capture/src/usb_descriptors.c | 263 +- .../video_capture/src/usb_descriptors.h | 399 +- .../device/video_capture_2ch/src/images.h | 27090 +--- .../device/video_capture_2ch/src/main.c | 423 +- .../video_capture_2ch/src/tusb_config.h | 28 +- .../video_capture_2ch/src/usb_descriptors.c | 299 +- .../video_capture_2ch/src/usb_descriptors.h | 399 +- .../examples/device/webusb_serial/src/main.c | 266 +- .../device/webusb_serial/src/tusb_config.h | 35 +- .../webusb_serial/src/usb_descriptors.c | 300 +- .../webusb_serial/src/usb_descriptors.h | 6 +- Libraries/tinyusb/hw/bsp/ansi_escape.h | 66 +- Libraries/tinyusb/hw/bsp/board.c | 95 +- Libraries/tinyusb/hw/bsp/board_api.h | 137 +- Libraries/tinyusb/hw/bsp/board_mcu.h | 108 +- Libraries/tinyusb/src/class/audio/audio.h | 1268 +- .../tinyusb/src/class/audio/audio_device.c | 3836 +- .../tinyusb/src/class/audio/audio_device.h | 277 +- Libraries/tinyusb/src/class/bth/bth_device.c | 323 +- Libraries/tinyusb/src/class/bth/bth_device.h | 29 +- Libraries/tinyusb/src/class/cdc/cdc.h | 562 +- Libraries/tinyusb/src/class/cdc/cdc_device.c | 653 +- Libraries/tinyusb/src/class/cdc/cdc_device.h | 135 +- Libraries/tinyusb/src/class/cdc/cdc_host.c | 2515 +- Libraries/tinyusb/src/class/cdc/cdc_host.h | 64 +- Libraries/tinyusb/src/class/cdc/cdc_rndis.h | 362 +- .../tinyusb/src/class/cdc/cdc_rndis_host.c | 283 +- .../tinyusb/src/class/cdc/cdc_rndis_host.h | 17 +- .../tinyusb/src/class/cdc/serial/ch34x.h | 67 +- .../tinyusb/src/class/cdc/serial/cp210x.h | 50 +- .../tinyusb/src/class/cdc/serial/ftdi_sio.h | 74 +- Libraries/tinyusb/src/class/dfu/dfu.h | 105 +- Libraries/tinyusb/src/class/dfu/dfu_device.c | 641 +- Libraries/tinyusb/src/class/dfu/dfu_device.h | 24 +- .../tinyusb/src/class/dfu/dfu_rt_device.c | 114 +- .../tinyusb/src/class/dfu/dfu_rt_device.h | 14 +- Libraries/tinyusb/src/class/hid/hid.h | 1867 +- Libraries/tinyusb/src/class/hid/hid_device.c | 587 +- Libraries/tinyusb/src/class/hid/hid_device.h | 731 +- Libraries/tinyusb/src/class/hid/hid_host.c | 1132 +- Libraries/tinyusb/src/class/hid/hid_host.h | 48 +- Libraries/tinyusb/src/class/midi/midi.h | 255 +- .../tinyusb/src/class/midi/midi_device.c | 811 +- .../tinyusb/src/class/midi/midi_device.h | 86 +- Libraries/tinyusb/src/class/msc/msc.h | 466 +- Libraries/tinyusb/src/class/msc/msc_device.c | 1421 +- Libraries/tinyusb/src/class/msc/msc_device.h | 48 +- Libraries/tinyusb/src/class/msc/msc_host.c | 648 +- Libraries/tinyusb/src/class/msc/msc_host.h | 52 +- .../tinyusb/src/class/net/ecm_rndis_device.c | 541 +- Libraries/tinyusb/src/class/net/ncm.h | 119 +- Libraries/tinyusb/src/class/net/ncm_device.c | 1069 +- Libraries/tinyusb/src/class/net/net_device.h | 27 +- Libraries/tinyusb/src/class/usbtmc/usbtmc.h | 364 +- .../tinyusb/src/class/usbtmc/usbtmc_device.c | 1250 +- .../tinyusb/src/class/usbtmc/usbtmc_device.h | 42 +- .../tinyusb/src/class/vendor/vendor_device.c | 371 +- .../tinyusb/src/class/vendor/vendor_device.h | 88 +- .../tinyusb/src/class/vendor/vendor_host.c | 112 +- .../tinyusb/src/class/vendor/vendor_host.h | 30 +- Libraries/tinyusb/src/class/video/video.h | 894 +- .../tinyusb/src/class/video/video_device.c | 1954 +- .../tinyusb/src/class/video/video_device.h | 17 +- Libraries/tinyusb/src/common/tusb_common.h | 355 +- Libraries/tinyusb/src/common/tusb_compiler.h | 397 +- Libraries/tinyusb/src/common/tusb_debug.h | 137 +- Libraries/tinyusb/src/common/tusb_fifo.c | 967 +- Libraries/tinyusb/src/common/tusb_fifo.h | 95 +- Libraries/tinyusb/src/common/tusb_mcu.h | 510 +- Libraries/tinyusb/src/common/tusb_private.h | 140 +- Libraries/tinyusb/src/common/tusb_types.h | 642 +- Libraries/tinyusb/src/common/tusb_verify.h | 82 +- Libraries/tinyusb/src/device/dcd.h | 166 +- Libraries/tinyusb/src/device/usbd.c | 2041 +- Libraries/tinyusb/src/device/usbd.h | 1034 +- Libraries/tinyusb/src/device/usbd_control.c | 239 +- Libraries/tinyusb/src/device/usbd_pvt.h | 48 +- Libraries/tinyusb/src/osal/osal.h | 40 +- Libraries/tinyusb/src/osal/osal_freertos.h | 208 +- Libraries/tinyusb/src/osal/osal_mynewt.h | 181 +- Libraries/tinyusb/src/osal/osal_none.h | 161 +- Libraries/tinyusb/src/osal/osal_pico.h | 143 +- Libraries/tinyusb/src/osal/osal_rtthread.h | 100 +- Libraries/tinyusb/src/osal/osal_rtx4.h | 179 +- .../src/portable/mentor/musb/dcd_musb.c | 1267 +- .../src/portable/mentor/musb/musb_max32.h | 136 +- .../src/portable/mentor/musb/musb_type.h | 794 +- Libraries/tinyusb/src/tusb.c | 610 +- Libraries/tinyusb/src/tusb.h | 119 +- Libraries/tinyusb/src/tusb_option.h | 452 +- 198 files changed, 39767 insertions(+), 196004 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index c53bb87bf89..36db538a4ae 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -25,129 +25,110 @@ /* **** Definitions **** */ -#define SCREEN_ORIENTATION (SCREEN_ROTATE) +#define SCREEN_ORIENTATION (SCREEN_ROTATE) // Will be different from actual screen dimensions depending on screen orientation -#define SCREEN_WIDTH (320) -#define SCREEN_HEIGHT (240) +#define SCREEN_WIDTH (320) +#define SCREEN_HEIGHT (240) // TODO(SW): Automatically calculate these sizes based on screen dimensions. // Set the dimensions of all the models. -#define GRID_OFFSET_X (80) -#define GRID_OFFSET_Y (0) -#define GRID_LENGTH (224) -#define GRID_SPACING (8) // spacing between edge of "screen to grid". +#define GRID_OFFSET_X (80) +#define GRID_OFFSET_Y (0) +#define GRID_LENGTH (224) +#define GRID_SPACING (8) // spacing between edge of "screen to grid". -#define BLOCK_LENGTH (51) -#define BLOCK_SPACING (4) // spacing between edge of "grid to block" and "block to block". +#define BLOCK_LENGTH (51) +#define BLOCK_SPACING (4) // spacing between edge of "grid to block" and "block to block". -#define RADIUS_FOR_CORNERS (3) +#define RADIUS_FOR_CORNERS (3) -#define CFS_LOGO_OFFSET_X (4) -#define CFS_LOGO_OFFSET_Y (0) +#define CFS_LOGO_OFFSET_X (4) +#define CFS_LOGO_OFFSET_Y (0) -#define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) -#define GAME_LOGO_OFFSET_Y (80) +#define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) +#define GAME_LOGO_OFFSET_Y (80) // Position settings for timer. -#define TIME_OFFSET_Y (215) -#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - 1) -#define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels -#define TIME_DIGIT3_OFFSET_X(width) \ - ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - \ - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) -#define TIME_DIGIT2_OFFSET_X(width) \ - ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - \ - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) -#define TIME_DIGIT1_OFFSET_X(width) \ - ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + \ - ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) -#define TIME_DIGIT0_OFFSET_X(width) \ - ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + \ - ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) +#define TIME_OFFSET_Y (215) +#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - 1) +#define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels +#define TIME_DIGIT3_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT2_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT1_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) +#define TIME_DIGIT0_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) // Position settings for moves counter. -#define MOVES_DIGITS_OFFSET_Y (160) -#define MOVES_TEXT_OFFSET_Y \ - (MOVES_DIGITS_OFFSET_Y + GAME_TEXT_DIGITS_HEIGHT + \ - 4) // 4 seemed to be appropriate number of pxiels for spacing. -#define MOVES_DIGIT_WIDTH (15) // Max width of digit is 15 pixels. -#define MOVES_DIGITS_OFFSET_X ((GRID_OFFSET_X / 2) - MOVES_DIGIT_WIDTH - (MOVES_DIGIT_WIDTH / 2)) -#define MOVES_TEXT_OFFSET_X ((GRID_OFFSET_X / 2) - (GAME_TEXT_MOVES_WIDTH / 2) + 4) -#define MOVES_DIGIT3_OFFSET_X(width) \ - (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 0) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT2_OFFSET_X(width) \ - (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 1) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT1_OFFSET_X(width) \ - (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT0_OFFSET_X(width) \ - (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGITS_OFFSET_Y (160) +#define MOVES_TEXT_OFFSET_Y (MOVES_DIGITS_OFFSET_Y + GAME_TEXT_DIGITS_HEIGHT + 4) // 4 seemed to be appropriate number of pxiels for spacing. +#define MOVES_DIGIT_WIDTH (15) // Max width of digit is 15 pixels. +#define MOVES_DIGITS_OFFSET_X ((GRID_OFFSET_X / 2) - MOVES_DIGIT_WIDTH - (MOVES_DIGIT_WIDTH / 2)) +#define MOVES_TEXT_OFFSET_X ((GRID_OFFSET_X / 2) - (GAME_TEXT_MOVES_WIDTH / 2) + 4) +#define MOVES_DIGIT3_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 0) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT2_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 1) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT1_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT0_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) // Position settings for Game Over and You Win boxes, -#define GAME_OVER_BOX_OFFSET_X \ - (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (GAME_OVER_BOX_WIDTH / 2)) -#define GAME_OVER_BOX_OFFSET_Y \ - (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (GAME_OVER_BOX_HEIGHT / 2)) -#define YOU_WIN_BOX_OFFSET_X \ - (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (YOU_WIN_BOX_WIDTH / 2)) -#define YOU_WIN_BOX_OFFSET_Y \ - (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (YOU_WIN_BOX_HEIGHT / 2)) +#define GAME_OVER_BOX_OFFSET_X (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (GAME_OVER_BOX_WIDTH / 2)) +#define GAME_OVER_BOX_OFFSET_Y (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (GAME_OVER_BOX_HEIGHT / 2)) +#define YOU_WIN_BOX_OFFSET_X (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (YOU_WIN_BOX_WIDTH / 2)) +#define YOU_WIN_BOX_OFFSET_Y (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (YOU_WIN_BOX_HEIGHT / 2)) // Colors 16-bit RGB565. -#define RGB565_WHITE (0xFFFF) -#define RGB565_BLACK (0x0000) -#define RGB565_DARK_GRAY (0x3084) -#define RGB565_LIGHT_GRAY (0x5AEB) +#define RGB565_WHITE (0xFFFF) +#define RGB565_BLACK (0x0000) +#define RGB565_DARK_GRAY (0x3084) +#define RGB565_LIGHT_GRAY (0x5AEB) // Block colors (2-2048) are taken from original game: https://github.com/gabrielecirulli/2048?tab=readme-ov-file // Open-source under MIT License. -#define RGB565_BLOCK_2 (0xEF3B) -#define RGB565_BLOCK_4 (0xEF19) -#define RGB565_BLOCK_8 (0xF58F) -#define RGB565_BLOCK_16 (0xF4AC) -#define RGB565_BLOCK_32 (0xF3EB) -#define RGB565_BLOCK_64 (0xF2E7) -#define RGB565_BLOCK_128 (0xEE6E) -#define RGB565_BLOCK_256 (0xEE6C) -#define RGB565_BLOCK_512 (0xEE4A) -#define RGB565_BLOCK_1024 (0xEE27) -#define RGB565_BLOCK_2048 (0xEE05) +#define RGB565_BLOCK_2 (0xEF3B) +#define RGB565_BLOCK_4 (0xEF19) +#define RGB565_BLOCK_8 (0xF58F) +#define RGB565_BLOCK_16 (0xF4AC) +#define RGB565_BLOCK_32 (0xF3EB) +#define RGB565_BLOCK_64 (0xF2E7) +#define RGB565_BLOCK_128 (0xEE6E) +#define RGB565_BLOCK_256 (0xEE6C) +#define RGB565_BLOCK_512 (0xEE4A) +#define RGB565_BLOCK_1024 (0xEE27) +#define RGB565_BLOCK_2048 (0xEE05) // Unused, but left here if anyone wants to expand features. -#define RGB565_BLOCK_4096 (0xFDF7) -#define RGB565_BLOCK_8192 (0xF38E) -#define RGB565_BLOCK_16384 (0xFC58) -#define RGB565_BLOCK_32768 (0xB43C) -#define RGB565_BLOCK_65536 (0x8BF9) -#define RGB565_BLOCK_131072 (0x6C3C) +#define RGB565_BLOCK_4096 (0xFDF7) +#define RGB565_BLOCK_8192 (0xF38E) +#define RGB565_BLOCK_16384 (0xFC58) +#define RGB565_BLOCK_32768 (0xB43C) +#define RGB565_BLOCK_65536 (0x8BF9) +#define RGB565_BLOCK_131072 (0x6C3C) // For my non-American English Speakers :) -#define RGB565_DARK_GREY RGB565_DARK_GRAY -#define RGB565_LIGHT_GREY RGB565_LIGHT_GRAY +#define RGB565_DARK_GREY RGB565_DARK_GRAY +#define RGB565_LIGHT_GREY RGB565_LIGHT_GRAY // Formatted Colors -#define FORMAT_RGB565_TO_PACKET(RGB) (0x01000100 | ((RGB & 0x00FF) << 16) | ((RGB & 0xFF00) >> 8)) +#define FORMAT_RGB565_TO_PACKET(RGB) (0x01000100 | ((RGB & 0x00FF) << 16) | ((RGB & 0xFF00) >> 8)) // 'F_' prefix stands for "formatted into packets". -#define F_BACKGROUND_COLOR FORMAT_RGB565_TO_PACKET(RGB565_WHITE) -#define F_GRID_COLOR FORMAT_RGB565_TO_PACKET(RGB565_DARK_GRAY) -#define F_EMPTY_BLOCK_COLOR FORMAT_RGB565_TO_PACKET(RGB565_LIGHT_GRAY) - -#define RGB_BLOCK_COLOR(block) \ - ((block) == 2 ? RGB565_BLOCK_2 : \ - (block) == 4 ? RGB565_BLOCK_4 : \ - (block) == 8 ? RGB565_BLOCK_8 : \ - (block) == 16 ? RGB565_BLOCK_16 : \ - (block) == 32 ? RGB565_BLOCK_32 : \ - (block) == 64 ? RGB565_BLOCK_64 : \ - (block) == 128 ? RGB565_BLOCK_128 : \ - (block) == 256 ? RGB565_BLOCK_256 : \ - (block) == 512 ? RGB565_BLOCK_512 : \ - (block) == 1024 ? RGB565_BLOCK_1024 : \ - (block) == 2048 ? RGB565_BLOCK_2048 : \ - BLOCK_2_DIGIT_PX_HEIGHT) - -#define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) +#define F_BACKGROUND_COLOR FORMAT_RGB565_TO_PACKET(RGB565_WHITE) +#define F_GRID_COLOR FORMAT_RGB565_TO_PACKET(RGB565_DARK_GRAY) +#define F_EMPTY_BLOCK_COLOR FORMAT_RGB565_TO_PACKET(RGB565_LIGHT_GRAY) + +#define RGB_BLOCK_COLOR(block) ((block) == 2 ? RGB565_BLOCK_2 \ + : (block) == 4 ? RGB565_BLOCK_4 \ + : (block) == 8 ? RGB565_BLOCK_8 \ + : (block) == 16 ? RGB565_BLOCK_16 \ + : (block) == 32 ? RGB565_BLOCK_32 \ + : (block) == 64 ? RGB565_BLOCK_64 \ + : (block) == 128 ? RGB565_BLOCK_128 \ + : (block) == 256 ? RGB565_BLOCK_256 \ + : (block) == 512 ? RGB565_BLOCK_512 \ + : (block) == 1024 ? RGB565_BLOCK_1024 \ + : (block) == 2048 ? RGB565_BLOCK_2048 \ + : BLOCK_2_DIGIT_PX_HEIGHT) + +#define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) /** * These enums help keep track of what blocks were erased, @@ -155,7 +136,12 @@ * the animation of for the display. * IMPORTANT: Sync these commands with the RISCV core. */ -typedef enum { EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; +typedef enum { + EMPTY = 0, + ERASE = 1, + COMBINE = 2, + UNMOVED = 3 +} block_state_t; /** * These enums help keep track of the game state. diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h index b32456265eb..69e7ed870ce 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h @@ -49,13 +49,12 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. -#define MAILBOX_MAIN_GRID_STATE_IDX \ - (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) -#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) #endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index c2b3d97000f..2380ced7550 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -59,12 +59,12 @@ extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes // Rename boxes for readability. -// Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. +// Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. #define SEMA_RISCV_MAILBOX mxcSemaBox0 #define SEMA_ARM_MAILBOX mxcSemaBox1 -uint32_t ARM_GRID_COPY[4][4] = { 0 }; -block_state_t ARM_GRID_COPY_STATE[4][4] = { 0 }; +uint32_t ARM_GRID_COPY[4][4] = {0}; +block_state_t ARM_GRID_COPY_STATE[4][4] = {0}; uint32_t MOVES_COUNT = 0; @@ -78,11 +78,11 @@ void ReceiveGridFromRISCVCore(void) for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { ARM_GRID_COPY[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 1] << (8 * 1); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 2] << (8 * 2); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 3] << (8 * 3); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+1] << (8 * 1); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+2] << (8 * 2); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+3] << (8 * 3); - i += 4; + i+=4; } } @@ -101,24 +101,24 @@ graphics_slide_direction_t ReceiveDirectionFromRISCVCore(void) { // Add more direction keys here. switch (SEMA_ARM_MAILBOX->payload[MAILBOX_KEYPRESS_IDX]) { - // UP - case 'w': - return GRAPHICS_SLIDE_DIR_UP; + // UP + case 'w': + return GRAPHICS_SLIDE_DIR_UP; - // DOWN - case 's': - return GRAPHICS_SLIDE_DIR_DOWN; + // DOWN + case 's': + return GRAPHICS_SLIDE_DIR_DOWN; - // LEFT - case 'a': - return GRAPHICS_SLIDE_DIR_LEFT; + // LEFT + case 'a': + return GRAPHICS_SLIDE_DIR_LEFT; - // RIGHT - case 'd': - return GRAPHICS_SLIDE_DIR_RIGHT; + // RIGHT + case 'd': + return GRAPHICS_SLIDE_DIR_RIGHT; - default: - return -1; + default: + return -1; } } @@ -145,9 +145,9 @@ uint32_t ReceiveMovesCountFromRISCVCore(void) { uint32_t moves_count = 0; moves_count = SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] << (8 * 0); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 1] << (8 * 1); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 2] << (8 * 2); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 3] << (8 * 3); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+1] << (8 * 1); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+2] << (8 * 2); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+3] << (8 * 3); return moves_count; } @@ -163,7 +163,7 @@ int main(void) // - Use IPO for System Clock for fastest speed. (Done in SystemInit) // - Enable Internal Cache. (Done in SystemInit) - // Speed up console UART to match player controller baud rate which have shared ports + // Speed up console UART to match player controller baud rate which have shared ports // (PC Keyboard via Console UART). error = MXC_UART_Init(MXC_UART_GET_UART(CONSOLE_UART), RISCV_CONTROLLER_BAUD, MXC_UART_APB_CLK); if (error != E_NO_ERROR) { @@ -173,7 +173,7 @@ int main(void) } PRINT("\n\n*******************************************************************************\n"); - + // ARM Initialization. PRINT("ARM: Starting ARM Initialization.\n\n"); @@ -185,7 +185,7 @@ int main(void) // Prepare ARM semaphore. MXC_SEMA_Init(); - + // Check status of ARM semaphore. error = MXC_SEMA_CheckSema(SEMA_IDX_ARM); if (error != E_NO_ERROR) { @@ -196,13 +196,11 @@ int main(void) error = MXC_SEMA_GetSema(SEMA_IDX_ARM); if (error != E_NO_ERROR) { - PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", - MXC_SEMA->semaphores[SEMA_IDX_ARM]); + PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); LED_On(LED_RED); while (1) {} } else { - PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", - MXC_SEMA->semaphores[SEMA_IDX_ARM]); + PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); } // Backup Delay for 1 second before starting RISCV core. @@ -304,9 +302,7 @@ int main(void) // Add new blocks. for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { - if ((ARM_GRID_COPY[row][col]) != 0 && - (ARM_GRID_COPY_STATE[row][col] != UNMOVED) && - (ARM_GRID_COPY_STATE[row][col] != COMBINE)) { + if ((ARM_GRID_COPY[row][col]) != 0 && (ARM_GRID_COPY_STATE[row][col] != UNMOVED) && (ARM_GRID_COPY_STATE[row][col] != COMBINE)) { // Don't draw newly spawned block. // new_block_row and new_block_col will be set to 0xFFFF for invalid // location if new block was not added. @@ -319,11 +315,10 @@ int main(void) // Add combined blocks. Graphics_CombineBlocks(ARM_GRID_COPY, ARM_GRID_COPY_STATE); - + // Add new block with spawn animation. if (new_block_added == true) { - Graphics_AddNewBlock(new_block_row, new_block_col, - ARM_GRID_COPY[new_block_row][new_block_col]); + Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); } game_state = ReceiveGameStateFromRISCVCore(); diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c index b2091035ae7..1536bb85377 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c +++ b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c @@ -14,115960 +14,7416 @@ * See the License for the specific language governing permissions and * limitations under the License. * - ******************************************************************************/ + ******************************************************************************/ -__attribute__((section(".bin_storage_img"))) __attribute__((__used__)) -const unsigned char imgs_arr[] = { +__attribute__ ((section(".bin_storage_img"))) __attribute__ ((__used__)) +const unsigned char imgs_arr[ ] = { - /* +/* Header */ - 0x18, - 0x00, - 0x00, - 0x00, - 0x1D, - 0x04, - 0x00, - 0x00, - 0x16, - 0x0A, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, +0x18,0x00,0x00,0x00,0x1D,0x04,0x00,0x00,0x16,0x0A,0x00,0x00,0x01,0x00,0x00, +0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00, - /* +/* Palette */ - 0x01, - 0x1D, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x9B, - 0xA5, - 0x18, - 0x00, - 0x70, - 0x73, - 0x71, - 0x00, - 0x33, - 0x35, - 0x3B, - 0x00, - 0x20, - 0xE8, - 0xD9, - 0x00, - 0x03, - 0x02, - 0xD5, - 0x00, - 0x00, - 0xA9, - 0x00, - 0x00, - 0x6F, - 0x6E, - 0x7A, - 0x00, - 0xFF, - 0xFD, - 0xFF, - 0x00, - 0x76, - 0x75, - 0x76, - 0x00, - 0x95, - 0x94, - 0x95, - 0x00, - 0x6A, - 0x66, - 0x69, - 0x00, - 0x7A, - 0x76, - 0x78, - 0x00, - 0x76, - 0x72, - 0x74, - 0x00, - 0x75, - 0x71, - 0x73, - 0x00, - 0x71, - 0x6F, - 0x6F, - 0x00, - 0x76, - 0x75, - 0x75, - 0x00, - 0x75, - 0x74, - 0x74, - 0x00, - 0x74, - 0x73, - 0x73, - 0x00, - 0x73, - 0x72, - 0x72, - 0x00, - 0x72, - 0x71, - 0x71, - 0x00, - 0x91, - 0x90, - 0x90, - 0x00, - 0x86, - 0x85, - 0x85, - 0x00, - 0x67, - 0x65, - 0x64, - 0x00, - 0x63, - 0x61, - 0x60, - 0x00, - 0x70, - 0x6E, - 0x6D, - 0x00, - 0x6A, - 0x68, - 0x66, - 0x00, - 0x77, - 0x76, - 0x75, - 0x00, - 0x71, - 0x70, - 0x6F, - 0x00, - 0x6E, - 0x6D, - 0x6C, - 0x00, - 0x6D, - 0x6C, - 0x6B, - 0x00, - 0x6C, - 0x6B, - 0x6A, - 0x00, - 0x90, - 0x8F, - 0x8E, - 0x00, - 0x88, - 0x87, - 0x86, - 0x00, - 0x77, - 0x74, - 0x70, - 0x00, - 0x76, - 0x73, - 0x6F, - 0x00, - 0x75, - 0x72, - 0x6E, - 0x00, - 0x4F, - 0x4D, - 0x4A, - 0x00, - 0x5A, - 0x58, - 0x55, - 0x00, - 0x58, - 0x56, - 0x53, - 0x00, - 0x56, - 0x54, - 0x51, - 0x00, - 0x3F, - 0x3D, - 0x39, - 0x00, - 0x44, - 0x42, - 0x3E, - 0x00, - 0x47, - 0x45, - 0x41, - 0x00, - 0x4C, - 0x4A, - 0x46, - 0x00, - 0x4B, - 0x49, - 0x45, - 0x00, - 0x4A, - 0x48, - 0x44, - 0x00, - 0x4E, - 0x4C, - 0x48, - 0x00, - 0x4D, - 0x4B, - 0x47, - 0x00, - 0x6B, - 0x6A, - 0x68, - 0x00, - 0x68, - 0x67, - 0x65, - 0x00, - 0x66, - 0x65, - 0x63, - 0x00, - 0x64, - 0x63, - 0x61, - 0x00, - 0x74, - 0x73, - 0x71, - 0x00, - 0x73, - 0x72, - 0x70, - 0x00, - 0x42, - 0x40, - 0x3B, - 0x00, - 0x41, - 0x3F, - 0x3A, - 0x00, - 0x43, - 0x41, - 0x3C, - 0x00, - 0x46, - 0x44, - 0x3F, - 0x00, - 0x5D, - 0x5C, - 0x59, - 0x00, - 0x5B, - 0x5A, - 0x57, - 0x00, - 0x61, - 0x60, - 0x5D, - 0x00, - 0x5F, - 0x5E, - 0x5B, - 0x00, - 0x76, - 0x75, - 0x72, - 0x00, - 0x72, - 0x71, - 0x6E, - 0x00, - 0x53, - 0x52, - 0x4E, - 0x00, - 0x51, - 0x50, - 0x4C, - 0x00, - 0x79, - 0x78, - 0x74, - 0x00, - 0x48, - 0x47, - 0x42, - 0x00, - 0xFD, - 0xFC, - 0xF7, - 0x00, - 0x77, - 0x76, - 0x6B, - 0x00, - 0x80, - 0x7F, - 0x71, - 0x00, - 0x9D, - 0xA0, - 0x19, - 0x00, - 0x93, - 0x95, - 0x1E, - 0x00, - 0xA3, - 0xA6, - 0x25, - 0x00, - 0xF9, - 0xF9, - 0xED, - 0x00, - 0x76, - 0x76, - 0x73, - 0x00, - 0x79, - 0x79, - 0x77, - 0x00, - 0x89, - 0x89, - 0x87, - 0x00, - 0x81, - 0x81, - 0x7F, - 0x00, - 0x4C, - 0x4C, - 0x4B, - 0x00, - 0x4A, - 0x4A, - 0x49, - 0x00, - 0xFE, - 0xFE, - 0xFC, - 0x00, - 0xFF, - 0xFF, - 0xFE, - 0x00, - 0xE2, - 0xE2, - 0xE1, - 0x00, - 0xC2, - 0xC2, - 0xC1, - 0x00, - 0xB7, - 0xB7, - 0xB6, - 0x00, - 0xAE, - 0xAE, - 0xAD, - 0x00, - 0xA7, - 0xA7, - 0xA6, - 0x00, - 0xA1, - 0xA1, - 0xA0, - 0x00, - 0x9C, - 0x9C, - 0x9B, - 0x00, - 0x9A, - 0x9A, - 0x99, - 0x00, - 0x97, - 0x97, - 0x96, - 0x00, - 0x8E, - 0x8E, - 0x8D, - 0x00, - 0x8D, - 0x8D, - 0x8C, - 0x00, - 0x8A, - 0x8A, - 0x89, - 0x00, - 0x83, - 0x83, - 0x82, - 0x00, - 0xA6, - 0xAE, - 0x00, - 0x00, - 0xA5, - 0xAB, - 0x00, - 0x00, - 0xA2, - 0xA6, - 0x00, - 0x00, - 0xA0, - 0xA4, - 0x00, - 0x00, - 0x95, - 0x9C, - 0x01, - 0x00, - 0xA6, - 0xAA, - 0x0A, - 0x00, - 0x9F, - 0xA6, - 0x0B, - 0x00, - 0x89, - 0x8F, - 0x0E, - 0x00, - 0xA9, - 0xAD, - 0x13, - 0x00, - 0xAD, - 0xB1, - 0x1D, - 0x00, - 0x9C, - 0xA2, - 0x1F, - 0x00, - 0xB1, - 0xB5, - 0x25, - 0x00, - 0xBD, - 0xC3, - 0x41, - 0x00, - 0xB5, - 0xB9, - 0x44, - 0x00, - 0xC3, - 0xC8, - 0x59, - 0x00, - 0x83, - 0x85, - 0x4B, - 0x00, - 0xCB, - 0xCF, - 0x79, - 0x00, - 0x8B, - 0x8D, - 0x56, - 0x00, - 0x7D, - 0x7E, - 0x59, - 0x00, - 0xDB, - 0xDE, - 0x9D, - 0x00, - 0xE4, - 0xE6, - 0xB7, - 0x00, - 0xA9, - 0xB2, - 0x00, - 0x00, - 0xAF, - 0xB8, - 0x14, - 0x00, - 0x9D, - 0xA6, - 0x13, - 0x00, - 0x9C, - 0xA5, - 0x15, - 0x00, - 0x9B, - 0xA5, - 0x16, - 0x00, - 0x99, - 0xA2, - 0x17, - 0x00, - 0x9A, - 0xA3, - 0x19, - 0x00, - 0x9E, - 0xA7, - 0x1D, - 0x00, - 0xA0, - 0xA9, - 0x20, - 0x00, - 0x74, - 0x7A, - 0x1A, - 0x00, - 0xB5, - 0xBC, - 0x2B, - 0x00, - 0xAE, - 0xB4, - 0x36, - 0x00, - 0x9A, - 0xA0, - 0x31, - 0x00, - 0x93, - 0x97, - 0x46, - 0x00, - 0x97, - 0x9A, - 0x67, - 0x00, - 0xA8, - 0xAB, - 0x77, - 0x00, - 0x84, - 0x86, - 0x65, - 0x00, - 0xEC, - 0xEE, - 0xCC, - 0x00, - 0xF4, - 0xF5, - 0xE0, - 0x00, - 0x9C, - 0xA6, - 0x18, - 0x00, - 0x91, - 0x99, - 0x2C, - 0x00, - 0x60, - 0x65, - 0x24, - 0x00, - 0x6A, - 0x6C, - 0x56, - 0x00, - 0x77, - 0x79, - 0x62, - 0x00, - 0x9C, - 0xAB, - 0x15, - 0x00, - 0xA5, - 0xB5, - 0x2B, - 0x00, - 0x9E, - 0xAD, - 0x2C, - 0x00, - 0x8A, - 0x93, - 0x37, - 0x00, - 0x7C, - 0x84, - 0x3D, - 0x00, - 0x51, - 0x55, - 0x2F, - 0x00, - 0x4C, - 0x4F, - 0x2F, - 0x00, - 0x9C, - 0x9F, - 0x81, - 0x00, - 0x8F, - 0xA2, - 0x15, - 0x00, - 0xAF, - 0xC1, - 0x29, - 0x00, - 0xAA, - 0xBC, - 0x2A, - 0x00, - 0xA7, - 0xB8, - 0x2B, - 0x00, - 0xA4, - 0xB5, - 0x2B, - 0x00, - 0xA3, - 0xB3, - 0x2C, - 0x00, - 0x99, - 0xA9, - 0x35, - 0x00, - 0x45, - 0x48, - 0x32, - 0x00, - 0xA6, - 0xBA, - 0x32, - 0x00, - 0xA2, - 0xB5, - 0x33, - 0x00, - 0x9D, - 0xAF, - 0x34, - 0x00, - 0x6A, - 0x72, - 0x40, - 0x00, - 0x65, - 0x6B, - 0x42, - 0x00, - 0x5F, - 0x65, - 0x40, - 0x00, - 0x48, - 0x4C, - 0x31, - 0x00, - 0x58, - 0x5C, - 0x40, - 0x00, - 0x59, - 0x5C, - 0x47, - 0x00, - 0x53, - 0x56, - 0x44, - 0x00, - 0x4F, - 0x51, - 0x45, - 0x00, - 0x53, - 0x55, - 0x49, - 0x00, - 0x41, - 0x44, - 0x34, - 0x00, - 0x76, - 0x7A, - 0x66, - 0x00, - 0x48, - 0x4D, - 0x38, - 0x00, - 0x73, - 0x76, - 0x6B, - 0x00, - 0x4B, - 0x4D, - 0x46, - 0x00, - 0x41, - 0x45, - 0x39, - 0x00, - 0x73, - 0x76, - 0x6D, - 0x00, - 0x7C, - 0x7D, - 0x7B, - 0x00, - 0xFC, - 0xFD, - 0xFB, - 0x00, - 0x3A, - 0x3D, - 0x39, - 0x00, - 0x6D, - 0x71, - 0x6C, - 0x00, - 0x56, - 0x59, - 0x56, - 0x00, - 0x75, - 0x78, - 0x75, - 0x00, - 0xCC, - 0xCD, - 0xCC, - 0x00, - 0x50, - 0xCD, - 0x59, - 0x00, - 0x32, - 0xC6, - 0x3E, - 0x00, - 0x81, - 0xDC, - 0x89, - 0x00, - 0xA8, - 0xE8, - 0xAE, - 0x00, - 0xC3, - 0xEF, - 0xC7, - 0x00, - 0x02, - 0xC0, - 0x19, - 0x00, - 0xE9, - 0xF9, - 0xEB, - 0x00, - 0x02, - 0xD4, - 0x2E, - 0x00, - 0x6A, - 0x6D, - 0x6B, - 0x00, - 0x74, - 0x77, - 0x75, - 0x00, - 0x73, - 0x76, - 0x74, - 0x00, - 0x71, - 0x74, - 0x72, - 0x00, - 0x6C, - 0x6F, - 0x6D, - 0x00, - 0xFC, - 0xFF, - 0xFE, - 0x00, - 0x26, - 0xE2, - 0xD3, - 0x00, - 0x2E, - 0xD8, - 0xC9, - 0x00, - 0x34, - 0xD0, - 0xC1, - 0x00, - 0x57, - 0xE1, - 0xD5, - 0x00, - 0x88, - 0xE9, - 0xE1, - 0x00, - 0xBC, - 0xF3, - 0xEE, - 0x00, - 0xE0, - 0xF9, - 0xF7, - 0x00, - 0xF1, - 0xFD, - 0xFC, - 0x00, - 0x1F, - 0xE9, - 0xDA, - 0x00, - 0x63, - 0x65, - 0x65, - 0x00, - 0x51, - 0x52, - 0x52, - 0x00, - 0x55, - 0x56, - 0x56, - 0x00, - 0x4B, - 0x4D, - 0x4E, - 0x00, - 0x36, - 0x38, - 0x3A, - 0x00, - 0x42, - 0x44, - 0x47, - 0x00, - 0x6F, - 0x71, - 0x75, - 0x00, - 0x4E, - 0x4F, - 0x51, - 0x00, - 0x37, - 0x39, - 0x3E, - 0x00, - 0x3A, - 0x3C, - 0x41, - 0x00, - 0x34, - 0x36, - 0x3C, - 0x00, - 0x3F, - 0x40, - 0x44, - 0x00, - 0x46, - 0x47, - 0x4B, - 0x00, - 0x44, - 0x45, - 0x49, - 0x00, - 0x5A, - 0x5B, - 0x5F, - 0x00, - 0x79, - 0x7A, - 0x7F, - 0x00, - 0xF9, - 0xFA, - 0xFF, - 0x00, - 0x69, - 0x6A, - 0x70, - 0x00, - 0x12, - 0x25, - 0xF6, - 0x00, - 0x0D, - 0x1A, - 0xEB, - 0x00, - 0xEE, - 0xEF, - 0xFD, - 0x00, - 0x09, - 0x0F, - 0xE1, - 0x00, - 0x27, - 0x2A, - 0xE1, - 0x00, - 0x38, - 0x3A, - 0xE3, - 0x00, - 0x48, - 0x4A, - 0xE4, - 0x00, - 0x72, - 0x73, - 0xEA, - 0x00, - 0x7F, - 0x80, - 0xEC, - 0x00, - 0xA6, - 0xA6, - 0xF1, - 0x00, - 0xBD, - 0xBD, - 0xF5, - 0x00, - 0xD8, - 0xD8, - 0xF9, - 0x00, - 0x79, - 0x79, - 0x84, - 0x00, - 0x75, - 0x75, - 0x7E, - 0x00, - 0x97, - 0x97, - 0x9E, - 0x00, - 0x49, - 0x49, - 0x4C, - 0x00, - 0x58, - 0x58, - 0x59, - 0x00, - 0xFA, - 0xFA, - 0xFA, - 0x00, - 0xF7, - 0xF7, - 0xF7, - 0x00, - 0xF3, - 0xF3, - 0xF3, - 0x00, - 0xEA, - 0xEA, - 0xEA, - 0x00, - 0xD8, - 0xD8, - 0xD8, - 0x00, - 0x98, - 0x98, - 0x98, - 0x00, - 0x92, - 0x92, - 0x92, - 0x00, - 0x91, - 0x91, - 0x91, - 0x00, - 0x76, - 0x76, - 0x76, - 0x00, - 0x4D, - 0x4D, - 0x4D, - 0x00, - 0x4B, - 0x4B, - 0x4B, - 0x00, - 0x4A, - 0x4A, - 0x4A, - 0x00, - 0x49, - 0x49, - 0x49, - 0x00, +0x01, +0x1D,0x00,0x00,0x00, +0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9B,0xA5,0x18,0x00,0x70,0x73,0x71, +0x00,0x33,0x35,0x3B,0x00,0x20,0xE8,0xD9,0x00,0x03,0x02,0xD5,0x00,0x00,0xA9,0x00, +0x00,0x6F,0x6E,0x7A,0x00,0xFF,0xFD,0xFF,0x00,0x76,0x75,0x76,0x00,0x95,0x94,0x95, +0x00,0x6A,0x66,0x69,0x00,0x7A,0x76,0x78,0x00,0x76,0x72,0x74,0x00,0x75,0x71,0x73, +0x00,0x71,0x6F,0x6F,0x00,0x76,0x75,0x75,0x00,0x75,0x74,0x74,0x00,0x74,0x73,0x73, +0x00,0x73,0x72,0x72,0x00,0x72,0x71,0x71,0x00,0x91,0x90,0x90,0x00,0x86,0x85,0x85, +0x00,0x67,0x65,0x64,0x00,0x63,0x61,0x60,0x00,0x70,0x6E,0x6D,0x00,0x6A,0x68,0x66, +0x00,0x77,0x76,0x75,0x00,0x71,0x70,0x6F,0x00,0x6E,0x6D,0x6C,0x00,0x6D,0x6C,0x6B, +0x00,0x6C,0x6B,0x6A,0x00,0x90,0x8F,0x8E,0x00,0x88,0x87,0x86,0x00,0x77,0x74,0x70, +0x00,0x76,0x73,0x6F,0x00,0x75,0x72,0x6E,0x00,0x4F,0x4D,0x4A,0x00,0x5A,0x58,0x55, +0x00,0x58,0x56,0x53,0x00,0x56,0x54,0x51,0x00,0x3F,0x3D,0x39,0x00,0x44,0x42,0x3E, +0x00,0x47,0x45,0x41,0x00,0x4C,0x4A,0x46,0x00,0x4B,0x49,0x45,0x00,0x4A,0x48,0x44, +0x00,0x4E,0x4C,0x48,0x00,0x4D,0x4B,0x47,0x00,0x6B,0x6A,0x68,0x00,0x68,0x67,0x65, +0x00,0x66,0x65,0x63,0x00,0x64,0x63,0x61,0x00,0x74,0x73,0x71,0x00,0x73,0x72,0x70, +0x00,0x42,0x40,0x3B,0x00,0x41,0x3F,0x3A,0x00,0x43,0x41,0x3C,0x00,0x46,0x44,0x3F, +0x00,0x5D,0x5C,0x59,0x00,0x5B,0x5A,0x57,0x00,0x61,0x60,0x5D,0x00,0x5F,0x5E,0x5B, +0x00,0x76,0x75,0x72,0x00,0x72,0x71,0x6E,0x00,0x53,0x52,0x4E,0x00,0x51,0x50,0x4C, +0x00,0x79,0x78,0x74,0x00,0x48,0x47,0x42,0x00,0xFD,0xFC,0xF7,0x00,0x77,0x76,0x6B, +0x00,0x80,0x7F,0x71,0x00,0x9D,0xA0,0x19,0x00,0x93,0x95,0x1E,0x00,0xA3,0xA6,0x25, +0x00,0xF9,0xF9,0xED,0x00,0x76,0x76,0x73,0x00,0x79,0x79,0x77,0x00,0x89,0x89,0x87, +0x00,0x81,0x81,0x7F,0x00,0x4C,0x4C,0x4B,0x00,0x4A,0x4A,0x49,0x00,0xFE,0xFE,0xFC, +0x00,0xFF,0xFF,0xFE,0x00,0xE2,0xE2,0xE1,0x00,0xC2,0xC2,0xC1,0x00,0xB7,0xB7,0xB6, +0x00,0xAE,0xAE,0xAD,0x00,0xA7,0xA7,0xA6,0x00,0xA1,0xA1,0xA0,0x00,0x9C,0x9C,0x9B, +0x00,0x9A,0x9A,0x99,0x00,0x97,0x97,0x96,0x00,0x8E,0x8E,0x8D,0x00,0x8D,0x8D,0x8C, +0x00,0x8A,0x8A,0x89,0x00,0x83,0x83,0x82,0x00,0xA6,0xAE,0x00,0x00,0xA5,0xAB,0x00, +0x00,0xA2,0xA6,0x00,0x00,0xA0,0xA4,0x00,0x00,0x95,0x9C,0x01,0x00,0xA6,0xAA,0x0A, +0x00,0x9F,0xA6,0x0B,0x00,0x89,0x8F,0x0E,0x00,0xA9,0xAD,0x13,0x00,0xAD,0xB1,0x1D, +0x00,0x9C,0xA2,0x1F,0x00,0xB1,0xB5,0x25,0x00,0xBD,0xC3,0x41,0x00,0xB5,0xB9,0x44, +0x00,0xC3,0xC8,0x59,0x00,0x83,0x85,0x4B,0x00,0xCB,0xCF,0x79,0x00,0x8B,0x8D,0x56, +0x00,0x7D,0x7E,0x59,0x00,0xDB,0xDE,0x9D,0x00,0xE4,0xE6,0xB7,0x00,0xA9,0xB2,0x00, +0x00,0xAF,0xB8,0x14,0x00,0x9D,0xA6,0x13,0x00,0x9C,0xA5,0x15,0x00,0x9B,0xA5,0x16, +0x00,0x99,0xA2,0x17,0x00,0x9A,0xA3,0x19,0x00,0x9E,0xA7,0x1D,0x00,0xA0,0xA9,0x20, +0x00,0x74,0x7A,0x1A,0x00,0xB5,0xBC,0x2B,0x00,0xAE,0xB4,0x36,0x00,0x9A,0xA0,0x31, +0x00,0x93,0x97,0x46,0x00,0x97,0x9A,0x67,0x00,0xA8,0xAB,0x77,0x00,0x84,0x86,0x65, +0x00,0xEC,0xEE,0xCC,0x00,0xF4,0xF5,0xE0,0x00,0x9C,0xA6,0x18,0x00,0x91,0x99,0x2C, +0x00,0x60,0x65,0x24,0x00,0x6A,0x6C,0x56,0x00,0x77,0x79,0x62,0x00,0x9C,0xAB,0x15, +0x00,0xA5,0xB5,0x2B,0x00,0x9E,0xAD,0x2C,0x00,0x8A,0x93,0x37,0x00,0x7C,0x84,0x3D, +0x00,0x51,0x55,0x2F,0x00,0x4C,0x4F,0x2F,0x00,0x9C,0x9F,0x81,0x00,0x8F,0xA2,0x15, +0x00,0xAF,0xC1,0x29,0x00,0xAA,0xBC,0x2A,0x00,0xA7,0xB8,0x2B,0x00,0xA4,0xB5,0x2B, +0x00,0xA3,0xB3,0x2C,0x00,0x99,0xA9,0x35,0x00,0x45,0x48,0x32,0x00,0xA6,0xBA,0x32, +0x00,0xA2,0xB5,0x33,0x00,0x9D,0xAF,0x34,0x00,0x6A,0x72,0x40,0x00,0x65,0x6B,0x42, +0x00,0x5F,0x65,0x40,0x00,0x48,0x4C,0x31,0x00,0x58,0x5C,0x40,0x00,0x59,0x5C,0x47, +0x00,0x53,0x56,0x44,0x00,0x4F,0x51,0x45,0x00,0x53,0x55,0x49,0x00,0x41,0x44,0x34, +0x00,0x76,0x7A,0x66,0x00,0x48,0x4D,0x38,0x00,0x73,0x76,0x6B,0x00,0x4B,0x4D,0x46, +0x00,0x41,0x45,0x39,0x00,0x73,0x76,0x6D,0x00,0x7C,0x7D,0x7B,0x00,0xFC,0xFD,0xFB, +0x00,0x3A,0x3D,0x39,0x00,0x6D,0x71,0x6C,0x00,0x56,0x59,0x56,0x00,0x75,0x78,0x75, +0x00,0xCC,0xCD,0xCC,0x00,0x50,0xCD,0x59,0x00,0x32,0xC6,0x3E,0x00,0x81,0xDC,0x89, +0x00,0xA8,0xE8,0xAE,0x00,0xC3,0xEF,0xC7,0x00,0x02,0xC0,0x19,0x00,0xE9,0xF9,0xEB, +0x00,0x02,0xD4,0x2E,0x00,0x6A,0x6D,0x6B,0x00,0x74,0x77,0x75,0x00,0x73,0x76,0x74, +0x00,0x71,0x74,0x72,0x00,0x6C,0x6F,0x6D,0x00,0xFC,0xFF,0xFE,0x00,0x26,0xE2,0xD3, +0x00,0x2E,0xD8,0xC9,0x00,0x34,0xD0,0xC1,0x00,0x57,0xE1,0xD5,0x00,0x88,0xE9,0xE1, +0x00,0xBC,0xF3,0xEE,0x00,0xE0,0xF9,0xF7,0x00,0xF1,0xFD,0xFC,0x00,0x1F,0xE9,0xDA, +0x00,0x63,0x65,0x65,0x00,0x51,0x52,0x52,0x00,0x55,0x56,0x56,0x00,0x4B,0x4D,0x4E, +0x00,0x36,0x38,0x3A,0x00,0x42,0x44,0x47,0x00,0x6F,0x71,0x75,0x00,0x4E,0x4F,0x51, +0x00,0x37,0x39,0x3E,0x00,0x3A,0x3C,0x41,0x00,0x34,0x36,0x3C,0x00,0x3F,0x40,0x44, +0x00,0x46,0x47,0x4B,0x00,0x44,0x45,0x49,0x00,0x5A,0x5B,0x5F,0x00,0x79,0x7A,0x7F, +0x00,0xF9,0xFA,0xFF,0x00,0x69,0x6A,0x70,0x00,0x12,0x25,0xF6,0x00,0x0D,0x1A,0xEB, +0x00,0xEE,0xEF,0xFD,0x00,0x09,0x0F,0xE1,0x00,0x27,0x2A,0xE1,0x00,0x38,0x3A,0xE3, +0x00,0x48,0x4A,0xE4,0x00,0x72,0x73,0xEA,0x00,0x7F,0x80,0xEC,0x00,0xA6,0xA6,0xF1, +0x00,0xBD,0xBD,0xF5,0x00,0xD8,0xD8,0xF9,0x00,0x79,0x79,0x84,0x00,0x75,0x75,0x7E, +0x00,0x97,0x97,0x9E,0x00,0x49,0x49,0x4C,0x00,0x58,0x58,0x59,0x00,0xFA,0xFA,0xFA, +0x00,0xF7,0xF7,0xF7,0x00,0xF3,0xF3,0xF3,0x00,0xEA,0xEA,0xEA,0x00,0xD8,0xD8,0xD8, +0x00,0x98,0x98,0x98,0x00,0x92,0x92,0x92,0x00,0x91,0x91,0x91,0x00,0x76,0x76,0x76, +0x00,0x4D,0x4D,0x4D,0x00,0x4B,0x4B,0x4B,0x00,0x4A,0x4A,0x4A,0x00,0x49,0x49,0x49, +0x00, - /* +/* Fonts */ - 0x04, - 0x2E, - 0x04, - 0x00, - 0x00, - 0xA8, - 0x05, - 0x00, - 0x00, - 0x22, - 0x07, - 0x00, - 0x00, - 0x9C, - 0x08, - 0x00, - 0x00, - 0x5E, - 0x00, - 0x00, - 0x00, - 0x01, - 0x21, - 0x01, - 0x00, - 0x02, - 0x22, - 0x09, - 0x00, - 0x0B, - 0x23, - 0x15, - 0x00, - 0x09, - 0x24, - 0x1F, - 0x00, - 0x10, - 0x25, - 0x30, - 0x00, - 0x0F, - 0x26, - 0x40, - 0x00, - 0x02, - 0x27, - 0x43, - 0x00, - 0x06, - 0x28, - 0x4A, - 0x00, - 0x07, - 0x29, - 0x52, - 0x00, - 0x06, - 0x2A, - 0x59, - 0x00, - 0x0B, - 0x2B, - 0x65, - 0x00, - 0x05, - 0x2C, - 0x6B, - 0x00, - 0x06, - 0x2D, - 0x72, - 0x00, - 0x02, - 0x2E, - 0x75, - 0x00, - 0x09, - 0x2F, - 0x7F, - 0x00, - 0x0B, - 0x30, - 0x8B, - 0x00, - 0x05, - 0x31, - 0x91, - 0x00, - 0x0A, - 0x32, - 0x9C, - 0x00, - 0x0B, - 0x33, - 0xA8, - 0x00, - 0x0B, - 0x34, - 0xB4, - 0x00, - 0x0C, - 0x35, - 0xC1, - 0x00, - 0x0B, - 0x36, - 0xCD, - 0x00, - 0x09, - 0x37, - 0xD7, - 0x00, - 0x0A, - 0x38, - 0xE2, - 0x00, - 0x0B, - 0x39, - 0xEE, - 0x00, - 0x02, - 0x3A, - 0xF1, - 0x00, - 0x04, - 0x3B, - 0xF6, - 0x00, - 0x0B, - 0x3C, - 0x02, - 0x01, - 0x0B, - 0x3D, - 0x0E, - 0x01, - 0x0B, - 0x3E, - 0x1A, - 0x01, - 0x0A, - 0x3F, - 0x25, - 0x01, - 0x10, - 0x40, - 0x36, - 0x01, - 0x10, - 0x41, - 0x47, - 0x01, - 0x0A, - 0x42, - 0x52, - 0x01, - 0x10, - 0x43, - 0x63, - 0x01, - 0x0D, - 0x44, - 0x71, - 0x01, - 0x09, - 0x45, - 0x7B, - 0x01, - 0x09, - 0x46, - 0x85, - 0x01, - 0x11, - 0x47, - 0x97, - 0x01, - 0x0C, - 0x48, - 0xA4, - 0x01, - 0x02, - 0x49, - 0xA7, - 0x01, - 0x09, - 0x4A, - 0xB1, - 0x01, - 0x0B, - 0x4B, - 0xBD, - 0x01, - 0x09, - 0x4C, - 0xC7, - 0x01, - 0x11, - 0x4D, - 0xD9, - 0x01, - 0x0D, - 0x4E, - 0xE7, - 0x01, - 0x11, - 0x4F, - 0xF9, - 0x01, - 0x0B, - 0x50, - 0x05, - 0x02, - 0x11, - 0x51, - 0x17, - 0x02, - 0x0B, - 0x52, - 0x23, - 0x02, - 0x0A, - 0x53, - 0x2E, - 0x02, - 0x09, - 0x54, - 0x38, - 0x02, - 0x0B, - 0x55, - 0x44, - 0x02, - 0x0F, - 0x56, - 0x54, - 0x02, - 0x15, - 0x57, - 0x6A, - 0x02, - 0x0D, - 0x58, - 0x78, - 0x02, - 0x0E, - 0x59, - 0x87, - 0x02, - 0x0A, - 0x5A, - 0x92, - 0x02, - 0x04, - 0x5B, - 0x97, - 0x02, - 0x09, - 0x5C, - 0xA1, - 0x02, - 0x05, - 0x5D, - 0xA7, - 0x02, - 0x0D, - 0x5E, - 0xB5, - 0x02, - 0x0B, - 0x5F, - 0xC1, - 0x02, - 0x06, - 0x60, - 0xC8, - 0x02, - 0x0D, - 0x61, - 0xD6, - 0x02, - 0x0C, - 0x62, - 0xE3, - 0x02, - 0x0D, - 0x63, - 0xF1, - 0x02, - 0x0D, - 0x64, - 0xFF, - 0x02, - 0x0C, - 0x65, - 0x0C, - 0x03, - 0x06, - 0x66, - 0x13, - 0x03, - 0x0C, - 0x67, - 0x20, - 0x03, - 0x0B, - 0x68, - 0x2C, - 0x03, - 0x02, - 0x69, - 0x2F, - 0x03, - 0x05, - 0x6A, - 0x35, - 0x03, - 0x0A, - 0x6B, - 0x40, - 0x03, - 0x02, - 0x6C, - 0x43, - 0x03, - 0x12, - 0x6D, - 0x56, - 0x03, - 0x0A, - 0x6E, - 0x61, - 0x03, - 0x0C, - 0x6F, - 0x6E, - 0x03, - 0x0C, - 0x70, - 0x7B, - 0x03, - 0x0D, - 0x71, - 0x89, - 0x03, - 0x05, - 0x72, - 0x8F, - 0x03, - 0x07, - 0x73, - 0x97, - 0x03, - 0x07, - 0x74, - 0x9F, - 0x03, - 0x0A, - 0x75, - 0xAA, - 0x03, - 0x0C, - 0x76, - 0xB7, - 0x03, - 0x12, - 0x77, - 0xCA, - 0x03, - 0x0B, - 0x78, - 0xD6, - 0x03, - 0x0C, - 0x79, - 0xE3, - 0x03, - 0x09, - 0x7A, - 0xED, - 0x03, - 0x06, - 0x7B, - 0xF4, - 0x03, - 0x02, - 0x7C, - 0xF7, - 0x03, - 0x06, - 0x7D, - 0xFE, - 0x03, - 0x0B, - 0x7E, - 0x5E, - 0x01, - 0x00, - 0x00, - 0x01, - 0x21, - 0x01, - 0x00, - 0x02, - 0x22, - 0x09, - 0x00, - 0x0B, - 0x23, - 0x15, - 0x00, - 0x09, - 0x24, - 0x1F, - 0x00, - 0x10, - 0x25, - 0x30, - 0x00, - 0x0F, - 0x26, - 0x40, - 0x00, - 0x02, - 0x27, - 0x43, - 0x00, - 0x06, - 0x28, - 0x4A, - 0x00, - 0x07, - 0x29, - 0x52, - 0x00, - 0x06, - 0x2A, - 0x59, - 0x00, - 0x0B, - 0x2B, - 0x65, - 0x00, - 0x05, - 0x2C, - 0x6B, - 0x00, - 0x06, - 0x2D, - 0x72, - 0x00, - 0x02, - 0x2E, - 0x75, - 0x00, - 0x09, - 0x2F, - 0x7F, - 0x00, - 0x0B, - 0x30, - 0x8B, - 0x00, - 0x05, - 0x31, - 0x91, - 0x00, - 0x0A, - 0x32, - 0x9C, - 0x00, - 0x0B, - 0x33, - 0xA8, - 0x00, - 0x0B, - 0x34, - 0xB4, - 0x00, - 0x0C, - 0x35, - 0xC1, - 0x00, - 0x0B, - 0x36, - 0xCD, - 0x00, - 0x09, - 0x37, - 0xD7, - 0x00, - 0x0A, - 0x38, - 0xE2, - 0x00, - 0x0B, - 0x39, - 0xEE, - 0x00, - 0x02, - 0x3A, - 0xF1, - 0x00, - 0x04, - 0x3B, - 0xF6, - 0x00, - 0x0B, - 0x3C, - 0x02, - 0x01, - 0x0B, - 0x3D, - 0x0E, - 0x01, - 0x0B, - 0x3E, - 0x1A, - 0x01, - 0x0A, - 0x3F, - 0x25, - 0x01, - 0x10, - 0x40, - 0x36, - 0x01, - 0x10, - 0x41, - 0x47, - 0x01, - 0x0A, - 0x42, - 0x52, - 0x01, - 0x10, - 0x43, - 0x63, - 0x01, - 0x0D, - 0x44, - 0x71, - 0x01, - 0x09, - 0x45, - 0x7B, - 0x01, - 0x09, - 0x46, - 0x85, - 0x01, - 0x11, - 0x47, - 0x97, - 0x01, - 0x0C, - 0x48, - 0xA4, - 0x01, - 0x02, - 0x49, - 0xA7, - 0x01, - 0x09, - 0x4A, - 0xB1, - 0x01, - 0x0B, - 0x4B, - 0xBD, - 0x01, - 0x09, - 0x4C, - 0xC7, - 0x01, - 0x11, - 0x4D, - 0xD9, - 0x01, - 0x0D, - 0x4E, - 0xE7, - 0x01, - 0x11, - 0x4F, - 0xF9, - 0x01, - 0x0B, - 0x50, - 0x05, - 0x02, - 0x11, - 0x51, - 0x17, - 0x02, - 0x0B, - 0x52, - 0x23, - 0x02, - 0x0A, - 0x53, - 0x2E, - 0x02, - 0x09, - 0x54, - 0x38, - 0x02, - 0x0B, - 0x55, - 0x44, - 0x02, - 0x0F, - 0x56, - 0x54, - 0x02, - 0x15, - 0x57, - 0x6A, - 0x02, - 0x0D, - 0x58, - 0x78, - 0x02, - 0x0E, - 0x59, - 0x87, - 0x02, - 0x0A, - 0x5A, - 0x92, - 0x02, - 0x04, - 0x5B, - 0x97, - 0x02, - 0x09, - 0x5C, - 0xA1, - 0x02, - 0x05, - 0x5D, - 0xA7, - 0x02, - 0x0D, - 0x5E, - 0xB5, - 0x02, - 0x0B, - 0x5F, - 0xC1, - 0x02, - 0x06, - 0x60, - 0xC8, - 0x02, - 0x0D, - 0x61, - 0xD6, - 0x02, - 0x0C, - 0x62, - 0xE3, - 0x02, - 0x0D, - 0x63, - 0xF1, - 0x02, - 0x0D, - 0x64, - 0xFF, - 0x02, - 0x0C, - 0x65, - 0x0C, - 0x03, - 0x06, - 0x66, - 0x13, - 0x03, - 0x0C, - 0x67, - 0x20, - 0x03, - 0x0B, - 0x68, - 0x2C, - 0x03, - 0x02, - 0x69, - 0x2F, - 0x03, - 0x05, - 0x6A, - 0x35, - 0x03, - 0x0A, - 0x6B, - 0x40, - 0x03, - 0x02, - 0x6C, - 0x43, - 0x03, - 0x12, - 0x6D, - 0x56, - 0x03, - 0x0A, - 0x6E, - 0x61, - 0x03, - 0x0C, - 0x6F, - 0x6E, - 0x03, - 0x0C, - 0x70, - 0x7B, - 0x03, - 0x0D, - 0x71, - 0x89, - 0x03, - 0x05, - 0x72, - 0x8F, - 0x03, - 0x07, - 0x73, - 0x97, - 0x03, - 0x07, - 0x74, - 0x9F, - 0x03, - 0x0A, - 0x75, - 0xAA, - 0x03, - 0x0C, - 0x76, - 0xB7, - 0x03, - 0x12, - 0x77, - 0xCA, - 0x03, - 0x0B, - 0x78, - 0xD6, - 0x03, - 0x0C, - 0x79, - 0xE3, - 0x03, - 0x09, - 0x7A, - 0xED, - 0x03, - 0x06, - 0x7B, - 0xF4, - 0x03, - 0x02, - 0x7C, - 0xF7, - 0x03, - 0x06, - 0x7D, - 0xFE, - 0x03, - 0x0B, - 0x7E, - 0x5E, - 0x02, - 0x00, - 0x00, - 0x01, - 0x21, - 0x01, - 0x00, - 0x02, - 0x22, - 0x09, - 0x00, - 0x0C, - 0x23, - 0x16, - 0x00, - 0x09, - 0x24, - 0x20, - 0x00, - 0x11, - 0x25, - 0x32, - 0x00, - 0x10, - 0x26, - 0x43, - 0x00, - 0x02, - 0x27, - 0x46, - 0x00, - 0x07, - 0x28, - 0x4E, - 0x00, - 0x07, - 0x29, - 0x56, - 0x00, - 0x07, - 0x2A, - 0x5E, - 0x00, - 0x0C, - 0x2B, - 0x6B, - 0x00, - 0x04, - 0x2C, - 0x70, - 0x00, - 0x06, - 0x2D, - 0x77, - 0x00, - 0x02, - 0x2E, - 0x7A, - 0x00, - 0x0A, - 0x2F, - 0x85, - 0x00, - 0x0C, - 0x30, - 0x92, - 0x00, - 0x05, - 0x31, - 0x98, - 0x00, - 0x0B, - 0x32, - 0xA4, - 0x00, - 0x0B, - 0x33, - 0xB0, - 0x00, - 0x0C, - 0x34, - 0xBD, - 0x00, - 0x0C, - 0x35, - 0xCA, - 0x00, - 0x0C, - 0x36, - 0xD7, - 0x00, - 0x0A, - 0x37, - 0xE2, - 0x00, - 0x0B, - 0x38, - 0xEE, - 0x00, - 0x0C, - 0x39, - 0xFB, - 0x00, - 0x02, - 0x3A, - 0xFE, - 0x00, - 0x04, - 0x3B, - 0x03, - 0x01, - 0x0C, - 0x3C, - 0x10, - 0x01, - 0x0C, - 0x3D, - 0x1D, - 0x01, - 0x0C, - 0x3E, - 0x2A, - 0x01, - 0x0B, - 0x3F, - 0x36, - 0x01, - 0x11, - 0x40, - 0x48, - 0x01, - 0x11, - 0x41, - 0x5A, - 0x01, - 0x0B, - 0x42, - 0x66, - 0x01, - 0x11, - 0x43, - 0x78, - 0x01, - 0x0E, - 0x44, - 0x87, - 0x01, - 0x0A, - 0x45, - 0x92, - 0x01, - 0x09, - 0x46, - 0x9C, - 0x01, - 0x12, - 0x47, - 0xAF, - 0x01, - 0x0C, - 0x48, - 0xBC, - 0x01, - 0x02, - 0x49, - 0xBF, - 0x01, - 0x09, - 0x4A, - 0xC9, - 0x01, - 0x0C, - 0x4B, - 0xD6, - 0x01, - 0x09, - 0x4C, - 0xE0, - 0x01, - 0x12, - 0x4D, - 0xF3, - 0x01, - 0x0E, - 0x4E, - 0x02, - 0x02, - 0x12, - 0x4F, - 0x15, - 0x02, - 0x0B, - 0x50, - 0x21, - 0x02, - 0x12, - 0x51, - 0x34, - 0x02, - 0x0C, - 0x52, - 0x41, - 0x02, - 0x0B, - 0x53, - 0x4D, - 0x02, - 0x0A, - 0x54, - 0x58, - 0x02, - 0x0C, - 0x55, - 0x65, - 0x02, - 0x10, - 0x56, - 0x76, - 0x02, - 0x16, - 0x57, - 0x8D, - 0x02, - 0x0E, - 0x58, - 0x9C, - 0x02, - 0x0E, - 0x59, - 0xAB, - 0x02, - 0x0B, - 0x5A, - 0xB7, - 0x02, - 0x05, - 0x5B, - 0xBD, - 0x02, - 0x0A, - 0x5C, - 0xC8, - 0x02, - 0x05, - 0x5D, - 0xCE, - 0x02, - 0x0E, - 0x5E, - 0xDD, - 0x02, - 0x0C, - 0x5F, - 0xEA, - 0x02, - 0x07, - 0x60, - 0xF2, - 0x02, - 0x0E, - 0x61, - 0x01, - 0x03, - 0x0D, - 0x62, - 0x0F, - 0x03, - 0x0E, - 0x63, - 0x1E, - 0x03, - 0x0E, - 0x64, - 0x2D, - 0x03, - 0x0D, - 0x65, - 0x3B, - 0x03, - 0x07, - 0x66, - 0x43, - 0x03, - 0x0D, - 0x67, - 0x51, - 0x03, - 0x0B, - 0x68, - 0x5D, - 0x03, - 0x02, - 0x69, - 0x60, - 0x03, - 0x05, - 0x6A, - 0x66, - 0x03, - 0x0B, - 0x6B, - 0x72, - 0x03, - 0x02, - 0x6C, - 0x75, - 0x03, - 0x13, - 0x6D, - 0x89, - 0x03, - 0x0B, - 0x6E, - 0x95, - 0x03, - 0x0D, - 0x6F, - 0xA3, - 0x03, - 0x0D, - 0x70, - 0xB1, - 0x03, - 0x0D, - 0x71, - 0xBF, - 0x03, - 0x06, - 0x72, - 0xC6, - 0x03, - 0x08, - 0x73, - 0xCF, - 0x03, - 0x07, - 0x74, - 0xD7, - 0x03, - 0x0B, - 0x75, - 0xE3, - 0x03, - 0x0D, - 0x76, - 0xF1, - 0x03, - 0x14, - 0x77, - 0x06, - 0x04, - 0x0B, - 0x78, - 0x12, - 0x04, - 0x0D, - 0x79, - 0x20, - 0x04, - 0x09, - 0x7A, - 0x2A, - 0x04, - 0x06, - 0x7B, - 0x31, - 0x04, - 0x02, - 0x7C, - 0x34, - 0x04, - 0x06, - 0x7D, - 0x3B, - 0x04, - 0x0C, - 0x7E, - 0x5E, - 0x03, - 0x00, - 0x00, - 0x01, - 0x21, - 0x01, - 0x00, - 0x02, - 0x22, - 0x09, - 0x00, - 0x0C, - 0x23, - 0x16, - 0x00, - 0x09, - 0x24, - 0x20, - 0x00, - 0x11, - 0x25, - 0x32, - 0x00, - 0x10, - 0x26, - 0x43, - 0x00, - 0x02, - 0x27, - 0x46, - 0x00, - 0x07, - 0x28, - 0x4E, - 0x00, - 0x07, - 0x29, - 0x56, - 0x00, - 0x07, - 0x2A, - 0x5E, - 0x00, - 0x0C, - 0x2B, - 0x6B, - 0x00, - 0x04, - 0x2C, - 0x70, - 0x00, - 0x06, - 0x2D, - 0x77, - 0x00, - 0x02, - 0x2E, - 0x7A, - 0x00, - 0x0A, - 0x2F, - 0x85, - 0x00, - 0x0C, - 0x30, - 0x92, - 0x00, - 0x05, - 0x31, - 0x98, - 0x00, - 0x0B, - 0x32, - 0xA4, - 0x00, - 0x0B, - 0x33, - 0xB0, - 0x00, - 0x0C, - 0x34, - 0xBD, - 0x00, - 0x0C, - 0x35, - 0xCA, - 0x00, - 0x0C, - 0x36, - 0xD7, - 0x00, - 0x0A, - 0x37, - 0xE2, - 0x00, - 0x0B, - 0x38, - 0xEE, - 0x00, - 0x0C, - 0x39, - 0xFB, - 0x00, - 0x02, - 0x3A, - 0xFE, - 0x00, - 0x04, - 0x3B, - 0x03, - 0x01, - 0x0C, - 0x3C, - 0x10, - 0x01, - 0x0C, - 0x3D, - 0x1D, - 0x01, - 0x0C, - 0x3E, - 0x2A, - 0x01, - 0x0B, - 0x3F, - 0x36, - 0x01, - 0x11, - 0x40, - 0x48, - 0x01, - 0x11, - 0x41, - 0x5A, - 0x01, - 0x0B, - 0x42, - 0x66, - 0x01, - 0x11, - 0x43, - 0x78, - 0x01, - 0x0E, - 0x44, - 0x87, - 0x01, - 0x0A, - 0x45, - 0x92, - 0x01, - 0x09, - 0x46, - 0x9C, - 0x01, - 0x12, - 0x47, - 0xAF, - 0x01, - 0x0C, - 0x48, - 0xBC, - 0x01, - 0x02, - 0x49, - 0xBF, - 0x01, - 0x09, - 0x4A, - 0xC9, - 0x01, - 0x0C, - 0x4B, - 0xD6, - 0x01, - 0x09, - 0x4C, - 0xE0, - 0x01, - 0x12, - 0x4D, - 0xF3, - 0x01, - 0x0E, - 0x4E, - 0x02, - 0x02, - 0x12, - 0x4F, - 0x15, - 0x02, - 0x0B, - 0x50, - 0x21, - 0x02, - 0x12, - 0x51, - 0x34, - 0x02, - 0x0C, - 0x52, - 0x41, - 0x02, - 0x0B, - 0x53, - 0x4D, - 0x02, - 0x0A, - 0x54, - 0x58, - 0x02, - 0x0C, - 0x55, - 0x65, - 0x02, - 0x10, - 0x56, - 0x76, - 0x02, - 0x16, - 0x57, - 0x8D, - 0x02, - 0x0E, - 0x58, - 0x9C, - 0x02, - 0x0E, - 0x59, - 0xAB, - 0x02, - 0x0B, - 0x5A, - 0xB7, - 0x02, - 0x05, - 0x5B, - 0xBD, - 0x02, - 0x0A, - 0x5C, - 0xC8, - 0x02, - 0x05, - 0x5D, - 0xCE, - 0x02, - 0x0E, - 0x5E, - 0xDD, - 0x02, - 0x0C, - 0x5F, - 0xEA, - 0x02, - 0x07, - 0x60, - 0xF2, - 0x02, - 0x0E, - 0x61, - 0x01, - 0x03, - 0x0D, - 0x62, - 0x0F, - 0x03, - 0x0E, - 0x63, - 0x1E, - 0x03, - 0x0E, - 0x64, - 0x2D, - 0x03, - 0x0D, - 0x65, - 0x3B, - 0x03, - 0x07, - 0x66, - 0x43, - 0x03, - 0x0D, - 0x67, - 0x51, - 0x03, - 0x0B, - 0x68, - 0x5D, - 0x03, - 0x02, - 0x69, - 0x60, - 0x03, - 0x05, - 0x6A, - 0x66, - 0x03, - 0x0B, - 0x6B, - 0x72, - 0x03, - 0x02, - 0x6C, - 0x75, - 0x03, - 0x13, - 0x6D, - 0x89, - 0x03, - 0x0B, - 0x6E, - 0x95, - 0x03, - 0x0D, - 0x6F, - 0xA3, - 0x03, - 0x0D, - 0x70, - 0xB1, - 0x03, - 0x0D, - 0x71, - 0xBF, - 0x03, - 0x06, - 0x72, - 0xC6, - 0x03, - 0x08, - 0x73, - 0xCF, - 0x03, - 0x07, - 0x74, - 0xD7, - 0x03, - 0x0B, - 0x75, - 0xE3, - 0x03, - 0x0D, - 0x76, - 0xF1, - 0x03, - 0x14, - 0x77, - 0x06, - 0x04, - 0x0B, - 0x78, - 0x12, - 0x04, - 0x0D, - 0x79, - 0x20, - 0x04, - 0x09, - 0x7A, - 0x2A, - 0x04, - 0x06, - 0x7B, - 0x31, - 0x04, - 0x02, - 0x7C, - 0x34, - 0x04, - 0x06, - 0x7D, - 0x3B, - 0x04, - 0x0C, - 0x7E, +0x04, +0x2E,0x04,0x00,0x00,0xA8,0x05,0x00,0x00,0x22,0x07,0x00,0x00,0x9C,0x08,0x00, +0x00, +0x5E, +0x00, +0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0B,0x23,0x15,0x00,0x09, +0x24,0x1F,0x00,0x10,0x25,0x30,0x00,0x0F,0x26,0x40,0x00,0x02,0x27,0x43,0x00,0x06, +0x28,0x4A,0x00,0x07,0x29,0x52,0x00,0x06,0x2A,0x59,0x00,0x0B,0x2B,0x65,0x00,0x05, +0x2C,0x6B,0x00,0x06,0x2D,0x72,0x00,0x02,0x2E,0x75,0x00,0x09,0x2F,0x7F,0x00,0x0B, +0x30,0x8B,0x00,0x05,0x31,0x91,0x00,0x0A,0x32,0x9C,0x00,0x0B,0x33,0xA8,0x00,0x0B, +0x34,0xB4,0x00,0x0C,0x35,0xC1,0x00,0x0B,0x36,0xCD,0x00,0x09,0x37,0xD7,0x00,0x0A, +0x38,0xE2,0x00,0x0B,0x39,0xEE,0x00,0x02,0x3A,0xF1,0x00,0x04,0x3B,0xF6,0x00,0x0B, +0x3C,0x02,0x01,0x0B,0x3D,0x0E,0x01,0x0B,0x3E,0x1A,0x01,0x0A,0x3F,0x25,0x01,0x10, +0x40,0x36,0x01,0x10,0x41,0x47,0x01,0x0A,0x42,0x52,0x01,0x10,0x43,0x63,0x01,0x0D, +0x44,0x71,0x01,0x09,0x45,0x7B,0x01,0x09,0x46,0x85,0x01,0x11,0x47,0x97,0x01,0x0C, +0x48,0xA4,0x01,0x02,0x49,0xA7,0x01,0x09,0x4A,0xB1,0x01,0x0B,0x4B,0xBD,0x01,0x09, +0x4C,0xC7,0x01,0x11,0x4D,0xD9,0x01,0x0D,0x4E,0xE7,0x01,0x11,0x4F,0xF9,0x01,0x0B, +0x50,0x05,0x02,0x11,0x51,0x17,0x02,0x0B,0x52,0x23,0x02,0x0A,0x53,0x2E,0x02,0x09, +0x54,0x38,0x02,0x0B,0x55,0x44,0x02,0x0F,0x56,0x54,0x02,0x15,0x57,0x6A,0x02,0x0D, +0x58,0x78,0x02,0x0E,0x59,0x87,0x02,0x0A,0x5A,0x92,0x02,0x04,0x5B,0x97,0x02,0x09, +0x5C,0xA1,0x02,0x05,0x5D,0xA7,0x02,0x0D,0x5E,0xB5,0x02,0x0B,0x5F,0xC1,0x02,0x06, +0x60,0xC8,0x02,0x0D,0x61,0xD6,0x02,0x0C,0x62,0xE3,0x02,0x0D,0x63,0xF1,0x02,0x0D, +0x64,0xFF,0x02,0x0C,0x65,0x0C,0x03,0x06,0x66,0x13,0x03,0x0C,0x67,0x20,0x03,0x0B, +0x68,0x2C,0x03,0x02,0x69,0x2F,0x03,0x05,0x6A,0x35,0x03,0x0A,0x6B,0x40,0x03,0x02, +0x6C,0x43,0x03,0x12,0x6D,0x56,0x03,0x0A,0x6E,0x61,0x03,0x0C,0x6F,0x6E,0x03,0x0C, +0x70,0x7B,0x03,0x0D,0x71,0x89,0x03,0x05,0x72,0x8F,0x03,0x07,0x73,0x97,0x03,0x07, +0x74,0x9F,0x03,0x0A,0x75,0xAA,0x03,0x0C,0x76,0xB7,0x03,0x12,0x77,0xCA,0x03,0x0B, +0x78,0xD6,0x03,0x0C,0x79,0xE3,0x03,0x09,0x7A,0xED,0x03,0x06,0x7B,0xF4,0x03,0x02, +0x7C,0xF7,0x03,0x06,0x7D,0xFE,0x03,0x0B,0x7E, +0x5E, +0x01, +0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0B,0x23,0x15,0x00,0x09, +0x24,0x1F,0x00,0x10,0x25,0x30,0x00,0x0F,0x26,0x40,0x00,0x02,0x27,0x43,0x00,0x06, +0x28,0x4A,0x00,0x07,0x29,0x52,0x00,0x06,0x2A,0x59,0x00,0x0B,0x2B,0x65,0x00,0x05, +0x2C,0x6B,0x00,0x06,0x2D,0x72,0x00,0x02,0x2E,0x75,0x00,0x09,0x2F,0x7F,0x00,0x0B, +0x30,0x8B,0x00,0x05,0x31,0x91,0x00,0x0A,0x32,0x9C,0x00,0x0B,0x33,0xA8,0x00,0x0B, +0x34,0xB4,0x00,0x0C,0x35,0xC1,0x00,0x0B,0x36,0xCD,0x00,0x09,0x37,0xD7,0x00,0x0A, +0x38,0xE2,0x00,0x0B,0x39,0xEE,0x00,0x02,0x3A,0xF1,0x00,0x04,0x3B,0xF6,0x00,0x0B, +0x3C,0x02,0x01,0x0B,0x3D,0x0E,0x01,0x0B,0x3E,0x1A,0x01,0x0A,0x3F,0x25,0x01,0x10, +0x40,0x36,0x01,0x10,0x41,0x47,0x01,0x0A,0x42,0x52,0x01,0x10,0x43,0x63,0x01,0x0D, +0x44,0x71,0x01,0x09,0x45,0x7B,0x01,0x09,0x46,0x85,0x01,0x11,0x47,0x97,0x01,0x0C, +0x48,0xA4,0x01,0x02,0x49,0xA7,0x01,0x09,0x4A,0xB1,0x01,0x0B,0x4B,0xBD,0x01,0x09, +0x4C,0xC7,0x01,0x11,0x4D,0xD9,0x01,0x0D,0x4E,0xE7,0x01,0x11,0x4F,0xF9,0x01,0x0B, +0x50,0x05,0x02,0x11,0x51,0x17,0x02,0x0B,0x52,0x23,0x02,0x0A,0x53,0x2E,0x02,0x09, +0x54,0x38,0x02,0x0B,0x55,0x44,0x02,0x0F,0x56,0x54,0x02,0x15,0x57,0x6A,0x02,0x0D, +0x58,0x78,0x02,0x0E,0x59,0x87,0x02,0x0A,0x5A,0x92,0x02,0x04,0x5B,0x97,0x02,0x09, +0x5C,0xA1,0x02,0x05,0x5D,0xA7,0x02,0x0D,0x5E,0xB5,0x02,0x0B,0x5F,0xC1,0x02,0x06, +0x60,0xC8,0x02,0x0D,0x61,0xD6,0x02,0x0C,0x62,0xE3,0x02,0x0D,0x63,0xF1,0x02,0x0D, +0x64,0xFF,0x02,0x0C,0x65,0x0C,0x03,0x06,0x66,0x13,0x03,0x0C,0x67,0x20,0x03,0x0B, +0x68,0x2C,0x03,0x02,0x69,0x2F,0x03,0x05,0x6A,0x35,0x03,0x0A,0x6B,0x40,0x03,0x02, +0x6C,0x43,0x03,0x12,0x6D,0x56,0x03,0x0A,0x6E,0x61,0x03,0x0C,0x6F,0x6E,0x03,0x0C, +0x70,0x7B,0x03,0x0D,0x71,0x89,0x03,0x05,0x72,0x8F,0x03,0x07,0x73,0x97,0x03,0x07, +0x74,0x9F,0x03,0x0A,0x75,0xAA,0x03,0x0C,0x76,0xB7,0x03,0x12,0x77,0xCA,0x03,0x0B, +0x78,0xD6,0x03,0x0C,0x79,0xE3,0x03,0x09,0x7A,0xED,0x03,0x06,0x7B,0xF4,0x03,0x02, +0x7C,0xF7,0x03,0x06,0x7D,0xFE,0x03,0x0B,0x7E, +0x5E, +0x02, +0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0C,0x23,0x16,0x00,0x09, +0x24,0x20,0x00,0x11,0x25,0x32,0x00,0x10,0x26,0x43,0x00,0x02,0x27,0x46,0x00,0x07, +0x28,0x4E,0x00,0x07,0x29,0x56,0x00,0x07,0x2A,0x5E,0x00,0x0C,0x2B,0x6B,0x00,0x04, +0x2C,0x70,0x00,0x06,0x2D,0x77,0x00,0x02,0x2E,0x7A,0x00,0x0A,0x2F,0x85,0x00,0x0C, +0x30,0x92,0x00,0x05,0x31,0x98,0x00,0x0B,0x32,0xA4,0x00,0x0B,0x33,0xB0,0x00,0x0C, +0x34,0xBD,0x00,0x0C,0x35,0xCA,0x00,0x0C,0x36,0xD7,0x00,0x0A,0x37,0xE2,0x00,0x0B, +0x38,0xEE,0x00,0x0C,0x39,0xFB,0x00,0x02,0x3A,0xFE,0x00,0x04,0x3B,0x03,0x01,0x0C, +0x3C,0x10,0x01,0x0C,0x3D,0x1D,0x01,0x0C,0x3E,0x2A,0x01,0x0B,0x3F,0x36,0x01,0x11, +0x40,0x48,0x01,0x11,0x41,0x5A,0x01,0x0B,0x42,0x66,0x01,0x11,0x43,0x78,0x01,0x0E, +0x44,0x87,0x01,0x0A,0x45,0x92,0x01,0x09,0x46,0x9C,0x01,0x12,0x47,0xAF,0x01,0x0C, +0x48,0xBC,0x01,0x02,0x49,0xBF,0x01,0x09,0x4A,0xC9,0x01,0x0C,0x4B,0xD6,0x01,0x09, +0x4C,0xE0,0x01,0x12,0x4D,0xF3,0x01,0x0E,0x4E,0x02,0x02,0x12,0x4F,0x15,0x02,0x0B, +0x50,0x21,0x02,0x12,0x51,0x34,0x02,0x0C,0x52,0x41,0x02,0x0B,0x53,0x4D,0x02,0x0A, +0x54,0x58,0x02,0x0C,0x55,0x65,0x02,0x10,0x56,0x76,0x02,0x16,0x57,0x8D,0x02,0x0E, +0x58,0x9C,0x02,0x0E,0x59,0xAB,0x02,0x0B,0x5A,0xB7,0x02,0x05,0x5B,0xBD,0x02,0x0A, +0x5C,0xC8,0x02,0x05,0x5D,0xCE,0x02,0x0E,0x5E,0xDD,0x02,0x0C,0x5F,0xEA,0x02,0x07, +0x60,0xF2,0x02,0x0E,0x61,0x01,0x03,0x0D,0x62,0x0F,0x03,0x0E,0x63,0x1E,0x03,0x0E, +0x64,0x2D,0x03,0x0D,0x65,0x3B,0x03,0x07,0x66,0x43,0x03,0x0D,0x67,0x51,0x03,0x0B, +0x68,0x5D,0x03,0x02,0x69,0x60,0x03,0x05,0x6A,0x66,0x03,0x0B,0x6B,0x72,0x03,0x02, +0x6C,0x75,0x03,0x13,0x6D,0x89,0x03,0x0B,0x6E,0x95,0x03,0x0D,0x6F,0xA3,0x03,0x0D, +0x70,0xB1,0x03,0x0D,0x71,0xBF,0x03,0x06,0x72,0xC6,0x03,0x08,0x73,0xCF,0x03,0x07, +0x74,0xD7,0x03,0x0B,0x75,0xE3,0x03,0x0D,0x76,0xF1,0x03,0x14,0x77,0x06,0x04,0x0B, +0x78,0x12,0x04,0x0D,0x79,0x20,0x04,0x09,0x7A,0x2A,0x04,0x06,0x7B,0x31,0x04,0x02, +0x7C,0x34,0x04,0x06,0x7D,0x3B,0x04,0x0C,0x7E, +0x5E, +0x03, +0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0C,0x23,0x16,0x00,0x09, +0x24,0x20,0x00,0x11,0x25,0x32,0x00,0x10,0x26,0x43,0x00,0x02,0x27,0x46,0x00,0x07, +0x28,0x4E,0x00,0x07,0x29,0x56,0x00,0x07,0x2A,0x5E,0x00,0x0C,0x2B,0x6B,0x00,0x04, +0x2C,0x70,0x00,0x06,0x2D,0x77,0x00,0x02,0x2E,0x7A,0x00,0x0A,0x2F,0x85,0x00,0x0C, +0x30,0x92,0x00,0x05,0x31,0x98,0x00,0x0B,0x32,0xA4,0x00,0x0B,0x33,0xB0,0x00,0x0C, +0x34,0xBD,0x00,0x0C,0x35,0xCA,0x00,0x0C,0x36,0xD7,0x00,0x0A,0x37,0xE2,0x00,0x0B, +0x38,0xEE,0x00,0x0C,0x39,0xFB,0x00,0x02,0x3A,0xFE,0x00,0x04,0x3B,0x03,0x01,0x0C, +0x3C,0x10,0x01,0x0C,0x3D,0x1D,0x01,0x0C,0x3E,0x2A,0x01,0x0B,0x3F,0x36,0x01,0x11, +0x40,0x48,0x01,0x11,0x41,0x5A,0x01,0x0B,0x42,0x66,0x01,0x11,0x43,0x78,0x01,0x0E, +0x44,0x87,0x01,0x0A,0x45,0x92,0x01,0x09,0x46,0x9C,0x01,0x12,0x47,0xAF,0x01,0x0C, +0x48,0xBC,0x01,0x02,0x49,0xBF,0x01,0x09,0x4A,0xC9,0x01,0x0C,0x4B,0xD6,0x01,0x09, +0x4C,0xE0,0x01,0x12,0x4D,0xF3,0x01,0x0E,0x4E,0x02,0x02,0x12,0x4F,0x15,0x02,0x0B, +0x50,0x21,0x02,0x12,0x51,0x34,0x02,0x0C,0x52,0x41,0x02,0x0B,0x53,0x4D,0x02,0x0A, +0x54,0x58,0x02,0x0C,0x55,0x65,0x02,0x10,0x56,0x76,0x02,0x16,0x57,0x8D,0x02,0x0E, +0x58,0x9C,0x02,0x0E,0x59,0xAB,0x02,0x0B,0x5A,0xB7,0x02,0x05,0x5B,0xBD,0x02,0x0A, +0x5C,0xC8,0x02,0x05,0x5D,0xCE,0x02,0x0E,0x5E,0xDD,0x02,0x0C,0x5F,0xEA,0x02,0x07, +0x60,0xF2,0x02,0x0E,0x61,0x01,0x03,0x0D,0x62,0x0F,0x03,0x0E,0x63,0x1E,0x03,0x0E, +0x64,0x2D,0x03,0x0D,0x65,0x3B,0x03,0x07,0x66,0x43,0x03,0x0D,0x67,0x51,0x03,0x0B, +0x68,0x5D,0x03,0x02,0x69,0x60,0x03,0x05,0x6A,0x66,0x03,0x0B,0x6B,0x72,0x03,0x02, +0x6C,0x75,0x03,0x13,0x6D,0x89,0x03,0x0B,0x6E,0x95,0x03,0x0D,0x6F,0xA3,0x03,0x0D, +0x70,0xB1,0x03,0x0D,0x71,0xBF,0x03,0x06,0x72,0xC6,0x03,0x08,0x73,0xCF,0x03,0x07, +0x74,0xD7,0x03,0x0B,0x75,0xE3,0x03,0x0D,0x76,0xF1,0x03,0x14,0x77,0x06,0x04,0x0B, +0x78,0x12,0x04,0x0D,0x79,0x20,0x04,0x09,0x7A,0x2A,0x04,0x06,0x7B,0x31,0x04,0x02, +0x7C,0x34,0x04,0x06,0x7D,0x3B,0x04,0x0C,0x7E, - /* +/* Bitmaps */ - 0x04, - 0x27, - 0x0A, - 0x00, - 0x00, - 0x6F, - 0x73, - 0x00, - 0x00, - 0xB7, - 0xDC, - 0x00, - 0x00, - 0xCB, - 0x50, - 0x01, - 0x00, - 0x0B, - 0x04, - 0x00, - 0x00, - 0x1A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x3A, - 0x69, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xDF, - 0x56, - 0xF7, - 0x56, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x55, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB8, - 0x04, - 0xDF, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0x54, - 0xDF, - 0xDA, - 0x04, - 0xDD, - 0xF7, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF6, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x53, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x04, - 0x57, - 0x00, - 0xF4, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xC6, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xF6, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF3, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x53, - 0xD5, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x53, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x53, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x17, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF4, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x5B, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF3, - 0x00, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x53, - 0x00, - 0x00, - 0x53, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xB3, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xFA, - 0xB3, - 0x00, - 0x54, - 0x00, - 0xF5, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x55, - 0x54, - 0x54, - 0x00, - 0xF6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF4, - 0x00, - 0x54, - 0x53, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF4, - 0x00, - 0x54, - 0x54, - 0xF7, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x09, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0xB3, - 0x00, - 0x00, - 0x53, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0xF4, - 0x00, - 0x00, - 0x54, - 0x54, - 0x55, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x5E, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0xB3, - 0x56, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF6, - 0x54, - 0x00, - 0x54, - 0x00, - 0xF3, - 0x59, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x09, - 0xF6, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xF7, - 0x53, - 0x00, - 0x54, - 0x00, - 0x54, - 0xF6, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDE, - 0xF3, - 0x00, - 0x54, - 0x53, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xF7, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x55, - 0x54, - 0x00, - 0x54, - 0x00, - 0xF3, - 0x59, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xB8, - 0xB3, - 0x00, - 0x54, - 0x00, - 0x53, - 0xF7, - 0xDB, - 0xDA, - 0x56, - 0x54, - 0x54, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF3, - 0x00, - 0x54, - 0x53, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0xF3, - 0x00, - 0x54, - 0x54, - 0xF7, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xF6, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF4, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x58, - 0xB3, - 0x00, - 0x54, - 0x00, - 0xF6, - 0xDC, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x57, - 0x53, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0xB3, - 0x00, - 0x54, - 0x00, - 0xF6, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0xF3, - 0x00, - 0x54, - 0x00, - 0xF6, - 0xDC, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x56, - 0x53, - 0x00, - 0x00, - 0xC6, - 0x56, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB8, - 0xC6, - 0x00, - 0x00, - 0x53, - 0x58, - 0xDA, - 0xF3, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF1, - 0x00, - 0x54, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x56, - 0x53, - 0x00, - 0x54, - 0x54, - 0xF7, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x56, - 0xC6, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0xB3, - 0x00, - 0x54, - 0x00, - 0xF5, - 0xD2, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0xC6, - 0x54, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xB3, - 0xD2, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0xC6, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xF7, - 0xF7, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x54, - 0x55, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xC6, - 0x00, - 0x00, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x04, - 0x04, - 0xF1, - 0x00, - 0x00, - 0xF5, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x55, - 0xB8, - 0xF3, - 0x00, - 0xC6, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x00, - 0x55, - 0xB8, - 0xF5, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x54, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xC6, - 0xF7, - 0xF7, - 0x53, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF7, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF7, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x53, - 0x00, - 0x00, - 0xF4, - 0xF7, - 0xB8, - 0x55, - 0x00, - 0x00, - 0x55, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0xDA, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0xB8, - 0x55, - 0x53, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0xF4, - 0xF7, - 0xB8, - 0x55, - 0x54, - 0x00, - 0x54, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0xB8, - 0xF7, - 0xF4, - 0x00, - 0x00, - 0xB3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0xDF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x55, - 0x00, - 0x00, - 0xB3, - 0x55, - 0xB8, - 0xF7, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x55, - 0xB8, - 0xB3, - 0x54, - 0xF6, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0xB8, - 0x55, - 0x54, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x53, - 0x55, - 0xB8, - 0x55, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x54, - 0x00, - 0x55, - 0xB8, - 0xF4, - 0x54, - 0xB3, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x55, - 0xB8, - 0xF5, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xC6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xF7, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x53, - 0x00, - 0x54, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0xEF, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xB3, - 0x00, - 0x53, - 0xF7, - 0xB8, - 0xF5, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xB3, - 0x00, - 0x54, - 0x55, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0xD6, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDB, - 0xC6, - 0x00, - 0xB3, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0x53, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x54, - 0x00, - 0xF3, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0xF6, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xDD, - 0x54, - 0x00, - 0xB3, - 0xF7, - 0xB8, - 0xF4, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0x54, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xB3, - 0x00, - 0x53, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0x5D, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xB3, - 0xB8, - 0xF3, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xB3, - 0x00, - 0xB3, - 0xF7, - 0xF7, - 0x54, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xB8, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xF3, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0xDF, - 0xDA, - 0xDD, - 0xF3, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xE1, - 0x04, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x53, - 0x04, - 0x57, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF3, - 0x00, - 0x17, - 0xD3, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xDB, - 0x54, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x54, - 0xDA, - 0x04, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x00, - 0xF3, - 0x17, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF3, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF3, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF7, - 0x04, - 0x04, - 0xD8, - 0x55, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0xF5, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0xF6, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF1, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x55, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x00, - 0xF6, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x00, - 0xF4, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF7, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0xF3, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xDC, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xD4, - 0xF4, - 0x00, - 0xF5, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x54, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x54, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF4, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0xD8, - 0x04, - 0xDA, - 0x53, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xB3, - 0x00, - 0x21, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF4, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0xDA, - 0xC6, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xD4, - 0x54, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xD4, - 0x54, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x54, - 0xD8, - 0x04, - 0xDA, - 0x53, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x54, - 0x09, - 0xDA, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x00, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x59, - 0x54, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD9, - 0xC6, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x60, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDE, - 0x04, - 0xF5, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0xF3, - 0x00, - 0x00, - 0xF6, - 0xD3, - 0x04, - 0x04, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x04, - 0x04, - 0xD3, - 0xF6, - 0x00, - 0x00, - 0xF3, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x53, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x53, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x57, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x54, - 0xDE, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xC6, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF3, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0xDA, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x54, - 0xB8, - 0x04, - 0x57, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF6, - 0x55, - 0x04, - 0x04, - 0x57, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0xF6, - 0x04, - 0x56, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x58, - 0xDA, - 0xF7, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xB8, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF7, - 0x04, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x54, - 0xB8, - 0x04, - 0x57, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x16, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0xDE, - 0xB8, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0xDB, - 0x00, - 0x57, - 0x04, - 0x04, - 0xB3, - 0xB3, - 0xD7, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD6, - 0xDB, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xDF, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFB, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0xF7, - 0x54, - 0x59, - 0x17, - 0x17, - 0x55, - 0x00, - 0xFA, - 0x17, - 0x17, - 0x04, - 0xF7, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0xDC, - 0x54, - 0x54, - 0xDA, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x54, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF7, - 0x04, - 0xB3, - 0x00, - 0xD0, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0x00, - 0xF5, - 0xDD, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0xB8, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xD6, - 0xD0, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x59, - 0x54, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x55, - 0x00, - 0x54, - 0x54, - 0x5B, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x04, - 0xDF, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xD0, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x5D, - 0xDD, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0x5E, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x59, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x50, - 0x00, - 0x58, - 0x04, - 0x53, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x53, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0xD7, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x55, - 0x00, - 0x00, - 0xD2, - 0xD8, - 0xC6, - 0x00, - 0xD3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD4, - 0x54, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0xF6, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x54, - 0xB8, - 0x04, - 0xF7, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD8, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDB, - 0x55, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x00, - 0xD9, - 0x04, - 0xD9, - 0x00, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x58, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xC6, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF6, - 0x04, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xC6, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x54, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x53, - 0x04, - 0xDB, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0xB3, - 0xF3, - 0x04, - 0xD9, - 0x00, - 0x57, - 0x04, - 0x53, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xE1, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xD9, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x5A, - 0x59, - 0x53, - 0x00, - 0x17, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x17, - 0x17, - 0x17, - 0xF3, - 0x00, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x53, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xDF, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0xDC, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD8, - 0xDF, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x56, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0xE0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDB, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDA, - 0x04, - 0xD0, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x5B, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x55, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0xF6, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x5E, - 0x00, - 0xB3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xDF, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD8, - 0x04, - 0x5B, - 0x54, - 0x17, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0xD7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x55, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD2, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF7, - 0x5C, - 0x5E, - 0x56, - 0xF5, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x55, - 0x00, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDB, - 0x04, - 0xDD, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x5C, - 0x54, - 0xDE, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0xDF, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF6, - 0xDA, - 0xF6, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD8, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xB3, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x56, - 0x00, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x58, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0xC6, - 0xDD, - 0x04, - 0x57, - 0x00, - 0xD9, - 0x59, - 0x00, - 0xDB, - 0x04, - 0x57, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xB8, - 0x04, - 0xD7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF1, - 0xF4, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xF7, - 0xDC, - 0x04, - 0xB3, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x54, - 0x00, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x87, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xDD, - 0x00, - 0x55, - 0xDD, - 0xDD, - 0xDC, - 0x00, - 0xF7, - 0xDC, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD9, - 0xDF, - 0x54, - 0x00, - 0x00, - 0x54, - 0x50, - 0x04, - 0x04, - 0x55, - 0x00, - 0xFA, - 0xDA, - 0x04, - 0x04, - 0x5E, - 0x00, - 0x54, - 0x5D, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0xC6, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x50, - 0x00, - 0x57, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x09, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x53, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xF6, - 0xDE, - 0xF1, - 0x5C, - 0x54, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xDF, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x55, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x57, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xDC, - 0x00, - 0x55, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x56, - 0x04, - 0x00, - 0xF3, - 0x17, - 0x17, - 0x17, - 0x50, - 0xD0, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x55, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xDF, - 0x00, - 0x54, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xB8, - 0x04, - 0xDB, - 0x00, - 0xB8, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x55, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xF7, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x55, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDC, - 0x00, - 0x00, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0xF3, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD8, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xB3, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDB, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xD4, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD6, - 0x00, - 0xF7, - 0x58, - 0x54, - 0x00, - 0x00, - 0xB3, - 0x00, - 0x00, - 0xFA, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x53, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xB8, - 0x04, - 0x04, - 0xD8, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x00, - 0x55, - 0xD8, - 0x59, - 0x00, - 0xC6, - 0xD9, - 0x04, - 0xF3, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xF5, - 0x00, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD6, - 0x04, - 0xF5, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0xB8, - 0x04, - 0x5D, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x54, - 0x00, - 0x00, - 0x55, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x53, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xC6, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF6, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD3, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0x5C, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x17, - 0x60, - 0x5D, - 0x57, - 0xF6, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF3, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0xD5, - 0x04, - 0x00, - 0xF3, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0xE1, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xD5, - 0x04, - 0x00, - 0xF3, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x17, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF1, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0xDB, - 0xDB, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD2, - 0xEF, - 0x5D, - 0xF7, - 0x00, - 0xC6, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x57, - 0x53, - 0x00, - 0x53, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xDF, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF6, - 0x04, - 0x53, - 0x00, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0x00, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x5E, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xC6, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xB3, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE0, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xC6, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xD2, - 0xF3, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x55, - 0xD3, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0xC6, - 0x56, - 0xD9, - 0x04, - 0xD8, - 0xB3, - 0xF5, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x54, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xDF, - 0xD0, - 0xDA, - 0x04, - 0xF6, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x53, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xFA, - 0xF7, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xC6, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF4, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF4, - 0x5A, - 0x5B, - 0xF5, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0xB3, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0xD0, - 0x04, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xF3, - 0x00, - 0x00, - 0xF5, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF6, - 0x00, - 0x00, - 0xF3, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0xF5, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDA, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xDD, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xDA, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x55, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF7, - 0x04, - 0x00, - 0xF5, - 0xDD, - 0xDD, - 0xDD, - 0xD3, - 0xDF, - 0xF6, - 0x54, - 0x54, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF3, - 0x54, - 0x00, - 0x54, - 0x57, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD8, - 0x04, - 0x55, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x56, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0xDB, - 0xB8, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x54, - 0xB8, - 0x04, - 0x56, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF3, - 0xF5, - 0x04, - 0x04, - 0x56, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0xF6, - 0x04, - 0xB8, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x60, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x55, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x57, - 0x04, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0x53, - 0x04, - 0xB8, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x54, - 0xB8, - 0x04, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x54, - 0xB8, - 0x04, - 0x56, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xD9, - 0x04, - 0x04, - 0xDB, - 0xD9, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x58, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x5C, - 0xDC, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xDA, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xD0, - 0x55, - 0x00, - 0xD0, - 0xD0, - 0xD0, - 0xF5, - 0x00, - 0xD0, - 0xD0, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x00, - 0x00, - 0x55, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0xD2, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD8, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x53, - 0x57, - 0x5D, - 0x55, - 0x54, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xC6, - 0x57, - 0xFA, - 0xF7, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF6, - 0x00, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0x04, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0x04, - 0x04, - 0xE1, - 0xF3, - 0x00, - 0x00, - 0xF5, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x53, - 0x00, - 0xDB, - 0x04, - 0x54, - 0x53, - 0x04, - 0xD6, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x17, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0xDD, - 0xDD, - 0xD7, - 0x60, - 0xB3, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x00, - 0xF5, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xD8, - 0x04, - 0x00, - 0xF5, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDB, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0xDD, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x0A, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x57, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x57, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x60, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x56, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xB8, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF1, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0xD6, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x55, - 0x04, - 0xD8, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x54, - 0xD8, - 0x04, - 0xDA, - 0x53, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xB3, - 0x00, - 0x5E, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF3, - 0x00, - 0x00, - 0xF6, - 0x04, - 0xD8, - 0x54, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x54, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0xF5, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDA, - 0xC6, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x53, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xB3, - 0x00, - 0xDD, - 0x04, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xB8, - 0x04, - 0xD8, - 0x54, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0xD8, - 0x04, - 0xDA, - 0x54, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x54, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDC, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xC6, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x56, - 0x00, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x56, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xF6, - 0xD7, - 0xD6, - 0x54, - 0x00, - 0x00, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF3, - 0xDB, - 0xF7, - 0x00, - 0x54, - 0xD8, - 0x04, - 0xD9, - 0x17, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0xF7, - 0xDC, - 0xDB, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x5A, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xDC, - 0x5E, - 0x54, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0x54, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF6, - 0xDE, - 0xD7, - 0xF6, - 0x00, - 0x57, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF1, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x56, - 0x04, - 0x55, - 0x00, - 0xD5, - 0x04, - 0xF3, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x5C, - 0x00, - 0xF5, - 0x04, - 0xDE, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0xD6, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x53, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0xF4, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xB8, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x54, - 0xE0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x57, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0xDB, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xF6, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD3, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0xDA, - 0xF3, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF5, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF7, - 0xDB, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x54, - 0xD9, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x56, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x53, - 0x00, - 0x53, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0xDF, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x09, - 0xF3, - 0xF7, - 0xF7, - 0xF3, - 0x54, - 0x54, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x53, - 0x00, - 0x53, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xB3, - 0x54, - 0x53, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0x59, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xDD, - 0x54, - 0x54, - 0xF4, - 0xF7, - 0xF7, - 0xF3, - 0x54, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x56, - 0x56, - 0x00, - 0x53, - 0x56, - 0x56, - 0x04, - 0x04, - 0xF1, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0xF5, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xC6, - 0xD4, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0x55, - 0x00, - 0x00, - 0xD6, - 0xF6, - 0x00, - 0xF3, - 0xB8, - 0xF7, - 0x54, - 0x00, - 0x56, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0x53, - 0x54, - 0xB3, - 0xD8, - 0x04, - 0x04, - 0xDD, - 0x54, - 0x00, - 0xF3, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x09, - 0xF4, - 0xF7, - 0xF7, - 0xB3, - 0x54, - 0x54, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x53, - 0x00, - 0x53, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0x5C, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x09, - 0xF4, - 0x58, - 0x04, - 0xD3, - 0x00, - 0x54, - 0xB8, - 0xB3, - 0x00, - 0xD0, - 0x04, - 0x56, - 0x56, - 0x53, - 0x00, - 0x56, - 0x56, - 0x56, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD9, - 0x04, - 0xDF, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x50, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDB, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0xB8, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x00, - 0xF6, - 0x04, - 0xD8, - 0xD8, - 0xD9, - 0x00, - 0x58, - 0xD8, - 0xD8, - 0xD7, - 0x00, - 0x60, - 0xD8, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDF, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0xD8, - 0xDB, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x00, - 0xDB, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x56, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x56, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0xF1, - 0x00, - 0xF5, - 0x04, - 0xDB, - 0x54, - 0x54, - 0xB8, - 0x5A, - 0x00, - 0x53, - 0x00, - 0xD8, - 0xF6, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF3, - 0x04, - 0xDA, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xDF, - 0xDB, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x5E, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xF7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xE1, - 0x09, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF4, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD7, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x5E, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0xE1, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD6, - 0x04, - 0xD6, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xDF, - 0x04, - 0xFA, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x58, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDD, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x57, - 0x53, - 0x00, - 0x00, - 0xC6, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x58, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xF1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x59, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB8, - 0x53, - 0x00, - 0x00, - 0xC6, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF7, - 0x54, - 0x00, - 0x00, - 0xB3, - 0x5C, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xD7, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xE1, - 0xB3, - 0x00, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x04, - 0x57, - 0x54, - 0x00, - 0x00, - 0xB3, - 0x17, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDD, - 0xF5, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x56, - 0x53, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x57, - 0x53, - 0x00, - 0x00, - 0xC6, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x59, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD2, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x57, - 0x00, - 0x00, - 0x04, - 0x04, - 0xD6, - 0xC6, - 0x00, - 0x54, - 0x5C, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xF6, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x56, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x59, - 0x04, - 0xB8, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF3, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD9, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0xF7, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x17, - 0x59, - 0x00, - 0x09, - 0x57, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xDF, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x04, - 0x5E, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDE, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x56, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x58, - 0x04, - 0xDB, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0xD8, - 0x04, - 0x60, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDC, - 0x5A, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x53, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xD6, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x5C, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF7, - 0x54, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x00, - 0xF1, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x53, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF3, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x5A, - 0x04, - 0x56, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0xDA, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x58, - 0x09, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x60, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x5A, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x57, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x55, - 0x04, - 0x04, - 0x53, - 0x00, - 0xD8, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x53, - 0x04, - 0x04, - 0xD3, - 0x00, - 0xB3, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x50, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x55, - 0xD8, - 0x04, - 0xD8, - 0xD9, - 0x04, - 0xDA, - 0xB8, - 0x54, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x00, - 0x55, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x56, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0xF4, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF6, - 0x00, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xF6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x50, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF3, - 0x00, - 0xE1, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x00, - 0xF6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF6, - 0x00, - 0x53, - 0xD8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xB3, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x5D, - 0x04, - 0xD5, - 0x00, - 0x54, - 0xD5, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF6, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x5E, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF3, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xD9, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x04, - 0x04, - 0x04, - 0xF6, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xF7, - 0xD9, - 0xD8, - 0xF7, - 0x00, - 0x58, - 0x04, - 0xD6, - 0x00, - 0x54, - 0xF7, - 0xF6, - 0x00, - 0x53, - 0xDA, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0xC6, - 0xB8, - 0xF6, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0x54, - 0x04, - 0x5C, - 0x54, - 0xB3, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xD6, - 0x00, - 0x00, - 0xDF, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xC6, - 0xF7, - 0xB8, - 0xF5, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x17, - 0x56, - 0x56, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xF5, - 0x54, - 0x53, - 0xF7, - 0xF7, - 0x53, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xF4, - 0xB8, - 0xF6, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF5, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x00, - 0x00, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x54, - 0xF7, - 0xF7, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x55, - 0xB8, - 0xF3, - 0x00, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x00, - 0xF3, - 0xB8, - 0xF7, - 0x00, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF4, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0xF3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0xF7, - 0xF5, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF4, - 0x00, - 0x00, - 0xF4, - 0xF7, - 0xB8, - 0x55, - 0x54, - 0x53, - 0x54, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0xB8, - 0x55, - 0xF3, - 0x00, - 0x00, - 0xF3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0xDF, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0xB3, - 0x55, - 0xB8, - 0xF7, - 0xF3, - 0x00, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x50, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0xF3, - 0xF7, - 0xB8, - 0x55, - 0x54, - 0x54, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0xB8, - 0xF7, - 0xF5, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF5, - 0x00, - 0x00, - 0xF3, - 0x55, - 0xB8, - 0xF7, - 0xF3, - 0x00, - 0x00, - 0xF6, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x56, - 0x56, - 0xB8, - 0x55, - 0xB3, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x54, - 0xF6, - 0xB8, - 0xB3, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x56, - 0x56, - 0x56, - 0x53, - 0x00, - 0x56, - 0x56, - 0x56, - 0x56, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xD7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xF1, - 0x04, - 0x5B, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x50, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x60, - 0x04, - 0x04, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0x56, - 0xB8, - 0x54, - 0x00, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xF4, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF4, - 0x00, - 0x54, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xF7, - 0xD5, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xD0, - 0xF3, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x56, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xB3, - 0x00, - 0x00, - 0xF6, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x53, - 0x00, - 0x00, - 0xF6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF5, - 0x04, - 0x5A, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x50, - 0x04, - 0x04, - 0x04, - 0xFA, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDC, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x5A, - 0xB3, - 0x00, - 0x00, - 0x53, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF3, - 0x00, - 0x00, - 0xB3, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF4, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x55, - 0xC6, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF6, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF6, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x59, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x55, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF7, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x54, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xF7, - 0x53, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x59, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF4, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF6, - 0x54, - 0x00, - 0x00, - 0x00, - 0x54, - 0x55, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xF7, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xF5, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xDA, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x55, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF1, - 0x00, - 0x55, - 0x04, - 0xF5, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD5, - 0x04, - 0xDE, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD2, - 0x04, - 0xF2, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x54, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF5, - 0x04, - 0xD8, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0xC6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x54, - 0x00, - 0xD6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF7, - 0x00, - 0xF4, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF4, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0xD5, - 0xD9, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x00, - 0x00, - 0x0B, - 0x04, - 0x00, - 0x00, - 0x1A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x3A, - 0x69, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x59, - 0xF7, - 0xF7, - 0xB8, - 0xF9, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x55, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0x04, - 0x59, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xB8, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0x54, - 0x59, - 0xDB, - 0x04, - 0xE1, - 0x55, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0xF5, - 0x53, - 0xB3, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0D, - 0x53, - 0x54, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF5, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0x00, - 0x04, - 0xB8, - 0x54, - 0xF4, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xC6, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xF5, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0xF3, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0x00, - 0x53, - 0xD0, - 0x04, - 0x04, - 0x56, - 0x00, - 0x53, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x53, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x58, - 0x04, - 0x04, - 0xE1, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF3, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x60, - 0xF3, - 0x00, - 0x00, - 0xF3, - 0x60, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB8, - 0x53, - 0x00, - 0x00, - 0xB3, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xB3, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD6, - 0x53, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0xF3, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0xF4, - 0x00, - 0x00, - 0x54, - 0x55, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0xB3, - 0x00, - 0x00, - 0x53, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD8, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x58, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x09, - 0x57, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF7, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0xF6, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x56, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0xF6, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF5, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x55, - 0x53, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF5, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x60, - 0xF3, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xD8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF7, - 0x04, - 0x00, - 0x00, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x00, - 0xD0, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x55, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x56, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0xF7, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x53, - 0xF7, - 0xDE, - 0xDB, - 0xF7, - 0x54, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x5E, - 0xF3, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x59, - 0xF3, - 0x00, - 0x00, - 0x54, - 0x55, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xF6, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0xDB, - 0x53, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x56, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xD9, - 0xB8, - 0x53, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x56, - 0xB3, - 0x00, - 0x00, - 0x54, - 0xF5, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0xF3, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xB8, - 0x53, - 0x00, - 0x00, - 0xC6, - 0xF7, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0xC6, - 0x00, - 0x00, - 0x53, - 0xB8, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x54, - 0xDD, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xF7, - 0x53, - 0x00, - 0x00, - 0x54, - 0x55, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD9, - 0xB8, - 0xC6, - 0x00, - 0x00, - 0x53, - 0xF7, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x56, - 0xB3, - 0x00, - 0x00, - 0x54, - 0xF5, - 0xDF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF7, - 0x54, - 0x00, - 0x00, - 0xB3, - 0x17, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xB3, - 0x00, - 0x00, - 0x54, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xC6, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x55, - 0x55, - 0x00, - 0x00, - 0x5B, - 0x04, - 0xD8, - 0xF3, - 0x00, - 0x53, - 0xF7, - 0x55, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x54, - 0x55, - 0xF7, - 0xF5, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x54, - 0x00, - 0x00, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0xF5, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0x55, - 0xF7, - 0xF3, - 0x00, - 0xC6, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0xF6, - 0xF7, - 0xF4, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xC6, - 0x55, - 0x55, - 0x53, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x55, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x55, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x53, - 0x00, - 0x00, - 0xF4, - 0x55, - 0xF7, - 0x55, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0xF7, - 0xF6, - 0x53, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0x55, - 0xF7, - 0xF6, - 0x54, - 0x00, - 0x54, - 0x17, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0xF7, - 0x55, - 0xF3, - 0x00, - 0x00, - 0xB3, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x59, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF6, - 0x00, - 0x00, - 0xB3, - 0x55, - 0xF7, - 0x55, - 0xF3, - 0x00, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x60, - 0x00, - 0x00, - 0xF6, - 0xF7, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0xF3, - 0xD8, - 0x04, - 0x00, - 0xB3, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xDC, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x55, - 0x00, - 0x00, - 0xF3, - 0x55, - 0xF7, - 0xF6, - 0x54, - 0x00, - 0x00, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x53, - 0x55, - 0xF7, - 0x55, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0xF6, - 0xF7, - 0xF4, - 0x00, - 0xB3, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x55, - 0xF7, - 0xF5, - 0x00, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0x11, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0x11, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xC6, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x53, - 0x00, - 0x54, - 0x55, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0x5A, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x55, - 0x55, - 0xF3, - 0x00, - 0x54, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xF2, - 0xB3, - 0x00, - 0x53, - 0x55, - 0xF7, - 0xF5, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0xB3, - 0x00, - 0x54, - 0x55, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0x5B, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDE, - 0xC6, - 0x00, - 0xB3, - 0xF7, - 0x55, - 0xF3, - 0x00, - 0x53, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x53, - 0x00, - 0xF3, - 0xF7, - 0x55, - 0xF3, - 0x00, - 0xF5, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x54, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xE1, - 0x53, - 0x00, - 0xB3, - 0x55, - 0xF7, - 0xF3, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0xF2, - 0xB3, - 0x00, - 0x53, - 0x55, - 0xF7, - 0xF5, - 0x00, - 0x00, - 0x57, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xB3, - 0xF7, - 0xF3, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xB3, - 0x00, - 0xB3, - 0x55, - 0x55, - 0x54, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xF3, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x09, - 0xC6, - 0x59, - 0xDB, - 0xE1, - 0xF3, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0x5C, - 0x04, - 0x53, - 0x00, - 0xD2, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x53, - 0x04, - 0xB8, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF3, - 0x00, - 0x58, - 0x0A, - 0x00, - 0x00, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF4, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xDE, - 0x54, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0xDB, - 0x04, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x00, - 0xF3, - 0x58, - 0x04, - 0x04, - 0x60, - 0x00, - 0xF3, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x17, - 0x00, - 0x53, - 0xD7, - 0x04, - 0x04, - 0x04, - 0xF9, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x54, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0xD5, - 0xF6, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0xF5, - 0x54, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0xF5, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD7, - 0x54, - 0x00, - 0xF6, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x60, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x57, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x53, - 0x00, - 0xF3, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x55, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0xF3, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD6, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xD9, - 0xF3, - 0x00, - 0xF4, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x54, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x54, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x53, - 0xF4, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF4, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x54, - 0xDC, - 0x04, - 0xD9, - 0x53, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xB3, - 0x00, - 0x57, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF3, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0xDB, - 0xC6, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xDC, - 0x54, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x09, - 0xC6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF3, - 0x04, - 0x04, - 0xD8, - 0xF3, - 0x54, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xDC, - 0x54, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x00, - 0x00, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0x00, - 0x54, - 0xDC, - 0x04, - 0xDB, - 0x53, - 0x54, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF4, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0xD9, - 0x04, - 0xD8, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0xB8, - 0x53, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x56, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x00, - 0x00, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0x57, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF2, - 0xC6, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x58, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x60, - 0x04, - 0xF4, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x5E, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0xF3, - 0x00, - 0x00, - 0xF5, - 0x0A, - 0x04, - 0x04, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x04, - 0x04, - 0x0A, - 0xF5, - 0x00, - 0x00, - 0xF3, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x09, - 0xB3, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xB3, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x53, - 0x53, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x54, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x54, - 0x60, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xC6, - 0x00, - 0x0D, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xF3, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x56, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDB, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xF7, - 0x04, - 0xB8, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF5, - 0xF6, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x00, - 0xF6, - 0x04, - 0xB8, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x56, - 0xDA, - 0x55, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xF7, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0x55, - 0x04, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xF7, - 0x04, - 0xB8, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x57, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x60, - 0xF7, - 0x00, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0xDE, - 0x54, - 0xB8, - 0x04, - 0x04, - 0xB3, - 0xB3, - 0x0D, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x5A, - 0xDE, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x59, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFB, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x55, - 0x00, - 0x56, - 0x58, - 0x58, - 0xF6, - 0x09, - 0x57, - 0x58, - 0x58, - 0x04, - 0x55, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD6, - 0x54, - 0xC6, - 0xDB, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x54, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x53, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x55, - 0x04, - 0xB3, - 0x54, - 0x16, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0x00, - 0xF4, - 0xE1, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF7, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x5B, - 0xF9, - 0x00, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x56, - 0x54, - 0x54, - 0x00, - 0x55, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x55, - 0x00, - 0x00, - 0x54, - 0x57, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0xDB, - 0x55, - 0x00, - 0x00, - 0xD8, - 0x59, - 0x00, - 0xF4, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0xF9, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x57, - 0xE1, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0x57, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xC6, - 0x56, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD9, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0xB8, - 0x04, - 0x53, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x53, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x0D, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x55, - 0x00, - 0x00, - 0xDF, - 0xD5, - 0xE0, - 0x00, - 0x0A, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDB, - 0xC6, - 0x09, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0xF6, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF7, - 0x04, - 0x55, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD3, - 0xF5, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDE, - 0xF6, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x00, - 0xD7, - 0x04, - 0xD7, - 0x00, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x56, - 0xC6, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xC6, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xC6, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xF6, - 0x04, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x55, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xC6, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xE0, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x53, - 0x04, - 0xDE, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0xF7, - 0x04, - 0xB3, - 0xF3, - 0x04, - 0xF2, - 0x54, - 0xB8, - 0x04, - 0x53, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x00, - 0x00, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0xF6, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x09, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x60, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x5D, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x04, - 0xD7, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB3, - 0x56, - 0x56, - 0x53, - 0x00, - 0x58, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x58, - 0x58, - 0x58, - 0xF3, - 0x00, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x53, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x59, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0x04, - 0xD6, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD5, - 0x59, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0xDB, - 0xF6, - 0x00, - 0x09, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDE, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD8, - 0x04, - 0x5E, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x57, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x55, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0xF5, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF4, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x57, - 0x09, - 0xB3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x59, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDC, - 0x04, - 0x57, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF6, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x55, - 0x57, - 0x57, - 0xB8, - 0xF4, - 0x00, - 0x00, - 0xF5, - 0xD7, - 0x04, - 0x04, - 0x16, - 0x09, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDE, - 0x04, - 0xE1, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x57, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x59, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0x00, - 0xF5, - 0xDA, - 0xF5, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD5, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xB3, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF7, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xB8, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xE1, - 0x04, - 0xB8, - 0x54, - 0xD7, - 0x56, - 0x00, - 0xDE, - 0x04, - 0xB8, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x54, - 0xF7, - 0x04, - 0x0D, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xF4, - 0x00, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x55, - 0x13, - 0x04, - 0xB3, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x57, - 0x54, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xAD, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xE1, - 0x00, - 0xF6, - 0xE1, - 0xE1, - 0xD6, - 0x00, - 0x55, - 0xE1, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD2, - 0x59, - 0x53, - 0x00, - 0x00, - 0x54, - 0x59, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0x54, - 0x57, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x54, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0D, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xB3, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xB8, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0x55, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0D, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x09, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xF5, - 0x16, - 0xD6, - 0x57, - 0x54, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x59, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x54, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x54, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xD6, - 0x00, - 0x55, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xB8, - 0x04, - 0x00, - 0xF3, - 0x58, - 0x58, - 0x58, - 0x59, - 0xF9, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF6, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x59, - 0x54, - 0x00, - 0x00, - 0xF3, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF7, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0x04, - 0xD5, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x55, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x53, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x55, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xE1, - 0x09, - 0xC6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF3, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDC, - 0x04, - 0x04, - 0xF9, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xB3, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDE, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x55, - 0x04, - 0x5B, - 0x53, - 0x55, - 0xB8, - 0x53, - 0x54, - 0x00, - 0xB3, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x53, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0xF7, - 0x04, - 0x04, - 0xD3, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x54, - 0x00, - 0x55, - 0xDC, - 0x56, - 0x00, - 0xC6, - 0xF2, - 0x04, - 0xF3, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xF4, - 0x00, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xB3, - 0x09, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0x00, - 0xF2, - 0x04, - 0x04, - 0xD8, - 0x53, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x5A, - 0x04, - 0xF5, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xF7, - 0x04, - 0x57, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0x00, - 0x00, - 0xF6, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x55, - 0x00, - 0x54, - 0x54, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0xC6, - 0x57, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF5, - 0x04, - 0x04, - 0x60, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x0A, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0x57, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x58, - 0x58, - 0x57, - 0xB8, - 0xF5, - 0x00, - 0x53, - 0xD7, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF3, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0xD0, - 0x04, - 0x00, - 0xF3, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x5D, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xD0, - 0x04, - 0x00, - 0xF3, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x58, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x54, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0xD8, - 0xDE, - 0xDE, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x17, - 0x5A, - 0x57, - 0x55, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xB8, - 0x53, - 0x54, - 0x53, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x17, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x59, - 0x00, - 0x59, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF6, - 0x04, - 0x54, - 0x00, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0x00, - 0x09, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xC6, - 0xC6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x57, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x09, - 0xC6, - 0x04, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xB3, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x58, - 0xC6, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xC6, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0xDF, - 0xF3, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF6, - 0x0A, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xD7, - 0x04, - 0xD5, - 0xB3, - 0xF5, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x54, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0x54, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x59, - 0x5E, - 0xD9, - 0x04, - 0xF5, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x53, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x57, - 0xF7, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x55, - 0xD8, - 0x04, - 0x04, - 0xDA, - 0xDF, - 0x00, - 0xC6, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF4, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF4, - 0x56, - 0x57, - 0xF5, - 0x00, - 0xF4, - 0xD9, - 0x04, - 0xB3, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x5E, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x5A, - 0xF3, - 0x00, - 0x54, - 0xF5, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0D, - 0xF5, - 0x00, - 0x00, - 0xF3, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xB3, - 0x00, - 0x57, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0xF4, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDB, - 0x04, - 0xDC, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0x00, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x00, - 0x56, - 0x04, - 0x00, - 0x00, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x53, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x54, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xE1, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xDC, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF4, - 0xE1, - 0xE1, - 0xE1, - 0x0A, - 0x59, - 0xF6, - 0x00, - 0x54, - 0xD9, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF3, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x16, - 0xF3, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD5, - 0x04, - 0x55, - 0x00, - 0xDC, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x03, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDE, - 0xF7, - 0xC6, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x09, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF7, - 0x04, - 0xB8, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF4, - 0xF5, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x00, - 0xF6, - 0x04, - 0xF7, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0x57, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF6, - 0x09, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0x54, - 0xB8, - 0x04, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x54, - 0x04, - 0xF7, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xF7, - 0x04, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xF7, - 0x04, - 0xF7, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xF2, - 0x04, - 0x04, - 0xDE, - 0xD2, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x57, - 0xD6, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0xDD, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0xF9, - 0x55, - 0x00, - 0xF9, - 0xF9, - 0xF9, - 0xF5, - 0x00, - 0xF9, - 0xF9, - 0x04, - 0x04, - 0xDE, - 0x54, - 0x00, - 0x00, - 0x55, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5D, - 0x17, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD3, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x09, - 0xC6, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x00, - 0x53, - 0xB8, - 0x57, - 0x55, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xC6, - 0xB8, - 0x57, - 0x55, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0xF5, - 0x00, - 0x00, - 0xF3, - 0x5C, - 0x04, - 0x04, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0x04, - 0x04, - 0x5C, - 0xF3, - 0x00, - 0x00, - 0xF5, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x53, - 0x00, - 0xDE, - 0x04, - 0x54, - 0x53, - 0x04, - 0x5A, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x58, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0xC6, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0xE1, - 0xE1, - 0x0D, - 0x58, - 0xB3, - 0x00, - 0x59, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x04, - 0x00, - 0xF4, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xDC, - 0x04, - 0x00, - 0xF4, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xDE, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0xE1, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x5A, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xB8, - 0x54, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDC, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x58, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x00, - 0xF7, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x5B, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x0D, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0xC6, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x55, - 0x04, - 0xDC, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF9, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x00, - 0x57, - 0x04, - 0xDA, - 0xDA, - 0x04, - 0xDC, - 0xF4, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x5E, - 0x00, - 0x54, - 0xDC, - 0x04, - 0xDB, - 0x53, - 0x00, - 0x58, - 0x04, - 0xDA, - 0x04, - 0x04, - 0xD2, - 0xB3, - 0x54, - 0x57, - 0x04, - 0x04, - 0xDB, - 0x53, - 0x00, - 0x58, - 0x04, - 0xDA, - 0x04, - 0x04, - 0xD2, - 0xF3, - 0x00, - 0x00, - 0xF6, - 0x04, - 0xDC, - 0x54, - 0x00, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x60, - 0x04, - 0xDA, - 0xDA, - 0x04, - 0x5D, - 0x54, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0xF5, - 0xD9, - 0xDA, - 0xDA, - 0x04, - 0xD0, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDB, - 0xC6, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x53, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xB3, - 0x00, - 0xE1, - 0x04, - 0x00, - 0x00, - 0x55, - 0xDA, - 0xDA, - 0xDA, - 0x04, - 0x55, - 0x00, - 0xF7, - 0x04, - 0xDC, - 0x54, - 0x00, - 0xF9, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x00, - 0x00, - 0x00, - 0x5B, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x5C, - 0x54, - 0x54, - 0xDC, - 0x04, - 0xDB, - 0x54, - 0x00, - 0x58, - 0x04, - 0xDA, - 0xDA, - 0x04, - 0xDC, - 0xF4, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD6, - 0x04, - 0xDC, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xC6, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF5, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF4, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0xC6, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xF7, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF6, - 0xDF, - 0x5B, - 0x54, - 0x00, - 0x00, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xF3, - 0xDE, - 0x55, - 0x00, - 0x54, - 0xDC, - 0x04, - 0xF2, - 0x58, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x55, - 0xE1, - 0xDE, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x56, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xD6, - 0x57, - 0x09, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xC6, - 0x00, - 0xDC, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0x54, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x16, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xF5, - 0x60, - 0xDF, - 0xF6, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x55, - 0x00, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x00, - 0x55, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xF7, - 0xDA, - 0xF6, - 0x00, - 0xD0, - 0x04, - 0xF3, - 0x00, - 0x60, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF4, - 0x04, - 0x5E, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0x5B, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x53, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF4, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xF7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0xDE, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xF6, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x0A, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x55, - 0xDA, - 0xF4, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF5, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x53, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x55, - 0xDE, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x54, - 0xF2, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDE, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x09, - 0xD8, - 0x04, - 0xD9, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x53, - 0x54, - 0x53, - 0x55, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0x59, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB3, - 0x55, - 0xF7, - 0xF3, - 0x00, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x53, - 0x00, - 0x53, - 0x55, - 0xF7, - 0xF5, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0xB3, - 0xC6, - 0x53, - 0x55, - 0xF7, - 0xF5, - 0x54, - 0x00, - 0x56, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xE1, - 0x54, - 0x00, - 0xF3, - 0xF7, - 0x55, - 0xF3, - 0x00, - 0x54, - 0x0D, - 0x04, - 0x04, - 0xF7, - 0xF7, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0xF3, - 0x55, - 0x55, - 0xF3, - 0x00, - 0xF5, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0x55, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xC6, - 0xDB, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0x55, - 0x00, - 0x00, - 0x5B, - 0xF6, - 0x54, - 0xF3, - 0xF7, - 0x55, - 0x54, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x53, - 0x55, - 0x55, - 0x53, - 0x00, - 0xB3, - 0xD5, - 0x04, - 0x04, - 0xE1, - 0x54, - 0x00, - 0xF3, - 0x55, - 0xF7, - 0xF3, - 0x00, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF3, - 0x55, - 0xF7, - 0xB3, - 0x00, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x53, - 0x00, - 0x53, - 0x55, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0x57, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x54, - 0xF3, - 0x56, - 0x04, - 0x0A, - 0x00, - 0x09, - 0xF7, - 0xB3, - 0x00, - 0xF9, - 0x04, - 0xF7, - 0xF7, - 0x53, - 0x00, - 0xF7, - 0xF7, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x60, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD7, - 0x04, - 0x59, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDC, - 0x04, - 0xD8, - 0x53, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x16, - 0x09, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x00, - 0xF6, - 0x04, - 0xDC, - 0xDC, - 0xF2, - 0x00, - 0x56, - 0xDC, - 0xDC, - 0xDF, - 0xC6, - 0x57, - 0xDC, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x57, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0xDC, - 0xDE, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0xDE, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xB8, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB8, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0xD6, - 0x00, - 0xF5, - 0x04, - 0xDE, - 0x54, - 0x00, - 0xF7, - 0x56, - 0x00, - 0x53, - 0x00, - 0xD5, - 0xF5, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF3, - 0x04, - 0xDB, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x5C, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x59, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x09, - 0x57, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF7, - 0x55, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x5C, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x54, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF3, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x0D, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0x57, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x5D, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x55, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x5E, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x5B, - 0x04, - 0x5B, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x59, - 0xDA, - 0x58, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xB8, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xE1, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xD8, - 0xB8, - 0x53, - 0x00, - 0x00, - 0xC6, - 0xF7, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x56, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x56, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x0D, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0x53, - 0x00, - 0x00, - 0xC6, - 0xF7, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF7, - 0x54, - 0x00, - 0x00, - 0xB3, - 0x57, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x0D, - 0xF4, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x5C, - 0xB3, - 0x00, - 0x00, - 0xF3, - 0x60, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xB3, - 0x58, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xE1, - 0xF4, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0x53, - 0x00, - 0x00, - 0x54, - 0x55, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD8, - 0xB8, - 0x53, - 0x00, - 0x00, - 0xC6, - 0xF7, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x56, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xDF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xB8, - 0x00, - 0x09, - 0x04, - 0x04, - 0x5B, - 0xC6, - 0x00, - 0x54, - 0x57, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xF5, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0D, - 0x54, - 0xB8, - 0x04, - 0xF4, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x56, - 0x04, - 0xF7, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF3, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD7, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x55, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF6, - 0xD8, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x0D, - 0x00, - 0xF3, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x58, - 0x56, - 0x00, - 0x54, - 0xB8, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x59, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xB3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x04, - 0x04, - 0x57, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x60, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x55, - 0x54, - 0xB8, - 0x04, - 0xDE, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0xDC, - 0x04, - 0x58, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD6, - 0x56, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xC6, - 0x09, - 0xDC, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x53, - 0xD8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x55, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x5B, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x57, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x55, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x55, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x56, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x57, - 0x09, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x53, - 0x09, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xF9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0xF3, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x0D, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF4, - 0x04, - 0xB3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x53, - 0x00, - 0xD2, - 0xDA, - 0x04, - 0x57, - 0x00, - 0x56, - 0x04, - 0xF7, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE0, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x59, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x56, - 0x54, - 0xF5, - 0xDB, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF5, - 0xD9, - 0xDA, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x56, - 0x00, - 0x55, - 0xDA, - 0xDA, - 0xDA, - 0x04, - 0xF7, - 0x00, - 0xB8, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x57, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x55, - 0x04, - 0x04, - 0x53, - 0x00, - 0xD3, - 0xDA, - 0xDA, - 0xD3, - 0x00, - 0x53, - 0x04, - 0x04, - 0x0A, - 0x00, - 0xB3, - 0xDC, - 0xDA, - 0x04, - 0x04, - 0x59, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xB3, - 0x00, - 0xE1, - 0x04, - 0x04, - 0xD8, - 0xF4, - 0x00, - 0x55, - 0xD3, - 0x04, - 0xF1, - 0xF2, - 0x04, - 0xDB, - 0xF7, - 0x00, - 0x54, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x55, - 0xD3, - 0x04, - 0xDA, - 0xDA, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x16, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xF7, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xB3, - 0x00, - 0xF4, - 0xE1, - 0x04, - 0xDA, - 0xDA, - 0xDA, - 0x04, - 0xDE, - 0xF5, - 0x00, - 0xF3, - 0xD9, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x00, - 0xF6, - 0xDE, - 0x04, - 0xDA, - 0xDA, - 0x04, - 0x04, - 0x59, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF3, - 0x00, - 0x5C, - 0x04, - 0x04, - 0xF2, - 0x54, - 0x00, - 0xF6, - 0xDE, - 0x04, - 0xDA, - 0xDA, - 0xDA, - 0x04, - 0xDE, - 0xF5, - 0x54, - 0x53, - 0xDC, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0D, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x17, - 0xDA, - 0x04, - 0x04, - 0x55, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB3, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xB3, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xC6, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x57, - 0x04, - 0xD0, - 0x00, - 0x54, - 0xD0, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF5, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x57, - 0xC6, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0xF3, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x09, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x55, - 0xD2, - 0xDC, - 0xF7, - 0x00, - 0x56, - 0x04, - 0x5B, - 0x54, - 0x54, - 0x55, - 0xF6, - 0x00, - 0x53, - 0xDB, - 0x04, - 0xD7, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x09, - 0xC6, - 0xF7, - 0xF6, - 0x00, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x54, - 0x04, - 0x57, - 0x00, - 0xB3, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x5B, - 0x00, - 0x00, - 0x59, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0xF6, - 0x54, - 0x53, - 0x55, - 0xF7, - 0xF5, - 0x54, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x58, - 0xF7, - 0xF7, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xF4, - 0x00, - 0x53, - 0x55, - 0x55, - 0x53, - 0x54, - 0xF4, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xF4, - 0xF7, - 0xF5, - 0x00, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x54, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF4, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x00, - 0x00, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x54, - 0x55, - 0x55, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x56, - 0xC6, - 0x09, - 0x55, - 0xF7, - 0xF3, - 0x00, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0x00, - 0xF3, - 0xF7, - 0x55, - 0x00, - 0x54, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x55, - 0x00, - 0x00, - 0xF4, - 0x55, - 0xF7, - 0xF5, - 0x00, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0x55, - 0xF4, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0x55, - 0xF7, - 0xF6, - 0x54, - 0x00, - 0xC6, - 0x60, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0xF7, - 0x55, - 0xF3, - 0x00, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x59, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF5, - 0x54, - 0x54, - 0xB3, - 0x55, - 0xF7, - 0x55, - 0xF3, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF3, - 0x55, - 0xF7, - 0xF6, - 0x54, - 0x00, - 0xC6, - 0x5E, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0xF7, - 0x55, - 0xF5, - 0x00, - 0x09, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0x55, - 0xF7, - 0x55, - 0xF3, - 0x00, - 0x00, - 0xF5, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0xF7, - 0x55, - 0xB3, - 0x00, - 0x00, - 0xF9, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xF6, - 0xF7, - 0xB3, - 0x00, - 0xF4, - 0x04, - 0x04, - 0xF7, - 0xF7, - 0xF7, - 0x53, - 0x00, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xDF, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD6, - 0x04, - 0x57, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x58, - 0x04, - 0x04, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0xF7, - 0x00, - 0x00, - 0x04, - 0x04, - 0x59, - 0x00, - 0x00, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x54, - 0xF4, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xF4, - 0x00, - 0x54, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x53, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x55, - 0x0C, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xF9, - 0xF3, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xF2, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD9, - 0x04, - 0x04, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xF9, - 0xB3, - 0x00, - 0x00, - 0xF6, - 0xD3, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x53, - 0x00, - 0x00, - 0xF5, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0xF5, - 0x04, - 0x56, - 0x56, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x57, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x56, - 0xB3, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x55, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x5E, - 0xF3, - 0x00, - 0x00, - 0xB3, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0xF3, - 0x00, - 0x00, - 0x54, - 0x55, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x55, - 0xC6, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF6, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0xF5, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x56, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xF6, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF9, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF7, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x55, - 0x53, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x56, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF4, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0xF6, - 0x54, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF6, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x55, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF5, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xD9, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF6, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x55, - 0x04, - 0xF5, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD0, - 0x04, - 0x16, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x17, - 0x04, - 0x17, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x54, - 0xD8, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x0A, - 0xF4, - 0x04, - 0xDC, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x54, - 0x00, - 0x56, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0xC6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x54, - 0x00, - 0x5B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF7, - 0x00, - 0xF4, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF3, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0xD0, - 0xD7, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x00, - 0x00, - 0x49, - 0x04, - 0x00, - 0x00, - 0x1B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x06, - 0x74, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0xB8, - 0x5D, - 0x17, - 0x17, - 0x5D, - 0xF7, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0xDC, - 0xEF, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x60, - 0x5D, - 0x54, - 0x5D, - 0x60, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDC, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF5, - 0xDF, - 0xFA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD9, - 0xD9, - 0xDF, - 0xB8, - 0x55, - 0xF7, - 0x5A, - 0xD2, - 0x04, - 0xDE, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0xDE, - 0x04, - 0xF2, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDE, - 0xD9, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0xDC, - 0xEF, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD2, - 0x04, - 0x5B, - 0x00, - 0x5B, - 0xDA, - 0xD2, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xC1, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0xDB, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0x5E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xDC, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0xD6, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD7, - 0xDB, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD3, - 0xD5, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xDE, - 0x57, - 0x54, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xD3, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDC, - 0xD9, - 0x58, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD9, - 0xD7, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0xC6, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDC, - 0xDA, - 0x60, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDE, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0xDD, - 0x5A, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0xF7, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD8, - 0x17, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xDB, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xF2, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD3, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD0, - 0xDB, - 0xDB, - 0xD0, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0xDE, - 0xDB, - 0xD8, - 0xD7, - 0x60, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD0, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0xD9, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0xD0, - 0x53, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDD, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x53, - 0xDC, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xD6, - 0xD7, - 0xD8, - 0xD8, - 0xD7, - 0x12, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x53, - 0xB8, - 0xE1, - 0xDD, - 0xD8, - 0xD3, - 0xDF, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x16, - 0xF2, - 0xD9, - 0xD9, - 0xDE, - 0x5D, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF5, - 0xDF, - 0xD2, - 0xD9, - 0xD9, - 0xDE, - 0xFA, - 0xB3, - 0x54, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xE1, - 0xDD, - 0xD8, - 0xDC, - 0xD6, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xDA, - 0xDE, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xF6, - 0xD9, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x5B, - 0xD0, - 0xDC, - 0xD8, - 0xD9, - 0xD7, - 0xD6, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x03, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xDB, - 0xD2, - 0xD6, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF5, - 0xFA, - 0xD0, - 0xDC, - 0xDA, - 0xD9, - 0xD3, - 0xE1, - 0x59, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xD3, - 0xD0, - 0x5E, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x54, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x59, - 0xE1, - 0xD7, - 0xD9, - 0xDA, - 0xD5, - 0xDE, - 0x60, - 0xF6, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF7, - 0xE1, - 0xD5, - 0xDA, - 0xDD, - 0xD6, - 0xF6, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0x04, - 0x5D, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD8, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x59, - 0xD0, - 0xDC, - 0xD8, - 0xD8, - 0xD3, - 0xE1, - 0x5A, - 0xF3, - 0xC6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x53, - 0x59, - 0xE1, - 0xF1, - 0xD8, - 0xD9, - 0xF1, - 0xE1, - 0x59, - 0x53, - 0xF5, - 0xDF, - 0xD7, - 0xD0, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD5, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x55, - 0xEF, - 0xD7, - 0xD9, - 0xDB, - 0xDE, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xD6, - 0xD7, - 0xD9, - 0xDB, - 0xDE, - 0x5E, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD5, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD8, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0xDF, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xDF, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0xDF, - 0x00, - 0x00, - 0xF3, - 0xD2, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD6, - 0xD3, - 0xD8, - 0xD9, - 0xD7, - 0xDF, - 0xF5, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x09, - 0xB8, - 0xE1, - 0xDC, - 0xD8, - 0xD5, - 0xD0, - 0x58, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD6, - 0xF1, - 0xD8, - 0xD9, - 0xF2, - 0x17, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x0A, - 0xD7, - 0xD9, - 0xD8, - 0xD2, - 0x17, - 0xF5, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD0, - 0xDD, - 0xDA, - 0xD5, - 0xD0, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x57, - 0xD0, - 0xDD, - 0xD8, - 0xD5, - 0xE1, - 0xB8, - 0x00, - 0xF1, - 0xD7, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xD0, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0x58, - 0xD0, - 0xDD, - 0xDA, - 0xDB, - 0xDE, - 0x5A, - 0x00, - 0x54, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x56, - 0xD0, - 0xD5, - 0xDA, - 0xDD, - 0xD0, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x58, - 0xD0, - 0xD5, - 0xDA, - 0xD5, - 0xD0, - 0x56, - 0xC6, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xC6, - 0x56, - 0xD0, - 0xDB, - 0xD9, - 0xDE, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x59, - 0xDE, - 0xDB, - 0x04, - 0xD5, - 0xD6, - 0xF5, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0xD9, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5B, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x04, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD0, - 0x00, - 0x00, - 0x00, - 0xFA, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0xC6, - 0x56, - 0xF2, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0xD9, - 0x55, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0xD8, - 0xD0, - 0xE1, - 0xD9, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0xEF, - 0x04, - 0xDB, - 0xE1, - 0xD6, - 0xF1, - 0x04, - 0xDE, - 0xF3, - 0x00, - 0x54, - 0x58, - 0xD9, - 0xD5, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5E, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x0A, - 0xDB, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x59, - 0xD9, - 0x04, - 0xDE, - 0xD6, - 0xD6, - 0xD2, - 0x04, - 0xDB, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x53, - 0x59, - 0xD8, - 0xD9, - 0xD0, - 0xD6, - 0xDE, - 0x04, - 0xDC, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDE, - 0x04, - 0xD7, - 0xD6, - 0xE1, - 0xDC, - 0x04, - 0xDE, - 0xF4, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xDC, - 0x04, - 0xD7, - 0xD6, - 0xD6, - 0xDC, - 0x04, - 0xDE, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5D, - 0xDA, - 0xD9, - 0xD0, - 0xD6, - 0xDE, - 0x04, - 0xDB, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x60, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD6, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x60, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0x60, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0xDC, - 0x04, - 0xDC, - 0xD0, - 0xD6, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xDE, - 0x55, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0xB8, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0xE1, - 0xD2, - 0x04, - 0x04, - 0x17, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5D, - 0xDB, - 0x04, - 0xDB, - 0xD0, - 0xD6, - 0xD6, - 0xDE, - 0xD9, - 0x04, - 0xD2, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0xD6, - 0xD6, - 0xDE, - 0xD5, - 0x04, - 0xD9, - 0x17, - 0x53, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD7, - 0x04, - 0xD9, - 0xDE, - 0xD6, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xDB, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0xD5, - 0x04, - 0xDE, - 0xD6, - 0xDE, - 0x04, - 0xD7, - 0xF4, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x04, - 0xDC, - 0xEF, - 0xEF, - 0xEF, - 0xEF, - 0xEF, - 0xEF, - 0xEF, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD5, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xC6, - 0x56, - 0xD7, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xD7, - 0x56, - 0x54, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD2, - 0x04, - 0xD9, - 0xDE, - 0xD6, - 0xD6, - 0xDE, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x16, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xDE, - 0x04, - 0x59, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD5, - 0x04, - 0xD2, - 0xD6, - 0xE1, - 0xD5, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x59, - 0xD9, - 0x04, - 0xF2, - 0xD6, - 0xD6, - 0xD3, - 0x04, - 0xD7, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x5A, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF2, - 0xD4, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD7, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0xD2, - 0xD8, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xEF, - 0x04, - 0x04, - 0xDE, - 0xD6, - 0xD6, - 0xD2, - 0x04, - 0xD3, - 0xF7, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x16, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xE1, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDF, - 0x04, - 0xDA, - 0xDE, - 0xD6, - 0xE1, - 0xF1, - 0x04, - 0xDC, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0xDA, - 0x04, - 0xDE, - 0xD6, - 0xD6, - 0xD2, - 0x04, - 0xD3, - 0xF7, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x53, - 0xD6, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xD6, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF3, - 0xE1, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xD9, - 0xD8, - 0x59, - 0xDE, - 0xD9, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xD0, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xF2, - 0xF3, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0x60, - 0x04, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x54, - 0xF3, - 0xE1, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xDE, - 0xF5, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x60, - 0x04, - 0xDB, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xE1, - 0xF3, - 0x00, - 0x00, - 0x54, - 0xF3, - 0xE1, - 0x04, - 0xDB, - 0xD0, - 0xD6, - 0xD0, - 0xD9, - 0x04, - 0x16, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xC6, - 0x56, - 0xD8, - 0xD9, - 0xE1, - 0xD6, - 0xDB, - 0xD8, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x54, - 0x54, - 0xEF, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xDE, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0x04, - 0xDC, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF2, - 0xD9, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDB, - 0xD7, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0xE1, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x45, - 0x3E, - 0x54, - 0x00, - 0xD5, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xD9, - 0xF2, - 0xB8, - 0xF3, - 0xB8, - 0xD7, - 0xDA, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD5, - 0xDF, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x57, - 0x00, - 0x00, - 0x57, - 0x04, - 0xD0, - 0x00, - 0x58, - 0x04, - 0xDE, - 0xF6, - 0x00, - 0x00, - 0xF3, - 0xD6, - 0x04, - 0xD6, - 0x00, - 0x59, - 0xD8, - 0xDC, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD5, - 0xD7, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD8, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x17, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD5, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD8, - 0xDC, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0xFC, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD4, - 0xD3, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD8, - 0xD7, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x12, - 0x04, - 0xE1, - 0x54, - 0x00, - 0xF6, - 0xDC, - 0xD8, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDF, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xDA, - 0xD2, - 0x55, - 0x00, - 0x00, - 0x00, - 0x56, - 0xD9, - 0xD5, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD2, - 0xD8, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD0, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x0A, - 0xD9, - 0x04, - 0xF1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF1, - 0x04, - 0xDB, - 0xEF, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0xD0, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD7, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xEF, - 0x04, - 0xD5, - 0xFA, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x17, - 0xD9, - 0xDB, - 0x56, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xD0, - 0x04, - 0xD0, - 0xB3, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0xDB, - 0x60, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x5A, - 0xDC, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xD6, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x60, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xD2, - 0xF3, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDD, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD8, - 0xDB, - 0x5E, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xFA, - 0xDB, - 0xD8, - 0x59, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x58, - 0xD9, - 0xDA, - 0xDF, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0D, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD3, - 0xDA, - 0x5D, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD0, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD8, - 0xD5, - 0x56, - 0x00, - 0x00, - 0x00, - 0x53, - 0x60, - 0x04, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xDE, - 0x04, - 0x04, - 0xD5, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0xD9, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD7, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0xDA, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD5, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x04, - 0xDE, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xDC, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xE1, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x0D, - 0x04, - 0xDE, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5B, - 0xD9, - 0xD9, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xDE, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xDC, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xEF, - 0x04, - 0xD6, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD6, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0xE1, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0xDC, - 0x55, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x54, - 0x54, - 0xE1, - 0x04, - 0xE1, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x0A, - 0x04, - 0xDE, - 0x53, - 0x00, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD6, - 0x04, - 0xD0, - 0x00, - 0x54, - 0x54, - 0xE1, - 0x04, - 0xE1, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0xF7, - 0x00, - 0x00, - 0xB8, - 0xD8, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xF2, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD5, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD5, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD8, - 0xDE, - 0x00, - 0x00, - 0x54, - 0xD0, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x7D, - 0x3B, - 0x45, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0xF6, - 0x54, - 0x00, - 0xF5, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0xDB, - 0xF5, - 0x00, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDB, - 0x00, - 0xDE, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0x04, - 0xEF, - 0xDA, - 0xD7, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDD, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x55, - 0xD2, - 0xD8, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x5A, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x59, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xB8, - 0x54, - 0xDF, - 0x04, - 0x16, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5E, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD9, - 0xD2, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x56, - 0xD0, - 0xDA, - 0x04, - 0xD2, - 0x5A, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x59, - 0xD2, - 0x04, - 0xDA, - 0xE1, - 0x56, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0xDA, - 0xFA, - 0x00, - 0xF4, - 0xF7, - 0xF5, - 0x54, - 0x54, - 0xF3, - 0xF7, - 0x04, - 0x04, - 0x0A, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x59, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xDF, - 0x00, - 0x00, - 0xFA, - 0x04, - 0xD7, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xDB, - 0xD5, - 0x55, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5C, - 0x04, - 0xD7, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD2, - 0x04, - 0x60, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xDD, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD9, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDB, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x57, - 0xDA, - 0xD3, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD7, - 0xD8, - 0x57, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD9, - 0xD9, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x56, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0xDE, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD9, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD7, - 0xD2, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xDE, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0xDE, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD0, - 0x04, - 0x58, - 0x00, - 0x56, - 0x04, - 0xDE, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x56, - 0x04, - 0xDE, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0x04, - 0xDE, - 0x00, - 0x56, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD0, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x5B, - 0x53, - 0xF5, - 0xD7, - 0xD9, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x57, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x5A, - 0x54, - 0x04, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x58, - 0x00, - 0x57, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xDD, - 0xDE, - 0xF6, - 0xD9, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xB3, - 0x00, - 0x00, - 0xD2, - 0xD2, - 0xB8, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0xFA, - 0x54, - 0x59, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xDB, - 0x04, - 0x04, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x69, - 0xFF, - 0xAD, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0xF1, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDD, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0x60, - 0x00, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0xC6, - 0xF2, - 0xDB, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x04, - 0xD2, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xC3, - 0xDB, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xDB, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDE, - 0xDA, - 0xFA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xD6, - 0x00, - 0xDB, - 0x04, - 0xD6, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0xDC, - 0x04, - 0x0A, - 0x0A, - 0x00, - 0xE1, - 0xD4, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xDF, - 0x00, - 0xD7, - 0xDB, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD5, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x60, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x59, - 0xF2, - 0x04, - 0x04, - 0xD0, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD0, - 0x04, - 0x04, - 0xDE, - 0x59, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0xFA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDB, - 0xFA, - 0x00, - 0x60, - 0xD9, - 0x04, - 0xDA, - 0xD6, - 0xB8, - 0xDD, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDC, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xF1, - 0xDC, - 0x53, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xD0, - 0x00, - 0xF6, - 0xDB, - 0xDB, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xD6, - 0x5A, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xDA, - 0xF7, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD9, - 0xDB, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDC, - 0xD9, - 0x55, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x58, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDB, - 0x00, - 0x04, - 0xDE, - 0x09, - 0x00, - 0x00, - 0xF3, - 0xD2, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x54, - 0xDE, - 0xD9, - 0xF5, - 0x57, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD7, - 0xF4, - 0x04, - 0xDE, - 0x00, - 0xF3, - 0xDC, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0xDC, - 0xF4, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xD7, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x0D, - 0x04, - 0xFD, - 0xF7, - 0x57, - 0xDA, - 0xF1, - 0xF3, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0xD5, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0xDD, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xDB, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xF7, - 0xB3, - 0xDC, - 0xF2, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0xDF, - 0xF7, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF2, - 0xD4, - 0xB8, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD7, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x57, - 0xDA, - 0xFA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF2, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x54, - 0x5A, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD0, - 0x54, - 0xE1, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0xDE, - 0x54, - 0xE1, - 0xD9, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x5E, - 0x57, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0xD9, - 0xB8, - 0xD0, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xD0, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0xDE, - 0x00, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xD0, - 0x00, - 0xD0, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xDC, - 0xD5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF1, - 0xF1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDB, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0x59, - 0x04, - 0x5A, - 0x00, - 0xD6, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD9, - 0xF4, - 0x59, - 0x04, - 0x57, - 0x00, - 0x55, - 0x04, - 0x17, - 0x00, - 0xD2, - 0xD7, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xD2, - 0xD9, - 0xB8, - 0xD5, - 0xD7, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x60, - 0x57, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD7, - 0xDB, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0x56, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0xD6, - 0x04, - 0xDE, - 0x0A, - 0x0A, - 0x0A, - 0xDC, - 0xD5, - 0x0A, - 0x0A, - 0x0A, - 0x54, - 0x59, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0xDC, - 0xF3, - 0xD0, - 0x04, - 0x56, - 0x00, - 0x00, - 0x56, - 0xDA, - 0xD0, - 0x00, - 0xDB, - 0xD2, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD3, - 0xF1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDE, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x04, - 0xD0, - 0x00, - 0xFA, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x0A, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5B, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD8, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x60, - 0x0D, - 0x5E, - 0x04, - 0xDA, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x60, - 0xF1, - 0x04, - 0xD9, - 0xD6, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xE1, - 0xD8, - 0x04, - 0xD7, - 0xFA, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF1, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0xDE, - 0x00, - 0x58, - 0x04, - 0xF1, - 0x60, - 0x17, - 0xF1, - 0x04, - 0x04, - 0x56, - 0x55, - 0xEF, - 0xDC, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x54, - 0x5B, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x57, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x04, - 0xD0, - 0x00, - 0x17, - 0x04, - 0x5E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x0D, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xFA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x5D, - 0x04, - 0xDF, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0x04, - 0x16, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0xD6, - 0x00, - 0xC6, - 0xD7, - 0xDC, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0xDA, - 0x56, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xFA, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0xFA, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x56, - 0xF5, - 0x53, - 0xF5, - 0x56, - 0xDF, - 0xD5, - 0x04, - 0xD0, - 0xF6, - 0x00, - 0x00, - 0xEF, - 0x04, - 0xFA, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF3, - 0xD2, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0xF5, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x56, - 0x00, - 0xDC, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0xF6, - 0xF6, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD7, - 0xF3, - 0x53, - 0xDE, - 0xDA, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xDB, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xF3, - 0xDC, - 0xDC, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xDC, - 0xD5, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDD, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xD5, - 0x00, - 0xDC, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xDE, - 0x00, - 0xDC, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xDD, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDB, - 0x00, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xD5, - 0x00, - 0xDD, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xDE, - 0x04, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD5, - 0xF3, - 0x00, - 0x56, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD8, - 0xD6, - 0x00, - 0xF4, - 0xD9, - 0xEF, - 0x00, - 0x5E, - 0x04, - 0xF7, - 0x00, - 0x60, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0xF6, - 0x00, - 0xD7, - 0xD5, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD8, - 0xDE, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5B, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDB, - 0xF7, - 0xC6, - 0x00, - 0x0A, - 0xE1, - 0x00, - 0x54, - 0x53, - 0x53, - 0x57, - 0xDE, - 0xD9, - 0xDE, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x56, - 0xFF, - 0xFF, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xD6, - 0xD6, - 0xD9, - 0xD5, - 0xF7, - 0x00, - 0xD0, - 0xDA, - 0xB8, - 0x53, - 0x00, - 0x00, - 0x53, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDD, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD0, - 0x04, - 0x0A, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0xDB, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xDC, - 0xF1, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xDC, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF1, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0x58, - 0x00, - 0xE1, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF5, - 0xD2, - 0x04, - 0x59, - 0x54, - 0x00, - 0xFA, - 0xD7, - 0xE0, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xDF, - 0x00, - 0xDE, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0xD2, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD9, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0xD6, - 0x04, - 0xD2, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0x04, - 0xDA, - 0x57, - 0x5B, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x16, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xD0, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD8, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x59, - 0x54, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0xDF, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0x59, - 0x54, - 0x00, - 0x55, - 0xDA, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xDE, - 0xDB, - 0xB3, - 0x00, - 0x03, - 0xDA, - 0xF6, - 0x00, - 0x00, - 0x54, - 0xDD, - 0xF2, - 0x00, - 0x00, - 0xF2, - 0xD5, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xDB, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x17, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0x00, - 0xD8, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xDE, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x56, - 0xDA, - 0x04, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xD8, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0x00, - 0xDA, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xFA, - 0xD2, - 0x04, - 0xD8, - 0xEF, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x0D, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xD5, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0x57, - 0x00, - 0x00, - 0xD0, - 0xDC, - 0x00, - 0xDE, - 0xD7, - 0x00, - 0x00, - 0x55, - 0xD8, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xFA, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0xDA, - 0x04, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xDA, - 0xFA, - 0x00, - 0x5A, - 0x04, - 0xFA, - 0xF3, - 0x57, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x55, - 0x00, - 0x00, - 0x4D, - 0xF9, - 0x69, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD0, - 0x04, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x53, - 0xF7, - 0xD0, - 0xDB, - 0xDB, - 0xD0, - 0xF7, - 0x00, - 0x00, - 0x56, - 0xD4, - 0xDC, - 0xB8, - 0x54, - 0xB3, - 0xE1, - 0x04, - 0xD0, - 0xF3, - 0x17, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0xDB, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD6, - 0x04, - 0xE1, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xFA, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xDF, - 0x00, - 0xDE, - 0xDB, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x5A, - 0x00, - 0x53, - 0xD0, - 0x04, - 0xD0, - 0xB8, - 0xF3, - 0xF5, - 0x59, - 0xD3, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDC, - 0xD9, - 0x56, - 0xC6, - 0x00, - 0x00, - 0xDB, - 0xF6, - 0x00, - 0xD0, - 0x04, - 0xF3, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD0, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x16, - 0xC6, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xD0, - 0xEF, - 0xEF, - 0xEF, - 0xEF, - 0xEF, - 0xD0, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0xF7, - 0xF1, - 0xD9, - 0xF7, - 0x00, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDB, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xDE, - 0x54, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD2, - 0xF3, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xDD, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF2, - 0x17, - 0xF4, - 0x00, - 0x00, - 0xDC, - 0xF1, - 0x55, - 0x5A, - 0x17, - 0xEF, - 0xDF, - 0x5D, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xD5, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0xD0, - 0xDE, - 0xD7, - 0xD8, - 0x04, - 0xDE, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDF, - 0xD9, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xDC, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD8, - 0xD0, - 0x00, - 0x00, - 0x59, - 0x04, - 0x59, - 0x54, - 0x00, - 0xB8, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x17, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF2, - 0x04, - 0x04, - 0xD2, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDD, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x55, - 0xD9, - 0xDE, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xDC, - 0x00, - 0xD5, - 0xD7, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0xD5, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xDE, - 0x00, - 0xD5, - 0x04, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x17, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xDC, - 0x00, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xDC, - 0x00, - 0xD5, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD2, - 0x04, - 0xD3, - 0x60, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x5D, - 0x04, - 0x5A, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xDC, - 0x53, - 0x00, - 0x00, - 0x5B, - 0x04, - 0x57, - 0xD4, - 0xDF, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xDB, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD5, - 0x04, - 0xD9, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x04, - 0x57, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0xD8, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xDA, - 0x16, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xD6, - 0x56, - 0xF4, - 0x5A, - 0xD8, - 0xD6, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xD8, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0xDA, - 0xF4, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x0A, - 0xDB, - 0x04, - 0xFC, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x54, - 0x53, - 0xB8, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x59, - 0xD9, - 0xD8, - 0xEF, - 0xD0, - 0x04, - 0xD6, - 0x53, - 0x00, - 0xF4, - 0xDC, - 0xDC, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x5A, - 0xDA, - 0xF1, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x56, - 0x00, - 0x5A, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD2, - 0xD8, - 0x17, - 0x55, - 0xB3, - 0xF7, - 0xE1, - 0x04, - 0xDE, - 0xB3, - 0x00, - 0x5B, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD3, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xFA, - 0xD7, - 0x04, - 0xDA, - 0xD0, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD6, - 0xD8, - 0x04, - 0xD7, - 0xFA, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xDB, - 0xDB, - 0x56, - 0x00, - 0x00, - 0x04, - 0x53, - 0x00, - 0x0A, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x56, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD8, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0xD6, - 0xE1, - 0xF2, - 0xDA, - 0xDB, - 0x57, - 0x00, - 0x00, - 0xDA, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x54, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x56, - 0xD8, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x60, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD2, - 0xD8, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xDA, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDA, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xD2, - 0xF4, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDA, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x17, - 0xDA, - 0xD7, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x60, - 0xDE, - 0xDA, - 0x04, - 0xB6, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x5C, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0xD6, - 0x00, - 0x00, - 0x60, - 0x04, - 0x56, - 0x00, - 0x00, - 0x56, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x58, - 0xD6, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDC, - 0xD2, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x03, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xD0, - 0x00, - 0xD0, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xF5, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0xDE, - 0x00, - 0xD0, - 0x04, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x04, - 0xD0, - 0x54, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD4, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0xD7, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x53, - 0xD0, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0x04, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0D, - 0x04, - 0xB8, - 0x00, - 0x04, - 0xF1, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD5, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD0, - 0x00, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD0, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0x04, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xDF, - 0x53, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xDE, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD8, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD8, - 0x5A, - 0xD8, - 0xDE, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDB, - 0xD7, - 0xF4, - 0x00, - 0x00, - 0x53, - 0x16, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD9, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0xDF, - 0x5D, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0x56, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xB8, - 0x00, - 0x00, - 0xB3, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDE, - 0x04, - 0xDA, - 0xD9, - 0xD6, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xDF, - 0xDF, - 0x57, - 0x00, - 0x54, - 0xDE, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD0, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x5D, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDA, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD5, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0xD6, - 0xD2, - 0x04, - 0xF1, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xD2, - 0xD5, - 0xF6, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xDA, - 0x5E, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x0A, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x53, - 0xD2, - 0xD8, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDF, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x59, - 0x04, - 0x17, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0xDE, - 0x04, - 0x04, - 0xDE, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD0, - 0x04, - 0x04, - 0xDE, - 0x58, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xDB, - 0xD9, - 0xF7, - 0x00, - 0xD9, - 0xF6, - 0x00, - 0x58, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x17, - 0x00, - 0x00, - 0xF4, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xE1, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x09, - 0xF5, - 0xDB, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xC6, - 0xF2, - 0xD9, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x57, - 0x00, - 0xD9, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0xDC, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xFA, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x53, - 0xF1, - 0xD3, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD5, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0xDF, - 0x00, - 0xD9, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xDB, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x00, - 0xDF, - 0xD8, - 0x04, - 0xD2, - 0xDF, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDC, - 0xD7, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xD3, - 0x00, - 0x00, - 0xD0, - 0xDB, - 0xB3, - 0x00, - 0x00, - 0x53, - 0xD5, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x12, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xDB, - 0xF2, - 0x00, - 0x55, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x5E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDC, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xDE, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD5, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0xD0, - 0x04, - 0x57, - 0x00, - 0x57, - 0x04, - 0xDE, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x57, - 0x04, - 0xDE, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDB, - 0x04, - 0xDE, - 0x00, - 0x58, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x12, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x00, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xE1, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF6, - 0xDC, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD8, - 0xF4, - 0x00, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xD0, - 0x00, - 0x59, - 0x04, - 0xD0, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x53, - 0xD0, - 0x04, - 0x58, - 0x00, - 0x04, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x53, - 0xD0, - 0x04, - 0x57, - 0x00, - 0x58, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD0, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xF4, - 0x5B, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x5B, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD5, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5D, - 0x04, - 0xDF, - 0x00, - 0x16, - 0x04, - 0x17, - 0x54, - 0x00, - 0x00, - 0x00, - 0x5B, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x0A, - 0x54, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xD8, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEC, - 0xFF, - 0xFF, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x58, - 0xFA, - 0x04, - 0xDF, - 0x58, - 0x58, - 0x58, - 0x04, - 0xF2, - 0x58, - 0x58, - 0x00, - 0xF5, - 0xDC, - 0x04, - 0xD2, - 0xFA, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD0, - 0x04, - 0xDA, - 0x04, - 0x04, - 0xD0, - 0xF3, - 0x57, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xDE, - 0xDB, - 0xDA, - 0xDF, - 0x53, - 0x00, - 0x53, - 0xD2, - 0xDC, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xC3, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xD9, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD8, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xDA, - 0xD6, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0xD3, - 0xD6, - 0xE1, - 0xDC, - 0x04, - 0xDE, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD8, - 0x04, - 0xD2, - 0xD6, - 0xD6, - 0xF1, - 0x04, - 0xF2, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0xDE, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDE, - 0xD6, - 0xD0, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0xDB, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x04, - 0xD0, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xE1, - 0xD8, - 0x04, - 0xD2, - 0x5C, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x5A, - 0xD2, - 0x04, - 0xD4, - 0xE1, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xE1, - 0x00, - 0xD2, - 0x59, - 0x54, - 0x53, - 0xD7, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x53, - 0x04, - 0xD3, - 0x00, - 0x00, - 0xF4, - 0xD8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xB3, - 0x55, - 0x5A, - 0xDC, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xD9, - 0xD2, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDA, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x58, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xD0, - 0xD9, - 0xF6, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x56, - 0xDA, - 0xDE, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xDE, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xDA, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xD7, - 0x00, - 0xD7, - 0xD9, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD9, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0xE1, - 0x00, - 0x00, - 0xFA, - 0x04, - 0xD0, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD8, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0xDA, - 0x57, - 0x54, - 0x00, - 0x00, - 0x00, - 0x54, - 0xDC, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xF7, - 0xF3, - 0xD9, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x57, - 0x54, - 0x00, - 0xEF, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDB, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0xF5, - 0xD9, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xDE, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xF1, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xE1, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x04, - 0xD0, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0xDB, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x04, - 0xDE, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD5, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xEF, - 0xF4, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x12, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xD6, - 0xF4, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xE1, - 0xD4, - 0x04, - 0x04, - 0x00, - 0x04, - 0x04, - 0xD7, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD7, - 0x04, - 0x56, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x56, - 0xDA, - 0xD2, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0xD0, - 0xF3, - 0x00, - 0x00, - 0xF4, - 0xD0, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x5E, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x04, - 0x04, - 0xD7, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD7, - 0x04, - 0x59, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xE1, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xE1, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xE1, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xE1, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0x04, - 0xDE, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x04, - 0x57, - 0x53, - 0x00, - 0x5A, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x54, - 0xF2, - 0xDD, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD6, - 0x00, - 0x54, - 0x53, - 0xDC, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0xDA, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD2, - 0xB3, - 0x00, - 0x00, - 0xDE, - 0xD8, - 0xB8, - 0x54, - 0x00, - 0x54, - 0xF2, - 0xD8, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xD0, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x57, - 0x54, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x41, - 0x74, - 0xEC, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0xDA, - 0xDA, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x60, - 0x04, - 0xD6, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xD6, - 0xF6, - 0xF6, - 0xD6, - 0x04, - 0xDF, - 0x00, - 0xD2, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5D, - 0x04, - 0xD6, - 0x00, - 0xF6, - 0xD0, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD4, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x56, - 0x58, - 0x00, - 0x57, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xD0, - 0xEE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x56, - 0xD2, - 0xD8, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x57, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0xDF, - 0xDE, - 0xDB, - 0xD9, - 0xF2, - 0x16, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0xDC, - 0xD9, - 0xD2, - 0x17, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0xD0, - 0x00, - 0x00, - 0xD9, - 0xDE, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xD0, - 0x00, - 0xD5, - 0xD0, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDF, - 0xDB, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0x04, - 0xDB, - 0x0D, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xEE, - 0xF5, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDB, - 0x00, - 0xDF, - 0xDE, - 0x00, - 0x00, - 0xB8, - 0xD8, - 0xD3, - 0xF7, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x57, - 0x00, - 0x57, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xDD, - 0xF3, - 0x54, - 0x53, - 0xD3, - 0xD7, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x17, - 0x04, - 0xFA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0x0D, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xD0, - 0xD9, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x60, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xF4, - 0xD7, - 0xD9, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xFA, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0xFA, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0x00, - 0x0A, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x17, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x04, - 0xD0, - 0x00, - 0x00, - 0xD7, - 0xD5, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD8, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x5A, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xD2, - 0xD8, - 0xB8, - 0x55, - 0xD9, - 0xD7, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0xF2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0xB6, - 0xC6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD7, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0x04, - 0x60, - 0x00, - 0x00, - 0x16, - 0x04, - 0x5A, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDF, - 0x04, - 0xDA, - 0xDE, - 0xD6, - 0xD6, - 0xD2, - 0x04, - 0xD3, - 0xF7, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0xFA, - 0xD4, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xE1, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDF, - 0x04, - 0xD8, - 0xDE, - 0xD6, - 0xD6, - 0xD7, - 0x04, - 0xDC, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0xDA, - 0xD8, - 0xDE, - 0xD6, - 0xE1, - 0xD7, - 0x04, - 0xD5, - 0x56, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0xDB, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0xDA, - 0xD6, - 0xF3, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0xF4, - 0xD0, - 0x04, - 0xDB, - 0xD0, - 0xD6, - 0xD0, - 0xD9, - 0xD9, - 0x59, - 0xDE, - 0x04, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xD9, - 0x04, - 0x17, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x12, - 0x54, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xD6, - 0xD6, - 0xDC, - 0x04, - 0x60, - 0xB8, - 0xDB, - 0xD9, - 0xD0, - 0xD6, - 0xF2, - 0x04, - 0xD7, - 0x55, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xD9, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xD0, - 0xF4, - 0x00, - 0x00, - 0x04, - 0xDE, - 0xFA, - 0xD4, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xE1, - 0xF3, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0x60, - 0xDE, - 0x04, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xD6, - 0x56, - 0x00, - 0xF7, - 0xDB, - 0xD9, - 0xE1, - 0xE1, - 0xD9, - 0xD5, - 0x55, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xB8, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0xF5, - 0x00, - 0x57, - 0x04, - 0xF9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xF9, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x17, - 0x00, - 0x00, - 0x53, - 0xDE, - 0xD9, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDB, - 0xD7, - 0xF3, - 0x00, - 0xB8, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0xD6, - 0x04, - 0xDD, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x3B, - 0x56, - 0x94, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0xDE, - 0x04, - 0x53, - 0xF6, - 0x55, - 0x55, - 0xDE, - 0xDE, - 0x55, - 0x55, - 0x55, - 0x17, - 0x04, - 0xB8, - 0x55, - 0x00, - 0xD0, - 0xDA, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDD, - 0xD3, - 0x53, - 0x00, - 0x00, - 0x53, - 0xF1, - 0xDC, - 0x00, - 0x5A, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF1, - 0xD5, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0xDC, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x17, - 0xDD, - 0x55, - 0xDC, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD5, - 0xE1, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xD5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xD5, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xDB, - 0x00, - 0x00, - 0xF4, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xF1, - 0xD7, - 0xF4, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xF2, - 0xDA, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDA, - 0xE1, - 0x00, - 0x00, - 0x00, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD9, - 0x00, - 0x00, - 0xD7, - 0xD5, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x16, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0x16, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0x00, - 0x55, - 0xD9, - 0x60, - 0x00, - 0x00, - 0x58, - 0xD9, - 0xD8, - 0xD0, - 0xD6, - 0xDD, - 0xDE, - 0xD7, - 0xE1, - 0x53, - 0xDE, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x5B, - 0x00, - 0x58, - 0x04, - 0x5E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0xD0, - 0x00, - 0x00, - 0xF6, - 0xDB, - 0xD5, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x56, - 0xD6, - 0x58, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD2, - 0xDA, - 0xF7, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD8, - 0xDB, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xE1, - 0x0D, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDC, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0xF7, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xD3, - 0x53, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x0A, - 0x04, - 0xFA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xF4, - 0xF1, - 0xDB, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xDC, - 0xF3, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xD8, - 0x00, - 0xF7, - 0xDA, - 0xDC, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDC, - 0xD9, - 0x55, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x17, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xB3, - 0xDC, - 0xDC, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD4, - 0x55, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xDF, - 0x00, - 0x00, - 0xFA, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xDA, - 0x56, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDB, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x57, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xDC, - 0xF1, - 0x53, - 0x00, - 0xD7, - 0xDD, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD6, - 0xD7, - 0xD9, - 0xD9, - 0xF2, - 0x17, - 0xF4, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x54, - 0xB8, - 0xE1, - 0xDD, - 0xDA, - 0xD5, - 0xD0, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD6, - 0xD3, - 0xD9, - 0xD9, - 0xF2, - 0x17, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD6, - 0xD7, - 0xD9, - 0xD9, - 0xD2, - 0xDF, - 0xF6, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x54, - 0x57, - 0xD0, - 0xDD, - 0xD8, - 0xDC, - 0xD0, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD0, - 0xD5, - 0xD8, - 0xDC, - 0xD6, - 0xF7, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0xF5, - 0xDF, - 0xD3, - 0xD9, - 0xD5, - 0xD0, - 0x57, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0x04, - 0x59, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x55, - 0xD0, - 0xDB, - 0xD9, - 0xDE, - 0x59, - 0x00, - 0x00, - 0xF7, - 0xD0, - 0xDB, - 0xD8, - 0xF1, - 0xEF, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0xF3, - 0x60, - 0xD2, - 0xD9, - 0xD5, - 0xD0, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD0, - 0xDC, - 0xD8, - 0xD5, - 0xD0, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x54, - 0xB8, - 0xE1, - 0xDD, - 0xDA, - 0xD5, - 0xD0, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0xD0, - 0xDD, - 0xD8, - 0xD5, - 0xD0, - 0x56, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0xB8, - 0xD7, - 0x04, - 0x17, - 0x00, - 0x00, - 0xF7, - 0xD0, - 0xD9, - 0xDB, - 0xD0, - 0xF7, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xD6, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0xFA, - 0x00, - 0xE1, - 0xD8, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xD7, - 0x00, - 0x00, - 0x60, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5D, - 0x04, - 0x0D, - 0x00, - 0xD6, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xD5, - 0xF3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0x8C, - 0x3B, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0xEF, - 0xDB, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0x58, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD7, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x54, - 0xDE, - 0xD9, - 0x00, - 0xF3, - 0xDC, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xF6, - 0xD5, - 0xDD, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD9, - 0xDE, - 0x53, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xD9, - 0xF4, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x5E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xD0, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDA, - 0xDE, - 0x00, - 0x00, - 0xDE, - 0xD3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD0, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD4, - 0x55, - 0x00, - 0x00, - 0xDB, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0xDB, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0xF2, - 0x00, - 0x00, - 0x5B, - 0xDA, - 0x5E, - 0x00, - 0x00, - 0xF7, - 0xE1, - 0xD5, - 0xD9, - 0xD0, - 0x55, - 0x00, - 0xF3, - 0x04, - 0xD5, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xDD, - 0xD2, - 0x00, - 0xDE, - 0xDB, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0xFA, - 0x04, - 0xD2, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0xB8, - 0xD5, - 0xDB, - 0x55, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xE1, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xD7, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD2, - 0x04, - 0x59, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD9, - 0xD7, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0x16, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x57, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x56, - 0xD8, - 0xD7, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDC, - 0xDA, - 0x57, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xD9, - 0xF1, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xF2, - 0xF6, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xF2, - 0x04, - 0x16, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0xFA, - 0x00, - 0x00, - 0xDC, - 0xDC, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF7, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x59, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x54, - 0xDE, - 0xDB, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0xDB, - 0x53, - 0x00, - 0x00, - 0xC6, - 0xB8, - 0xD8, - 0xD2, - 0xB3, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xDB, - 0xD7, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0xD2, - 0xB3, - 0x00, - 0x00, - 0x17, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xC3, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x59, - 0x57, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x3B, - 0xC8, - 0xE3, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF5, - 0x04, - 0x17, - 0x00, - 0x00, - 0x17, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDB, - 0xDE, - 0x00, - 0xDE, - 0xDA, - 0x56, - 0x54, - 0x00, - 0xB8, - 0xD4, - 0xDE, - 0x00, - 0x00, - 0x16, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xD9, - 0xF7, - 0x54, - 0x00, - 0xB8, - 0xD9, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0xD2, - 0x55, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDC, - 0xD5, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x59, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xDD, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5C, - 0xD4, - 0xDC, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x56, - 0x04, - 0xD7, - 0x55, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD2, - 0x04, - 0x57, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDC, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0x04, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0x04, - 0xEF, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0x59, - 0xDA, - 0xD0, - 0x00, - 0x00, - 0xF6, - 0xD5, - 0xDB, - 0x57, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xDF, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD7, - 0xD8, - 0x5A, - 0x54, - 0x00, - 0x54, - 0xF5, - 0xD0, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0xDE, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x59, - 0xD7, - 0xDB, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x60, - 0x04, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xD6, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0xDD, - 0x5A, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0x60, - 0xD9, - 0xD9, - 0x56, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x54, - 0x00, - 0xB3, - 0x58, - 0xD2, - 0x04, - 0xD0, - 0xB3, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x53, - 0xD0, - 0x04, - 0xDB, - 0xFA, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x5A, - 0xDC, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5B, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xDB, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD9, - 0xDB, - 0x5E, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x17, - 0xD9, - 0xD8, - 0x59, - 0x54, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD0, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x53, - 0xD6, - 0x04, - 0xDC, - 0x5A, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x5C, - 0xDD, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xFA, - 0xD8, - 0xDC, - 0xF5, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x0D, - 0x53, - 0x00, - 0x54, - 0xF5, - 0xDE, - 0x04, - 0x57, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xDE, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD3, - 0xD5, - 0xF3, - 0x00, - 0xF5, - 0xD4, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFA, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x56, - 0x00, - 0x00, - 0xB3, - 0xD2, - 0xD8, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD9, - 0xD7, - 0xF3, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x5B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0x5E, - 0x00, - 0x00, - 0xF6, - 0xDB, - 0xDB, - 0x56, - 0x00, - 0x00, - 0x00, - 0xF5, - 0xDB, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x17, - 0x04, - 0xD7, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0x04, - 0x04, - 0xD8, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xFA, - 0x5D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xD2, - 0xD8, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD5, - 0xD0, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD9, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x55, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xC0, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x59, - 0x54, - 0x00, - 0x00, - 0xD3, - 0xD0, - 0x00, - 0x00, - 0xF6, - 0xF1, - 0xD3, - 0x56, - 0xF3, - 0x55, - 0xD0, - 0x04, - 0x5A, - 0x00, - 0xB8, - 0xDB, - 0xD9, - 0xE1, - 0xE1, - 0xD9, - 0xDB, - 0xB8, - 0x54, - 0x00, - 0xF4, - 0xDB, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xD9, - 0xDB, - 0xE1, - 0xE1, - 0xD9, - 0xD9, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD9, - 0xDC, - 0x56, - 0x00, - 0x57, - 0xDB, - 0xD5, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD5, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x59, - 0xD8, - 0x04, - 0xDE, - 0xD6, - 0xD6, - 0xD7, - 0x04, - 0xD5, - 0xB8, - 0x54, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x5E, - 0xD4, - 0xD9, - 0xD0, - 0xD6, - 0xD0, - 0xD9, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDC, - 0xD4, - 0xD0, - 0xD6, - 0xDE, - 0x04, - 0xD7, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD5, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD9, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0xF7, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xD9, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x55, - 0xF1, - 0x04, - 0xDE, - 0xD6, - 0xDE, - 0x04, - 0xDC, - 0x55, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD5, - 0x04, - 0xDE, - 0xD6, - 0xE1, - 0xDC, - 0x04, - 0xDE, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0xDB, - 0x04, - 0xD2, - 0xD6, - 0xE1, - 0xD5, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0xDC, - 0x04, - 0xDD, - 0xD0, - 0xD6, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xDE, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD9, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0xD6, - 0xD0, - 0xDD, - 0x04, - 0xDE, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5D, - 0xDB, - 0x04, - 0xDB, - 0xD0, - 0xD6, - 0xD6, - 0xDE, - 0xD9, - 0x04, - 0xD2, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0xD6, - 0xE1, - 0xDE, - 0xDB, - 0x04, - 0xD9, - 0x17, - 0x53, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x57, - 0x54, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x57, - 0x54, - 0x00, - 0x00, - 0xB3, - 0xEF, - 0x04, - 0x04, - 0xD9, - 0xDE, - 0xD6, - 0xD6, - 0xD0, - 0xDB, - 0x04, - 0xD7, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x0D, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB8, - 0xD2, - 0x04, - 0xD9, - 0xDE, - 0xD6, - 0xD6, - 0xDE, - 0xD9, - 0x04, - 0xD7, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x12, - 0xD6, - 0xDE, - 0xDB, - 0x04, - 0xD2, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5E, - 0xDB, - 0x04, - 0xDB, - 0xD0, - 0xD6, - 0xD6, - 0xD0, - 0xDB, - 0xDA, - 0xDB, - 0x5C, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x12, - 0xD6, - 0xDE, - 0xDB, - 0x04, - 0xDC, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xF4, - 0xDE, - 0x04, - 0xD7, - 0xD6, - 0xE1, - 0xD5, - 0x04, - 0xD6, - 0x00, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x04, - 0xDC, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x60, - 0x04, - 0x5A, - 0x54, - 0x59, - 0x04, - 0xF9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x56, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x17, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0xDF, - 0x00, - 0x00, - 0xF7, - 0xDA, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xDD, - 0xF1, - 0xF3, - 0x00, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0x0A, - 0xD6, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD9, - 0xDA, - 0x5A, - 0x00, - 0x00, - 0x16, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD2, - 0x04, - 0xD3, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0xC1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0xD7, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0xD4, - 0xD8, - 0xD0, - 0xD6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0xD0, - 0x57, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x0A, - 0xD7, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x9D, - 0x3B, - 0xD8, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0xDE, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDB, - 0xDF, - 0x00, - 0x00, - 0x00, - 0xD0, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x55, - 0xDE, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x17, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD0, - 0xDB, - 0xDB, - 0xD0, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDF, - 0xDB, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xD0, - 0xD9, - 0xDB, - 0xD0, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD0, - 0x17, - 0x00, - 0x17, - 0xD0, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xD9, - 0xF4, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD6, - 0xD7, - 0xD9, - 0xD9, - 0xD2, - 0xDF, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xE1, - 0xDC, - 0xD8, - 0xDC, - 0xD0, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD6, - 0xD5, - 0xD8, - 0xF1, - 0xEF, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD5, - 0xD7, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x55, - 0x12, - 0xDC, - 0xD8, - 0xDC, - 0xD6, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDF, - 0xD7, - 0xD9, - 0xDB, - 0xDE, - 0x5D, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xE1, - 0xDD, - 0x04, - 0xDB, - 0xDE, - 0x59, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x5B, - 0xD0, - 0xF1, - 0xD8, - 0xD9, - 0xD7, - 0xD6, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xDC, - 0xDE, - 0xFA, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF5, - 0x16, - 0xD0, - 0xDD, - 0xD8, - 0xD9, - 0xD7, - 0xE1, - 0x58, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xDB, - 0xD7, - 0xD0, - 0x5E, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x0A, - 0xD7, - 0xD9, - 0x04, - 0xD9, - 0xD7, - 0xD6, - 0x59, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xDE, - 0x04, - 0x5A, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0xD3, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0x58, - 0xE1, - 0xD3, - 0xD8, - 0xD8, - 0xF1, - 0xE1, - 0x59, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xDC, - 0xD0, - 0xFA, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x60, - 0xDE, - 0xDD, - 0xDA, - 0xD8, - 0xDC, - 0xD0, - 0xFA, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xD9, - 0xD3, - 0xD0, - 0xFA, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x60, - 0xD2, - 0xD9, - 0xDB, - 0xDE, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x0D, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xD9, - 0xDE, - 0x00, - 0xD6, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0xD8, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD5, - 0xD2, - 0x00, - 0xF7, - 0xD8, - 0xD2, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0xDA, - 0x56, - 0x00, - 0xE1, - 0x04, - 0x56, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0x5E, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xDE, - 0x17, - 0x00, - 0x00, - 0xD7, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDB, - 0xEF, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDE, - 0x04, - 0xD7, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0xE1, - 0xF1, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xF2, - 0xD8, - 0x17, - 0x00, - 0x04, - 0xDE, - 0x00, - 0xD8, - 0xDC, - 0xD6, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0x04, - 0xF2, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x00, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD6, - 0xD2, - 0x53, - 0xD0, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDE, - 0x16, - 0xB3, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x5E, - 0x3B, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0xDE, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x55, - 0x00, - 0xF6, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x49, - 0x04, - 0x00, - 0x00, - 0x1B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x06, - 0x74, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x60, - 0x58, - 0x58, - 0x60, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x53, - 0xB8, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x60, - 0x04, - 0x60, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x57, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x56, - 0xD7, - 0xD9, - 0xDB, - 0xDF, - 0xF3, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF6, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF6, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF4, - 0x00, - 0x17, - 0x04, - 0x17, - 0x00, - 0xF4, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x53, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xF6, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB3, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF3, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x53, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF5, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x53, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x55, - 0x54, - 0x54, - 0x55, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF6, - 0x54, - 0x00, - 0xF3, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xB8, - 0xF3, - 0x00, - 0x00, - 0xF3, - 0xB8, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xF7, - 0x53, - 0x54, - 0xB3, - 0x56, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0xF5, - 0x00, - 0x00, - 0xF5, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x57, - 0xF3, - 0x00, - 0x00, - 0xF5, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF7, - 0x53, - 0x54, - 0x53, - 0xB8, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xDA, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x17, - 0x55, - 0x53, - 0x54, - 0x53, - 0xF3, - 0xB8, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF7, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x54, - 0xF4, - 0xB8, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xFA, - 0xF6, - 0x53, - 0x54, - 0x00, - 0x53, - 0xF7, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x00, - 0x53, - 0x55, - 0x5C, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x57, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xF7, - 0xF3, - 0x00, - 0x54, - 0x53, - 0xF6, - 0x5A, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xDB, - 0xF7, - 0x53, - 0x00, - 0x46, - 0xB8, - 0xD8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x17, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x55, - 0x53, - 0x54, - 0x53, - 0xB3, - 0xF7, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF7, - 0xB3, - 0x00, - 0x54, - 0xB3, - 0xF7, - 0xD6, - 0x04, - 0xDA, - 0x57, - 0xF3, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xB8, - 0xF3, - 0x54, - 0x54, - 0xF6, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xB8, - 0xF3, - 0x54, - 0x53, - 0xF5, - 0x5C, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x04, - 0x57, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x57, - 0x04, - 0x04, - 0xDA, - 0xF4, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF7, - 0xB3, - 0x54, - 0x54, - 0xF3, - 0x57, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD7, - 0xF7, - 0x53, - 0x54, - 0x53, - 0x55, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF7, - 0xB3, - 0x54, - 0x00, - 0xF4, - 0x59, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xB8, - 0xF3, - 0x54, - 0x54, - 0xF3, - 0x57, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x55, - 0x53, - 0x54, - 0x53, - 0x55, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0C, - 0x55, - 0x53, - 0x54, - 0x53, - 0xF7, - 0xDC, - 0x04, - 0xB3, - 0xF3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0C, - 0x55, - 0x53, - 0x54, - 0x54, - 0xF6, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD2, - 0x55, - 0x54, - 0x54, - 0x53, - 0x55, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0C, - 0x55, - 0x54, - 0x54, - 0x53, - 0x55, - 0xD2, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF6, - 0x54, - 0x00, - 0xF5, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0xF5, - 0x54, - 0x54, - 0x53, - 0xB8, - 0xD4, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x51, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x55, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0xD9, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x00, - 0x55, - 0xF7, - 0x00, - 0x54, - 0xD5, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x54, - 0xF7, - 0xF7, - 0xB3, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x00, - 0xF5, - 0xF7, - 0xF7, - 0xF4, - 0x00, - 0x54, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x53, - 0x00, - 0x54, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x00, - 0x55, - 0xB8, - 0xF5, - 0x00, - 0x53, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0xF5, - 0x00, - 0xF3, - 0xF7, - 0xF7, - 0x53, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x53, - 0x00, - 0xF3, - 0xF7, - 0xF7, - 0x53, - 0x00, - 0xF5, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0x55, - 0xB8, - 0xF6, - 0x00, - 0x54, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x59, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x5A, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x53, - 0x00, - 0x53, - 0x55, - 0xB8, - 0xB8, - 0xF6, - 0x54, - 0x00, - 0xF6, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDC, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xF7, - 0xF4, - 0x00, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0xC6, - 0x09, - 0x54, - 0xF6, - 0xB8, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0xF4, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xF7, - 0xF6, - 0x53, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xD0, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF3, - 0x00, - 0x00, - 0xF6, - 0xF7, - 0xB8, - 0x55, - 0x54, - 0x00, - 0x54, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD9, - 0x54, - 0x00, - 0xF6, - 0xB8, - 0xF5, - 0x00, - 0xF3, - 0xD4, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF3, - 0x00, - 0x00, - 0xF6, - 0xB8, - 0xB8, - 0xF6, - 0x09, - 0x09, - 0xF3, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF4, - 0x00, - 0x00, - 0xF5, - 0xF7, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0xF5, - 0x5B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x54, - 0x00, - 0xF4, - 0xB8, - 0xF7, - 0x53, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x00, - 0xF4, - 0xB8, - 0xF7, - 0xB3, - 0x54, - 0xF3, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x54, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0xF3, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0xF5, - 0xB8, - 0xF7, - 0xF4, - 0x00, - 0xB3, - 0xD5, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x5D, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF7, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0xF6, - 0xB8, - 0xF7, - 0xB3, - 0x00, - 0x53, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0x00, - 0xF5, - 0xB8, - 0xF7, - 0xF4, - 0x00, - 0xB3, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0xF7, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x00, - 0x00, - 0xE1, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xD4, - 0xF7, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x5A, - 0x00, - 0x54, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF7, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x54, - 0x55, - 0xB8, - 0x55, - 0x00, - 0x00, - 0x5B, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x00, - 0xF7, - 0xF7, - 0x54, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0x55, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0xF7, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFE, - 0xFF, - 0xF9, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x53, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF5, - 0xDC, - 0x04, - 0xD7, - 0xF3, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x53, - 0x56, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDE, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x55, - 0xDA, - 0xE1, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xB8, - 0x04, - 0xEF, - 0x00, - 0x53, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xDB, - 0xB3, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xB3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x54, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF4, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xB8, - 0x54, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x54, - 0xB8, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC6, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF6, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xF3, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xC6, - 0x54, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x58, - 0x00, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF6, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0x54, - 0x5A, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x53, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF7, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x59, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF4, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x00, - 0x54, - 0x5C, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x16, - 0xC6, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x56, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x54, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x00, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xF5, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x53, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x55, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xF5, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xF5, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x53, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB8, - 0x53, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xB8, - 0x54, - 0xF6, - 0xDA, - 0x04, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDD, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF4, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x53, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xC8, - 0xFF, - 0xFE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xD8, - 0x04, - 0x04, - 0xD4, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x53, - 0xD4, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0xF6, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xB8, - 0x54, - 0xF3, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xD9, - 0xF3, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0xEF, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x00, - 0x00, - 0x54, - 0x53, - 0x04, - 0xD6, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD7, - 0x04, - 0x57, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x53, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x55, - 0x00, - 0x00, - 0xF4, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0xF4, - 0x00, - 0x00, - 0xF7, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xFA, - 0x04, - 0xDA, - 0xD5, - 0xDA, - 0x04, - 0x04, - 0xDA, - 0xD5, - 0x00, - 0x00, - 0xB8, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0xD6, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x57, - 0x04, - 0x04, - 0x16, - 0x09, - 0xF3, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x54, - 0x53, - 0xD9, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF4, - 0x00, - 0x59, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF5, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xDE, - 0x00, - 0xB3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF3, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x00, - 0x00, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xE1, - 0x04, - 0xD2, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF5, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x00, - 0xF6, - 0xDA, - 0xD2, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x17, - 0x04, - 0xD4, - 0xF3, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xD0, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDF, - 0x04, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xE1, - 0x04, - 0xD0, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF5, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xF4, - 0xD7, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xFA, - 0x04, - 0x0A, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE3, - 0x3B, - 0x6E, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x59, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0xF4, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF5, - 0x00, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x09, - 0x00, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x53, - 0x54, - 0xB8, - 0xB8, - 0x04, - 0xF7, - 0x53, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x56, - 0x04, - 0xF3, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0xF5, - 0x00, - 0x00, - 0xF6, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF6, - 0x00, - 0x00, - 0xF5, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xFA, - 0x04, - 0x59, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xDC, - 0x53, - 0x00, - 0x00, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x53, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0xDA, - 0x54, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0xF7, - 0xDF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD5, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD0, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF4, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xDA, - 0xD0, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF3, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0xDA, - 0x53, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x53, - 0xD4, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x56, - 0x00, - 0xB3, - 0xDD, - 0xDE, - 0x54, - 0xB3, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x54, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x53, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDB, - 0x04, - 0x53, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x57, - 0xDD, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD7, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xDF, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x55, - 0x04, - 0xF7, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF6, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x5C, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0xD3, - 0x55, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x55, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x55, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xDF, - 0x04, - 0xF7, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDA, - 0x0A, - 0x00, - 0xDE, - 0x04, - 0xD9, - 0x00, - 0x58, - 0x04, - 0xF3, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD3, - 0x53, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x54, - 0x5A, - 0xDE, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF3, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD4, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xF7, - 0x00, - 0xF6, - 0xB8, - 0xB8, - 0xB8, - 0x53, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0xEF, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x53, - 0x04, - 0x55, - 0x00, - 0xD7, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x55, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0xF6, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x16, - 0x54, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x59, - 0x56, - 0x5C, - 0x00, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x5A, - 0xB3, - 0x00, - 0x00, - 0xF7, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0x00, - 0x00, - 0xF3, - 0xFA, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0xF6, - 0x04, - 0xD0, - 0x00, - 0xB3, - 0x5A, - 0x58, - 0xB3, - 0x00, - 0x00, - 0xD7, - 0xD9, - 0xB8, - 0xC6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x59, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x56, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x56, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x00, - 0x5D, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0xB8, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x16, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF9, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x00, - 0xD2, - 0xDA, - 0x04, - 0xDA, - 0xD7, - 0x57, - 0x53, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x16, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD4, - 0xF4, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xD2, - 0x04, - 0x53, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0xDA, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF3, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x53, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF6, - 0x54, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x54, - 0xDA, - 0x04, - 0xD7, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF7, - 0x04, - 0xDA, - 0x00, - 0xB8, - 0x04, - 0x5C, - 0x00, - 0xDD, - 0x04, - 0x5A, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0x00, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD8, - 0x04, - 0xF4, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xD9, - 0x04, - 0x04, - 0xB8, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF6, - 0x00, - 0xF5, - 0xD5, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x3B, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x54, - 0x53, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xF7, - 0x00, - 0x54, - 0xDB, - 0x04, - 0xF6, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x53, - 0x53, - 0x53, - 0x54, - 0x00, - 0x00, - 0x53, - 0x53, - 0x53, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xC6, - 0xF7, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0xDA, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xD4, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0xE1, - 0x04, - 0xF7, - 0x00, - 0xDD, - 0x04, - 0x04, - 0xDA, - 0xF4, - 0x00, - 0x0A, - 0x04, - 0x04, - 0xFA, - 0xF3, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x00, - 0x53, - 0x53, - 0x53, - 0x53, - 0x54, - 0x00, - 0x00, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x57, - 0x04, - 0xF5, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF4, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xF7, - 0x00, - 0xF3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x17, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x5D, - 0x54, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0x57, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF6, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x00, - 0x00, - 0x53, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF4, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x57, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xD6, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF4, - 0x04, - 0x04, - 0xF5, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x57, - 0x53, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x54, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xD2, - 0x00, - 0x00, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x16, - 0xF5, - 0x54, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x55, - 0x53, - 0x04, - 0xF5, - 0xF3, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x16, - 0x09, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x00, - 0x16, - 0x04, - 0xDF, - 0x00, - 0x16, - 0xDA, - 0xD0, - 0xF5, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xD9, - 0x04, - 0x04, - 0xFC, - 0x3B, - 0xE3, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x04, - 0xDB, - 0x55, - 0x54, - 0x54, - 0x55, - 0xD5, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x53, - 0xDC, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x55, - 0x04, - 0x58, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x54, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x53, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x16, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x56, - 0x04, - 0xF6, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDF, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x55, - 0xD7, - 0x04, - 0xDA, - 0xD6, - 0xB3, - 0xC6, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0x09, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x54, - 0xDA, - 0x04, - 0x55, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x55, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x55, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x55, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xB3, - 0x00, - 0xD9, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x53, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x54, - 0xF4, - 0x59, - 0xDA, - 0x04, - 0x04, - 0x53, - 0xB3, - 0xD9, - 0xDF, - 0x57, - 0xB8, - 0x57, - 0x17, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xD5, - 0x55, - 0xF6, - 0xF3, - 0x00, - 0x00, - 0xF5, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x57, - 0x00, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x03, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x57, - 0x04, - 0x04, - 0x57, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x53, - 0x00, - 0x00, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xD8, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0xDA, - 0x54, - 0x00, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x59, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF3, - 0x00, - 0xB3, - 0x59, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xD0, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0x54, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDE, - 0x04, - 0x04, - 0xDA, - 0x53, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x00, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0x5D, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xF2, - 0xDA, - 0xDF, - 0x09, - 0xF7, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x45, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xDA, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xB8, - 0x54, - 0x00, - 0xB3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x00, - 0xB8, - 0x55, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xB3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD7, - 0x04, - 0xDF, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF4, - 0x00, - 0x58, - 0xD9, - 0x04, - 0xD5, - 0xF7, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB3, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x16, - 0xF3, - 0x00, - 0x00, - 0x55, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0x00, - 0x00, - 0xF4, - 0x16, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0x54, - 0xF2, - 0x04, - 0x04, - 0x00, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xD9, - 0x04, - 0x04, - 0xD2, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xF7, - 0xF4, - 0x00, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x57, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x54, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x53, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xD2, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF4, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x59, - 0x53, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x5A, - 0xF5, - 0x00, - 0x00, - 0xF5, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x5B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x17, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xD2, - 0x04, - 0x04, - 0xD7, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xE1, - 0xF7, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x55, - 0xDA, - 0x55, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xDA, - 0x04, - 0x04, - 0x55, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x00, - 0xF6, - 0xDA, - 0xF6, - 0x00, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x04, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xDC, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0xDA, - 0xF6, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x55, - 0x04, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x55, - 0xDA, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x54, - 0xEF, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0xF3, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEF, - 0x56, - 0x17, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0xD7, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF5, - 0x00, - 0x00, - 0x00, - 0xF7, - 0xD8, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xD0, - 0x57, - 0x57, - 0xD0, - 0x04, - 0xDA, - 0xF6, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x55, - 0x00, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0B, - 0xF7, - 0xF4, - 0x00, - 0xB3, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0xDA, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x59, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF6, - 0x00, - 0x00, - 0xF6, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xF6, - 0x00, - 0x00, - 0xF5, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0x00, - 0xDB, - 0x04, - 0x00, - 0xD8, - 0x04, - 0xD0, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x58, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xD0, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x53, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xFA, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xB3, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x57, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x60, - 0x04, - 0x04, - 0xDA, - 0x57, - 0x00, - 0x00, - 0xF3, - 0x57, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xF5, - 0xB3, - 0x04, - 0x04, - 0xF6, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF4, - 0x04, - 0xD9, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x54, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xD0, - 0x04, - 0xDE, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0xF5, - 0x04, - 0x04, - 0xDE, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x00, - 0xF6, - 0x04, - 0xE1, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF7, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD8, - 0x53, - 0xC6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDA, - 0x04, - 0x00, - 0x00, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF6, - 0x04, - 0xD6, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xE1, - 0x04, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xD0, - 0x04, - 0xD0, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDA, - 0x04, - 0x04, - 0xDA, - 0x17, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x17, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x54, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x54, - 0x57, - 0x04, - 0x5D, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x54, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3C, - 0x3B, - 0x3B, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xD0, - 0x16, - 0x00, - 0x56, - 0xD0, - 0xD0, - 0xD0, - 0x00, - 0xF4, - 0xD0, - 0xD0, - 0x04, - 0xDA, - 0x53, - 0x54, - 0xF3, - 0xFA, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x54, - 0x00, - 0x00, - 0x54, - 0x55, - 0xDA, - 0xD0, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x54, - 0xF6, - 0x54, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x00, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xB3, - 0xF7, - 0xF7, - 0x53, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x54, - 0x00, - 0xF4, - 0xB8, - 0xF7, - 0xB3, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0xF5, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF7, - 0x00, - 0x00, - 0xF3, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0xF4, - 0x00, - 0x00, - 0xF7, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0xF7, - 0x04, - 0xF4, - 0xD6, - 0x04, - 0x04, - 0xF3, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xB3, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xEF, - 0x53, - 0x54, - 0xD9, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xD0, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xF5, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF3, - 0x04, - 0xF4, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF5, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0xFA, - 0x00, - 0xF6, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xDB, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD0, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xD4, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xF5, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0xB3, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0xC6, - 0x55, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xF6, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x54, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xF6, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x53, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x55, - 0x00, - 0xB8, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xB8, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xB8, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0xF3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF3, - 0x00, - 0xD2, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x55, - 0xD4, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x00, - 0x53, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0x00, - 0xF3, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF3, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x55, - 0x00, - 0xF7, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x55, - 0x04, - 0x04, - 0x00, - 0x00, - 0xC6, - 0xF7, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xF7, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x54, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0xF5, - 0xD4, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xD0, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0xF5, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5E, - 0x09, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0xD8, - 0x3E, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0x54, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x5A, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0xB8, - 0xD8, - 0xDA, - 0xB8, - 0x54, - 0x56, - 0x04, - 0xF4, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0xB8, - 0x04, - 0xD8, - 0xF6, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0xB6, - 0xD0, - 0x04, - 0xDE, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xF6, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xD2, - 0xF4, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDE, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5A, - 0x54, - 0x57, - 0xF6, - 0x54, - 0x00, - 0xF4, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0x00, - 0x53, - 0x00, - 0xF3, - 0x59, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x55, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x56, - 0x54, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x00, - 0x54, - 0x56, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x57, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0x57, - 0xF5, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xB3, - 0xD5, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x00, - 0xDE, - 0x04, - 0xDE, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x53, - 0x04, - 0x04, - 0x04, - 0xB3, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x56, - 0x04, - 0x04, - 0x58, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x56, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xF6, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x5A, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0xD4, - 0xF3, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xFA, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0x16, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0x04, - 0xB8, - 0x54, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x57, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xF3, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x58, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x00, - 0x00, - 0x00, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0xDC, - 0xD9, - 0x00, - 0xF3, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x59, - 0x04, - 0x04, - 0x5D, - 0x54, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0xF5, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0xB3, - 0xD5, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0x0B, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF7, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x00, - 0xF6, - 0xB8, - 0xF7, - 0xF3, - 0x00, - 0x53, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x54, - 0xF6, - 0xB8, - 0xF7, - 0xF3, - 0x00, - 0x53, - 0xD2, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0x54, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0x54, - 0x55, - 0xB8, - 0x55, - 0x00, - 0x00, - 0x0A, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0xB8, - 0x55, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x53, - 0xF7, - 0xF7, - 0x53, - 0x00, - 0x5A, - 0xDC, - 0x54, - 0x00, - 0x55, - 0xB8, - 0xF5, - 0x53, - 0xF3, - 0xD9, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF6, - 0xB8, - 0xF6, - 0x00, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x0B, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF7, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x54, - 0x00, - 0x59, - 0xF6, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF7, - 0xD7, - 0x04, - 0xDB, - 0x54, - 0x00, - 0xF7, - 0xF7, - 0x00, - 0x54, - 0xD9, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0x54, - 0x53, - 0xB8, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xDC, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDA, - 0x04, - 0xD0, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x16, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0x59, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0xDD, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0xF3, - 0xDA, - 0x04, - 0xDC, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x57, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xF7, - 0x00, - 0x53, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0xF9, - 0x94, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xF6, - 0x00, - 0x04, - 0xD9, - 0xD9, - 0xD9, - 0xF5, - 0xF5, - 0xD9, - 0xD9, - 0xD9, - 0x58, - 0x00, - 0xD7, - 0xD9, - 0xDA, - 0x55, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x53, - 0x04, - 0xDF, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x54, - 0xDA, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x57, - 0x53, - 0xD9, - 0x53, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x53, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0x04, - 0xD4, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xB3, - 0xF3, - 0xD4, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x00, - 0x04, - 0x04, - 0xF3, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x5B, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0x5B, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0xD9, - 0x00, - 0x5A, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x53, - 0xF5, - 0xF3, - 0xF7, - 0x04, - 0xF5, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x17, - 0x04, - 0xE1, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x55, - 0x04, - 0x04, - 0xD8, - 0x09, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0xB8, - 0xD0, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0xD5, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF7, - 0x56, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x54, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xD5, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0xB3, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xB8, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xDA, - 0xB3, - 0xC6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0xD5, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0xD9, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x00, - 0x00, - 0xC6, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0x57, - 0x04, - 0x04, - 0xFA, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x54, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xB3, - 0x04, - 0x04, - 0xF3, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF7, - 0xF3, - 0x00, - 0x00, - 0xF4, - 0x59, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD3, - 0xF7, - 0x53, - 0x00, - 0x54, - 0x55, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF7, - 0xB3, - 0x00, - 0x00, - 0xF4, - 0x59, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xB8, - 0xF3, - 0x00, - 0x00, - 0xF4, - 0x57, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x55, - 0x53, - 0x00, - 0x53, - 0x55, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF6, - 0x53, - 0x00, - 0x53, - 0xF7, - 0xD5, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x56, - 0xB3, - 0x00, - 0x54, - 0x55, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xD9, - 0x55, - 0x54, - 0x00, - 0xF5, - 0xD6, - 0x04, - 0x04, - 0xDB, - 0x55, - 0x54, - 0x00, - 0xB3, - 0xB8, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x59, - 0xF3, - 0x00, - 0x54, - 0xF6, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x55, - 0x53, - 0x00, - 0x54, - 0xF6, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD3, - 0xF7, - 0x53, - 0x00, - 0x54, - 0xF6, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x55, - 0x53, - 0x00, - 0x53, - 0x55, - 0xD2, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xD7, - 0xF3, - 0x54, - 0x57, - 0x04, - 0x04, - 0xDC, - 0xF6, - 0x00, - 0x54, - 0xF6, - 0xDD, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0xB8, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x16, - 0x04, - 0xF7, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0xF3, - 0x04, - 0x04, - 0x59, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x60, - 0x00, - 0x56, - 0x04, - 0xB8, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x54, - 0xDA, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x9E, - 0xFF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0xD0, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0xF3, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDA, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x5C, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x55, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF5, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x54, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0x04, - 0x04, - 0x57, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF2, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x17, - 0x00, - 0x5C, - 0x04, - 0x04, - 0xD5, - 0xF7, - 0x54, - 0x00, - 0xF6, - 0xD9, - 0x04, - 0x04, - 0x00, - 0x53, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF4, - 0x04, - 0xF6, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x16, - 0x00, - 0xF4, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x54, - 0x54, - 0xD9, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF4, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF3, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF3, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xDE, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD2, - 0x00, - 0xF3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x53, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x57, - 0x00, - 0xF5, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF4, - 0x53, - 0x5D, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xFA, - 0x04, - 0x04, - 0x53, - 0x53, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD6, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x54, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x53, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0xEF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xE1, - 0xDE, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFF, - 0x54, - 0x41, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0xDB, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x57, - 0x04, - 0x04, - 0x59, - 0x00, - 0xDE, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x54, - 0xF5, - 0x04, - 0xF6, - 0x00, - 0xD7, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x5B, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD5, - 0x04, - 0x04, - 0xDD, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0xF4, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x53, - 0x54, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x53, - 0x54, - 0x00, - 0x00, - 0x00, - 0x53, - 0x54, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x54, - 0xD6, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x53, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0xD2, - 0x00, - 0xF3, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF4, - 0x00, - 0xDE, - 0x04, - 0x04, - 0xB8, - 0x54, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x58, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x55, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x55, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x54, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x54, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0xF6, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF3, - 0x54, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0x5A, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x56, - 0x00, - 0x53, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x5A, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0xF4, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x00, - 0x54, - 0x16, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x53, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x00, - 0x54, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x00, - 0x54, - 0x5B, - 0xD4, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x58, - 0x00, - 0x00, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x55, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x53, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x53, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xFA, - 0x00, - 0x53, - 0xDA, - 0x04, - 0x04, - 0x56, - 0x00, - 0x56, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF6, - 0x54, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x53, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0x00, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xD2, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x00, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5B, - 0x54, - 0x5B, - 0x04, - 0x04, - 0xD8, - 0x54, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x54, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0xC6, - 0xF3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x16, - 0x60, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x54, - 0x55, - 0xDA, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x59, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0xD6, - 0x04, - 0x04, - 0x04, - 0xB3, - 0x55, - 0x04, - 0x04, - 0xDA, - 0x53, - 0xB3, - 0xD2, - 0x04, - 0xD9, - 0x55, - 0x00, - 0xEF, - 0x04, - 0xDC, - 0x54, - 0x00, - 0xF7, - 0xF7, - 0x00, - 0x54, - 0xDC, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x56, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD2, - 0x00, - 0x54, - 0xF7, - 0xF7, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x53, - 0xD7, - 0x04, - 0xDE, - 0x54, - 0x54, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0x54, - 0x00, - 0x00, - 0xB8, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x0A, - 0x00, - 0x54, - 0xF5, - 0xF7, - 0xF7, - 0xF3, - 0x00, - 0x53, - 0xD3, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0x54, - 0xF6, - 0xDA, - 0x04, - 0x5C, - 0x00, - 0x00, - 0x55, - 0xB8, - 0x55, - 0x00, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x00, - 0xF6, - 0xB8, - 0xF5, - 0x53, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x54, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x55, - 0x54, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x54, - 0x00, - 0x04, - 0x04, - 0xD9, - 0x53, - 0x54, - 0xF6, - 0xB8, - 0xF6, - 0x54, - 0x53, - 0xD9, - 0x04, - 0x04, - 0x04, - 0xD3, - 0x53, - 0x00, - 0xF5, - 0xB8, - 0xF7, - 0x53, - 0x00, - 0xF6, - 0xD4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x54, - 0x00, - 0xF4, - 0xB8, - 0xF7, - 0x54, - 0x00, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0x53, - 0x00, - 0x53, - 0x55, - 0xB8, - 0xF7, - 0xF6, - 0x54, - 0x00, - 0xF5, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0x00, - 0x00, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0x55, - 0x53, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x17, - 0x54, - 0x00, - 0x54, - 0x55, - 0xB8, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0xF4, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xF7, - 0xF5, - 0x54, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xD0, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x54, - 0x00, - 0xF6, - 0xB8, - 0xB8, - 0x55, - 0x54, - 0x00, - 0xF3, - 0xDE, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0x56, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x54, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF4, - 0x00, - 0x00, - 0xF6, - 0xF7, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0xF3, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0xF4, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5C, - 0x54, - 0x00, - 0x54, - 0xF6, - 0xB8, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0x54, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xF7, - 0xF6, - 0x00, - 0x00, - 0x53, - 0xDC, - 0x04, - 0x04, - 0x04, - 0xDA, - 0xF5, - 0x53, - 0xF3, - 0xF7, - 0xF7, - 0x54, - 0x00, - 0xB8, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x54, - 0x53, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xDB, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x59, - 0x54, - 0xDF, - 0x04, - 0xD6, - 0x00, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD7, - 0x00, - 0x57, - 0x04, - 0x04, - 0x58, - 0x00, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x54, - 0x56, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x53, - 0xB3, - 0x04, - 0x04, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0xB8, - 0x54, - 0x54, - 0x04, - 0x04, - 0x04, - 0xDE, - 0x00, - 0x00, - 0xDF, - 0x04, - 0x04, - 0x5D, - 0x54, - 0xDC, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF4, - 0x54, - 0xB3, - 0xDB, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0x00, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF3, - 0x54, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD0, - 0x00, - 0x00, - 0xF6, - 0xB8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x55, - 0xDE, - 0x04, - 0x00, - 0xF6, - 0xDA, - 0xB8, - 0xF3, - 0x00, - 0x5A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x81, - 0xFF, - 0x45, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0xF6, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0x56, - 0x04, - 0x04, - 0x04, - 0x55, - 0x53, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF6, - 0x00, - 0x00, - 0x00, - 0x00, - 0x58, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x55, - 0x54, - 0x54, - 0xF6, - 0xDD, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x54, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF6, - 0x00, - 0x54, - 0xF6, - 0xD3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF6, - 0x58, - 0x04, - 0x58, - 0x55, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x00, - 0x00, - 0x00, - 0xD5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xB8, - 0xF3, - 0x00, - 0x00, - 0xF3, - 0x57, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0xD7, - 0xF7, - 0x53, - 0x00, - 0x53, - 0x55, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0xF7, - 0x53, - 0x00, - 0xB3, - 0xB8, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDF, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x57, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x54, - 0xF3, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xB8, - 0x53, - 0x00, - 0x53, - 0xB8, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x56, - 0xF3, - 0x00, - 0x54, - 0xF5, - 0x17, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0xF7, - 0x53, - 0x00, - 0x54, - 0xF6, - 0x0A, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x17, - 0x55, - 0xB3, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF7, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xF6, - 0x16, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x5D, - 0xF6, - 0x53, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0xF3, - 0x55, - 0x5C, - 0xD8, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x57, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x54, - 0x57, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0xB8, - 0xF3, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xF7, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x00, - 0xDF, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0xB3, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0x00, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x00, - 0x55, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xE1, - 0xF7, - 0xB3, - 0x00, - 0x00, - 0xB3, - 0xF7, - 0xD6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x53, - 0xF6, - 0x16, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x5A, - 0xF6, - 0x53, - 0x00, - 0x00, - 0x53, - 0xF6, - 0xFA, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xB3, - 0x55, - 0xFA, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD4, - 0x59, - 0xF4, - 0x00, - 0x54, - 0xF5, - 0xDF, - 0x04, - 0x04, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x56, - 0x00, - 0xD0, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0x00, - 0xF5, - 0x04, - 0xF7, - 0x00, - 0xD9, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF3, - 0x00, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x54, - 0xF4, - 0x04, - 0xDD, - 0x00, - 0xF4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF5, - 0x00, - 0xD7, - 0x04, - 0xF7, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x5D, - 0x00, - 0x5C, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDC, - 0xF5, - 0x58, - 0x04, - 0x04, - 0xF3, - 0xF5, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x53, - 0xB8, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDD, - 0x00, - 0x00, - 0xD7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD8, - 0xF5, - 0x54, - 0xF3, - 0xE1, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD3, - 0xF7, - 0xB3, - 0x00, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD5, - 0xF4, - 0x54, - 0x57, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x00, - 0x53, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDB, - 0x00, - 0xF4, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xB8, - 0xF4, - 0x04, - 0x55, - 0xF7, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xF6, - 0x5D, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xEC, - 0xFF, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x00, - 0xF6, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0xD9, - 0x04, - 0xD8, - 0xDA, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x3B, - 0x3B, - 0x3B, - 0x00, - 0x00, +0x04, +0x27,0x0A,0x00,0x00,0x6F,0x73,0x00,0x00,0xB7,0xDC,0x00,0x00,0xCB,0x50,0x01, +0x00, +0x0B,0x04,0x00,0x00, +0x1A,0x00,0x00,0x00, +0x00, +0x00, +0x3A,0x69,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0xDF,0x56,0xF7,0x56,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0x00,0x00, +0x00,0x53,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF7,0x00,0x55,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF3, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0x04,0xDF,0xD6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x54,0xDF,0xDA,0x04,0xDD,0xF7,0x00,0x00,0xD8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD0,0xF6,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD7,0x53,0x00,0xD6,0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x00,0x00,0x04,0x57,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x56, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD0,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0xC6,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, +0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0xDC, +0x04,0x04,0x04,0x04,0xE1,0xF3,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0x53,0xD5,0x04,0x04,0x5A,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, +0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0xD0,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x53,0x00,0x58,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xDC, +0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD2,0x04, +0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, +0x17,0x04,0x04,0xDD,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF4, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x5B,0x04,0x04,0x04,0xDE,0xF3,0x00, +0x00,0xF3,0xDE,0x04,0x04,0x04,0x04,0x57,0x53,0x00,0x00,0x53,0x5E,0x04,0x04,0x04, +0x04,0xD5,0xB3,0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0xD8,0x04,0x04,0x04, +0x04,0x60,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xDE,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xDC,0x00,0xDF,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDA,0xFA,0xB3,0x00,0x54,0x00,0xF5,0xD7,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x04,0x04,0xDB,0x55,0x54,0x54,0x00,0xF6,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00,0x54, +0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00,0x54,0x54,0xF7,0xD9,0x04, +0x04,0x04,0x04,0x09,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E,0xB3, +0x00,0x00,0x53,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0xF4, +0x00,0x00,0x54,0x54,0x55,0xD7,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x5E,0x04,0x00,0x00,0x00,0x00, +0x54,0x00,0xB3,0x56,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0xF6,0x54,0x00,0x54, +0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x54,0x00,0x09,0xF6, +0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xF7, +0x53,0x00,0x54,0x00,0x54,0xF6,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDE,0xF3,0x00, +0x54,0x53,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00, +0xF7,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0xDC,0x55,0x54,0x00,0x54,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xB8, +0xB3,0x00,0x54,0x00,0x53,0xF7,0xDB,0xDA,0x56,0x54,0x54,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xD9,0x00,0x00,0xDB,0x04,0x04,0x04,0xD0,0xF3,0x00,0x54,0x53,0xB8, +0xD8,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, +0xF3,0x00,0x54,0x54,0xF7,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x54,0xB8,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF6,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0xF4,0x04,0x04,0xDA,0x53,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x58,0xB3,0x00,0x54,0x00,0xF6,0xDC,0x04,0x00,0xF6,0x04,0x00,0xF6,0xDA,0x57,0x53, +0x00,0x00,0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xB3,0x00,0x54,0x00, +0xF6,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0xF3,0x00,0x54,0x00,0xF6,0xDC, +0x04,0x00,0xF6,0x04,0x04,0x04,0xDA,0x56,0x53,0x00,0x00,0xC6,0x56,0xD8,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0xC6,0x00,0x00,0x53, +0x58,0xDA,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xF1,0x00,0x54,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xD8,0x56,0x53,0x00,0x54,0x54,0xF7,0xD9, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x56,0xC6,0x00,0x00,0x53,0xB8,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0x59,0xB3,0x00,0x54,0x00,0xF5,0xD2,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x57,0xC6,0x54,0x00,0x57,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0xDA,0xB8,0x54,0x00,0x00,0xB3,0xD2,0xF6,0x00,0x04,0x04, +0x04, +0x04,0x04,0xDD,0x00,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x55,0x54,0xB8,0x04,0x04,0x04,0x04,0x53,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xDF,0x04,0x04,0x04,0x04,0xD5,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x59, +0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF7,0x04,0x04,0x04, +0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0x00,0x00,0x00,0x59,0x04,0x04, +0x04,0x04,0x04,0x04,0xF5,0xC6,0x04,0x04,0xE1,0x00,0x00,0xF7,0xF7,0x00,0x00,0xD6, +0x04,0x04,0xF4,0x00,0x53,0xF7,0xF7,0x00,0x00,0xF7,0x04,0x04,0xDD,0x00,0x00,0xD6, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, +0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF6,0x00,0x54,0x55,0xB8,0xF6,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0xC6,0x00,0x00,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x04,0x04,0xF1,0x00, +0x00,0xF5,0xB8,0xF6,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x5A,0x00,0x00,0x55,0xB8,0xF3,0x00,0xC6,0xD9, +0x04,0x04,0x04,0x59,0x00,0x00,0x55,0xB8,0xF5,0x00,0x00,0xDB,0x04,0x04,0x04,0x5A, +0x54,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xC6,0xF7,0xF7,0x53,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0xDA,0x53,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x57,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, +0xF7,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x53,0x00,0x00,0xF4,0xF7,0xB8,0x55, +0x00,0x00,0x55,0xD4,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x53,0x54,0xDA,0x04,0x00,0x53,0x56,0x56,0xB8,0x55,0x53,0x00, +0x00,0xDB,0x04,0x04,0x04,0xD8,0xF5,0x00,0x00,0xF4,0xF7,0xB8,0x55,0x54,0x00,0x54, +0xD2,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0xF7,0xF4,0x00,0x00,0xB3,0xDB,0x04, +0x04,0x04,0x00,0x53,0x56,0x56,0x56,0x56,0x56,0x56,0xDF,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xB3,0x55,0xB8,0xF7, +0xF4,0x00,0x00,0xF3,0xDB,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xDE,0x00,0x00,0x55,0xB8,0xB3,0x54,0xF6, +0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0xF3,0x04,0x04,0x00,0xB3, +0x56,0x56,0x56,0x56,0x56,0x56,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9,0x00, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDB,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF3,0xF7, +0xB8,0x55,0x54,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x53,0x55,0xB8,0x55, +0x53,0x00,0x00,0x00,0x00,0xF3,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0xD6,0x04,0x04,0x04,0x5D,0x54,0x00,0x55,0xB8,0xF4,0x54,0xB3,0xD8,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x55,0xB8,0xF5, +0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xD3,0x04,0x04,0x04, +0x04,0x04,0xF4,0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xDB,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0xC6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xF7,0x56,0x56,0x56,0x56,0x56, +0x56,0x56,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0xD6,0x04,0x04,0x04,0xDF,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x53,0x00,0x54,0xF7,0xB8, +0xF6,0x00,0x00,0xEF,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0xB3,0xF7,0xF7,0xF3,0x00, +0x54,0xDC,0x04,0x04,0x04,0xD9,0xB3,0x00,0x53,0xF7,0xB8,0xF5,0x00,0x00,0x56,0x04, +0x04,0x04,0x04,0xD9,0xB3,0x00,0x54,0x55,0xB8,0xF6,0x00,0x00,0xD6,0x00,0xF6,0x04, +0x04,0xDB,0xC6,0x00,0xB3,0xF7,0xF7,0xF3,0x00,0x53,0xDB,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xDD,0x54,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0xF6,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x54,0x00,0xDD,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x04,0xDD,0x54,0x00,0xB3,0xF7,0xB8,0xF4,0x00,0x00,0xD2,0x04,0x04,0x00, +0x00,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x54,0xDD,0x04,0x04,0x04,0xD9,0xB3,0x00, +0x53,0xF7,0xB8,0xF6,0x00,0x00,0x5D,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x59,0x00,0xB3,0xB8,0xF3,0x00,0x57,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0xDA, +0xB3,0x00,0xB3,0xF7,0xF7,0x54,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x53,0x04, +0x04,0x04,0xD5,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD8,0x04, +0x04,0x04,0xF3,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xC6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x00,0xB8,0x56,0x56,0x56,0x56,0x56,0x56,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x54,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04, +0x04,0x04,0xDA,0x54,0x00,0xDF,0xDA,0xDD,0xF3,0x00,0xD6,0x04,0x04,0x04,0x04,0x04, +0xD0,0x00,0xE1,0x04,0x53,0x00,0xD9,0x04,0x04,0xD9,0x54,0x53,0x04,0x57,0x00,0xF7, +0x04,0x04,0x04,0xD8,0xF3,0x00,0x17,0xD3,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x04, +0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x57,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xF7,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF5,0xDA, +0x04,0x04,0x04,0xD5,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDB,0x54, +0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0xD2,0x04,0x04,0x04, +0xDD,0x00,0x54,0xDA,0x04,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x00,0xF3,0x17, +0x04,0x04,0xDE,0x00,0xF3,0xD8,0x04,0x04,0x04,0x17,0x00,0xF3,0x04,0x04,0xF2,0x00, +0x53,0xD9,0x04,0x04,0x04,0xD0,0x54,0xB3,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x60,0x00,0x55,0x04,0x04,0x04,0x04,0x55,0x00,0x5C,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x54,0xF7,0x04,0x04,0xD8, +0x55,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xF5,0x00,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xF6,0xD7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0xF1,0x00,0x00,0x00,0x00,0xD9,0x04,0x04,0xD8,0x00,0x00,0x00,0xD6, +0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, +0x00,0xB8,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x17,0x00,0x55,0x04,0x04, +0xD9,0x54,0x00,0xF6,0xD9,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDE,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0x00,0xDD,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0x53,0x00,0xF4,0xDC,0x04,0x04,0x04,0x04,0x04,0xD8,0xF7,0x00, +0x00,0xD5,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0xF3,0x00,0xD5,0x04,0x04,0x04,0xF5,0x54,0xDC,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0xDB,0x00,0x00,0xD9,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0xD9,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0x00,0xF6,0xDA,0x04,0xD4,0xF4,0x00,0xF5,0xDB,0x04,0x04,0x04,0x04,0x04,0xD6, +0x54,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0x00, +0xF3,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x58,0x00,0xF7,0x04,0x04,0x04, +0xD9,0x00,0x00,0xD5,0x04,0x04,0x04,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF4,0xDA,0x04,0x04,0x04,0xD2,0x00,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, +0xF4,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04, +0xD9,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x59,0x04,0x04,0x04,0x04,0xD8,0xF5,0x00, +0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xD8,0x04, +0xDA,0x53,0x00,0x5D,0x04,0x04,0x04,0x04,0xDB,0xB3,0x00,0x21,0x04,0x04,0xDA,0x53, +0x00,0x5A,0x04,0x04,0x04,0x04,0xD8,0xF4,0x00,0x00,0xF6,0xDA,0xDA,0xC6,0x00,0xD6, +0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0xD4,0x54,0x00,0xE1,0x04,0x04,0x04,0x04,0xD6,0x00,0x00,0x00,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF3,0x04,0x04,0x04,0xF3,0x00,0xE1,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD4,0x54, +0x00,0xE1,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xD9,0x04,0x00,0x00,0x00,0xE1,0x04, +0x04,0x04,0x04,0xD0,0x00,0x54,0xD8,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04, +0xD8,0xF5,0x00,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0x09,0xDA,0x04, +0x04, +0x54,0x54,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04, +0x04,0x04,0x04,0xF5,0x00,0x00,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x54,0xB3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xDB,0x04,0x04,0x57,0x00, +0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF6,0x04,0x04,0x59,0x54,0x58, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xB8,0x00,0x04,0x04,0xDA,0x55,0x00,0x04,0x04,0x04,0x04,0xFA,0x00, +0xFA,0x04,0x04,0x04,0xD8,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04, +0xD8,0x00,0x00,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF1,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0x5A,0x00,0x17,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD9,0xC6,0x00,0xE1,0x04, +0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0x60, +0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xF3,0x00, +0xD8,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04, +0x04,0x04,0xB8,0x00,0xD0,0x04,0x04,0x04,0xB8,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, +0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0xDA,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04, +0x58,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xEF,0xF3,0x00,0x00,0xF6,0xD3,0x04,0x04,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0xD3,0xF6,0x00,0x00,0xF3,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, +0x00,0x00,0x00,0x00,0x00,0xF4,0xDF,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDB,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0xF4,0x00,0x56,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x53,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xB3,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x54,0xDE,0x54,0xB8,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x00,0xF6,0x04, +0xDA,0x55,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xC6,0x00,0xD7, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0x00,0xF3,0xD8,0x04,0x04,0x04,0x04,0xDA,0xD0,0x00,0x00,0x00,0x54,0xB8,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0xD3,0x00,0x53,0xDA,0x04,0x04,0x04,0x5A,0x00,0x57,0x04, +0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0xF3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD0,0x04,0x04,0x04,0x04, +0x04,0x04,0xF3,0x54,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD6,0x00,0x00,0x00,0xF4,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x17,0x04,0x04,0x04,0x60,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x56,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00, +0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x54,0xB8,0x04,0x57,0x00,0x5A,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0xF6,0x55,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x53,0x00,0xF6,0x04,0x56,0x00,0xD6,0x04,0x04,0x04,0x04,0x04, +0x04,0x17,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x00,0x17,0x04, +0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00, +0x58,0xDA,0xF7,0x00,0x56,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xB8,0x00,0xDF,0x04,0x04,0x04, +0x04,0x04,0x04,0xE1,0x00,0xF7,0x04,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x54,0xB8,0x04,0x57,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00, +0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x16,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0xD8, +0x00,0x00,0x04,0x04,0x04,0x04,0x5C,0x00,0xDE,0xB8,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF4,0x54,0xDB,0x00,0x57,0x04,0x04,0xB3,0xB3,0xD7,0x00,0x5A,0x04, +0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD6,0xDB,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x56,0x00,0xDF,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF2, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xFB,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0xF7, +0x54,0x59,0x17,0x17,0x55,0x00,0xFA,0x17,0x17,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04, +0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xDC,0x54,0x54,0xDA,0x04, +0x04,0xDA,0x54,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, +0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xEF,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04, +0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF7,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD9,0x53,0x00,0xEF,0x04,0x04,0x04,0x04, +0x04,0x56,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0xB3,0x00,0xD0, +0xDD,0xDD,0xDD,0xDD,0xDD,0x00,0xF5,0xDD,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0xDC,0x54,0xB8,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x54, +0xB8,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0xD9,0xD6,0xD0,0x00,0x54,0xD8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0x54,0x00, +0x00,0xF7,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x54,0x54,0x5B,0xD4,0x04,0x04,0x04, +0x04,0x04,0x04,0xF6,0x5D,0x04,0x04,0x04,0x04,0xDA,0x58,0x00,0x00,0x00,0x00,0xDE, +0xDA,0xF7,0x00,0x00,0x04,0xDF,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD0,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDC,0x5D,0xDD,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x5E,0x00,0x5E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xDA,0x04,0x04,0x04, +0x04,0x04,0xD8,0x00,0x55,0x04,0x00,0xB3,0x04,0x04,0x04,0xF7,0x00,0x56,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x50,0x00,0x58,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x53,0xDA,0x00,0xF6,0x04,0xD7,0x00,0xF4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xB3,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0xD8,0x04,0x04, +0x04,0x04,0xD9,0x55,0x00,0x00,0xD2,0xD8,0xC6,0x00,0xD3,0x04,0x00,0xF6,0x04,0x04, +0xD4,0x54,0x00,0xD5,0x04,0x04,0x04,0x04,0xDF,0xF6,0xDD,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xB3,0x04, +0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0xDD,0x54,0xB8, +0x04,0xF7,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD8,0xF6, +0x00,0x04,0x04,0x04,0x04,0xB8,0x00,0xDB,0x55,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0x54,0x00,0xD9,0x04,0xD9,0x00,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x54,0xB3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x56,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x58,0x00,0x60,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x5E,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0xF6,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xD5, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF7,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x54,0x54,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04, +0x53, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04, +0x04,0x04,0xB3,0x53,0x04,0xDB,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF7,0x04,0xB3,0xF3,0x04,0xD9,0x00,0x57,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0x54,0x00,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53, +0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x54,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, +0x04,0x04,0x04,0xD7,0xD9,0x04,0x04,0x04,0x04,0xDA,0xE1,0xD7,0x04,0x04,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xD9,0xDD,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x00,0xB3,0x5A,0x59,0x53,0x00,0x17, +0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0xF3,0x00, +0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xD8,0x53,0x00,0x17,0x04,0x04,0x04,0x04,0xDC,0xDF,0xDA, +0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0xDC,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0xD8,0xDF,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00, +0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04, +0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF5,0x00,0x04,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0x56,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04, +0x04,0x04,0x04,0x04,0xD8,0xB8,0x54,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xC6, +0xE0,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDB,0x00,0xF5,0x04,0x04,0x04,0xF4,0x00, +0xDA,0x04,0xD0,0x00,0xF7,0x04,0x04,0x04,0x04,0x56,0x00,0x5B,0x17,0x17,0x17,0x17, +0x17,0x17,0x55,0x00,0xDE,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xB3,0x00,0x04,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD5,0x04,0x04,0x04,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x5E,0x00,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0x00,0xF7,0x04,0xDF,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF3,0x00,0xD8, +0x04,0x5B,0x54,0x17,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0xF4,0x54,0xD7,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF7,0x5C,0x5E,0x56,0xF5,0x00,0x00, +0xF6,0xD9,0x04,0x04,0xDE,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x55,0x00,0x5E,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0xF7,0x00,0xDB,0x04,0xDD,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB3,0x04,0x5C,0x54,0xDE,0x04,0x04, +0x04,0xB3,0x54,0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00, +0xF6,0xDA,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00, +0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x58,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04, +0x00,0xB3,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00, +0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x56,0x00,0x00,0xFA,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xD7,0x00,0x58, +0x04,0x04,0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0xC6,0xDD,0x04,0x57,0x00, +0xD9,0x59,0x00,0xDB,0x04,0x57,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xB8,0x04,0xD7,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xF1,0xF4, +0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x55,0x00,0xF7,0xDC,0x04,0xB3, +0xF6,0x04,0x04,0x04,0x5D,0x54,0x00,0x00,0xF7,0xDA,0x04,0x04,0x87,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0xDD,0xDD,0x00,0x55,0xDD,0xDD,0xDC,0x00,0xF7,0xDC, +0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xC6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0xD9,0xDF,0x54,0x00,0x00,0x54,0x50,0x04,0x04,0x55,0x00,0xFA, +0xDA,0x04,0x04,0x5E,0x00,0x54,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0xD8,0xB3,0xC6,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x50,0x00,0x57,0x04,0x04,0xB8,0x54,0xFA,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x00,0xF4, +0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8, +0x04,0x04,0x04,0x04,0xC6,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x53,0x04,0x04, +0xF4,0x00,0xF6,0xDE,0xF1,0x5C,0x54,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x57,0x04,0x04, +0x04,0x04,0x00,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0xDF,0x04,0x04,0xF6, +0x00,0xD9,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x00, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, +0x00,0x57,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xDC,0x00,0x55,0x04,0x04,0xDA,0x00,0xF3, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x5D,0x00,0xB8,0x04, +0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF2,0x00,0x56,0x04,0x00,0xF3,0x17,0x17,0x17,0x50,0xD0,0xD9,0x04,0x04, +0x04,0x04,0x53,0x00,0xB3,0x00,0x00,0x00,0x00,0x54,0x55,0xD7,0x04,0x04,0x04,0x04, +0x04,0x54,0x54,0x04,0x00,0xF6,0xDA,0xDF,0x00,0x54,0x00,0xF3,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0xD4,0x00,0xF3,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD5,0x00,0xB8,0x04,0xDB,0x00,0xB8,0x04,0x04,0xD8,0x00,0x55,0x04, +0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x55,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0xD2,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF2,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0x00,0xF6,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF6,0xDC,0x00,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00, +0xF3,0xD0,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x55,0x00,0xD8,0x04,0x04,0xD0,0x00, +0x58,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xD5,0x00,0x00,0x00,0x53,0x04, +0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDB,0x04,0x04,0xB3,0x00,0xD4,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0x04,0x04,0x04,0xF7,0x00,0x5D,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0xD4,0x00,0x00,0xF7,0x04,0xD6,0x00,0xF7,0x58,0x54, +0x00,0x00,0xB3,0x00,0x00,0xFA,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD0,0x53,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, +0xB8,0x04,0x04,0xD8,0xD9,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0x55,0xD8,0x59,0x00, +0xC6,0xD9,0x04,0xF3,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xF5,0x00,0xDD,0xDD,0xDD,0xDD,0xDD,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0xB3,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xD9, +0x04,0x04,0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x04,0xF5,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0x58,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDA,0x04,0x04,0x04, +0x59,0x00,0x56,0x04,0x04,0x04,0x04,0x57,0x54,0xB8,0x04,0x5D,0x00,0xF7,0x04,0x04, +0x04,0x04,0xD9,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B, +0x54,0x00,0x00,0x55,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x00,0x00, +0x53,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xC6,0x5E,0x04,0x04,0x04,0x00,0xF5, +0x04,0x54,0xB3,0x04,0x04,0x04,0x04,0xB3,0xF6,0x04,0x04,0xDE,0x00,0x59,0x04,0x04, +0x04,0x04,0xF6,0x00,0xD3,0xDD,0xDD,0xDD,0xDD,0x5C,0x00,0x5A,0x04,0x04,0x04,0x04, +0x00,0xF3,0x17,0x60,0x5D,0x57,0xF6,0x00,0x53,0xD9,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF3,0x17,0x17,0x17,0x17, +0x17,0x17,0xD5,0x04,0x00,0xF3,0x17,0x17,0x17,0x17,0x17,0xE1,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xD5,0x04, +0x00,0xF3,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xF2, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0xF7,0x00,0xF1,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0x00,0x53,0xDA,0x04,0x04,0x00,0xF6,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, +0x55,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0x04,0x04,0x00,0xF5, +0x04,0x04,0xDB,0xDB,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x00,0xF6,0x04,0xD2,0xEF,0x5D,0xF7,0x00,0xC6,0x56,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x57,0x53,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xFA,0x00,0xDF,0x04,0x04,0x04,0x5E,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x58, +0x00,0xF2,0x04,0x04,0x54,0xB3,0x04,0x04,0xDF,0x00,0xDF,0x04,0x04,0xF3,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x54,0xD8,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xE1,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD9,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF6,0x04,0x00, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD6,0x00,0xF6,0x04,0x53,0x00,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, +0xDD,0xDD,0x00,0xC6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB3,0xC6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0x04,0xDB,0x00,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x5E,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0xD8,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x00, +0xF4, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00, +0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xDF,0x00,0xB3,0xD7,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0x04,0xE0,0x53,0x04,0x04,0x04, +0x04,0xD7,0x00,0x58,0x04,0x04,0x04,0x53,0x00,0x00,0x56,0x04,0x04,0x04,0xF4,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0xF4,0x04,0x04,0x04,0x60,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0xC6,0x54,0xD8,0x04,0x04,0x04,0xD2,0xF3,0x00,0xF2,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x55,0x00,0x55,0xD3,0x04,0x04,0x58,0x00,0x00,0xC6,0x56,0xD9,0x04,0xD8, +0xB3,0xF5,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x55,0x54,0x04,0x04,0x04,0xF4,0xB3,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0x54,0x00, +0x00,0xF7,0x04,0x04,0x04,0x04,0xDB,0xDF,0xD0,0xDA,0x04,0xF6,0x00,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0xD7, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xE1,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, +0xDA,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x53,0x00,0xDD, +0x04,0x04,0x04,0x04,0x04,0xD3,0xFA,0xF7,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0xD2, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04, +0x04,0xD2,0x00,0xC6,0x04,0x04,0xD2,0x00,0xF4,0xDA,0x04,0x04,0x04,0xDD,0x00,0x54, +0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0x00,0x5D,0x04,0x04,0x04,0x04,0xF6,0x00,0xF4, +0x5A,0x5B,0xF5,0x00,0xF5,0xDA,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x5C, +0x00,0xD0,0x04,0x54,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0xF3,0x00, +0x00,0xF5,0xD2,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00,0x00,0xF3,0xEF,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0x5D,0x04,0x04,0x00,0xF5,0x04,0xF5,0x00,0xD9, +0x04,0x04,0x04,0xB8,0x00,0xDA,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0xD7,0x00, +0x58,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xDD,0x00,0x00,0xD8,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDA, +0x00,0xF4,0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0xF4,0x54,0xD7,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0x00,0xF5, +0xDD,0xDD,0xDD,0xD3,0xDF,0xF6,0x54,0x54,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xD8,0xB3,0x00,0xDD,0x04,0x04,0x04,0xDE,0xF3,0x54,0x00,0x54,0x57, +0xDA,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, +0x04,0x04,0xDA,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04, +0xF7,0x00,0xD8,0x04,0x55,0x54,0xD8,0x04,0x04,0x56,0x00,0xDC,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF4,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0xF6,0x00,0xDB,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0xE1,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD5, +0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00, +0xD9,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5C, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00,0x00,0x60,0x04,0x04, +0x04,0x04,0x04,0x04,0xEF,0x54,0xB8,0x04,0x56,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0xF3,0xF5,0x04,0x04,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x53,0x00,0xF6,0x04,0xB8,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF7, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0xEF,0x00,0x00,0x04,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0x60, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x55,0x00, +0xFA,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0xE1, +0x00, +0x54,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x00,0x00,0xDA,0x04,0x04, +0x04,0x04,0xD4,0x00,0x53,0x04,0xB8,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, +0x54,0xB8,0x04,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x54,0xB8,0x04, +0x56,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00,0x54, +0x04,0x04,0x04,0xDA,0x55,0x00,0xD9,0x04,0x04,0xDB,0xD9,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04, +0x58,0x00,0xD2,0x04,0x04,0x04,0x04,0x57,0x00,0xDE,0x04,0x04,0x04,0xF7,0x00,0xD8, +0x04,0x04,0x04,0xB8,0x00,0x00,0xDD,0x04,0x04,0x04,0xDF,0x54,0xE1,0x04,0x04,0x04, +0x04,0x57,0x00,0x5C,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xDF,0x04, +0x04,0x04,0x04,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x55,0x04, +0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, +0x04,0x04,0x04,0x04,0x04,0xD8,0xD9,0x04,0x04,0x04,0x04,0x04,0xD8,0xDA,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xD0,0x55,0x00,0xD0,0xD0, +0xD0,0xF5,0x00,0xD0,0xD0,0x04,0x04,0xDB,0x54,0x00,0x00,0x55,0xDC,0x04,0x04,0x04, +0x04,0x55,0x00,0x00,0x00,0x00,0xE1,0xD2,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xF6,0xD8,0x04,0x04,0xF6,0x00,0xDC,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xDF,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD6,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0x00,0x53,0x57,0x5D,0x55,0x54,0x00,0xDC, +0x04,0x04,0x04,0xF6,0x00,0xC6,0x57,0xFA,0xF7,0x00,0x00,0xD2,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB8,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00,0x00,0xF3, +0xE1,0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0x04,0x04, +0xE1,0xF3,0x00,0x00,0xF5,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0x53,0x00,0xDB,0x04,0x54,0x53,0x04,0xD6,0x00,0xF7,0x04,0x04,0x04,0xDF, +0x00,0x17,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04, +0xD5,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0xDD,0xDD,0xD7,0x60,0xB3,0x00, +0xDF,0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, +0x00,0x04,0x00,0xF5,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xD8,0x04,0x00,0xF5,0xDD,0xDD, +0xDD,0xDD,0xDD,0xDB,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, +0xDD,0xDD,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x0A,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x57,0x00,0xD6,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x5D,0x00, +0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xB8,0x54,0x60,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xDE,0x00,0x56,0x04,0x04,0xE1,0x00,0x00,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF1,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xD5,0x04,0x04,0x04,0x04,0xDA,0x00,0xF5,0x04,0x04,0x04,0x0A,0x00,0xD6,0x04, +0x54,0xB3,0x04,0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60, +0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04, +0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xDA, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD0,0x00,0x56,0x04,0x04,0x04, +0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x5C,0x04,0x04,0x04, +0x04,0xD8,0xF5,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0xD0, +0x00,0x54,0xD8,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04,0xD9,0xB3,0x00,0x5E, +0x04,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04,0xD9,0xF3,0x00,0x00,0xF6,0x04, +0xD8,0x54,0x00,0xD7,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xD9,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0xD8,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xE1,0x54,0x00,0x00, +0x04,0x00,0x00,0xF5,0xD4,0x04,0x04,0x04,0xD5,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDA,0xC6,0x00,0xDC,0x04,0x04, +0x04, +0x00,0xF6,0x04,0x00,0x00,0x56,0x04,0x04,0x04,0xD8,0x53,0x00,0x00,0x57,0x04, +0x04,0x04,0xDA,0xB3,0x00,0xDD,0x04,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x55,0x00, +0xB8,0x04,0xD8,0x54,0x00,0xD0,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD8,0x04,0x00, +0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xD8,0x04,0xDA,0x54,0x00,0x60, +0x04,0x04,0x04,0x04,0xD8,0xF5,0x54,0x00,0xF6,0x04,0x00,0x00,0x58,0x04,0x04,0x04, +0xF7,0x00,0xDC,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xC6,0x53,0x04,0x04, +0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xDC, +0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDC,0x00,0xF4,0x04, +0x04,0x56,0x00,0x5E,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x04,0x04,0x04,0x04,0xB8, +0x54,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD0,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0xF6,0x00,0x56,0xDA,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xF6,0xD7, +0xD6,0x54,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1, +0x00,0xF3,0xDB,0xF7,0x00,0x54,0xD8,0x04,0xD9,0x17,0xDC,0x04,0x04,0x04,0x04,0x04, +0xDE,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x53,0x04,0x04,0x04, +0xF7,0xDC,0xDB,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x5A,0xDE, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0xD9,0xDC,0x5E, +0x54,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD8,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x00,0x54,0xB3,0x00,0x00,0x00,0xF5,0xD5,0x04,0x04,0x04,0x04,0xD9, +0x00,0x00,0x00,0x00,0x00,0xF3,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58, +0x00,0xDE,0x04,0x04,0x04,0x58,0x00,0xF6,0xDE,0xD7,0xF6,0x00,0x57,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04, +0x54,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x00,0x00,0x53,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF1,0xD9,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0x56,0x04,0x55,0x00,0xD5,0x04,0xF3,0x00,0xDE,0x04,0x04,0x5C,0x00,0xF5,0x04,0xDE, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0xD6,0x04,0x04,0xF7,0x00,0xD5,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xDA,0x54,0x53,0x04,0x04,0xF5, +0x54,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF4,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0xB8,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0xE0,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0x00,0x57,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xDB,0x00,0x53,0xDA,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0xD3,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF7,0xDA,0xF3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0xF5,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA, +0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x55,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04, +0x04,0x04,0xD0,0x00,0x5B,0x04,0x04,0x04,0xD8,0x00,0xF7,0xDB,0x00,0xB8,0x04,0x04, +0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0xD9,0x00,0x00, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDB,0x04,0x04,0x56,0x00,0xE1, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xF7,0x04,0x04,0x04,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0xDA,0x00,0xB3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6,0x00,0x00,0xDF, +0x00,0xF6,0xDA,0x00,0x00,0x00,0x09,0xF3,0xF7,0xF7,0xF3,0x54,0x54,0xDD,0x04,0x04, +0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0xD9, +0xB3,0x54,0x53,0xF7,0xB8,0xF6,0x00,0x00,0x59,0x00,0xF6,0xDA,0x04,0xDD,0x54,0x54, +0xF4,0xF7,0xF7,0xF3,0x54,0x54,0xD7,0x04,0x04,0x56,0x56,0x00,0x53,0x56,0x56,0x04, +0x04,0xF1,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0xF5,0xF6,0x00,0x04,0x00,0x00,0x00, +0x54,0xF7,0xB8,0xF6,0x00,0x00,0xEF,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0xDC,0x00,0xC6,0xD4,0x04,0x04,0x00,0xF6,0xDA, +0x00,0x00,0x00,0xF3,0xF7,0x55,0x00,0x00,0xD6,0xF6,0x00,0xF3,0xB8,0xF7,0x54,0x00, +0x56,0x04,0x04,0x00,0x00,0x00,0x53,0xF7,0xF7,0x53,0x54,0xB3,0xD8,0x04,0x04,0xDD, +0x54,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x00,0xD3,0x04,0x04,0x00,0x00,0x00,0x09,0xF4, +0xF7,0xF7,0xB3,0x54,0x54,0xDD,0x04,0x04,0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6, +0x00,0x00,0x5C,0x00,0xF6,0xDA,0x00,0x00,0x09,0xF4,0x58,0x04,0xD3,0x00,0x54,0xB8, +0xB3,0x00,0xD0,0x04,0x56,0x56,0x53,0x00,0x56,0x56,0x56,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDE,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x55,0x00,0xD9,0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xB8,0x50,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0xB3,0x00, +0xDB,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04, +0x56,0x56,0x56,0x56,0x56,0xB8,0x54,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, +0xF6,0x04,0xD8,0xD8,0xD9,0x00,0x58,0xD8,0xD8,0xD7,0x00,0x60,0xD8,0x04,0x04,0x00, +0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x53,0x04,0x04,0x04,0xDE,0x00,0x00, +0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0xD8,0x04,0x04, +0x5B,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x04,0xDA,0xF6,0x00,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x54,0xB8,0x04, +0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4, +0x54,0x04,0xD8,0xDB,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDB, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF4,0x04,0x04, +0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0x00,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x56,0xD8,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0xF1,0x00, +0xF5,0x04,0xDB,0x54,0x54,0xB8,0x5A,0x00,0x53,0x00,0xD8,0xF6,0x00,0xD7,0x04,0x04, +0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xE1,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xDF,0xDB,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF7,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4, +0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xE1,0x09,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0xF4,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x5E,0x00, +0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0xE1,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x04,0x00,0xF5,0x04, +0x04,0x04,0x04,0x04,0xDE,0xDD,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0x00, +0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0xF7,0x00, +0xDB,0x04,0x04,0x04,0x04,0xB3,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xF6,0x00, +0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD6,0x04,0xD6,0x00,0x55,0x04,0x04,0x04, +0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0x04,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDC,0x04,0x04,0x54,0x53,0x04,0x04,0x04, +0x04,0x04,0x5D,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0x54,0xB8,0x04, +0x04,0x04,0x04,0x59,0x00,0xDF,0x04,0xFA,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x58,0xB3,0x00,0x00,0x00,0xF6,0xDD,0x04,0x00,0xF6,0x04,0x00, +0xF6,0x04,0x57,0x53,0x00,0x00,0xC6,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0xDA,0x58, +0xB3,0x00,0x00,0x00,0xF6,0xF1,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0xB3,0x00, +0x00,0x00,0xF6,0xD7,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x00,0xC6, +0xB8,0xD8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD8,0xF7, +0x54,0x00,0x00,0xB3,0x5C,0x04,0xF6,0x00,0x04,0x00,0xF6,0xD7,0xF5,0x00,0x00,0x00, +0xF5, +0xD3,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xE1,0xB3, +0x00,0x00,0xF3,0xDE,0x04,0x04,0x57,0x54,0x00,0x00,0xB3,0x17,0x04,0x04,0x04,0x00, +0xF6,0xDD,0xF5,0x00,0x00,0x53,0xB8,0xDA,0x04,0x04,0x04,0x04,0xD8,0x56,0x53,0x00, +0x00,0x54,0xF7,0xD8,0x04,0x04,0x04,0x00,0xF6,0x04,0x57,0x53,0x00,0x00,0xC6,0xB8, +0xD8,0x04,0x04,0x04,0x04,0x04,0xDA,0x59,0xB3,0x00,0x00,0x00,0xF5,0xD2,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x57,0x00,0x00,0x04,0x04,0xD6,0xC6,0x00,0x54,0x5C,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0xF6,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x56,0x04, +0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3, +0x00,0x59,0x04,0xB8,0x00,0x17,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3,0x04,0x04,0xF6, +0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD9,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04, +0x04,0x54,0x55,0x04,0x04,0x04,0x00,0x56,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x16,0xF7,0x04,0x00,0xF5,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x00,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD7,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0xDE,0x00,0xF4,0x04,0x04,0x04,0x17,0x59,0x00,0x09,0x57,0x17,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, +0x00,0xDF,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x59,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54, +0x04,0x04,0x5E,0x00,0xD3,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0x00,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDD,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD5,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xB3,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0xF7,0x00,0x58,0x04,0xDB, +0xF4,0x00,0x00,0xF3,0xD8,0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xB8,0x00,0xDC,0x5A,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0xF4,0x00,0x58,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDB,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xE1,0x00,0x53,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x54,0x00,0xDD,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD6,0x00,0xF6,0x04,0x00,0xF6, +0x5C,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF7,0x54,0x56, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xF1,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF7,0x04,0x04,0xB3,0x00,0x59,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF5,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x17,0x00,0x5A,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0xDB, +0x00,0xF7,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x5B,0x00,0x60,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x5D,0x00,0xFA,0x04,0x04,0x04,0x53,0xC6,0x04,0x04,0x04,0x04, +0x04,0xB8,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x0A,0x04,0x04,0x04, +0x04,0xD6,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xF5, +0x00,0xDB,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD3,0x00,0xF3,0x04,0x04,0x55,0x00,0xD7,0x04,0x04,0x04,0x04,0xB3,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0xDA, +0x00,0xF3,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD8,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0xF3,0x04, +0x04,0x04,0x53,0xF5,0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x53,0x54,0x04, +0x53,0x00,0xD9,0x04,0x04,0x5B,0x00,0x5A,0x04,0x56,0x00,0xD3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x54,0x54,0xDA,0x04,0x04,0xDF,0x00,0x57,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x58,0x09,0xF5,0xDA,0x04,0x04,0xE1,0x00,0x54,0xD9, +0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04, +0x60,0x00,0xF6,0xD4,0x04,0x04,0x04,0xDC,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x5A,0x54,0xF7,0x04,0x04,0x04,0x04,0xF7,0x00,0x57,0x04,0x04,0xD7,0x00, +0xF7,0x04,0x04,0x04,0x5C,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, +0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x17,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x53,0x00,0xD8,0x04,0x04,0xD8,0x00, +0x53,0x04,0x04,0xD3,0x00,0xB3,0xD8,0x04,0x04,0x04,0x50,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x59,0x04,0x04, +0x04,0xD8,0xB3,0x00,0xDD,0x04,0x04,0x04,0xF4,0x00,0x55,0xD8,0x04,0xD8,0xD9,0x04, +0xDA,0xB8,0x54,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD5,0x00, +0xF3,0x04,0x04,0x04,0xD9,0x54,0x00,0x55,0xD8,0x04,0x04,0x04,0x04,0x04,0xD6,0x00, +0x00,0xDE,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0x00,0x00,0xD5, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF4,0xDD,0x04,0x04,0x04,0x04, +0x04,0xDB,0xF6,0x00,0xF3,0xDA,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDC,0x00,0x54,0xD8,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x53,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF5,0x54,0xF6,0xDB,0x04,0x04, +0x04,0x04,0x04,0x50,0x00,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0xD8,0xF3,0x00,0xE1,0x04,0x04,0xD9,0x54,0x00,0xF6,0xDB,0x04,0x04,0x04,0x04, +0x04,0xDB,0xF6,0x00,0x53,0xD8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD7, +0x00,0x00,0xD8,0x04,0x04,0xF4,0x00,0xD2,0x04,0x04,0x04,0xF7,0x00,0xD6,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x00,0xB3,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0xD8,0x00,0x00,0xD8, +0x04,0x04,0x04,0xD8,0x00,0x54,0xD8,0x04,0x04,0x04,0xD2,0x00,0x55,0x04,0x04,0x04, +0x04,0x04,0xDA,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x5D,0x04,0xD5,0x00,0x54,0xD5,0x04,0x04,0xD7,0x00,0x17,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0xF6,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x5E,0x00, +0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDE,0xF3,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0x54, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF7,0x04, +0x04,0x04,0x04,0x54,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6, +0xDA,0x00,0x00,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0xF6,0xC6, +0x04,0x04,0x04,0x56,0x00,0xF7,0xD9,0xD8,0xF7,0x00,0x58,0x04,0xD6,0x00,0x54,0xF7, +0xF6,0x00,0x53,0xDA,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, +0x00,0xC6,0xB8,0xF6,0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x57,0x09,0x54,0x04,0x5C,0x54,0xB3,0xD9,0x04,0x04,0x04,0x04,0xDC, +0xD6,0x00,0x00,0xDF,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0xF6,0x00,0xC6, +0xF7,0xB8,0xF5,0x00,0x00,0xD6,0x04,0x04,0x17,0x56,0x56,0x00,0xF6,0xDA,0x04,0xF5, +0x54,0x53,0xF7,0xF7,0x53,0x00,0xF4,0x04,0x04,0x04,0x04,0xF4,0x00,0xF4,0xB8,0xF6, +0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xF6,0xDA, +0x04,0x04,0x04,0xDD,0x00,0xF5,0x56,0x56,0x56,0x56,0x56,0xD5,0x04,0x04,0x04,0x04, +0x04,0x04,0x17,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x56,0x56,0x56,0x56,0x56,0x56, +0x56,0x00,0x00,0x04,0x04,0xD6,0x00,0x54,0xF7,0xF7,0x00,0x00,0xD6,0x04,0x04,0x04, +0x5A,0x00,0x00,0x55,0xB8,0xF3,0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0xF3,0xB8,0xF7,0x00,0x54,0x59, +0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF4,0xF7,0xB8,0xF6,0x00,0x00,0xF3,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x00,0x58,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xF7,0xF5,0x00,0x00,0xD2,0x04,0x04,0x04, +0x04,0xD9,0xF4,0x00,0x00,0xF4,0xF7,0xB8,0x55,0x54,0x53,0x54,0xDE,0x04,0x04,0x04, +0x00,0x53,0x56,0x56,0xB8,0x55,0xF3,0x00,0x00,0xF3,0xDB,0x04,0x04,0x04,0x00,0x53, +0x56,0x56,0x56,0x56,0x56,0x56,0xDF,0x04,0x00,0x53,0x56,0x56,0x56,0x56,0x56,0x56, +0x04,0x04,0x04,0x04,0xD8,0xF5,0x00,0x00,0xB3,0x55,0xB8,0xF7,0xF3,0x00,0x00,0xF7, +0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x50,0x00,0xF4,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x00,0xF6,0xDA,0x00,0x00,0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x00,0xF3,0xF7,0xB8,0x55,0x54,0x54, +0x54,0xD0,0x04,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0xF7,0xF5,0x00,0x00,0xF6, +0x04,0x04,0x04,0x04,0xD9,0xF5,0x00,0x00,0xF3,0x55,0xB8,0xF7,0xF3,0x00,0x00,0xF6, +0xD8,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0x55,0xB3,0x00,0x00,0xD0,0x04,0x04, +0x04,0xDD,0x00,0x54,0xF6,0xB8,0xB3,0x54,0xF4,0x04,0x04,0x56,0x56,0x56,0x53,0x00, +0x56,0x56,0x56,0x56,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0xD7,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xF1, +0x04,0x5B,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x58,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x55,0x00,0x50,0x04,0x04,0x04,0x04,0x04, +0x17,0x00,0xF7,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x58, +0x00,0x60,0x04,0x04,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xB8,0x54,0x00,0x04,0x04, +0xDF,0x00,0x00,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0xF4,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, +0xF4,0x00,0x54,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x53,0xF7,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF7,0xD5, +0x04,0x00,0xF6,0xDA,0xD0,0xF3,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, +0xF6,0x04,0x04,0x04,0x04,0xDF,0x00,0xD9,0x04,0x04,0x56,0x00,0xDA,0x04,0x04,0x04, +0x55,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0xD0,0xB3,0x00,0x00,0xF6,0xD8,0x04, +0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0x00, +0xF6,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0xD3,0xF5,0x04,0x5A,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF2,0x00,0x50,0x04,0x04,0x04,0xFA,0xB3,0x00,0x00,0x00,0xF6, +0xDC,0x04,0x04,0x04,0xF4,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x5A,0xB3,0x00,0x00, +0x53,0x58,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x55,0xD9,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5, +0x00,0xDC,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0x04,0x04,0xD0,0xF3,0x00,0x00,0xB3,0xE1,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00, +0x00,0x54,0xF7,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0xF3,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDC,0x55,0xC6,0x00,0x00,0x00,0xF5,0xEF,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x54,0xF6,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0xF6,0x54,0x00,0x00,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x53,0x55,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x04, +0x04,0x04,0xD0,0xF5,0x00,0x00,0x00,0x00,0xB3,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x54,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x00, +0xF6,0x04,0x00,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0xD5,0xF7,0x53,0x00,0x00,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF4,0x5E,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDE,0xF6,0x54,0x00,0x00,0x00,0x54,0x55,0xD7,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0xD5,0xF5, +0x00,0x00,0x53,0xB8,0xDA,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF1,0x00,0x55,0x04,0xF5,0x00,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xD5,0x04,0xDE,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD2, +0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x54,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD3,0xF5,0x04, +0xD8,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xD6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x59,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xC6,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x54,0x00,0xD6,0x04,0x00,0xF6,0x04, +0xF7,0x00,0xF4,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF4, +0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xD5,0xD9,0x57,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xEC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x00,0x00, +0x0B,0x04,0x00,0x00, +0x1A,0x00,0x00,0x00, +0x00, +0x00, +0x3A,0x69,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5, +0x59,0xF7,0xF7,0xB8,0xF9,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x54,0x00,0x00,0x00, +0x00,0x53,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF7,0x00,0x55,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF3, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x04,0x59,0x5B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xB8,0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD7,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58, +0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x54,0x59,0xDB,0x04,0xE1,0x55,0x00,0x00,0xD3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF9,0xF5,0x53,0xB3,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x0D,0x53,0x54,0x5B,0x04,0x04,0x04,0x04,0xF7,0x00,0xF5,0xD9,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5E,0x00,0x00,0x04,0xB8,0x54,0xF4,0xDC,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF9,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD7,0x00,0xC6,0xDC,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, +0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF5,0xE1, +0x04,0x04,0x04,0x04,0x5D,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00, +0x53,0xD0,0x04,0x04,0x56,0x00,0x53,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x5D,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xF9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x54,0xB8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD6, +0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x17,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF3,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, +0x58,0x04,0x04,0xE1,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF3, +0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0x04,0x60,0xF3,0x00, +0x00,0xF3,0x60,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x00,0xB3,0x57,0x04,0x04,0x04, +0x04,0xD0,0xB3,0xD6,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0xDC,0x04,0x04,0x04, +0x04,0x58,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x16,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD6,0x53,0x59,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xB3,0x00,0x00,0x00,0xF4,0xDF,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x04,0x04,0xDE,0xF6,0x00,0x00,0x00,0xF6,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x60,0xF3,0x00,0x00, +0x54,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0x60,0xF4,0x00,0x00,0x54,0x55,0xD7,0x04, +0x04,0x04,0x04,0xC6,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xB3, +0x00,0x00,0x53,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5D,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0xD8,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x58,0xF3, +0x00,0x00,0x00,0x00,0xF6,0x0D,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDE,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x09,0x57,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0xB3,0xF7,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0xF6,0x54,0x00,0x00, +0x00,0xF3,0x56,0xD9,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xF6, +0x5C,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x55, +0x53,0x00,0x00,0x00,0x54,0xF5,0x5D,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x60,0xF3,0x00, +0x00,0x54,0xF7,0xD8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, +0xF7,0x04,0x00,0x00,0x53,0x53,0x53,0x53,0x53,0x00,0xD0,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0xE1,0x55,0x54,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0xF7, +0xB3,0x00,0x00,0x00,0x53,0xF7,0xDE,0xDB,0xF7,0x54,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xD7,0x00,0x00,0xDE,0x04,0x04,0x04,0x5E,0xF3,0x00,0x00,0x54,0xF7, +0xD5,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x59, +0xF3,0x00,0x00,0x54,0x55,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF6,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0xDB,0x53,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0x56,0xB3,0x00,0x00,0x00,0xF5,0xD6,0x04,0x00,0xF6,0x04,0x00,0xF6,0xD9,0xB8,0x53, +0x00,0x00,0x54,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0xB3,0x00,0x00,0x54, +0xF5,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xF3,0x00,0x00,0x00,0xF5,0xD6, +0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0xB8,0x53,0x00,0x00,0xC6,0xF7,0xD5,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0xC6,0x00,0x00,0x53, +0xB8,0x04,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xD6,0x00,0x54,0xDD,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xD5,0xF7,0x53,0x00,0x00,0x54,0x55,0xD2, +0x04,0x04,0x04,0x00,0xF6,0xD9,0xB8,0xC6,0x00,0x00,0x53,0xF7,0xDC,0x04,0x04,0x04, +0x04,0x04,0xD8,0x56,0xB3,0x00,0x00,0x54,0xF5,0xDF,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x54,0xB8,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x54,0x00,0x00,0xB3,0x17,0xF6,0x00,0x04,0x04, +0x04, +0x04,0x04,0xE1,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0xF7,0x04,0x04,0x04,0x04,0x53,0x54,0xF9,0x04,0x04,0x04,0x04,0x04,0xF7, +0x00,0x59,0x04,0x04,0x04,0x04,0xD0,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x04,0x04, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD0,0xB3,0x00,0x00,0x54,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0x04,0xF4,0xC6,0x04,0x04,0x5D,0x00,0x00,0x55,0x55,0x00,0x00,0x5B, +0x04,0xD8,0xF3,0x00,0x53,0xF7,0x55,0x00,0x00,0x55,0x04,0x04,0xE1,0x00,0x00,0x5B, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF6,0x00,0x54,0x55,0xF7,0xF5,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x54,0x00,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x04,0x04,0xD6,0x00, +0x00,0xF5,0xF7,0xF6,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0x55,0xF7,0xF3,0x00,0xC6,0xD7, +0x04,0x04,0x04,0x56,0x00,0x00,0xF6,0xF7,0xF4,0x00,0x00,0xDE,0x04,0x04,0x04,0x56, +0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xC6,0x55,0x55,0x53,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0xD9,0x53,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0xB8,0x00,0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, +0x55,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0x55,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0x00,0xF4,0x55,0xF7,0x55, +0x00,0x00,0xF6,0xD9,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x53,0x00,0xD9,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF6,0x53,0x00, +0x00,0xDE,0x04,0x04,0x04,0xD3,0xF4,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00,0x54, +0x17,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF3,0x00,0x00,0xB3,0xDE,0x04, +0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x59,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x00,0xB3,0x55,0xF7,0x55, +0xF3,0x00,0x00,0xF3,0xDE,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x60,0x00,0x00,0xF6,0xF7,0xB3,0x00,0xF6, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xF3,0xD8,0x04,0x00,0xB3, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xDC,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD2,0x00, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x00,0x00,0xF6,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xF3,0x55, +0xF7,0xF6,0x54,0x00,0x00,0xF9,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x53,0x55,0xF7,0x55, +0x53,0x00,0x00,0x00,0x00,0xF3,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0x5B,0x04,0x04,0x04,0x57,0x00,0x00,0xF6,0xF7,0xF4,0x00,0xB3,0xDC,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x55,0xF7,0xF5, +0x00,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x54,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x11,0x04,0x04,0x04, +0x04,0x04,0xF3,0x00,0x00,0x11,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xDE,0x04, +0x04,0x04,0x04,0x04,0xDE,0x00,0xC6,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, +0xF7,0xF7,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00, +0x5A,0x04,0x04,0x04,0x59,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x53,0x00,0x54,0x55,0xF7, +0xF6,0x00,0x00,0x5A,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0xB3,0x55,0x55,0xF3,0x00, +0x54,0xD6,0x04,0x04,0x04,0xF2,0xB3,0x00,0x53,0x55,0xF7,0xF5,0x00,0x00,0xF7,0x04, +0x04,0x04,0x04,0xD2,0xB3,0x00,0x54,0x55,0xF7,0xF6,0x00,0x00,0x5B,0x00,0xF6,0x04, +0x04,0xDE,0xC6,0x00,0xB3,0xF7,0x55,0xF3,0x00,0x53,0xDE,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0xF3,0xF7,0x55,0xF3,0x00,0xF5,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD3,0x54,0x00,0xE1,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x04,0xE1,0x53,0x00,0xB3,0x55,0xF7,0xF3,0x00,0x00,0x17,0x04,0x04,0x00, +0x00,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x54,0xE1,0x04,0x04,0x04,0xF2,0xB3,0x00, +0x53,0x55,0xF7,0xF5,0x00,0x00,0x57,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x56,0x00,0xB3,0xF7,0xF3,0x00,0xB8,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0xDB, +0xB3,0x00,0xB3,0x55,0x55,0x54,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x53,0x04, +0x04,0x04,0xD0,0x00,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xD3,0x04, +0x04,0x04,0xF3,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xC6,0x04,0x04, +0x04,0x04,0x04,0x04,0x54,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x54,0x55, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04, +0x04,0x04,0xD9,0x09,0xC6,0x59,0xDB,0xE1,0xF3,0x00,0x5B,0x04,0x04,0x04,0x04,0x04, +0x5E,0x00,0x5C,0x04,0x53,0x00,0xD2,0x04,0x04,0xF2,0x00,0x53,0x04,0xB8,0x54,0x55, +0x04,0x04,0x04,0xDC,0xF3,0x00,0x58,0x0A,0x00,0x00,0x5E,0x04,0x04,0x04,0x04,0x04, +0xD6,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB8,0x54,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0x55,0x04,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF4,0xDB, +0x04,0x04,0x04,0xD0,0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDE,0x54, +0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x17,0x04,0x04,0x04, +0xE1,0x00,0x54,0xDB,0x04,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x00,0xF3,0x58, +0x04,0x04,0x60,0x00,0xF3,0xDC,0x04,0x04,0x04,0x58,0x00,0xF3,0x04,0x04,0x17,0x00, +0x53,0xD7,0x04,0x04,0x04,0xF9,0x00,0xB3,0x04,0x04,0x04,0xDB,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x58,0x00,0xF6,0x04,0x04,0x04,0x04,0xF6,0x00,0x57,0x04,0x04, +0x04,0x04,0x04,0xD6,0x54,0xF6,0xDA,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0xD5, +0xF6,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xF5,0x54,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xF5,0xDF, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04, +0x04,0x04,0x04,0xD6,0x00,0x00,0x00,0x00,0xD7,0x04,0x04,0xD5,0x00,0x00,0x00,0x5B, +0x04,0x04,0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, +0x00,0xF7,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x58,0x00,0xF6,0x04,0x04, +0xD7,0x54,0x00,0xF6,0xF2,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x60,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0xD8,0x57,0x00,0x00,0xE1,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF2,0x53,0x00,0xF3,0xD6,0x04,0x04,0x04,0x04,0x04,0xDC,0x55,0x00, +0x00,0xD0,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0xF3,0x00,0xD0,0x04,0x04,0x04,0xF4,0x00,0xD6,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0xDE,0x00,0x00,0xF2,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xD2,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0x00,0xF6,0xDA,0x04,0xD9,0xF3,0x00,0xF4,0xDE,0x04,0x04,0x04,0x04,0x04,0x5B, +0x54,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0x54,0x60,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00, +0xF3,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04, +0xD2,0x00,0x54,0xD0,0x04,0x04,0x04,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x59,0x53,0xF4,0xDB,0x04,0x04,0x04,0x17,0x00,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0xD8,0x00,0x00, +0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0xF4,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x57,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0x04, +0xD7,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0x56,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00, +0x00,0xF6,0xDA,0x00,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x5D,0x00,0x54,0xDC,0x04, +0xD9,0x53,0x00,0x57,0x04,0x04,0x04,0x04,0xDE,0xB3,0x00,0x57,0x04,0x04,0xD9,0x53, +0x00,0x56,0x04,0x04,0x04,0x04,0xD3,0xF3,0x00,0x00,0xF6,0xDA,0xDB,0xC6,0x00,0x5A, +0x04,0x04,0x04,0x04,0x5B,0x00,0x53,0xD9,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0xDC,0x54,0x00,0x5D,0x04,0x04,0x04,0x04,0x5B,0x09,0xC6,0x00,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF3,0x04,0x04,0xD8,0xF3,0x54,0x5C,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDC,0x54, +0x00,0x5C,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xD7,0x04,0x00,0x00,0x00,0x5C,0x04, +0x04,0x04,0x04,0xF9,0x00,0x54,0xDC,0x04,0xDB,0x53,0x54,0x58,0x04,0x04,0x04,0x04, +0xD3,0xF4,0x00,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0x54,0xD9,0x04, +0xD8, +0x54,0x54,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB8,0x54,0xF7,0x04, +0x04,0x04,0xD8,0xF5,0x00,0x00,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xB3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0xDE,0x04,0x04,0xB8,0x53, +0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF5,0x04,0x04,0x56,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0x00,0xF9,0x04,0x04,0x04,0x04,0x04, +0x59,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0x04,0x04,0x04,0x55,0x00,0x04,0x04,0x04,0x04,0x57,0x09, +0x57,0x04,0x04,0x04,0xDC,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, +0x54,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04, +0xD3,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x0A,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, +0x56,0x00,0x58,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF2,0xC6,0x00,0x5D,0x04, +0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x58, +0x04,0x00,0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x00,0x04,0x04,0xF3,0x00, +0xD3,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x60,0x04,0xF4,0x00,0xD0,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0x5E,0x04,0x04,0x04,0xF7,0x00,0x0A,0x04,0x04,0x04,0x04,0x04, +0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0xDB,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04, +0xB8,0x54,0xF9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5A,0xF3,0x00,0x00,0xF5,0x0A,0x04,0x04,0x58,0x58,0x58,0x58,0x58, +0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x0A,0xF5,0x00,0x00,0xF3,0x5B,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54, +0x00,0x00,0x00,0x00,0x00,0xF4,0x59,0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04, +0x59,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0xDE,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0xF4,0x00,0xF7,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0xD3,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xE1,0x09,0xB3,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xB3, +0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x53,0x53,0xD8,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x00,0xF4,0x04,0x04,0x04,0x04,0x60,0x54,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8, +0xB3,0x00,0x5E,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0x54,0x60,0x00,0xF7,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xF6,0x04, +0x04,0xF6,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xC6,0x00,0x0D, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, +0x00,0xF3,0xDC,0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x00,0x00,0x00,0xF7,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x0A,0x00,0x53,0xD9,0x04,0x04,0x04,0x56,0x54,0xB8,0x04, +0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0xF3,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF9,0x04,0x04,0x04,0x04, +0x04,0x04,0xF3,0x00,0xDB,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x5B,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x58,0x04,0x04,0x04,0x58,0x00,0x55,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD2,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00, +0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF7,0x04,0xB8,0x00,0x56,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0xF5,0xF6,0x04,0x04,0xB8,0x00,0x56,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0x53,0x00,0xF6,0x04,0xB8,0x00,0x5B,0x04,0x04,0x04,0x04,0x04, +0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0x58,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00, +0x56,0xDA,0x55,0x54,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xF7,0x00,0x59,0x04,0x04,0x04, +0x04,0x04,0x04,0x5C,0x00,0x55,0x04,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04, +0x59,0x00,0xF7,0x04,0xB8,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00, +0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x57,0x04,0x04,0x04,0xF5,0x00,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0xDC, +0x00,0x00,0x04,0x04,0x04,0x04,0x57,0x00,0x60,0xF7,0x00,0x0D,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF3,0x54,0xDE,0x54,0xB8,0x04,0x04,0xB3,0xB3,0x0D,0x00,0x56,0x04, +0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5A,0xDE,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0x59,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x17, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xFB,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x55, +0x00,0x56,0x58,0x58,0xF6,0x09,0x57,0x58,0x58,0x04,0x55,0x00,0xD2,0x04,0x04,0x04, +0x04,0xF4,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x54,0xC6,0xDB,0x04, +0x04,0xDB,0x54,0x54,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, +0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5A,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04, +0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF7,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD7,0x53,0x00,0x5A,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x0D,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0xB3,0x54,0x16, +0xE1,0xE1,0xE1,0xE1,0xE1,0x00,0xF4,0xE1,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xD6,0x00,0xF7,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00, +0xF7,0x04,0x04,0x04,0xF2,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04, +0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0x04,0xF2,0x5B,0xF9,0x00,0x54,0xDC, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x56,0x54,0x54, +0x00,0x55,0xDE,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x00,0x54,0x57,0xD9,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x56,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x00,0x00,0x60, +0xDB,0x55,0x00,0x00,0xD8,0x59,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0xF9,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD6,0x57,0xE1,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x57,0x09,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF4,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xC6,0x56,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD9,0xD8,0x04,0x04, +0x04,0x04,0xDC,0x00,0xF6,0x04,0x00,0xB3,0x04,0x04,0xDA,0x55,0x00,0xF7,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x59,0x54,0xB8,0x04,0x53,0x00,0xD8,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x53,0xD9,0x00,0xF6,0x04,0x0D,0x00,0xF4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xB3,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD3,0x04,0x04, +0x04,0x04,0xD7,0x55,0x00,0x00,0xDF,0xD5,0xE0,0x00,0x0A,0x04,0x00,0xF6,0x04,0x04, +0xDB,0xC6,0x09,0xD0,0x04,0x04,0x04,0x04,0x59,0xF6,0xE1,0x04,0x04,0x04,0x04,0x04, +0xF5,0x00,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xB3,0x04, +0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF7, +0x04,0x55,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD3,0xF5, +0x00,0xD8,0x04,0x04,0x04,0xF7,0x00,0xDE,0xF6,0x00,0xDC,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0x54,0x00,0xD7,0x04,0xD7,0x00,0x54,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xB3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x56,0xC6,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xC6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x59,0x00,0xF6,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xD0, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x55,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x54,0x54,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04, +0x53, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xE0,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04, +0x04,0x04,0xB3,0x53,0x04,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, +0xF7,0x04,0xB3,0xF3,0x04,0xF2,0x54,0xB8,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0xDB,0x54,0x00,0x00,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54, +0x04,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0xDC,0x09,0x54,0xDB,0x04,0x04,0x04, +0x04,0x04,0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, +0x04,0x04,0x04,0x60,0xD0,0x04,0x04,0x04,0x04,0xD9,0x5D,0x0D,0x04,0x04,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x00,0x00,0x54,0x54, +0x00,0x00,0x00,0x54,0x00,0x04,0xD7,0xE1,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0x54,0xB3,0x56,0x56,0x53,0x00,0x58, +0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x00,0x00,0xD3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, +0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0xF3,0x00, +0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xD3,0x53,0x00,0x58,0x04,0x04,0x04,0x04,0xD6,0x59,0xD9, +0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0x04,0xD6,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0xD5,0x59,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04, +0x04,0xF6,0x00,0xD2,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0xF5,0x00,0x04,0x04,0xDB,0xF6,0x00,0x09,0x00,0x00,0x00,0x55,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xB8,0xDC,0x04,0x04,0x04, +0x04,0x04,0x04,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0xD3,0xF7,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x53, +0xC6,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDE,0x00,0xF4,0x04,0x04,0x04,0xF4,0x00, +0xD8,0x04,0x5E,0x00,0x55,0x04,0x04,0x04,0x04,0xB8,0x54,0x57,0x58,0x58,0x58,0x58, +0x58,0x58,0x55,0x00,0x60,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xB3,0x00,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, +0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD0,0x04,0x04,0x04,0x58,0x58,0x58,0x58, +0x58,0x58,0x58,0x58,0x57,0x09,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0x00,0xF7,0x04,0x59,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF3,0x00,0xDC, +0x04,0x57,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0xF4,0x00,0xDF,0x04,0x00,0xF6,0x04,0xF6,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x55,0x57,0x57,0xB8,0xF4,0x00,0x00, +0xF5,0xD7,0x04,0x04,0x16,0x09,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6,0x00,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDE,0x04,0xE1,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB3,0x04,0x57,0x00,0x60,0x04,0x04, +0x04,0xB3,0x54,0x04,0x59,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF9,0x00, +0xF5,0xDA,0xF5,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00, +0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x56,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD5,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0x04, +0x00,0xB3,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00, +0xF4, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xD7,0xF7,0x00,0x00,0x57,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0xDF,0x00,0xB8, +0x04,0x04,0xF4,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xE1,0x04,0xB8,0x54, +0xD7,0x56,0x00,0xDE,0x04,0xB8,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00, +0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x54,0xF7,0x04,0x0D,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0xD6,0xF4, +0x00,0x5E,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0x55,0x13,0x04,0xB3, +0xF5,0xDA,0x04,0x04,0x57,0x54,0x00,0x00,0x55,0x04,0x04,0x04,0xAD,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0xE1,0xE1,0x00,0xF6,0xE1,0xE1,0xD6,0x00,0x55,0xE1, +0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xC6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0xD2,0x59,0x53,0x00,0x00,0x54,0x59,0x04,0x04,0xF6,0x00,0x57, +0x04,0x04,0x04,0x57,0x09,0x54,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54,0x54,0x54,0x00,0x00,0x00,0x54,0x54,0x54, +0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x0D,0x00,0x59,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0xDC,0xB3,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x59,0x00,0xB8,0x04,0x04,0xF7,0x00,0x57,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x55,0x04,0x00,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x04,0x04,0x0D,0x00,0xF7, +0x04,0x04,0x04,0x04,0xC6,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04, +0xF3,0x00,0xF5,0x16,0xD6,0x57,0x54,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD2,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xB8,0x04,0x04, +0x04,0x04,0x00,0xB3,0x04,0x00,0xF5,0x04,0x04,0x04,0xD6,0x00,0x59,0x04,0x04,0xF6, +0x00,0xF2,0x04,0x04,0x04,0xD7,0x00,0x00,0x00,0x00,0x54,0x54,0x54,0x00,0x00,0x53, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x00, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x00,0x54,0x54,0x54,0x54,0x54,0x54,0x54, +0x54,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, +0x00,0xB8,0x54,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD6,0x00,0x55,0x04,0x04,0xDB,0x00,0xF3, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x57,0x00,0xF7,0x04, +0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x17,0x00,0xB8,0x04,0x00,0xF3,0x58,0x58,0x58,0x59,0xF9,0xD7,0x04,0x04, +0x04,0x04,0x53,0x00,0xB3,0x00,0x00,0x00,0x00,0x54,0xF6,0x0D,0x04,0x04,0x04,0x04, +0x04,0x54,0x54,0x04,0x00,0xF6,0xDA,0x59,0x54,0x00,0x00,0xF3,0x5C,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0xD9,0x54,0xF3,0x04,0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0xD0,0x00,0xF7,0x04,0xDE,0x00,0xF7,0x04,0x04,0xDC,0x00,0xF6,0x04, +0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x55,0x00,0x55, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x17,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x53,0x17,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x55,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF9,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, +0x00,0xF6,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0xDA,0x00,0x00,0x00,0x54, +0x54,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF6,0xE1,0x09,0xC6,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x00,0xF5, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD3,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, +0xF3,0xF9,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0xF9,0x00, +0x56,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xD0,0x00,0x00,0x00,0x53,0x04, +0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x5B,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDE,0x04,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04, +0x04,0x04,0x04,0x55,0x00,0x60,0x04,0x04,0x04,0x04,0x55,0x00,0x57,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0xD9,0x00,0x00,0x55,0x04,0x5B,0x53,0x55,0xB8,0x53, +0x54,0x00,0xB3,0x00,0x00,0x57,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5E,0x53,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54, +0xF7,0x04,0x04,0xD3,0xD7,0x04,0x04,0x04,0x04,0xD7,0x54,0x00,0x55,0xDC,0x56,0x00, +0xC6,0xF2,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xF4,0x00,0xE1,0xE1,0xE1,0xE1,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, +0xB3,0x09,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x00,0xF2, +0x04,0x04,0xD8,0x53,0x00,0xD2,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5A,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04, +0x04,0x04,0x56,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD9,0x04,0x04,0x04, +0x56,0x00,0xF7,0x04,0x04,0x04,0x04,0xB8,0x00,0xF7,0x04,0x57,0x00,0x55,0x04,0x04, +0x04,0x04,0xF2,0x00,0x53,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0x54,0x00,0x00,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0x58, +0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x54, +0x54,0x56,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0xC6,0x57,0x04,0x04,0x04,0x00,0xF5, +0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0xB3,0xF5,0x04,0x04,0x60,0x00,0x56,0x04,0x04, +0x04,0x04,0xF6,0x00,0x0A,0xE1,0xE1,0xE1,0xE1,0x57,0x00,0x56,0x04,0x04,0x04,0x04, +0x00,0xF3,0x58,0x58,0x57,0xB8,0xF5,0x00,0x53,0xD7,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF3,0x58,0x58,0x58,0x58, +0x58,0x58,0xD0,0x04,0x00,0xF3,0x58,0x58,0x58,0x58,0x58,0x5D,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xD0,0x04, +0x00,0xF3,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x17, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0xF6,0x00,0xE1,0x04,0x04,0x04,0x55,0x00,0xD6,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDE,0x00,0x53,0xD9,0x04,0x04,0x00,0xF6,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00, +0xF6,0x04,0x00,0x00,0x00,0x54,0x54,0x00,0x54,0x00,0xF3,0xDE,0x04,0x04,0x00,0xF4, +0x04,0xD8,0xDE,0xDE,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, +0x00,0xF6,0x04,0x17,0x5A,0x57,0x55,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04, +0xDE,0xB8,0x53,0x54,0x53,0xDC,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x57,0x00,0x59,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0x17,0x04,0x04,0x54,0xB3,0x04,0x04,0x59,0x00,0x59,0x04,0x04,0xF3,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0x54,0xD5,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5D,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0xD0,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD2,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x00, +0xC6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0x04,0x54,0x00,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1, +0xE1,0xE1,0x00,0x09,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0xC6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0x04,0xDE,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x57,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF4,0x04,0x04, +0x04,0x04,0x04,0xDC,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x00, +0xF4, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x09,0xC6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, +0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x59,0x00,0xB3,0x0D,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0x04,0xDC,0x00,0xF6,0x04,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04, +0x04,0xDF,0x00,0x56,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0x04,0x04,0x04,0xF4,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, +0xD7,0x00,0xF3,0x04,0x04,0x04,0x58,0xC6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0xC6,0x54,0xD5,0x04,0x04,0x04,0xDF,0xF3,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0xF6,0x00,0xF6,0x0A,0x04,0x04,0xB8,0x00,0x00,0x53,0xB8,0xD7,0x04,0xD5, +0xB3,0xF5,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0xF6,0x54,0x04,0x04,0x04,0xF4,0xB3,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x54,0x00, +0x00,0x55,0x04,0x04,0x04,0x04,0xDE,0x59,0x5E,0xD9,0x04,0xF5,0x00,0xDB,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF5,0x00,0x00,0x00,0x00,0xD3,0x04,0x04,0xDF, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5D,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, +0xDB,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x53,0x54,0xE1, +0x04,0x04,0x04,0x04,0x04,0x0A,0x57,0xF7,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0xDF, +0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0x00,0x55,0xD8,0x04,0x04, +0xDA,0xDF,0x00,0xC6,0x04,0x04,0x17,0x00,0xF4,0xD9,0x04,0x04,0x04,0xE1,0x00,0x54, +0xD8,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x57,0x04,0x04,0x04,0x04,0xF6,0x00,0xF4, +0x56,0x57,0xF5,0x00,0xF4,0xD9,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x57, +0x00,0x5E,0x04,0x54,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x5A,0xF3,0x00, +0x54,0xF5,0xDF,0x04,0x04,0x04,0x04,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54, +0x54,0x00,0x04,0x04,0x04,0x04,0x0D,0xF5,0x00,0x00,0xF3,0x5A,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDC,0xB3,0x00,0x57,0x04,0x04,0x00,0xF5,0x04,0xF4,0x00,0xD7, +0x04,0x04,0x04,0xF7,0x00,0xDB,0x04,0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0xDF,0x00, +0x56,0x04,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0xDB,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x00,0x56,0x04, +0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x53,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x54, +0x54,0x54,0x54,0x54,0x54,0x00,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xE1,0x00,0x00,0xDC,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDC, +0x00,0xF3,0x04,0x04,0x04,0x04,0xDE,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x00,0xF4, +0xE1,0xE1,0xE1,0x0A,0x59,0xF6,0x00,0x54,0xD9,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xDC,0xF3,0x00,0xE1,0x04,0x04,0x04,0x16,0xF3,0x00,0x00,0x53,0xB8, +0xDB,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB3,0x00,0xD8,0x04, +0x04,0x04,0xD9,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04, +0x55,0x00,0xD5,0x04,0x55,0x00,0xDC,0x04,0x04,0xF7,0x00,0x03,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF3,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0xDE,0xF7,0xC6,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF5,0x00,0x5C,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00, +0xD7,0x04,0x04,0x04,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x57, +0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00,0x09,0x57,0x04,0x04, +0x04,0x04,0x04,0x04,0x5A,0x00,0xF7,0x04,0xB8,0x00,0x57,0x04,0x04,0x04,0x04,0x04, +0x04,0xDC,0xF4,0xF5,0x04,0x04,0xB8,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0x53,0x00,0xF6,0x04,0xF7,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x55, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, +0x04,0x5A,0x00,0x00,0x04,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x57, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6,0x09, +0x57,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x5D, +0x00, +0x53,0x04,0x04,0x04,0x04,0x04,0xF9,0x54,0xB8,0x04,0x00,0x00,0xD9,0x04,0x04, +0x04,0x04,0xDB,0x00,0x54,0x04,0xF7,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x59, +0x00,0xF7,0x04,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xF7,0x04, +0xF7,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00,0x53, +0x04,0x04,0x04,0xDA,0x55,0x00,0xF2,0x04,0x04,0xDE,0xD2,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04, +0xB8,0x00,0xDF,0x04,0x04,0x04,0x04,0xB8,0x00,0x60,0x04,0x04,0x04,0x55,0x00,0xD3, +0x04,0x04,0x04,0xF7,0x00,0x00,0xE1,0x04,0x04,0x04,0x59,0x54,0x5C,0x04,0x04,0x04, +0x04,0xB8,0x00,0x57,0xD6,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x59,0x04, +0x04,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x55,0x04, +0x04,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF3, +0x04,0x04,0x04,0x04,0x04,0xDC,0xD2,0x04,0x04,0x04,0x04,0x04,0xF2,0xDD,0x04,0x04, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF9,0xF9,0x55,0x00,0xF9,0xF9, +0xF9,0xF5,0x00,0xF9,0xF9,0x04,0x04,0xDE,0x54,0x00,0x00,0x55,0xD6,0x04,0x04,0x04, +0x04,0x55,0x00,0x00,0x00,0x00,0x5D,0x17,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x00,0xF6,0xD3,0x04,0x04,0xF5,0x54,0xD6,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x59,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0xF5,0x04,0x04,0x04,0x04, +0x04,0x55,0x00,0x09,0xC6,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5B,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0xD3,0x00,0x00,0x53,0xB8,0x57,0x55,0x00,0x00,0xD6, +0x04,0x04,0x04,0xF6,0x00,0xC6,0xB8,0x57,0x55,0x00,0x00,0x17,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0xF7,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDF,0xF5,0x00,0x00,0xF3, +0x5C,0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0x04,0x04, +0x5C,0xF3,0x00,0x00,0xF5,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDC,0x53,0x00,0xDE,0x04,0x54,0x53,0x04,0x5A,0x00,0xF7,0x04,0x04,0x04,0x59, +0x00,0x58,0x04,0xDC,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF3,0xC6,0x04,0x04,0x04, +0xD0,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0xE1,0xE1,0x0D,0x58,0xB3,0x00, +0x59,0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, +0x00,0x04,0x00,0xF4,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xDC,0x04,0x00,0xF4,0xE1,0xE1, +0xE1,0xE1,0xE1,0xDE,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1, +0xE1,0xE1,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x5A,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xB8,0x54,0x5B,0x04,0x04, +0x04,0x04,0x04,0xF4,0x00,0xDC,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x57,0x00, +0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0x58,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x16,0x00,0xF7,0x04,0x04,0x5D,0x00,0x00,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0xD0,0x04,0x04,0x04,0x04,0xD9,0x00,0xF5,0x04,0x04,0x04,0x5A,0x00,0x5B,0x04, +0x54,0xB3,0x04,0x04,0x04,0x0D,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0xC6,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04, +0xDC,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x54,0xDB, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, +0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0xF9,0x54,0xB8,0x04,0x04,0x04, +0x55,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0x57,0x04,0xDA,0xDA, +0x04,0xDC,0xF4,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x5A,0x04,0xDA,0x04,0x04,0x5E, +0x00,0x54,0xDC,0x04,0xDB,0x53,0x00,0x58,0x04,0xDA,0x04,0x04,0xD2,0xB3,0x54,0x57, +0x04,0x04,0xDB,0x53,0x00,0x58,0x04,0xDA,0x04,0x04,0xD2,0xF3,0x00,0x00,0xF6,0x04, +0xDC,0x54,0x00,0x0D,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0xD2,0x04,0x04,0x04,0x00, +0xF6,0xD4,0x04,0x04,0xDC,0x00,0x00,0x60,0x04,0xDA,0xDA,0x04,0x5D,0x54,0x00,0x00, +0x04,0x00,0x00,0xF5,0xD9,0xDA,0xDA,0x04,0xD0,0x00,0x00,0xDC,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDB,0xC6,0x00,0xD6,0x04,0x04, +0x04, +0x00,0xF6,0x04,0x00,0x00,0xB8,0x04,0x04,0x04,0xDC,0x53,0x00,0x00,0xB8,0x04, +0x04,0x04,0xDB,0xB3,0x00,0xE1,0x04,0x00,0x00,0x55,0xDA,0xDA,0xDA,0x04,0x55,0x00, +0xF7,0x04,0xDC,0x54,0x00,0xF9,0x04,0xDA,0x04,0x04,0x60,0x00,0x00,0xD3,0x04,0x00, +0x00,0x00,0x5B,0x04,0xDA,0x04,0x04,0x5C,0x54,0x54,0xDC,0x04,0xDB,0x54,0x00,0x58, +0x04,0xDA,0xDA,0x04,0xDC,0xF4,0x00,0x00,0xF6,0x04,0x00,0x00,0xB8,0x04,0x04,0x04, +0x55,0x00,0xD6,0x04,0xDC,0x00,0xF6,0xDA,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xC6,0x53,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0xD8,0x00,0xF4,0x04,0x04,0x04,0x04,0xD6, +0x00,0x54,0x04,0x04,0x04,0x04,0xD8,0x00,0xF5,0x04,0x04,0x04,0xD6,0x00,0xF4,0x04, +0x04,0xB8,0x54,0x57,0x04,0x04,0x04,0x04,0x54,0x00,0xD8,0x04,0x04,0x04,0x04,0xF7, +0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF9,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09, +0xC6,0x04,0x04,0xF5,0x00,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0xDF, +0x5B,0x54,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D, +0x00,0xF3,0xDE,0x55,0x00,0x54,0xDC,0x04,0xF2,0x58,0xD6,0x04,0x04,0x04,0x04,0x04, +0x60,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x53,0x04,0x04,0x04, +0x55,0xE1,0xDE,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x56,0x5E, +0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0xD7,0xD6,0x57, +0x09,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0xDB,0xC6,0x00,0xDC,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x00,0x54,0xB3,0x00,0x00,0x00,0xF5,0xD0,0x04,0x04,0x04,0x04,0xD7, +0x00,0x00,0x00,0x00,0x00,0xF3,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0x16,0x04,0x04,0x04,0xB8,0x54,0xF5,0x60,0xDF,0xF6,0x00,0xB8,0x04,0x04,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04, +0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x54,0x53,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x00,0x55,0xDE, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD7,0x04,0x04,0x04,0x04,0x04,0x60,0x00, +0xF7,0xDA,0xF6,0x00,0xD0,0x04,0xF3,0x00,0x60,0x04,0x04,0x57,0x00,0xF4,0x04,0x5E, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x5B,0x04,0x04,0x55,0x00,0xD0,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD9,0x54,0x53,0x04,0x04,0xF5, +0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF4,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0xF7,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, +0x00,0xB8,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xDE,0x00,0x53,0xD9,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0x00,0x0A,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, +0x55,0xDA,0xF4,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD2,0x00,0xF5,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA, +0x04,0x53,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0x04, +0x04,0x04,0xF9,0x00,0x57,0x04,0x04,0x04,0xD5,0x00,0x55,0xDE,0x00,0xF7,0x04,0x04, +0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x54,0xF2,0x00,0x00, +0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDE,0x04,0x04,0xB8,0x54,0x5C, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF7,0x04,0x04,0x04,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF2,0x00,0xF6,0x04,0x04,0x04,0x04,0xC6,0x09,0xD8,0x04,0xD9,0x00,0xB3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x53,0x54,0x53,0x55,0xF7,0xF6,0x00,0x00,0x59, +0x00,0xF6,0xDA,0x00,0x00,0x00,0x54,0xB3,0x55,0xF7,0xF3,0x00,0x54,0xE1,0x04,0x04, +0x04,0xDE,0x53,0x00,0x53,0x55,0xF7,0xF5,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0xF2, +0xB3,0xC6,0x53,0x55,0xF7,0xF5,0x54,0x00,0x56,0x00,0xF6,0xDA,0x04,0xE1,0x54,0x00, +0xF3,0xF7,0x55,0xF3,0x00,0x54,0x0D,0x04,0x04,0xF7,0xF7,0x00,0x53,0xF7,0xF7,0x04, +0x04,0xD6,0x00,0x00,0xF3,0x55,0x55,0xF3,0x00,0xF5,0xF6,0x00,0x04,0x00,0x00,0x00, +0x54,0x55,0xF7,0xF6,0x00,0x00,0x5A,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0xD6,0x00,0xC6,0xDB,0x04,0x04,0x00,0xF6,0xDA, +0x00,0x00,0x00,0xF3,0xF7,0x55,0x00,0x00,0x5B,0xF6,0x54,0xF3,0xF7,0x55,0x54,0x00, +0xF7,0x04,0x04,0x00,0x00,0x00,0x53,0x55,0x55,0x53,0x00,0xB3,0xD5,0x04,0x04,0xE1, +0x54,0x00,0xF3,0x55,0xF7,0xF3,0x00,0x00,0x0A,0x04,0x04,0x00,0x00,0x00,0x54,0xF3, +0x55,0xF7,0xB3,0x00,0x54,0xE1,0x04,0x04,0x04,0xDE,0x53,0x00,0x53,0x55,0xF7,0xF6, +0x00,0x00,0x57,0x00,0xF6,0xDA,0x00,0x00,0x54,0xF3,0x56,0x04,0x0A,0x00,0x09,0xF7, +0xB3,0x00,0xF9,0x04,0xF7,0xF7,0x53,0x00,0xF7,0xF7,0xF7,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x60,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0xD7,0x04,0x59,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0xF7,0x59,0x04,0x04, +0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0xD8,0x53,0x00,0xF2,0x04,0x04,0x04,0xB3,0x00, +0xDE,0x04,0x04,0x16,0x09,0x55,0xDA,0x04,0x04,0x04,0x04,0xDE,0x00,0xF6,0xDA,0x04, +0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, +0xF6,0x04,0xDC,0xDC,0xF2,0x00,0x56,0xDC,0xDC,0xDF,0xC6,0x57,0xDC,0x04,0x04,0x00, +0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x53,0x04,0x04,0x04,0x60,0x00,0x00, +0x00,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0xD3,0x04,0x04, +0x57,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDE, +0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x59,0x04,0x04,0x04,0xF5,0x00,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0xD0,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF4,0x04,0x04,0x04,0x04, +0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF7,0x04, +0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF3, +0x54,0x04,0xDC,0xDE,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0xDE, +0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF4,0x04,0x04, +0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x0A,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xB8,0x00,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0xD6,0x00, +0xF5,0x04,0xDE,0x54,0x00,0xF7,0x56,0x00,0x53,0x00,0xD5,0xF5,0x00,0xDF,0x04,0x04, +0x04,0x04,0x04,0xD9,0x00,0xF3,0x04,0xDB,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x5C,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x59,0xDE,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x09,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xF7,0x55,0xD8,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4, +0x54,0x59,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x5C,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x54,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x0D,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x57,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x5D,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0x04,0x00,0xF5,0x04, +0x04,0x04,0x04,0xDA,0x5E,0xE1,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD5,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x55,0x00, +0xDE,0x04,0x04,0x04,0x04,0xB3,0x00,0x00,0x00,0x60,0x04,0x04,0x04,0x04,0xF5,0x54, +0xDB,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x5B,0x04,0x5B,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x0A,0x00,0x55,0x04,0x04,0x04,0xD5,0x54,0xB3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD6,0x04,0x04,0x54,0x53,0x04,0x04,0x04, +0x04,0x04,0x57,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF7,0x04, +0x04,0x04,0x04,0x56,0x00,0x59,0xDA,0x58,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0xB8,0xB3,0x00,0x00,0x00,0xF6,0xE1,0x04,0x00,0xF6,0x04,0x00, +0xF6,0xD8,0xB8,0x53,0x00,0x00,0xC6,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x56, +0xB3,0x00,0x00,0x00,0xF6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x56,0xB3,0x00, +0x00,0x00,0xF5,0x0D,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0xF7,0x53,0x00,0x00,0xC6, +0xF7,0xDC,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD3,0xF7, +0x54,0x00,0x00,0xB3,0x57,0x04,0xF6,0x00,0x04,0x00,0xF6,0x0D,0xF4,0x00,0x00,0x00, +0xF5, +0x0A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x57,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x5C,0xB3, +0x00,0x00,0xF3,0x60,0x04,0x04,0xB8,0x54,0x00,0x00,0xB3,0x58,0x04,0x04,0x04,0x00, +0xF6,0xE1,0xF4,0x00,0x00,0x54,0xF7,0xDB,0x04,0x04,0x04,0x04,0xDC,0xF7,0x53,0x00, +0x00,0x54,0x55,0xD3,0x04,0x04,0x04,0x00,0xF6,0xD8,0xB8,0x53,0x00,0x00,0xC6,0xF7, +0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x56,0xB3,0x00,0x00,0x00,0xF5,0xDF,0x04,0x00, +0xF6,0x04,0x00,0xF6,0xB8,0x00,0x09,0x04,0x04,0x5B,0xC6,0x00,0x54,0x57,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xF6,0x00,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x0D,0x54,0xB8,0x04, +0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A, +0x00,0x56,0x04,0xF7,0x00,0x58,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3,0x04,0x04,0xF5, +0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD7,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04, +0x04,0x54,0x55,0x04,0x04,0xD8,0x00,0xF7,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04, +0x04,0x57,0x55,0x04,0x00,0xF5,0x04,0x04,0x04,0xD5,0x00,0xF6,0xD8,0x00,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x0D,0x00,0xF3,0xD8,0x04,0x04,0x04, +0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x58,0x56,0x00,0x54,0xB8,0x58,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, +0x00,0x59,0x04,0x04,0xF4,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x54,0x53, +0x04,0x04,0x57,0x00,0x0A,0x04,0x04,0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x60,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xE1,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD0,0x04,0x04,0x00,0xF5,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0xDA,0x55, +0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xB3,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF7,0x04,0x04,0x55,0x54,0xB8,0x04,0xDE, +0xF4,0x00,0x00,0xF3,0xDC,0x04,0x58,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF7,0x00,0xD6,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0xC6,0x09,0xDC,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x5D,0x00,0x53,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x55,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x54,0x00,0xE1,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x5B,0x00,0xF6,0x04,0x00,0xF6, +0x57,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x55,0x54,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x00,0xD6,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x55,0x04,0x04,0xB3,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF4,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x58,0x00,0x56,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0xDE, +0x00,0x55,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x57,0x09,0x57,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x57,0x54,0x57,0x04,0x04,0x04,0x53,0x09,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x57,0x00,0x5A,0x04,0x04,0x04, +0x04,0x5B,0x00,0xF6,0x04,0x04,0x04,0xF5,0x00,0xF9,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0xDE,0x04,0x04,0x04,0x04,0xB8,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x0A,0x00,0xF3,0x04,0xDA,0x55,0x00,0x0D,0x04,0x04,0x04,0x04,0xB3,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x16,0x04,0x04,0x04,0x04,0xDB, +0x00,0xF4,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04, +0x04,0x04,0x53,0xF5,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x53,0x54,0x04, +0x53,0x00,0xD2,0xDA,0x04,0x57,0x00,0x56,0x04,0xF7,0x00,0x0A,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xE0,0x54,0xDB,0x04,0x04,0x59,0x00,0xB8,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x56,0x54,0xF5,0xDB,0x04,0x04,0x5D,0x00,0x54,0xD7, +0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04, +0x57,0x00,0xF5,0xD9,0xDA,0x04,0x04,0xD6,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x56,0x00,0x55,0xDA,0xDA,0xDA,0x04,0xF7,0x00,0xB8,0x04,0x04,0xDF,0x00, +0x55,0xDA,0x04,0x04,0x57,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00, +0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x58,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x53,0x00,0xD3,0xDA,0xDA,0xD3,0x00, +0x53,0x04,0x04,0x0A,0x00,0xB3,0xDC,0xDA,0x04,0x04,0x59,0x00,0xB3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x56,0x04,0x04, +0x04,0xDC,0xB3,0x00,0xE1,0x04,0x04,0xD8,0xF4,0x00,0x55,0xD3,0x04,0xF1,0xF2,0x04, +0xDB,0xF7,0x00,0x54,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0x00, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0xD0,0x00, +0xF3,0x04,0x04,0x04,0xD7,0x00,0x00,0x55,0xD3,0x04,0xDA,0xDA,0x04,0x04,0x5B,0x00, +0x00,0x16,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0xD5,0xF7,0x00,0x00,0xD0, +0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0xF4,0xE1,0x04,0xDA,0xDA,0xDA, +0x04,0xDE,0xF5,0x00,0xF3,0xD9,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD6,0x00,0x54,0xDC,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD5,0x00,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x53,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0xF5,0x00,0xF6,0xDE,0x04,0xDA, +0xDA,0x04,0x04,0x59,0x00,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04, +0x04,0xDC,0xF3,0x00,0x5C,0x04,0x04,0xF2,0x54,0x00,0xF6,0xDE,0x04,0xDA,0xDA,0xDA, +0x04,0xDE,0xF5,0x54,0x53,0xDC,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0x0D, +0x00,0x00,0xDC,0x04,0x04,0xF4,0x00,0x17,0xDA,0x04,0x04,0x55,0x00,0x5B,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x00,0xB3,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00, +0xF4,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0x00,0xD3, +0x04,0x04,0x04,0xD3,0x00,0x54,0xD5,0x04,0x04,0x04,0xDF,0x00,0x55,0x04,0x04,0x04, +0x04,0x04,0xDB,0xC6,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0x57,0x04,0xD0,0x00,0x54,0xD0,0x04,0x04,0xDF,0x00,0x58,0x04,0x04,0x04,0x04, +0x04,0x04,0xD7,0xF5,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x57,0xC6, +0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x16,0xF3,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0x54, +0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0xDA, +0x04,0x04,0x04,0x54,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF4,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6, +0xDA,0x00,0x00,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x04,0x04,0x04,0xF5,0x09, +0x04,0x04,0x04,0xB8,0x00,0x55,0xD2,0xDC,0xF7,0x00,0x56,0x04,0x5B,0x54,0x54,0x55, +0xF6,0x00,0x53,0xDB,0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0x09,0xC6,0xF7,0xF6,0x00,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0xB8,0x54,0x54,0x04,0x57,0x00,0xB3,0xF2,0x04,0x04,0x04,0x04,0xD6, +0x5B,0x00,0x00,0x59,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0xF6,0x54,0x53, +0x55,0xF7,0xF5,0x54,0x00,0x5B,0x04,0x04,0x58,0xF7,0xF7,0x00,0xF6,0xDA,0x04,0xF4, +0x00,0x53,0x55,0x55,0x53,0x54,0xF4,0xD8,0x04,0x04,0x04,0xF4,0x00,0xF4,0xF7,0xF5, +0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x54,0x00,0xF6,0xDA, +0x04,0x04,0x04,0xE1,0x00,0xF4,0xF7,0xF7,0xF7,0xF7,0xF7,0xD0,0x04,0x04,0x04,0x04, +0x04,0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, +0xF7,0x00,0x00,0x04,0x04,0x5B,0x00,0x54,0x55,0x55,0x00,0x00,0x5A,0x04,0x04,0x04, +0x56,0xC6,0x09,0x55,0xF7,0xF3,0x00,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x00,0xF3,0xF7,0x55,0x00,0x54,0x56, +0x04,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xF4,0x55,0xF7,0xF5,0x00,0x00,0xF3,0xDE, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x00,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0x55,0xF4,0x00,0x00,0x17,0x04,0x04,0x04, +0x04,0xD7,0xF4,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00,0xC6,0x60,0x04,0x04,0x04, +0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF3,0x00,0x00,0xF3,0xDE,0x04,0x04,0x04,0x00,0x53, +0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x59,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, +0x04,0x04,0x04,0x04,0xDC,0xF5,0x54,0x54,0xB3,0x55,0xF7,0x55,0xF3,0x00,0x00,0xF7, +0xD9,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x59,0x00,0xF4,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x55,0x00,0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00, +0xC6,0x5E,0x04,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF5,0x00,0x09,0xF5, +0x04,0x04,0x04,0x04,0xD7,0xF4,0x00,0x00,0xF3,0x55,0xF7,0x55,0xF3,0x00,0x00,0xF5, +0xDC,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xB3,0x00,0x00,0xF9,0x04,0x04, +0x04,0xE1,0x00,0x00,0xF6,0xF7,0xB3,0x00,0xF4,0x04,0x04,0xF7,0xF7,0xF7,0x53,0x00, +0xF7,0xF7,0xF7,0xF7,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0xDF,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD6, +0x04,0x57,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x56,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0xF6,0x00,0x59,0x04,0x04,0x04,0x04,0x04, +0x58,0x00,0x55,0xDA,0x04,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0x58,0x04,0x04,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0x00,0x04,0x04, +0x59,0x00,0x00,0x04,0x04,0xF6,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54, +0xF4,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x00,0xD7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6, +0xF4,0x00,0x54,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x53,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x55,0x0C, +0x04,0x00,0xF6,0xDA,0xF9,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, +0xF6,0x04,0x04,0x04,0x04,0x59,0x00,0xF2,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0xD8, +0x55,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0xF9,0xB3,0x00,0x00,0xF6,0xD3,0x04, +0x04,0x04,0xF6,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x53,0x00,0x00, +0xF5,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x0A,0xF5,0x04,0x56,0x56,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x17,0x00,0x59,0x04,0x04,0x04,0x57,0xB3,0x00,0x00,0x00,0xF5, +0xD6,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x56,0xB3,0x00,0x00, +0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0xF6,0xD2,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0xD6,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0x04,0x04,0x5E,0xF3,0x00,0x00,0xB3,0x5D,0x04,0x04,0x04,0x04,0x04,0x16,0xF3,0x00, +0x00,0x54,0x55,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD2,0xF6,0x00,0x00,0x00,0xF3,0x5C,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD6,0x55,0xC6,0x00,0x00,0x00,0xF4,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x54,0xF6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, +0xF5,0x54,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x53,0xF6,0x5D,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF5,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0xF9,0xF5,0x00,0x00,0x00,0x00,0xB3,0xF7,0xDE,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x55,0x00,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00, +0xF6,0x04,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF4,0x57,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x60,0xF6,0x54,0x00,0x00,0x00,0x54,0xF6,0xDF,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x55,0xDE,0x04,0x04,0x04,0x04,0x04,0xD0,0xF5, +0x00,0x00,0x54,0xF7,0xD9,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xF6,0x00,0xE1, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0xF5,0x00,0xD9, +0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x00,0xD0,0x04,0x16,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x17, +0x04,0x17,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xD8,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x0A,0xF4,0x04, +0xDC,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x5A,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x54,0x00,0x56,0xD8,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0xC6,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x54,0x00,0x5B,0x04,0x00,0xF6,0x04, +0xF7,0x00,0xF4,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3, +0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0xD0,0xD7,0xB8,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xEC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x00,0x00, +0x49,0x04,0x00,0x00, +0x1B,0x00,0x00,0x00, +0x00, +0x00, +0x06,0x74,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, +0xB8,0x5D,0x17,0x17,0x5D,0xF7,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x54, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xB8,0xF2,0x04,0x04,0x04,0x04, +0x04,0x04,0xE1,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x17,0xDC,0xEF,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x55,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x60,0x5D,0x54,0x5D, +0x60,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDC,0xD6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5,0xDF,0xFA,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x57,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0xB8,0xD9,0xD9,0xDF,0xB8,0x55,0xF7,0x5A,0xD2,0x04,0xDE, +0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x58,0xDE,0x04,0xF2,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDE,0xD9, +0x17,0x00,0x00,0x00,0x00,0xDA,0xDC,0xEF,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD2,0x04,0x5B,0x00,0x5B,0xDA,0xD2,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x5E,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xB8,0xDC,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD8,0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0xD7,0xDB,0xB8,0x54,0x00,0x00,0x00,0x00,0xF3,0xDE,0x04,0x59,0x54,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF, +0x04,0x5A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x53,0xD3,0xD5,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xDE,0x57,0x54,0x00,0x00, +0x00,0xD6,0xD3,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0xDC,0xD9,0x58,0x00,0x00,0x00,0x59,0xD9,0xD7,0xF5,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xB8,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x56,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, +0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xC6,0x00,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF6,0xDC,0xDA,0x60,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xDE,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0xDD,0x5A,0x53, +0x00,0x00,0x00,0x00,0x54,0x54,0xF7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60, +0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDB,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, +0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xFF,0xFF,0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xD8, +0x17,0x00,0x00,0x00,0xD6,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, +0xF2,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD3,0xD6,0x00,0x00,0x00,0x00,0xF7, +0xD0,0xDB,0xDB,0xD0,0xF7,0x00,0x00,0x00,0x00,0x58,0xDE,0xDB,0xD8,0xD7,0x60,0xF3, +0x00,0x00,0x00,0x00,0x57,0xD0,0xF3,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xD9,0x56, +0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0xD0,0x53,0x54,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDE,0xDD,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x53,0xDC,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF7,0xD6,0xD7,0xD8, +0xD8,0xD7,0x12,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x53,0xB8,0xE1,0xDD,0xD8,0xD3, +0xDF,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, +0x00,0x00,0x00,0x00,0xB3,0x16,0xF2,0xD9,0xD9,0xDE,0x5D,0x53,0x00,0x00,0x00,0x00, +0x54,0xF5,0xDF,0xD2,0xD9,0xD9,0xDE,0xFA,0xB3,0x54,0x00,0x00,0x00,0xD0,0xDA,0xF7, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xE1,0xDD,0xD8,0xDC,0xD6,0x55, +0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDA,0xDE,0x53,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0xF6,0xD9,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3, +0x5B,0xD0,0xDC,0xD8,0xD9,0xD7,0xD6,0x56,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0x03,0x00,0x04, +0x04,0x04,0x04,0xDA,0xDB,0xD2,0xD6,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5, +0xFA,0xD0,0xDC,0xDA,0xD9,0xD3,0xE1,0x59,0x53,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0x04,0xD9,0xD3,0xD0,0x5E,0xF6,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x17,0x54,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xB3,0x59,0xE1,0xD7,0xD9,0xDA,0xD5,0xDE,0x60,0xF6,0x09, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x04,0xDE,0x00,0x00,0xF7,0xE1,0xD5,0xDA,0xDD,0xD6,0xF6,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0x04,0x5D,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xD2,0x00, +0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x59,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0x59,0xD0,0xDC,0xD8, +0xD8,0xD3,0xE1,0x5A,0xF3,0xC6,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x53,0x59,0xE1,0xF1,0xD8,0xD9, +0xF1,0xE1,0x59,0x53,0xF5,0xDF,0xD7,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0xD5,0xDB,0xF7,0x00,0x00,0x00,0x55,0xEF,0xD7,0xD9,0xDB,0xDE,0x59,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF7, +0xD6,0xD7,0xD9,0xDB,0xDE,0x5E,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0xD5,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, +0xD8,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x04,0xB8,0x00,0x00,0x00, +0x00,0x00,0x17,0x04,0xDF,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x0D, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xDF,0x04,0xDF,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0xDF,0x00,0x00,0xF3,0xD2, +0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD3,0xD8,0xD9,0xD7, +0xDF,0xF5,0x00,0x04,0xDE,0x00,0x04,0xDE,0x09,0xB8,0xE1,0xDC,0xD8,0xD5,0xD0,0x58, +0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD6,0xF1,0xD8,0xD9,0xF2,0x17,0xF5,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x0A,0xD7,0xD9,0xD8,0xD2,0x17,0xF5,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x57,0xD0,0xDD,0xDA,0xD5,0xD0,0x57,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x57,0xD0,0xDD,0xD8,0xD5, +0xE1,0xB8,0x00,0xF1,0xD7,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x17,0x04,0xD6,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x54,0x58,0xD0,0xDD, +0xDA,0xDB,0xDE,0x5A,0x00,0x54,0x00,0x00,0x04,0xDE,0x00,0x56,0xD0,0xD5,0xDA,0xDD, +0xD0,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x58,0xD0,0xD5,0xDA,0xD5,0xD0,0x56, +0xC6,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xC6,0x56,0xD0,0xDB,0xD9, +0xDE,0x56,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x54,0x59,0xDE, +0xDB,0x04,0xD5,0xD6,0xF5,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x17, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0xD9,0xF4,0x00,0x00, +0x00,0x00,0xD7,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x60,0x00,0x00, +0x00,0x00,0x00,0x5B,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0xF5,0x04,0xF2,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xD0,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD0,0x00,0x00,0x00, +0xFA,0x04,0x55,0x00,0x00,0x00,0x00,0xC6,0x56,0xF2,0x04,0x04,0x04,0xD9,0x5B,0x00, +0x00,0x00,0x00,0x00,0x00,0xFA,0xD9,0x55,0x00,0x00,0xF7,0xDB,0xD8,0xD0,0xE1,0xD9, +0xDB,0xF7,0x00,0x00,0xEF,0x04,0xDB,0xE1,0xD6,0xF1,0x04,0xDE,0xF3,0x00,0x54,0x58, +0xD9,0xD5,0xF7,0x00,0x00,0x00,0x00,0x00,0x5E,0x04,0x60,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xE1,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x5D, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x0A,0xDB,0xF3, +0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xDB, +0x56,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xDC,0x04,0x04,0x0A,0x0A,0x0A,0x0A, +0x0A,0x0A,0x0A,0x0A,0x00,0x53,0x59,0xD8,0xD9,0xD0,0xD6,0xDE,0x04,0xDC,0xF7,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xF6, +0xDE,0x04,0xD7,0xD6,0xE1,0xDC,0x04,0xDE,0xF4,0x00,0x00,0x00,0xB8,0xDC,0x04,0xD7, +0xD6,0xD6,0xDC,0x04,0xDE,0xF5,0x00,0x00,0x00,0x56,0x04,0xD6,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x5D,0xDA,0xD9,0xD0,0xD6,0xDE,0x04,0xDB,0x56,0x00,0x00,0x00, +0x00,0x00,0x00,0xDF,0x04,0x60,0x54,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0xD6,0xDA,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0x60,0xDC, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x60, +0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xDC,0x04,0xDC,0xD0,0xD6, +0xD6,0xD0,0xDB,0x04,0xDE,0x55,0x00,0x00,0x00,0x55,0xDA,0xD0,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0xB8,0x00,0x04,0xDC,0x0A,0x0A,0x0A, +0xE1,0xD2,0x04,0x04,0x17,0x54,0x00,0x00,0x00,0x00,0x5D,0xDB,0x04,0xDB,0xD0,0xD6, +0xD6,0xDE,0xD9,0x04,0xD2,0xF7,0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0xD6,0xD6,0xDE, +0xD5,0x04,0xD9,0x17,0x53,0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x57, +0xD7,0x04,0xD9,0xDE,0xD6,0xD6,0xD0,0xDB,0x04,0xDB,0x16,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, +0xF7,0xD5,0x04,0xDE,0xD6,0xDE,0x04,0xD7,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0xDF,0x04,0xD6,0x00,0x00,0x04,0xDC,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x56,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5, +0x04,0xDE,0x00,0x00,0x00,0xC6,0x56,0xD7,0x04,0xD9,0xD0,0xD6,0xD6,0xD0,0xDB,0x04, +0xD7,0x56,0x54,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0xB8,0xD2,0x04,0xD9,0xDE,0xD6,0xD6,0xDE,0xD8,0x04,0x04, +0x04,0x04,0xDE,0x16,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xB3,0xDE,0x04,0x59, +0x00,0x00,0x54,0xB8,0xD5,0x04,0xD2,0xD6,0xE1,0xD5,0x04,0xD6,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0x04,0xF2,0xD6,0xD6, +0xD3,0x04,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x5A,0x04,0x04,0xDF, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x04,0xD0,0x00, +0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2, +0xD4,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x04,0x0A,0x0A, +0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0xD2,0xD8,0xF6,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDF,0xD8,0x55,0x00,0x00,0x00,0x59,0x04,0x60,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x53,0xEF,0x04,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04, +0xDE,0x00,0x04,0xDE,0x16,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00, +0x00,0x53,0xDF,0x04,0xDA,0xDE,0xD6,0xE1,0xF1,0x04,0xDC,0x57,0x00,0x00,0x00,0x00, +0x00,0xDF,0xDA,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04,0xDE,0x00,0x00,0x53, +0xD6,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x54,0xF3,0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xD9,0xD8,0x59,0xDE, +0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0x04,0xF2, +0xF3,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x00,0x00,0x00,0x00,0x09,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0x54,0xF3,0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04, +0xDE,0xF5,0x00,0x00,0x04,0xDE,0x60,0x04,0xDB,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3, +0x00,0x00,0x54,0xF3,0xE1,0x04,0xDB,0xD0,0xD6,0xD0,0xD9,0x04,0x16,0xDE,0x04,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0xC6,0x56,0xD8,0xD9,0xE1,0xD6,0xDB,0xD8,0x57,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x54,0x54,0xEF,0x04,0xD9,0xD0,0xD6,0xDE,0xD4, +0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0x04,0xDC,0xB3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x04,0x58,0x00,0x00,0x00,0xF7,0x04,0x04, +0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2,0xD9,0xF7,0x00,0x00,0x00,0x55,0xDB, +0xD7,0xF4,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0xDB,0x04,0xE1,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x3E,0x54,0x00,0xD5,0xD0, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xDC,0x00,0x00,0x00,0x56,0x04,0x58,0x00, +0x00,0x00,0x00,0x56,0xD9,0xF2,0xB8,0xF3,0xB8,0xD7,0xDA,0x56,0x00,0x00,0x00,0x00, +0x00,0xF4,0xD5,0xDF,0x00,0x00,0xD0,0x04,0x57,0x00,0x00,0x57,0x04,0xD0,0x00,0x58, +0x04,0xDE,0xF6,0x00,0x00,0xF3,0xD6,0x04,0xD6,0x00,0x59,0xD8,0xDC,0xF7,0x00,0x00, +0x00,0x00,0x00,0xF4,0xD5,0xD7,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD8, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x17,0x5A,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x56,0x04,0x58,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0xD9,0xD5,0x56,0x00,0x00,0x00,0x00,0x59,0xD8,0xDC,0xF4,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0xF7,0xFC,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xB8,0xD4,0xD3,0xF7,0x00,0x00,0x00,0x59,0xD8,0xD7,0xB3,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xDE,0x04,0x60,0x00,0x00, +0x00,0xF3,0x12,0x04,0xE1,0x54,0x00,0xF6,0xDC,0xD8,0x5B,0x00,0x00,0x00,0x53,0xDF, +0x04,0xD0,0x00,0x00,0x00,0x00,0xDE,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x56, +0xDA,0xD2,0x55,0x00,0x00,0x00,0x56,0xD9,0xD5,0xF5,0x00,0x00,0x00,0x00,0x00,0xF3, +0xD2,0xD8,0xB8,0x54,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0xF7,0x04,0x0A,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x0A,0xD9,0x04,0xF1,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0x04,0xDB,0xEF,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xD0,0x56,0x00,0x00,0x00,0x00,0x00,0xB3,0x04, +0x04,0xDC,0xF7,0x00,0x00,0x00,0xD0,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0xF6,0xD9,0xDE,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF7,0xD7, +0x04,0xB8,0x54,0x00,0x00,0xEF,0x04,0xD5,0xFA,0xF3,0x00,0x00,0x00,0x00,0xF5,0x17, +0xD9,0xDB,0x56,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD0,0x04, +0xD0,0xB3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0xDB,0x60,0xF4, +0x00,0x00,0x00,0x00,0xB3,0x5A,0xDC,0x04,0xD6,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xD6,0x04,0x59,0x54, +0x00,0x00,0xDF,0x04,0x60,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xD2, +0xF3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0xF4,0xDD,0x04,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0xDE,0x00,0x00, +0x00,0x59,0xD8,0xDB,0x5E,0xF4,0x00,0x00,0x00,0x00,0xF3,0xFA,0xDB,0xD8,0x59,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, +0x58,0xD9,0xDA,0xDF,0xF6,0x00,0x00,0x00,0x54,0xF6,0x04,0x04,0x04,0xDF,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x0D,0x04,0xEF,0x00,0x00,0x00,0xF3,0xD3, +0xDA,0x5D,0x00,0x00,0x00,0xF4,0xD0,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0xF7,0xD8,0xD5,0x56,0x00,0x00,0x00,0x53,0x60,0x04,0xF2, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xDE,0x04,0x04,0xD5,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x04,0xD9,0xF3,0x00,0x00,0x00,0x00, +0x00,0xD2,0x04,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00, +0x00,0x00,0x00,0x53,0xDE,0xDA,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD9,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0xD5,0xE1,0x00,0x00,0x00,0x00,0x55,0xDA,0xE1,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x0A,0x04,0xDE,0xF7,0x00,0x00,0x00,0x00,0x56,0xDC,0x04,0x04,0xDE,0x00,0x04,0x04, +0x04,0xD0,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xD0,0x00,0x00,0x00,0x0D,0x04,0xDE, +0xF7,0x00,0x00,0x00,0x00,0x5B,0xD9,0xD9,0xF7,0x00,0x00,0x00,0xDF,0x04,0xDE,0xF7, +0x00,0x00,0x00,0x00,0x57,0xDC,0x04,0x04,0xDE,0x00,0x00,0xEF,0x04,0xD6,0xF5,0x00, +0x00,0x00,0xF5,0xD6,0x04,0xD6,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0xE1,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7,0xDB,0xDC,0x55,0x00,0x00,0x00,0x04, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x54,0x54,0xE1,0x04,0xE1,0xF6,0x00,0x00,0x00,0xF3,0x0A,0x04,0xDE,0x53,0x00, +0x04,0x04,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xD6,0x04,0xD0,0x00,0x54,0x54,0xE1, +0x04,0xE1,0xF5,0x00,0x00,0x00,0xF6,0xE1,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0xDE,0xD8,0xF7,0x00,0x00,0xB8,0xD8,0xDE,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x57,0x04,0xF2,0xF6,0x00,0x00,0x00,0xB8,0xD5,0x04,0x04,0x00, +0x00,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF3,0xD5,0x04,0x04,0xD6,0x00,0x00,0x00,0x17,0x04,0x04,0xDA,0x55,0x00,0x00, +0x00,0x00,0x00,0x00,0xB8,0xD8,0xDE,0x00,0x00,0x54,0xD0,0x04,0x56,0x00,0x00,0x00, +0x00,0x00,0x00,0xEF,0x04,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0xD0, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0x3B,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x16,0x04,0xF6,0x54,0x00,0xF5,0x04,0x17,0x00,0x00,0x00,0x00,0xD0, +0xDA,0x55,0x00,0x00,0x00,0xF7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDB, +0xF5,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0xDE,0xD9,0xF6,0x00,0x00, +0x00,0x00,0x53,0xDE,0x04,0xEF,0xDA,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x5A, +0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x53,0xDD,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04, +0x58,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x5A,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x55,0xD2,0xD8,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0xB8, +0x54,0x00,0x00,0x00,0x00,0x17,0x04,0x5A,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x59,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, +0x04,0xB8,0x54,0xDF,0x04,0x16,0x09,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x56,0x00, +0x00,0x00,0x58,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00, +0x00,0x00,0x00,0x5E,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD9,0xD2,0xF3, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xF3,0x00,0x00,0x00,0x00,0x54, +0x00, +0x56,0xD0,0xDA,0x04,0xD2,0x5A,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x59,0xD2,0x04,0xDA,0xE1,0x56,0x54,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x5A,0xDA,0xFA,0x00,0xF4,0xF7,0xF5,0x54,0x54,0xF3,0xF7,0x04,0x04,0x0A,0xF7,0x00, +0x00,0x00,0x56,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, +0x59,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDF,0x00,0x00, +0xFA,0x04,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDB,0xD5,0x55, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xEF,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x04,0xD7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0xD2,0x04,0x60,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0xF4,0xD9, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x55,0xDB,0xDB,0xF7,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x59, +0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0x04,0x04,0xDE,0x00,0x00,0x57,0xDA,0xD3,0xF7, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD7,0xD8,0x57,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD9,0xD9,0x57,0x00, +0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x04,0x04,0xD9,0x56,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x59,0x04,0xDE,0xB3,0x00,0x00,0x00,0x58,0x04,0xE1,0x00,0x00,0x00, +0x00,0x00,0xF5,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0xD6,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x57,0x00,0x00,0x00, +0x00,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0xDC,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0x00,0x55,0x04,0x04,0x04, +0xDA,0xF6,0x54,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xDF,0x00,0x00,0x00,0x00,0x60, +0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF3,0xD7,0xD2,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x56,0x00, +0x00,0x00,0x00,0x53,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDE,0xF4,0x00, +0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0x04,0xDE,0x00,0x04,0x04,0xDE,0x53,0x00,0x00, +0x00,0x00,0x00,0x53,0xD0,0x04,0x58,0x00,0x56,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00, +0x00,0x00,0x57,0xD9,0xDE,0x00,0x00,0x56,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xDB,0x04,0xDE,0x00,0x56,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xD6,0x04,0x57,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0x04,0xD0,0x53, +0x00,0x00,0x00,0x00,0x00,0x53,0xD0,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, +0x04,0x5B,0x53,0xF5,0xD7,0xD9,0x56,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, +0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x57,0x04, +0xD0,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x5A,0x54,0x04,0x04,0xD0,0x53, +0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x58,0x00,0x57,0x04,0xD0,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xDB, +0xDE,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x04,0x00,0x00,0x00,0x00,0xB3, +0xDD,0xDE,0xF6,0xD9,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x04, +0x04,0xD5,0xB3,0x00,0x00,0xD2,0xD2,0xB8,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x17,0x04,0xFA,0x54,0x59,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xDB, +0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x5B,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x69,0xFF,0xAD,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56, +0x04,0x57,0x00,0x00,0x00,0xF1,0xD0,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00, +0x00,0x00,0xD2,0xDD,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0x60,0x00,0xDB,0xD2, +0x00,0x00,0x00,0xC6,0xF2,0xDB,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0xB8, +0x04,0x04,0xD2,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x55,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xC3,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00,0xD7,0xDB,0x53,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0x04,0x0A,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF6, +0xDE,0xDA,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0xD7,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0x04,0xD6,0x00,0xDB,0x04,0xD6,0x0A,0x0A,0x0A,0x0A,0x0A,0xDC,0x04,0x0A, +0x0A, +0x00,0xE1,0xD4,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0xD7, +0xDB,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x00,0x00,0xD2, +0xD5,0xF4,0x00,0x00,0x00,0x00,0x00,0xD5,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x55, +0x04,0xE1,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x60,0x04,0xDF,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x59,0xF2,0x04,0x04,0xD0, +0x57,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0x00,0x00,0x00,0x57,0xD0,0x04,0x04,0xDE,0x59,0x53,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xEF,0xFA,0x00,0x00,0x00,0x00,0x00,0xF6,0xDB,0xFA,0x00,0x60, +0xD9,0x04,0xDA,0xD6,0xB8,0xDD,0x04,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0xD2, +0xDC,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xF1,0xDC,0x53,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0xF6,0xDB,0xDB,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD6,0x5A,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xDA,0xF7,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0xD9,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, +0xDC,0xD9,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x04,0xDE,0x00,0x58,0x56,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0x04,0xDE, +0x09,0x00,0x00,0xF3,0xD2,0x04,0x58,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0xDE,0xD9,0xF5,0x57,0x04, +0x17,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0xF7,0xD9,0xD7,0xF4,0x04,0xDE,0x00,0xF3,0xDC,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0xDC,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xD7,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0xF4, +0x0D,0x04,0xFD,0xF7,0x57,0xDA,0xF1,0xF3,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7,0xDB, +0xD5,0x55,0x00,0x00,0x00,0x00,0xFA,0xDD,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0xD9,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xD7,0xDB,0xB3, +0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xD6, +0x04,0xF7,0xB3,0xDC,0xF2,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04, +0xDF,0xF7,0x04,0xDF,0x00,0x00,0x00,0x00,0x5A,0x04,0x04,0xDA,0x04,0x59,0x00,0x00, +0x00,0x00,0x00,0x00,0xB3,0xF2,0xD4,0xB8,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x54,0x57,0xDA,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF2,0xD2,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x54,0x5A,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, +0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x16,0x04,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF7,0x04,0xD0,0x54,0xE1,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xE1,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, +0xDE,0x54,0xE1,0xD9,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x5E,0x57,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0xD9,0xB8,0xD0, +0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xD0,0xDA,0x55,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x55,0xDA,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0xD0,0x00,0xD0,0x04,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x55,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0xDC,0xD5,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF1,0xF1,0x00,0x00, +0x00,0x00,0x00,0x00,0x53,0xDB,0x04,0x00,0x00,0x00,0x54,0x59,0x04,0x5A,0x00,0xD6, +0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0xF4,0x59,0x04,0x57,0x00, +0x55,0x04,0x17,0x00,0xD2,0xD7,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xD2,0xD9, +0xB8,0xD5,0xD7,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x60,0x57,0x04,0xDF, +0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xD7,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0x04,0xD0,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00, +0xF3,0x55,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0x56,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xD6,0x04,0xDE,0x0A,0x0A, +0x0A,0xDC,0xD5,0x0A,0x0A,0x0A,0x54,0x59,0x57,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDC,0xF3,0xD0,0x04,0x56,0x00,0x00,0x56, +0xDA,0xD0,0x00,0xDB,0xD2,0x54,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x04,0x59,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD3,0xF1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04, +0x58,0x00,0x00,0x00,0x00,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, +0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xF4,0xDE,0x04,0x17, +0x00,0x00,0x00,0x00,0x00,0xDE,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xD0, +0x00,0xFA,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x0A,0xD6, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0xD9,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0x5B,0x04,0x16,0x00,0x00, +0x00,0x00,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00, +0x00,0x54,0xB8,0x60,0x0D,0x5E,0x04,0xDA,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF5,0x60,0xF1,0x04,0xD9,0xD6,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0xE1,0xD8,0x04,0xD7,0xFA,0xF4,0x00,0x00,0x00,0x00,0x00,0x00, +0xF1,0xD7,0x00,0x00,0x00,0x00,0x00,0x17,0xDE,0x00,0x58,0x04,0xF1,0x60,0x17,0xF1, +0x04,0x04,0x56,0x55,0xEF,0xDC,0xF7,0x00,0x00,0x00,0x54,0x5B,0x04,0x59,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x60,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0xF5,0x04,0xD0,0x00,0x17,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x54,0xB8,0x04,0x0D,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xFA, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x5D,0x04,0xDF,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0x16,0x00,0x00,0xD6, +0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x54,0xB8,0x04,0xD6,0x00,0xC6,0xD7,0xDC,0xB3,0x00,0x00, +0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xDA,0x56,0x00, +0x04,0xDE,0x00,0xFA,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x60,0x04,0xFA,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x59,0x04,0x04,0x56,0xF5,0x53,0xF5,0x56,0xDF,0xD5,0x04,0xD0,0xF6,0x00, +0x00,0xEF,0x04,0xFA,0x00,0x04,0xDE,0x00,0x00,0xF3,0xD2,0x04,0x57,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD5,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF5,0x04,0xD0,0x00,0x00,0x00,0x00,0x09,0xF5,0xD9,0xDE,0x00,0x00,0xDF, +0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x56,0x00,0xDC,0xF2, +0x00,0x00,0x00,0x00,0xE1,0x04,0xF6,0xF6,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xD9,0xD7,0xF3,0x53,0xDE,0xDA,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF3,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xDB, +0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF3, +0xDC,0xDC,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDC,0xD5,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, +0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xD5,0x00, +0xDC,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC, +0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xDE,0x00,0xDC,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7, +0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xD2,0xDB,0x00,0x04,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7, +0xD5,0x00,0xDD,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x04,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDE,0x04,0x0D,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF2,0x04,0x00,0x00,0x00,0x00,0xDE,0xD5,0xF3,0x00,0x56,0x04,0xDF,0x00,0x00, +0x00,0x00,0x00,0x00,0xF6,0xD8,0xD6,0x00,0xF4,0xD9,0xEF,0x00,0x5E,0x04,0xF7,0x00, +0x60,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD8,0x04,0x04,0x56,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0xF6,0x00,0xD7,0xD5,0xF3,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0xD8,0xDE,0x53,0x00,0x00,0x00,0x00,0x00,0x5B,0x04,0xDF,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xDE,0xDB,0xF7,0xC6,0x00,0x0A,0xE1,0x00,0x54, +0x53,0x53,0x57,0xDE,0xD9,0xDE,0xF7,0x00,0x00,0x00,0x56,0xFF,0xFF,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xDC,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0xF7,0xD4,0x04,0x04,0x04,0xD9,0xD6,0xD6,0xD9,0xD5,0xF7,0x00,0xD0, +0xDA,0xB8,0x53,0x00,0x00,0x53,0xD6,0x04,0x04,0x04,0xD2,0x53,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, +0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A, +0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDD,0xE1,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xD0,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xD0,0x04,0x0A,0x53,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00,0x00,0xDE,0xD9, +0xF7,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0xDB,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0xF3,0xDC,0xF1,0xB3,0x00,0x00,0x00,0x00,0xD7, +0xDC,0x53,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xE1,0x00,0x00,0xF3,0xE1,0x04,0x04, +0x04,0x04,0x04,0x04,0xF1,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xDB,0x04,0x04,0x04,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x55,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x5A,0x00, +0x00,0x00,0x00,0xF2,0x58,0x00,0xE1,0x04,0xF7,0x00,0x00,0xF5,0xD2,0x04,0x59,0x54, +0x00,0xFA,0xD7,0xE0,0x00,0x00,0x00,0xF3,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x58, +0x04,0xDF,0x00,0xDE,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDC,0xD2,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD9,0xF4,0x00,0x00,0x00,0x0A, +0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6,0x04,0xD2,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0xDA,0x57,0x5B,0x04,0xD0,0x53,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0xD6,0x04,0xF7,0x00,0x00,0x16,0x04,0x59,0x54,0x00,0x00,0x04,0xDE,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xDF,0x00,0x00,0x04,0xDE,0x00,0xD0, +0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xD8, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x59,0x54,0x00,0x00,0x00,0x55,0x04,0xDE, +0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x04,0xDF,0x56,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04, +0xD0,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0x59,0x54,0x00,0x55,0xDA,0xD6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x54,0xDE,0xDB,0xB3,0x00,0x03,0xDA,0xF6,0x00,0x00,0x54, +0xDD,0xF2,0x00,0x00,0xF2,0xD5,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, +0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04, +0xDA,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD6,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6, +0xDB,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x17,0x04,0x59,0x54, +0x00,0x00,0x00,0x00,0x00,0x59,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xDE,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00,0xD8,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xDE,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0xDA,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x04,0xDE,0x56,0xDA,0x04,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00,0xDA,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0xF3,0xFA,0xD2,0x04,0xD8,0xEF,0xF3,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, +0x00,0x00,0xF7,0x04,0x0D,0x00,0x00,0x00,0xF2,0xD5,0xF3,0x00,0x00,0x00,0x00,0x00, +0x16,0x04,0x57,0x00,0x00,0xD0,0xDC,0x00,0xDE,0xD7,0x00,0x00,0x55,0xD8,0x0A,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0x04,0xE1,0x00,0x00,0xFA,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x17, +0x04,0x17,0x00,0x00,0x00,0x00,0xDC,0xDA,0x04,0xF5,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0xF7,0x04,0xDA,0xFA,0x00,0x5A,0x04,0xFA,0xF3,0x57,0xDE,0x04,0x04, +0x04,0x04,0xD5,0x55,0x00,0x00,0x4D,0xF9,0x69,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD0,0xD7,0x00,0x00,0x00,0x59,0x04,0xB8,0x54,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF5,0xD0,0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xE1,0x04,0x53,0xF7,0xD0,0xDB,0xDB,0xD0,0xF7,0x00,0x00,0x56,0xD4,0xDC,0xB8,0x54, +0xB3,0xE1,0x04,0xD0,0xF3,0x17,0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A, +0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDB,0xF3,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD6,0x04,0xE1,0x53,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xFA,0x00,0x00,0xF7,0xD9,0xD0,0x00,0x00,0x00, +0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56, +0x04,0xDF,0x00,0xDE,0xDB,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xEF,0x00, +0x00,0x00,0x00,0x00,0x16,0x04,0x5A,0x00,0x00,0x00,0x00,0xDF,0x04,0x5D,0x00,0x00, +0x00,0x00,0x00,0xE1,0x04,0x5A,0x00,0x53,0xD0,0x04,0xD0,0xB8,0xF3,0xF5,0x59,0xD3, +0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x04,0x04,0x04, +0xF7,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x55,0x04,0x04, +0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xDC,0xD9,0x56,0xC6,0x00,0x00,0xDB, +0xF6,0x00,0xD0,0x04,0xF3,0x00,0x00,0x00,0xF7,0xD9,0xD0,0x00,0x00,0x00,0xD0,0x16, +0xC6,0x00,0x00,0x00,0xDF,0x04,0xD0,0xEF,0xEF,0xEF,0xEF,0xEF,0xD0,0x04,0xD6,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0x00,0xF7,0xF1,0xD9,0xF7,0x00,0xDB, +0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDB,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xF6,0xD9,0xDE, +0x00,0x00,0x00,0xF4,0xDB,0xDE,0x54,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0xF7,0xD9,0xD2,0xF3,0x00,0x00,0x04,0xDE,0x00,0xDD,0xD2,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD5,0x00,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0xF2,0x17,0xF4,0x00,0x00,0xDC,0xF1,0x55,0x5A,0x17,0xEF, +0xDF,0x5D,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xD5,0x00,0x04,0xDE,0x00, +0xF7,0xD0,0xDE,0xD7,0xD8,0x04,0xDE,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x55,0xDF,0xD9,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0xD7,0xDC,0xB3,0x00,0x00,0x00,0xD0,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00, +0x00,0xF5,0xD8,0xD0,0x00,0x00,0x59,0x04,0x59,0x54,0x00,0xB8,0x04,0xDF,0x00,0x00, +0x17,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2,0x04,0x04,0xD2,0xF3, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDD,0x04,0x04,0xD0,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0x0D,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x55,0xD9,0xDE,0x54,0x00,0x00,0x00,0x00, +0x00,0xDE,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0xD5,0xD7,0x54,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0xDE,0x00,0xD5,0x04,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x04,0xDC,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD5,0xD2,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, +0xDE,0x00,0x17,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x53,0x00,0x00,0x00,0x00,0x00,0x17,0x04, +0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xDB,0xD2, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0x04,0xD7,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD7,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF6, +0xD2,0x04,0xD3,0x60,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0xEF,0x04, +0xF7,0x00,0x00,0x00,0x5D,0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0xF2,0xDC,0x53,0x00, +0x00,0x5B,0x04,0x57,0xD4,0xDF,0x00,0x00,0x00,0xD0,0xDB,0xF4,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0xD5,0x04,0xD9,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x57, +0x00,0x00,0xF4,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xD8,0xB8, +0x54,0x00,0x00,0xDB,0x04,0x04,0xF4,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7, +0x04,0xDA,0x16,0x00,0x00,0xD6,0x04,0x04,0x04,0xD9,0xD6,0x56,0xF4,0x5A,0xD8,0xD6, +0x00,0x00,0xFF,0xFF,0xD8,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x17,0xDA,0xF4,0x00,0x00,0xF7,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x0A, +0xDB,0x04,0xFC,0xF6,0x00,0x00,0x00,0x54,0x00,0x00,0x54,0x53,0xB8,0x04,0x58,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0xD8,0xEF,0xD0,0x04,0xD6,0x53, +0x00,0xF4,0xDC,0xDC,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x57,0x04,0x59,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD6,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, +0x5A,0xDA,0xF1,0xF4,0x00,0x00,0x00,0x17,0x04,0x5A,0x00,0x00,0x00,0xDE,0x04,0x00, +0x00,0x00,0x00,0xF7,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x56,0x00,0x5A, +0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0xF4,0xDB,0xD2,0x00,0x00,0x00,0x00,0xF4,0xD2,0xD8,0x17,0x55,0xB3,0xF7,0xE1,0x04, +0xDE,0xB3,0x00,0x5B,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0xF6,0xD3,0xD8,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xFA,0xD7,0x04,0xDA,0xD0,0xB8,0x00, +0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD6,0xD8,0x04,0xD7,0xFA,0xF4,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0xB8,0xDB,0xDB,0x56,0x00,0x00,0x04,0x53,0x00,0x0A,0x04, +0xF7,0x00,0x00,0x00,0x00,0xD6,0xDA,0x55,0x00,0x00,0x56,0xF2,0x00,0x00,0x00,0x00, +0x55,0xD8,0xD6,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0xF7,0x00,0x00,0x00,0x00,0x04, +0xDC,0x0A,0x0A,0xD6,0xE1,0xF2,0xDA,0xDB,0x57,0x00,0x00,0xDA,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, +0x54,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x56,0xD8,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x60,0x04,0x58,0x00,0x00,0x00,0x00, +0xEF,0x04,0xB8,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xF3,0xD2,0xD8, +0xB8,0x00,0x00,0x00,0x04,0xDE,0x00,0xDA,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0xD6, +0xD0,0xDB,0x04,0xD2,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0xF5,0x17,0xDA,0xD7,0xF3,0x00,0x00,0x00,0x00,0x55,0x60,0xDE,0xDA,0x04,0xB6,0xB8, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x57,0x04,0xDF, +0x00,0x00,0x00,0x00,0x58,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x5C, +0x00,0x00,0xF6,0xDA,0xD6,0x00,0x00,0x60,0x04,0x56,0x00,0x00,0x56,0x04,0x17,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x58,0xD6,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF4,0xDC,0xD2,0x53,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x03,0x04,0xB8,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xFA,0x04,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x55,0x04,0xD0,0x00,0xD0,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, +0xF5,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, +0xDE,0x00,0xD0,0x04,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0x04,0xD0,0x54, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0xD4,0x55,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0x04,0x00,0x04,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC, +0xD7,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x53,0xD0, +0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00, +0x00,0x00,0xD2,0x04,0xF6,0x00,0x00,0x00,0x00,0x00,0x0D,0x04,0xB8,0x00,0x04,0xF1, +0x54, +0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD5,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF7,0x04,0xD0,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0x04,0xD0,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF7,0x04,0x04,0x00,0x04,0xD2,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xDF,0x53,0x00, +0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0xF4,0xDB,0xDE,0x00,0x00,0x00,0x00, +0xF4,0xDB,0xDE,0x54,0x00,0x00,0x00,0xF7,0x04,0xDF,0x00,0x00,0x00,0xF6,0xD8,0x04, +0x04,0xB8,0x00,0x00,0x00,0x59,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD8, +0x5A,0xD8,0xDE,0x53,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0x00,0x00,0x00,0xEF, +0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDB,0xD7,0xF4,0x00,0x00,0x53, +0x16,0x04,0x17,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD2,0xD9,0xF7,0x00,0x00, +0x00,0x00,0x5A,0xDF,0x5D,0xF6,0x00,0x00,0x00,0x00,0xFA,0x56,0x00,0x00,0xFF,0xFF, +0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xB8,0x00, +0x00,0xB3,0x04,0xEF,0x00,0x00,0x00,0x00,0xF7,0xDE,0x04,0xDA,0xD9,0xD6,0xF6,0x00, +0x00,0x00,0x00,0x57,0xDF,0xDF,0x57,0x00,0x54,0xDE,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xF7,0xD0,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x5D,0x04, +0x17,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0xF4,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x58,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53, +0xD5,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xD0,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0xFA,0xD6,0xD2,0x04,0xF1,0xF7,0x00, +0x00,0x00,0x00,0xB3,0xD2,0xD5,0xF6,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xD7, +0xDA,0x5E,0x00,0x00,0x00,0xF3,0x0A,0x04,0xD0,0x00,0x00,0x53,0xD2,0xD8,0x5A,0x00, +0x00,0x00,0x53,0xDF,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57, +0x00,0x00,0x00,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xDE, +0xD8,0xF6,0x00,0x00,0x00,0x00,0x00,0x53,0x59,0x04,0x17,0x00,0x04,0xDE,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0xDE,0x04,0x04,0xDE,0x58,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, +0x00,0x57,0xD0,0x04,0x04,0xDE,0x58,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x54,0xB8,0xDB,0xD9,0xF7,0x00,0xD9,0xF6,0x00,0x58,0x04,0x17,0x00,0x00,0x00, +0x00,0x56,0x04,0x17,0x00,0x00,0xF4,0xD9,0x00,0x00,0x00,0x00,0x54,0xE1,0xD9,0xF6, +0x00,0x00,0x09,0xF5,0xDB,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xC6,0xF2,0xD9,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0x0A,0x00,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x57,0x00,0xD9,0xD2,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xDC,0x04,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xFA,0x04,0xE1, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x53,0xF1,0xD3,0x53,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00, +0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xDF,0x04,0x17,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xD2,0xD5,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xE1,0x04, +0xDF,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF2,0xDB,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04, +0x5D,0x00,0x00,0x00,0xDF,0xD8,0x04,0xD2,0xDF,0xB8,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00, +0x53,0xDC,0xD7,0x54,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x55,0x00,0x00,0x00,0xF2, +0xD3,0x00,0x00,0xD0,0xDB,0xB3,0x00,0x00,0x53,0xD5,0xF2,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDF,0x04,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF5,0xDB,0xF2,0x00,0x55,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x5A,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x53,0xDC,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x54,0xB8,0x04,0xD6,0x00,0x00,0x00,0x00,0xD6,0x04,0x56,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x57,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5,0x04, +0xDE,0x00,0x04,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x54,0x00,0xD0,0x04,0x57,0x00, +0x57,0x04,0xDE,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDE,0x00,0x00,0x57, +0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0x04,0xDE,0x00,0x58,0x04, +0xD6,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x12,0x04,0x57,0x00,0x00,0x00,0x04,0xDE, +0x00, +0x00,0x00,0x00,0x59,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04, +0x04,0x00,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xE1,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0xF6,0xDC,0xDB,0xF7,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x55,0xDA,0x04, +0x5A,0x00,0x00,0x00,0x00,0x00,0xD2,0xD8,0xF4,0x00,0x04,0x04,0xB8,0x00,0x00,0x00, +0x00,0x00,0x56,0x04,0xD0,0x00,0x59,0x04,0xD0,0x54,0x00,0x00,0x00,0x00,0x54,0x53, +0xD0,0x04,0x58,0x00,0x04,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x54,0x53,0xD0,0x04, +0x57,0x00,0x58,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x00,0x53,0xD0,0x04,0x04,0x00, +0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0xD0,0x04,0xF4,0x00,0x00,0xF4,0x5B,0x56,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDE,0x04,0x00,0x00,0x5B,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0xB8, +0x00,0x00,0x00,0xDF,0x04,0xF7,0x00,0x00,0x00,0x00,0xDE,0x04,0xDC,0x00,0x00,0x00, +0x00,0xF3,0xD5,0xD0,0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0xDF,0x00,0x16,0x04,0x17, +0x54,0x00,0x00,0x00,0x5B,0x04,0x60,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x0A,0x54,0x00,0x00,0xF3,0x04,0xD0,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0xFF,0xFF,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x58,0xFA,0x04,0xDF,0x58,0x58,0x58,0x04,0xF2, +0x58,0x58,0x00,0xF5,0xDC,0x04,0xD2,0xFA,0xF6,0x00,0x00,0x00,0x00,0xF3,0xD0,0x04, +0xDA,0x04,0x04,0xD0,0xF3,0x57,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xD6,0x04,0xDE,0xDB,0xDA,0xDF,0x53,0x00,0x53,0xD2,0xDC,0xF6,0x00,0x00, +0x00,0x00,0x00,0x17,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3, +0x04,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD9,0xF3,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xDE, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00, +0x56,0xDA,0xD6,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xE1,0x04,0x04,0xD3,0xD6, +0xE1,0xDC,0x04,0xDE,0xF5,0x00,0x00,0x00,0xB8,0xD8,0x04,0xD2,0xD6,0xD6,0xF1,0x04, +0xF2,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x54,0x00,0x00,0x00, +0xF6,0x04,0x04,0xDE,0xD6,0xD0,0x04,0x04,0x55,0x00,0x00,0xDB,0xF2,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF5,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0xB8,0xE1,0xD8,0x04,0xD2,0x5C,0xF3,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x5A,0xD2,0x04,0xD4,0xE1, +0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x57, +0x04,0xE1,0x00,0xD2,0x59,0x54,0x53,0xD7,0xDB,0xF7,0x00,0x00,0x00,0x53,0x04,0xD3, +0x00,0x00,0xF4,0xD8,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0x17,0x00,0x00,0x00,0x16, +0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xB3,0x55,0x5A,0xDC,0xDB, +0xF7,0x00,0x00,0xDE,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xB3,0xD9,0xD2,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xDA,0xF5,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x17,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x58,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x54,0xD0,0xD9,0xF6,0x00,0x04,0xDE,0x00, +0x04,0xDE,0x00,0x00,0x56,0xDA,0xDE,0x53,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xDE, +0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xDA, +0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0xD7,0xD9, +0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xD9,0xDE, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0xE1,0x00,0x00,0xFA, +0x04,0xD0,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x55,0xD8,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDA,0x57, +0x54,0x00,0x00,0x00,0x54,0xDC,0xD2,0x00,0x00,0x00,0x00,0xDF,0x04,0xF7,0xF3,0xD9, +0xD0,0x00,0x00,0x00,0x00,0xE1,0x04,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD4, +0x04,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57,0x54, +0x00,0xEF,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDB,0x55, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x58, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xDE,0x00,0x00,0x00,0x00,0xDE,0xD9, +0xF6,0x00,0x00,0xF5,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xD6, +0x04,0xDE,0xF7,0x00,0x00,0x00,0x00,0x57,0xF1,0x04,0x04,0xDE,0x00,0x04,0x04, +0x04,0xD0,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xE1,0x00,0x00,0x00,0x0A,0x04,0xD0, +0x55,0x00,0x00,0x00,0x00,0x59,0xDB,0xDB,0xF7,0x00,0x00,0x00,0x0A,0x04,0xDE,0x55, +0x00,0x00,0x00,0x00,0x59,0xD5,0x04,0x04,0xDE,0x00,0x00,0xD0,0x04,0xEF,0xF4,0x00, +0x00,0x00,0xF5,0x12,0x04,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0xD0,0x04,0xD6,0xF4,0x00,0x00,0x00,0xF6,0xE1,0xD4,0x04,0x04,0x00,0x04,0x04, +0xD7,0xF7,0x00,0x00,0x00,0x55,0xD7,0x04,0x56,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x56,0xDA,0xD2,0xF3,0x00,0x00,0x00,0x04, +0xDE,0x00,0x04,0x04,0xD0,0xF3,0x00,0x00,0xF4,0xD0,0x04,0x04,0xDC,0xF7,0x00,0x00, +0x00,0x5E,0x04,0xE1,0x00,0x00,0x04,0x04,0xD7,0xF7,0x00,0x00,0x00,0xF7,0xD7,0x04, +0x59,0x00,0x00,0xD0,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xE1,0x04,0xD0,0x00,0x00, +0x04,0x04,0x04,0xE1,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xE1,0x00,0x00,0x00,0xD0, +0x04,0xE1,0xF5,0x00,0x00,0x00,0xF6,0xE1,0x04,0x04,0x04,0x00,0x04,0x04,0xDE,0xF6, +0x00,0x00,0x00,0x0A,0x04,0x57,0x53,0x00,0x5A,0x04,0xDF,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, +0x54,0xF2,0xDD,0xB3,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x54,0x53,0xDC, +0xF2,0x00,0x00,0x00,0x00,0x00,0xFA,0xDA,0xEF,0x00,0x00,0x00,0x00,0x00,0xEF,0xDA, +0x55,0x00,0x00,0x00,0xF7,0xD9,0xD2,0xB3,0x00,0x00,0xDE,0xD8,0xB8,0x54,0x00,0x54, +0xF2,0xD8,0xF6,0x00,0x00,0x00,0x00,0x54,0xD0,0xD8,0x55,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xD6,0x04,0x57,0x54,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x74,0xEC,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0xDA,0x04,0x04,0xDA,0xDA,0xDA,0x04,0x04,0x04,0x04,0x00,0x60, +0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xD6,0xF6,0xF6,0xD6,0x04, +0xDF,0x00,0xD2,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0xD6, +0x00,0xF6,0xD0,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55, +0xD4,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0x00,0x00, +0x56,0x58,0x00,0x57,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x59,0x54,0x00,0x00,0xD9,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0xD0,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xD9,0x00,0x00,0x00,0x00, +0x00,0x00,0xF3,0x56,0xD2,0xD8,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x57, +0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x60,0x04,0xDF,0xDE,0xDB,0xD9,0xF2,0x16,0xF3, +0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0xDC,0xD9,0xD2,0x17,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0xB8,0x54,0x00,0x00,0xE1,0x04,0x5A,0x00, +0x00,0x00,0x59,0x04,0xD0,0x00,0x00,0xD9,0xDE,0x54,0x00,0x00,0x00,0x00,0x00,0x00, +0xF3,0x04,0xD0,0x00,0xD5,0xD0,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x55,0xDF,0xDB,0x04,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x04,0xDB,0x0D,0x55,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x57,0xEE,0xF5,0x54,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0xDF, +0xDE,0x00,0x00,0xB8,0xD8,0xD3,0xF7,0x00,0x00,0xF7,0x04,0x04,0x57,0x00,0x57,0xD7, +0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDD,0xF3,0x54,0x53,0xD3,0xD7,0x53,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x17, +0x04,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x0D,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0xDE,0x00,0x00,0xF3,0xDE,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD0,0xD9,0xF5,0x00, +0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x60,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0xF4, +0xD7,0xD9,0xF7,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xFA,0x04,0x60,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xFA,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x0A,0x04,0x5B,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x17,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xD0,0x00,0x00,0xD7,0xD5,0xF4,0x00,0x00, +0x00,0x00,0x00,0x00,0x53,0x54,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x17,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xD0,0x00,0x00,0x00,0x00, +0xB8,0x04,0xDF,0x00,0x00,0x00,0x00,0x56,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x00, +0x00,0x5A,0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0xF3,0xD2,0xD8,0xB8,0x55,0xD9,0xD7, +0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x00,0x00,0x00,0xF6,0xD9,0xF2, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xE1,0x00,0x00,0x00,0x00, +0xDB,0xB6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD7,0x53,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x55,0x04,0xD0,0x00,0x00,0x00,0x00,0x59,0x04,0x60,0x00,0x00,0x16, +0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDF,0x04,0xDA, +0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04,0xDE,0x00,0x04,0xDE,0xFA,0xD4,0xD9,0xD0, +0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00,0x00,0x53,0xDF,0x04,0xD8,0xDE,0xD6,0xD6, +0xD7,0x04,0xDC,0xB8,0x54,0x00,0x00,0x00,0x00,0xDF,0xDA,0xD8,0xDE,0xD6,0xE1,0xD7, +0x04,0xD5,0x56,0x04,0xDE,0x00,0x00,0xF3,0xE1,0x04,0xDB,0xD0,0xD6,0xD0,0xDB,0xDA, +0xD6,0xF3,0x00,0x00,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x0A,0x00,0x00,0xF4,0xD0,0x04, +0xDB,0xD0,0xD6,0xD0,0xD9,0xD9,0x59,0xDE,0x04,0x00,0x04,0x04,0x04,0xD9,0xD0,0xD6, +0xD0,0xD9,0x04,0x17,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x17,0x04,0x12,0x54,0x00,0x00,0x04,0xDE,0x00,0x04,0x04, +0x04,0xDC,0xD6,0xD6,0xDC,0x04,0x60,0xB8,0xDB,0xD9,0xD0,0xD6,0xF2,0x04,0xD7,0x55, +0x00,0x00,0x04,0x04,0x04,0xD9,0xD0,0xD6,0xD0,0xD9,0x04,0xDF,0x00,0x00,0x00,0xF3, +0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xD0,0xF4,0x00,0x00,0x04,0xDE,0xFA,0xD4, +0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00,0x00,0xF3,0xE1,0x04,0xD9,0xD0, +0xD6,0xD0,0xDB,0x04,0x60,0xDE,0x04,0x00,0x04,0x04,0x04,0xDB,0xD6,0x56,0x00,0xF7, +0xDB,0xD9,0xE1,0xE1,0xD9,0xD5,0x55,0x00,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xB8,0x04,0xDF,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0xF5,0x00,0x57,0x04,0xF9,0x00,0x00,0x00, +0x00,0x00,0xF6,0xF9,0xF7,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0x17,0x00,0x00,0x53, +0xDE,0xD9,0xF7,0x00,0x00,0x00,0x55,0xDB,0xD7,0xF3,0x00,0xB8,0x04,0xD0,0x00,0x00, +0x00,0x00,0x00,0x00,0x57,0x04,0xDF,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6, +0x04,0xDD,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x3B,0x56,0x94,0x00,0x04,0xDE,0x00,0x04,0xDE,0xDE,0x04,0x53,0xF6,0x55, +0x55,0xDE,0xDE,0x55,0x55,0x55,0x17,0x04,0xB8,0x55,0x00,0xD0,0xDA,0xF6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDD,0xD3,0x53,0x00,0x00,0x53,0xF1,0xDC,0x00,0x5A,0x04, +0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0xD5,0xF4,0x00,0x00,0xF3,0xDC, +0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x58,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x5A,0x00,0x00,0x00,0x17,0xDD,0x55,0xDC, +0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x53,0xD5,0xE1,0x00,0x00,0x00,0xD7,0xD5,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0x04,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD5,0xD7,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDB,0x00,0x00,0xF4,0xF3,0x00,0x00,0x00,0x00, +0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xF1,0xD7,0xF4,0xDE,0x04,0x00, +0x00,0x00,0x00,0x57,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xB3,0xF2,0xDA,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0xDA,0xE1,0x00,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0xD2, +0xD9,0x00,0x00,0xD7,0xD5,0x53,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0xEF,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF5,0x16,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDC,0x16,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16, +0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x55,0xD9,0x60,0x00,0x00, +0x58,0xD9,0xD8,0xD0,0xD6,0xDD,0xDE,0xD7,0xE1,0x53,0xDE,0xDF,0x00,0x00,0x00,0x00, +0x00,0x00,0x5A,0x04,0x5B,0x00,0x58,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x00,0xF6,0xDB,0xD5,0x55,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x56,0xD6,0x58,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xD2,0xDA,0xF7,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xD8,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7, +0xE1,0x0D,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x55,0xDC,0xDB,0xF7,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xD7,0xD3,0x53,0x04,0xDE,0x00,0x04,0xDE,0x00,0x0A,0x04,0xFA,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF4,0xF1,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xDC,0xF3,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF2,0xD8,0x00,0xF7,0xDA,0xDC,0xF6,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF6,0xDC,0xD9,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0xE1,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0x17, +0x59,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xB3,0xDC,0xDC,0xB3,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD4,0x55,0x00,0x00,0x00,0x17,0x04,0x57,0x00, +0x00,0x00,0x00,0xB3,0xDB,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0xF6,0x04,0xE1, +0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xDF,0x00,0x00,0xFA,0x04,0xEF,0x00,0x00,0x00, +0x00,0x00,0x00,0xEF,0x04,0x57,0x00,0x00,0x00,0x00,0xDF,0x04,0x59,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xDA,0x56,0x00,0x00,0x00,0xD2,0xDB,0xB3,0x00, +0x00,0x00,0x00,0x00,0xF7,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x57, +0x04,0xD6,0x00,0x00,0x00,0x00,0xB3,0xDC,0xF1,0x53,0x00,0xD7,0xDD,0xF3,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD7,0xD9,0xD9,0xF2, +0x17,0xF4,0x00,0x04,0xDE,0x00,0x04,0xDE,0x54,0xB8,0xE1,0xDD,0xDA,0xD5,0xD0,0x58, +0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD3,0xD9,0xD9,0xF2,0x17,0xF5,0x00, +0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD7,0xD9,0xD9,0xD2,0xDF,0xF6,0x00,0x04, +0xDE,0x00,0x00,0x00,0x54,0x57,0xD0,0xDD,0xD8,0xDC,0xD0,0x57,0x00,0x00,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x59,0xD0,0xD5,0xD8,0xDC, +0xD6,0xF7,0x00,0xDE,0x04,0x00,0x04,0xDE,0xF5,0xDF,0xD3,0xD9,0xD5,0xD0,0x57,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x53,0xDE,0x04,0x59,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x55,0xD0,0xDB,0xD9, +0xDE,0x59,0x00,0x00,0xF7,0xD0,0xDB,0xD8,0xF1,0xEF,0xF6,0x00,0x00,0x00,0x04,0xDE, +0xF3,0x60,0xD2,0xD9,0xD5,0xD0,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0xD0,0xDC, +0xD8,0xD5,0xD0,0x59,0x00,0x00,0x00,0x00,0x04,0xDE,0x54,0xB8,0xE1,0xDD,0xDA,0xD5, +0xD0,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xD0,0xDD,0xD8,0xD5,0xD0,0x56, +0x00,0xDE,0x04,0x00,0x04,0xDE,0xB8,0xD7,0x04,0x17,0x00,0x00,0xF7,0xD0,0xD9,0xDB, +0xD0,0xF7,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xD6,0x04,0x55,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x58,0x04,0xFA,0x00,0xE1,0xD8,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD7,0x00,0x00,0x60,0x04,0x60,0x00,0x00, +0x00,0x00,0x00,0x5D,0x04,0x0D,0x00,0xD6,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xD7,0xD5,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x8C, +0x3B,0x00,0x04,0xDE,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0xEF,0xDB,0x00, +0x00,0x00,0x56,0x04,0x58,0x00,0x00,0xD0,0x04,0xF3,0x00,0x00,0x00,0x00,0xD0,0xD7, +0x00,0xD9,0xDE,0x00,0x00,0x00,0x54,0xDE,0xD9,0x00,0xF3,0xDC,0xD6,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x53,0xDE,0xD9,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xF6,0xD5,0xDD,0x55,0x00,0x00,0x00,0x00, +0x54,0xB8,0xD9,0xDE,0x53,0x00,0x00,0x00,0xB3,0x04,0x04,0x04,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xD6,0xD9,0xF4,0x00,0x00,0xD6,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0xDF, +0x04,0x5E,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00, +0x00,0x55,0xDA,0xDE,0x00,0x00,0xDE,0xD3,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00, +0x00,0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xF6, +0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9, +0xD0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, +0xD4,0x55,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0x00,0xDF, +0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x57,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00, +0x00,0x00,0x00,0xF6,0xD9,0xF2,0x00,0x00,0x5B,0xDA,0x5E,0x00,0x00,0xF7,0xE1,0xD5, +0xD9,0xD0,0x55,0x00,0xF3,0x04,0xD5,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xDD, +0xD2,0x00,0xDE,0xDB,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x55,0x04,0xE1,0x00,0x00,0x00,0xFA,0x04,0xD2,0x55,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x09,0xB8,0xD5,0xDB,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF3,0xE1,0x04,0xEF,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04, +0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD2,0x04,0x59,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x54, +0xB8,0xD9,0xD7,0xF5,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x16,0x04, +0x04,0x04,0xDE,0x00,0x04,0xDE,0x57,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x56,0xD8,0xD7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xF7, +0xDC,0xDA,0x57,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xD9, +0xF1,0x00,0x00,0xDF,0x04,0xF2,0xF6,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55, +0xF2,0x04,0x16,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, +0xFA,0x00,0x00,0xDC,0xDC,0xB3,0x00,0x00,0x00,0x54,0xF7,0x04,0xD6,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x59,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x57,0x04,0xDF,0x00,0x00,0x54,0xDE,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00, +0xD0,0x04,0x04,0xD3,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDB,0x53,0x00,0x00,0xC6, +0xB8,0xD8,0xD2,0xB3,0x00,0x00,0x00,0xDE,0x04,0x56,0x00,0x00,0x00,0x00,0x55,0xD9, +0xDE,0x00,0x00,0x00,0x00,0x00,0xF5,0xDB,0xD7,0x53,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xF6,0xD9,0xD2,0xB3,0x00,0x00,0x17,0x04,0x59,0x00,0x00,0x00,0x00,0x00, +0xC3,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x5A,0x00,0x00, +0x00,0x00,0x00,0x17,0x04,0x59,0x57,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0xC8,0xE3,0x00,0x04,0xDE, +0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x5A,0x04,0xF7,0x00,0x00,0xF5,0x04, +0x17,0x00,0x00,0x17,0x04,0x57,0x00,0x00,0x00,0xF4,0xDB,0xDE,0x00,0xDE,0xDA,0x56, +0x54,0x00,0xB8,0xD4,0xDE,0x00,0x00,0x16,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xDE,0xD9,0xF7,0x54,0x00,0xB8,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0xDE,0x00,0x00,0x00,0x57,0x04,0xD2,0x55,0x00,0x00,0x00,0xF7,0xDC,0xD5,0xF7, +0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x59, +0x00,0x00,0xF7,0xD9,0xDD,0x56,0x00,0x00,0x00,0x00,0x5C,0xD4,0xDC,0xF5,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x56,0x04,0xD7,0x55,0x00,0x00,0x00,0x55,0xD2,0x04,0x57, +0x00,0x00,0xEF,0x04,0x59,0x00,0x00,0x00,0x17,0x04,0x17,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xDC,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04,0x16,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xEF,0x00,0x00, +0xD0,0x04,0x59,0x00,0x00,0x00,0x59,0xDA,0xD0,0x00,0x00,0xF6,0xD5,0xDB,0x57,0x00, +0x00,0x00,0xF3,0xDF,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD7,0xD8,0x5A,0x54,0x00,0x54,0xF5,0xD0, +0x04,0x5A,0x00,0x00,0x00,0x17,0x04,0xDE,0x56,0x00,0x00,0x00,0x00,0x00,0xB3,0x59, +0xD7,0xDB,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x60,0x04,0x0A, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xB3,0xD6,0x04, +0x5D,0x00,0x00,0x00,0x00,0xDF,0x04,0xDD,0x5A,0xF3,0x00,0x00,0x00,0x00,0xF4,0x60, +0xD9,0xD9,0x56,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0x00,0xB3,0x58,0xD2,0x04, +0xD0,0xB3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x53,0xD0,0x04,0xDB,0xFA,0xF3, +0x00,0x00,0x00,0x00,0xB3,0x5A,0xDC,0x04,0x60,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x5B,0x04,0xD0, +0x53,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xDB,0x04,0x04,0xDE,0x00, +0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x59,0xD9,0xDB,0x5E,0xF4,0x00,0x00,0x00,0x00,0xF5,0x17,0xD9,0xD8,0x59,0x54, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF4,0xD0,0x04,0xEF,0x00,0x00,0x53, +0xD6,0x04,0xDC,0x5A,0xF3,0x00,0x00,0x00,0x00,0xF3,0x5C,0xDD,0x04,0xEF,0x00,0x00, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xFA,0xD8,0xDC,0xF5,0x00,0x00,0xDF, +0x04,0x0D,0x53,0x00,0x54,0xF5,0xDE,0x04,0x57,0x54,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0xDE,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD3, +0xD5,0xF3,0x00,0xF5,0xD4,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04,0x04,0xD6, +0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x56,0x00,0x00,0xB3,0xD2,0xD8,0xB8,0x54, +0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00,0x00,0xD6,0x04,0x56,0x00,0x00,0x00, +0x00,0x00,0x00,0x17,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16, +0x04,0x5E,0x00,0x00,0xF6,0xDB,0xDB,0x56,0x00,0x00,0x00,0xF5,0xDB,0xD6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x53,0x17,0x04,0xD7,0xF3,0x00,0x00,0x00,0x00,0x00,0xF6, +0xD9,0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xFA,0x5D,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xD2,0xD8,0xF7,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x00, +0xD5,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00,0x04,0xDE, +0x00,0x00,0x55,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x04,0xDE,0x00,0x04,0x04,0x04, +0x04,0x00,0x00,0x00,0x00,0xF7,0x04,0x59,0x54,0x00,0x00,0xD3,0xD0,0x00,0x00,0xF6, +0xF1,0xD3,0x56,0xF3,0x55,0xD0,0x04,0x5A,0x00,0xB8,0xDB,0xD9,0xE1,0xE1,0xD9,0xDB, +0xB8,0x54,0x00,0xF4,0xDB,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD9,0xDB, +0xE1,0xE1,0xD9,0xD9,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, +0x00,0x00,0x59,0xD9,0xDC,0x56,0x00,0x57,0xDB,0xD5,0xB8,0x54,0x00,0x00,0x00,0x0A, +0x0A,0x04,0x04,0x04,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD5,0xE1,0x00,0x00,0x00,0x59, +0xD8,0x04,0xDE,0xD6,0xD6,0xD7,0x04,0xD5,0xB8,0x54,0x00,0x0A,0x0A,0x0A,0x04,0xDE, +0x00,0x00,0x5E,0xD4,0xD9,0xD0,0xD6,0xD0,0xD9,0x04,0x60,0x00,0x00,0x00,0x55,0xDC, +0xD4,0xD0,0xD6,0xDE,0x04,0xD7,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, +0xD5,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +0xF7,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0xB8,0x54,0x00,0x00,0x00,0x00, +0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x04,0xD9,0x00,0x00,0x55,0xF1,0x04,0xDE, +0xD6,0xDE,0x04,0xDC,0x55,0x00,0x00,0x00,0xB8,0xD5,0x04,0xDE,0xD6,0xE1,0xDC,0x04, +0xDE,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x56,0xDB,0x04,0xD2,0xD6,0xE1,0xD5,0x04,0xD6,0x00,0x00,0x00, +0x00,0x00,0x58,0xDC,0x04,0xDD,0xD0,0xD6,0xD6,0xD0,0xDB,0x04,0xDE,0xF7,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD9,0x04,0x04,0xF7,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0xD6,0xD0,0xDD,0x04,0xDE,0xB3,0x00,0x00,0x00, +0x00,0x00,0x5D,0xDB,0x04,0xDB,0xD0,0xD6,0xD6,0xDE,0xD9,0x04,0xD2,0xF7,0x00,0x00, +0x00, +0x04,0xDC,0x0A,0x0A,0xD6,0xE1,0xDE,0xDB,0x04,0xD9,0x17,0x53,0x00,0x00,0x00, +0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x57,0x54,0x04,0xDC,0x0A,0x0A,0x0A, +0x0A,0x0A,0x0A,0x57,0x54,0x00,0x00,0xB3,0xEF,0x04,0x04,0xD9,0xDE,0xD6,0xD6,0xD0, +0xDB,0x04,0xD7,0x57,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, +0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x0D,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x58,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x04,0xDE,0x00,0x04,0x04,0x04,0x5A, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xB8,0xD2, +0x04,0xD9,0xDE,0xD6,0xD6,0xDE,0xD9,0x04,0xD7,0x56,0x00,0x00,0x00,0x00,0x04,0xDC, +0x0A,0x0A,0x12,0xD6,0xDE,0xDB,0x04,0xD2,0xF5,0x00,0x00,0x00,0x00,0x5E,0xDB,0x04, +0xDB,0xD0,0xD6,0xD6,0xD0,0xDB,0xDA,0xDB,0x5C,0x00,0x00,0x00,0x00,0x04,0xDC,0x0A, +0x0A,0x12,0xD6,0xDE,0xDB,0x04,0xDC,0xB8,0x54,0x00,0x00,0xF4,0xDE,0x04,0xD7,0xD6, +0xE1,0xD5,0x04,0xD6,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x0A,0x0A, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF7,0x04, +0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x5A,0x54,0x59, +0x04,0xF9,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x58,0x00,0x00,0x00,0x00, +0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x17,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00, +0x16,0x04,0xDF,0x00,0x00,0xF7,0xDA,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, +0xDD,0xF1,0xF3,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6,0x04,0xDB,0x00,0x00, +0x00,0x57,0xD9,0xDA,0x5A,0x00,0x00,0x16,0x04,0xB8,0x54,0x00,0x00,0x00,0x00,0x00, +0x00,0xD2,0x04,0xD3,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x04,0xC1, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x58,0xD7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x57,0xD4,0xD8,0xD0,0xD6,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xD0,0x57,0x00,0x04,0xDE,0x00,0x0A,0xD7,0x04, +0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x9D,0x3B,0xD8,0x00,0x04,0xDE,0x00,0x04,0xDE,0xDE,0x04,0x00,0x00,0x00, +0x00,0x53,0xDB,0xDF,0x00,0x00,0x00,0xD0,0xDC,0x00,0x00,0x00,0x55,0xDE,0x04,0x04, +0x04,0xD8,0x17,0x00,0x00,0x00,0xF7,0xD0,0xDB,0xDB,0xD0,0xB8,0x00,0x00,0x00,0x00, +0xDF,0xDB,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD0,0xD9,0xDB,0xD0,0xB8, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF7, +0xD0,0x17,0x00,0x17,0xD0,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04, +0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD9,0xF4,0x00,0x00,0x00,0xF7,0xD6,0xD7,0xD9, +0xD9,0xD2,0xDF,0xF6,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x54,0xB8, +0xE1,0xDC,0xD8,0xDC,0xD0,0x56,0x00,0x00,0x00,0x00,0x00,0x55,0xD6,0xD5,0xD8,0xF1, +0xEF,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x04,0x00, +0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x55,0xD5,0xD7,0xF4,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x12,0xDC,0xD8,0xDC,0xD6,0x55, +0x00,0x00,0x00,0x00,0x00,0xF6,0xDF,0xD7,0xD9,0xDB,0xDE,0x5D,0x53,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0xF7,0xE1,0xDD,0x04,0xDB,0xDE,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3, +0x5B,0xD0,0xF1,0xD8,0xD9,0xD7,0xD6,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xD6,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0x04,0x04,0x04,0xD9,0xDC,0xDE,0xFA,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, +0x16,0xD0,0xDD,0xD8,0xD9,0xD7,0xE1,0x58,0x53,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0xD8,0xDB,0xD7,0xD0,0x5E,0xF6,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, +0x00,0x00,0x00,0x00,0x54,0xB8,0x0A,0xD7,0xD9,0x04,0xD9,0xD7,0xD6,0x59,0x53,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, +0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, +0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDE,0x04,0x5A,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xD3,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xF7,0x04,0x04,0xDE,0x00,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0x58,0xE1,0xD3,0xD8, +0xD8,0xF1,0xE1,0x59,0x53,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xD9, +0xDC,0xD0,0xFA,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x60,0xDE,0xDD,0xDA,0xD8, +0xDC,0xD0,0xFA,0xF5,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDA,0xD9,0xD3, +0xD0,0xFA,0xF4,0x00,0x00,0x00,0x00,0x00,0xF3,0x60,0xD2,0xD9,0xDB,0xDE,0x5A,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x0D,0x04,0x58,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x00,0xD6,0x04,0x55,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xD7,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD5, +0xD2,0x00,0xF7,0xD8,0xD2,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x56, +0x00,0xE1,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0x5E,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0xB8,0xDE, +0x17,0x00,0x00,0xD7,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0xEF,0xF5, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0xB8,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, +0xDE,0x04,0xD7,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x54,0xB8,0xE1,0xF1,0xD9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0xF7,0xF2,0xD8,0x17,0x00,0x04,0xDE,0x00,0xD8,0xDC,0xD6,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xF2,0xF6,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0xF3, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD2,0x53,0xD0,0xE1,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0x16,0xB3,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x3B,0xFF,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xF3,0x55,0x00,0xF6,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00, +0x00,0xFF,0xFF,0xFF,0x00,0x00, +0x49,0x04,0x00,0x00, +0x1B,0x00,0x00,0x00, +0x00, +0x00, +0x06,0x74,0x00,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDC,0x60,0x58,0x58,0x60,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00,0x00,0x00,0x00, +0x00,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x58,0x53,0xB8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, +0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x60,0x04,0x60, +0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x57,0x16,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53, +0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x00,0x56,0xD7,0xD9,0xDB,0xDF,0xF3,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD0,0xF6,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF6,0x00, +0x58,0x04,0x04,0x04,0x04,0x54,0x53,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF4,0x00,0x17,0x04,0x17,0x00,0xF4,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x5C,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0x53,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x54,0xD3,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x0A,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56, +0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xB3,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xF6,0xD0,0x04,0x04,0x04, +0x04,0xB8,0xB3,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x53,0x00,0xE1,0x04,0x04,0x04,0xD6,0x00,0xF3,0xD4,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD7,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD2,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD8,0x53,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0xF5,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x53,0xDF,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A, +0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x3B,0x3B,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0x57,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xF7,0x04,0x04,0x04,0x04,0xDB, +0x55,0x54,0x54,0x55,0xDB,0x04,0x04,0x04,0x04,0xE1,0xF6,0x54,0x00,0xF3,0x59,0x04, +0x04,0x04,0x04,0x04,0xDE,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xF2, +0x04,0x04,0x04,0x04,0x04,0xEF,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0xB8,0xF3,0x00, +0x00,0xF3,0xB8,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00, +0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x04,0x04,0x04,0xDD,0xF7,0x53,0x54,0xB3, +0x56,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0x04,0x04,0x04,0x04,0x5D,0xF5,0x00,0x00,0xF5,0x60,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0x57,0xF3,0x00,0x00,0xF5,0x16,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0x53,0x54,0x53,0xB8,0xD9, +0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0xDA,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x17,0x55,0x53,0x54,0x53,0xF3,0xB8,0xD2,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDE, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF7,0x04,0x00, +0x00,0x54,0x53,0x53,0x54,0xF4,0xB8,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0xFA,0xF6,0x53,0x54,0x00,0x53,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54, +0x53,0x53,0x00,0x53,0x55,0x5C,0xD8,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x53, +0x53,0x53,0x53,0x53,0x53,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xF7,0xF3,0x00,0x54,0x53,0xF6,0x5A,0xDA,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0xDB,0xF7,0x53,0x00,0x46,0xB8,0xD8,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x17,0x04,0x00,0x00,0x54,0x53,0x53, +0x53,0x53,0x53,0x53,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF4,0x04, +0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x0A,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x55,0x53,0x54, +0x53,0xB3,0xF7,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0xF7,0xB3,0x00,0x54, +0xB3,0xF7,0xD6,0x04,0xDA,0x57,0xF3,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x54,0x54,0xDB,0x04,0x04,0x04,0xD9,0xB8,0xF3,0x54,0x54,0xF6,0xE1,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, +0xB8,0xF3,0x54,0x53,0xF5,0x5C,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x54,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4, +0x00,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD3,0x04,0x04,0x04, +0x04,0x04,0x59,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x56, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x00,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x04,0x57,0x00,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x57,0x04,0x04,0xDA,0xF4, +0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF7,0xB3,0x54,0x54,0xF3, +0x57,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD7,0xF7,0x53,0x54,0x53,0x55,0xD0, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0xB3,0x54,0x00,0xF4,0x59,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x54,0x54,0xF3,0x57,0xDA,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xDE,0x55,0x53,0x54,0x53,0x55,0xDE,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C,0x55,0x53,0x54,0x53, +0xF7,0xDC,0x04,0xB3,0xF3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x59,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDE,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x0C,0x55,0x53, +0x54,0x54,0xF6,0xEF,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD2,0x55,0x54,0x54,0x53, +0x55,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C,0x55,0x54,0x54,0x53,0x55,0xD2, +0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x54,0x00, +0xF5,0xF2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD6,0xF5, +0x54,0x54,0x53,0xB8,0xD4,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0x57, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x51,0x00,0x00,0xDA,0x04,0x04, +0x04,0x04,0xF3,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x5A,0x04,0x04, +0x04,0x04,0x04,0x17,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF4,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x55,0x04,0x04,0x04, +0xFA,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0xD7,0xF4,0x00,0x00,0x00,0x00,0x17,0x04, +0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xD9,0x04,0x04,0xDB,0x54,0x00,0x55,0xF7,0x00, +0x54,0xD5,0x04,0x04,0xB8,0x00,0x54,0xF7,0xF7,0xB3,0x00,0xF6,0xD4,0x04,0x04,0xE1, +0x00,0x54,0xDD,0x04,0x04,0x04,0x04,0x04,0x5C,0x54,0x59,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x17, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x54,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xF5,0xF7,0xF7,0xF4,0x00,0x54, +0xD2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x53,0x00,0x54,0xB8,0xB8,0xB8,0xB8, +0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x0A,0x00,0x00,0x55,0xB8,0xF5,0x00,0x53,0xDB,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0xD4, +0xF5,0x00,0xF3,0xF7,0xF7,0x53,0x00,0xF6,0xDA,0x04,0x04,0x04,0xDC,0x53,0x00,0xF3, +0xF7,0xF7,0x53,0x00,0xF5,0xD4,0x04,0x04,0x04,0xD7,0x54,0xB8,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x55,0xB8,0xF6,0x00,0x54,0xD2,0x04,0x04,0x04, +0x04,0x04,0x04,0x57,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0xB8,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0x53, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x5A, +0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x53,0x00,0x53,0x55,0xB8, +0xB8,0xF6,0x54,0x00,0xF6,0xD9,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x00,0x53,0xB8,0xB8,0xB8, +0xF7,0xF4,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x17,0xC6,0x09,0x54,0xF6,0xB8, +0xF7,0xF6,0x00,0x00,0xF4,0xDD,0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xF7,0xF6, +0x53,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0xD0,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDE, +0xF3,0x00,0x00,0xF6,0xF7,0xB8,0x55,0x54,0x00,0x54,0x5D,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, +0xD9,0x54,0x00,0xF6,0xB8,0xF5,0x00,0xF3,0xD4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54, +0x00,0xF6,0x04,0x04,0x04,0x04,0xD7,0xF3,0x00,0x00,0xF6,0xB8,0xB8,0xF6,0x09,0x09, +0xF3,0xD2,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00,0x00,0xF5,0xF7,0xB8,0xF6,0x00,0x00,0x00, +0x54,0x54,0xF5,0x5B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xD6, +0x04,0x04,0x04,0xDD,0x54,0x00,0xF4,0xB8,0xF7,0x53,0x00,0xB8,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x00,0xF4,0xB8,0xF7, +0xB3,0x54,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x56, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF3,0xDA,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0xB8,0xB8, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD9,0x04,0x04,0x04,0xD6,0x00,0x5A,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0xF5,0xB8,0xF7,0xF4,0x00,0xB3,0xD5,0x00, +0xF6,0x04,0x00,0xF6,0x5D,0x00,0x00,0x55,0xB8,0x55,0x54,0x00,0xF7,0xD4,0x04,0x04, +0x04,0x04,0x56,0x00,0x00,0xF6,0xB8,0xF7,0xB3,0x00,0x53,0xDE,0x04,0x04,0x04,0x04, +0x04,0x57,0x54,0x00,0xF5,0xB8,0xF7,0xF4,0x00,0xB3,0xDB,0x00,0xF6,0x04,0x04,0x04, +0xB8,0x00,0x00,0x55,0xB8,0x55,0x54,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xD4,0xF7,0x00,0x00,0x55,0xB8,0x55,0x00,0x00,0xE1,0xF5, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD0,0x00,0xF5, +0xDA,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0xD4,0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00, +0xF6,0xD4,0x04,0x04,0x00,0xF6,0x5A,0x00,0x54,0x55,0xB8,0x55,0x54,0x00,0xF7,0xD4, +0x04,0x04,0x04,0xDA,0xF7,0x00,0x54,0x55,0xB8,0x55,0x00,0x00,0x5B,0xF6,0x00,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xF7,0xF7,0x54,0x00,0xDE,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x55,0xB8,0xF6,0x00, +0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x53,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0xE1,0x04,0x04,0x04,0xD5,0x00,0x00, +0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0xD9,0x54, +0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x00,0xD2,0x04,0x04,0x04,0x04,0x04, +0x04,0x54,0x00,0xF7,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFE,0xFF,0xF9,0x04,0x54,0x55, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x53,0x04,0x04,0x04,0xD2,0x00,0xD0,0x04, +0x04,0x04,0x04,0xD7,0x00,0xF5,0xDC,0x04,0xD7,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0xD4,0x53,0x56,0x04,0x04,0x55,0x00,0xDE,0x04,0x04,0xDE,0x00,0x55,0xDA,0xE1, +0x00,0xF6,0xD4,0x04,0x04,0x04,0xF7,0x00,0xB8,0x04,0xEF,0x00,0x53,0xD5,0x04,0x04, +0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xDF,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04,0xF2,0x54,0xD0,0x04,0x04,0x04,0x04, +0x04,0x04,0xD5,0x00,0x54,0xD7,0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0xDA,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0xDB,0xB3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDC,0x00,0xB3,0xDB,0x04,0x04,0x04,0xD6,0x53,0xF3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xF6,0x54,0x5A,0x04,0x04, +0x04,0x04,0xB8,0x00,0xF7,0x04,0x04,0xDA,0x53,0x00,0x17,0x04,0x04,0x04,0x04,0x56, +0x00,0x55,0xDA,0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, +0x00,0xF4,0xD9,0x04,0x04,0x04,0xF2,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0xF4,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0xDB,0x00,0xB8,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xB8,0x54,0x00,0xB3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x54,0xB8,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x55,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0x00,0x53,0xD9,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0xD8,0x00,0xF5,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD5,0xF3, +0x00,0xDD,0x04,0x04,0x04,0xB8,0xC6,0x54,0x16,0x04,0x04,0x04,0x04,0x04,0xDA,0x58, +0x00,0x54,0xD7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00, +0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0x54,0x5A,0xDA, +0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0xF7,0x00,0xEF,0x04, +0x04,0x04,0x57,0x00,0x59,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF4, +0xDA,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0xF6,0x04,0x04, +0x04,0xEF,0x00,0x54,0x5C,0xDA,0x04,0x04,0x04,0x04,0xDA,0x16,0xC6,0x00,0xEF,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD0,0x00,0x00,0x56,0xDA,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x57,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xB8,0x04,0x04,0x04,0x04,0xB3, +0x00,0x17,0x04,0x04,0x04,0xDA,0x55,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x54,0xD2,0x04,0x04,0x04,0x04,0x5A,0x54,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x00,0x54,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0xDA,0x04,0x04,0x04,0x04, +0x04,0xF4,0x00,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xB8,0x54,0xF5,0xD5,0x04,0x04,0x04,0x04,0xD2,0x53,0x00,0x00,0xF6,0x04,0x00,0x00, +0x00,0x55,0xD8,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04,0x04,0x56,0x00,0xF5, +0xDB,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDD,0x04,0x04,0x04,0x56,0x00,0xF5,0xD5, +0x04,0x04,0x04,0x04,0xDE,0x53,0x00,0x00,0xF6,0x04,0x04,0xB8,0x53,0xF7,0xDA,0x04, +0x04,0x04,0xDA,0xF7,0x00,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0xF7,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0xD5,0x54,0x53,0xD9,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x59,0x54,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x04,0xF7,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xB8,0x54,0xF6,0xDA,0x04, +0x00,0x00,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04,0x04,0xF7, +0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0xDD,0x04,0x04,0xDD,0x00,0xF5,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0xD0,0x00,0xF4,0xD8,0x04,0x04,0x04,0xD3,0x53,0x00,0x00,0x04, +0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x54,0x00,0x00,0xF7,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0x04,0xDD,0x00,0xF5,0x04,0x04,0x04,0x55,0x54,0xD2,0x04,0x04,0x04, +0x04,0x04,0x04,0xB8,0x54,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xC8,0xFF,0xFE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x5D,0x00,0xD8,0x04,0x04,0xD4,0x00,0x58,0x04,0x04,0x04,0x04,0xF6, +0x00,0xD9,0x04,0x04,0x04,0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x53, +0xD4,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0xF6,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0xB8,0x54,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, +0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, +0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0xD9,0xF3,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD7, +0x04,0x04,0x04,0x04,0x04,0x57,0x54,0xEF,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53, +0x53,0x00,0x00,0x54,0x53,0x04,0xD6,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0xD7,0x04,0x57,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD7,0x04, +0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, +0x04,0x04,0x04,0x5C,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x53,0xF4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0xD2,0x55,0x00,0x00,0xF4,0xEF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0xF4,0x00,0x00,0xF7,0xD7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0xFA,0x04,0xDA,0xD5,0xDA,0x04,0x04,0xDA,0xD5,0x00,0x00,0xB8,0xDB,0x04, +0x04,0x04,0xD2,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54, +0xD6,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x04, +0x16,0x09,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x54,0x53,0xD9, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xB8,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD8,0xF4,0x00,0x59,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x53,0xF3,0x04,0x04,0x04,0x04,0xDA,0x00, +0xF5,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xD9,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xEF, +0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xF6,0xDA,0x04,0xDE,0x00,0xB3,0xDB, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF3,0x00,0xDE,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x00,0xDE,0x04, +0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0xD7,0x04,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0xE1,0x00,0xF5,0x04,0x04,0x04,0x04,0xD0,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0xB8,0x54,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, +0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x57,0x04,0x04,0x04,0x04,0x5A, +0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF3,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xD2,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF5,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xF6,0xDA,0x00,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0xD2,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04, +0x04,0x04,0xDE,0x00,0xF5,0x04,0x04,0xD2,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0x54,0x00,0xF6,0xDA,0xD2,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF7,0x00,0xDE,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD0,0x00,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, +0x00,0x17,0x04,0xD4,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, +0xDE,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD0,0x00, +0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x00,0x00,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0xD0,0x00,0x55,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x54, +0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0x04,0x04,0x04,0x04,0x04, +0x53,0xF5,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00, +0x00,0x54,0x04,0x04,0x04,0xF4,0xF4,0xD7,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x58,0x00,0xFA,0x04,0x0A,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54, +0x00,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x17,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xE3,0x3B,0x6E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, +0x00,0xD0,0x04,0x04,0x04,0xB3,0x55,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04, +0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x59,0x04,0x54,0xF4, +0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, +0x00,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xB8,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x54,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xDA, +0xF5,0x00,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0xF7,0x04,0x09,0x00,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x53,0x54,0xB8, +0xB8, +0x04,0xF7,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x56,0x04,0xF3, +0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0x04,0x04,0xF3, +0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x56,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0xF5,0x00,0x00,0xF6, +0xDE,0x04,0x04,0x04,0x04,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, +0x53,0x04,0x04,0x04,0x04,0xDE,0xF6,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB8,0x16,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xFA,0x04,0x59, +0x00,0x00,0x00,0xF7,0xDC,0x53,0x00,0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0xF4, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x53,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0xDA,0x54,0x54,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xF7,0xDF,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0x53,0x00,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x00,0xF6,0x04,0xD0,0xD2,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF5, +0x04,0x04,0x04,0xDA,0xF4,0x00,0xD0,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x54,0xDA,0xD0,0x00, +0x58,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x00,0xF3,0xDA,0x00,0xF6,0x04,0xDA,0x53,0x54,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x53,0xD4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0xDA, +0x56,0x00,0xB3,0xDD,0xDE,0x54,0xB3,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0x54, +0x54,0xD9,0x04,0x04,0x04,0x04,0xFA,0x53,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0xF5, +0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, +0x00,0xDB,0x04,0x53,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00, +0x57,0xDD,0x00,0x57,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0x00,0xEF,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD7,0x04,0x04,0xDB,0x00,0xF3,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD0,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0xDF,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00, +0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x5B,0x00,0xF6,0x04,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x00,0x55,0x04,0xF7,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, +0xF6,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x5C,0xDE,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD5,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xD3,0x55, +0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDE,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x55,0x00,0xD9,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0xF6,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB3,0xB3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x04,0x04,0x04,0xD6,0x00,0xDF,0x04,0xF7, +0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x0A,0x00,0xDE,0x04, +0xD9,0x00,0x58,0x04,0xF3,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00, +0xD3,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x54,0x5A,0xDE,0x00,0x57, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF3,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0xD4,0xD9,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, +0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF7,0x00,0xF6,0xB8,0xB8, +0xB8,0x53,0x53,0xB8,0xB8,0xB8,0x04,0xEF,0xDE,0x04,0x04,0x04,0x04,0x04,0xF5,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x53,0x04,0x55,0x00,0xD7,0x04,0x04,0xD2, +0x00,0x55,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0xD6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x53,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, +0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x00,0x55,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD4,0xF6,0x54,0x57, +0x04,0x04,0x04,0x04,0x04,0xF6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x16,0x54,0x5A,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xB8,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x54,0xF5,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x17,0x00,0x5D,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0xDC,0x59,0x56,0x5C,0x00,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x5A,0xB3,0x00,0x00,0xF7,0xDD,0x04,0x04,0x04,0x04,0x04, +0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0xF7,0x00,0x00,0xF3,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0xB3,0xF3,0x04,0x04,0x04,0x04,0x04,0x58,0xF6,0x04,0xD0,0x00,0xB3,0x5A,0x58,0xB3, +0x00,0x00,0xD7,0xD9,0xB8,0xC6,0xDB,0x04,0x04,0x04,0x04,0x17,0x00,0xD6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x5A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x59,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDC,0x00,0x56,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xFA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x56,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0x00,0x5D,0x04,0x04,0xF7, +0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x54,0xB8,0x04,0x04,0xF3,0x53,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD7,0x04, +0x00,0xF6,0x04,0x16,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x5A,0x00,0xF9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x0A,0x00,0x00,0xD2,0xDA,0x04,0xDA,0xD7,0x57,0x53,0x00,0xF6,0xDA,0x04, +0x04,0xB8,0x00,0x16,0x04,0x00,0xF6,0x04,0x04,0xD4,0xF4,0x00,0xDE,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x04,0x57, +0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD2,0x04,0x53,0xF4, +0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0xDA,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDD,0x00,0xF3,0x04,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54, +0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD7,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF6,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04, +0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, +0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x53,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, +0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x54,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3, +0x54,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x54,0x56,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0xF6,0x54,0xDA,0x04,0xD7,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0xF7,0x04,0xDA,0x00,0xB8,0x04,0x5C,0x00,0xDD,0x04, +0x5A,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x00,0x00,0xF2,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0xF4,0x53,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x56,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF5,0x54,0xD9,0x04,0x04,0xB8,0xF7,0x04,0x04, +0x04,0x04,0xD0,0xF6,0x00,0xF5,0xD5,0x04,0x04,0x04,0xF7,0x3B,0x3B,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x54,0x53,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0xF7,0xF7,0x00,0x54,0xDB,0x04,0xF6, +0x00,0xDC,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53,0x53,0x53,0x54, +0x00,0x00,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8, +0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xC6,0xF7,0x04,0x04,0xF5,0x00, +0xD9,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04,0xF3, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04,0x04,0xD4,0xF7,0x00,0x00, +0x00,0x00,0x00,0x00,0xB3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x54,0x00,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDF,0x04, +0x04,0x04,0x04,0xF5,0xE1,0x04,0xF7,0x00,0xDD,0x04,0x04,0xDA,0xF4,0x00,0x0A,0x04, +0x04,0xFA,0xF3,0xD4,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0x53,0x53,0x53,0x53,0x54, +0x00,0x00,0x54,0xDA,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0x00,0x57,0x04,0xF5,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x53,0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0xB8, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xF7,0x00,0xF3,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x00,0x00,0xDE,0x17,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0xF7,0x00,0xDD,0x04,0x04,0x5D,0x54,0xD6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x57,0x04,0x04,0x00,0xF6,0x04,0xF6, +0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, +0x00,0x00,0x53,0x54,0x00,0x00,0x00,0xF4,0xD6,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6, +0x04,0x00,0xF6,0x04,0x04,0xB8,0x54,0x00,0x57,0xD2,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xD6,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04, +0x53,0xF4,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00, +0x00,0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00, +0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, +0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x57,0x53,0xD6,0x04, +0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x53,0x53,0x53,0x53, +0x53,0x53,0x53,0x53,0x54,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x00,0xF6,0xD2,0x00,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0x59,0x54,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x16,0xF5,0x54,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0x04,0xD5,0x00,0x56,0x04,0x04,0x04,0xF4,0x54,0xDA,0x04,0x04,0x04,0x04,0x04, +0x5D,0x00,0xDE,0x04,0x04,0x55,0x53,0x04,0xF5,0xF3,0x04,0x04,0xD8,0x00,0xB8,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDD,0x54,0xF7,0x04,0x04,0x16,0x09,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x59, +0x00,0x59,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xDA,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0xDD,0x00,0x00,0x16,0x04,0xDF,0x00,0x16,0xDA,0xD0,0xF5,0x00,0x00, +0x00,0x00,0x53,0xD9,0x04,0x04,0xFC,0x3B,0xE3,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF6,0xF4,0x04,0x04,0x04,0x0A,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xF7,0x00,0x04,0xDB,0x55,0x54,0x54,0x55,0xD5,0x04,0x04,0xD2,0x00,0x53,0xDC,0x04, +0x04,0xF7,0x00,0x55,0x04,0x58,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8, +0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x53,0xD4,0x04,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x54,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x16,0x04,0x04,0xD5,0x00,0xF6,0xDA,0x04,0x04, +0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, +0x00,0x56,0x04,0xF6,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8,0x04, +0x04,0x04,0x04,0x04,0x5B,0x00,0xEF,0x04,0x04,0x04,0x04,0x57,0x00,0x60,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x04,0xF6,0x00,0x55,0xD7,0x04,0xDA,0xD6,0xB3, +0xC6,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0x00, +0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00, +0x00,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0xD7,0x04,0x04,0x04,0x54, +0xDA,0x04,0x55,0x00,0x04,0x04,0x04,0x04,0xDB,0x54,0xF6,0x04,0x04,0x04,0x55,0x5B, +0x04,0x04,0x04,0x04,0x57,0x00,0x55,0xB8,0xB8,0xB8,0xB8,0xB8,0x55,0x00,0xB8,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0xD9,0x04,0x54, +0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xDA,0x00,0xF6, +0x04,0x04,0x04,0xDA,0x53,0xF5,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04, +0x04,0x04,0xDD,0x00,0xF4,0x04,0x04,0x04,0x00,0xF6,0xDA,0x53,0xF4,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0x00, +0x54,0x53,0x53,0x53,0x54,0xF4,0x59,0xDA,0x04,0x04,0x53,0xB3,0xD9,0xDF,0x57,0xB8, +0x57,0x17,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x00,0xF6,0xDA, +0xD5,0x55,0xF6,0xF3,0x00,0x00,0xF5,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x57,0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0xF3,0x53,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0x00,0x55,0x04,0x04,0x0A,0x00,0x03,0x04,0x04,0xDD,0x00,0x57,0x04,0x04, +0x57,0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x53,0x00,0x00,0x55,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x56,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD8,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0xF6,0xDA,0x54,0x00,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0x54,0x53,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0xF4,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, +0xF6,0xDA,0x59,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00, +0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x00,0xF3,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x54,0xF3,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA, +0xF3,0x00,0xB3,0x59,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xB8,0x00, +0xDB,0x04,0x04,0x04,0x17,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF4,0x53,0x04,0x04, +0x04,0x17,0x00,0xD0,0x00,0x57,0x04,0x04,0x04,0x55,0x54,0xDA,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x54,0x54,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE, +0x04,0x04,0xDA,0x53,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDC, +0x04,0x04,0x04,0x54,0x00,0x00,0xD4,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0xD5, +0x00,0x00,0x5D,0x04,0x04,0xB8,0x54,0x00,0x00,0x00,0xF7,0xF2,0xDA,0xDF,0x09,0xF7, +0x04,0x04,0x3B,0x3B,0x45,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x58,0x00,0xDA,0x04,0x04,0xD5,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xB8, +0x54,0x00,0xB3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0xE1,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xB8,0x55,0x00,0xF7,0x04, +0x04,0xDA,0x53,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x54,0xE1,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xB8,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x00,0xB3,0xDA,0x04,0x04,0x04,0x58,0x00,0xDF,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0x04,0x04,0xD5,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD7,0x04,0xDF, +0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04,0x04,0x04, +0xDA,0x54,0xF4,0x04,0x04,0x04,0x04,0xDA,0xF4,0x00,0x58,0xD9,0x04,0xD5,0xF7,0x00, +0xF5,0x04,0x04,0x17,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x16,0xF3,0x00,0x00,0x55,0xD7,0x04, +0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x00,0x00,0xF4,0x16,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x54,0xF2,0x04,0x04,0x00,0x04,0x04,0xB8,0x00, +0xDB,0x04,0x04,0x04,0x04,0xB8,0x00,0xD9,0x04,0x04,0xD2,0xF5,0x04,0x04,0x04,0x04, +0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDD,0x04,0x04,0x04,0x04,0x00, +0x53,0xB8,0xB8,0xB8,0xF7,0xF4,0x00,0x54,0xD0,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x00,0x54,0x53, +0x53,0x53,0x53,0x53,0x53,0x04,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x57, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x00,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0xD2,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x5A,0x00,0xE1,0x04,0x04,0x04,0x04, +0xB8,0x00,0xDC,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4,0x00, +0xDC,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8, +0x55,0x54,0x00,0xF4,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0xDA,0x59,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0xD9,0x5A,0xF5,0x00,0x00,0xF5,0xD7, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDE,0x00,0x57, +0x04,0x04,0x04,0x04,0xD0,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x17, +0x04,0x04,0xDA,0x54,0xB8,0x04,0x04,0x5A,0x00,0xD2,0x04,0x04,0xD7,0x54,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xE1,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDA,0x53,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x16,0x00,0xF6,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xD9,0x00,0x55,0xDA,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0xDA,0x04,0x04,0x55,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, +0xF6,0xDA,0xF6,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0x55,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0x00,0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, +0xF3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6, +0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF3,0x04,0x04,0x04,0x04, +0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xDC,0x04,0x00,0xB3, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0xDA,0xF6,0x00,0xDB,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDB,0x00,0x55,0xDA,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDB,0x00,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xDA,0x54,0xF6,0x04,0x04,0x04,0x04, +0xDA,0x53,0xF5,0x04,0x04,0x04,0x04,0xDD,0x00,0x57,0x04,0x04,0x04,0xDA,0x00,0x00, +0x00,0xD7,0x04,0x04,0x04,0xD6,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x54, +0xEF,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0xB8, +0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0xD4,0x04,0x04,0x04, +0x5B,0x54,0x57,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04, +0x04,0x04,0xEF,0x56,0x17,0xDA,0x04,0x04,0x04,0x04,0x16,0xD7,0x04,0x04,0x3B,0x3B, +0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xDC,0x04, +0x04,0x04,0x54,0xB8,0x04,0x04,0x04,0x04,0xDB,0xF5,0x00,0x00,0x00,0xF7,0xD8,0x04, +0x04,0x04,0xDA,0xD0,0x57,0x57,0xD0,0x04,0xDA,0xF6,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0xD5,0x04,0x04,0x04,0x60,0x00, +0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD0,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x53,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x55,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x0B,0xF7,0xF4,0x00,0xB3,0xD5,0x04, +0x04,0x04,0x04,0x04,0xF4,0x53,0xDA,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0xF3, +0x00,0x5C,0x04,0x04,0x04,0x04,0xB8,0x00,0x55,0x04,0x04,0x04,0xF4,0x00,0xEF,0x04, +0x04,0x04,0x04,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDE, +0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0xDA,0x04,0x04,0xF5, +0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x59,0x04,0x00,0xF6,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD0,0xF6,0x00,0x00,0xF6,0xD0,0x04,0x04,0x04, +0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, +0x04,0xDE,0xF6,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDC,0x54,0x00,0xDB,0x04,0x00,0xD8,0x04,0xD0,0x00,0x58,0x04,0x04,0x04, +0x04,0xD7,0x00,0x58,0x04,0x04,0xDA,0x00,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD4, +0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xB8,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xD0,0x04,0x00,0xF4,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x53,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0xFA,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0xB3,0xB3,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04, +0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00, +0x57,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF4,0x53,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, +0x60,0x04,0x04,0xDA,0x57,0x00,0x00,0xF3,0x57,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04, +0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04,0xF5, +0xB3,0x04,0x04,0xF6,0x54,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x56,0x00,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x54,0xF4,0x04,0xD9,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDF,0x54,0x5C,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x53,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04,0xB8,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x54,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x53,0x00, +0xF6,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xD0,0x04, +0xDE,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xF5,0x04,0x04,0xDE, +0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0xF6,0x04,0xE1,0x00, +0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6, +0x04, +0x04,0x04,0x04,0xD6,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00, +0x00,0x04,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF7,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xD8,0x53,0xC6,0xDB,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0xD8,0x00,0x00, +0xDF,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x00,0x00,0xD3,0x04,0x04,0x04, +0x04,0x04,0xD2,0x00,0xF6,0x04,0xD6,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x55,0x00,0xE1,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00, +0xD0,0x04,0xD0,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x00,0x04, +0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x04,0x04,0xDA,0x17,0xD2,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0xF6,0x00,0x04,0x04,0x17,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDC, +0x04,0x04,0x04,0x56,0x00,0xD5,0x04,0x04,0x04,0xDA,0xF6,0x54,0x53,0x04,0x04,0x04, +0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x60,0x54,0x57,0x04,0x5D,0x00,0x58, +0x04,0x04,0x04,0x04,0x17,0x54,0x59,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x54,0xB8,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3C,0x3B,0x3B,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xD0,0x16,0x00,0x56,0xD0,0xD0,0xD0,0x00,0xF4, +0xD0,0xD0,0x04,0xDA,0x53,0x54,0xF3,0xFA,0xD4,0x04,0x04,0x04,0x04,0xDA,0xF6,0x54, +0x00,0x00,0x54,0x55,0xDA,0xD0,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF7,0x54,0xF6,0x54,0x00,0x57,0x04,0x04,0x04,0xF4,0x53,0xDA,0x04,0x04, +0x04,0x04,0x04,0x58,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, +0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDA,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0xEF,0x04,0x04,0x04,0x04,0x04,0x04, +0xD7,0x00,0xF7,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xB3,0xF7, +0xF7,0x53,0x00,0xF5,0xDA,0x04,0x04,0x04,0xDC,0x54,0x00,0xF4,0xB8,0xF7,0xB3,0x00, +0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0xF6,0xDA,0x04,0x04,0x04, +0xD8,0x00,0x00,0xF5,0xB8,0xF6,0x00,0x00,0xD9,0x04,0x04,0x54,0xF4,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0x00,0x00,0xF3,0x17,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xF4,0x00,0x00,0xF7, +0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, +0x00,0xF7,0x04,0xF4,0xD6,0x04,0x04,0xF3,0x54,0xDB,0x04,0x04,0x04,0x04,0x00,0xB3, +0x04,0x04,0xDA,0x00,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x04,0x5B, +0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD9,0xEF,0x53,0x54, +0xD9,0x04,0x04,0xF5,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0xF7,0x00,0x59,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, +0xD0,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0x00,0xF6,0x04, +0x00,0xF6,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xF5, +0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00, +0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0xF4,0x00, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF5, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0xFA, +0x00,0xF6,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xD0, +0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x57,0x00,0xDB,0xDA,0x00, +0x55,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00, +0x00,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD0,0x04, +0x04,0xB8,0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xD8, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xD0, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x54, +0xD4,0x04,0x04,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xB8, +0x54,0xF5,0xDB,0x04,0x04,0x04,0x04,0xDE,0xB3,0x00,0x00,0xF6,0x04,0x00,0x00, +0xC6,0x55,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x04,0xB8,0x54,0xF6, +0xD9,0x04,0x04,0x04,0x04,0x0A,0x54,0x54,0xD5,0x04,0x04,0x04,0xB8,0x00,0xF6,0xD9, +0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0x00,0xF6,0x04,0x04,0x55,0x00,0xB8,0xD4,0x04, +0x04,0x04,0xDA,0xB8,0x54,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x55,0x00,0xB8,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0x00, +0xF3,0xDB,0x04,0x04,0x04,0xD9,0xF3,0x00,0xD2,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF2,0x00,0xF4,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x00,0x00,0x55,0xD4,0x04,0x04,0xDA,0x55,0x00,0x00,0x53,0xDB,0x04,0x04, +0x04,0x5C,0x00,0xF7,0x04,0x04,0x00,0x00,0xF3,0xD9,0x04,0x04,0x04,0xDB,0xF3,0x00, +0xE1,0x04,0x04,0x55,0x00,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04, +0x00,0x00,0xC6,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x04,0x55, +0x00,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x54,0x00,0x00,0x04,0x00,0x00,0xF5,0xD4, +0x04,0x04,0x04,0xB8,0x54,0xD0,0x04,0x04,0xDF,0x00,0x57,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, +0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04,0x04,0x04,0x53, +0xF5,0x04,0x04,0x04,0x04,0x04,0x5E,0x09,0xB8,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, +0xD9,0x04,0x04,0x04,0xDB,0x00,0xF4,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0x04, +0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xD8,0x3E,0x04,0x00,0xF6,0xDA,0x04,0x04,0xDA, +0x04,0x04,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x5A, +0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xB8,0xD8,0xDA,0xB8,0x54, +0x56,0x04,0xF4,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xB8, +0x04,0xD8,0xF6,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04, +0xB6,0xD0,0x04,0xDE,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xD6,0x04,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6, +0xDA,0xF6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04, +0x04,0x04,0xDA,0xD2,0xF4,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE, +0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x5A,0x54,0x57,0xF6,0x54,0x00,0xF4,0x5D,0x04, +0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x00,0x53,0x00,0xF3,0x59,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDC,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04, +0x04,0x04,0xD6,0x00,0x55,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDA,0x00,0x55,0x04,0x54,0x55,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD9,0x56,0x54,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x54,0x56,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDE,0x57,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x57, +0xF5,0x04,0x04,0xD7,0x00,0xB3,0xD5,0x04,0x04,0xDB,0x00,0x00,0xDE,0x04,0xDE,0xF3, +0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0xB3,0xF3,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0x58, +0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x56,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xF6,0x00,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x5A,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xD4, +0xF3,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xFA,0x00,0x5A,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0x16,0x04,0x00,0xF6, +0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0xB8,0x54,0x17,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x57,0x04,0x00,0xF6,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xF3,0x54,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x58,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, +0xDC,0x00,0x56,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0x00,0x00,0x16,0x04,0x04,0x04, +0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0xDC,0xD9,0x00,0xF3, +0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF5,0x04,0x04,0x04,0xD8,0x00,0xF5, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04, +0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0xF3,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x04,0x04,0x04,0x0A,0x00,0x59,0x04,0x04,0x5D, +0x54,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00, +0xF5,0xF7,0xF7,0xF3,0x00,0xB3,0xD5,0x00,0xF6,0xDA,0x00,0xF6,0x0B,0x00,0x00,0x55, +0xB8,0x55,0x54,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0xF6,0xB8,0xF7, +0xF3,0x00,0x53,0xD7,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x54,0xF6,0xB8,0xF7,0xF3, +0x00,0x53,0xD2,0x00,0xF6,0xDA,0x04,0xDA,0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00, +0xF7,0x04,0x04,0x04,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0xB8,0x04,0x04,0xDA,0x55,0x00, +0x54,0x55,0xB8,0x55,0x00,0x00,0x0A,0xF6,0x00,0x04,0x00,0x00,0x00,0x00,0xF6,0xB8, +0x55,0x00,0x00,0x58,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, +0x00,0x53,0xF7,0xF7,0x53,0x00,0x5A,0xDC,0x54,0x00,0x55,0xB8,0xF5,0x53,0xF3,0xD9, +0x04,0x04,0x00,0x00,0x00,0x54,0xF6,0xB8,0xF6,0x00,0x00,0x56,0x04,0x04,0x04,0xDA, +0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00,0xF6,0xD4,0x04,0x04,0x00,0xF6,0x0B,0x00, +0x00,0x55,0xB8,0x55,0x54,0x00,0xF7,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x55, +0xB8,0x55,0x54,0x00,0x59,0xF6,0x00,0x04,0x00,0x00,0x00,0x54,0xF7,0xD7,0x04,0xDB, +0x54,0x00,0xF7,0xF7,0x00,0x54,0xD9,0x04,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0x04, +0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDC,0x00,0x57,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0xD0,0x00,0xFA,0x04,0x04,0x04, +0x04,0x04,0xDA,0x16,0xDB,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x59,0x04,0x04,0x04, +0xF5,0x54,0xDD,0x04,0x04,0x04,0xD9,0x54,0xF3,0xDA,0x04,0xDC,0x00,0x55,0x04,0x04, +0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xF7, +0x00,0x53,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xFF,0xF9,0x94,0x04,0x00,0xF6,0x04,0x00,0xF6,0xF6,0x00,0x04,0xD9,0xD9, +0xD9,0xF5,0xF5,0xD9,0xD9,0xD9,0x58,0x00,0xD7,0xD9,0xDA,0x55,0x00,0xD8,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0xB3,0x53,0x04,0xDF,0x00, +0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0xDA,0x04,0x04,0xDA,0x53, +0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF7,0x00,0xE1,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x57,0x53,0xD9,0x53, +0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x53,0xF3,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x04,0xD4,0xDA,0x04,0x04,0x04,0x04, +0xD5,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xB3,0xF3,0xD4,0xF6,0x00,0x04, +0x04,0x04,0x04,0xDE,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF5,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0xF4, +0x00,0x04,0x04,0xF3,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x54,0xB8,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDA,0x5B,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x53,0x5B,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D, +0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0xD9,0x00,0x5A,0x04,0x04, +0xE1,0x00,0x00,0x55,0xB8,0x53,0xF5,0xF3,0xF7,0x04,0xF5,0x56,0x04,0x04,0x04,0x04, +0x04,0x04,0xDF,0x00,0x17,0x04,0xE1,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x04,0xD8,0x09,0x53,0xD9,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0xB8,0xD0,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0xD5,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xDB,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, +0xF7,0x56,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0xD9,0x53,0x54,0xD5,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD5,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF3,0xB3,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xB8,0x00,0xFA,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDA,0xB3,0xC6,0xDB,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x53,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF5,0x00,0x04,0xD5,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0xEF,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x53,0x53,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x59,0x00,0xDE,0x04, +0x04,0x04,0x04,0x04,0x54,0x00,0x00,0xC6,0xDB,0x04,0x04,0x04,0x04,0xD8,0x54,0xF7, +0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x57,0x04,0x04,0xFA,0x00,0xB8,0x04,0x04,0x04, +0x04,0x04,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04,0xF4,0x53,0x04,0x04, +0x04,0x04,0x04,0x04,0xD5,0x54,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, +0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xF3,0x53,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0xF3,0x00,0x00,0xF4, +0x59,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD3,0xF7,0x53,0x00,0x54,0x55,0xD0, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0xB3,0x00,0x00,0xF4,0x59,0xDA,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x00,0x00,0xF4,0x57,0xDA,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x53,0x55,0xDE,0x04,0x04,0x04,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xE1,0xF6,0x53,0x00,0x53, +0xF7,0xD5,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x56,0xB3,0x00,0x54,0x55,0xDE,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x0A,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xD9,0x55,0x54,0x00, +0xF5,0xD6,0x04,0x04,0xDB,0x55,0x54,0x00,0xB3,0xB8,0xDA,0x04,0x04,0x04,0x00,0xF6, +0x04,0x59,0xF3,0x00,0x54,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x53, +0x00,0x54,0xF6,0x0A,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD3,0xF7,0x53,0x00,0x54, +0xF6,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x53,0x55,0xD2, +0x04,0xF6,0x00,0x04,0x00,0xF6,0xD7,0xF3,0x54,0x57,0x04,0x04,0xDC,0xF6,0x00,0x54, +0xF6,0xDD,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xB8,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xE1,0x00,0x16,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x59,0x00,0x5A,0x04,0x04, +0x04,0x04,0x04,0x60,0x00,0x56,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF3,0x54,0xDA,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x9E, +0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xB8,0x54,0x04, +0x04,0x04,0xF2,0x00,0xD0,0x04,0xDA,0x55,0x00,0xDA,0x04,0x04,0x04,0x04,0x55,0xF3, +0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x53,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0x54,0x53,0xD9,0x04,0x04,0x04,0x04, +0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xB8,0x00,0xDA,0x04,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x57, +0x00,0x5C,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04, +0x04,0xD9,0x00,0xF6,0x04,0x04,0xF5,0xB3,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDA, +0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, +0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, +0x54,0xD9,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x04,0x57, +0x00,0xEF,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x56,0x04,0x04, +0x04,0x04,0x04,0xD4,0x00,0xF5,0x04,0x04,0x17,0x00,0x5C,0x04,0x04,0xD5,0xF7,0x54, +0x00,0xF6,0xD9,0x04,0x04,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, +0xF4,0x04,0xF6,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x16,0x00,0xF4,0xD9,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xDD,0x54,0x54,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0xB8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, +0xF4,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xF3,0x00,0x0A,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, +0xD7,0x00,0xF3,0xD4,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x00,0x00,0x00,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00, +0x00,0x00,0xF6,0x04,0x00,0xF6,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0xD2,0x00,0xF3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0xDD, +0x53,0x00,0xDE,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x54, +0xB3,0x04,0x04,0x57,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, +0xF4,0x53,0x5D,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00, +0xFA,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD6,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xDE,0x00,0x57,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x55,0x00,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04, +0xDC,0x00,0xF4,0x04,0x04,0x04,0x04,0xF6,0x00,0xD2,0x04,0x04,0x04,0x04,0xD9,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xD8,0x53,0xF4,0x04,0x04,0x04,0x57,0x00,0xEF,0x04,0x04,0x04,0x04,0x04, +0xB8,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDF,0x04,0x04, +0x04,0x04,0x04,0x59,0x00,0xE1,0xDE,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD5,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x54,0x41,0x04,0x00,0xF6, +0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDF,0x00,0xDB,0x04,0x04,0xDA,0x00, +0x57,0x04,0x04,0x59,0x00,0xDE,0x04,0x04,0x04,0xD4,0x54,0xF5,0x04,0xF6,0x00,0xD7, +0x04,0x04,0xD7,0x00,0xF6,0x04,0x04,0x5B,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF5,0x00,0xD5,0x04,0x04,0xDD,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x00,0xF6,0x04,0x04,0x04,0xD0,0x00,0xF4,0xD9,0x04,0x04,0x04,0xDB,0x53,0x54,0xDB, +0x04,0x04,0x04,0x53,0x54,0x00,0x00,0x00,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xD6, +0x04,0x04,0xDD,0x00,0x53,0xD7,0x04,0x04,0x04,0x04,0x17,0x00,0x53,0xDA,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0xD2,0x00,0xF3,0xD9,0x04,0x04,0x04,0xD9,0xF4,0x00,0xDE, +0x04,0x04,0xB8,0x54,0xE1,0x04,0x04,0x04,0x58,0x00,0x58,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x53,0xF5,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x5D,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8,0x04,0x04, +0x55,0x00,0xD6,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x04,0xDA,0x53,0x54,0xDE,0x04, +0x04,0x04,0x04,0x56,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0xDA,0xF6, +0x54,0xDF,0x04,0x04,0x04,0x59,0x00,0xF6,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0xE1, +0xF3,0x54,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x5A,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, +0x60,0x04,0x04,0x04,0x04,0x56,0x00,0x53,0xDF,0x04,0x04,0x04,0x04,0x04,0xDA,0x5A, +0x00,0x00,0xD7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xF4,0x00, +0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x54,0x16,0xDA, +0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0x5A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF6, +0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0x00,0xF6,0x04, +0x00,0x00,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, +0x04,0xE1,0x00,0x54,0x5B,0xD4,0xDA,0x04,0x04,0x04,0xDA,0x58,0x00,0x00,0x0A,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xB8,0x04,0x04,0x04, +0xF7,0x00,0x53,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x53,0x00,0xB8,0x04,0x04, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x53,0xDA,0x04,0x04,0x56, +0x00,0x56,0x04,0x04,0x04,0xDA,0xF6,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, +0x53,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00,0x00,0xB8, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x54,0xD7,0x04,0x04,0x04,0xF4,0x54,0xDC,0x04, +0x04,0x04,0x04,0xDB,0x00,0xF3,0xDA,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04, +0x04,0x04,0x04,0x59,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B, +0x54,0x5B,0x04,0x04,0xD8,0x54,0x54,0xD7,0x04,0x04,0x04,0xD4,0x54,0xF7,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xC6,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x60,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDD,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0xDA,0x04,0x04,0x04, +0x54,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x00,0xF6, +0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x59,0x04,0x00,0xF6,0xDA,0x00,0x00,0x00, +0x00,0x04,0x04,0x04,0x04,0xD5,0x00,0xD6,0x04,0x04,0x04,0xB3,0x55,0x04,0x04,0xDA, +0x53,0xB3,0xD2,0x04,0xD9,0x55,0x00,0xEF,0x04,0xDC,0x54,0x00,0xF7,0xF7,0x00,0x54, +0xDC,0x04,0x04,0xDA,0x54,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x54, +0xF7,0xF7,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, +0x04,0x04,0x0A,0x00,0x53,0xD7,0x04,0xDE,0x54,0x54,0xD7,0x04,0x04,0x04,0x04,0xB8, +0xB8,0x54,0x00,0x00,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0x0A, +0x00,0x54,0xF5,0xF7,0xF7,0xF3,0x00,0x53,0xD3,0x04,0x04,0xB8,0xB8,0xB8,0x54,0xF6, +0xDA,0x04,0x5C,0x00,0x00,0x55,0xB8,0x55,0x00,0x00,0x5A,0x04,0x04,0x04,0xD9,0x53, +0x00,0xF6,0xB8,0xF5,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x54,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, +0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0x04,0x04,0x04, +0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x00,0x04,0x04,0xD9,0x53,0x54,0xF6, +0xB8,0xF6,0x54,0x53,0xD9,0x04,0x04,0x04,0xD3,0x53,0x00,0xF5,0xB8,0xF7,0x53,0x00, +0xF6,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD7,0x54,0x00,0xF4,0xB8,0xF7,0x54,0x00,0xB8,0x04,0x04,0x04, +0x04,0x04,0xE1,0x53,0x00,0x53,0x55,0xB8,0xF7,0xF6,0x54,0x00,0xF5,0xDD,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0x55,0x53,0x00,0xF6,0x04,0x04,0x04,0x04, +0x04,0x04,0x17,0x54,0x00,0x54,0x55,0xB8,0xF7,0xF6,0x00,0x00,0xF4,0xDD,0x04,0x04, +0x04, +0x00,0x53,0xB8,0xB8,0xB8,0xF7,0xF5,0x54,0x00,0x00,0x58,0x04,0x04,0x04,0x04, +0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xD0,0x04,0x00,0x53,0xB8,0xB8,0xB8, +0xB8,0xB8,0xB8,0xD0,0x04,0x04,0x04,0x04,0xB8,0x54,0x54,0x00,0xF6,0xB8,0xB8,0x55, +0x54,0x00,0xF3,0xDE,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, +0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x56,0x04,0x04,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xE1,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD3,0xF4, +0x00,0x00,0xF6,0xF7,0xF7,0xF6,0x00,0x00,0xF3,0xD7,0x04,0x04,0x04,0x04,0x00,0x53, +0xB8,0xB8,0xB8,0xF7,0xF6,0x00,0x00,0xF4,0xDA,0x04,0x04,0x04,0x04,0x5C,0x54,0x00, +0x54,0xF6,0xB8,0xF7,0xF6,0x00,0x00,0x54,0x17,0x04,0x04,0x04,0x04,0x00,0x53,0xB8, +0xB8,0xB8,0xF7,0xF6,0x00,0x00,0x53,0xDC,0x04,0x04,0x04,0xDA,0xF5,0x53,0xF3,0xF7, +0xF7,0x54,0x00,0xB8,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0xB8,0xB8, +0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDB,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xDF,0x04,0xD6, +0x00,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0xE1,0x04,0x04,0x04,0x04, +0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x58,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04, +0x5D,0x54,0x56,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x53,0xB3,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x54,0x04,0x04, +0x04,0xDE,0x00,0x00,0xDF,0x04,0x04,0x5D,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xF4,0x54,0xB3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF7, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xE1,0xF3,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0xF6,0xB8,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, +0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x55,0xDE,0x04,0x00,0xF6,0xDA,0xB8,0xF3,0x00, +0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x81,0xFF,0x45,0x04,0x00,0xF6,0x04,0x00,0xF6,0xF6,0x00,0x04,0x04,0x04, +0x04,0x04,0x54,0x56,0x04,0x04,0x04,0x55,0x53,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00, +0x00,0x00,0x58,0x04,0x04,0x04,0xD5,0x55,0x54,0x54,0xF6,0xDD,0x04,0x04,0x04,0x04, +0x57,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x54,0xF6,0xD3, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDC, +0xF6,0x58,0x04,0x58,0x55,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, +0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDA,0x04,0x04,0x04,0xD5,0xB8,0xF3,0x00, +0x00,0xF3,0x57,0xD8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0xD7, +0xF7,0x53,0x00,0x53,0x55,0xD7,0x04,0x04,0x04,0x04,0x04,0xD9,0xF7,0x53,0x00,0xB3, +0xB8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x04, +0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x53,0xB8,0xD9, +0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0xF3,0x00,0x54,0xF5,0x17,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0xDB,0xF7,0x53,0x00,0x54,0xF6,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x17,0x55,0xB3,0x00,0x00,0xF3,0xF7,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0x00,0x00,0x00,0x00,0x53,0xF6,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, +0x5D,0xF6,0x53,0x00,0x00,0xF3,0xF7,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, +0x00,0x00,0x54,0xF3,0x55,0x5C,0xD8,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x57, +0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x00,0x00,0x00,0xF3,0xF7,0xE1,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, +0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDF,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD5,0x00,0x00,0xF6,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0xF7,0xB3,0x00, +0x00,0xB3,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x53,0xF6,0x16,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x5A,0xF6,0x53,0x00,0x00, +0x53,0xF6,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xB3, +0x55,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0xF4,0x00,0x54,0xF5,0xDF,0x04, +0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x56,0x00,0xD0,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF5,0x04,0xF7,0x00,0xD9,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, +0xF4,0x04,0xDD,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD7, +0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0x5C,0x04, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDC,0xF5, +0x58,0x04,0x04,0xF3,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xB8,0xDA, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x00,0xD7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, +0xF5,0x54,0xF3,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, +0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0xD3,0xF7,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0xD5,0xF4,0x54,0x57,0x04,0x00,0xF6,0x04,0x00,0x53,0xF7,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, +0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF4,0xDA,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF4,0x04,0x55,0xF7,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x5D,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEC,0xFF,0x3B,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0xD9,0x04,0xD8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04, +0x04,0x3B,0x3B,0x3B,0x00,0x00, }; \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h index b35c3514e8d..705e43b76f4 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h +++ b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h @@ -14,7 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. * - ******************************************************************************/ + ******************************************************************************/ + #ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ #define EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ @@ -22,9 +23,10 @@ // bitmaps id // fonts id -#define urw_gothic_12_grey_bg_white 0 -#define urw_gothic_12_white_bg_grey 1 -#define urw_gothic_13_grey_bg_white 2 -#define urw_gothic_13_white_bg_grey 3 +#define urw_gothic_12_grey_bg_white 0 +#define urw_gothic_12_white_bg_grey 1 +#define urw_gothic_13_grey_bg_white 2 +#define urw_gothic_13_white_bg_grey 3 + #endif // EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index d523bd172b9..04137c4c0e9 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -16,6 +16,7 @@ * ******************************************************************************/ + /* **** Includes **** */ #include @@ -30,21 +31,18 @@ #include "cfs_logo.h" #include "end_game_text.h" + /* **** Definitions **** */ // Focus on top left corner of the top left block in the grid to help with visualize calculating the coordinates. -#define BLOCK_X_POSITION(col) \ - (GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (col))) -#define BLOCK_Y_POSITION(row) \ - (GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (row))) +#define BLOCK_X_POSITION(col) (GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (col))) +#define BLOCK_Y_POSITION(row) (GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (row))) // Math is to center the digits printed to the newly created block. -#define DIGIT_CENTER_X_POSITION(x, value) \ - (x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2)) -#define DIGIT_CENTER_Y_POSITION(y, value) \ - (y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2)) +#define DIGIT_CENTER_X_POSITION(x, value) (x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2)) +#define DIGIT_CENTER_Y_POSITION(y, value) (y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2)) // Test out delays so that it's not too slow and not too fast for human eye. -#define COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS (15) +#define COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS (15) /* **** Globals **** */ @@ -71,8 +69,7 @@ int Graphics_Init(void) MXC_TFT_DrawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, F_BACKGROUND_COLOR); // Draw CFS Logo. - MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, - cfs_logo); + MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, cfs_logo); // Draw Game Logo. // Forgive me for all the math who ever tries to read through the code. @@ -85,65 +82,32 @@ int Graphics_Init(void) int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_2048_DIGIT_PX_HEIGHT / 2); // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, - F_BACKGROUND_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_BACKGROUND_COLOR); // Draw digits. // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, - block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, block_2048, RGB565_BLACK, RGB565_BLOCK_2048); // Draw move counter. - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), - MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, - RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), - MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, - RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), - MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, - RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), - MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, - RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_TEXT_OFFSET_X, MOVES_TEXT_OFFSET_Y, GAME_TEXT_MOVES_WIDTH, - GAME_TEXT_MOVES_HEIGHT, game_text_moves, RGB565_BLACK, - RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_TEXT_OFFSET_X, MOVES_TEXT_OFFSET_Y, GAME_TEXT_MOVES_WIDTH, GAME_TEXT_MOVES_HEIGHT, game_text_moves, RGB565_BLACK, RGB565_WHITE); // Draw timer. - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, - GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, - GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, - GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, - GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_COLON_OFFSET_X, TIME_OFFSET_Y, GAME_TEXT_DIGIT_COLON_WIDTH, - GAME_TEXT_DIGITS_HEIGHT, game_text_colon, RGB565_BLACK, - RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, - GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, - GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, - GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, - GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_COLON_OFFSET_X, TIME_OFFSET_Y, GAME_TEXT_DIGIT_COLON_WIDTH, GAME_TEXT_DIGITS_HEIGHT, game_text_colon, RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); // Draw grid. - MXC_TFT_DrawRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, - GRID_LENGTH, F_GRID_COLOR); + MXC_TFT_DrawRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, GRID_LENGTH, F_GRID_COLOR); for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + - ((BLOCK_LENGTH + BLOCK_SPACING) * row), - GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + - ((BLOCK_LENGTH + BLOCK_SPACING) * col), - BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, - RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row), GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col), BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); } } @@ -158,17 +122,11 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4) // The math calculates where each block needs to be drawn as its animated to grow from small to big. // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - int x = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_X + GRID_SPACING + - BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_Y + GRID_SPACING + - BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); // Increase the block size by 10 pixels - MXC_TFT_DrawRoundedRect( - x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), - ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), - FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, - ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); // Don't delay when empty space is fully filled. if (frame_i < 5) { @@ -178,21 +136,17 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4) } // Calculate the starting coordinate to write the digit at the center of the tile. - int x = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(block_2_4) / 2) + GRID_OFFSET_X + - GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(block_2_4) / 2) + GRID_OFFSET_Y + - GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(block_2_4) / 2) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(block_2_4) / 2) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); // Draw a 2 or 4 digit. // Blocks 2 and 4 are lighter color, so white text won't fit. Use black text instead (Inverted). if (block_2_4 == 2) { // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_2_DIGIT_PX_WIDTH, BLOCK_2_DIGIT_PX_HEIGHT, - block_2, RGB565_BLACK, RGB565_BLOCK_2); + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_2_DIGIT_PX_WIDTH, BLOCK_2_DIGIT_PX_HEIGHT, block_2, RGB565_BLACK, RGB565_BLOCK_2); } else { // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_4_DIGIT_PX_WIDTH, BLOCK_4_DIGIT_PX_HEIGHT, - block_4, RGB565_BLACK, RGB565_BLOCK_4); + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_4_DIGIT_PX_WIDTH, BLOCK_4_DIGIT_PX_HEIGHT, block_4, RGB565_BLACK, RGB565_BLOCK_4); } } @@ -207,142 +161,107 @@ inline void Graphics_AddBlock(int row, int col, int value) int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2); switch (value) { - case 2: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), - BLOCK_DIGIT_PX_HEIGHT(value), block_2, RGB565_BLACK, - RGB565_BLOCK_2); - break; - - case 4: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_4), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), - BLOCK_DIGIT_PX_HEIGHT(value), block_4, RGB565_BLACK, - RGB565_BLOCK_4); - break; - - case 8: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_8), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_8, RGB565_BLACK, RGB565_BLOCK_8); - break; - - case 16: - // Draw text. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_16), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_16, RGB565_BLACK, RGB565_BLOCK_16); - break; - - case 32: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_32), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_32, RGB565_BLACK, RGB565_BLOCK_32); - break; - - case 64: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_64), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_64, RGB565_BLACK, RGB565_BLOCK_64); - break; - - case 128: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_128), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_128, RGB565_BLACK, RGB565_BLOCK_128); - break; - - case 256: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_256, RGB565_BLACK, RGB565_BLOCK_256); - break; - - case 512: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_512, RGB565_BLACK, RGB565_BLOCK_512); - break; - - case 1024: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_1024, RGB565_BLACK, RGB565_BLOCK_1024); - break; - - case 2048: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, - F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), - block_2048, RGB565_BLACK, RGB565_BLOCK_2048); - break; - - default: - break; + case 2: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_2, RGB565_BLACK, RGB565_BLOCK_2); + break; + + case 4: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_4), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_4, RGB565_BLACK, RGB565_BLOCK_4); + break; + + case 8: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_8), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_8, RGB565_BLACK, RGB565_BLOCK_8); + break; + + case 16: + // Draw text. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_16), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_16, RGB565_BLACK, RGB565_BLOCK_16); + break; + + case 32: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_32), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_32, RGB565_BLACK, RGB565_BLOCK_32); + break; + + case 64: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_64), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_64, RGB565_BLACK, RGB565_BLOCK_64); + break; + + case 128: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_128), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_128, RGB565_BLACK, RGB565_BLOCK_128); + break; + + case 256: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_256, RGB565_BLACK, RGB565_BLOCK_256); + break; + + case 512: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_512, RGB565_BLACK, RGB565_BLOCK_512); + break; + + case 1024: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_1024, RGB565_BLACK, RGB565_BLOCK_1024); + break; + + case 2048: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + break; + + default: + break; } } @@ -351,15 +270,12 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) int x = BLOCK_X_POSITION(col); int y = BLOCK_Y_POSITION(row); - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), - RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); // Animate the blow up. // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. for (int i = 0; i < BLOCK_SPACING + 1; i++) { - MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2 * i), BLOCK_LENGTH + (2 * i), - FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, - F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2*i), BLOCK_LENGTH + (2*i), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); // Delay for animation. MXC_Delay(MXC_DELAY_MSEC(6)); @@ -368,29 +284,16 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) // Animate the shrink down. for (int i = 0; i < BLOCK_SPACING; i++) { // Redraw block to remove corners. - MXC_TFT_DrawRoundedRect(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, - BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), - BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), - FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, - F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); // Remove outer borders again. - MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, - BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), - F_GRID_COLOR); // Top line. + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Top line. - MXC_TFT_DrawVerticalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, - BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), - F_GRID_COLOR); // Left line. + MXC_TFT_DrawVerticalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Left line. - MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + 1 + i, - BLOCK_LENGTH + y + BLOCK_SPACING - 1 - i, - BLOCK_LENGTH + ((BLOCK_SPACING - 1 - i) * 2), - F_GRID_COLOR); // Bottom line. + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + 1 + i, BLOCK_LENGTH + y + BLOCK_SPACING - 1 - i, BLOCK_LENGTH + ((BLOCK_SPACING - 1 - i)*2), F_GRID_COLOR); // Bottom line. - MXC_TFT_DrawVerticalLine(BLOCK_LENGTH + x + BLOCK_SPACING - 1 - i, y - BLOCK_SPACING + i, - BLOCK_LENGTH - 1 + ((BLOCK_SPACING - i) * 2), - F_GRID_COLOR); // Right line. + MXC_TFT_DrawVerticalLine(BLOCK_LENGTH + x + BLOCK_SPACING - 1 - i, y - BLOCK_SPACING + i, BLOCK_LENGTH - 1 + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Right line. // Delay for animation. MXC_Delay(MXC_DELAY_MSEC(6)); @@ -407,9 +310,7 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) // @param current_length Length of block at current frame. // @param f_color Formatted color code of outer border. // @param radius Radius ofrounded cornewrs and width of block. -static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, - uint32_t current_length, uint32_t f_color, - uint32_t radius) +static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) { // Draw top horizontal lines. for (int p_y = 0; p_y < radius; p_y++) { @@ -426,8 +327,7 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, dx--; } - MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, - current_length - (2 * (radius - dx)), f_color); + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, current_length - (2 * (radius - dx)), f_color); } // Draw bottom horizontal lines. @@ -445,8 +345,7 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, dx--; } - MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, - current_length - (2 * (radius - dx)), f_color); + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, current_length - (2 * (radius - dx)), f_color); } // Draw left vertical lines. @@ -464,8 +363,7 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, dy--; } - MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, - current_length - (2 * (radius - dy)), f_color); + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, current_length - (2 * (radius - dy)), f_color); } // Draw right vertical lines. @@ -483,8 +381,7 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, dy--; } - MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, - current_length - (2 * (radius - dy)), f_color); + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, current_length - (2 * (radius - dy)), f_color); } } @@ -495,18 +392,13 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, // @param current_length Length of block at current frame. // @param f_color Formatted color code of outer border. // @param radius Radius ofrounded cornewrs and width of block. -static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, - uint32_t current_length, uint32_t f_color, uint32_t radius) +static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) { for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { // Calculate distance from the corner. - int dx = (p_x < radius) ? radius - p_x : - (p_x >= current_length - radius) ? p_x - (current_length - radius - 1) : - 0; - int dy = (p_y < radius) ? radius - p_y : - (p_y >= current_length - radius) ? p_y - (current_length - radius - 1) : - 0; + int dx = (p_x < radius) ? radius - p_x : (p_x >= current_length - radius) ? p_x - (current_length - radius - 1) : 0; + int dy = (p_y < radius) ? radius - p_y : (p_y >= current_length - radius) ? p_y - (current_length - radius - 1) : 0; // Use pythagorean theorem to map coordinates, square not necessary when comparing with r. if (((dx * dx) + (dy * dy)) > (radius * radius)) { @@ -545,13 +437,9 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) if (frame_i == 0) { // Draw entire block for first frame. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, - FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), - RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS, F_GRID_COLOR); } else { - graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), - FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), - RADIUS_FOR_CORNERS); + graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS); } } } @@ -580,23 +468,14 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) uint32_t y = BLOCK_Y_POSITION(row); // Erase outer edges. - MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y - (frame_i + 1), - BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - MXC_TFT_DrawVerticalLine(x - (frame_i + 1), y - (frame_i + 1), - BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - - MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), - y + BLOCK_LENGTH + (2 * (frame_i + 1)) - - (frame_i + 1) - 1, - BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - MXC_TFT_DrawVerticalLine( - x + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, - y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine(x - (frame_i + 1), y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine(x + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); // Erase corners. - graphics_helper_eraseCorners(x - frame_i, y - frame_i, frame_i, - BLOCK_LENGTH + (2 * (frame_i)), F_GRID_COLOR, - RADIUS_FOR_CORNERS); + graphics_helper_eraseCorners(x - frame_i, y - frame_i, frame_i, BLOCK_LENGTH + (2 * (frame_i)), F_GRID_COLOR, RADIUS_FOR_CORNERS); // Draw digit in last frame. if ((frame_i) == 0) { @@ -605,20 +484,9 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) // Blocks 2 and 4 are the only ones with inverted digit colors because of their block color. // However, Block 2 will nevber be a combined block. if (grid[row][col] == 4) { - MXC_TFT_DrawBitmapInvertedMask( - DIGIT_CENTER_X_POSITION(x, grid[row][col]), - DIGIT_CENTER_Y_POSITION(y, grid[row][col]), - BLOCK_DIGIT_PX_WIDTH(grid[row][col]), - BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), - BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, - RGB_BLOCK_COLOR(grid[row][col])); + MXC_TFT_DrawBitmapInvertedMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), DIGIT_CENTER_Y_POSITION(y, grid[row][col]), BLOCK_DIGIT_PX_WIDTH(grid[row][col]), BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, RGB_BLOCK_COLOR(grid[row][col])); } else { - MXC_TFT_DrawBitmapMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), - DIGIT_CENTER_Y_POSITION(y, grid[row][col]), - BLOCK_DIGIT_PX_WIDTH(grid[row][col]), - BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), - BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, - RGB_BLOCK_COLOR(grid[row][col])); + MXC_TFT_DrawBitmapMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), DIGIT_CENTER_Y_POSITION(y, grid[row][col]), BLOCK_DIGIT_PX_WIDTH(grid[row][col]), BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, RGB_BLOCK_COLOR(grid[row][col])); } } } @@ -636,221 +504,183 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_direction_t direction) { switch (direction) { - case GRAPHICS_SLIDE_DIR_UP: - // Start from bottom row to top row (column order doesn't matter). - // This for-loop keeps track of the localized y position of where the horizontal line is drawn. - // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { - // These two for-loops iterate through each block in the - // grid (bottom row to top row, columns direction - don't care) and - // erases a horizontal line (1-pixel wide) - for (int row = 3; row >= 0; row--) { - for (int col = 0; col < 4; col++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_y < RADIUS_FOR_CORNERS) || - (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting x position using pythagorean theorem. - int dx = 0; - int dy = (p_y < RADIUS_FOR_CORNERS) ? - RADIUS_FOR_CORNERS - p_y : - (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? - p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : - 0; - - while ((dx * dx) < - ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { - dx++; + case GRAPHICS_SLIDE_DIR_UP: + // Start from bottom row to top row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { + // These two for-loops iterate through each block in the + // grid (bottom row to top row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 3; row >= 0; row--) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + + while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } - - // No negative horizontal distance. - if (dx > 0) { - dx--; - } - - MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, - BLOCK_LENGTH - - (2 * (RADIUS_FOR_CORNERS - dx)), - F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, - F_EMPTY_BLOCK_COLOR); } } } } - } - break; - - case GRAPHICS_SLIDE_DIR_DOWN: - // Start from top row to bottom row (column order doesn't matter). - // This for-loop keeps track of the localized y position of where the horizontal line is drawn. - // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { - // These two for-loops iterate through each block in the - // grid (top row to bottom row, columns direction - don't care) and - // erases a horizontal line (1-pixel wide) - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_y < RADIUS_FOR_CORNERS) || - (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting x position using pythagorean theorem. - int dx = 0; - int dy = (p_y < RADIUS_FOR_CORNERS) ? - RADIUS_FOR_CORNERS - p_y : - (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? - p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : - 0; - - while ((dx * dx) < - ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { - dx++; - } - - // No negative horizontal distance. - if (dx > 0) { - dx--; + break; + + case GRAPHICS_SLIDE_DIR_DOWN: + // Start from top row to bottom row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { + // These two for-loops iterate through each block in the + // grid (top row to bottom row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + + while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } - - MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, - BLOCK_LENGTH - - (2 * (RADIUS_FOR_CORNERS - dx)), - F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, - F_EMPTY_BLOCK_COLOR); } } } } - } - break; - - case GRAPHICS_SLIDE_DIR_LEFT: - // Start from right column to left column (row order doesn't matter). - // This for-loop keeps track of the localized x position of where the vertical line is drawn. - // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { - // These two for-loops iterate through each block in the - // grid (right column to left column, rows direction - don't care) and - // erases a vertical line (1-pixel wide) - for (int col = 3; col >= 0; col--) { - for (int row = 0; row < 4; row++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_x < RADIUS_FOR_CORNERS) || - (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem. - int dx = (p_x < RADIUS_FOR_CORNERS) ? - RADIUS_FOR_CORNERS - p_x : - (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? - p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : - 0; - int dy = 0; - - while ((dy * dy) < - ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { - dy++; - } - - // No negative vertical distance. - if (dy > 0) { - dy--; + break; + + case GRAPHICS_SLIDE_DIR_LEFT: + // Start from right column to left column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 3; col >= 0; col--) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + int dy = 0; + + while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } - - MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, - BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), - F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } } - } - break; - - case GRAPHICS_SLIDE_DIR_RIGHT: - // Start from left column to right column (row order doesn't matter). - // This for-loop keeps track of the localized x position of where the vertical line is drawn. - // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { - // These two for-loops iterate through each block in the - // grid (right column to left column, rows direction - don't care) and - // erases a vertical line (1-pixel wide) - for (int col = 0; col < 4; col++) { - for (int row = 0; row < 4; row++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_x < RADIUS_FOR_CORNERS) || - (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem. - int dx = (p_x < RADIUS_FOR_CORNERS) ? - RADIUS_FOR_CORNERS - p_x : - (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? - p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : - 0; - int dy = 0; - - while ((dy * dy) < - ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { - dy++; - } - - // No negative vertical distance. - if (dy > 0) { - dy--; + break; + + case GRAPHICS_SLIDE_DIR_RIGHT: + // Start from left column to right column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 0; col < 4; col++) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; + int dy = 0; + + while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } - - MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, - BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), - F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } } - } - break; + break; - default: - return; + default: + return; } } -void Graphics_EraseSingleBlock(int row, int col) -{ +void Graphics_EraseSingleBlock(int row, int col) { // Forgive me for all the math who ever tries to read through the code. // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, - RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); } void Graphics_SetTime(uint32_t total_seconds) @@ -873,44 +703,28 @@ void Graphics_SetTime(uint32_t total_seconds) } // Update timer on display. - MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, - GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), - TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), - RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. if (prev_timer_digit1 != digit1) { - MXC_TFT_DrawRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, - GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), - TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), - RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); prev_timer_digit1 = digit1; } // Changes every 60 seconds. if (prev_timer_digit2 != digit2) { - MXC_TFT_DrawRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, - GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), - TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), - RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); prev_timer_digit2 = digit2; } // Changes every 600 seoncds. if (prev_timer_digit3 != digit3) { - MXC_TFT_DrawRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, - GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), - TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), - RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); prev_timer_digit3 = digit3; } } @@ -934,56 +748,38 @@ void Graphics_UpdateMovesCount(uint32_t moves_count) } // Update timer on display. - MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, - MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), - MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), - RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. if (prev_moves_digit1 != digit1) { - MXC_TFT_DrawRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, - MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), - MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), - RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); prev_moves_digit1 = digit1; } // Changes every 60 seconds. if (prev_moves_digit2 != digit2) { - MXC_TFT_DrawRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, - MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), - MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), - RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); prev_moves_digit2 = digit2; } // Changes every 600 seoncds. if (prev_moves_digit3 != digit3) { - MXC_TFT_DrawRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, - MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), - MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), - GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), - RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); prev_moves_digit3 = digit3; } } void Graphics_DisplayGameOver(void) { - MXC_TFT_DrawBitmap(GAME_OVER_BOX_OFFSET_X, GAME_OVER_BOX_OFFSET_Y, GAME_OVER_BOX_WIDTH, - GAME_OVER_BOX_HEIGHT, game_over); + MXC_TFT_DrawBitmap(GAME_OVER_BOX_OFFSET_X, GAME_OVER_BOX_OFFSET_Y, GAME_OVER_BOX_WIDTH, GAME_OVER_BOX_HEIGHT, game_over); } void Graphics_DisplayYouWin(void) { - MXC_TFT_DrawBitmap(YOU_WIN_BOX_OFFSET_X, YOU_WIN_BOX_OFFSET_Y, YOU_WIN_BOX_WIDTH, - YOU_WIN_BOX_HEIGHT, you_win); + MXC_TFT_DrawBitmap(YOU_WIN_BOX_OFFSET_X, YOU_WIN_BOX_OFFSET_Y, YOU_WIN_BOX_WIDTH, YOU_WIN_BOX_HEIGHT, you_win); } diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h index 45222b36eb4..251f1a82573 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -42,7 +42,12 @@ typedef enum { * combined at new grid. * IMPORTANT: Sync these commands with the ARM core. */ -typedef enum { EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; +typedef enum { + EMPTY = 0, + ERASE = 1, + COMBINE = 2, + UNMOVED = 3 +} block_state_t; /** * These enums help track the state of the end game.. diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h index 3c8894d5e27..5127400c7aa 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h @@ -49,13 +49,12 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. -#define MAILBOX_MAIN_GRID_STATE_IDX \ - (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) -#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) #endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index b283dc951cf..703e2b7ca5b 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -56,7 +56,7 @@ // UART speed up is set at the beginning of BOTH ARM and RISC-V main code // because SystemInit for both cores default the UART baud rate to // 115200. -#define CONTROLLER_UART_BAUD (115200) +#define CONTROLLER_UART_BAUD (115200) /* **** Globals **** */ // Defined in sema_reva.c @@ -72,8 +72,8 @@ uint8_t CONTROLLER_KEYPRESS; volatile bool KEYPRESS_READY = false; uint8_t KEYPRESS_INPUT_DIR; -uint32_t RISCV_GRID_COPY[4][4] = { 0 }; -uint8_t RISCV_GRID_COPY_STATE[4][4] = { 0 }; +uint32_t RISCV_GRID_COPY[4][4] = {0}; +uint8_t RISCV_GRID_COPY_STATE[4][4] = {0}; uint32_t MOVES_COUNT = 0; @@ -108,36 +108,35 @@ void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) // User can add additional directional key switches here. switch (CONTROLLER_KEYPRESS) { - case 'a': - KEYPRESS_INPUT_DIR = INPUT_LEFT; - KEYPRESS_READY = true; - break; - - case 'd': - KEYPRESS_INPUT_DIR = INPUT_RIGHT; - KEYPRESS_READY = true; - break; - - case 'w': - KEYPRESS_INPUT_DIR = INPUT_UP; - KEYPRESS_READY = true; - break; - - case 's': - KEYPRESS_INPUT_DIR = INPUT_DOWN; - KEYPRESS_READY = true; - break; - - default: - KEYPRESS_READY = false; - error = Controller_Start(&CONTROLLER_REQ); - if (error != E_NO_ERROR) { - PRINT("RISC-V: Invalid Keypress: %c\n", CONTROLLER_KEYPRESS); - } + case 'a': + KEYPRESS_INPUT_DIR = INPUT_LEFT; + KEYPRESS_READY = true; + break; + + case 'd': + KEYPRESS_INPUT_DIR = INPUT_RIGHT; + KEYPRESS_READY = true; + break; + + case 'w': + KEYPRESS_INPUT_DIR = INPUT_UP; + KEYPRESS_READY = true; + break; + + case 's': + KEYPRESS_INPUT_DIR = INPUT_DOWN; + KEYPRESS_READY = true; + break; + + default: + KEYPRESS_READY = false; + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Invalid Keypress: %c\n", CONTROLLER_KEYPRESS); + } } - PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, - cb_error); + PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, cb_error); } // Must grab grid space before calling this function to have the latest @@ -212,11 +211,11 @@ void SendGridToARMCore(void) for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i + 1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i + 2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i + 3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; - i += 4; + i+=4; } } @@ -236,8 +235,7 @@ inline void SendKeypressToARMCore(void) void SendNewBlockIndexToARMCore(uint8_t *new_block_idx, uint8_t did_block_move_or_is_init) { - SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX] = (did_block_move_or_is_init >> (8 * 0)) & - 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX] = (did_block_move_or_is_init >> (8 * 0)) & 0xFF; SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] = (*new_block_idx >> (8 * 0)) & 0xFF; } @@ -249,9 +247,9 @@ void SendGameStateToARMCore(game_state_t state) void SendMovesCountToARMCore(uint32_t moves_count) { SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] = (moves_count >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 1] = (moves_count >> (8 * 1)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 2] = (moves_count >> (8 * 2)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 3] = (moves_count >> (8 * 3)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+1] = (moves_count >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+2] = (moves_count >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+3] = (moves_count >> (8 * 3)) & 0xFF; } // ***************************************************************************** @@ -298,13 +296,11 @@ int main(void) error = MXC_SEMA_GetSema(SEMA_IDX_RISCV); if (error != E_NO_ERROR) { - PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", - MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); LED_On(LED_RED); while (1) {} } else { - PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", - MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); } // Initialize mailboxes between ARM and RISCV cores. @@ -344,7 +340,7 @@ int main(void) SendGameStateToARMCore(Game_2048_CheckState()); - // Signal ARM core to + // Signal ARM core to MXC_SEMA_FreeSema(SEMA_IDX_ARM); // Wait for ARM core to finish displaying the starting grid. @@ -359,7 +355,7 @@ int main(void) MXC_SEMA_GetSema(SEMA_IDX_RISCV); input_direction_t dir = KEYPRESS_INPUT_DIR; - + state = Game_2048_UpdateGrid(dir, &new_block_idx_location); if (state == true) { PRINT("RISC-V: Blocks moved.\n"); diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c index 8c4222c5b1d..dc5dd747d30 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c @@ -16,6 +16,7 @@ * ******************************************************************************/ + /* **** Includes **** */ #include @@ -24,6 +25,7 @@ /* **** Definitions **** */ + /* **** Globals **** */ static mxc_uart_regs_t *Controller_UART; @@ -72,3 +74,5 @@ int Controller_Start(mxc_uart_req_t *req) return E_NO_ERROR; } + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index 623eaf292d3..4141092ddae 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -35,12 +35,8 @@ #define PRINT(...) #endif -#define COLUMN_SUM(col) \ - ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + \ - MAIN_2048_GRID[3][col])) -#define ROW_SUM(row) \ - ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + \ - MAIN_2048_GRID[row][3])) +#define COLUMN_SUM(col) ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + MAIN_2048_GRID[3][col])) +#define ROW_SUM(row) ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + MAIN_2048_GRID[row][3])) /* **** Globals **** */ @@ -91,7 +87,7 @@ static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) // Add more weight to 2. if (MXC_TRNG_RandomInt() % 3) { // 1 or 2 block_2_or_4 = 2; - } else { // 0 + } else { // 0 block_2_or_4 = 4; } } @@ -110,7 +106,7 @@ static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) // ---|---|---|--- ------|-------|-------|------ // c | d | e | f (3,0) | (3,1) | (3,2) | (3,3) for (int i = 0; i < 16; i++) { - if (MAIN_2048_GRID[i / 4][i % 4] == 0) { + if (MAIN_2048_GRID[i/4][i%4] == 0) { available_open_spaces += 1; } } @@ -190,8 +186,8 @@ inline static bool row_logic_left(void) continue; } - uint32_t prev_row[4] = { 0 }; - uint32_t temp_row[4] = { 0 }; + uint32_t prev_row[4] = {0}; + uint32_t temp_row[4] = {0}; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. // Get all valid blocks in column to help with same-value pair logic. @@ -294,8 +290,8 @@ inline static bool row_logic_right(void) continue; } - uint32_t prev_row[4] = { 0 }; - uint32_t temp_row[4] = { 0 }; + uint32_t prev_row[4] = {0}; + uint32_t temp_row[4] = {0}; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. // Get all valid blocks to help with same-value pair logic. @@ -399,8 +395,8 @@ inline static bool column_logic_up(void) continue; } - uint32_t prev_col[4] = { 0 }; - uint32_t temp_column[4] = { 0 }; + uint32_t prev_col[4] = {0}; + uint32_t temp_column[4] = {0}; int temp_row_num = 0; // Also tracks how many valid blocks there are. // Get all valid blocks to help with same-value pair logic. @@ -502,8 +498,8 @@ static bool column_logic_down(void) continue; } - uint32_t prev_col[4] = { 0 }; - uint32_t temp_column[4] = { 0 }; + uint32_t prev_col[4] = {0}; + uint32_t temp_column[4] = {0}; int temp_row_num = 0; // Also tracks how many valid blocks there are in column. // Get all valid blocks to help with same-value pair logic. @@ -617,7 +613,7 @@ game_state_t Game_2048_CheckState(void) // Check if a row has same value pair. for (int r = 0; r < 4; r++) { for (int c = 0; c < 3; c++) { - if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r][c + 1]) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r][c+1]) { return IN_PROGRESS; } } @@ -626,7 +622,7 @@ game_state_t Game_2048_CheckState(void) // Check if a column has a same-value pair. for (int c = 0; c < 4; c++) { for (int r = 0; r < 3; r++) { - if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r + 1][c]) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r+1][c]) { return IN_PROGRESS; } } @@ -651,30 +647,30 @@ bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx } // Run main game logic. - switch (direction) { - case INPUT_UP: - printf("UP\n"); - blocks_moved = column_logic_up(); - break; - - case INPUT_DOWN: - printf("DOWN\n"); - blocks_moved = column_logic_down(); - break; - - case INPUT_LEFT: - printf("LEFT\n"); - blocks_moved = row_logic_left(); - break; - - case INPUT_RIGHT: - printf("RIGHT\n"); - blocks_moved = row_logic_right(); - break; - - // Should never reach here. - default: - return false; + switch(direction) { + case INPUT_UP: + printf("UP\n"); + blocks_moved = column_logic_up(); + break; + + case INPUT_DOWN: + printf("DOWN\n"); + blocks_moved = column_logic_down(); + break; + + case INPUT_LEFT: + printf("LEFT\n"); + blocks_moved = row_logic_left(); + break; + + case INPUT_RIGHT: + printf("RIGHT\n"); + blocks_moved = row_logic_right(); + break; + + // Should never reach here. + default: + return false; } // Once the main game logic is done, insert a new block. diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.c b/Libraries/MiscDrivers/Display/tft_ssd2119.c index 6011d06d210..b5ffab47f75 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.c +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.c @@ -1261,12 +1261,11 @@ void MXC_TFT_DrawBitmap(int px_x, int px_y, int width, int height, uint16_t *ima displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { // g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); - g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | - (uint32_t)((image[i] & 0xFF00) << 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | (uint32_t)((image[i] & 0xFF00) << 8)); spi_transmit((uint16_t *)g_fifo, 2); i += 1; } @@ -1302,11 +1301,10 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { - g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | - (uint32_t)((~image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | (uint32_t)((~image[i] & 0xFF00) >> 8)); spi_transmit((uint16_t *)g_fifo, 2); i += 1; } @@ -1315,8 +1313,7 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 __enable_irq(); } -void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, - uint16_t original_color, uint16_t mask) +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask) { area_t _area; area_t *area; @@ -1343,15 +1340,13 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (image[i] == original_color) { - g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | - (uint32_t)((mask & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | (uint32_t)((mask & 0xFF00) >> 8)); } else { - g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | - (uint32_t)((image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); } spi_transmit((uint16_t *)g_fifo, 2); i += 1; @@ -1361,8 +1356,7 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t __enable_irq(); } -void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, - uint16_t original_color, uint16_t mask) +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask) { area_t _area; area_t *area; @@ -1389,15 +1383,13 @@ void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, u displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (image[i] == original_color) { - g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | - (uint32_t)((mask & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | (uint32_t)((mask & 0xFF00) >> 8)); } else { - g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | - (uint32_t)((~image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | (uint32_t)((~image[i] & 0xFF00) >> 8)); } spi_transmit((uint16_t *)g_fifo, 2); i += 1; @@ -1604,8 +1596,7 @@ void MXC_TFT_PrintPalette(void) } } -void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, - int radius, uint32_t background_color) +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, int radius, uint32_t background_color) { area_t _area; area_t *area; diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.h b/Libraries/MiscDrivers/Display/tft_ssd2119.h index e947fe869b0..aeed7ce1138 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.h +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.h @@ -113,6 +113,7 @@ void MXC_TFT_ClearScreen(void); */ void MXC_TFT_FillRect(area_t *area, int color); + /** * @brief Draws an image that's already been formatted for the * 9-bit SPI transactions. @@ -166,8 +167,7 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 * @param original_color 16-bit RGB565 color code to be replaced on bitmap. * @param mask New 16-bit RGB565 color code that replaces the original color. */ -void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, - uint16_t original_color, uint16_t mask); +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask); /** * @brief Draws an inverted color, raw bitmap (RGB565 16-bit color codes) to display with a single RGB565 color replaced @@ -184,8 +184,7 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t * @param original_color 16-bit RGB565 color code to be replaced on bitmap. * @param mask New 16-bit RGB565 color code that replaces the original color. */ -void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, - uint16_t original_color, uint16_t mask); +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask); /** * @brief Draws a single-pixel height, horizontal line. @@ -229,6 +228,7 @@ void MXC_TFT_DrawRect(int pixelX, int pixelY, int width, int height, uint32_t co */ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t color); + /** * @brief Draws a rectangle with rounded corners. * @@ -240,8 +240,7 @@ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t * @param radius Radius of corners (how much you want rounded off). * @param background_color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). */ -void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, - int radius, uint32_t background_color); +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, int radius, uint32_t background_color); /** * @brief Draw a bitmap diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/main.c b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/main.c index 1a2049ee595..10e6fe88a4a 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/main.c +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/main.c @@ -43,41 +43,38 @@ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTYPES //--------------------------------------------------------------------+ -#define AUDIO_SAMPLE_RATE CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE +#define AUDIO_SAMPLE_RATE CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE /* Blink pattern * - 250 ms : device not mounted * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 -uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 uint32_t sampFreq; uint8_t clkValid; // Range states -audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // Volume range state -audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state +audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state +audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state #if CFG_TUD_AUDIO_ENABLE_ENCODING // Audio test data, each buffer contains 2 channels, buffer[0] for CH0-1, buffer[1] for CH1-2 -uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO] - [CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX * CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE / - 1000 / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; +uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX*CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE/1000/CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; #else // Audio test data, 4 channels muxed together, buffer[0] for CH0, buffer[1] for CH1, buffer[2] for CH2, buffer[3] for CH3 -uint16_t - i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX * CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE / 1000]; +uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX*CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE/1000]; #endif void led_blinking_task(void); @@ -86,65 +83,69 @@ void audio_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - // Init values - sampFreq = AUDIO_SAMPLE_RATE; - clkValid = 1; + // Init values + sampFreq = AUDIO_SAMPLE_RATE; + clkValid = 1; - sampleFreqRng.wNumSubRanges = 1; - sampleFreqRng.subrange[0].bMin = AUDIO_SAMPLE_RATE; - sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE; - sampleFreqRng.subrange[0].bRes = 0; + sampleFreqRng.wNumSubRanges = 1; + sampleFreqRng.subrange[0].bMin = AUDIO_SAMPLE_RATE; + sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE; + sampleFreqRng.subrange[0].bRes = 0; - // Generate dummy data + // Generate dummy data #if CFG_TUD_AUDIO_ENABLE_ENCODING - uint16_t *p_buff = i2s_dummy_buffer[0]; - uint16_t dataVal = 0; - for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE / 1000; cnt++) { - // CH0 saw wave - *p_buff++ = dataVal; - // CH1 inverted saw wave - *p_buff++ = 3200 + AUDIO_SAMPLE_RATE / 1000 - dataVal; - dataVal += 32; - } - p_buff = i2s_dummy_buffer[1]; - for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE / 1000; cnt++) { - // CH3 square wave - *p_buff++ = cnt < (AUDIO_SAMPLE_RATE / 1000 / 2) ? 3400 : 5000; - // CH4 sinus wave - float t = 2 * 3.1415f * cnt / (AUDIO_SAMPLE_RATE / 1000); - *p_buff++ = (uint16_t)((int16_t)(sinf(t) * 750) + 6000); - } + uint16_t * p_buff = i2s_dummy_buffer[0]; + uint16_t dataVal = 0; + for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++) + { + // CH0 saw wave + *p_buff++ = dataVal; + // CH1 inverted saw wave + *p_buff++ = 3200 + AUDIO_SAMPLE_RATE/1000 - dataVal; + dataVal+= 32; + } + p_buff = i2s_dummy_buffer[1]; + for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++) + { + // CH3 square wave + *p_buff++ = cnt < (AUDIO_SAMPLE_RATE/1000/2) ? 3400:5000; + // CH4 sinus wave + float t = 2*3.1415f * cnt / (AUDIO_SAMPLE_RATE/1000); + *p_buff++ = (uint16_t)((int16_t)(sinf(t) * 750) + 6000); + } #else - uint16_t *p_buff = i2s_dummy_buffer; - uint16_t dataVal = 0; - for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE / 1000; cnt++) { - // CH0 saw wave - *p_buff++ = dataVal; - // CH1 inverted saw wave - *p_buff++ = 3200 + AUDIO_SAMPLE_RATE / 1000 - dataVal; - dataVal += 32; - // CH3 square wave - *p_buff++ = cnt < (AUDIO_SAMPLE_RATE / 1000 / 2) ? 3400 : 5000; - // CH4 sinus wave - float t = 2 * 3.1415f * cnt / (AUDIO_SAMPLE_RATE / 1000); - *p_buff++ = (uint16_t)((int16_t)(sinf(t) * 750) + 6000); - } + uint16_t * p_buff = i2s_dummy_buffer; + uint16_t dataVal = 0; + for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++) + { + // CH0 saw wave + *p_buff++ = dataVal; + // CH1 inverted saw wave + *p_buff++ = 3200 + AUDIO_SAMPLE_RATE/1000 - dataVal; + dataVal+= 32; + // CH3 square wave + *p_buff++ = cnt < (AUDIO_SAMPLE_RATE/1000/2) ? 3400:5000; + // CH4 sinus wave + float t = 2*3.1415f * cnt / (AUDIO_SAMPLE_RATE/1000); + *p_buff++ = (uint16_t)((int16_t)(sinf(t) * 750) + 6000); + } #endif - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - audio_task(); - } + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + audio_task(); + } } //--------------------------------------------------------------------+ @@ -154,13 +155,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -168,14 +169,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -184,25 +185,20 @@ void tud_resume_cb(void) void audio_task(void) { - // Yet to be filled - e.g. read audio from I2S buffer. - // Here we simulate a I2S receive callback every 1ms. - static uint32_t start_ms = 0; - uint32_t curr_ms = board_millis(); - if (start_ms == curr_ms) - return; // not enough time - start_ms = curr_ms; + // Yet to be filled - e.g. read audio from I2S buffer. + // Here we simulate a I2S receive callback every 1ms. + static uint32_t start_ms = 0; + uint32_t curr_ms = board_millis(); + if ( start_ms == curr_ms ) return; // not enough time + start_ms = curr_ms; #if CFG_TUD_AUDIO_ENABLE_ENCODING - // Write I2S buffer into FIFO - for (uint8_t cnt = 0; cnt < 2; cnt++) { - tud_audio_write_support_ff(cnt, i2s_dummy_buffer[cnt], - AUDIO_SAMPLE_RATE / 1000 * - CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * - CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX); - } + // Write I2S buffer into FIFO + for (uint8_t cnt=0; cnt < 2; cnt++) + { + tud_audio_write_support_ff(cnt, i2s_dummy_buffer[cnt], AUDIO_SAMPLE_RATE/1000 * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX); + } #else - tud_audio_write(i2s_dummy_buffer, AUDIO_SAMPLE_RATE / 1000 * - CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX); + tud_audio_write(i2s_dummy_buffer, AUDIO_SAMPLE_RATE/1000 * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX); #endif } @@ -211,288 +207,285 @@ void audio_task(void) //--------------------------------------------------------------------+ // Invoked when audio class specific set request received for an EP -bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; - (void)pBuff; + (void) rhport; + (void) pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; - (void)pBuff; + (void) rhport; + (void) pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void)itf; + (void) itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if (entityID == 2) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if ( entityID == 2 ) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = (uint16_t)((audio_control_cur_2_t *)pBuff)->bCur; + volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } - return false; // Yet not implemented + } + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - // return tud_control_xfer(rhport, p_request, &tmp, 1); + // return tud_control_xfer(rhport, p_request, &tmp, 1); - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == 1) { - switch (ctrlSel) { - case AUDIO_TE_CTRL_CONNECTOR: { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = (audio_channel_config_t)0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - } break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; - } + (void) rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == 1) + { + switch ( ctrlSel ) + { + case AUDIO_TE_CTRL_CONNECTOR: + { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = (audio_channel_config_t) 0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + } + break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; } - - // Feature unit - if (entityID == 2) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], - sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 90; // +90 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; + } + + // Feature unit + if (entityID == 2) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) + ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 90; // +90 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - } - - // Clock Source unit - if (entityID == 4) { - switch (ctrlSel) { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - // Buffered control transfer is needed for IN flow control to work - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, - sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Sample Freq. range\r\n"); - return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + break; // Unknown/Unsupported control - default: + default: + TU_BREAKPOINT(); + return false; + } + } + + // Clock Source unit + if ( entityID == 4 ) + { + switch ( ctrlSel ) + { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + // Buffered control transfer is needed for IN flow control to work + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Sample Freq. range\r\n"); + return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); + + // Unknown/Unsupported control + default: TU_BREAKPOINT(); return false; } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } + } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, - uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; - - // In read world application data flow is driven by I2S clock, - // both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used. - // For example in your I2S receive callback: - // void I2S_Rx_Callback(int channel, const void* data, uint16_t samples) - // { - // tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO); - // } - - return true; + (void) rhport; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; + + + // In read world application data flow is driven by I2S clock, + // both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used. + // For example in your I2S receive callback: + // void I2S_Rx_Callback(int channel, const void* data, uint16_t samples) + // { + // tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO); + // } + + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, - uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)n_bytes_copied; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void) rhport; + (void) n_bytes_copied; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; - return true; + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - (void)p_request; + (void) rhport; + (void) p_request; - return true; + return true; } //--------------------------------------------------------------------+ @@ -500,14 +493,13 @@ bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h index dccd82b609f..46484f847be 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,63 +87,51 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 +#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX \ - 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ - 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup -#define CFG_TUD_AUDIO_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup +#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_ENABLE_ENCODING 1 -#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 +#define CFG_TUD_AUDIO_ENABLE_ENCODING 1 +#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 #if CFG_TUD_AUDIO_ENABLE_ENCODING -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1 -#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX \ - 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value -#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO \ - (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX) -#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ \ - (TUD_OPT_HIGH_SPEED ? 32 : 4) * \ - (CFG_TUD_AUDIO_EP_SZ_IN / \ - CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1 +#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value +#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX) +#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * (CFG_TUD_AUDIO_EP_SZ_IN / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device #else -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ - (TUD_OPT_HIGH_SPEED ? 32 : 4) * \ - CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device #endif diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c index b3b48754258..728a5f9cecb 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c @@ -32,83 +32,85 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) #if TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO 0x03 + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) -// nRF5x ISO can only be endpoint 8 -#define EPNUM_AUDIO 0x08 + // nRF5x ISO can only be endpoint 8 + #define EPNUM_AUDIO 0x08 #else -#define EPNUM_AUDIO 0x01 + #define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR( - /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, - /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, - /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * 8, - /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) + // Interface number, string index, EP Out & EP In address, EP size + TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -117,64 +119,61 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode_4_Ch", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const* string_desc_arr [] = { + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode_4_Ch", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h index ccd96107b31..869500ad2ad 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h @@ -26,6 +26,7 @@ * 1 tab == 4 spaces! */ + #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H @@ -48,145 +49,142 @@ #include "bsp/board_mcu.h" #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -#error "ESP32-Sx should use IDF's FreeRTOSConfig.h" + #error "ESP32-Sx should use IDF's FreeRTOSConfig.h" #endif // TODO fix later #if CFG_TUSB_MCU == OPT_MCU_MM32F327X -extern u32 SystemCoreClock; + extern u32 SystemCoreClock; #else -// FIXME cause redundant-decls warnings -extern uint32_t SystemCoreClock; + // FIXME cause redundant-decls warnings + extern uint32_t SystemCoreClock; #endif #endif /* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU 0 -#define configENABLE_FPU 1 -#define configENABLE_TRUSTZONE 0 -#define configMINIMAL_SECURE_STACK_SIZE (1024) -#define configRUN_FREERTOS_SECURE_ONLY 1 +#define configENABLE_MPU 0 +#define configENABLE_FPU 1 +#define configENABLE_TRUSTZONE 0 +#define configMINIMAL_SECURE_STACK_SIZE ( 1024 ) +#define configRUN_FREERTOS_SECURE_ONLY 1 -#define configUSE_PREEMPTION 1 +#define configUSE_PREEMPTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ SystemCoreClock -#define configTICK_RATE_HZ (1000) -#define configMAX_PRIORITIES (5) -#define configMINIMAL_STACK_SIZE (128) -#define configTOTAL_HEAP_SIZE (configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024) -#define configMAX_TASK_NAME_LEN 16 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configQUEUE_REGISTRY_SIZE 4 -#define configUSE_QUEUE_SETS 0 -#define configUSE_TIME_SLICING 0 -#define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 - -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configSUPPORT_DYNAMIC_ALLOCATION 0 +#define configCPU_CLOCK_HZ SystemCoreClock +#define configTICK_RATE_HZ ( 1000 ) +#define configMAX_PRIORITIES ( 5 ) +#define configMINIMAL_STACK_SIZE ( 128 ) +#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 ) +#define configMAX_TASK_NAME_LEN 16 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configQUEUE_REGISTRY_SIZE 4 +#define configUSE_QUEUE_SETS 0 +#define configUSE_TIME_SLICING 0 +#define configUSE_NEWLIB_REENTRANT 0 +#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 + +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 0 /* Hook function related definitions. */ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configCHECK_HANDLER_INSTALLATION 0 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configCHECK_HANDLER_INSTALLATION 0 /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS 0 -#define configUSE_TRACE_FACILITY 1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#define configGENERATE_RUN_TIME_STATS 0 +#define configUSE_TRACE_FACILITY 1 // legacy trace +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES 2 +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 /* Software timer related definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 2) -#define configTIMER_QUEUE_LENGTH 32 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2) +#define configTIMER_QUEUE_LENGTH 32 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet 0 -#define INCLUDE_uxTaskPriorityGet 0 -#define INCLUDE_vTaskDelete 0 -#define INCLUDE_vTaskSuspend \ - 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR 0 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 -#define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 -#define INCLUDE_xTaskGetIdleTaskHandle 0 +#define INCLUDE_vTaskPrioritySet 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY +#define INCLUDE_xResumeFromISR 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName 0 -#define INCLUDE_eTaskGetState 0 -#define INCLUDE_xEventGroupSetBitFromISR 0 -#define INCLUDE_xTimerPendFunctionCall 0 +#define INCLUDE_pcTaskGetTaskName 0 +#define INCLUDE_eTaskGetState 0 +#define INCLUDE_xEventGroupSetBitFromISR 0 +#define INCLUDE_xTimerPendFunctionCall 0 #ifdef __RX__ /* Renesas RX series */ -#define vSoftwareInterruptISR INT_Excep_ICU_SWINT -#define vTickISR INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ / 2) -#define configKERNEL_INTERRUPT_PRIORITY 1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 +#define vSoftwareInterruptISR INT_Excep_ICU_SWINT +#define vTickISR INT_Excep_CMT0_CMI0 +#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2) +#define configKERNEL_INTERRUPT_PRIORITY 1 +#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 #else /* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler -#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler +#define xPortSysTickHandler SysTick_Handler +#define vPortSVCHandler SVC_Handler //--------------------------------------------------------------------+ // Interrupt nesting behavior configuration. //--------------------------------------------------------------------+ #if defined(__NVIC_PRIO_BITS) -// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h -#define configPRIO_BITS __NVIC_PRIO_BITS + // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h + #define configPRIO_BITS __NVIC_PRIO_BITS #elif defined(__ECLIC_INTCTLBITS) -// RISC-V Bumblebee core from nuclei -#define configPRIO_BITS __ECLIC_INTCTLBITS + // RISC-V Bumblebee core from nuclei + #define configPRIO_BITS __ECLIC_INTCTLBITS #elif defined(__IASMARM__) -// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. -// Therefore we will hard coded it to minimum value of 2 to get pass ci build. -// IAR user must update this to correct value of the target MCU -#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" -#define configPRIO_BITS 2 + // FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. + // Therefore we will hard coded it to minimum value of 2 to get pass ci build. + // IAR user must update this to correct value of the target MCU + #message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" + #define configPRIO_BITS 2 #else -#error "FreeRTOS configPRIO_BITS to be defined" + #error "FreeRTOS configPRIO_BITS to be defined" #endif /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1 << configPRIO_BITS) - 1) +#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1<bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; - (void)pBuff; + (void) rhport; + (void) pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void)itf; + (void) itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if (entityID == 2) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if ( entityID == 2 ) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = ((audio_control_cur_2_t *)pBuff)->bCur; + volume[channelNum] = ((audio_control_cur_2_t*) pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } - return false; // Yet not implemented + } + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == 1) { - switch (ctrlSel) { - case AUDIO_TE_CTRL_CONNECTOR: { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = 0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - } break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; - } + (void) rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == 1) + { + switch ( ctrlSel ) + { + case AUDIO_TE_CTRL_CONNECTOR: + { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = 0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + } + break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; } - - // Feature unit - if (entityID == 2) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], - sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 90; // +90 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; + } + + // Feature unit + if (entityID == 2) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) + ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 90; // +90 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - } - - // Clock Source unit - if (entityID == 4) { - switch (ctrlSel) { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - // Buffered control transfer is needed for IN flow control to work - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, - sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Sample Freq. range\r\n"); - return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + break; // Unknown/Unsupported control - default: + default: + TU_BREAKPOINT(); + return false; + } + } + + // Clock Source unit + if ( entityID == 4 ) + { + switch ( ctrlSel ) + { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + // Buffered control transfer is needed for IN flow control to work + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Sample Freq. range\r\n"); + return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); + + // Unknown/Unsupported control + default: TU_BREAKPOINT(); return false; } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } + } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, - uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; - - // In read world application data flow is driven by I2S clock, - // both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used. - // For example in your I2S receive callback: - // void I2S_Rx_Callback(int channel, const void* data, uint16_t samples) - // { - // tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO); - // } - - return true; + (void) rhport; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; + + + // In read world application data flow is driven by I2S clock, + // both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used. + // For example in your I2S receive callback: + // void I2S_Rx_Callback(int channel, const void* data, uint16_t samples) + // { + // tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO); + // } + + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, - uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)n_bytes_copied; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void) rhport; + (void) n_bytes_copied; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; - return true; + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - (void)p_request; + (void) rhport; + (void) p_request; - return true; + return true; } ///--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void *param) -{ - (void)param; - static uint32_t start_ms = 0; - static bool led_state = false; - - while (1) { - // Blink every interval ms - vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } +void led_blinking_task(void* param) { + (void) param; + static uint32_t start_ms = 0; + static bool led_state = false; + + while (1) { + // Blink every interval ms + vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/tusb_config.h index 09e375bfa2c..88f20278b58 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/tusb_config.h @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -55,23 +55,23 @@ extern "C" { // This examples use FreeRTOS #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_FREERTOS +#define CFG_TUSB_OS OPT_OS_FREERTOS #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos / +#define CFG_TUSB_OS_INC_PATH freertos/ #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -85,7 +85,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -93,63 +93,51 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 +#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX \ - 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ - 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup -#define CFG_TUD_AUDIO_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup +#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_ENABLE_ENCODING 1 -#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 +#define CFG_TUD_AUDIO_ENABLE_ENCODING 1 +#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 #if CFG_TUD_AUDIO_ENABLE_ENCODING -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1 -#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX \ - 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value -#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO \ - (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX) -#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ \ - (TUD_OPT_HIGH_SPEED ? 32 : 4) * \ - (CFG_TUD_AUDIO_EP_SZ_IN / \ - CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1 +#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value +#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX) +#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * (CFG_TUD_AUDIO_EP_SZ_IN / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device #else -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ - (TUD_OPT_HIGH_SPEED ? 32 : 4) * \ - CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device #endif diff --git a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/usb_descriptors.c index b3b48754258..728a5f9cecb 100644 --- a/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_4_channel_mic_freertos/src/usb_descriptors.c @@ -32,83 +32,85 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) #if TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO 0x03 + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) -// nRF5x ISO can only be endpoint 8 -#define EPNUM_AUDIO 0x08 + // nRF5x ISO can only be endpoint 8 + #define EPNUM_AUDIO 0x08 #else -#define EPNUM_AUDIO 0x01 + #define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR( - /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, - /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, - /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * 8, - /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) + // Interface number, string index, EP Out & EP In address, EP size + TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -117,64 +119,61 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode_4_Ch", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const* string_desc_arr [] = { + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode_4_Ch", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_test/src/main.c b/Libraries/tinyusb/examples/device/audio_test/src/main.c index 400c1b311df..f79bb44683a 100644 --- a/Libraries/tinyusb/examples/device/audio_test/src/main.c +++ b/Libraries/tinyusb/examples/device/audio_test/src/main.c @@ -47,24 +47,24 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 -uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 uint32_t sampFreq; uint8_t clkValid; // Range states -audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // Volume range state -audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state +audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state +audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state // Audio test data uint16_t test_buffer_audio[(CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2]; @@ -76,29 +76,30 @@ void audio_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); - - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - // Init values - sampFreq = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; - clkValid = 1; - - sampleFreqRng.wNumSubRanges = 1; - sampleFreqRng.subrange[0].bMin = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; - sampleFreqRng.subrange[0].bMax = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; - sampleFreqRng.subrange[0].bRes = 0; - - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - audio_task(); - } + board_init(); + + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + // Init values + sampFreq = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; + clkValid = 1; + + sampleFreqRng.wNumSubRanges = 1; + sampleFreqRng.subrange[0].bMin = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; + sampleFreqRng.subrange[0].bMax = CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE; + sampleFreqRng.subrange[0].bRes = 0; + + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + audio_task(); + } } //--------------------------------------------------------------------+ @@ -108,13 +109,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -122,14 +123,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -138,8 +139,8 @@ void tud_resume_cb(void) void audio_task(void) { - // Yet to be filled - e.g. put meas data into TX FIFOs etc. - // asm("nop"); + // Yet to be filled - e.g. put meas data into TX FIFOs etc. + // asm("nop"); } //--------------------------------------------------------------------+ @@ -147,285 +148,283 @@ void audio_task(void) //--------------------------------------------------------------------+ // Invoked when audio class specific set request received for an EP -bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; - (void)pBuff; + (void) rhport; + (void) pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; - (void)pBuff; + (void) rhport; + (void) pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void)itf; + (void) itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if (entityID == 2) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if ( entityID == 2 ) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = (uint16_t)((audio_control_cur_2_t *)pBuff)->bCur; + volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } - return false; // Yet not implemented + } + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - // return tud_control_xfer(rhport, p_request, &tmp, 1); + // return tud_control_xfer(rhport, p_request, &tmp, 1); - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == 1) { - switch (ctrlSel) { - case AUDIO_TE_CTRL_CONNECTOR: { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = (audio_channel_config_t)0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - } break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; - } + (void) rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == 1) + { + switch ( ctrlSel ) + { + case AUDIO_TE_CTRL_CONNECTOR: + { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = (audio_channel_config_t) 0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + } + break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; } - - // Feature unit - if (entityID == 2) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], - sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 90; // +90 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; + } + + // Feature unit + if (entityID == 2) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) + ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 90; // +90 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - } - - // Clock Source unit - if (entityID == 4) { - switch (ctrlSel) { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Sample Freq. range\r\n"); - return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + break; // Unknown/Unsupported control - default: + default: + TU_BREAKPOINT(); + return false; + } + } + + // Clock Source unit + if ( entityID == 4 ) + { + switch ( ctrlSel ) + { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Sample Freq. range\r\n"); + return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); + + // Unknown/Unsupported control + default: TU_BREAKPOINT(); return false; } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } + } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, - uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void) rhport; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; - tud_audio_write((uint8_t *)test_buffer_audio, CFG_TUD_AUDIO_EP_SZ_IN - 2); + tud_audio_write ((uint8_t *)test_buffer_audio, CFG_TUD_AUDIO_EP_SZ_IN - 2); - return true; + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, - uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)n_bytes_copied; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; - - for (size_t cnt = 0; cnt < (CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2; cnt++) { - test_buffer_audio[cnt] = startVal++; - } - - return true; + (void) rhport; + (void) n_bytes_copied; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; + + for (size_t cnt = 0; cnt < (CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2; cnt++) + { + test_buffer_audio[cnt] = startVal++; + } + + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - (void)p_request; - startVal = 0; + (void) rhport; + (void) p_request; + startVal = 0; - return true; + return true; } //--------------------------------------------------------------------+ @@ -433,14 +432,13 @@ bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/audio_test/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_test/src/tusb_config.h index e75941f680d..8c021e23caa 100644 --- a/Libraries/tinyusb/examples/device/audio_test/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_test/src/tusb_config.h @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED // CFG_TUSB_DEBUG is defined by compiler in DEBUG build // #define CFG_TUSB_DEBUG 0 @@ -82,7 +82,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -90,42 +90,34 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 - -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT \ - 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer - -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX \ - 2 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ - 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! -#define CFG_TUD_AUDIO_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ - (TUD_OPT_HIGH_SPEED ? 8 : 1) * \ - CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 + +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer + +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! +#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 8 : 1) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/audio_test/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_test/src/usb_descriptors.c index 50afd3bf5da..9864377f608 100644 --- a/Libraries/tinyusb/examples/device/audio_test/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_test/src/usb_descriptors.c @@ -32,84 +32,85 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO 0x03 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) -// nRF5x ISO can only be endpoint 8 -#define EPNUM_AUDIO 0x08 + // nRF5x ISO can only be endpoint 8 + #define EPNUM_AUDIO 0x08 #else -#define EPNUM_AUDIO 0x01 + #define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = { +uint8_t const desc_configuration[] = +{ // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR( - /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, - /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, - /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * 8, - /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) + TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -118,19 +119,20 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const* string_desc_arr [] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; @@ -138,45 +140,42 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_test_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h b/Libraries/tinyusb/examples/device/audio_test_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h index ccd96107b31..869500ad2ad 100644 --- a/Libraries/tinyusb/examples/device/audio_test_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h +++ b/Libraries/tinyusb/examples/device/audio_test_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h @@ -26,6 +26,7 @@ * 1 tab == 4 spaces! */ + #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H @@ -48,145 +49,142 @@ #include "bsp/board_mcu.h" #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -#error "ESP32-Sx should use IDF's FreeRTOSConfig.h" + #error "ESP32-Sx should use IDF's FreeRTOSConfig.h" #endif // TODO fix later #if CFG_TUSB_MCU == OPT_MCU_MM32F327X -extern u32 SystemCoreClock; + extern u32 SystemCoreClock; #else -// FIXME cause redundant-decls warnings -extern uint32_t SystemCoreClock; + // FIXME cause redundant-decls warnings + extern uint32_t SystemCoreClock; #endif #endif /* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU 0 -#define configENABLE_FPU 1 -#define configENABLE_TRUSTZONE 0 -#define configMINIMAL_SECURE_STACK_SIZE (1024) -#define configRUN_FREERTOS_SECURE_ONLY 1 +#define configENABLE_MPU 0 +#define configENABLE_FPU 1 +#define configENABLE_TRUSTZONE 0 +#define configMINIMAL_SECURE_STACK_SIZE ( 1024 ) +#define configRUN_FREERTOS_SECURE_ONLY 1 -#define configUSE_PREEMPTION 1 +#define configUSE_PREEMPTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ SystemCoreClock -#define configTICK_RATE_HZ (1000) -#define configMAX_PRIORITIES (5) -#define configMINIMAL_STACK_SIZE (128) -#define configTOTAL_HEAP_SIZE (configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024) -#define configMAX_TASK_NAME_LEN 16 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configQUEUE_REGISTRY_SIZE 4 -#define configUSE_QUEUE_SETS 0 -#define configUSE_TIME_SLICING 0 -#define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 - -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configSUPPORT_DYNAMIC_ALLOCATION 0 +#define configCPU_CLOCK_HZ SystemCoreClock +#define configTICK_RATE_HZ ( 1000 ) +#define configMAX_PRIORITIES ( 5 ) +#define configMINIMAL_STACK_SIZE ( 128 ) +#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 ) +#define configMAX_TASK_NAME_LEN 16 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configQUEUE_REGISTRY_SIZE 4 +#define configUSE_QUEUE_SETS 0 +#define configUSE_TIME_SLICING 0 +#define configUSE_NEWLIB_REENTRANT 0 +#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 + +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 0 /* Hook function related definitions. */ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configCHECK_HANDLER_INSTALLATION 0 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configCHECK_HANDLER_INSTALLATION 0 /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS 0 -#define configUSE_TRACE_FACILITY 1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#define configGENERATE_RUN_TIME_STATS 0 +#define configUSE_TRACE_FACILITY 1 // legacy trace +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES 2 +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 /* Software timer related definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 2) -#define configTIMER_QUEUE_LENGTH 32 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2) +#define configTIMER_QUEUE_LENGTH 32 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet 0 -#define INCLUDE_uxTaskPriorityGet 0 -#define INCLUDE_vTaskDelete 0 -#define INCLUDE_vTaskSuspend \ - 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR 0 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 -#define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 -#define INCLUDE_xTaskGetIdleTaskHandle 0 +#define INCLUDE_vTaskPrioritySet 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY +#define INCLUDE_xResumeFromISR 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName 0 -#define INCLUDE_eTaskGetState 0 -#define INCLUDE_xEventGroupSetBitFromISR 0 -#define INCLUDE_xTimerPendFunctionCall 0 +#define INCLUDE_pcTaskGetTaskName 0 +#define INCLUDE_eTaskGetState 0 +#define INCLUDE_xEventGroupSetBitFromISR 0 +#define INCLUDE_xTimerPendFunctionCall 0 #ifdef __RX__ /* Renesas RX series */ -#define vSoftwareInterruptISR INT_Excep_ICU_SWINT -#define vTickISR INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ / 2) -#define configKERNEL_INTERRUPT_PRIORITY 1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 +#define vSoftwareInterruptISR INT_Excep_ICU_SWINT +#define vTickISR INT_Excep_CMT0_CMI0 +#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2) +#define configKERNEL_INTERRUPT_PRIORITY 1 +#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 #else /* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler -#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler +#define xPortSysTickHandler SysTick_Handler +#define vPortSVCHandler SVC_Handler //--------------------------------------------------------------------+ // Interrupt nesting behavior configuration. //--------------------------------------------------------------------+ #if defined(__NVIC_PRIO_BITS) -// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h -#define configPRIO_BITS __NVIC_PRIO_BITS + // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h + #define configPRIO_BITS __NVIC_PRIO_BITS #elif defined(__ECLIC_INTCTLBITS) -// RISC-V Bumblebee core from nuclei -#define configPRIO_BITS __ECLIC_INTCTLBITS + // RISC-V Bumblebee core from nuclei + #define configPRIO_BITS __ECLIC_INTCTLBITS #elif defined(__IASMARM__) -// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. -// Therefore we will hard coded it to minimum value of 2 to get pass ci build. -// IAR user must update this to correct value of the target MCU -#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" -#define configPRIO_BITS 2 + // FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. + // Therefore we will hard coded it to minimum value of 2 to get pass ci build. + // IAR user must update this to correct value of the target MCU + #message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" + #define configPRIO_BITS 2 #else -#error "FreeRTOS configPRIO_BITS to be defined" + #error "FreeRTOS configPRIO_BITS to be defined" #endif /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1 << configPRIO_BITS) - 1) +#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1<bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; - (void)pBuff; + (void) rhport; + (void) pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void)itf; + (void) itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if (entityID == 2) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if ( entityID == 2 ) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = (uint16_t)((audio_control_cur_2_t *)pBuff)->bCur; + volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } - return false; // Yet not implemented + } + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == 1) { - switch (ctrlSel) { - case AUDIO_TE_CTRL_CONNECTOR: { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = (audio_channel_config_t)0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - } break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; - } + (void) rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == 1) + { + switch ( ctrlSel ) + { + case AUDIO_TE_CTRL_CONNECTOR: + { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = (audio_channel_config_t) 0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + } + break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; } - - // Feature unit - if (entityID == 2) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], - sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 90; // +90 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; + } + + // Feature unit + if (entityID == 2) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) + ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 90; // +90 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - } - - // Clock Source unit - if (entityID == 4) { - switch (ctrlSel) { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Sample Freq. range\r\n"); - return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + break; // Unknown/Unsupported control - default: + default: + TU_BREAKPOINT(); + return false; + } + } + + // Clock Source unit + if ( entityID == 4 ) + { + switch ( ctrlSel ) + { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Sample Freq. range\r\n"); + return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); + + // Unknown/Unsupported control + default: TU_BREAKPOINT(); return false; } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } + } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, - uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void) rhport; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; - tud_audio_write((uint8_t *)test_buffer_audio, CFG_TUD_AUDIO_EP_SZ_IN - 2); + tud_audio_write ((uint8_t *)test_buffer_audio, CFG_TUD_AUDIO_EP_SZ_IN - 2); - return true; + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, - uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)n_bytes_copied; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; - - for (size_t cnt = 0; cnt < (CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2; cnt++) { - test_buffer_audio[cnt] = startVal++; - } - - return true; + (void) rhport; + (void) n_bytes_copied; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; + + for (size_t cnt = 0; cnt < (CFG_TUD_AUDIO_EP_SZ_IN - 2) / 2; cnt++) + { + test_buffer_audio[cnt] = startVal++; + } + + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - (void)p_request; - startVal = 0; + (void) rhport; + (void) p_request; + startVal = 0; - return true; + return true; } //--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void *param) -{ - (void)param; - static uint32_t start_ms = 0; - static bool led_state = false; - - while (1) { - // Blink every interval ms - vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } +void led_blinking_task(void* param) { + (void) param; + static uint32_t start_ms = 0; + static bool led_state = false; + + while (1) { + // Blink every interval ms + vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } diff --git a/Libraries/tinyusb/examples/device/audio_test_freertos/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_test_freertos/src/tusb_config.h index 7c8bb65a090..8b376a4c3c1 100644 --- a/Libraries/tinyusb/examples/device/audio_test_freertos/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_test_freertos/src/tusb_config.h @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -55,23 +55,23 @@ extern "C" { // This examples use FreeRTOS #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_FREERTOS +#define CFG_TUSB_OS OPT_OS_FREERTOS #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos / +#define CFG_TUSB_OS_INC_PATH freertos/ #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED // CFG_TUSB_DEBUG is defined by compiler in DEBUG build // #define CFG_TUSB_DEBUG 0 @@ -88,7 +88,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -96,42 +96,34 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 - -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT \ - 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer - -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX \ - 2 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ - 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! -#define CFG_TUD_AUDIO_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ - (TUD_OPT_HIGH_SPEED ? 8 : 1) * \ - CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device +#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000 + +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer + +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! +#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 8 : 1) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/audio_test_freertos/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_test_freertos/src/usb_descriptors.c index 50afd3bf5da..9864377f608 100644 --- a/Libraries/tinyusb/examples/device/audio_test_freertos/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_test_freertos/src/usb_descriptors.c @@ -32,84 +32,85 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO 0x03 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) -// nRF5x ISO can only be endpoint 8 -#define EPNUM_AUDIO 0x08 + // nRF5x ISO can only be endpoint 8 + #define EPNUM_AUDIO 0x08 #else -#define EPNUM_AUDIO 0x01 + #define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = { +uint8_t const desc_configuration[] = +{ // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR( - /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, - /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, - /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * 8, - /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) + TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -118,19 +119,20 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const* string_desc_arr [] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; @@ -138,45 +140,42 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/main.c b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/main.c index fdfc0bd35ba..2ff7f10bd07 100644 --- a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/main.c +++ b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/main.c @@ -49,35 +49,40 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 -uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 +uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0 uint32_t sampFreq; uint8_t bytesPerSample; uint8_t clkValid; // Range states // List of supported sample rates -static const uint32_t sampleRatesList[] = { 32000, 48000, 96000 }; +static const uint32_t sampleRatesList[] = +{ + 32000, 48000, 96000 +}; -#define N_sampleRates TU_ARRAY_SIZE(sampleRatesList) +#define N_sampleRates TU_ARRAY_SIZE(sampleRatesList) // Bytes per format of every Alt settings -static const uint8_t bytesPerSampleAltList[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = { +static const uint8_t bytesPerSampleAltList[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = +{ CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, }; -audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // Volume range state +audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state + // Audio test data CFG_TUSB_MEM_ALIGN uint8_t test_buffer_audio[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX]; @@ -89,26 +94,28 @@ void audio_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - // Init values - sampFreq = sampleRatesList[0]; - clkValid = 1; + // Init values + sampFreq = sampleRatesList[0]; + clkValid = 1; + + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + audio_task(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - audio_task(); - } - return 0; + return 0; } //--------------------------------------------------------------------+ @@ -118,13 +125,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -132,14 +139,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -148,8 +155,8 @@ void tud_resume_cb(void) void audio_task(void) { - // Yet to be filled - e.g. put meas data into TX FIFOs etc. - // asm("nop"); + // Yet to be filled - e.g. put meas data into TX FIFOs etc. + // asm("nop"); } //--------------------------------------------------------------------+ @@ -157,343 +164,348 @@ void audio_task(void) //--------------------------------------------------------------------+ // Invoked when set interface is called, typically on start/stop streaming or format change -bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - //uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - - // Clear buffer when streaming format is changed - if (alt != 0) { - bytesPerSample = bytesPerSampleAltList[alt - 1]; - } - return true; + (void)rhport; + //uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + + // Clear buffer when streaming format is changed + if(alt != 0) + { + bytesPerSample = bytesPerSampleAltList[alt-1]; + } + return true; } // Invoked when audio class specific set request received for an EP -bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; - (void)pBuff; + (void) rhport; + (void) pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; - (void)pBuff; + (void) rhport; + (void) pBuff; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - (void)itf; + (void) itf; - // We do not support any set range requests here, only current value requests - TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); + // We do not support any set range requests here, only current value requests + TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR); - // If request is for our feature unit - if (entityID == UAC2_ENTITY_FEATURE_UNIT) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Request uses format layout 1 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); + // If request is for our feature unit + if ( entityID == UAC2_ENTITY_FEATURE_UNIT ) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Request uses format layout 1 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t)); - mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur; + mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur; - TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); - return true; + TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum); + return true; - case AUDIO_FU_CTRL_VOLUME: - // Request uses format layout 2 - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); + case AUDIO_FU_CTRL_VOLUME: + // Request uses format layout 2 + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t)); - volume[channelNum] = (uint16_t)((audio_control_cur_2_t *)pBuff)->bCur; + volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur; - TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); - return true; + TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum); + return true; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } + } - // Clock Source unit - if (entityID == UAC2_ENTITY_CLOCK) { - switch (ctrlSel) { - case AUDIO_CS_CTRL_SAM_FREQ: - TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_4_t)); + // Clock Source unit + if ( entityID == UAC2_ENTITY_CLOCK ) + { + switch ( ctrlSel ) + { + case AUDIO_CS_CTRL_SAM_FREQ: + TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_4_t)); - sampFreq = (uint32_t)((audio_control_cur_4_t *)pBuff)->bCur; + sampFreq = (uint32_t)((audio_control_cur_4_t *)pBuff)->bCur; - TU_LOG2("Clock set current freq: %" PRIu32 "\r\n", sampFreq); + TU_LOG2("Clock set current freq: %" PRIu32 "\r\n", sampFreq); - return true; - break; + return true; + break; - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } + } - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t ep = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)ep; + (void) channelNum; (void) ctrlSel; (void) ep; - // return tud_control_xfer(rhport, p_request, &tmp, 1); + // return tud_control_xfer(rhport, p_request, &tmp, 1); - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + uint8_t itf = TU_U16_LOW(p_request->wIndex); - (void)channelNum; - (void)ctrlSel; - (void)itf; + (void) channelNum; (void) ctrlSel; (void) itf; - return false; // Yet not implemented + return false; // Yet not implemented } // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - - // Page 91 in UAC2 specification - uint8_t channelNum = TU_U16_LOW(p_request->wValue); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Input terminal (Microphone input) - if (entityID == UAC2_ENTITY_INPUT_TERMINAL) { - switch (ctrlSel) { - case AUDIO_TE_CTRL_CONNECTOR: { - // The terminal connector control only has a get request with only the CUR attribute. - audio_desc_channel_cluster_t ret; - - // Those are dummy values for now - ret.bNrChannels = 1; - ret.bmChannelConfig = 0; - ret.iChannelNames = 0; - - TU_LOG2(" Get terminal connector\r\n"); - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - } break; - - // Unknown/Unsupported control selector - default: - TU_BREAKPOINT(); - return false; - } + (void) rhport; + + // Page 91 in UAC2 specification + uint8_t channelNum = TU_U16_LOW(p_request->wValue); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + // uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Input terminal (Microphone input) + if (entityID == UAC2_ENTITY_INPUT_TERMINAL) + { + switch ( ctrlSel ) + { + case AUDIO_TE_CTRL_CONNECTOR: + { + // The terminal connector control only has a get request with only the CUR attribute. + audio_desc_channel_cluster_t ret; + + // Those are dummy values for now + ret.bNrChannels = 1; + ret.bmChannelConfig = 0; + ret.iChannelNames = 0; + + TU_LOG2(" Get terminal connector\r\n"); + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); + } + break; + + // Unknown/Unsupported control selector + default: + TU_BREAKPOINT(); + return false; } - - // Feature unit - if (entityID == UAC2_ENTITY_FEATURE_UNIT) { - switch (ctrlSel) { - case AUDIO_FU_CTRL_MUTE: - // Audio control mute cur parameter block consists of only one byte - we thus can send it right away - // There does not exist a range parameter block for mute - TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); - - case AUDIO_FU_CTRL_VOLUME: - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); - return tud_control_xfer(rhport, p_request, &volume[channelNum], - sizeof(volume[channelNum])); - - case AUDIO_CS_REQ_RANGE: - TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); - - // Copy values - only for testing - better is version below - audio_control_range_2_n_t(1) ret; - - ret.wNumSubRanges = 1; - ret.subrange[0].bMin = -90; // -90 dB - ret.subrange[0].bMax = 30; // +30 dB - ret.subrange[0].bRes = 1; // 1 dB steps - - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void *)&ret, - sizeof(ret)); - - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; + } + + // Feature unit + if (entityID == UAC2_ENTITY_FEATURE_UNIT) + { + switch ( ctrlSel ) + { + case AUDIO_FU_CTRL_MUTE: + // Audio control mute cur parameter block consists of only one byte - we thus can send it right away + // There does not exist a range parameter block for mute + TU_LOG2(" Get Mute of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &mute[channelNum], 1); + + case AUDIO_FU_CTRL_VOLUME: + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Volume of channel: %u\r\n", channelNum); + return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum])); + + case AUDIO_CS_REQ_RANGE: + TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum); + + // Copy values - only for testing - better is version below + audio_control_range_2_n_t(1) + ret; + + ret.wNumSubRanges = 1; + ret.subrange[0].bMin = -90; // -90 dB + ret.subrange[0].bMax = 30; // +30 dB + ret.subrange[0].bRes = 1; // 1 dB steps + + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret)); // Unknown/Unsupported control - default: + default: TU_BREAKPOINT(); return false; } - } - - // Clock Source unit - if (entityID == UAC2_ENTITY_CLOCK) { - switch (ctrlSel) { - case AUDIO_CS_CTRL_SAM_FREQ: - // channelNum is always zero in this case - switch (p_request->bRequest) { - case AUDIO_CS_REQ_CUR: - TU_LOG2(" Get Sample Freq.\r\n"); - return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); - - case AUDIO_CS_REQ_RANGE: { - TU_LOG2(" Get Sample Freq. range\r\n"); - audio_control_range_4_n_t(N_sampleRates) - rangef = { .wNumSubRanges = tu_htole16(N_sampleRates) }; - TU_LOG1("Clock get %d freq ranges\r\n", N_sampleRates); - for (uint8_t i = 0; i < N_sampleRates; i++) { - rangef.subrange[i].bMin = (int32_t)sampleRatesList[i]; - rangef.subrange[i].bMax = (int32_t)sampleRatesList[i]; - rangef.subrange[i].bRes = 0; - TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, - (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); - } - return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &rangef, - sizeof(rangef)); - } - // Unknown/Unsupported control - default: - TU_BREAKPOINT(); - return false; - } - break; - - case AUDIO_CS_CTRL_CLK_VALID: - // Only cur attribute exists for this request - TU_LOG2(" Get Sample Freq. valid\r\n"); - return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + break; // Unknown/Unsupported control - default: + default: + TU_BREAKPOINT(); + return false; + } + } + + // Clock Source unit + if ( entityID == UAC2_ENTITY_CLOCK ) + { + switch ( ctrlSel ) + { + case AUDIO_CS_CTRL_SAM_FREQ: + // channelNum is always zero in this case + switch ( p_request->bRequest ) + { + case AUDIO_CS_REQ_CUR: + TU_LOG2(" Get Sample Freq.\r\n"); + return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq)); + + case AUDIO_CS_REQ_RANGE: + { + TU_LOG2(" Get Sample Freq. range\r\n"); + audio_control_range_4_n_t(N_sampleRates) rangef = + { + .wNumSubRanges = tu_htole16(N_sampleRates) + }; + TU_LOG1("Clock get %d freq ranges\r\n", N_sampleRates); + for(uint8_t i = 0; i < N_sampleRates; i++) + { + rangef.subrange[i].bMin = (int32_t)sampleRatesList[i]; + rangef.subrange[i].bMax = (int32_t)sampleRatesList[i]; + rangef.subrange[i].bRes = 0; + TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); + } + return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &rangef, sizeof(rangef)); + } + // Unknown/Unsupported control + default: TU_BREAKPOINT(); return false; } + break; + + case AUDIO_CS_CTRL_CLK_VALID: + // Only cur attribute exists for this request + TU_LOG2(" Get Sample Freq. valid\r\n"); + return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid)); + + // Unknown/Unsupported control + default: + TU_BREAKPOINT(); + return false; } + } - TU_LOG2(" Unsupported entity: %d\r\n", entityID); - return false; // Yet not implemented + TU_LOG2(" Unsupported entity: %d\r\n", entityID); + return false; // Yet not implemented } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, - uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void) rhport; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; - tud_audio_write((uint8_t *)test_buffer_audio, - (uint16_t)(sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000) * bytesPerSample)); + tud_audio_write((uint8_t *)test_buffer_audio, (uint16_t)(sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000) * bytesPerSample)); - return true; + return true; } -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, - uint8_t ep_in, uint8_t cur_alt_setting) +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)n_bytes_copied; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; - - // 16bit - if (bytesPerSample == 2) { - uint16_t *pData_16 = (uint16_t *)((void *)test_buffer_audio); - for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++) { - pData_16[cnt] = startVal++; - } + (void) rhport; + (void) n_bytes_copied; + (void) itf; + (void) ep_in; + (void) cur_alt_setting; + + // 16bit + if(bytesPerSample == 2) + { + uint16_t* pData_16 = (uint16_t*)((void*)test_buffer_audio); + for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++) + { + pData_16[cnt] = startVal++; } - // 24bit in 32bit slot - else if (bytesPerSample == 4) { - uint32_t *pData_32 = (uint32_t *)((void *)test_buffer_audio); - for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++) { - pData_32[cnt] = (uint32_t)startVal++ << 16U; - } + } + // 24bit in 32bit slot + else if(bytesPerSample == 4) + { + uint32_t* pData_32 = (uint32_t*)((void*)test_buffer_audio); + for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++) + { + pData_32[cnt] = (uint32_t)startVal++ << 16U; } + } - return true; + return true; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - (void)p_request; - startVal = 0; + (void) rhport; + (void) p_request; + startVal = 0; - return true; + return true; } //--------------------------------------------------------------------+ @@ -501,14 +513,13 @@ bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/tusb_config.h b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/tusb_config.h index e3f57b6999f..1c8288bce7a 100644 --- a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/tusb_config.h @@ -38,12 +38,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -56,18 +56,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED // CFG_TUSB_DEBUG is defined by compiler in DEBUG build // #define CFG_TUSB_DEBUG 0 @@ -84,7 +84,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -92,59 +92,48 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 96000 +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 96000 // How many formats are used, need to adjust USB descriptor if changed -#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 +#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 // 16bit in 16bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 // 24bit in 32bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 // Have a look into audio_device.h for all configurations -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT \ - 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer - -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX \ - 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX \ - TU_MAX( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 1 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // Size of control request buffer + +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX #ifdef __cplusplus } #endif diff --git a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.c index 8b0c2bd36b3..f50e70a251e 100644 --- a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.c @@ -34,73 +34,76 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_AUDIO_CONTROL = 0, ITF_NUM_AUDIO_STREAMING, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN \ - (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO 0x03 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_AUDIO 0x03 #elif TU_CHECK_MCU(OPT_MCU_NRF5X) -// nRF5x ISO can only be endpoint 8 -#define EPNUM_AUDIO 0x08 + // nRF5x ISO can only be endpoint 8 + #define EPNUM_AUDIO 0x08 #else -#define EPNUM_AUDIO 0x01 + #define EPNUM_AUDIO 0x01 #endif -uint8_t const desc_configuration[] = { +uint8_t const desc_configuration[] = +{ // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, - /*_epin*/ 0x80 | EPNUM_AUDIO) + TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_epin*/ 0x80 | EPNUM_AUDIO) }; TU_VERIFY_STATIC(sizeof(desc_configuration) == CONFIG_TOTAL_LEN, "Incorrect size"); @@ -108,10 +111,10 @@ TU_VERIFY_STATIC(sizeof(desc_configuration) == CONFIG_TOTAL_LEN, "Incorrect size // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -120,19 +123,20 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "PaniRCorp", // 1: Manufacturer - "MicNode", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UAC2", // 4: Audio Interface +char const* string_desc_arr [] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "PaniRCorp", // 1: Manufacturer + "MicNode", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UAC2", // 4: Audio Interface }; @@ -140,45 +144,42 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.h index 4326f8e36de..8381e31f51e 100644 --- a/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/audio_test_multi_rate/src/usb_descriptors.h @@ -29,104 +29,74 @@ // #include "tusb.h" // Unit numbers are arbitrary selected -#define UAC2_ENTITY_CLOCK 0x04 -#define UAC2_ENTITY_INPUT_TERMINAL 0x01 -#define UAC2_ENTITY_OUTPUT_TERMINAL 0x03 -#define UAC2_ENTITY_FEATURE_UNIT 0x02 +#define UAC2_ENTITY_CLOCK 0x04 +#define UAC2_ENTITY_INPUT_TERMINAL 0x01 +#define UAC2_ENTITY_OUTPUT_TERMINAL 0x03 +#define UAC2_ENTITY_FEATURE_UNIT 0x02 -#define TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN \ - (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ - TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN /* Interface 1, Alternate 0 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 1, Alternate 1 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 1, Alternate 2 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) -#define TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESCRIPTOR(_itfnum, _stridx, _epin) \ - /* Standard Interface Association Descriptor (IAD) */ \ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, \ - /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ - TUD_AUDIO_DESC_STD_AC( \ - /*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, \ - /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ - TUD_AUDIO_DESC_CS_AC( \ - /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, \ - /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, \ - /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, \ - /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_PRO_CLK, \ - /*_ctrl*/ AUDIO_CTRL_RW << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS | \ - AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_VAL_POS, \ - /*_assocTerm*/ 0x01, \ - /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ - TUD_AUDIO_DESC_INPUT_TERM( \ - /*_termid*/ UAC2_ENTITY_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, \ - /*_assocTerm*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, \ - /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, \ - /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, \ - /*_assocTerm*/ UAC2_ENTITY_INPUT_TERMINAL, \ - /*_srcid*/ UAC2_ENTITY_FEATURE_UNIT, \ - /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, \ - /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL( \ - /*_unitid*/ UAC2_ENTITY_FEATURE_UNIT, /*_srcid*/ 0x01, \ - /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ - /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, \ - /*_nEPs*/ 0x00, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epin, \ - /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), \ - /*_maxEPsize*/ CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000), /* Interface 1, Alternate 2 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epin, \ - /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), \ - /*_maxEPsize*/ CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN, /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + + TUD_AUDIO_DESC_STD_AC_LEN\ + + TUD_AUDIO_DESC_CS_AC_LEN\ + + TUD_AUDIO_DESC_CLK_SRC_LEN\ + + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + /* Interface 1, Alternate 1 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + /* Interface 1, Alternate 2 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) + + +#define TUD_AUDIO_MIC_ONE_CH_2_FORMAT_DESCRIPTOR(_itfnum, _stridx, _epin) \ + /* Standard Interface Association Descriptor (IAD) */\ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ + /* Standard AC Interface Descriptor(4.7.1) */\ + TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ + /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ + TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ + /* Clock Source Descriptor(4.7.2.1) */\ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_PRO_CLK, /*_ctrl*/ AUDIO_CTRL_RW << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS | AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_VAL_POS, /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ + /* Input Terminal Descriptor(4.7.2.4) */\ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\ + /* Output Terminal Descriptor(4.7.2.5) */\ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ UAC2_ENTITY_INPUT_TERMINAL, /*_srcid*/ UAC2_ENTITY_FEATURE_UNIT, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ + /* Feature Unit Descriptor(4.7.2.8) */\ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ UAC2_ENTITY_FEATURE_UNIT, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 1 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ + /* Interface 1, Alternate 2 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN, /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) + #endif diff --git a/Libraries/tinyusb/examples/device/board_test/src/main.c b/Libraries/tinyusb/examples/device/board_test/src/main.c index d2f3d43773f..91799eb89e0 100644 --- a/Libraries/tinyusb/examples/device/board_test/src/main.c +++ b/Libraries/tinyusb/examples/device/board_test/src/main.c @@ -32,42 +32,43 @@ * - 250 ms : button is not pressed * - 1000 ms : button is pressed (and hold) */ -enum { BLINK_PRESSED = 250, BLINK_UNPRESSED = 1000 }; +enum { + BLINK_PRESSED = 250, + BLINK_UNPRESSED = 1000 +}; -#define HELLO_STR "Hello from TinyUSB\r\n" +#define HELLO_STR "Hello from TinyUSB\r\n" -int main(void) -{ - board_init(); - board_led_write(true); +int main(void) { + board_init(); + board_led_write(true); - uint32_t start_ms = 0; - bool led_state = false; + uint32_t start_ms = 0; + bool led_state = false; - while (1) { - uint32_t interval_ms = board_button_read() ? BLINK_PRESSED : BLINK_UNPRESSED; + while (1) { + uint32_t interval_ms = board_button_read() ? BLINK_PRESSED : BLINK_UNPRESSED; - // Blink and print every interval ms - if (!(board_millis() - start_ms < interval_ms)) { - board_uart_write(HELLO_STR, strlen(HELLO_STR)); + // Blink and print every interval ms + if (!(board_millis() - start_ms < interval_ms)) { + board_uart_write(HELLO_STR, strlen(HELLO_STR)); - start_ms = board_millis(); + start_ms = board_millis(); - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } - // echo - uint8_t ch; - if (board_uart_read(&ch, 1) > 0) { - board_uart_write(&ch, 1); - } + // echo + uint8_t ch; + if (board_uart_read(&ch, 1) > 0) { + board_uart_write(&ch, 1); } + } } #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -void app_main(void) -{ - main(); +void app_main(void) { + main(); } #endif diff --git a/Libraries/tinyusb/examples/device/board_test/src/tusb_config.h b/Libraries/tinyusb/examples/device/board_test/src/tusb_config.h index 8c4d0deeab0..36eafe8070a 100644 --- a/Libraries/tinyusb/examples/device/board_test/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/board_test/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif // board_test example is special example that doesn't enable device or host stack @@ -41,21 +41,21 @@ extern "C" { // defined by compiler flags for flexibility #ifndef CFG_TUSB_MCU -#error CFG_TUSB_MCU must be defined + #error CFG_TUSB_MCU must be defined #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE + #define CFG_TUSB_OS OPT_OS_NONE #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos / +#define CFG_TUSB_OS_INC_PATH freertos/ #endif // This example only test LED & GPIO, disable both device and host stack -#define CFG_TUD_ENABLED 0 -#define CFG_TUH_ENABLED 0 +#define CFG_TUD_ENABLED 0 +#define CFG_TUH_ENABLED 0 // CFG_TUSB_DEBUG is defined by compiler in DEBUG build // #define CFG_TUSB_DEBUG 0 @@ -72,11 +72,11 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/main.c b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/main.c index 4217d129e37..ef12186f2b6 100644 --- a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/main.c +++ b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/main.c @@ -37,9 +37,9 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -48,117 +48,108 @@ static void led_blinking_task(void); static void cdc_task(void); /*------------- MAIN -------------*/ -int main(void) -{ - board_init(); +int main(void) { + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - cdc_task(); - led_blinking_task(); - } + while (1) { + tud_task(); // tinyusb device task + cdc_task(); + led_blinking_task(); + } } // echo to either Serial0 or Serial1 // with Serial0 as all lower case, Serial1 as all upper case -static void echo_serial_port(uint8_t itf, uint8_t buf[], uint32_t count) -{ - uint8_t const case_diff = 'a' - 'A'; - - for (uint32_t i = 0; i < count; i++) { - if (itf == 0) { - // echo back 1st port as lower case - if (isupper(buf[i])) - buf[i] += case_diff; - } else { - // echo back 2nd port as upper case - if (islower(buf[i])) - buf[i] -= case_diff; - } - - tud_cdc_n_write_char(itf, buf[i]); +static void echo_serial_port(uint8_t itf, uint8_t buf[], uint32_t count) { + uint8_t const case_diff = 'a' - 'A'; + + for (uint32_t i = 0; i < count; i++) { + if (itf == 0) { + // echo back 1st port as lower case + if (isupper(buf[i])) buf[i] += case_diff; + } else { + // echo back 2nd port as upper case + if (islower(buf[i])) buf[i] -= case_diff; } - tud_cdc_n_write_flush(itf); + + tud_cdc_n_write_char(itf, buf[i]); + } + tud_cdc_n_write_flush(itf); } // Invoked when device is mounted -void tud_mount_cb(void) -{ - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) { + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) -{ - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) { + blink_interval_ms = BLINK_NOT_MOUNTED; } + //--------------------------------------------------------------------+ // USB CDC //--------------------------------------------------------------------+ -static void cdc_task(void) -{ - uint8_t itf; - - for (itf = 0; itf < CFG_TUD_CDC; itf++) { - // connected() check for DTR bit - // Most but not all terminal client set this when making connection - // if ( tud_cdc_n_connected(itf) ) - { - if (tud_cdc_n_available(itf)) { - uint8_t buf[64]; - - uint32_t count = tud_cdc_n_read(itf, buf, sizeof(buf)); - - // echo back to both serial ports - echo_serial_port(0, buf, count); - echo_serial_port(1, buf, count); - } - } +static void cdc_task(void) { + uint8_t itf; + + for (itf = 0; itf < CFG_TUD_CDC; itf++) { + // connected() check for DTR bit + // Most but not all terminal client set this when making connection + // if ( tud_cdc_n_connected(itf) ) + { + if (tud_cdc_n_available(itf)) { + uint8_t buf[64]; + + uint32_t count = tud_cdc_n_read(itf, buf, sizeof(buf)); + + // echo back to both serial ports + echo_serial_port(0, buf, count); + echo_serial_port(1, buf, count); + } } + } } // Invoked when cdc when line state changed e.g connected/disconnected // Use to reset to DFU when disconnect with 1200 bps -void tud_cdc_line_state_cb(uint8_t instance, bool dtr, bool rts) -{ - (void)rts; - - // DTR = false is counted as disconnected - if (!dtr) { - // touch1200 only with first CDC instance (Serial) - if (instance == 0) { - cdc_line_coding_t coding; - tud_cdc_get_line_coding(&coding); - if (coding.bit_rate == 1200) { - if (board_reset_to_bootloader) { - board_reset_to_bootloader(); - } - } +void tud_cdc_line_state_cb(uint8_t instance, bool dtr, bool rts) { + (void)rts; + + // DTR = false is counted as disconnected + if (!dtr) { + // touch1200 only with first CDC instance (Serial) + if (instance == 0) { + cdc_line_coding_t coding; + tud_cdc_get_line_coding(&coding); + if (coding.bit_rate == 1200) { + if (board_reset_to_bootloader) { + board_reset_to_bootloader(); } + } } + } } //--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void) -{ - static uint32_t start_ms = 0; - static bool led_state = false; - - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle +void led_blinking_task(void) { + static uint32_t start_ms = 0; + static bool led_state = false; + + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h index 7cfefab9474..070f08ed1d2 100644 --- a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,25 +87,25 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 2 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 2 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c index e49f7701221..de2505c07f2 100644 --- a/Libraries/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c @@ -32,158 +32,165 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_CDC_0 = 0, ITF_NUM_CDC_0_DATA, ITF_NUM_CDC_1, ITF_NUM_CDC_1_DATA, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_CDC_0 = 0, + ITF_NUM_CDC_0_DATA, + ITF_NUM_CDC_1, + ITF_NUM_CDC_1_DATA, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_CDC * TUD_CDC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_CDC * TUD_CDC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_CDC_0_NOTIF 0x81 -#define EPNUM_CDC_0_OUT 0x02 -#define EPNUM_CDC_0_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_CDC_0_NOTIF 0x81 + #define EPNUM_CDC_0_OUT 0x02 + #define EPNUM_CDC_0_IN 0x82 -#define EPNUM_CDC_1_NOTIF 0x84 -#define EPNUM_CDC_1_OUT 0x05 -#define EPNUM_CDC_1_IN 0x85 + #define EPNUM_CDC_1_NOTIF 0x84 + #define EPNUM_CDC_1_OUT 0x05 + #define EPNUM_CDC_1_IN 0x85 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X -// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_0_NOTIF 0x81 -#define EPNUM_CDC_0_OUT 0x02 -#define EPNUM_CDC_0_IN 0x83 +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X + // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_0_NOTIF 0x81 + #define EPNUM_CDC_0_OUT 0x02 + #define EPNUM_CDC_0_IN 0x83 -#define EPNUM_CDC_1_NOTIF 0x84 -#define EPNUM_CDC_1_OUT 0x05 -#define EPNUM_CDC_1_IN 0x86 + #define EPNUM_CDC_1_NOTIF 0x84 + #define EPNUM_CDC_1_OUT 0x05 + #define EPNUM_CDC_1_IN 0x86 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X -// FT9XX doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_0_NOTIF 0x81 -#define EPNUM_CDC_0_OUT 0x02 -#define EPNUM_CDC_0_IN 0x83 + // FT9XX doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_0_NOTIF 0x81 + #define EPNUM_CDC_0_OUT 0x02 + #define EPNUM_CDC_0_IN 0x83 -#define EPNUM_CDC_1_NOTIF 0x84 -#define EPNUM_CDC_1_OUT 0x05 -#define EPNUM_CDC_1_IN 0x86 + #define EPNUM_CDC_1_NOTIF 0x84 + #define EPNUM_CDC_1_OUT 0x05 + #define EPNUM_CDC_1_IN 0x86 #else -#define EPNUM_CDC_0_NOTIF 0x81 -#define EPNUM_CDC_0_OUT 0x02 -#define EPNUM_CDC_0_IN 0x82 + #define EPNUM_CDC_0_NOTIF 0x81 + #define EPNUM_CDC_0_OUT 0x02 + #define EPNUM_CDC_0_IN 0x82 -#define EPNUM_CDC_1_NOTIF 0x83 -#define EPNUM_CDC_1_OUT 0x04 -#define EPNUM_CDC_1_IN 0x84 + #define EPNUM_CDC_1_NOTIF 0x83 + #define EPNUM_CDC_1_OUT 0x04 + #define EPNUM_CDC_1_IN 0x84 #endif -uint8_t const desc_fs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_fs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, 64), + // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, 64), - // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, 64), + // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, 64), }; #if TUD_OPT_HIGH_SPEED // Per USB specs: high speed capable device must report device_qualifier and other_speed_configuration -uint8_t const desc_hs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, - 512), + // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, 512), - // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, - 512), + // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, 512), }; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed -tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, - - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .bNumConfigurations = 0x01, - .bReserved = 0x00 +tusb_desc_device_qualifier_t const desc_device_qualifier = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, + + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 0x01, + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void) +uint8_t const* tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const *)&desc_device_qualifier; + return (uint8_t const*) &desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) +uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration; + // if link speed is high return fullspeed config, and vice versa + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration; } #endif // highspeed @@ -191,15 +198,15 @@ uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -209,64 +216,62 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB CDC", // 4: CDC Interface +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB CDC", // 4: CDC Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/cdc_msc/src/main.c b/Libraries/tinyusb/examples/device/cdc_msc/src/main.c index 4d5568ee549..4581a3babea 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc/src/main.c +++ b/Libraries/tinyusb/examples/device/cdc_msc/src/main.c @@ -36,9 +36,9 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -47,23 +47,22 @@ void led_blinking_task(void); void cdc_task(void); /*------------- MAIN -------------*/ -int main(void) -{ - board_init(); +int main(void) { + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); - cdc_task(); - } + cdc_task(); + } } //--------------------------------------------------------------------+ @@ -71,91 +70,83 @@ int main(void) //--------------------------------------------------------------------+ // Invoked when device is mounted -void tud_mount_cb(void) -{ - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) { + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) -{ - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) { + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended // remote_wakeup_en : if host allow us to perform remote wakeup // Within 7ms, device must draw an average of current less than 2.5 mA from bus -void tud_suspend_cb(bool remote_wakeup_en) -{ - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; +void tud_suspend_cb(bool remote_wakeup_en) { + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed -void tud_resume_cb(void) -{ - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +void tud_resume_cb(void) { + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } + //--------------------------------------------------------------------+ // USB CDC //--------------------------------------------------------------------+ -void cdc_task(void) -{ - // connected() check for DTR bit - // Most but not all terminal client set this when making connection - // if ( tud_cdc_connected() ) - { - // connected and there are data available - if (tud_cdc_available()) { - // read data - char buf[64]; - uint32_t count = tud_cdc_read(buf, sizeof(buf)); - (void)count; - - // Echo back - // Note: Skip echo by commenting out write() and write_flush() - // for throughput test e.g - // $ dd if=/dev/zero of=/dev/ttyACM0 count=10000 - tud_cdc_write(buf, count); - tud_cdc_write_flush(); - } +void cdc_task(void) { + // connected() check for DTR bit + // Most but not all terminal client set this when making connection + // if ( tud_cdc_connected() ) + { + // connected and there are data available + if (tud_cdc_available()) { + // read data + char buf[64]; + uint32_t count = tud_cdc_read(buf, sizeof(buf)); + (void) count; + + // Echo back + // Note: Skip echo by commenting out write() and write_flush() + // for throughput test e.g + // $ dd if=/dev/zero of=/dev/ttyACM0 count=10000 + tud_cdc_write(buf, count); + tud_cdc_write_flush(); } + } } // Invoked when cdc when line state changed e.g connected/disconnected -void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) -{ - (void)itf; - (void)rts; - - // TODO set some indicator - if (dtr) { - // Terminal connected - } else { - // Terminal disconnected - } +void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { + (void) itf; + (void) rts; + + // TODO set some indicator + if (dtr) { + // Terminal connected + } else { + // Terminal disconnected + } } // Invoked when CDC interface received data from host -void tud_cdc_rx_cb(uint8_t itf) -{ - (void)itf; +void tud_cdc_rx_cb(uint8_t itf) { + (void) itf; } //--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void) -{ - static uint32_t start_ms = 0; - static bool led_state = false; - - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle +void led_blinking_task(void) { + static uint32_t start_ms = 0; + static bool led_state = false; + + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/cdc_msc/src/msc_disk.c b/Libraries/tinyusb/examples/device/cdc_msc/src/msc_disk.c index e245379bd3e..d2f8628f136 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc/src/msc_disk.c +++ b/Libraries/tinyusb/examples/device/cdc_msc/src/msc_disk.c @@ -36,132 +36,128 @@ static bool ejected = false; // CFG_EXAMPLE_MSC_READONLY defined #define README_CONTENTS \ - "This is tinyusb's MassStorage Class demo.\r\n\r\n\ +"This is tinyusb's MassStorage Class demo.\r\n\r\n\ If you find any bugs or get any questions, feel free to file an\r\n\ issue at github.com/hathach/tinyusb" -enum { - DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount - DISK_BLOCK_SIZE = 512 +enum +{ + DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount + DISK_BLOCK_SIZE = 512 }; #ifdef CFG_EXAMPLE_MSC_READONLY const #endif - uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { - //------------- Block0: Boot Sector -------------// - // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; - // sector_per_cluster = 1; reserved_sectors = 1; - // fat_num = 1; fat12_root_entry_num = 16; - // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; - // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; - // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; - // FAT magic code at offset 510-511 - { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, - 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T', 'i', - 'n', 'y', 'U', 'S', 'B', ' ', 'M', 'S', 'C', 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, - 0x20, 0x00, 0x00, - - // Zero up to 2 last bytes of FAT magic code - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x55, 0xAA }, - - //------------- Block1: FAT12 Table -------------// - { - 0xF8, 0xFF, 0xFF, 0xFF, - 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file - }, - - //------------- Block2: Root Directory -------------// - { - // first entry is volume label - 'T', 'i', 'n', 'y', 'U', 'S', 'B', ' ', 'M', 'S', 'C', 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - // second entry is readme file - 'R', 'E', 'A', 'D', 'M', 'E', ' ', ' ', 'T', 'X', 'T', 0x20, 0x00, 0xC6, 0x52, 0x6D, - 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README_CONTENTS) - 1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) - }, - - //------------- Block3: Readme Content -------------// - README_CONTENTS - }; +uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = +{ + //------------- Block0: Boot Sector -------------// + // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; + // sector_per_cluster = 1; reserved_sectors = 1; + // fat_num = 1; fat12_root_entry_num = 16; + // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; + // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; + // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; + // FAT magic code at offset 510-511 + { + 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, + 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , + 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, + + // Zero up to 2 last bytes of FAT magic code + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA + }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file + }, + + //------------- Block2: Root Directory -------------// + { + // first entry is volume label + 'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // second entry is readme file + 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, + 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, + sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block3: Readme Content -------------// + README_CONTENTS +}; // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], - uint8_t product_rev[4]) +void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) { - (void)lun; + (void) lun; - const char vid[] = "TinyUSB"; - const char pid[] = "Mass Storage"; - const char rev[] = "1.0"; + const char vid[] = "TinyUSB"; + const char pid[] = "Mass Storage"; + const char rev[] = "1.0"; - memcpy(vendor_id, vid, strlen(vid)); - memcpy(product_id, pid, strlen(pid)); - memcpy(product_rev, rev, strlen(rev)); + memcpy(vendor_id , vid, strlen(vid)); + memcpy(product_id , pid, strlen(pid)); + memcpy(product_rev, rev, strlen(rev)); } // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted bool tud_msc_test_unit_ready_cb(uint8_t lun) { - (void)lun; + (void) lun; - // RAM disk is ready until ejected - if (ejected) { - // Additional Sense 3A-00 is NOT_FOUND - tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3a, 0x00); - return false; - } + // RAM disk is ready until ejected + if (ejected) { + // Additional Sense 3A-00 is NOT_FOUND + tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3a, 0x00); + return false; + } - return true; + return true; } // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size) +void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) { - (void)lun; + (void) lun; - *block_count = DISK_BLOCK_NUM; - *block_size = DISK_BLOCK_SIZE; + *block_count = DISK_BLOCK_NUM; + *block_size = DISK_BLOCK_SIZE; } // Invoked when received Start Stop Unit command @@ -169,108 +165,108 @@ void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_siz // - Start = 1 : active mode, if load_eject = 1 : load disk storage bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) { - (void)lun; - (void)power_condition; - - if (load_eject) { - if (start) { - // load disk storage - } else { - // unload disk storage - ejected = true; - } + (void) lun; + (void) power_condition; + + if ( load_eject ) + { + if (start) + { + // load disk storage + }else + { + // unload disk storage + ejected = true; } + } - return true; + return true; } // Callback invoked when received READ10 command. // Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, - uint32_t bufsize) +int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) { - (void)lun; + (void) lun; - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) - return -1; + // out of ramdisk + if ( lba >= DISK_BLOCK_NUM ) return -1; - uint8_t const *addr = msc_disk[lba] + offset; - memcpy(buffer, addr, bufsize); + uint8_t const* addr = msc_disk[lba] + offset; + memcpy(buffer, addr, bufsize); - return (int32_t)bufsize; + return (int32_t) bufsize; } -bool tud_msc_is_writable_cb(uint8_t lun) +bool tud_msc_is_writable_cb (uint8_t lun) { - (void)lun; + (void) lun; #ifdef CFG_EXAMPLE_MSC_READONLY - return false; + return false; #else - return true; + return true; #endif } // Callback invoked when received WRITE10 command. // Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, - uint32_t bufsize) +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) { - (void)lun; + (void) lun; - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) - return -1; + // out of ramdisk + if ( lba >= DISK_BLOCK_NUM ) return -1; #ifndef CFG_EXAMPLE_MSC_READONLY - uint8_t *addr = msc_disk[lba] + offset; - memcpy(addr, buffer, bufsize); + uint8_t* addr = msc_disk[lba] + offset; + memcpy(addr, buffer, bufsize); #else - (void)lba; - (void)offset; - (void)buffer; + (void) lba; (void) offset; (void) buffer; #endif - return (int32_t)bufsize; + return (int32_t) bufsize; } // Callback invoked when received an SCSI command not in built-in list below // - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE // - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) +int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) { - // read10 & write10 has their own callback and MUST not be handled here + // read10 & write10 has their own callback and MUST not be handled here - void const *response = NULL; - int32_t resplen = 0; + void const* response = NULL; + int32_t resplen = 0; - // most scsi handled is input - bool in_xfer = true; + // most scsi handled is input + bool in_xfer = true; - switch (scsi_cmd[0]) { + switch (scsi_cmd[0]) + { default: - // Set Sense = Invalid Command Operation - tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - - // negative means error -> tinyusb could stall and/or response with failed status - resplen = -1; - break; - } - - // return resplen must not larger than bufsize - if (resplen > bufsize) - resplen = bufsize; - - if (response && (resplen > 0)) { - if (in_xfer) { - memcpy(buffer, response, (size_t)resplen); - } else { - // SCSI output - } + // Set Sense = Invalid Command Operation + tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + + // negative means error -> tinyusb could stall and/or response with failed status + resplen = -1; + break; + } + + // return resplen must not larger than bufsize + if ( resplen > bufsize ) resplen = bufsize; + + if ( response && (resplen > 0) ) + { + if(in_xfer) + { + memcpy(buffer, response, (size_t) resplen); + }else + { + // SCSI output } + } - return (int32_t)resplen; + return (int32_t) resplen; } #endif diff --git a/Libraries/tinyusb/examples/device/cdc_msc/src/tusb_config.h b/Libraries/tinyusb/examples/device/cdc_msc/src/tusb_config.h index de7c4eab408..03e0e649cd5 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/cdc_msc/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,28 +87,28 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 1 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 1 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE 512 +#define CFG_TUD_MSC_EP_BUFSIZE 512 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c index 2f35cebc140..fac7cce8f65 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c @@ -32,119 +32,121 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) -{ - return (uint8_t const *)&desc_device; +uint8_t const *tud_descriptor_device_cb(void) { + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_CDC = 0, ITF_NUM_CDC_DATA, ITF_NUM_MSC, ITF_NUM_TOTAL }; +enum { + ITF_NUM_CDC = 0, + ITF_NUM_CDC_DATA, + ITF_NUM_MSC, + ITF_NUM_TOTAL +}; -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x82 -#define EPNUM_MSC_OUT 0x05 -#define EPNUM_MSC_IN 0x85 + #define EPNUM_MSC_OUT 0x05 + #define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X -// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x83 + // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x83 -#define EPNUM_MSC_OUT 0x04 -#define EPNUM_MSC_IN 0x85 + #define EPNUM_MSC_OUT 0x04 + #define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_CXD56 -// CXD56 doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -// CXD56 USB driver has fixed endpoint type (bulk/interrupt/iso) and direction (IN/OUT) by its number -// 0 control (IN/OUT), 1 Bulk (IN), 2 Bulk (OUT), 3 In (IN), 4 Bulk (IN), 5 Bulk (OUT), 6 In (IN) -#define EPNUM_CDC_NOTIF 0x83 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x81 + // CXD56 doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + // CXD56 USB driver has fixed endpoint type (bulk/interrupt/iso) and direction (IN/OUT) by its number + // 0 control (IN/OUT), 1 Bulk (IN), 2 Bulk (OUT), 3 In (IN), 4 Bulk (IN), 5 Bulk (OUT), 6 In (IN) + #define EPNUM_CDC_NOTIF 0x83 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x81 -#define EPNUM_MSC_OUT 0x05 -#define EPNUM_MSC_IN 0x84 + #define EPNUM_MSC_OUT 0x05 + #define EPNUM_MSC_IN 0x84 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X -// FT9XX doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x83 + // FT9XX doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x83 -#define EPNUM_MSC_OUT 0x04 -#define EPNUM_MSC_IN 0x85 + #define EPNUM_MSC_OUT 0x04 + #define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// MAX32 doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x83 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // MAX32 doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x83 -#define EPNUM_MSC_OUT 0x04 -#define EPNUM_MSC_IN 0x85 + #define EPNUM_MSC_OUT 0x04 + #define EPNUM_MSC_IN 0x85 #else -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x82 + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x82 -#define EPNUM_MSC_OUT 0x03 -#define EPNUM_MSC_IN 0x83 + #define EPNUM_MSC_OUT 0x03 + #define EPNUM_MSC_IN 0x83 #endif -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) // full speed configuration uint8_t const desc_fs_configuration[] = { @@ -178,60 +180,58 @@ uint8_t desc_other_speed_config[CONFIG_TOTAL_LEN]; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_qualifier_t), - .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = USB_BCD, - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .bNumConfigurations = 0x01, - .bReserved = 0x00 + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void) -{ - return (uint8_t const *)&desc_device_qualifier; +uint8_t const *tud_descriptor_device_qualifier_cb(void) { + return (uint8_t const *) &desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) -{ - (void)index; // for multiple configurations +uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) { + (void) index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - // Note: the descriptor type is OHER_SPEED_CONFIG instead of CONFIG - memcpy(desc_other_speed_config, - (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration, - CONFIG_TOTAL_LEN); + // if link speed is high return fullspeed config, and vice versa + // Note: the descriptor type is OHER_SPEED_CONFIG instead of CONFIG + memcpy(desc_other_speed_config, + (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration, + CONFIG_TOTAL_LEN); - desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; + desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; - return desc_other_speed_config; + return desc_other_speed_config; } #endif // highspeed + // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) -{ - (void)index; // for multiple configurations +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) { + (void) index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -241,65 +241,62 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB CDC", // 4: CDC Interface - "TinyUSB MSC", // 5: MSC Interface + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB CDC", // 4: CDC Interface + "TinyUSB MSC", // 5: MSC Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h index ccd96107b31..869500ad2ad 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h +++ b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h @@ -26,6 +26,7 @@ * 1 tab == 4 spaces! */ + #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H @@ -48,145 +49,142 @@ #include "bsp/board_mcu.h" #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -#error "ESP32-Sx should use IDF's FreeRTOSConfig.h" + #error "ESP32-Sx should use IDF's FreeRTOSConfig.h" #endif // TODO fix later #if CFG_TUSB_MCU == OPT_MCU_MM32F327X -extern u32 SystemCoreClock; + extern u32 SystemCoreClock; #else -// FIXME cause redundant-decls warnings -extern uint32_t SystemCoreClock; + // FIXME cause redundant-decls warnings + extern uint32_t SystemCoreClock; #endif #endif /* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU 0 -#define configENABLE_FPU 1 -#define configENABLE_TRUSTZONE 0 -#define configMINIMAL_SECURE_STACK_SIZE (1024) -#define configRUN_FREERTOS_SECURE_ONLY 1 +#define configENABLE_MPU 0 +#define configENABLE_FPU 1 +#define configENABLE_TRUSTZONE 0 +#define configMINIMAL_SECURE_STACK_SIZE ( 1024 ) +#define configRUN_FREERTOS_SECURE_ONLY 1 -#define configUSE_PREEMPTION 1 +#define configUSE_PREEMPTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ SystemCoreClock -#define configTICK_RATE_HZ (1000) -#define configMAX_PRIORITIES (5) -#define configMINIMAL_STACK_SIZE (128) -#define configTOTAL_HEAP_SIZE (configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024) -#define configMAX_TASK_NAME_LEN 16 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configQUEUE_REGISTRY_SIZE 4 -#define configUSE_QUEUE_SETS 0 -#define configUSE_TIME_SLICING 0 -#define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 - -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configSUPPORT_DYNAMIC_ALLOCATION 0 +#define configCPU_CLOCK_HZ SystemCoreClock +#define configTICK_RATE_HZ ( 1000 ) +#define configMAX_PRIORITIES ( 5 ) +#define configMINIMAL_STACK_SIZE ( 128 ) +#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 ) +#define configMAX_TASK_NAME_LEN 16 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configQUEUE_REGISTRY_SIZE 4 +#define configUSE_QUEUE_SETS 0 +#define configUSE_TIME_SLICING 0 +#define configUSE_NEWLIB_REENTRANT 0 +#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 + +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 0 /* Hook function related definitions. */ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configCHECK_HANDLER_INSTALLATION 0 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configCHECK_HANDLER_INSTALLATION 0 /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS 0 -#define configUSE_TRACE_FACILITY 1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#define configGENERATE_RUN_TIME_STATS 0 +#define configUSE_TRACE_FACILITY 1 // legacy trace +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES 2 +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 /* Software timer related definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 2) -#define configTIMER_QUEUE_LENGTH 32 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2) +#define configTIMER_QUEUE_LENGTH 32 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet 0 -#define INCLUDE_uxTaskPriorityGet 0 -#define INCLUDE_vTaskDelete 0 -#define INCLUDE_vTaskSuspend \ - 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR 0 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 -#define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 -#define INCLUDE_xTaskGetIdleTaskHandle 0 +#define INCLUDE_vTaskPrioritySet 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY +#define INCLUDE_xResumeFromISR 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName 0 -#define INCLUDE_eTaskGetState 0 -#define INCLUDE_xEventGroupSetBitFromISR 0 -#define INCLUDE_xTimerPendFunctionCall 0 +#define INCLUDE_pcTaskGetTaskName 0 +#define INCLUDE_eTaskGetState 0 +#define INCLUDE_xEventGroupSetBitFromISR 0 +#define INCLUDE_xTimerPendFunctionCall 0 #ifdef __RX__ /* Renesas RX series */ -#define vSoftwareInterruptISR INT_Excep_ICU_SWINT -#define vTickISR INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ / 2) -#define configKERNEL_INTERRUPT_PRIORITY 1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 +#define vSoftwareInterruptISR INT_Excep_ICU_SWINT +#define vTickISR INT_Excep_CMT0_CMI0 +#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2) +#define configKERNEL_INTERRUPT_PRIORITY 1 +#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 #else /* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler -#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler +#define xPortSysTickHandler SysTick_Handler +#define vPortSVCHandler SVC_Handler //--------------------------------------------------------------------+ // Interrupt nesting behavior configuration. //--------------------------------------------------------------------+ #if defined(__NVIC_PRIO_BITS) -// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h -#define configPRIO_BITS __NVIC_PRIO_BITS + // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h + #define configPRIO_BITS __NVIC_PRIO_BITS #elif defined(__ECLIC_INTCTLBITS) -// RISC-V Bumblebee core from nuclei -#define configPRIO_BITS __ECLIC_INTCTLBITS + // RISC-V Bumblebee core from nuclei + #define configPRIO_BITS __ECLIC_INTCTLBITS #elif defined(__IASMARM__) -// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. -// Therefore we will hard coded it to minimum value of 2 to get pass ci build. -// IAR user must update this to correct value of the target MCU -#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" -#define configPRIO_BITS 2 + // FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. + // Therefore we will hard coded it to minimum value of 2 to get pass ci build. + // IAR user must update this to correct value of the target MCU + #message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" + #define configPRIO_BITS 2 #else -#error "FreeRTOS configPRIO_BITS to be defined" + #error "FreeRTOS configPRIO_BITS to be defined" #endif /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1 << configPRIO_BITS) - 1) +#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1<= DISK_BLOCK_NUM) - return -1; + // out of ramdisk + if ( lba >= DISK_BLOCK_NUM ) return -1; - uint8_t const *addr = msc_disk[lba] + offset; - memcpy(buffer, addr, bufsize); + uint8_t const* addr = msc_disk[lba] + offset; + memcpy(buffer, addr, bufsize); - return (int32_t)bufsize; + return (int32_t) bufsize; } // Callback invoked when received WRITE10 command. // Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, - uint32_t bufsize) +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) { - (void)lun; + (void) lun; - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) - return -1; + // out of ramdisk + if ( lba >= DISK_BLOCK_NUM ) return -1; #ifndef CFG_EXAMPLE_MSC_READONLY - uint8_t *addr = msc_disk[lba] + offset; - memcpy(addr, buffer, bufsize); + uint8_t* addr = msc_disk[lba] + offset; + memcpy(addr, buffer, bufsize); #else - (void)lba; - (void)offset; - (void)buffer; + (void) lba; (void) offset; (void) buffer; #endif - return (int32_t)bufsize; + return (int32_t) bufsize; } // Callback invoked when received an SCSI command not in built-in list below // - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE // - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) +int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) { - // read10 & write10 has their own callback and MUST not be handled here + // read10 & write10 has their own callback and MUST not be handled here - void const *response = NULL; - int32_t resplen = 0; + void const* response = NULL; + int32_t resplen = 0; - // most scsi handled is input - bool in_xfer = true; + // most scsi handled is input + bool in_xfer = true; - switch (scsi_cmd[0]) { + switch (scsi_cmd[0]) + { default: - // Set Sense = Invalid Command Operation - tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - - // negative means error -> tinyusb could stall and/or response with failed status - resplen = -1; - break; - } - - // return resplen must not larger than bufsize - if (resplen > bufsize) - resplen = bufsize; - - if (response && (resplen > 0)) { - if (in_xfer) { - memcpy(buffer, response, (size_t)resplen); - } else { - // SCSI output - } + // Set Sense = Invalid Command Operation + tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + + // negative means error -> tinyusb could stall and/or response with failed status + resplen = -1; + break; + } + + // return resplen must not larger than bufsize + if ( resplen > bufsize ) resplen = bufsize; + + if ( response && (resplen > 0) ) + { + if(in_xfer) + { + memcpy(buffer, response, (size_t) resplen); + }else + { + // SCSI output } + } - return (int32_t)resplen; + return (int32_t) resplen; } #endif diff --git a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h index 94bea0c6565..e743c914842 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -55,24 +55,24 @@ extern "C" { // This examples use FreeRTOS #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_FREERTOS +#define CFG_TUSB_OS OPT_OS_FREERTOS #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos / +#define CFG_TUSB_OS_INC_PATH freertos/ #endif // can be defined by compiler in DEBUG build #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -86,7 +86,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -94,28 +94,28 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 1 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 1 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE 512 +#define CFG_TUD_MSC_EP_BUFSIZE 512 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c index 80664f0329d..917b73e10ab 100644 --- a/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c @@ -32,167 +32,175 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_CDC = 0, ITF_NUM_CDC_DATA, ITF_NUM_MSC, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_CDC = 0, + ITF_NUM_CDC_DATA, + ITF_NUM_MSC, + ITF_NUM_TOTAL +}; -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x82 -#define EPNUM_MSC_OUT 0x05 -#define EPNUM_MSC_IN 0x85 + #define EPNUM_MSC_OUT 0x05 + #define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_SAMG -// SAMG doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x83 + // SAMG doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x83 -#define EPNUM_MSC_OUT 0x04 -#define EPNUM_MSC_IN 0x85 + #define EPNUM_MSC_OUT 0x04 + #define EPNUM_MSC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// MAX32 doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x83 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // MAX32 doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x83 -#define EPNUM_MSC_OUT 0x04 -#define EPNUM_MSC_IN 0x85 + #define EPNUM_MSC_OUT 0x04 + #define EPNUM_MSC_IN 0x85 #else -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x82 + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x82 -#define EPNUM_MSC_OUT 0x03 -#define EPNUM_MSC_IN 0x83 + #define EPNUM_MSC_OUT 0x03 + #define EPNUM_MSC_IN 0x83 #endif -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) -uint8_t const desc_fs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_fs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), }; #if TUD_OPT_HIGH_SPEED // Per USB specs: high speed capable device must report device_qualifier and other_speed_configuration // high speed configuration -uint8_t const desc_hs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 512), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 512), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), }; // other speed configuration uint8_t desc_other_speed_config[CONFIG_TOTAL_LEN]; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed -tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_qualifier_t), - .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, - .bcdUSB = USB_BCD, - - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .bNumConfigurations = 0x01, - .bReserved = 0x00 +tusb_desc_device_qualifier_t const desc_device_qualifier = +{ + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = USB_BCD, + + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 0x01, + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void) +uint8_t const* tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const *)&desc_device_qualifier; + return (uint8_t const*) &desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) +uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - // Note: the descriptor type is OHER_SPEED_CONFIG instead of CONFIG - memcpy(desc_other_speed_config, - (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration, - CONFIG_TOTAL_LEN); + // if link speed is high return fullspeed config, and vice versa + // Note: the descriptor type is OHER_SPEED_CONFIG instead of CONFIG + memcpy(desc_other_speed_config, + (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration, + CONFIG_TOTAL_LEN); - desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; + desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; - return desc_other_speed_config; + return desc_other_speed_config; } #endif // highspeed @@ -200,15 +208,15 @@ uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -218,65 +226,63 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB CDC", // 4: CDC Interface - "TinyUSB MSC", // 5: MSC Interface +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB CDC", // 4: CDC Interface + "TinyUSB MSC", // 5: MSC Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/cdc_app.c b/Libraries/tinyusb/examples/device/cdc_uac2/src/cdc_app.c index e2c152ebd9b..2166c1d6bad 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/cdc_app.c +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/cdc_app.c @@ -31,38 +31,42 @@ // Invoked when cdc when line state changed e.g connected/disconnected void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { - (void)itf; - (void)rts; + (void) itf; + (void) rts; - if (dtr) { - // Terminal connected - } else { - // Terminal disconnected - } + if (dtr) + { + // Terminal connected + } + else + { + // Terminal disconnected + } } // Invoked when CDC interface received data from host void tud_cdc_rx_cb(uint8_t itf) { - uint8_t buf[64]; - uint32_t count; + uint8_t buf[64]; + uint32_t count; - // connected() check for DTR bit - // Most but not all terminal client set this when making connection - if (tud_cdc_connected()) { - if (tud_cdc_available()) // data is available - { - count = tud_cdc_n_read(itf, buf, sizeof(buf)); - (void)count; + // connected() check for DTR bit + // Most but not all terminal client set this when making connection + if (tud_cdc_connected()) + { + if (tud_cdc_available()) // data is available + { + count = tud_cdc_n_read(itf, buf, sizeof(buf)); + (void) count; - tud_cdc_n_write(itf, buf, count); - tud_cdc_n_write_flush(itf); - // dummy code to check that cdc serial is responding - board_led_write(0); - board_delay(50); - board_led_write(1); - board_delay(50); - board_led_write(0); - } + tud_cdc_n_write(itf, buf, count); + tud_cdc_n_write_flush(itf); + // dummy code to check that cdc serial is responding + board_led_write(0); + board_delay(50); + board_led_write(1); + board_delay(50); + board_led_write(0); } + } } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/common.h b/Libraries/tinyusb/examples/device/cdc_uac2/src/common.h index dbc1ce167f7..f281024c7a0 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/common.h +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/common.h @@ -7,26 +7,28 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_STREAMING = 25, - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum +{ + BLINK_STREAMING = 25, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; -enum { - VOLUME_CTRL_0_DB = 0, - VOLUME_CTRL_10_DB = 2560, - VOLUME_CTRL_20_DB = 5120, - VOLUME_CTRL_30_DB = 7680, - VOLUME_CTRL_40_DB = 10240, - VOLUME_CTRL_50_DB = 12800, - VOLUME_CTRL_60_DB = 15360, - VOLUME_CTRL_70_DB = 17920, - VOLUME_CTRL_80_DB = 20480, - VOLUME_CTRL_90_DB = 23040, - VOLUME_CTRL_100_DB = 25600, - VOLUME_CTRL_SILENCE = 0x8000, +enum +{ + VOLUME_CTRL_0_DB = 0, + VOLUME_CTRL_10_DB = 2560, + VOLUME_CTRL_20_DB = 5120, + VOLUME_CTRL_30_DB = 7680, + VOLUME_CTRL_40_DB = 10240, + VOLUME_CTRL_50_DB = 12800, + VOLUME_CTRL_60_DB = 15360, + VOLUME_CTRL_70_DB = 17920, + VOLUME_CTRL_80_DB = 20480, + VOLUME_CTRL_90_DB = 23040, + VOLUME_CTRL_100_DB = 25600, + VOLUME_CTRL_SILENCE = 0x8000, }; #endif diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/main.c b/Libraries/tinyusb/examples/device/cdc_uac2/src/main.c index 3e2d04b9826..25b2cd9a52c 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/main.c +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/main.c @@ -43,27 +43,28 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); #if (CFG_TUSB_MCU == OPT_MCU_RP2040) - stdio_init_all(); + stdio_init_all(); #endif - TU_LOG1("CDC UAC2 example running\r\n"); + TU_LOG1("CDC UAC2 example running\r\n"); - while (1) { - tud_task(); // TinyUSB device task - led_blinking_task(); + while (1) + { + tud_task(); // TinyUSB device task + led_blinking_task(); #if (CFG_TUSB_MCU == OPT_MCU_RP2040) - // printf("Hello, world!\r\n"); + // printf("Hello, world!\r\n"); #endif - } + } - return 0; + return 0; } //--------------------------------------------------------------------+ @@ -73,13 +74,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -87,12 +88,12 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/tusb_config.h b/Libraries/tinyusb/examples/device/cdc_uac2/src/tusb_config.h index 2e90ed5fb9a..93489cf6267 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/tusb_config.h @@ -39,12 +39,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -57,18 +57,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -82,7 +82,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -90,103 +90,82 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_HEADSET_STEREO_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_HEADSET_STEREO_DESC_LEN // How many formats are used, need to adjust USB descriptor if changed -#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 +#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 // Audio format type I specifications #if defined(__RX__) -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 48000 // 16bit/48kHz is the best quality for Renesas RX +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 48000 // 16bit/48kHz is the best quality for Renesas RX #else -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE \ - 96000 // 24bit/96kHz is the best quality for full-speed, high-speed is needed beyond this +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 96000 // 24bit/96kHz is the best quality for full-speed, high-speed is needed beyond this #endif -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX 1 // Changed +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX 1 // Changed // 16bit in 16bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX 16 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 #if defined(__RX__) // 8bit in 8bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 8 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 8 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 1 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 8 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 1 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 8 #else // 24bit in 32bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 24 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 #endif // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ - TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN) -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX \ - TU_MAX( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN) +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ \ - TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT) -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX \ - TU_MAX( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT) +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 2 +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 2 // Size of control request buffer -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE 64 -#define CFG_TUD_CDC_TX_BUFSIZE 64 +#define CFG_TUD_CDC_RX_BUFSIZE 64 +#define CFG_TUD_CDC_TX_BUFSIZE 64 #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/uac2_app.c b/Libraries/tinyusb/examples/device/cdc_uac2/src/uac2_app.c index b342e96ffd9..c57d98a1a78 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/uac2_app.c +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/uac2_app.c @@ -37,17 +37,17 @@ //--------------------------------------------------------------------+ // List of supported sample rates -const uint32_t sample_rates[] = { 44100, 48000 }; -uint32_t current_sample_rate = 44100; +const uint32_t sample_rates[] = {44100, 48000}; +uint32_t current_sample_rate = 44100; -#define N_SAMPLE_RATES TU_ARRAY_SIZE(sample_rates) +#define N_SAMPLE_RATES TU_ARRAY_SIZE(sample_rates) uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 -int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 +int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 +int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 // Buffer for microphone data int32_t mic_buf[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ / 4]; @@ -56,145 +56,150 @@ int32_t spk_buf[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ / 4]; // Speaker data size received in the last frame int spk_data_size; // Resolution per format -const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = { - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX -}; +const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = {CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX}; // Current resolution, update on format change uint8_t current_resolution; // Helper for clock get requests static bool tud_audio_clock_get_request(uint8_t rhport, audio_control_request_t const *request) { - TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - - if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { - if (request->bRequest == AUDIO_CS_REQ_CUR) { - TU_LOG1("Clock get current freq %" PRIu32 "\r\n", current_sample_rate); - - audio_control_cur_4_t curf = { (int32_t)tu_htole32(current_sample_rate) }; - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); - } else if (request->bRequest == AUDIO_CS_REQ_RANGE) { - audio_control_range_4_n_t(N_SAMPLE_RATES) - rangef = { .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) }; - TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); - for (uint8_t i = 0; i < N_SAMPLE_RATES; i++) { - rangef.subrange[i].bMin = (int32_t)sample_rates[i]; - rangef.subrange[i].bMax = (int32_t)sample_rates[i]; - rangef.subrange[i].bRes = 0; - TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, - (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); - } - - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); - } - } else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && - request->bRequest == AUDIO_CS_REQ_CUR) { - audio_control_cur_1_t cur_valid = { .bCur = 1 }; - TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); + + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) + { + if (request->bRequest == AUDIO_CS_REQ_CUR) + { + TU_LOG1("Clock get current freq %" PRIu32 "\r\n", current_sample_rate); + + audio_control_cur_4_t curf = { (int32_t) tu_htole32(current_sample_rate) }; + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); } - TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - return false; + else if (request->bRequest == AUDIO_CS_REQ_RANGE) + { + audio_control_range_4_n_t(N_SAMPLE_RATES) rangef = + { + .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) + }; + TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); + for(uint8_t i = 0; i < N_SAMPLE_RATES; i++) + { + rangef.subrange[i].bMin = (int32_t) sample_rates[i]; + rangef.subrange[i].bMax = (int32_t) sample_rates[i]; + rangef.subrange[i].bRes = 0; + TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); + } + + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); + } + } + else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && + request->bRequest == AUDIO_CS_REQ_CUR) + { + audio_control_cur_1_t cur_valid = { .bCur = 1 }; + TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); + } + TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + return false; } // Helper for clock set requests -static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, - uint8_t const *buf) +static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) { - (void)rhport; + (void)rhport; - TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); + TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) + { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); - current_sample_rate = (uint32_t)((audio_control_cur_4_t const *)buf)->bCur; + current_sample_rate = (uint32_t) ((audio_control_cur_4_t const *)buf)->bCur; - TU_LOG1("Clock set current freq: %" PRIu32 "\r\n", current_sample_rate); + TU_LOG1("Clock set current freq: %" PRIu32 "\r\n", current_sample_rate); - return true; - } else { - TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - return false; - } + return true; + } + else + { + TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + return false; + } } // Helper for feature unit get requests -static bool tud_audio_feature_unit_get_request(uint8_t rhport, - audio_control_request_t const *request) +static bool tud_audio_feature_unit_get_request(uint8_t rhport, audio_control_request_t const *request) { - TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - - if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) { - audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; - TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); - } else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { - if (request->bRequest == AUDIO_CS_REQ_RANGE) { - audio_control_range_2_n_t(1) - range_vol = { .wNumSubRanges = tu_htole16(1), - .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), - tu_htole16(VOLUME_CTRL_0_DB), - tu_htole16(256) } }; - TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, - range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, - range_vol.subrange[0].bRes / 256); - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); - } else if (request->bRequest == AUDIO_CS_REQ_CUR) { - audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; - TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); - } + TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); + + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) + { + audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; + TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); + } + else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) + { + if (request->bRequest == AUDIO_CS_REQ_RANGE) + { + audio_control_range_2_n_t(1) range_vol = { + .wNumSubRanges = tu_htole16(1), + .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), tu_htole16(VOLUME_CTRL_0_DB), tu_htole16(256) } + }; + TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, + range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, range_vol.subrange[0].bRes / 256); + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); } - TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); + else if (request->bRequest == AUDIO_CS_REQ_CUR) + { + audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; + TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); + } + } + TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); - return false; + return false; } // Helper for feature unit set requests -static bool tud_audio_feature_unit_set_request(uint8_t rhport, - audio_control_request_t const *request, - uint8_t const *buf) +static bool tud_audio_feature_unit_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) { - (void)rhport; + (void)rhport; - TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); + TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) + { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); - mute[request->bChannelNumber] = ((audio_control_cur_1_t const *)buf)->bCur; + mute[request->bChannelNumber] = ((audio_control_cur_1_t const *)buf)->bCur; - TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, - mute[request->bChannelNumber]); + TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, mute[request->bChannelNumber]); - return true; - } else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); + return true; + } + else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) + { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); - volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; + volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; - TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, - volume[request->bChannelNumber] / 256); + TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, volume[request->bChannelNumber] / 256); - return true; - } else { - TU_LOG1( - "Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", + return true; + } + else + { + TU_LOG1("Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", request->bEntityID, request->bControlSelector, request->bRequest); - return false; - } + return false; + } } //--------------------------------------------------------------------+ @@ -204,95 +209,94 @@ static bool tud_audio_feature_unit_set_request(uint8_t rhport, // Invoked when audio class specific get request received for an entity bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - audio_control_request_t const *request = (audio_control_request_t const *)p_request; - - if (request->bEntityID == UAC2_ENTITY_CLOCK) - return tud_audio_clock_get_request(rhport, request); - if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) - return tud_audio_feature_unit_get_request(rhport, request); - else { - TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - } - return false; + audio_control_request_t const *request = (audio_control_request_t const *)p_request; + + if (request->bEntityID == UAC2_ENTITY_CLOCK) + return tud_audio_clock_get_request(rhport, request); + if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) + return tud_audio_feature_unit_get_request(rhport, request); + else + { + TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + } + return false; } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *buf) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *buf) { - audio_control_request_t const *request = (audio_control_request_t const *)p_request; + audio_control_request_t const *request = (audio_control_request_t const *)p_request; - if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) - return tud_audio_feature_unit_set_request(rhport, request, buf); - if (request->bEntityID == UAC2_ENTITY_CLOCK) - return tud_audio_clock_set_request(rhport, request, buf); - TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); + if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) + return tud_audio_feature_unit_set_request(rhport, request, buf); + if (request->bEntityID == UAC2_ENTITY_CLOCK) + return tud_audio_clock_set_request(rhport, request, buf); + TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); - return false; + return false; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void)rhport; - uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) { - // Audio streaming stop - blink_interval_ms = BLINK_MOUNTED; - } + if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) { + // Audio streaming stop + blink_interval_ms = BLINK_MOUNTED; + } - return true; + return true; } -bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - - TU_LOG2("Set interface %d alt %d\r\n", itf, alt); - if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) { - // Audio streaming start - blink_interval_ms = BLINK_STREAMING; - } - - // Clear buffer when streaming format is changed - spk_data_size = 0; - if (alt != 0) { - current_resolution = resolutions_per_format[alt - 1]; - } - - return true; + (void)rhport; + uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + + TU_LOG2("Set interface %d alt %d\r\n", itf, alt); + if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) { + // Audio streaming start + blink_interval_ms = BLINK_STREAMING; + } + + // Clear buffer when streaming format is changed + spk_data_size = 0; + if(alt != 0) + { + current_resolution = resolutions_per_format[alt-1]; + } + + return true; } -bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, - uint8_t ep_out, uint8_t cur_alt_setting) +bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) { - (void)rhport; - (void)func_id; - (void)ep_out; - (void)cur_alt_setting; + (void)rhport; + (void)func_id; + (void)ep_out; + (void)cur_alt_setting; - spk_data_size = tud_audio_read(spk_buf, n_bytes_received); - tud_audio_write(spk_buf, n_bytes_received); + spk_data_size = tud_audio_read(spk_buf, n_bytes_received); + tud_audio_write(spk_buf, n_bytes_received); - return true; + return true; } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, - uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - // This callback could be used to fill microphone data separately - return true; + // This callback could be used to fill microphone data separately + return true; } //--------------------------------------------------------------------+ @@ -300,14 +304,13 @@ bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) return; + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; + board_led_write(led_state); + led_state = 1 - led_state; } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.c index 58c682adc65..ab1a2ee839a 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.c @@ -35,112 +35,110 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -#define CONFIG_TOTAL_LEN \ - (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN + \ - CFG_TUD_CDC * TUD_CDC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN + CFG_TUD_CDC * TUD_CDC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO_IN 0x03 -#define EPNUM_AUDIO_OUT 0x03 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_AUDIO_IN 0x03 + #define EPNUM_AUDIO_OUT 0x03 -#define EPNUM_CDC_NOTIF 0x84 -#define EPNUM_CDC_OUT 0x05 -#define EPNUM_CDC_IN 0x85 + #define EPNUM_CDC_NOTIF 0x84 + #define EPNUM_CDC_OUT 0x05 + #define EPNUM_CDC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_NRF5X -// ISO endpoints for NRF5x are fixed to 0x08 (0x88) -#define EPNUM_AUDIO_IN 0x08 -#define EPNUM_AUDIO_OUT 0x08 + // ISO endpoints for NRF5x are fixed to 0x08 (0x88) + #define EPNUM_AUDIO_IN 0x08 + #define EPNUM_AUDIO_OUT 0x08 -#define EPNUM_CDC_NOTIF 0x81 -#define EPNUM_CDC_OUT 0x02 -#define EPNUM_CDC_IN 0x82 + #define EPNUM_CDC_NOTIF 0x81 + #define EPNUM_CDC_OUT 0x02 + #define EPNUM_CDC_IN 0x82 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X -// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_AUDIO_IN 0x01 -#define EPNUM_AUDIO_OUT 0x02 +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X + // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_AUDIO_IN 0x01 + #define EPNUM_AUDIO_OUT 0x02 -#define EPNUM_CDC_NOTIF 0x83 -#define EPNUM_CDC_OUT 0x04 -#define EPNUM_CDC_IN 0x85 + #define EPNUM_CDC_NOTIF 0x83 + #define EPNUM_CDC_OUT 0x04 + #define EPNUM_CDC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X -// FT9XX doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_AUDIO_IN 0x01 -#define EPNUM_AUDIO_OUT 0x02 + // FT9XX doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_AUDIO_IN 0x01 + #define EPNUM_AUDIO_OUT 0x02 -#define EPNUM_CDC_NOTIF 0x83 -#define EPNUM_CDC_OUT 0x04 -#define EPNUM_CDC_IN 0x85 + #define EPNUM_CDC_NOTIF 0x83 + #define EPNUM_CDC_OUT 0x04 + #define EPNUM_CDC_IN 0x85 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// MAX32 doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_AUDIO_IN 0x01 -#define EPNUM_AUDIO_OUT 0x02 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // MAX32 doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_AUDIO_IN 0x01 + #define EPNUM_AUDIO_OUT 0x02 -#define EPNUM_CDC_NOTIF 0x83 -#define EPNUM_CDC_OUT 0x04 -#define EPNUM_CDC_IN 0x85 + #define EPNUM_CDC_NOTIF 0x83 + #define EPNUM_CDC_OUT 0x04 + #define EPNUM_CDC_IN 0x85 #else -#define EPNUM_AUDIO_IN 0x01 -#define EPNUM_AUDIO_OUT 0x01 + #define EPNUM_AUDIO_IN 0x01 + #define EPNUM_AUDIO_OUT 0x01 -#define EPNUM_CDC_NOTIF 0x83 -#define EPNUM_CDC_OUT 0x04 -#define EPNUM_CDC_IN 0x84 + #define EPNUM_CDC_NOTIF 0x83 + #define EPNUM_CDC_OUT 0x04 + #define EPNUM_CDC_IN 0x84 #endif -uint8_t const desc_configuration[] = { +uint8_t const desc_configuration[] = +{ // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), @@ -154,10 +152,10 @@ uint8_t const desc_configuration[] = { // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -166,66 +164,64 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB headset", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB Speakers", // 4: Audio Interface - "TinyUSB Microphone", // 5: Audio Interface - "TinyUSB CDC", // 6: Audio Interface +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB headset", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB Speakers", // 4: Audio Interface + "TinyUSB Microphone", // 5: Audio Interface + "TinyUSB CDC", // 6: Audio Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.h index 8939bf75666..736feeefea7 100644 --- a/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/cdc_uac2/src/usb_descriptors.h @@ -30,200 +30,129 @@ // #include "tusb.h" // Unit numbers are arbitrary selected -#define UAC2_ENTITY_CLOCK 0x04 +#define UAC2_ENTITY_CLOCK 0x04 // Speaker path -#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 -#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 +#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 +#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 #define UAC2_ENTITY_SPK_OUTPUT_TERMINAL 0x03 // Microphone path -#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 +#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 #define UAC2_ENTITY_MIC_OUTPUT_TERMINAL 0x13 -enum { - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING_SPK, - ITF_NUM_AUDIO_STREAMING_MIC, - ITF_NUM_CDC, - ITF_NUM_CDC_DATA, - ITF_NUM_TOTAL +enum +{ + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING_SPK, + ITF_NUM_AUDIO_STREAMING_MIC, + ITF_NUM_CDC, + ITF_NUM_CDC_DATA, + ITF_NUM_TOTAL }; -#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN \ - (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ - TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ - TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 1, Alternate 0 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 1, Alternate 2 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 2, Alternate 0 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 2, Alternate 1 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 2, Alternate 2 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) +#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + + TUD_AUDIO_DESC_STD_AC_LEN\ + + TUD_AUDIO_DESC_CS_AC_LEN\ + + TUD_AUDIO_DESC_CLK_SRC_LEN\ + + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN\ + + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + /* Interface 1, Alternate 2 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + /* Interface 2, Alternate 0 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + /* Interface 2, Alternate 1 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + /* Interface 2, Alternate 2 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) -#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin) \ - /* Standard Interface Association Descriptor (IAD) */ \ - TUD_AUDIO_DESC_IAD(/*_firstitfs*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ 3, \ - /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ - TUD_AUDIO_DESC_STD_AC( \ - /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x00, \ - /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ - TUD_AUDIO_DESC_CS_AC( \ - /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, \ - /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + \ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN, \ - /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, \ - /*_assocTerm*/ 0x00, \ - /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ - TUD_AUDIO_DESC_INPUT_TERM( \ - /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, \ - /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ - /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ - /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL( \ - /*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, \ - /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ \ - (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ \ - (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ \ - (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), \ - /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, \ - /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, \ - /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, \ - /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ - TUD_AUDIO_DESC_INPUT_TERM( \ - /*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, \ - /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ - /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ - /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, \ - /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, \ - /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), \ - /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ \ - 0x05), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x05), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epout, /*_attr*/ \ - (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | \ - TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, \ - /*_lockdelay*/ 0x0001), /* Interface 1, Alternate 2 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x05), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epout, /*_attr*/ \ - (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | \ - TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ \ - 0x0001), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */ \ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), \ - /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ \ - 0x04), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 2, Alternate 1 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x04), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epin, /*_attr*/ \ - (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ - TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000), /* Interface 2, Alternate 2 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x04), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epin, /*_attr*/ \ - (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ - TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin) \ + /* Standard Interface Association Descriptor (IAD) */\ + TUD_AUDIO_DESC_IAD(/*_firstitfs*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ 3, /*_stridx*/ 0x00),\ + /* Standard AC Interface Descriptor(4.7.1) */\ + TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ + /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ + TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ + /* Clock Source Descriptor(4.7.2.1) */\ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, /*_assocTerm*/ 0x00, /*_stridx*/ 0x00), \ + /* Input Terminal Descriptor(4.7.2.4) */\ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ + /* Feature Unit Descriptor(4.7.2.8) */\ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(/*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_stridx*/ 0x00),\ + /* Output Terminal Descriptor(4.7.2.5) */\ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ + /* Input Terminal Descriptor(4.7.2.4) */\ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ + /* Output Terminal Descriptor(4.7.2.5) */\ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x05),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 1 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ + /* Interface 1, Alternate 2 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x04),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 2, Alternate 1 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ + /* Interface 2, Alternate 2 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) #endif diff --git a/Libraries/tinyusb/examples/device/dfu/src/main.c b/Libraries/tinyusb/examples/device/dfu/src/main.c index ec13731ab81..81fc0a62c26 100644 --- a/Libraries/tinyusb/examples/device/dfu/src/main.c +++ b/Libraries/tinyusb/examples/device/dfu/src/main.c @@ -23,7 +23,7 @@ * */ -/* + /* * After device is enumerated in dfu mode run the following commands * * To transfer firmware from host to device (best to test with text file) @@ -48,18 +48,21 @@ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTYPES //--------------------------------------------------------------------+ -const char *upload_image[2] = { "Hello world from TinyUSB DFU! - Partition 0", - "Hello world from TinyUSB DFU! - Partition 1" }; +const char* upload_image[2]= +{ + "Hello world from TinyUSB DFU! - Partition 0", + "Hello world from TinyUSB DFU! - Partition 1" +}; /* Blink pattern * - 250 ms : device not mounted * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -69,19 +72,20 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - } + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -91,13 +95,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -105,14 +109,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -125,35 +129,39 @@ void tud_resume_cb(void) // During this period, USB host won't try to communicate with us. uint32_t tud_dfu_get_timeout_cb(uint8_t alt, uint8_t state) { - if (state == DFU_DNBUSY) { - // For this example - // - Atl0 Flash is fast : 1 ms - // - Alt1 EEPROM is slow: 100 ms - return (alt == 0) ? 1 : 100; - } else if (state == DFU_MANIFEST) { - // since we don't buffer entire image and do any flashing in manifest stage - return 0; - } - + if ( state == DFU_DNBUSY ) + { + // For this example + // - Atl0 Flash is fast : 1 ms + // - Alt1 EEPROM is slow: 100 ms + return (alt == 0) ? 1 : 100; + } + else if (state == DFU_MANIFEST) + { + // since we don't buffer entire image and do any flashing in manifest stage return 0; + } + + return 0; } // Invoked when received DFU_DNLOAD (wLength>0) following by DFU_GETSTATUS (state=DFU_DNBUSY) requests // This callback could be returned before flashing op is complete (async). // Once finished flashing, application must call tud_dfu_finish_flashing() -void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const *data, uint16_t length) +void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const* data, uint16_t length) { - (void)alt; - (void)block_num; + (void) alt; + (void) block_num; - //printf("\r\nReceived Alt %u BlockNum %u of length %u\r\n", alt, wBlockNum, length); + //printf("\r\nReceived Alt %u BlockNum %u of length %u\r\n", alt, wBlockNum, length); - for (uint16_t i = 0; i < length; i++) { - printf("%c", data[i]); - } + for(uint16_t i=0; i max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/dfu_runtime/src/main.c b/Libraries/tinyusb/examples/device/dfu_runtime/src/main.c index 5bb94f09948..170dde93239 100644 --- a/Libraries/tinyusb/examples/device/dfu_runtime/src/main.c +++ b/Libraries/tinyusb/examples/device/dfu_runtime/src/main.c @@ -53,11 +53,11 @@ * - 0 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_DFU_MODE = 100, - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_DFU_MODE = 100, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -67,19 +67,20 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - } + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -89,13 +90,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -103,20 +104,20 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } // Invoked on DFU_DETACH request to reboot to the bootloader void tud_dfu_runtime_reboot_to_dfu_cb(void) { - blink_interval_ms = BLINK_DFU_MODE; + blink_interval_ms = BLINK_DFU_MODE; } //--------------------------------------------------------------------+ @@ -125,14 +126,13 @@ void tud_dfu_runtime_reboot_to_dfu_cb(void) void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/dfu_runtime/src/tusb_config.h b/Libraries/tinyusb/examples/device/dfu_runtime/src/tusb_config.h index c1d6e4a72cb..fa1ae6ed32a 100644 --- a/Libraries/tinyusb/examples/device/dfu_runtime/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/dfu_runtime/src/tusb_config.h @@ -9,7 +9,7 @@ #define TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -18,12 +18,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -36,18 +36,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -61,7 +61,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -69,7 +69,7 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// @@ -77,7 +77,7 @@ extern "C" { #define CFG_TUD_DFU_RUNTIME 1 #ifdef __cplusplus -} + } #endif #endif /* TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c index 0a42e228aa8..7ac53d255b1 100644 --- a/Libraries/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c @@ -33,74 +33,80 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, -#if CFG_TUD_CDC + #if CFG_TUD_CDC // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, -#else - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, -#endif + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + #else + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + #endif - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_DFU_RT, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_DFU_RT, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_DFU_RT_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_DFU_RT_DESC_LEN) -uint8_t const desc_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, attributes, detach timeout, transfer size */ - TUD_DFU_RT_DESCRIPTOR(ITF_NUM_DFU_RT, 4, 0x0d, 1000, 4096), + // Interface number, string index, attributes, detach timeout, transfer size */ + TUD_DFU_RT_DESCRIPTOR(ITF_NUM_DFU_RT, 4, 0x0d, 1000, 4096), }; + // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -109,64 +115,62 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB DFU runtime", // 4: DFU runtime +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB DFU runtime", // 4: DFU runtime }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/dynamic_configuration/src/main.c b/Libraries/tinyusb/examples/device/dynamic_configuration/src/main.c index cc76c3f455d..b6409c8e1e3 100644 --- a/Libraries/tinyusb/examples/device/dynamic_configuration/src/main.c +++ b/Libraries/tinyusb/examples/device/dynamic_configuration/src/main.c @@ -39,10 +39,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -54,21 +54,22 @@ void midi_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); - - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - cdc_task(); - midi_task(); - } + board_init(); + + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + cdc_task(); + midi_task(); + } } //--------------------------------------------------------------------+ @@ -78,13 +79,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -92,57 +93,61 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } + //--------------------------------------------------------------------+ // USB CDC //--------------------------------------------------------------------+ void cdc_task(void) { - if (tud_cdc_connected()) { - // connected and there are data available - if (tud_cdc_available()) { - uint8_t buf[64]; + if ( tud_cdc_connected() ) + { + // connected and there are data available + if ( tud_cdc_available() ) + { + uint8_t buf[64]; - // read and echo back - uint32_t count = tud_cdc_read(buf, sizeof(buf)); + // read and echo back + uint32_t count = tud_cdc_read(buf, sizeof(buf)); - for (uint32_t i = 0; i < count; i++) { - tud_cdc_write_char(buf[i]); + for(uint32_t i=0; i= sizeof(note_sequence)) - note_pos = 0; + // If we are at the end of the sequence, start over. + if (note_pos >= sizeof(note_sequence)) note_pos = 0; } //--------------------------------------------------------------------+ @@ -206,14 +209,13 @@ void midi_task(void) //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c b/Libraries/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c index 13fd51a2155..10c3ac6fe6d 100644 --- a/Libraries/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c +++ b/Libraries/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c @@ -33,125 +33,121 @@ // CFG_EXAMPLE_MSC_READONLY defined #define README_CONTENTS \ - "This is tinyusb's MassStorage Class demo.\r\n\r\n\ +"This is tinyusb's MassStorage Class demo.\r\n\r\n\ If you find any bugs or get any questions, feel free to file an\r\n\ issue at github.com/hathach/tinyusb" -enum { - DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount - DISK_BLOCK_SIZE = 512 +enum +{ + DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount + DISK_BLOCK_SIZE = 512 }; #ifdef CFG_EXAMPLE_MSC_READONLY const #endif - uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { - //------------- Block0: Boot Sector -------------// - // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; - // sector_per_cluster = 1; reserved_sectors = 1; - // fat_num = 1; fat12_root_entry_num = 16; - // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; - // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; - // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; - // FAT magic code at offset 510-511 - { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, - 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T', 'i', - 'n', 'y', 'U', 'S', 'B', ' ', 'M', 'S', 'C', 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, - 0x20, 0x00, 0x00, - - // Zero up to 2 last bytes of FAT magic code - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x55, 0xAA }, - - //------------- Block1: FAT12 Table -------------// - { - 0xF8, 0xFF, 0xFF, 0xFF, - 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file - }, - - //------------- Block2: Root Directory -------------// - { - // first entry is volume label - 'T', 'i', 'n', 'y', 'U', 'S', 'B', ' ', 'M', 'S', 'C', 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - // second entry is readme file - 'R', 'E', 'A', 'D', 'M', 'E', ' ', ' ', 'T', 'X', 'T', 0x20, 0x00, 0xC6, 0x52, 0x6D, - 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README_CONTENTS) - 1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) - }, - - //------------- Block3: Readme Content -------------// - README_CONTENTS - }; +uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = +{ + //------------- Block0: Boot Sector -------------// + // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; + // sector_per_cluster = 1; reserved_sectors = 1; + // fat_num = 1; fat12_root_entry_num = 16; + // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; + // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; + // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; + // FAT magic code at offset 510-511 + { + 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, + 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , + 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, + + // Zero up to 2 last bytes of FAT magic code + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA + }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file + }, + + //------------- Block2: Root Directory -------------// + { + // first entry is volume label + 'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // second entry is readme file + 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, + 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, + sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block3: Readme Content -------------// + README_CONTENTS +}; // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], - uint8_t product_rev[4]) +void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) { - (void)lun; + (void) lun; - const char vid[] = "TinyUSB"; - const char pid[] = "Mass Storage"; - const char rev[] = "1.0"; + const char vid[] = "TinyUSB"; + const char pid[] = "Mass Storage"; + const char rev[] = "1.0"; - memcpy(vendor_id, vid, strlen(vid)); - memcpy(product_id, pid, strlen(pid)); - memcpy(product_rev, rev, strlen(rev)); + memcpy(vendor_id , vid, strlen(vid)); + memcpy(product_id , pid, strlen(pid)); + memcpy(product_rev, rev, strlen(rev)); } // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted bool tud_msc_test_unit_ready_cb(uint8_t lun) { - (void)lun; + (void) lun; - return true; // RAM disk is always ready + return true; // RAM disk is always ready } // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size) +void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) { - (void)lun; + (void) lun; - *block_count = DISK_BLOCK_NUM; - *block_size = DISK_BLOCK_SIZE; + *block_count = DISK_BLOCK_NUM; + *block_size = DISK_BLOCK_SIZE; } // Invoked when received Start Stop Unit command @@ -159,96 +155,96 @@ void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_siz // - Start = 1 : active mode, if load_eject = 1 : load disk storage bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) { - (void)lun; - (void)power_condition; - - if (load_eject) { - if (start) { - // load disk storage - } else { - // unload disk storage - } + (void) lun; + (void) power_condition; + + if ( load_eject ) + { + if (start) + { + // load disk storage + }else + { + // unload disk storage } + } - return true; + return true; } // Callback invoked when received READ10 command. // Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, - uint32_t bufsize) +int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) { - (void)lun; + (void) lun; - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) - return -1; + // out of ramdisk + if ( lba >= DISK_BLOCK_NUM ) return -1; - uint8_t const *addr = msc_disk[lba] + offset; - memcpy(buffer, addr, bufsize); + uint8_t const* addr = msc_disk[lba] + offset; + memcpy(buffer, addr, bufsize); - return (int32_t)bufsize; + return (int32_t) bufsize; } // Callback invoked when received WRITE10 command. // Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, - uint32_t bufsize) +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) { - (void)lun; + (void) lun; - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) - return -1; + // out of ramdisk + if ( lba >= DISK_BLOCK_NUM ) return -1; #ifndef CFG_EXAMPLE_MSC_READONLY - uint8_t *addr = msc_disk[lba] + offset; - memcpy(addr, buffer, bufsize); + uint8_t* addr = msc_disk[lba] + offset; + memcpy(addr, buffer, bufsize); #else - (void)lba; - (void)offset; - (void)buffer; + (void) lba; (void) offset; (void) buffer; #endif - return (int32_t)bufsize; + return (int32_t) bufsize; } // Callback invoked when received an SCSI command not in built-in list below // - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE // - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) +int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) { - // read10 & write10 has their own callback and MUST not be handled here + // read10 & write10 has their own callback and MUST not be handled here - void const *response = NULL; - int32_t resplen = 0; + void const* response = NULL; + int32_t resplen = 0; - // most scsi handled is input - bool in_xfer = true; + // most scsi handled is input + bool in_xfer = true; - switch (scsi_cmd[0]) { + switch (scsi_cmd[0]) + { default: - // Set Sense = Invalid Command Operation - tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - - // negative means error -> tinyusb could stall and/or response with failed status - resplen = -1; - break; - } - - // return resplen must not larger than bufsize - if (resplen > bufsize) - resplen = bufsize; - - if (response && (resplen > 0)) { - if (in_xfer) { - memcpy(buffer, response, (size_t)resplen); - } else { - // SCSI output - } + // Set Sense = Invalid Command Operation + tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + + // negative means error -> tinyusb could stall and/or response with failed status + resplen = -1; + break; + } + + // return resplen must not larger than bufsize + if ( resplen > bufsize ) resplen = bufsize; + + if ( response && (resplen > 0) ) + { + if(in_xfer) + { + memcpy(buffer, response, (size_t) resplen); + }else + { + // SCSI output } + } - return resplen; + return resplen; } #endif diff --git a/Libraries/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h b/Libraries/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h index 3b954527b6e..b9b3878cc21 100644 --- a/Libraries/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,29 +87,29 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 1 -#define CFG_TUD_MIDI 1 -#define CFG_TUD_HID 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 1 +#define CFG_TUD_MIDI 1 +#define CFG_TUD_HID 0 +#define CFG_TUD_VENDOR 0 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // MIDI FIFO size of TX and RX -#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE 512 +#define CFG_TUD_MSC_EP_BUFSIZE 512 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c index dd94ab4fce2..20f2371559d 100644 --- a/Libraries/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c @@ -32,10 +32,9 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) // Configuration mode // 0 : enumerated as CDC/MIDI. Board button is not pressed when enumerating @@ -45,168 +44,176 @@ static uint32_t mode = 0; //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device_0 = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device_0 = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; -tusb_desc_device_t const desc_device_1 = { .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0, - .bDeviceSubClass = 0, - .bDeviceProtocol = 0, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = - USB_PID + 11, // should be different PID than desc0 - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, +tusb_desc_device_t const desc_device_1 = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0, + .bDeviceSubClass = 0, + .bDeviceProtocol = 0, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .idVendor = 0xCafe, + .idProduct = USB_PID + 11, // should be different PID than desc0 + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, - .bNumConfigurations = 0x01 }; + .bNumConfigurations = 0x01 +}; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - mode = board_button_read(); - return (uint8_t const *)(mode ? &desc_device_1 : &desc_device_0); + mode = board_button_read(); + return (uint8_t const*) (mode ? &desc_device_1 : &desc_device_0); } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { - ITF_0_NUM_CDC = 0, - ITF_0_NUM_CDC_DATA, - ITF_0_NUM_MIDI, - ITF_0_NUM_MIDI_STREAMING, - ITF_0_NUM_TOTAL +enum +{ + ITF_0_NUM_CDC = 0, + ITF_0_NUM_CDC_DATA, + ITF_0_NUM_MIDI, + ITF_0_NUM_MIDI_STREAMING, + ITF_0_NUM_TOTAL }; -enum { ITF_1_NUM_MSC = 0, ITF_1_NUM_TOTAL }; +enum +{ + ITF_1_NUM_MSC = 0, + ITF_1_NUM_TOTAL +}; -#define CONFIG_0_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MIDI_DESC_LEN) -#define CONFIG_1_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) +#define CONFIG_0_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MIDI_DESC_LEN) +#define CONFIG_1_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -#define EPNUM_0_CDC_NOTIF 0x81 -#define EPNUM_0_CDC_OUT 0x02 -#define EPNUM_0_CDC_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... + #define EPNUM_0_CDC_NOTIF 0x81 + #define EPNUM_0_CDC_OUT 0x02 + #define EPNUM_0_CDC_IN 0x82 -#define EPNUM_0_MIDI_OUT 0x05 -#define EPNUM_0_MIDI_IN 0x85 + #define EPNUM_0_MIDI_OUT 0x05 + #define EPNUM_0_MIDI_IN 0x85 -#define EPNUM_1_MSC_OUT 0x02 -#define EPNUM_1_MSC_IN 0x82 + #define EPNUM_1_MSC_OUT 0x02 + #define EPNUM_1_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_SAMG -// SAMG doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_0_CDC_NOTIF 0x81 -#define EPNUM_0_CDC_OUT 0x02 -#define EPNUM_0_CDC_IN 0x83 + // SAMG doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_0_CDC_NOTIF 0x81 + #define EPNUM_0_CDC_OUT 0x02 + #define EPNUM_0_CDC_IN 0x83 -#define EPNUM_0_MIDI_OUT 0x04 -#define EPNUM_0_MIDI_IN 0x85 + #define EPNUM_0_MIDI_OUT 0x04 + #define EPNUM_0_MIDI_IN 0x85 -#define EPNUM_1_MSC_OUT 0x01 -#define EPNUM_1_MSC_IN 0x82 + #define EPNUM_1_MSC_OUT 0x01 + #define EPNUM_1_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X -// FT9XX doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_0_CDC_NOTIF 0x81 -#define EPNUM_0_CDC_OUT 0x02 -#define EPNUM_0_CDC_IN 0x83 + // FT9XX doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_0_CDC_NOTIF 0x81 + #define EPNUM_0_CDC_OUT 0x02 + #define EPNUM_0_CDC_IN 0x83 -#define EPNUM_0_MIDI_OUT 0x04 -#define EPNUM_0_MIDI_IN 0x85 + #define EPNUM_0_MIDI_OUT 0x04 + #define EPNUM_0_MIDI_IN 0x85 -#define EPNUM_1_MSC_OUT 0x01 -#define EPNUM_1_MSC_IN 0x82 + #define EPNUM_1_MSC_OUT 0x01 + #define EPNUM_1_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// FT9XX doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_0_CDC_NOTIF 0x81 -#define EPNUM_0_CDC_OUT 0x02 -#define EPNUM_0_CDC_IN 0x83 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // FT9XX doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_0_CDC_NOTIF 0x81 + #define EPNUM_0_CDC_OUT 0x02 + #define EPNUM_0_CDC_IN 0x83 -#define EPNUM_0_MIDI_OUT 0x04 -#define EPNUM_0_MIDI_IN 0x85 + #define EPNUM_0_MIDI_OUT 0x04 + #define EPNUM_0_MIDI_IN 0x85 -#define EPNUM_1_MSC_OUT 0x01 -#define EPNUM_1_MSC_IN 0x82 + #define EPNUM_1_MSC_OUT 0x01 + #define EPNUM_1_MSC_IN 0x82 #else -#define EPNUM_0_CDC_NOTIF 0x81 -#define EPNUM_0_CDC_OUT 0x02 -#define EPNUM_0_CDC_IN 0x82 + #define EPNUM_0_CDC_NOTIF 0x81 + #define EPNUM_0_CDC_OUT 0x02 + #define EPNUM_0_CDC_IN 0x82 -#define EPNUM_0_MIDI_OUT 0x03 -#define EPNUM_0_MIDI_IN 0x83 + #define EPNUM_0_MIDI_OUT 0x03 + #define EPNUM_0_MIDI_IN 0x83 -#define EPNUM_1_MSC_OUT 0x01 -#define EPNUM_1_MSC_IN 0x81 + #define EPNUM_1_MSC_OUT 0x01 + #define EPNUM_1_MSC_IN 0x81 #endif -uint8_t const desc_configuration_0[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_0_NUM_TOTAL, 0, CONFIG_0_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration_0[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_0_NUM_TOTAL, 0, CONFIG_0_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_0_NUM_CDC, 0, EPNUM_0_CDC_NOTIF, 8, EPNUM_0_CDC_OUT, EPNUM_0_CDC_IN, - TUD_OPT_HIGH_SPEED ? 512 : 64), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_0_NUM_CDC, 0, EPNUM_0_CDC_NOTIF, 8, EPNUM_0_CDC_OUT, EPNUM_0_CDC_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MIDI_DESCRIPTOR(ITF_0_NUM_MIDI, 0, EPNUM_0_MIDI_OUT, EPNUM_0_MIDI_IN, - TUD_OPT_HIGH_SPEED ? 512 : 64), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_0_NUM_MIDI, 0, EPNUM_0_MIDI_OUT, EPNUM_0_MIDI_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), }; -uint8_t const desc_configuration_1[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_1_NUM_TOTAL, 0, CONFIG_1_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_1_NUM_MSC, 0, EPNUM_1_MSC_OUT, EPNUM_1_MSC_IN, - TUD_OPT_HIGH_SPEED ? 512 : 64), +uint8_t const desc_configuration_1[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_1_NUM_TOTAL, 0, CONFIG_1_TOTAL_LEN, 0x00, 100), + + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_1_NUM_MSC, 0, EPNUM_1_MSC_OUT, EPNUM_1_MSC_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), }; + // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return mode ? desc_configuration_1 : desc_configuration_0; + (void) index; // for multiple configurations + return mode ? desc_configuration_1 : desc_configuration_0; } //--------------------------------------------------------------------+ @@ -215,63 +222,61 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_boot_interface/src/main.c b/Libraries/tinyusb/examples/device/hid_boot_interface/src/main.c index 82a9950e79f..7ad5c53c21b 100644 --- a/Libraries/tinyusb/examples/device/hid_boot_interface/src/main.c +++ b/Libraries/tinyusb/examples/device/hid_boot_interface/src/main.c @@ -40,10 +40,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -54,23 +54,24 @@ void hid_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); - hid_task(); - } + hid_task(); + } - return 0; + return 0; } //--------------------------------------------------------------------+ @@ -80,13 +81,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -94,14 +95,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -112,126 +113,132 @@ void tud_resume_cb(void) // tud_hid_report_complete_cb() is used to send the next report after previous one is complete void hid_task(void) { - // Poll every 10ms - const uint32_t interval_ms = 10; - static uint32_t start_ms = 0; - - if (board_millis() - start_ms < interval_ms) - return; // not enough time - start_ms += interval_ms; - - uint32_t const btn = board_button_read(); - - if (tud_suspended() && btn) { - // Wake up host if we are in suspend mode - // and REMOTE_WAKEUP feature is enabled by host - tud_remote_wakeup(); - } else { - // keyboard interface - if (tud_hid_n_ready(ITF_NUM_KEYBOARD)) { - // used to avoid send multiple consecutive zero report for keyboard - static bool has_keyboard_key = false; - - uint8_t const report_id = 0; - uint8_t const modifier = 0; - - if (btn) { - uint8_t keycode[6] = { 0 }; - keycode[0] = HID_KEY_ARROW_RIGHT; - - tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, keycode); - has_keyboard_key = true; - } else { - // send empty key report if previously has key pressed - if (has_keyboard_key) - tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, NULL); - has_keyboard_key = false; - } - } - - // mouse interface - if (tud_hid_n_ready(ITF_NUM_MOUSE)) { - if (btn) { - uint8_t const report_id = 0; - uint8_t const button_mask = 0; - uint8_t const vertical = 0; - uint8_t const horizontal = 0; - int8_t const delta = 5; - - tud_hid_n_mouse_report(ITF_NUM_MOUSE, report_id, button_mask, delta, delta, - vertical, horizontal); - } - } + // Poll every 10ms + const uint32_t interval_ms = 10; + static uint32_t start_ms = 0; + + if ( board_millis() - start_ms < interval_ms) return; // not enough time + start_ms += interval_ms; + + uint32_t const btn = board_button_read(); + + if ( tud_suspended() && btn ) + { + // Wake up host if we are in suspend mode + // and REMOTE_WAKEUP feature is enabled by host + tud_remote_wakeup(); + } + else + { + // keyboard interface + if ( tud_hid_n_ready(ITF_NUM_KEYBOARD) ) + { + // used to avoid send multiple consecutive zero report for keyboard + static bool has_keyboard_key = false; + + uint8_t const report_id = 0; + uint8_t const modifier = 0; + + if ( btn ) + { + uint8_t keycode[6] = { 0 }; + keycode[0] = HID_KEY_ARROW_RIGHT; + + tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, keycode); + has_keyboard_key = true; + }else + { + // send empty key report if previously has key pressed + if (has_keyboard_key) tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, NULL); + has_keyboard_key = false; + } } + + // mouse interface + if ( tud_hid_n_ready(ITF_NUM_MOUSE) ) + { + if ( btn ) + { + uint8_t const report_id = 0; + uint8_t const button_mask = 0; + uint8_t const vertical = 0; + uint8_t const horizontal = 0; + int8_t const delta = 5; + + tud_hid_n_mouse_report(ITF_NUM_MOUSE, report_id, button_mask, delta, delta, vertical, horizontal); + } + } + } } // Invoked when received SET_PROTOCOL request // protocol is either HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol) { - (void)instance; - (void)protocol; + (void) instance; + (void) protocol; - // nothing to do since we use the same compatible boot report for both Boot and Report mode. - // TODO set a indicator for user + // nothing to do since we use the same compatible boot report for both Boot and Report mode. + // TODO set a indicator for user } // Invoked when sent REPORT successfully to host // Application can use this to send the next report // Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len) +void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len) { - (void)instance; - (void)report; - (void)len; + (void) instance; + (void) report; + (void) len; - // nothing to do + // nothing to do } // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, - uint8_t *buffer, uint16_t reqlen) +uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) { - // TODO not Implemented - (void)instance; - (void)report_id; - (void)report_type; - (void)buffer; - (void)reqlen; - - return 0; + // TODO not Implemented + (void) instance; + (void) report_id; + (void) report_type; + (void) buffer; + (void) reqlen; + + return 0; } // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, - uint8_t const *buffer, uint16_t bufsize) +void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { - (void)report_id; - - // keyboard interface - if (instance == ITF_NUM_KEYBOARD) { - // Set keyboard LED e.g Capslock, Numlock etc... - if (report_type == HID_REPORT_TYPE_OUTPUT) { - // bufsize should be (at least) 1 - if (bufsize < 1) - return; - - uint8_t const kbd_leds = buffer[0]; - - if (kbd_leds & KEYBOARD_LED_CAPSLOCK) { - // Capslock On: disable blink, turn led on - blink_interval_ms = 0; - board_led_write(true); - } else { - // Caplocks Off: back to normal blink - board_led_write(false); - blink_interval_ms = BLINK_MOUNTED; - } - } + (void) report_id; + + // keyboard interface + if (instance == ITF_NUM_KEYBOARD) + { + // Set keyboard LED e.g Capslock, Numlock etc... + if (report_type == HID_REPORT_TYPE_OUTPUT) + { + // bufsize should be (at least) 1 + if ( bufsize < 1 ) return; + + uint8_t const kbd_leds = buffer[0]; + + if (kbd_leds & KEYBOARD_LED_CAPSLOCK) + { + // Capslock On: disable blink, turn led on + blink_interval_ms = 0; + board_led_write(true); + }else + { + // Caplocks Off: back to normal blink + board_led_write(false); + blink_interval_ms = BLINK_MOUNTED; + } } + } } //--------------------------------------------------------------------+ @@ -239,18 +246,16 @@ void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_ //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // blink is disabled - if (!blink_interval_ms) - return; + // blink is disabled + if (!blink_interval_ms) return; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h b/Libraries/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h index 16c95e46a5c..52723e09f3c 100644 --- a/Libraries/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_HID 2 // 1 for boot keyboard, 1 for boot mouse -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_HID 2 // 1 for boot keyboard, 1 for boot mouse +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE 8 +#define CFG_TUD_HID_EP_BUFSIZE 8 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c index dac94f69eb9..d68ef16d93c 100644 --- a/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c @@ -33,94 +33,98 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 }; +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 +}; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ -uint8_t const desc_hid_keyboard_report[] = { TUD_HID_REPORT_DESC_KEYBOARD() }; +uint8_t const desc_hid_keyboard_report[] = +{ + TUD_HID_REPORT_DESC_KEYBOARD() +}; -uint8_t const desc_hid_mouse_report[] = { TUD_HID_REPORT_DESC_MOUSE() }; +uint8_t const desc_hid_mouse_report[] = +{ + TUD_HID_REPORT_DESC_MOUSE() +}; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance) +uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) { - return (instance == 0) ? desc_hid_keyboard_report : desc_hid_mouse_report; + return (instance == 0) ? desc_hid_keyboard_report : desc_hid_mouse_report; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + 2 * TUD_HID_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + 2*TUD_HID_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 1 Interrupt, 2 Bulk, 3 Iso, 4 Interrupt, 5 Bulk etc ... -#define EPNUM_KEYBOARD 0x81 -#define EPNUM_MOUSE 0x84 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 1 Interrupt, 2 Bulk, 3 Iso, 4 Interrupt, 5 Bulk etc ... + #define EPNUM_KEYBOARD 0x81 + #define EPNUM_MOUSE 0x84 #else -#define EPNUM_KEYBOARD 0x81 -#define EPNUM_MOUSE 0x82 + #define EPNUM_KEYBOARD 0x81 + #define EPNUM_MOUSE 0x82 #endif -uint8_t const desc_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, - 100), +uint8_t const desc_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval - TUD_HID_DESCRIPTOR(ITF_NUM_KEYBOARD, 0, HID_ITF_PROTOCOL_KEYBOARD, - sizeof(desc_hid_keyboard_report), EPNUM_KEYBOARD, CFG_TUD_HID_EP_BUFSIZE, - 10), + // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval + TUD_HID_DESCRIPTOR(ITF_NUM_KEYBOARD, 0, HID_ITF_PROTOCOL_KEYBOARD, sizeof(desc_hid_keyboard_report), EPNUM_KEYBOARD, CFG_TUD_HID_EP_BUFSIZE, 10), - // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval - TUD_HID_DESCRIPTOR(ITF_NUM_MOUSE, 0, HID_ITF_PROTOCOL_MOUSE, sizeof(desc_hid_mouse_report), - EPNUM_MOUSE, CFG_TUD_HID_EP_BUFSIZE, 10) + // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval + TUD_HID_DESCRIPTOR(ITF_NUM_MOUSE, 0, HID_ITF_PROTOCOL_MOUSE, sizeof(desc_hid_mouse_report), EPNUM_MOUSE, CFG_TUD_HID_EP_BUFSIZE, 10) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -129,63 +133,61 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h index 88e6f383b23..6fee9e223ca 100644 --- a/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h @@ -25,6 +25,11 @@ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ -enum { ITF_NUM_KEYBOARD, ITF_NUM_MOUSE, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_KEYBOARD, + ITF_NUM_MOUSE, + ITF_NUM_TOTAL +}; #endif diff --git a/Libraries/tinyusb/examples/device/hid_composite/src/main.c b/Libraries/tinyusb/examples/device/hid_composite/src/main.c index 9c06fc0af05..dcf13079f33 100644 --- a/Libraries/tinyusb/examples/device/hid_composite/src/main.c +++ b/Libraries/tinyusb/examples/device/hid_composite/src/main.c @@ -41,10 +41,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -55,21 +55,22 @@ void hid_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); - hid_task(); - } + hid_task(); + } } //--------------------------------------------------------------------+ @@ -79,13 +80,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -93,14 +94,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -109,165 +110,180 @@ void tud_resume_cb(void) static void send_hid_report(uint8_t report_id, uint32_t btn) { - // skip if hid is not ready yet - if (!tud_hid_ready()) - return; - - switch (report_id) { - case REPORT_ID_KEYBOARD: { - // use to avoid send multiple consecutive zero report for keyboard - static bool has_keyboard_key = false; - - if (btn) { - uint8_t keycode[6] = { 0 }; - keycode[0] = HID_KEY_A; - - tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode); - has_keyboard_key = true; - } else { - // send empty key report if previously has key pressed - if (has_keyboard_key) - tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); - has_keyboard_key = false; - } - } break; - - case REPORT_ID_MOUSE: { - int8_t const delta = 5; - - // no button, right + down, no scroll, no pan - tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); - } break; - - case REPORT_ID_CONSUMER_CONTROL: { - // use to avoid send multiple consecutive zero report - static bool has_consumer_key = false; - - if (btn) { - // volume down - uint16_t volume_down = HID_USAGE_CONSUMER_VOLUME_DECREMENT; - tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &volume_down, 2); - has_consumer_key = true; - } else { - // send empty key report (release key) if previously has key pressed - uint16_t empty_key = 0; - if (has_consumer_key) - tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &empty_key, 2); - has_consumer_key = false; - } - } break; - - case REPORT_ID_GAMEPAD: { - // use to avoid send multiple consecutive zero report for keyboard - static bool has_gamepad_key = false; - - hid_gamepad_report_t report = { - .x = 0, .y = 0, .z = 0, .rz = 0, .rx = 0, .ry = 0, .hat = 0, .buttons = 0 - }; - - if (btn) { - report.hat = GAMEPAD_HAT_UP; - report.buttons = GAMEPAD_BUTTON_A; - tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); - - has_gamepad_key = true; - } else { - report.hat = GAMEPAD_HAT_CENTERED; - report.buttons = 0; - if (has_gamepad_key) - tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); - has_gamepad_key = false; - } - } break; - - default: - break; + // skip if hid is not ready yet + if ( !tud_hid_ready() ) return; + + switch(report_id) + { + case REPORT_ID_KEYBOARD: + { + // use to avoid send multiple consecutive zero report for keyboard + static bool has_keyboard_key = false; + + if ( btn ) + { + uint8_t keycode[6] = { 0 }; + keycode[0] = HID_KEY_A; + + tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode); + has_keyboard_key = true; + }else + { + // send empty key report if previously has key pressed + if (has_keyboard_key) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); + has_keyboard_key = false; + } + } + break; + + case REPORT_ID_MOUSE: + { + int8_t const delta = 5; + + // no button, right + down, no scroll, no pan + tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); } + break; + + case REPORT_ID_CONSUMER_CONTROL: + { + // use to avoid send multiple consecutive zero report + static bool has_consumer_key = false; + + if ( btn ) + { + // volume down + uint16_t volume_down = HID_USAGE_CONSUMER_VOLUME_DECREMENT; + tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &volume_down, 2); + has_consumer_key = true; + }else + { + // send empty key report (release key) if previously has key pressed + uint16_t empty_key = 0; + if (has_consumer_key) tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &empty_key, 2); + has_consumer_key = false; + } + } + break; + + case REPORT_ID_GAMEPAD: + { + // use to avoid send multiple consecutive zero report for keyboard + static bool has_gamepad_key = false; + + hid_gamepad_report_t report = + { + .x = 0, .y = 0, .z = 0, .rz = 0, .rx = 0, .ry = 0, + .hat = 0, .buttons = 0 + }; + + if ( btn ) + { + report.hat = GAMEPAD_HAT_UP; + report.buttons = GAMEPAD_BUTTON_A; + tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); + + has_gamepad_key = true; + }else + { + report.hat = GAMEPAD_HAT_CENTERED; + report.buttons = 0; + if (has_gamepad_key) tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); + has_gamepad_key = false; + } + } + break; + + default: break; + } } // Every 10ms, we will sent 1 report for each HID profile (keyboard, mouse etc ..) // tud_hid_report_complete_cb() is used to send the next report after previous one is complete void hid_task(void) { - // Poll every 10ms - const uint32_t interval_ms = 10; - static uint32_t start_ms = 0; - - if (board_millis() - start_ms < interval_ms) - return; // not enough time - start_ms += interval_ms; - - uint32_t const btn = board_button_read(); - - // Remote wakeup - if (tud_suspended() && btn) { - // Wake up host if we are in suspend mode - // and REMOTE_WAKEUP feature is enabled by host - tud_remote_wakeup(); - } else { - // Send the 1st of report chain, the rest will be sent by tud_hid_report_complete_cb() - send_hid_report(REPORT_ID_KEYBOARD, btn); - } + // Poll every 10ms + const uint32_t interval_ms = 10; + static uint32_t start_ms = 0; + + if ( board_millis() - start_ms < interval_ms) return; // not enough time + start_ms += interval_ms; + + uint32_t const btn = board_button_read(); + + // Remote wakeup + if ( tud_suspended() && btn ) + { + // Wake up host if we are in suspend mode + // and REMOTE_WAKEUP feature is enabled by host + tud_remote_wakeup(); + }else + { + // Send the 1st of report chain, the rest will be sent by tud_hid_report_complete_cb() + send_hid_report(REPORT_ID_KEYBOARD, btn); + } } // Invoked when sent REPORT successfully to host // Application can use this to send the next report // Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len) +void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len) { - (void)instance; - (void)len; + (void) instance; + (void) len; - uint8_t next_report_id = report[0] + 1u; + uint8_t next_report_id = report[0] + 1u; - if (next_report_id < REPORT_ID_COUNT) { - send_hid_report(next_report_id, board_button_read()); - } + if (next_report_id < REPORT_ID_COUNT) + { + send_hid_report(next_report_id, board_button_read()); + } } // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, - uint8_t *buffer, uint16_t reqlen) +uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) { - // TODO not Implemented - (void)instance; - (void)report_id; - (void)report_type; - (void)buffer; - (void)reqlen; - - return 0; + // TODO not Implemented + (void) instance; + (void) report_id; + (void) report_type; + (void) buffer; + (void) reqlen; + + return 0; } // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, - uint8_t const *buffer, uint16_t bufsize) +void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { - (void)instance; - - if (report_type == HID_REPORT_TYPE_OUTPUT) { - // Set keyboard LED e.g Capslock, Numlock etc... - if (report_id == REPORT_ID_KEYBOARD) { - // bufsize should be (at least) 1 - if (bufsize < 1) - return; - - uint8_t const kbd_leds = buffer[0]; - - if (kbd_leds & KEYBOARD_LED_CAPSLOCK) { - // Capslock On: disable blink, turn led on - blink_interval_ms = 0; - board_led_write(true); - } else { - // Caplocks Off: back to normal blink - board_led_write(false); - blink_interval_ms = BLINK_MOUNTED; - } - } + (void) instance; + + if (report_type == HID_REPORT_TYPE_OUTPUT) + { + // Set keyboard LED e.g Capslock, Numlock etc... + if (report_id == REPORT_ID_KEYBOARD) + { + // bufsize should be (at least) 1 + if ( bufsize < 1 ) return; + + uint8_t const kbd_leds = buffer[0]; + + if (kbd_leds & KEYBOARD_LED_CAPSLOCK) + { + // Capslock On: disable blink, turn led on + blink_interval_ms = 0; + board_led_write(true); + }else + { + // Caplocks Off: back to normal blink + board_led_write(false); + blink_interval_ms = BLINK_MOUNTED; + } } + } } //--------------------------------------------------------------------+ @@ -275,18 +291,16 @@ void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_ //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // blink is disabled - if (!blink_interval_ms) - return; + // blink is disabled + if (!blink_interval_ms) return; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/hid_composite/src/tusb_config.h b/Libraries/tinyusb/examples/device/hid_composite/src/tusb_config.h index f22982a91b4..6bd32c427dc 100644 --- a/Libraries/tinyusb/examples/device/hid_composite/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/hid_composite/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_HID 1 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_HID 1 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE 16 +#define CFG_TUD_HID_EP_BUFSIZE 16 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.c index 83793abd40e..e174db46d4e 100644 --- a/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.c @@ -33,79 +33,86 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 }; +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 +}; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ -uint8_t const desc_hid_report[] = { TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(REPORT_ID_KEYBOARD)), - TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE)), - TUD_HID_REPORT_DESC_CONSUMER( - HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL)), - TUD_HID_REPORT_DESC_GAMEPAD(HID_REPORT_ID(REPORT_ID_GAMEPAD)) }; +uint8_t const desc_hid_report[] = +{ + TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(REPORT_ID_KEYBOARD )), + TUD_HID_REPORT_DESC_MOUSE ( HID_REPORT_ID(REPORT_ID_MOUSE )), + TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL )), + TUD_HID_REPORT_DESC_GAMEPAD ( HID_REPORT_ID(REPORT_ID_GAMEPAD )) +}; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance) +uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) { - (void)instance; - return desc_hid_report; + (void) instance; + return desc_hid_report; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_HID, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_HID, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN) -#define EPNUM_HID 0x81 +#define EPNUM_HID 0x81 -uint8_t const desc_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, - 100), +uint8_t const desc_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval - TUD_HID_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, - CFG_TUD_HID_EP_BUFSIZE, 5) + // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval + TUD_HID_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 5) }; #if TUD_OPT_HIGH_SPEED @@ -115,42 +122,43 @@ uint8_t const desc_configuration[] = { uint8_t desc_other_speed_config[CONFIG_TOTAL_LEN]; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed -tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_qualifier_t), - .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, - .bcdUSB = USB_BCD, - - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .bNumConfigurations = 0x01, - .bReserved = 0x00 +tusb_desc_device_qualifier_t const desc_device_qualifier = +{ + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = USB_BCD, + + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 0x01, + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void) +uint8_t const* tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const *)&desc_device_qualifier; + return (uint8_t const*) &desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) +uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations - // other speed config is basically configuration with type = OHER_SPEED_CONFIG - memcpy(desc_other_speed_config, desc_configuration, CONFIG_TOTAL_LEN); - desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; + // other speed config is basically configuration with type = OHER_SPEED_CONFIG + memcpy(desc_other_speed_config, desc_configuration, CONFIG_TOTAL_LEN); + desc_other_speed_config[1] = TUSB_DESC_OTHER_SPEED_CONFIG; - // this example use the same configuration for both high and full speed mode - return desc_other_speed_config; + // this example use the same configuration for both high and full speed mode + return desc_other_speed_config; } #endif // highspeed @@ -158,12 +166,12 @@ uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations - // This example use the same configuration for both high and full speed mode - return desc_configuration; + // This example use the same configuration for both high and full speed mode + return desc_configuration; } //--------------------------------------------------------------------+ @@ -172,63 +180,61 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.h index d27bbd72f85..e733d31dde9 100644 --- a/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/hid_composite/src/usb_descriptors.h @@ -25,12 +25,13 @@ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ -enum { - REPORT_ID_KEYBOARD = 1, - REPORT_ID_MOUSE, - REPORT_ID_CONSUMER_CONTROL, - REPORT_ID_GAMEPAD, - REPORT_ID_COUNT +enum +{ + REPORT_ID_KEYBOARD = 1, + REPORT_ID_MOUSE, + REPORT_ID_CONSUMER_CONTROL, + REPORT_ID_GAMEPAD, + REPORT_ID_COUNT }; #endif /* USB_DESCRIPTORS_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h b/Libraries/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h index ccd96107b31..869500ad2ad 100644 --- a/Libraries/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h +++ b/Libraries/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig/FreeRTOSConfig.h @@ -26,6 +26,7 @@ * 1 tab == 4 spaces! */ + #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H @@ -48,145 +49,142 @@ #include "bsp/board_mcu.h" #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -#error "ESP32-Sx should use IDF's FreeRTOSConfig.h" + #error "ESP32-Sx should use IDF's FreeRTOSConfig.h" #endif // TODO fix later #if CFG_TUSB_MCU == OPT_MCU_MM32F327X -extern u32 SystemCoreClock; + extern u32 SystemCoreClock; #else -// FIXME cause redundant-decls warnings -extern uint32_t SystemCoreClock; + // FIXME cause redundant-decls warnings + extern uint32_t SystemCoreClock; #endif #endif /* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU 0 -#define configENABLE_FPU 1 -#define configENABLE_TRUSTZONE 0 -#define configMINIMAL_SECURE_STACK_SIZE (1024) -#define configRUN_FREERTOS_SECURE_ONLY 1 +#define configENABLE_MPU 0 +#define configENABLE_FPU 1 +#define configENABLE_TRUSTZONE 0 +#define configMINIMAL_SECURE_STACK_SIZE ( 1024 ) +#define configRUN_FREERTOS_SECURE_ONLY 1 -#define configUSE_PREEMPTION 1 +#define configUSE_PREEMPTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ SystemCoreClock -#define configTICK_RATE_HZ (1000) -#define configMAX_PRIORITIES (5) -#define configMINIMAL_STACK_SIZE (128) -#define configTOTAL_HEAP_SIZE (configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024) -#define configMAX_TASK_NAME_LEN 16 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configQUEUE_REGISTRY_SIZE 4 -#define configUSE_QUEUE_SETS 0 -#define configUSE_TIME_SLICING 0 -#define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 - -#define configSUPPORT_STATIC_ALLOCATION 1 -#define configSUPPORT_DYNAMIC_ALLOCATION 0 +#define configCPU_CLOCK_HZ SystemCoreClock +#define configTICK_RATE_HZ ( 1000 ) +#define configMAX_PRIORITIES ( 5 ) +#define configMINIMAL_STACK_SIZE ( 128 ) +#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 ) +#define configMAX_TASK_NAME_LEN 16 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configQUEUE_REGISTRY_SIZE 4 +#define configUSE_QUEUE_SETS 0 +#define configUSE_TIME_SLICING 0 +#define configUSE_NEWLIB_REENTRANT 0 +#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0 + +#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 0 /* Hook function related definitions. */ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configCHECK_HANDLER_INSTALLATION 0 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configCHECK_HANDLER_INSTALLATION 0 /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS 0 -#define configUSE_TRACE_FACILITY 1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#define configGENERATE_RUN_TIME_STATS 0 +#define configUSE_TRACE_FACILITY 1 // legacy trace +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES 2 +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 /* Software timer related definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 2) -#define configTIMER_QUEUE_LENGTH 32 -#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2) +#define configTIMER_QUEUE_LENGTH 32 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE /* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet 0 -#define INCLUDE_uxTaskPriorityGet 0 -#define INCLUDE_vTaskDelete 0 -#define INCLUDE_vTaskSuspend \ - 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR 0 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 -#define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 -#define INCLUDE_xTaskGetIdleTaskHandle 0 +#define INCLUDE_vTaskPrioritySet 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY +#define INCLUDE_xResumeFromISR 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetSchedulerState 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName 0 -#define INCLUDE_eTaskGetState 0 -#define INCLUDE_xEventGroupSetBitFromISR 0 -#define INCLUDE_xTimerPendFunctionCall 0 +#define INCLUDE_pcTaskGetTaskName 0 +#define INCLUDE_eTaskGetState 0 +#define INCLUDE_xEventGroupSetBitFromISR 0 +#define INCLUDE_xTimerPendFunctionCall 0 #ifdef __RX__ /* Renesas RX series */ -#define vSoftwareInterruptISR INT_Excep_ICU_SWINT -#define vTickISR INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ / 2) -#define configKERNEL_INTERRUPT_PRIORITY 1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 +#define vSoftwareInterruptISR INT_Excep_ICU_SWINT +#define vTickISR INT_Excep_CMT0_CMI0 +#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2) +#define configKERNEL_INTERRUPT_PRIORITY 1 +#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4 #else /* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler PendSV_Handler -#define xPortSysTickHandler SysTick_Handler -#define vPortSVCHandler SVC_Handler +#define xPortPendSVHandler PendSV_Handler +#define xPortSysTickHandler SysTick_Handler +#define vPortSVCHandler SVC_Handler //--------------------------------------------------------------------+ // Interrupt nesting behavior configuration. //--------------------------------------------------------------------+ #if defined(__NVIC_PRIO_BITS) -// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h -#define configPRIO_BITS __NVIC_PRIO_BITS + // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h + #define configPRIO_BITS __NVIC_PRIO_BITS #elif defined(__ECLIC_INTCTLBITS) -// RISC-V Bumblebee core from nuclei -#define configPRIO_BITS __ECLIC_INTCTLBITS + // RISC-V Bumblebee core from nuclei + #define configPRIO_BITS __ECLIC_INTCTLBITS #elif defined(__IASMARM__) -// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. -// Therefore we will hard coded it to minimum value of 2 to get pass ci build. -// IAR user must update this to correct value of the target MCU -#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" -#define configPRIO_BITS 2 + // FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS. + // Therefore we will hard coded it to minimum value of 2 to get pass ci build. + // IAR user must update this to correct value of the target MCU + #message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU" + #define configPRIO_BITS 2 #else -#error "FreeRTOS configPRIO_BITS to be defined" + #error "FreeRTOS configPRIO_BITS to be defined" #endif /* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1 << configPRIO_BITS) - 1) +#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1< max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h index d27bbd72f85..e733d31dde9 100644 --- a/Libraries/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h @@ -25,12 +25,13 @@ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ -enum { - REPORT_ID_KEYBOARD = 1, - REPORT_ID_MOUSE, - REPORT_ID_CONSUMER_CONTROL, - REPORT_ID_GAMEPAD, - REPORT_ID_COUNT +enum +{ + REPORT_ID_KEYBOARD = 1, + REPORT_ID_MOUSE, + REPORT_ID_CONSUMER_CONTROL, + REPORT_ID_GAMEPAD, + REPORT_ID_COUNT }; #endif /* USB_DESCRIPTORS_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_generic_inout/src/main.c b/Libraries/tinyusb/examples/device/hid_generic_inout/src/main.c index 6a62a26408d..cfa9f628312 100644 --- a/Libraries/tinyusb/examples/device/hid_generic_inout/src/main.c +++ b/Libraries/tinyusb/examples/device/hid_generic_inout/src/main.c @@ -65,10 +65,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -78,19 +78,20 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - } + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -100,13 +101,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -114,14 +115,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -131,31 +132,29 @@ void tud_resume_cb(void) // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, - uint8_t *buffer, uint16_t reqlen) +uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) { - // TODO not Implemented - (void)itf; - (void)report_id; - (void)report_type; - (void)buffer; - (void)reqlen; - - return 0; + // TODO not Implemented + (void) itf; + (void) report_id; + (void) report_type; + (void) buffer; + (void) reqlen; + + return 0; } // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, - uint8_t const *buffer, uint16_t bufsize) +void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { - // This example doesn't use multiple report and report ID - (void)itf; - (void)report_id; - (void)report_type; + // This example doesn't use multiple report and report ID + (void) itf; + (void) report_id; + (void) report_type; - // echo back anything we received from host - tud_hid_report(0, buffer, bufsize); + // echo back anything we received from host + tud_hid_report(0, buffer, bufsize); } //--------------------------------------------------------------------+ @@ -163,14 +162,13 @@ void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t rep //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h b/Libraries/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h index 41101b8aacb..98143ac4d90 100644 --- a/Libraries/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 1 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 1 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE 64 +#define CFG_TUD_HID_EP_BUFSIZE 64 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c index 4e972ab7b99..64f6d17aeb1 100644 --- a/Libraries/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c @@ -32,80 +32,89 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 }; +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 +}; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ -uint8_t const desc_hid_report[] = { TUD_HID_REPORT_DESC_GENERIC_INOUT(CFG_TUD_HID_EP_BUFSIZE) }; +uint8_t const desc_hid_report[] = +{ + TUD_HID_REPORT_DESC_GENERIC_INOUT(CFG_TUD_HID_EP_BUFSIZE) +}; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_hid_descriptor_report_cb(uint8_t itf) +uint8_t const * tud_hid_descriptor_report_cb(uint8_t itf) { - (void)itf; - return desc_hid_report; + (void) itf; + return desc_hid_report; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_HID, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_HID, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_INOUT_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_INOUT_DESC_LEN) -#define EPNUM_HID 0x01 +#define EPNUM_HID 0x01 -uint8_t const desc_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, protocol, report descriptor len, EP Out & In address, size & polling interval - TUD_HID_INOUT_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), - EPNUM_HID, 0x80 | EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 10) + // Interface number, string index, protocol, report descriptor len, EP Out & In address, size & polling interval + TUD_HID_INOUT_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, 0x80 | EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 10) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -114,63 +123,61 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/main.c b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/main.c index f0d11304d86..30b4ae05523 100644 --- a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/main.c +++ b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/main.c @@ -35,17 +35,20 @@ //--------------------------------------------------------------------+ // Interface index depends on the order in configuration descriptor -enum { ITF_KEYBOARD = 0, ITF_MOUSE = 1 }; +enum { + ITF_KEYBOARD = 0, + ITF_MOUSE = 1 +}; /* Blink pattern * - 250 ms : device not mounted * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -56,21 +59,22 @@ void hid_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); - hid_task(); - } + hid_task(); + } } //--------------------------------------------------------------------+ @@ -80,13 +84,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -94,14 +98,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -110,81 +114,84 @@ void tud_resume_cb(void) void hid_task(void) { - // Poll every 10ms - const uint32_t interval_ms = 10; - static uint32_t start_ms = 0; - - if (board_millis() - start_ms < interval_ms) - return; // not enough time - start_ms += interval_ms; - - uint32_t const btn = board_button_read(); - - // Remote wakeup - if (tud_suspended() && btn) { - // Wake up host if we are in suspend mode - // and REMOTE_WAKEUP feature is enabled by host - tud_remote_wakeup(); + // Poll every 10ms + const uint32_t interval_ms = 10; + static uint32_t start_ms = 0; + + if ( board_millis() - start_ms < interval_ms) return; // not enough time + start_ms += interval_ms; + + uint32_t const btn = board_button_read(); + + // Remote wakeup + if ( tud_suspended() && btn ) + { + // Wake up host if we are in suspend mode + // and REMOTE_WAKEUP feature is enabled by host + tud_remote_wakeup(); + } + + /*------------- Keyboard -------------*/ + if ( tud_hid_n_ready(ITF_KEYBOARD) ) + { + // use to avoid send multiple consecutive zero report for keyboard + static bool has_key = false; + + if ( btn ) + { + uint8_t keycode[6] = { 0 }; + keycode[0] = HID_KEY_A; + + tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, keycode); + + has_key = true; + }else + { + // send empty key report if previously has key pressed + if (has_key) tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, NULL); + has_key = false; } + } - /*------------- Keyboard -------------*/ - if (tud_hid_n_ready(ITF_KEYBOARD)) { - // use to avoid send multiple consecutive zero report for keyboard - static bool has_key = false; - - if (btn) { - uint8_t keycode[6] = { 0 }; - keycode[0] = HID_KEY_A; + /*------------- Mouse -------------*/ + if ( tud_hid_n_ready(ITF_MOUSE) ) + { + if ( btn ) + { + int8_t const delta = 5; - tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, keycode); - - has_key = true; - } else { - // send empty key report if previously has key pressed - if (has_key) - tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, NULL); - has_key = false; - } - } - - /*------------- Mouse -------------*/ - if (tud_hid_n_ready(ITF_MOUSE)) { - if (btn) { - int8_t const delta = 5; - - // no button, right + down, no scroll pan - tud_hid_n_mouse_report(ITF_MOUSE, 0, 0x00, delta, delta, 0, 0); - } + // no button, right + down, no scroll pan + tud_hid_n_mouse_report(ITF_MOUSE, 0, 0x00, delta, delta, 0, 0); } + } } + // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, - uint8_t *buffer, uint16_t reqlen) +uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) { - // TODO not Implemented - (void)itf; - (void)report_id; - (void)report_type; - (void)buffer; - (void)reqlen; - - return 0; + // TODO not Implemented + (void) itf; + (void) report_id; + (void) report_type; + (void) buffer; + (void) reqlen; + + return 0; } // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, - uint8_t const *buffer, uint16_t bufsize) +void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { - // TODO set LED based on CAPLOCK, NUMLOCK etc... - (void)itf; - (void)report_id; - (void)report_type; - (void)buffer; - (void)bufsize; + // TODO set LED based on CAPLOCK, NUMLOCK etc... + (void) itf; + (void) report_id; + (void) report_type; + (void) buffer; + (void) bufsize; } //--------------------------------------------------------------------+ @@ -192,14 +199,13 @@ void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t rep //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h index f76a68984da..49dc962fe59 100644 --- a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_HID 2 -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_HID 2 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE 8 +#define CFG_TUD_HID_EP_BUFSIZE 8 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c index 29b8b2d1746..86f567e8e4e 100644 --- a/Libraries/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c @@ -32,91 +32,105 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 }; +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 +}; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // HID Report Descriptor //--------------------------------------------------------------------+ -uint8_t const desc_hid_report1[] = { TUD_HID_REPORT_DESC_KEYBOARD() }; +uint8_t const desc_hid_report1[] = +{ + TUD_HID_REPORT_DESC_KEYBOARD() +}; -uint8_t const desc_hid_report2[] = { TUD_HID_REPORT_DESC_MOUSE() }; +uint8_t const desc_hid_report2[] = +{ + TUD_HID_REPORT_DESC_MOUSE() +}; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_hid_descriptor_report_cb(uint8_t itf) +uint8_t const * tud_hid_descriptor_report_cb(uint8_t itf) { - if (itf == 0) { - return desc_hid_report1; - } else if (itf == 1) { - return desc_hid_report2; - } - - return NULL; + if (itf == 0) + { + return desc_hid_report1; + } + else if (itf == 1) + { + return desc_hid_report2; + } + + return NULL; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_HID1, ITF_NUM_HID2, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_HID1, + ITF_NUM_HID2, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN + TUD_HID_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN + TUD_HID_DESC_LEN) -#define EPNUM_HID1 0x81 -#define EPNUM_HID2 0x82 +#define EPNUM_HID1 0x81 +#define EPNUM_HID2 0x82 -uint8_t const desc_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, - 100), +uint8_t const desc_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval - TUD_HID_DESCRIPTOR(ITF_NUM_HID1, 4, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report1), EPNUM_HID1, - CFG_TUD_HID_EP_BUFSIZE, 10), - TUD_HID_DESCRIPTOR(ITF_NUM_HID2, 5, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report2), EPNUM_HID2, - CFG_TUD_HID_EP_BUFSIZE, 10) + // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval + TUD_HID_DESCRIPTOR(ITF_NUM_HID1, 4, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report1), EPNUM_HID1, CFG_TUD_HID_EP_BUFSIZE, 10), + TUD_HID_DESCRIPTOR(ITF_NUM_HID2, 5, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report2), EPNUM_HID2, CFG_TUD_HID_EP_BUFSIZE, 10) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -125,65 +139,63 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "Keyboard Interface", // 4: Interface 1 String - "Mouse Interface", // 5: Interface 2 String +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "Keyboard Interface", // 4: Interface 1 String + "Mouse Interface", // 5: Interface 2 String }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/midi_test/src/main.c b/Libraries/tinyusb/examples/device/midi_test/src/main.c index 3ac48cefa33..b1d51598fef 100644 --- a/Libraries/tinyusb/examples/device/midi_test/src/main.c +++ b/Libraries/tinyusb/examples/device/midi_test/src/main.c @@ -46,10 +46,10 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -60,20 +60,21 @@ void midi_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - midi_task(); - } + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + midi_task(); + } } //--------------------------------------------------------------------+ @@ -83,13 +84,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -97,14 +98,14 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -115,51 +116,50 @@ void tud_resume_cb(void) uint32_t note_pos = 0; // Store example melody as an array of note values -uint8_t note_sequence[] = { 74, 78, 81, 86, 90, 93, 98, 102, 57, 61, 66, 69, 73, 78, 81, 85, - 88, 92, 97, 100, 97, 92, 88, 85, 81, 78, 74, 69, 66, 62, 57, 62, - 66, 69, 74, 78, 81, 86, 90, 93, 97, 102, 97, 93, 90, 85, 81, 78, - 73, 68, 64, 61, 56, 61, 64, 68, 74, 78, 81, 86, 90, 93, 98, 102 }; +uint8_t note_sequence[] = +{ + 74,78,81,86,90,93,98,102,57,61,66,69,73,78,81,85,88,92,97,100,97,92,88,85,81,78, + 74,69,66,62,57,62,66,69,74,78,81,86,90,93,97,102,97,93,90,85,81,78,73,68,64,61, + 56,61,64,68,74,78,81,86,90,93,98,102 +}; void midi_task(void) { - static uint32_t start_ms = 0; + static uint32_t start_ms = 0; - uint8_t const cable_num = 0; // MIDI jack associated with USB endpoint - uint8_t const channel = 0; // 0 for channel 1 + uint8_t const cable_num = 0; // MIDI jack associated with USB endpoint + uint8_t const channel = 0; // 0 for channel 1 - // The MIDI interface always creates input and output port/jack descriptors - // regardless of these being used or not. Therefore incoming traffic should be read - // (possibly just discarded) to avoid the sender blocking in IO - uint8_t packet[4]; - while (tud_midi_available()) tud_midi_packet_read(packet); + // The MIDI interface always creates input and output port/jack descriptors + // regardless of these being used or not. Therefore incoming traffic should be read + // (possibly just discarded) to avoid the sender blocking in IO + uint8_t packet[4]; + while ( tud_midi_available() ) tud_midi_packet_read(packet); - // send note periodically - if (board_millis() - start_ms < 286) - return; // not enough time - start_ms += 286; + // send note periodically + if (board_millis() - start_ms < 286) return; // not enough time + start_ms += 286; - // Previous positions in the note sequence. - int previous = (int)(note_pos - 1); + // Previous positions in the note sequence. + int previous = (int) (note_pos - 1); - // If we currently are at position 0, set the - // previous position to the last note in the sequence. - if (previous < 0) - previous = sizeof(note_sequence) - 1; + // If we currently are at position 0, set the + // previous position to the last note in the sequence. + if (previous < 0) previous = sizeof(note_sequence) - 1; - // Send Note On for current position at full velocity (127) on channel 1. - uint8_t note_on[3] = { 0x90 | channel, note_sequence[note_pos], 127 }; - tud_midi_stream_write(cable_num, note_on, 3); + // Send Note On for current position at full velocity (127) on channel 1. + uint8_t note_on[3] = { 0x90 | channel, note_sequence[note_pos], 127 }; + tud_midi_stream_write(cable_num, note_on, 3); - // Send Note Off for previous note. - uint8_t note_off[3] = { 0x80 | channel, note_sequence[previous], 0 }; - tud_midi_stream_write(cable_num, note_off, 3); + // Send Note Off for previous note. + uint8_t note_off[3] = { 0x80 | channel, note_sequence[previous], 0}; + tud_midi_stream_write(cable_num, note_off, 3); - // Increment position - note_pos++; + // Increment position + note_pos++; - // If we are at the end of the sequence, start over. - if (note_pos >= sizeof(note_sequence)) - note_pos = 0; + // If we are at the end of the sequence, start over. + if (note_pos >= sizeof(note_sequence)) note_pos = 0; } //--------------------------------------------------------------------+ @@ -167,14 +167,13 @@ void midi_task(void) //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/midi_test/src/tusb_config.h b/Libraries/tinyusb/examples/device/midi_test/src/tusb_config.h index 87dd883ac91..314dde4385a 100644 --- a/Libraries/tinyusb/examples/device/midi_test/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/midi_test/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,22 +87,22 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 1 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 1 +#define CFG_TUD_VENDOR 0 // MIDI FIFO size of TX and RX -#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/midi_test/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/midi_test/src/usb_descriptors.c index 6879191bf4f..41e6e18186c 100644 --- a/Libraries/tinyusb/examples/device/midi_test/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/midi_test/src/usb_descriptors.c @@ -32,97 +32,106 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 }; +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 +}; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } + //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_MIDI = 0, ITF_NUM_MIDI_STREAMING, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_MIDI = 0, + ITF_NUM_MIDI_STREAMING, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MIDI_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MIDI_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_MIDI_OUT 0x02 -#define EPNUM_MIDI_IN 0x02 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_MIDI_OUT 0x02 + #define EPNUM_MIDI_IN 0x02 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X -// On Bridgetek FT9xx endpoint numbers must be unique... -#define EPNUM_MIDI_OUT 0x02 -#define EPNUM_MIDI_IN 0x03 + // On Bridgetek FT9xx endpoint numbers must be unique... + #define EPNUM_MIDI_OUT 0x02 + #define EPNUM_MIDI_IN 0x03 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// On MAX32 endpoint numbers must be unique... -#define EPNUM_MIDI_OUT 0x02 -#define EPNUM_MIDI_IN 0x03 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // On MAX32 endpoint numbers must be unique... + #define EPNUM_MIDI_OUT 0x02 + #define EPNUM_MIDI_IN 0x03 #else -#define EPNUM_MIDI_OUT 0x01 -#define EPNUM_MIDI_IN 0x01 + #define EPNUM_MIDI_OUT 0x01 + #define EPNUM_MIDI_IN 0x01 #endif -uint8_t const desc_fs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_fs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI_OUT, (0x80 | EPNUM_MIDI_IN), 64) + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI_OUT, (0x80 | EPNUM_MIDI_IN), 64) }; #if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI_OUT, (0x80 | EPNUM_MIDI_IN), 512) + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI_OUT, (0x80 | EPNUM_MIDI_IN), 512) }; #endif // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -132,63 +141,61 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/msc_dual_lun/src/main.c b/Libraries/tinyusb/examples/device/msc_dual_lun/src/main.c index a95369c47a8..aabd0bf8ac8 100644 --- a/Libraries/tinyusb/examples/device/msc_dual_lun/src/main.c +++ b/Libraries/tinyusb/examples/device/msc_dual_lun/src/main.c @@ -40,9 +40,9 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -50,21 +50,20 @@ static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; void led_blinking_task(void); /*------------- MAIN -------------*/ -int main(void) -{ - board_init(); +int main(void) { + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - } + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -72,45 +71,39 @@ int main(void) //--------------------------------------------------------------------+ // Invoked when device is mounted -void tud_mount_cb(void) -{ - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) { + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) -{ - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) { + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended // remote_wakeup_en : if host allow us to perform remote wakeup // Within 7ms, device must draw an average of current less than 2.5 mA from bus -void tud_suspend_cb(bool remote_wakeup_en) -{ - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; +void tud_suspend_cb(bool remote_wakeup_en) { + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed -void tud_resume_cb(void) -{ - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +void tud_resume_cb(void) { + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ // BLINKING TASK //--------------------------------------------------------------------+ -void led_blinking_task(void) -{ - static uint32_t start_ms = 0; - static bool led_state = false; - - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle +void led_blinking_task(void) { + static uint32_t start_ms = 0; + static bool led_state = false; + + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c b/Libraries/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c index 43422d101b8..b44b77c6cf8 100644 --- a/Libraries/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c +++ b/Libraries/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c @@ -35,320 +35,300 @@ // We will use Flash as read-only disk with board that has // CFG_EXAMPLE_MSC_READONLY defined #if defined(CFG_EXAMPLE_MSC_READONLY) || defined(CFG_EXAMPLE_MSC_DUAL_READONLY) -#define MSC_CONST const + #define MSC_CONST const #else -#define MSC_CONST + #define MSC_CONST #endif enum { - DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount - DISK_BLOCK_SIZE = 512 + DISK_BLOCK_NUM = 16, // 8KB is the smallest size that windows allow to mount + DISK_BLOCK_SIZE = 512 }; + //--------------------------------------------------------------------+ // LUN 0 //--------------------------------------------------------------------+ #define README0_CONTENTS \ - "LUN0: This is tinyusb's MassStorage Class demo.\r\n\r\n\ +"LUN0: This is tinyusb's MassStorage Class demo.\r\n\r\n\ If you find any bugs or get any questions, feel free to file an\r\n\ issue at github.com/hathach/tinyusb" -MSC_CONST uint8_t msc_disk0[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { - //------------- Block0: Boot Sector -------------// - // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; - // sector_per_cluster = 1; reserved_sectors = 1; - // fat_num = 1; fat12_root_entry_num = 16; - // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; - // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; - // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB 0 "; - // FAT magic code at offset 510-511 - { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, - 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T', 'i', 'n', - 'y', 'U', 'S', 'B', ' ', '0', ' ', ' ', 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, - 0x00, + +MSC_CONST uint8_t msc_disk0[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = +{ + //------------- Block0: Boot Sector -------------// + // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; + // sector_per_cluster = 1; reserved_sectors = 1; + // fat_num = 1; fat12_root_entry_num = 16; + // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; + // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; + // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "TinyUSB 0 "; + // FAT magic code at offset 510-511 + { + 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, + 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , + 'S' , 'B' , ' ' , '0' , ' ' , ' ' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, // Zero up to 2 last bytes of FAT magic code - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x55, 0xAA }, - - //------------- Block1: FAT12 Table -------------// - { - 0xF8, 0xFF, 0xFF, 0xFF, - 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file - }, - - //------------- Block2: Root Directory -------------// - { - // first entry is volume label - 'T', 'i', 'n', 'y', 'U', 'S', 'B', ' ', '0', ' ', ' ', 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // second entry is readme file - 'R', 'E', 'A', 'D', 'M', 'E', '0', ' ', 'T', 'X', 'T', 0x20, 0x00, 0xC6, 0x52, 0x6D, 0x65, - 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README0_CONTENTS) - 1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) - }, - - //------------- Block3: Readme Content -------------// - README0_CONTENTS + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA + }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file + }, + + //------------- Block2: Root Directory -------------// + { + // first entry is volume label + 'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , '0' , ' ' , ' ' , 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // second entry is readme file + 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , '0' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, + 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, + sizeof(README0_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block3: Readme Content -------------// + README0_CONTENTS }; //--------------------------------------------------------------------+ // LUN 1 //--------------------------------------------------------------------+ #define README1_CONTENTS \ - "LUN1: This is tinyusb's MassStorage Class demo.\r\n\r\n\ +"LUN1: This is tinyusb's MassStorage Class demo.\r\n\r\n\ If you find any bugs or get any questions, feel free to file an\r\n\ issue at github.com/hathach/tinyusb" -MSC_CONST uint8_t msc_disk1[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { - //------------- Block0: Boot Sector -------------// - // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; - // sector_per_cluster = 1; reserved_sectors = 1; - // fat_num = 1; fat12_root_entry_num = 16; - // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; - // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; - // filesystem_type = "FAT12 "; volume_serial_number = 0x5678; volume_label = "TinyUSB 1 "; - // FAT magic code at offset 510-511 - { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, - 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x78, 0x56, 0x00, 0x00, 'T', 'i', 'n', - 'y', 'U', 'S', 'B', ' ', '1', ' ', ' ', 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, - 0x00, +MSC_CONST uint8_t msc_disk1[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = +{ + //------------- Block0: Boot Sector -------------// + // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; + // sector_per_cluster = 1; reserved_sectors = 1; + // fat_num = 1; fat12_root_entry_num = 16; + // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; + // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; + // filesystem_type = "FAT12 "; volume_serial_number = 0x5678; volume_label = "TinyUSB 1 "; + // FAT magic code at offset 510-511 + { + 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, + 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x78, 0x56, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , + 'S' , 'B' , ' ' , '1' , ' ' , ' ' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, // Zero up to 2 last bytes of FAT magic code - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x55, 0xAA }, - - //------------- Block1: FAT12 Table -------------// - { - 0xF8, 0xFF, 0xFF, 0xFF, - 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file - }, - - //------------- Block2: Root Directory -------------// - { - // first entry is volume label - 'T', 'i', 'n', 'y', 'U', 'S', 'B', ' ', '1', ' ', ' ', 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // second entry is readme file - 'R', 'E', 'A', 'D', 'M', 'E', '1', ' ', 'T', 'X', 'T', 0x20, 0x00, 0xC6, 0x52, 0x6D, 0x65, - 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README1_CONTENTS) - 1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) - }, - - //------------- Block3: Readme Content -------------// - README1_CONTENTS + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA + }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file + }, + + //------------- Block2: Root Directory -------------// + { + // first entry is volume label + 'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , '1' , ' ' , ' ' , 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // second entry is readme file + 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , '1' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, + 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, + sizeof(README1_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block3: Readme Content -------------// + README1_CONTENTS }; // Invoked to determine max LUN -uint8_t tud_msc_get_maxlun_cb(void) -{ - return 2; // dual LUN +uint8_t tud_msc_get_maxlun_cb(void) { + return 2; // dual LUN } // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], - uint8_t product_rev[4]) -{ - (void)lun; // use same ID for both LUNs +void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) { + (void) lun; // use same ID for both LUNs - const char vid[] = "TinyUSB"; - const char pid[] = "Mass Storage"; - const char rev[] = "1.0"; + const char vid[] = "TinyUSB"; + const char pid[] = "Mass Storage"; + const char rev[] = "1.0"; - memcpy(vendor_id, vid, strlen(vid)); - memcpy(product_id, pid, strlen(pid)); - memcpy(product_rev, rev, strlen(rev)); + memcpy(vendor_id , vid, strlen(vid)); + memcpy(product_id , pid, strlen(pid)); + memcpy(product_rev, rev, strlen(rev)); } // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted -bool tud_msc_test_unit_ready_cb(uint8_t lun) -{ - if (lun == 1 && board_button_read()) - return false; +bool tud_msc_test_unit_ready_cb(uint8_t lun) { + if ( lun == 1 && board_button_read() ) return false; - return true; // RAM disk is always ready + return true; // RAM disk is always ready } // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size) -{ - (void)lun; +void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) { + (void) lun; - *block_count = DISK_BLOCK_NUM; - *block_size = DISK_BLOCK_SIZE; + *block_count = DISK_BLOCK_NUM; + *block_size = DISK_BLOCK_SIZE; } // Invoked when received Start Stop Unit command // - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage // - Start = 1 : active mode, if load_eject = 1 : load disk storage -bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) -{ - (void)lun; - (void)power_condition; - - if (load_eject) { - if (start) { - // load disk storage - } else { - // unload disk storage - } +bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) { + (void) lun; + (void) power_condition; + + if (load_eject) { + if (start) { + // load disk storage + } else { + // unload disk storage } + } - return true; + return true; } // Callback invoked when received READ10 command. // Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, - uint32_t bufsize) -{ - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) - return -1; +int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) { + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) return -1; - uint8_t const *addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; - memcpy(buffer, addr, bufsize); + uint8_t const* addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; + memcpy(buffer, addr, bufsize); - return (int32_t)bufsize; + return (int32_t) bufsize; } -bool tud_msc_is_writable_cb(uint8_t lun) -{ - (void)lun; +bool tud_msc_is_writable_cb(uint8_t lun) { + (void) lun; #if defined(CFG_EXAMPLE_MSC_READONLY) || defined(CFG_EXAMPLE_MSC_DUAL_READONLY) - return false; + return false; #else - return true; + return true; #endif } // Callback invoked when received WRITE10 command. // Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, - uint32_t bufsize) -{ - // out of ramdisk - if (lba >= DISK_BLOCK_NUM) - return -1; +int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) { + // out of ramdisk + if (lba >= DISK_BLOCK_NUM) return -1; #if defined(CFG_EXAMPLE_MSC_READONLY) || defined(CFG_EXAMPLE_MSC_DUAL_READONLY) - (void)lun; - (void)lba; - (void)offset; - (void)buffer; + (void) lun; + (void) lba; + (void) offset; + (void) buffer; #else - uint8_t *addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; - memcpy(addr, buffer, bufsize); + uint8_t* addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; + memcpy(addr, buffer, bufsize); #endif - return (int32_t)bufsize; + return (int32_t) bufsize; } // Callback invoked when received an SCSI command not in built-in list below // - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE // - READ10 and WRITE10 has their own callbacks (MUST not be handled here) -int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize) -{ - void const *response = NULL; - int32_t resplen = 0; +int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) { + void const* response = NULL; + int32_t resplen = 0; - // most scsi handled is input - bool in_xfer = true; + // most scsi handled is input + bool in_xfer = true; - switch (scsi_cmd[0]) { + switch (scsi_cmd[0]) { default: - // Set Sense = Invalid Command Operation - tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + // Set Sense = Invalid Command Operation + tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - // negative means error -> tinyusb could stall and/or response with failed status - return -1; - } + // negative means error -> tinyusb could stall and/or response with failed status + return -1; + } - // return resplen must not larger than bufsize - if (resplen > bufsize) - resplen = bufsize; + // return resplen must not larger than bufsize + if (resplen > bufsize) resplen = bufsize; - if (response && (resplen > 0)) { - if (in_xfer) { - memcpy(buffer, response, (size_t)resplen); - } else { - // SCSI output - } + if (response && (resplen > 0)) { + if (in_xfer) { + memcpy(buffer, response, (size_t) resplen); + } else { + // SCSI output } + } - return resplen; + return resplen; } #endif diff --git a/Libraries/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h b/Libraries/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h index a9278ad9524..9cbbbade90f 100644 --- a/Libraries/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,21 +87,21 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 1 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 1 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 // MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE 512 +#define CFG_TUD_MSC_EP_BUFSIZE 512 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c index 0c6bfd7fa64..c55bab0d896 100644 --- a/Libraries/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c @@ -32,109 +32,116 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 }; +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 +}; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_MSC, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_MSC, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -#define EPNUM_MSC_OUT 0x02 -#define EPNUM_MSC_IN 0x82 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... + #define EPNUM_MSC_OUT 0x02 + #define EPNUM_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_SAMG -// SAMG doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_MSC_OUT 0x01 -#define EPNUM_MSC_IN 0x82 + // SAMG doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_MSC_OUT 0x01 + #define EPNUM_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X -// FT9XX doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_MSC_OUT 0x01 -#define EPNUM_MSC_IN 0x82 + // FT9XX doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_MSC_OUT 0x01 + #define EPNUM_MSC_IN 0x82 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// MAX32 doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_MSC_OUT 0x01 -#define EPNUM_MSC_IN 0x82 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // MAX32 doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_MSC_OUT 0x01 + #define EPNUM_MSC_IN 0x82 #else -#define EPNUM_MSC_OUT 0x01 -#define EPNUM_MSC_IN 0x81 + #define EPNUM_MSC_OUT 0x01 + #define EPNUM_MSC_IN 0x81 #endif -uint8_t const desc_fs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_fs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), }; #if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP Out & EP In address, EP size - TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), }; #endif // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -144,63 +151,61 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h index 65830e7d477..9f30b91cb85 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h @@ -36,8 +36,10 @@ typedef int sys_prot_t; + + /* define compiler specific symbols */ -#if defined(__ICCARM__) +#if defined (__ICCARM__) #define PACK_STRUCT_BEGIN #define PACK_STRUCT_STRUCT @@ -45,21 +47,21 @@ typedef int sys_prot_t; #define PACK_STRUCT_FIELD(x) x #define PACK_STRUCT_USE_INCLUDES -#elif defined(__CC_ARM) +#elif defined (__CC_ARM) #define PACK_STRUCT_BEGIN __packed #define PACK_STRUCT_STRUCT #define PACK_STRUCT_END #define PACK_STRUCT_FIELD(x) x -#elif defined(__GNUC__) +#elif defined (__GNUC__) #define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT __attribute__((__packed__)) +#define PACK_STRUCT_STRUCT __attribute__ ((__packed__)) #define PACK_STRUCT_END #define PACK_STRUCT_FIELD(x) x -#elif defined(__TASKING__) +#elif defined (__TASKING__) #define PACK_STRUCT_BEGIN #define PACK_STRUCT_STRUCT @@ -68,11 +70,6 @@ typedef int sys_prot_t; #endif -#define LWIP_PLATFORM_ASSERT(x) \ - do { \ - if (!(x)) \ - while (1) {} \ - \ - } while (0) +#define LWIP_PLATFORM_ASSERT(x) do { if(!(x)) while(1); } while(0) #endif /* __CC_H__ */ diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h index 5599a272574..41e8f0d677f 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h @@ -33,39 +33,39 @@ #define __LWIPOPTS_H__ /* Prevent having to link sys_arch.c (we don't test the API layers in unit tests) */ -#define NO_SYS 1 -#define MEM_ALIGNMENT 4 -#define LWIP_RAW 0 -#define LWIP_NETCONN 0 -#define LWIP_SOCKET 0 -#define LWIP_DHCP 0 -#define LWIP_ICMP 1 -#define LWIP_UDP 1 -#define LWIP_TCP 1 -#define LWIP_IPV4 1 -#define LWIP_IPV6 0 -#define ETH_PAD_SIZE 0 -#define LWIP_IP_ACCEPT_UDP_PORT(p) ((p) == PP_NTOHS(67)) +#define NO_SYS 1 +#define MEM_ALIGNMENT 4 +#define LWIP_RAW 0 +#define LWIP_NETCONN 0 +#define LWIP_SOCKET 0 +#define LWIP_DHCP 0 +#define LWIP_ICMP 1 +#define LWIP_UDP 1 +#define LWIP_TCP 1 +#define LWIP_IPV4 1 +#define LWIP_IPV6 0 +#define ETH_PAD_SIZE 0 +#define LWIP_IP_ACCEPT_UDP_PORT(p) ((p) == PP_NTOHS(67)) -#define TCP_MSS (1500 /*mtu*/ - 20 /*iphdr*/ - 20 /*tcphhr*/) -#define TCP_SND_BUF (4 * TCP_MSS) -#define TCP_WND (4 * TCP_MSS) +#define TCP_MSS (1500 /*mtu*/ - 20 /*iphdr*/ - 20 /*tcphhr*/) +#define TCP_SND_BUF (4 * TCP_MSS) +#define TCP_WND (4 * TCP_MSS) -#define ETHARP_SUPPORT_STATIC_ENTRIES 1 +#define ETHARP_SUPPORT_STATIC_ENTRIES 1 -#define LWIP_HTTPD_CGI 0 -#define LWIP_HTTPD_SSI 0 -#define LWIP_HTTPD_SSI_INCLUDE_TAG 0 +#define LWIP_HTTPD_CGI 0 +#define LWIP_HTTPD_SSI 0 +#define LWIP_HTTPD_SSI_INCLUDE_TAG 0 -#define LWIP_SINGLE_NETIF 1 +#define LWIP_SINGLE_NETIF 1 -#define PBUF_POOL_SIZE 4 +#define PBUF_POOL_SIZE 4 -#define HTTPD_USE_CUSTOM_FSDATA 0 +#define HTTPD_USE_CUSTOM_FSDATA 0 -#define LWIP_MULTICAST_PING 1 -#define LWIP_BROADCAST_PING 1 -#define LWIP_IPV6_MLD 0 -#define LWIP_IPV6_SEND_ROUTER_SOLICIT 0 +#define LWIP_MULTICAST_PING 1 +#define LWIP_BROADCAST_PING 1 +#define LWIP_IPV6_MLD 0 +#define LWIP_IPV6_SEND_ROUTER_SOLICIT 0 #endif /* __LWIPOPTS_H__ */ diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/main.c b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/main.c index 49352f5eeb4..791e09b4f76 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/main.c +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/main.c @@ -54,13 +54,11 @@ try changing the first byte of tud_network_mac_address[] below from 0x02 to 0x00 #include "lwip/timeouts.h" #ifdef INCLUDE_IPERF -#include "lwip/apps/lwiperf.h" + #include "lwip/apps/lwiperf.h" #endif -#define INIT_IP4(a, b, c, d) \ - { \ - PP_HTONL(LWIP_MAKEU32(a, b, c, d)) \ - } +#define INIT_IP4(a, b, c, d) \ + { PP_HTONL(LWIP_MAKEU32(a, b, c, d)) } /* lwip context */ static struct netif netif_data; @@ -71,7 +69,7 @@ static struct pbuf *received_frame; /* this is used by this code, ./class/net/net_driver.c, and usb_descriptors.c */ /* ideally speaking, this should be generated from the hardware's unique ID (if available) */ /* it is suggested that the first byte is 0x02 to indicate a link-local address */ -uint8_t tud_network_mac_address[6] = { 0x02, 0x02, 0x84, 0x6A, 0x96, 0x00 }; +uint8_t tud_network_mac_address[6] = {0x02, 0x02, 0x84, 0x6A, 0x96, 0x00}; /* network parameters of this MCU */ static const ip4_addr_t ipaddr = INIT_IP4(192, 168, 7, 1); @@ -81,193 +79,178 @@ static const ip4_addr_t gateway = INIT_IP4(0, 0, 0, 0); /* database IP addresses that can be offered to the host; this must be in RAM to store assigned MAC addresses */ static dhcp_entry_t entries[] = { /* mac ip address lease time */ - { { 0 }, INIT_IP4(192, 168, 7, 2), 24 * 60 * 60 }, - { { 0 }, INIT_IP4(192, 168, 7, 3), 24 * 60 * 60 }, - { { 0 }, INIT_IP4(192, 168, 7, 4), 24 * 60 * 60 }, + {{0}, INIT_IP4(192, 168, 7, 2), 24 * 60 * 60}, + {{0}, INIT_IP4(192, 168, 7, 3), 24 * 60 * 60}, + {{0}, INIT_IP4(192, 168, 7, 4), 24 * 60 * 60}, }; static const dhcp_config_t dhcp_config = { - .router = INIT_IP4(0, 0, 0, 0), /* router address (if any) */ - .port = 67, /* listen port */ + .router = INIT_IP4(0, 0, 0, 0), /* router address (if any) */ + .port = 67, /* listen port */ .dns = INIT_IP4(192, 168, 7, 1), /* dns server (if any) */ - "usb", /* dns suffix */ - TU_ARRAY_SIZE(entries), /* num entry */ - entries /* entries */ + "usb", /* dns suffix */ + TU_ARRAY_SIZE(entries), /* num entry */ + entries /* entries */ }; -static err_t linkoutput_fn(struct netif *netif, struct pbuf *p) -{ - (void)netif; - - for (;;) { - /* if TinyUSB isn't ready, we must signal back to lwip that there is nothing we can do */ - if (!tud_ready()) - return ERR_USE; +static err_t linkoutput_fn(struct netif *netif, struct pbuf *p) { + (void) netif; - /* if the network driver can accept another packet, we make it happen */ - if (tud_network_can_xmit(p->tot_len)) { - tud_network_xmit(p, 0 /* unused for this example */); - return ERR_OK; - } + for (;;) { + /* if TinyUSB isn't ready, we must signal back to lwip that there is nothing we can do */ + if (!tud_ready()) + return ERR_USE; - /* transfer execution to TinyUSB in the hopes that it will finish transmitting the prior packet */ - tud_task(); + /* if the network driver can accept another packet, we make it happen */ + if (tud_network_can_xmit(p->tot_len)) { + tud_network_xmit(p, 0 /* unused for this example */); + return ERR_OK; } + + /* transfer execution to TinyUSB in the hopes that it will finish transmitting the prior packet */ + tud_task(); + } } -static err_t ip4_output_fn(struct netif *netif, struct pbuf *p, const ip4_addr_t *addr) -{ - return etharp_output(netif, p, addr); +static err_t ip4_output_fn(struct netif *netif, struct pbuf *p, const ip4_addr_t *addr) { + return etharp_output(netif, p, addr); } #if LWIP_IPV6 -static err_t ip6_output_fn(struct netif *netif, struct pbuf *p, const ip6_addr_t *addr) -{ - return ethip6_output(netif, p, addr); +static err_t ip6_output_fn(struct netif *netif, struct pbuf *p, const ip6_addr_t *addr) { + return ethip6_output(netif, p, addr); } #endif -static err_t netif_init_cb(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", (netif != NULL)); - netif->mtu = CFG_TUD_NET_MTU; - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_UP; - netif->state = NULL; - netif->name[0] = 'E'; - netif->name[1] = 'X'; - netif->linkoutput = linkoutput_fn; - netif->output = ip4_output_fn; +static err_t netif_init_cb(struct netif *netif) { + LWIP_ASSERT("netif != NULL", (netif != NULL)); + netif->mtu = CFG_TUD_NET_MTU; + netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_UP; + netif->state = NULL; + netif->name[0] = 'E'; + netif->name[1] = 'X'; + netif->linkoutput = linkoutput_fn; + netif->output = ip4_output_fn; #if LWIP_IPV6 - netif->output_ip6 = ip6_output_fn; + netif->output_ip6 = ip6_output_fn; #endif - return ERR_OK; + return ERR_OK; } -static void init_lwip(void) -{ - struct netif *netif = &netif_data; +static void init_lwip(void) { + struct netif *netif = &netif_data; - lwip_init(); + lwip_init(); - /* the lwip virtual MAC address must be different from the host's; to ensure this, we toggle the LSbit */ - netif->hwaddr_len = sizeof(tud_network_mac_address); - memcpy(netif->hwaddr, tud_network_mac_address, sizeof(tud_network_mac_address)); - netif->hwaddr[5] ^= 0x01; + /* the lwip virtual MAC address must be different from the host's; to ensure this, we toggle the LSbit */ + netif->hwaddr_len = sizeof(tud_network_mac_address); + memcpy(netif->hwaddr, tud_network_mac_address, sizeof(tud_network_mac_address)); + netif->hwaddr[5] ^= 0x01; - netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, netif_init_cb, ip_input); + netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, netif_init_cb, ip_input); #if LWIP_IPV6 - netif_create_ip6_linklocal_address(netif, 1); + netif_create_ip6_linklocal_address(netif, 1); #endif - netif_set_default(netif); + netif_set_default(netif); } /* handle any DNS requests from dns-server */ -bool dns_query_proc(const char *name, ip4_addr_t *addr) -{ - if (0 == strcmp(name, "tiny.usb")) { - *addr = ipaddr; - return true; - } - return false; +bool dns_query_proc(const char *name, ip4_addr_t *addr) { + if (0 == strcmp(name, "tiny.usb")) { + *addr = ipaddr; + return true; + } + return false; } -bool tud_network_recv_cb(const uint8_t *src, uint16_t size) -{ - /* this shouldn't happen, but if we get another packet before +bool tud_network_recv_cb(const uint8_t *src, uint16_t size) { + /* this shouldn't happen, but if we get another packet before parsing the previous, we must signal our inability to accept it */ - if (received_frame) - return false; + if (received_frame) return false; - if (size) { - struct pbuf *p = pbuf_alloc(PBUF_RAW, size, PBUF_POOL); + if (size) { + struct pbuf *p = pbuf_alloc(PBUF_RAW, size, PBUF_POOL); - if (p) { - /* pbuf_alloc() has already initialized struct; all we need to do is copy the data */ - memcpy(p->payload, src, size); + if (p) { + /* pbuf_alloc() has already initialized struct; all we need to do is copy the data */ + memcpy(p->payload, src, size); - /* store away the pointer for service_traffic() to later handle */ - received_frame = p; - } + /* store away the pointer for service_traffic() to later handle */ + received_frame = p; } + } - return true; + return true; } -uint16_t tud_network_xmit_cb(uint8_t *dst, void *ref, uint16_t arg) -{ - struct pbuf *p = (struct pbuf *)ref; +uint16_t tud_network_xmit_cb(uint8_t *dst, void *ref, uint16_t arg) { + struct pbuf *p = (struct pbuf *) ref; - (void)arg; /* unused for this example */ + (void) arg; /* unused for this example */ - return pbuf_copy_partial(p, dst, p->tot_len, 0); + return pbuf_copy_partial(p, dst, p->tot_len, 0); } -static void service_traffic(void) -{ - /* handle any packet received by tud_network_recv_cb() */ - if (received_frame) { - ethernet_input(received_frame, &netif_data); - pbuf_free(received_frame); - received_frame = NULL; - tud_network_recv_renew(); - } +static void service_traffic(void) { + /* handle any packet received by tud_network_recv_cb() */ + if (received_frame) { + ethernet_input(received_frame, &netif_data); + pbuf_free(received_frame); + received_frame = NULL; + tud_network_recv_renew(); + } - sys_check_timeouts(); + sys_check_timeouts(); } -void tud_network_init_cb(void) -{ - /* if the network is re-initializing and we have a leftover packet, we must do a cleanup */ - if (received_frame) { - pbuf_free(received_frame); - received_frame = NULL; - } +void tud_network_init_cb(void) { + /* if the network is re-initializing and we have a leftover packet, we must do a cleanup */ + if (received_frame) { + pbuf_free(received_frame); + received_frame = NULL; + } } -int main(void) -{ - /* initialize TinyUSB */ - board_init(); +int main(void) { + /* initialize TinyUSB */ + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - /* initialize lwip, dhcp-server, dns-server, and http */ - init_lwip(); - while (!netif_is_up(&netif_data)) {} - while (dhserv_init(&dhcp_config) != ERR_OK) {} - while (dnserv_init(IP_ADDR_ANY, 53, dns_query_proc) != ERR_OK) {} - httpd_init(); + /* initialize lwip, dhcp-server, dns-server, and http */ + init_lwip(); + while (!netif_is_up(&netif_data)); + while (dhserv_init(&dhcp_config) != ERR_OK); + while (dnserv_init(IP_ADDR_ANY, 53, dns_query_proc) != ERR_OK); + httpd_init(); #ifdef INCLUDE_IPERF - // test with: iperf -c 192.168.7.1 -e -i 1 -M 5000 -l 8192 -r - lwiperf_start_tcp_server_default(NULL, NULL); + // test with: iperf -c 192.168.7.1 -e -i 1 -M 5000 -l 8192 -r + lwiperf_start_tcp_server_default(NULL, NULL); #endif - while (1) { - tud_task(); - service_traffic(); - } + while (1) { + tud_task(); + service_traffic(); + } - return 0; + return 0; } /* lwip has provision for using a mutex, when applicable */ -sys_prot_t sys_arch_protect(void) -{ - return 0; +sys_prot_t sys_arch_protect(void) { + return 0; } -void sys_arch_unprotect(sys_prot_t pval) -{ - (void)pval; +void sys_arch_unprotect(sys_prot_t pval) { + (void) pval; } /* lwip needs a millisecond time source, and the TinyUSB board support code has one available */ -uint32_t sys_now(void) -{ - return board_millis(); +uint32_t sys_now(void) { + return board_millis(); } diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h index 1f1f7fe16a5..22082fc8186 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h @@ -38,12 +38,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 + #define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED + #define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -52,15 +52,15 @@ extern "C" { // defined by compiler flags for flexibility #ifndef CFG_TUSB_MCU -#error CFG_TUSB_MCU must be defined + #error CFG_TUSB_MCU must be defined #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE + #define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 + #define CFG_TUSB_DEBUG 0 #endif // Enable Device stack @@ -77,25 +77,25 @@ extern "C" { * - CFG_TUSB_MEM_ALIGN : __attribute__ ((aligned(4))) */ #ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION + #define CFG_TUSB_MEM_SECTION #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) + #define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) #endif // Use different configurations to test all net devices (also due to resource limitations) #if TU_CHECK_MCU(OPT_MCU_LPC15XX, OPT_MCU_LPC40XX, OPT_MCU_LPC51UXX, OPT_MCU_LPC54) -#define USE_ECM 1 + #define USE_ECM 1 #elif TU_CHECK_MCU(OPT_MCU_SAMD21, OPT_MCU_SAML21, OPT_MCU_SAML22) -#define USE_ECM 1 + #define USE_ECM 1 #elif TU_CHECK_MCU(OPT_MCU_STM32F0, OPT_MCU_STM32F1) -#define USE_ECM 1 + #define USE_ECM 1 #elif TU_CHECK_MCU(OPT_MCU_MAX32690, OPT_MCU_MAX32650, OPT_MCU_MAX32666, OPT_MCU_MAX78002) -#define USE_ECM 1 + #define USE_ECM 1 #else -#define USE_ECM 0 -#define INCLUDE_IPERF + #define USE_ECM 0 + #define INCLUDE_IPERF #endif //-------------------------------------------------------------------- @@ -112,12 +112,12 @@ extern "C" { // Number of NCM transfer blocks for reception side #ifndef CFG_TUD_NCM_OUT_NTB_N -#define CFG_TUD_NCM_OUT_NTB_N 1 + #define CFG_TUD_NCM_OUT_NTB_N 1 #endif // Number of NCM transfer blocks for transmission side #ifndef CFG_TUD_NCM_IN_NTB_N -#define CFG_TUD_NCM_IN_NTB_N 1 + #define CFG_TUD_NCM_IN_NTB_N 1 #endif //-------------------------------------------------------------------- @@ -125,15 +125,15 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 + #define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// // Network class has 2 drivers: ECM/RNDIS and NCM. // Only one of the drivers can be enabled -#define CFG_TUD_ECM_RNDIS USE_ECM -#define CFG_TUD_NCM (1 - CFG_TUD_ECM_RNDIS) +#define CFG_TUD_ECM_RNDIS USE_ECM +#define CFG_TUD_NCM (1 - CFG_TUD_ECM_RNDIS) #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c index 526eb4cd713..012e1bcd848 100644 --- a/Libraries/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c @@ -32,131 +32,137 @@ * Auto ProductID layout's Bitmap: * [MSB] NET | VENDOR | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4) | _PID_MAP(ECM_RNDIS, 5) | _PID_MAP(NCM, 5)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) | _PID_MAP(ECM_RNDIS, 5) | _PID_MAP(NCM, 5) ) // String Descriptor Index -enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, - STRID_INTERFACE, - STRID_MAC +enum +{ + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, + STRID_INTERFACE, + STRID_MAC }; -enum { ITF_NUM_CDC = 0, ITF_NUM_CDC_DATA, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_CDC = 0, + ITF_NUM_CDC_DATA, + ITF_NUM_TOTAL +}; -enum { +enum +{ #if CFG_TUD_ECM_RNDIS - CONFIG_ID_RNDIS = 0, - CONFIG_ID_ECM = 1, + CONFIG_ID_RNDIS = 0, + CONFIG_ID_ECM = 1, #else - CONFIG_ID_NCM = 0, + CONFIG_ID_NCM = 0, #endif - CONFIG_ID_COUNT + CONFIG_ID_COUNT }; //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) device class - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0101, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0101, - .iManufacturer = STRID_MANUFACTURER, - .iProduct = STRID_PRODUCT, - .iSerialNumber = STRID_SERIAL, + .iManufacturer = STRID_MANUFACTURER, + .iProduct = STRID_PRODUCT, + .iSerialNumber = STRID_SERIAL, .bNumConfigurations = CONFIG_ID_COUNT // multiple configurations }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -#define MAIN_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_RNDIS_DESC_LEN) -#define ALT_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_ECM_DESC_LEN) -#define NCM_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_NCM_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_NET_NOTIF 0x81 -#define EPNUM_NET_OUT 0x02 -#define EPNUM_NET_IN 0x82 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X -// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_NET_NOTIF 0x81 -#define EPNUM_NET_OUT 0x02 -#define EPNUM_NET_IN 0x83 +#define MAIN_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_RNDIS_DESC_LEN) +#define ALT_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_ECM_DESC_LEN) +#define NCM_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_NCM_DESC_LEN) + +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_NET_NOTIF 0x81 + #define EPNUM_NET_OUT 0x02 + #define EPNUM_NET_IN 0x82 + +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X + // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_NET_NOTIF 0x81 + #define EPNUM_NET_OUT 0x02 + #define EPNUM_NET_IN 0x83 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// MAX32 doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_NET_NOTIF 0x81 -#define EPNUM_NET_OUT 0x02 -#define EPNUM_NET_IN 0x83 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // MAX32 doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_NET_NOTIF 0x81 + #define EPNUM_NET_OUT 0x02 + #define EPNUM_NET_IN 0x83 #else -#define EPNUM_NET_NOTIF 0x81 -#define EPNUM_NET_OUT 0x02 -#define EPNUM_NET_IN 0x82 + #define EPNUM_NET_NOTIF 0x81 + #define EPNUM_NET_OUT 0x02 + #define EPNUM_NET_IN 0x82 #endif #if CFG_TUD_ECM_RNDIS -static uint8_t const rndis_configuration[] = { - // Config number (index+1), interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(CONFIG_ID_RNDIS + 1, ITF_NUM_TOTAL, 0, MAIN_CONFIG_TOTAL_LEN, 0, 100), +static uint8_t const rndis_configuration[] = +{ + // Config number (index+1), interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_RNDIS+1, ITF_NUM_TOTAL, 0, MAIN_CONFIG_TOTAL_LEN, 0, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_RNDIS_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, EPNUM_NET_NOTIF, 8, EPNUM_NET_OUT, - EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_RNDIS_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, EPNUM_NET_NOTIF, 8, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE), }; -static uint8_t const ecm_configuration[] = { - // Config number (index+1), interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(CONFIG_ID_ECM + 1, ITF_NUM_TOTAL, 0, ALT_CONFIG_TOTAL_LEN, 0, 100), +static uint8_t const ecm_configuration[] = +{ + // Config number (index+1), interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_ECM+1, ITF_NUM_TOTAL, 0, ALT_CONFIG_TOTAL_LEN, 0, 100), - // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. - TUD_CDC_ECM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, - EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), + // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. + TUD_CDC_ECM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), }; #else -static uint8_t const ncm_configuration[] = { - // Config number (index+1), interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(CONFIG_ID_NCM + 1, ITF_NUM_TOTAL, 0, NCM_CONFIG_TOTAL_LEN, 0, 100), +static uint8_t const ncm_configuration[] = +{ + // Config number (index+1), interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_NCM+1, ITF_NUM_TOTAL, 0, NCM_CONFIG_TOTAL_LEN, 0, 100), - // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. - TUD_CDC_NCM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, - EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), + // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. + TUD_CDC_NCM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), }; #endif @@ -165,21 +171,22 @@ static uint8_t const ncm_configuration[] = { // - Windows only works with RNDIS // - MacOS only works with CDC-ECM // - Linux will work on both -static uint8_t const *const configuration_arr[2] = { +static uint8_t const * const configuration_arr[2] = +{ #if CFG_TUD_ECM_RNDIS - [CONFIG_ID_RNDIS] = rndis_configuration, - [CONFIG_ID_ECM] = ecm_configuration + [CONFIG_ID_RNDIS] = rndis_configuration, + [CONFIG_ID_ECM ] = ecm_configuration #else - [CONFIG_ID_NCM] = ncm_configuration + [CONFIG_ID_NCM ] = ncm_configuration #endif }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - return (index < CONFIG_ID_COUNT) ? configuration_arr[index] : NULL; + return (index < CONFIG_ID_COUNT) ? configuration_arr[index] : NULL; } //--------------------------------------------------------------------+ @@ -187,69 +194,65 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) //--------------------------------------------------------------------+ // array of pointer to string descriptors -static char const *string_desc_arr[] = { - [STRID_LANGID] = (const char[]){ 0x09, 0x04 }, // supported language is English (0x0409) - [STRID_MANUFACTURER] = "TinyUSB", // Manufacturer - [STRID_PRODUCT] = "TinyUSB Device", // Product - [STRID_SERIAL] = NULL, // Serials will use unique ID if possible - [STRID_INTERFACE] = "TinyUSB Network Interface" // Interface Description - - // STRID_MAC index is handled separately +static char const* string_desc_arr [] = +{ + [STRID_LANGID] = (const char[]) { 0x09, 0x04 }, // supported language is English (0x0409) + [STRID_MANUFACTURER] = "TinyUSB", // Manufacturer + [STRID_PRODUCT] = "TinyUSB Device", // Product + [STRID_SERIAL] = NULL, // Serials will use unique ID if possible + [STRID_INTERFACE] = "TinyUSB Network Interface" // Interface Description + + // STRID_MAC index is handled separately }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - unsigned int chr_count = 0; +uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + unsigned int chr_count = 0; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; case STRID_MAC: - // Convert MAC address into UTF-16 - for (unsigned i = 0; i < sizeof(tud_network_mac_address); i++) { - _desc_str[1 + chr_count++] = - "0123456789ABCDEF"[(tud_network_mac_address[i] >> 4) & 0xf]; - _desc_str[1 + chr_count++] = - "0123456789ABCDEF"[(tud_network_mac_address[i] >> 0) & 0xf]; - } - break; + // Convert MAC address into UTF-16 + for (unsigned i=0; i> 4) & 0xf]; + _desc_str[1+chr_count++] = "0123456789ABCDEF"[(tud_network_mac_address[i] >> 0) & 0xf]; + } + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8 ) | (2*chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/uac2_headset/src/main.c b/Libraries/tinyusb/examples/device/uac2_headset/src/main.c index d3e73105aa7..0ea6e702582 100644 --- a/Libraries/tinyusb/examples/device/uac2_headset/src/main.c +++ b/Libraries/tinyusb/examples/device/uac2_headset/src/main.c @@ -35,11 +35,11 @@ //--------------------------------------------------------------------+ // List of supported sample rates -const uint32_t sample_rates[] = { 44100, 48000 }; +const uint32_t sample_rates[] = {44100, 48000}; -uint32_t current_sample_rate = 44100; +uint32_t current_sample_rate = 44100; -#define N_SAMPLE_RATES TU_ARRAY_SIZE(sample_rates) +#define N_SAMPLE_RATES TU_ARRAY_SIZE(sample_rates) /* Blink pattern * - 25 ms : streaming data @@ -47,34 +47,36 @@ uint32_t current_sample_rate = 44100; * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_STREAMING = 25, - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum +{ + BLINK_STREAMING = 25, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; -enum { - VOLUME_CTRL_0_DB = 0, - VOLUME_CTRL_10_DB = 2560, - VOLUME_CTRL_20_DB = 5120, - VOLUME_CTRL_30_DB = 7680, - VOLUME_CTRL_40_DB = 10240, - VOLUME_CTRL_50_DB = 12800, - VOLUME_CTRL_60_DB = 15360, - VOLUME_CTRL_70_DB = 17920, - VOLUME_CTRL_80_DB = 20480, - VOLUME_CTRL_90_DB = 23040, - VOLUME_CTRL_100_DB = 25600, - VOLUME_CTRL_SILENCE = 0x8000, +enum +{ + VOLUME_CTRL_0_DB = 0, + VOLUME_CTRL_10_DB = 2560, + VOLUME_CTRL_20_DB = 5120, + VOLUME_CTRL_30_DB = 7680, + VOLUME_CTRL_40_DB = 10240, + VOLUME_CTRL_50_DB = 12800, + VOLUME_CTRL_60_DB = 15360, + VOLUME_CTRL_70_DB = 17920, + VOLUME_CTRL_80_DB = 20480, + VOLUME_CTRL_90_DB = 23040, + VOLUME_CTRL_100_DB = 25600, + VOLUME_CTRL_SILENCE = 0x8000, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; // Audio controls // Current states -int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 -int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 +int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 +int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1]; // +1 for master channel 0 // Buffer for microphone data int32_t mic_buf[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ / 4]; @@ -83,9 +85,8 @@ int32_t spk_buf[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ / 4]; // Speaker data size received in the last frame int spk_data_size; // Resolution per format -const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = { - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX -}; +const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = {CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX, + CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX}; // Current resolution, update on format change uint8_t current_resolution; @@ -96,23 +97,24 @@ void audio_control_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - TU_LOG1("Headset running\r\n"); + TU_LOG1("Headset running\r\n"); - while (1) { - tud_task(); // TinyUSB device task - audio_task(); - audio_control_task(); - led_blinking_task(); - } + while (1) + { + tud_task(); // TinyUSB device task + audio_task(); + audio_control_task(); + led_blinking_task(); + } } //--------------------------------------------------------------------+ @@ -122,13 +124,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -136,149 +138,156 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void)remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } // Helper for clock get requests static bool tud_audio_clock_get_request(uint8_t rhport, audio_control_request_t const *request) { - TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - - if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { - if (request->bRequest == AUDIO_CS_REQ_CUR) { - TU_LOG1("Clock get current freq %" PRIu32 "\r\n", current_sample_rate); - - audio_control_cur_4_t curf = { (int32_t)tu_htole32(current_sample_rate) }; - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); - } else if (request->bRequest == AUDIO_CS_REQ_RANGE) { - audio_control_range_4_n_t(N_SAMPLE_RATES) - rangef = { .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) }; - TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); - for (uint8_t i = 0; i < N_SAMPLE_RATES; i++) { - rangef.subrange[i].bMin = (int32_t)sample_rates[i]; - rangef.subrange[i].bMax = (int32_t)sample_rates[i]; - rangef.subrange[i].bRes = 0; - TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, - (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); - } - - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); - } - } else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && - request->bRequest == AUDIO_CS_REQ_CUR) { - audio_control_cur_1_t cur_valid = { .bCur = 1 }; - TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); + + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) + { + if (request->bRequest == AUDIO_CS_REQ_CUR) + { + TU_LOG1("Clock get current freq %" PRIu32 "\r\n", current_sample_rate); + + audio_control_cur_4_t curf = { (int32_t) tu_htole32(current_sample_rate) }; + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); } - TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - return false; + else if (request->bRequest == AUDIO_CS_REQ_RANGE) + { + audio_control_range_4_n_t(N_SAMPLE_RATES) rangef = + { + .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) + }; + TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); + for(uint8_t i = 0; i < N_SAMPLE_RATES; i++) + { + rangef.subrange[i].bMin = (int32_t) sample_rates[i]; + rangef.subrange[i].bMax = (int32_t) sample_rates[i]; + rangef.subrange[i].bRes = 0; + TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes); + } + + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); + } + } + else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && + request->bRequest == AUDIO_CS_REQ_CUR) + { + audio_control_cur_1_t cur_valid = { .bCur = 1 }; + TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); + } + TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + return false; } // Helper for clock set requests -static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, - uint8_t const *buf) +static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) { - (void)rhport; + (void)rhport; - TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); + TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); + if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) + { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); - current_sample_rate = (uint32_t)((audio_control_cur_4_t const *)buf)->bCur; + current_sample_rate = (uint32_t) ((audio_control_cur_4_t const *)buf)->bCur; - TU_LOG1("Clock set current freq: %" PRIu32 "\r\n", current_sample_rate); + TU_LOG1("Clock set current freq: %" PRIu32 "\r\n", current_sample_rate); - return true; - } else { - TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - return false; - } + return true; + } + else + { + TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + return false; + } } // Helper for feature unit get requests -static bool tud_audio_feature_unit_get_request(uint8_t rhport, - audio_control_request_t const *request) +static bool tud_audio_feature_unit_get_request(uint8_t rhport, audio_control_request_t const *request) { - TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - - if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) { - audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; - TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); - } else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { - if (request->bRequest == AUDIO_CS_REQ_RANGE) { - audio_control_range_2_n_t(1) - range_vol = { .wNumSubRanges = tu_htole16(1), - .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), - tu_htole16(VOLUME_CTRL_0_DB), - tu_htole16(256) } }; - TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, - range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, - range_vol.subrange[0].bRes / 256); - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); - } else if (request->bRequest == AUDIO_CS_REQ_CUR) { - audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; - TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); - return tud_audio_buffer_and_schedule_control_xfer( - rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); - } + TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); + + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) + { + audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; + TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); + } + else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) + { + if (request->bRequest == AUDIO_CS_REQ_RANGE) + { + audio_control_range_2_n_t(1) range_vol = { + .wNumSubRanges = tu_htole16(1), + .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), tu_htole16(VOLUME_CTRL_0_DB), tu_htole16(256) } + }; + TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, + range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, range_vol.subrange[0].bRes / 256); + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); } - TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); + else if (request->bRequest == AUDIO_CS_REQ_CUR) + { + audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; + TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); + return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); + } + } + TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); - return false; + return false; } // Helper for feature unit set requests -static bool tud_audio_feature_unit_set_request(uint8_t rhport, - audio_control_request_t const *request, - uint8_t const *buf) +static bool tud_audio_feature_unit_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) { - (void)rhport; + (void)rhport; - TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); + TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); + TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); + if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) + { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); - mute[request->bChannelNumber] = ((audio_control_cur_1_t const *)buf)->bCur; + mute[request->bChannelNumber] = ((audio_control_cur_1_t const *)buf)->bCur; - TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, - mute[request->bChannelNumber]); + TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, mute[request->bChannelNumber]); - return true; - } else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) { - TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); + return true; + } + else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) + { + TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); - volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; + volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; - TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, - volume[request->bChannelNumber] / 256); + TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, volume[request->bChannelNumber] / 256); - return true; - } else { - TU_LOG1( - "Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", + return true; + } + else + { + TU_LOG1("Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", request->bEntityID, request->bControlSelector, request->bRequest); - return false; - } + return false; + } } //--------------------------------------------------------------------+ @@ -288,89 +297,88 @@ static bool tud_audio_feature_unit_set_request(uint8_t rhport, // Invoked when audio class specific get request received for an entity bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) { - audio_control_request_t const *request = (audio_control_request_t const *)p_request; - - if (request->bEntityID == UAC2_ENTITY_CLOCK) - return tud_audio_clock_get_request(rhport, request); - if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) - return tud_audio_feature_unit_get_request(rhport, request); - else { - TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); - } - return false; + audio_control_request_t const *request = (audio_control_request_t const *)p_request; + + if (request->bEntityID == UAC2_ENTITY_CLOCK) + return tud_audio_clock_get_request(rhport, request); + if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) + return tud_audio_feature_unit_get_request(rhport, request); + else + { + TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); + } + return false; } // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *buf) +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *buf) { - audio_control_request_t const *request = (audio_control_request_t const *)p_request; + audio_control_request_t const *request = (audio_control_request_t const *)p_request; - if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) - return tud_audio_feature_unit_set_request(rhport, request, buf); - if (request->bEntityID == UAC2_ENTITY_CLOCK) - return tud_audio_clock_set_request(rhport, request, buf); - TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", - request->bEntityID, request->bControlSelector, request->bRequest); + if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) + return tud_audio_feature_unit_set_request(rhport, request, buf); + if (request->bEntityID == UAC2_ENTITY_CLOCK) + return tud_audio_clock_set_request(rhport, request, buf); + TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", + request->bEntityID, request->bControlSelector, request->bRequest); - return false; + return false; } -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void)rhport; - uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) - blink_interval_ms = BLINK_MOUNTED; + if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) + blink_interval_ms = BLINK_MOUNTED; - return true; + return true; } -bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) +bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; - uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); - uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); - - TU_LOG2("Set interface %d alt %d\r\n", itf, alt); - if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) - blink_interval_ms = BLINK_STREAMING; - - // Clear buffer when streaming format is changed - spk_data_size = 0; - if (alt != 0) { - current_resolution = resolutions_per_format[alt - 1]; - } - - return true; + (void)rhport; + uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex)); + uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue)); + + TU_LOG2("Set interface %d alt %d\r\n", itf, alt); + if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) + blink_interval_ms = BLINK_STREAMING; + + // Clear buffer when streaming format is changed + spk_data_size = 0; + if(alt != 0) + { + current_resolution = resolutions_per_format[alt-1]; + } + + return true; } -bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, - uint8_t ep_out, uint8_t cur_alt_setting) +bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) { - (void)rhport; - (void)func_id; - (void)ep_out; - (void)cur_alt_setting; + (void)rhport; + (void)func_id; + (void)ep_out; + (void)cur_alt_setting; - spk_data_size = tud_audio_read(spk_buf, n_bytes_received); - return true; + spk_data_size = tud_audio_read(spk_buf, n_bytes_received); + return true; } -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, - uint8_t cur_alt_setting) +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting) { - (void)rhport; - (void)itf; - (void)ep_in; - (void)cur_alt_setting; + (void)rhport; + (void)itf; + (void)ep_in; + (void)cur_alt_setting; - // This callback could be used to fill microphone data separately - return true; + // This callback could be used to fill microphone data separately + return true; } //--------------------------------------------------------------------+ @@ -379,75 +387,82 @@ bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, void audio_task(void) { - // When new data arrived, copy data from speaker buffer, to microphone buffer - // and send it over - // Only support speaker & headphone both have the same resolution - // If one is 16bit another is 24bit be care of LOUD noise ! - if (spk_data_size) { - if (current_resolution == 16) { - int16_t *src = (int16_t *)spk_buf; - int16_t *limit = (int16_t *)spk_buf + spk_data_size / 2; - int16_t *dst = (int16_t *)mic_buf; - while (src < limit) { - // Combine two channels into one - int32_t left = *src++; - int32_t right = *src++; - *dst++ = (int16_t)((left >> 1) + (right >> 1)); - } - tud_audio_write((uint8_t *)mic_buf, (uint16_t)(spk_data_size / 2)); - spk_data_size = 0; - } else if (current_resolution == 24) { - int32_t *src = spk_buf; - int32_t *limit = spk_buf + spk_data_size / 4; - int32_t *dst = mic_buf; - while (src < limit) { - // Combine two channels into one - int32_t left = *src++; - int32_t right = *src++; - *dst++ = (int32_t)((uint32_t)((left >> 1) + (right >> 1)) & 0xffffff00ul); - } - tud_audio_write((uint8_t *)mic_buf, (uint16_t)(spk_data_size / 2)); - spk_data_size = 0; - } + // When new data arrived, copy data from speaker buffer, to microphone buffer + // and send it over + // Only support speaker & headphone both have the same resolution + // If one is 16bit another is 24bit be care of LOUD noise ! + if (spk_data_size) + { + if (current_resolution == 16) + { + int16_t *src = (int16_t*)spk_buf; + int16_t *limit = (int16_t*)spk_buf + spk_data_size / 2; + int16_t *dst = (int16_t*)mic_buf; + while (src < limit) + { + // Combine two channels into one + int32_t left = *src++; + int32_t right = *src++; + *dst++ = (int16_t) ((left >> 1) + (right >> 1)); + } + tud_audio_write((uint8_t *)mic_buf, (uint16_t) (spk_data_size / 2)); + spk_data_size = 0; + } + else if (current_resolution == 24) + { + int32_t *src = spk_buf; + int32_t *limit = spk_buf + spk_data_size / 4; + int32_t *dst = mic_buf; + while (src < limit) + { + // Combine two channels into one + int32_t left = *src++; + int32_t right = *src++; + *dst++ = (int32_t) ((uint32_t) ((left >> 1) + (right >> 1)) & 0xffffff00ul); + } + tud_audio_write((uint8_t *)mic_buf, (uint16_t) (spk_data_size / 2)); + spk_data_size = 0; } + } } void audio_control_task(void) { - // Press on-board button to control volume - // Open host volume control, volume should switch between 10% and 100% - - // Poll every 50ms - const uint32_t interval_ms = 50; - static uint32_t start_ms = 0; - static uint32_t btn_prev = 0; - - if (board_millis() - start_ms < interval_ms) - return; // not enough time - start_ms += interval_ms; - - uint32_t btn = board_button_read(); - - if (!btn_prev && btn) { - // Adjust volume between 0dB (100%) and -30dB (10%) - for (int i = 0; i < CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1; i++) { - volume[i] = volume[i] == 0 ? -VOLUME_CTRL_30_DB : 0; - } - - // 6.1 Interrupt Data Message - const audio_interrupt_data_t data = { - .bInfo = 0, // Class-specific interrupt, originated from an interface - .bAttribute = AUDIO_CS_REQ_CUR, // Caused by current settings - .wValue_cn_or_mcn = 0, // CH0: master volume - .wValue_cs = AUDIO_FU_CTRL_VOLUME, // Volume change - .wIndex_ep_or_int = 0, // From the interface itself - .wIndex_entity_id = UAC2_ENTITY_SPK_FEATURE_UNIT, // From feature unit - }; - - tud_audio_int_write(&data); + // Press on-board button to control volume + // Open host volume control, volume should switch between 10% and 100% + + // Poll every 50ms + const uint32_t interval_ms = 50; + static uint32_t start_ms = 0; + static uint32_t btn_prev = 0; + + if ( board_millis() - start_ms < interval_ms) return; // not enough time + start_ms += interval_ms; + + uint32_t btn = board_button_read(); + + if (!btn_prev && btn) + { + // Adjust volume between 0dB (100%) and -30dB (10%) + for (int i = 0; i < CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1; i++) + { + volume[i] = volume[i] == 0 ? -VOLUME_CTRL_30_DB : 0; } - btn_prev = btn; + // 6.1 Interrupt Data Message + const audio_interrupt_data_t data = { + .bInfo = 0, // Class-specific interrupt, originated from an interface + .bAttribute = AUDIO_CS_REQ_CUR, // Caused by current settings + .wValue_cn_or_mcn = 0, // CH0: master volume + .wValue_cs = AUDIO_FU_CTRL_VOLUME, // Volume change + .wIndex_ep_or_int = 0, // From the interface itself + .wIndex_entity_id = UAC2_ENTITY_SPK_FEATURE_UNIT, // From feature unit + }; + + tud_audio_int_write(&data); + } + + btn_prev = btn; } //--------------------------------------------------------------------+ @@ -455,14 +470,13 @@ void audio_control_task(void) //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; - start_ms += blink_interval_ms; + // Blink every interval ms + if (board_millis() - start_ms < blink_interval_ms) return; + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; + board_led_write(led_state); + led_state = 1 - led_state; } diff --git a/Libraries/tinyusb/examples/device/uac2_headset/src/tusb_config.h b/Libraries/tinyusb/examples/device/uac2_headset/src/tusb_config.h index 84973700c30..328e35f5225 100644 --- a/Libraries/tinyusb/examples/device/uac2_headset/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/uac2_headset/src/tusb_config.h @@ -39,12 +39,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -57,18 +57,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -82,7 +82,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -90,99 +90,79 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_AUDIO 1 -#define CFG_TUD_VENDOR 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_AUDIO 1 +#define CFG_TUD_VENDOR 0 //-------------------------------------------------------------------- // AUDIO CLASS DRIVER CONFIGURATION //-------------------------------------------------------------------- // Allow volume controlled by on-baord button -#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 1 +#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 1 -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_HEADSET_STEREO_DESC_LEN +#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_HEADSET_STEREO_DESC_LEN // How many formats are used, need to adjust USB descriptor if changed -#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 +#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS 2 // Audio format type I specifications /* 24bit/48kHz is the best quality for headset or 24bit/96kHz for 2ch speaker, high-speed is needed beyond this */ -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 48000 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX 2 +#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE 48000 +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 1 +#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX 2 // 16bit in 16bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX 16 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX 2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX 16 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX 2 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX 16 #if defined(__RX__) // 8bit in 8bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 8 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 8 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 1 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 8 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 1 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 8 #else // 24bit in 32bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 24 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX 24 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX 4 +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX 24 #endif // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ \ - TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) * 2 -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX \ - TU_MAX( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_ENABLE_EP_IN 1 + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN)*2 +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ \ - TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT) * 2 -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX \ - TU_MAX( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used +#define CFG_TUD_AUDIO_ENABLE_EP_OUT 1 + +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) +#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) + +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT)*2 +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 2 +#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 2 // Size of control request buffer -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 +#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ 64 #ifdef __cplusplus } diff --git a/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c index 0489892181e..a042ad206f8 100644 --- a/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c @@ -34,107 +34,106 @@ * Auto ProductID layout's Bitmap: * [MSB] AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, // Use Interface Association Descriptor (IAD) for Audio // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *)&desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO_IN 0x03 -#define EPNUM_AUDIO_OUT 0x03 -#define EPNUM_AUDIO_INT 0x01 +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_AUDIO_IN 0x03 + #define EPNUM_AUDIO_OUT 0x03 + #define EPNUM_AUDIO_INT 0x01 #elif CFG_TUSB_MCU == OPT_MCU_NRF5X -// ISO endpoints for NRF5x are fixed to 0x08 (0x88) -#define EPNUM_AUDIO_IN 0x08 -#define EPNUM_AUDIO_OUT 0x08 -#define EPNUM_AUDIO_INT 0x01 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X -// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_AUDIO_IN 0x01 -#define EPNUM_AUDIO_OUT 0x02 -#define EPNUM_AUDIO_INT 0x03 + // ISO endpoints for NRF5x are fixed to 0x08 (0x88) + #define EPNUM_AUDIO_IN 0x08 + #define EPNUM_AUDIO_OUT 0x08 + #define EPNUM_AUDIO_INT 0x01 + +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X + // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_AUDIO_IN 0x01 + #define EPNUM_AUDIO_OUT 0x02 + #define EPNUM_AUDIO_INT 0x03 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X -// FT9XX doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_AUDIO_IN 0x01 -#define EPNUM_AUDIO_OUT 0x02 -#define EPNUM_AUDIO_INT 0x03 + // FT9XX doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_AUDIO_IN 0x01 + #define EPNUM_AUDIO_OUT 0x02 + #define EPNUM_AUDIO_INT 0x03 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// MAX32 doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_AUDIO_IN 0x01 -#define EPNUM_AUDIO_OUT 0x02 -#define EPNUM_AUDIO_INT 0x03 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // MAX32 doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_AUDIO_IN 0x01 + #define EPNUM_AUDIO_OUT 0x02 + #define EPNUM_AUDIO_INT 0x03 #else -#define EPNUM_AUDIO_IN 0x01 -#define EPNUM_AUDIO_OUT 0x01 -#define EPNUM_AUDIO_INT 0x02 + #define EPNUM_AUDIO_IN 0x01 + #define EPNUM_AUDIO_OUT 0x01 + #define EPNUM_AUDIO_INT 0x02 #endif -uint8_t const desc_configuration[] = { +uint8_t const desc_configuration[] = +{ // Config number, interface count, string index, total length, attribute, power in mA TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), // Interface number, string index, EP Out & EP In address, EP size - TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(2, EPNUM_AUDIO_OUT, EPNUM_AUDIO_IN | 0x80, - EPNUM_AUDIO_INT | 0x80) + TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(2, EPNUM_AUDIO_OUT, EPNUM_AUDIO_IN | 0x80, EPNUM_AUDIO_INT | 0x80) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void)index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -143,65 +142,63 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB headset", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB Speakers", // 4: Audio Interface - "TinyUSB Microphone", // 5: Audio Interface +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB headset", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB Speakers", // 4: Audio Interface + "TinyUSB Microphone", // 5: Audio Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h index 012e5dfbd0e..da0da83e837 100644 --- a/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h @@ -29,202 +29,130 @@ // #include "tusb.h" // Unit numbers are arbitrary selected -#define UAC2_ENTITY_CLOCK 0x04 +#define UAC2_ENTITY_CLOCK 0x04 // Speaker path -#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 -#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 +#define UAC2_ENTITY_SPK_INPUT_TERMINAL 0x01 +#define UAC2_ENTITY_SPK_FEATURE_UNIT 0x02 #define UAC2_ENTITY_SPK_OUTPUT_TERMINAL 0x03 // Microphone path -#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 +#define UAC2_ENTITY_MIC_INPUT_TERMINAL 0x11 #define UAC2_ENTITY_MIC_OUTPUT_TERMINAL 0x13 -enum { - ITF_NUM_AUDIO_CONTROL = 0, - ITF_NUM_AUDIO_STREAMING_SPK, - ITF_NUM_AUDIO_STREAMING_MIC, - ITF_NUM_TOTAL +enum +{ + ITF_NUM_AUDIO_CONTROL = 0, + ITF_NUM_AUDIO_STREAMING_SPK, + ITF_NUM_AUDIO_STREAMING_MIC, + ITF_NUM_TOTAL }; -#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN \ - (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ - TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ - TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ - TUD_AUDIO_DESC_STD_AC_INT_EP_LEN /* Interface 1, Alternate 0 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 1, Alternate 1 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 1, Alternate 2 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 2, Alternate 0 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN /* Interface 2, Alternate 1 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN /* Interface 2, Alternate 2 */ \ - + TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) +#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + + TUD_AUDIO_DESC_STD_AC_LEN\ + + TUD_AUDIO_DESC_CS_AC_LEN\ + + TUD_AUDIO_DESC_CLK_SRC_LEN\ + + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN\ + + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + + TUD_AUDIO_DESC_STD_AC_INT_EP_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + /* Interface 1, Alternate 1 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + /* Interface 1, Alternate 2 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + /* Interface 2, Alternate 0 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + /* Interface 2, Alternate 1 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + /* Interface 2, Alternate 2 */\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) -#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin, _epint) \ - /* Standard Interface Association Descriptor (IAD) */ \ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ ITF_NUM_TOTAL, \ - /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ - TUD_AUDIO_DESC_STD_AC( \ - /*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x01, \ - /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ - TUD_AUDIO_DESC_CS_AC( \ - /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, \ - /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + \ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN, \ - /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, \ - /*_assocTerm*/ 0x00, \ - /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ - TUD_AUDIO_DESC_INPUT_TERM( \ - /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, \ - /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ - /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ - /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL( \ - /*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, \ - /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ \ - (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ \ - (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ \ - (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), \ - /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, \ - /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, \ - /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, \ - /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ - TUD_AUDIO_DESC_INPUT_TERM( \ - /*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, \ - /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ - /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ - /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ - TUD_AUDIO_DESC_OUTPUT_TERM( \ - /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, \ - /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, \ - /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, \ - /*_ctrl*/ 0x0000, \ - /*_stridx*/ 0x00), /* Standard AC Interrupt Endpoint Descriptor(4.8.2.1) */ \ - TUD_AUDIO_DESC_STD_AC_INT_EP(/*_ep*/ _epint, /*_interval*/ \ - 0x01), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), \ - /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ \ - 0x05), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x05), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epout, /*_attr*/ \ - (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ADAPTIVE | \ - (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, \ - /*_lockdelay*/ 0x0001), /* Interface 1, Alternate 2 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x05), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epout, /*_attr*/ \ - (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ADAPTIVE | \ - (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ \ - 0x0001), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */ \ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), \ - /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ \ - 0x04), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 2, Alternate 1 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x04), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epin, /*_attr*/ \ - (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ - (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000), /* Interface 2, Alternate 2 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x04), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, \ - /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epin, /*_attr*/ \ - (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ - (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ \ - TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, \ - CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, \ - CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin, _epint) \ + /* Standard Interface Association Descriptor (IAD) */\ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ ITF_NUM_TOTAL, /*_stridx*/ 0x00),\ + /* Standard AC Interface Descriptor(4.7.1) */\ + TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x01, /*_stridx*/ _stridx),\ + /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ + TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ + /* Clock Source Descriptor(4.7.2.1) */\ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, /*_assocTerm*/ 0x00, /*_stridx*/ 0x00), \ + /* Input Terminal Descriptor(4.7.2.4) */\ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ + /* Feature Unit Descriptor(4.7.2.8) */\ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(/*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_stridx*/ 0x00),\ + /* Output Terminal Descriptor(4.7.2.5) */\ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ + /* Input Terminal Descriptor(4.7.2.4) */\ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ + /* Output Terminal Descriptor(4.7.2.5) */\ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ + /* Standard AC Interrupt Endpoint Descriptor(4.8.2.1) */\ + TUD_AUDIO_DESC_STD_AC_INT_EP(/*_ep*/ _epint, /*_interval*/ 0x01), \ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x05),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 1 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ADAPTIVE | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ + /* Interface 1, Alternate 2 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ADAPTIVE | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x04),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 2, Alternate 1 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ + /* Interface 2, Alternate 2 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) #endif diff --git a/Libraries/tinyusb/examples/device/usbtmc/src/main.c b/Libraries/tinyusb/examples/device/usbtmc/src/main.c index 25024a6b1f5..9d8f0783d28 100644 --- a/Libraries/tinyusb/examples/device/usbtmc/src/main.c +++ b/Libraries/tinyusb/examples/device/usbtmc/src/main.c @@ -39,10 +39,10 @@ * - 0 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 0, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 0, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; @@ -52,20 +52,21 @@ void led_blinking_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); + board_init(); - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) { - board_init_after_tusb(); - } + if (board_init_after_tusb) { + board_init_after_tusb(); + } - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(); - usbtmc_app_task_iter(); - } + while (1) + { + tud_task(); // tinyusb device task + led_blinking_task(); + usbtmc_app_task_iter(); + } } //--------------------------------------------------------------------+ @@ -75,13 +76,13 @@ int main(void) // Invoked when device is mounted void tud_mount_cb(void) { - blink_interval_ms = BLINK_MOUNTED; + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted void tud_umount_cb(void) { - blink_interval_ms = BLINK_NOT_MOUNTED; + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended @@ -89,53 +90,57 @@ void tud_umount_cb(void) // Within 7ms, device must draw an average of current less than 2.5 mA from bus void tud_suspend_cb(bool remote_wakeup_en) { - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed void tud_resume_cb(void) { - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ // BLINKING TASK + Indicator pulse //--------------------------------------------------------------------+ + volatile uint8_t doPulse = false; // called from USB context -void led_indicator_pulse(void) -{ - doPulse = true; +void led_indicator_pulse(void) { + doPulse = true; } void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; - if (blink_interval_ms == BLINK_MOUNTED) // Mounted + static uint32_t start_ms = 0; + static bool led_state = false; + if(blink_interval_ms == BLINK_MOUNTED) // Mounted + { + if(doPulse) + { + led_state = true; + board_led_write(true); + start_ms = board_millis(); + doPulse = false; + } + else if (led_state == true) { - if (doPulse) { - led_state = true; - board_led_write(true); - start_ms = board_millis(); - doPulse = false; - } else if (led_state == true) { - if (board_millis() - start_ms < 750) //Spec says blink must be between 500 and 1000 ms. - { - return; // not enough time - } - led_state = false; - board_led_write(false); - } - } else { - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; - - board_led_write(led_state); - led_state = 1 - led_state; // toggle + if ( board_millis() - start_ms < 750) //Spec says blink must be between 500 and 1000 ms. + { + return; // not enough time + } + led_state = false; + board_led_write(false); } + } + else + { + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; + + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } diff --git a/Libraries/tinyusb/examples/device/usbtmc/src/tusb_config.h b/Libraries/tinyusb/examples/device/usbtmc/src/tusb_config.h index 50374c39468..ab486b1088b 100644 --- a/Libraries/tinyusb/examples/device/usbtmc/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/usbtmc/src/tusb_config.h @@ -9,7 +9,7 @@ #define TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -18,12 +18,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -36,18 +36,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -61,7 +61,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -69,17 +69,17 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_USBTMC 1 -#define CFG_TUD_USBTMC_ENABLE_INT_EP 1 -#define CFG_TUD_USBTMC_ENABLE_488 1 +#define CFG_TUD_USBTMC 1 +#define CFG_TUD_USBTMC_ENABLE_INT_EP 1 +#define CFG_TUD_USBTMC_ENABLE_488 1 #ifdef __cplusplus -} + } #endif #endif /* TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/usbtmc/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/usbtmc/src/usb_descriptors.c index 1e20f6b9525..54948291edc 100644 --- a/Libraries/tinyusb/examples/device/usbtmc/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/usbtmc/src/usb_descriptors.c @@ -34,41 +34,43 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = USB_BCD, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = USB_BCD, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, - .bNumConfigurations = 0x01 }; + .bNumConfigurations = 0x01 +}; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ @@ -77,89 +79,94 @@ uint8_t const *tud_descriptor_device_cb(void) #if defined(CFG_TUD_USBTMC) -#define TUD_USBTMC_DESC_MAIN(_itfnum, _bNumEndpoints, _bulkMaxPacketLength) \ - TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, /*_stridx = */ 4u, \ - TUD_USBTMC_PROTOCOL_USB488), \ - TUD_USBTMC_BULK_DESCRIPTORS(/* OUT = */ 0x01, /* IN = */ 0x81, \ - /* packet size = */ _bulkMaxPacketLength) +# define TUD_USBTMC_DESC_MAIN(_itfnum,_bNumEndpoints, _bulkMaxPacketLength) \ + TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, /*_stridx = */ 4u, TUD_USBTMC_PROTOCOL_USB488), \ + TUD_USBTMC_BULK_DESCRIPTORS(/* OUT = */0x01, /* IN = */ 0x81, /* packet size = */_bulkMaxPacketLength) #if CFG_TUD_USBTMC_ENABLE_INT_EP // USBTMC Interrupt xfer always has length of 2, but we use epMaxSize=8 for // compatibility with mcus that only allow 8, 16, 32 or 64 for FS endpoints -#define TUD_USBTMC_DESC(_itfnum, _bulkMaxPacketLength) \ - TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 3, _bulkMaxPacketLength), \ - TUD_USBTMC_INT_DESCRIPTOR(/* INT ep # */ 0x82, /* epMaxSize = */ 8, /* bInterval = */ 16u) -#define TUD_USBTMC_DESC_LEN \ - (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN + TUD_USBTMC_INT_DESCRIPTOR_LEN) +# define TUD_USBTMC_DESC(_itfnum, _bulkMaxPacketLength) \ + TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 3, _bulkMaxPacketLength), \ + TUD_USBTMC_INT_DESCRIPTOR(/* INT ep # */ 0x82, /* epMaxSize = */ 8, /* bInterval = */16u ) +# define TUD_USBTMC_DESC_LEN (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN + TUD_USBTMC_INT_DESCRIPTOR_LEN) #else -#define TUD_USBTMC_DESC(_itfnum, _bulkMaxPacketLength) \ - TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 2u, _bulkMaxPacketLength) -#define TUD_USBTMC_DESC_LEN (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN) +# define TUD_USBTMC_DESC(_itfnum, _bulkMaxPacketLength) \ + TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 2u, _bulkMaxPacketLength) +# define TUD_USBTMC_DESC_LEN (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN) #endif /* CFG_TUD_USBTMC_ENABLE_INT_EP */ #else -#define USBTMC_DESC_LEN (0) +# define USBTMC_DESC_LEN (0) #endif /* CFG_TUD_USBTMC */ -enum { ITF_NUM_USBTMC, ITF_NUM_TOTAL }; +enum +{ + ITF_NUM_USBTMC, + ITF_NUM_TOTAL +}; -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_USBTMC_DESC_LEN) -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -// Note: since CDC EP ( 1 & 2), HID (4) are spot-on, thus we only need to force -// endpoint number for MSC to 5 -#define EPNUM_MSC 0x05 +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_USBTMC_DESC_LEN) + +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + // Note: since CDC EP ( 1 & 2), HID (4) are spot-on, thus we only need to force + // endpoint number for MSC to 5 + #define EPNUM_MSC 0x05 #else -#define EPNUM_MSC 0x03 + #define EPNUM_MSC 0x03 #endif -uint8_t const desc_fs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - TUD_USBTMC_DESC(ITF_NUM_USBTMC, /* _bulkMaxPacketLength = */ 64), +uint8_t const desc_fs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), + + TUD_USBTMC_DESC(ITF_NUM_USBTMC, /* _bulkMaxPacketLength = */ 64), }; #if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_hs_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - TUD_USBTMC_DESC(ITF_NUM_USBTMC, /* _bulkMaxPacketLength = */ 512), + TUD_USBTMC_DESC(ITF_NUM_USBTMC, /* _bulkMaxPacketLength = */ 512), }; // other speed configuration uint8_t desc_other_speed_config[CONFIG_TOTAL_LEN]; // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed -tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_qualifier_t), - .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, - .bcdUSB = USB_BCD, - - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .bNumConfigurations = 0x01, - .bReserved = 0x00 +tusb_desc_device_qualifier_t const desc_device_qualifier = +{ + .bLength = sizeof(tusb_desc_device_qualifier_t), + .bDescriptorType = TUSB_DESC_DEVICE_QUALIFIER, + .bcdUSB = USB_BCD, + + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bNumConfigurations = 0x01, + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void) +uint8_t const* tud_descriptor_device_qualifier_cb(void) { - return (uint8_t const *)&desc_device_qualifier; + return (uint8_t const*) &desc_device_qualifier; } #endif @@ -167,14 +174,14 @@ uint8_t const *tud_descriptor_device_qualifier_cb(void) // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations + (void) index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; #else - return desc_fs_configuration; + return desc_fs_configuration; #endif } @@ -184,64 +191,62 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB USBTMC", // 4: USBTMC +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB USBTMC", // 4: USBTMC }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/usbtmc/src/usbtmc_app.c b/Libraries/tinyusb/examples/device/usbtmc/src/usbtmc_app.c index 6793c2c13bf..fb25982c7de 100644 --- a/Libraries/tinyusb/examples/device/usbtmc/src/usbtmc_app.c +++ b/Libraries/tinyusb/examples/device/usbtmc/src/usbtmc_app.c @@ -24,7 +24,7 @@ */ #include -#include /* atoi */ +#include /* atoi */ #include "tusb.h" #include "bsp/board_api.h" #include "main.h" @@ -67,9 +67,9 @@ tud_usbtmc_app_capabilities = }; #define IEEE4882_STB_QUESTIONABLE (0x08u) -#define IEEE4882_STB_MAV (0x10u) -#define IEEE4882_STB_SER (0x20u) -#define IEEE4882_STB_SRQ (0x40u) +#define IEEE4882_STB_MAV (0x10u) +#define IEEE4882_STB_SER (0x20u) +#define IEEE4882_STB_SRQ (0x40u) static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer123456\r\n"; //static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer and a bunch of other text to make it longer than a packet, perhaps? lets make it three transfers...\n"; @@ -87,10 +87,11 @@ static size_t buffer_len; static size_t buffer_tx_ix; // for transmitting using multiple transfers static uint8_t buffer[225]; // A few packets long should be enough. + void tud_usbtmc_open_cb(uint8_t interface_id) { - (void)interface_id; - tud_usbtmc_start_bus_read(); + (void)interface_id; + tud_usbtmc_start_bus_read(); } #if (CFG_TUD_USBTMC_ENABLE_488) @@ -100,206 +101,220 @@ usbtmc_response_capabilities_t const * #endif tud_usbtmc_get_capabilities_cb() { - return &tud_usbtmc_app_capabilities; + return &tud_usbtmc_app_capabilities; } -bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t *msg) -{ - (void)msg; - // Let trigger set the SRQ - status |= IEEE4882_STB_SRQ; - return true; + +bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t* msg) { + (void)msg; + // Let trigger set the SRQ + status |= IEEE4882_STB_SRQ; + return true; } -bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const *msgHeader) +bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const * msgHeader) { - (void)msgHeader; - buffer_len = 0; - if (msgHeader->TransferSize > sizeof(buffer)) { - return false; - } - return true; + (void)msgHeader; + buffer_len = 0; + if(msgHeader->TransferSize > sizeof(buffer)) + { + + return false; + } + return true; } bool tud_usbtmc_msg_data_cb(void *data, size_t len, bool transfer_complete) { - // If transfer isn't finished, we just ignore it (for now) + // If transfer isn't finished, we just ignore it (for now) - if (len + buffer_len < sizeof(buffer)) { - memcpy(&(buffer[buffer_len]), data, len); - buffer_len += len; - } else { - return false; // buffer overflow! - } - queryState = transfer_complete; - idnQuery = 0; + if(len + buffer_len < sizeof(buffer)) + { + memcpy(&(buffer[buffer_len]), data, len); + buffer_len += len; + } + else + { + return false; // buffer overflow! + } + queryState = transfer_complete; + idnQuery = 0; - if (transfer_complete && (len >= 4) && - (!strncmp("*idn?", data, 4) || !strncmp("*IDN?", data, 4))) { - idnQuery = 1; - } + if ( transfer_complete && (len >= 4) && + (!strncmp("*idn?", data, 4) || !strncmp("*IDN?", data, 4)) ) + { + idnQuery = 1; + } - if (transfer_complete && (!strncmp("delay ", data, 5) || !strncmp("DELAY ", data, 5))) { - queryState = 0; - int d = atoi((char *)data + 5); - if (d > 10000) - d = 10000; - if (d < 0) - d = 0; - resp_delay = (uint32_t)d; - } - tud_usbtmc_start_bus_read(); - return true; + if ( transfer_complete && + (!strncmp("delay ", data, 5) || !strncmp("DELAY ", data, 5)) ) + { + queryState = 0; + int d = atoi((char*)data + 5); + if(d > 10000) + d = 10000; + if(d<0) + d=0; + resp_delay = (uint32_t)d; + } + tud_usbtmc_start_bus_read(); + return true; } bool tud_usbtmc_msgBulkIn_complete_cb() { - if ((buffer_tx_ix == buffer_len) || idnQuery) // done - { - status &= (uint8_t) ~(IEEE4882_STB_MAV); // clear MAV - queryState = 0; - bulkInStarted = 0; - buffer_tx_ix = 0; - } - tud_usbtmc_start_bus_read(); + if((buffer_tx_ix == buffer_len) || idnQuery) // done + { + status &= (uint8_t)~(IEEE4882_STB_MAV); // clear MAV + queryState = 0; + bulkInStarted = 0; + buffer_tx_ix = 0; + } + tud_usbtmc_start_bus_read(); - return true; + return true; } static unsigned int msgReqLen; -bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const *request) +bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const * request) { - msgReqLen = request->TransferSize; + msgReqLen = request->TransferSize; #ifdef xDEBUG - uart_tx_str_sync("MSG_IN_DATA: Requested!\r\n"); + uart_tx_str_sync("MSG_IN_DATA: Requested!\r\n"); #endif - if (queryState == 0 || (buffer_tx_ix == 0)) { - TU_ASSERT(bulkInStarted == 0); - bulkInStarted = 1; - - // > If a USBTMC interface receives a Bulk-IN request prior to receiving a USBTMC command message - // that expects a response, the device must NAK the request (*not stall*) - } else { - size_t txlen = tu_min32(buffer_len - buffer_tx_ix, msgReqLen); - tud_usbtmc_transmit_dev_msg_data(&buffer[buffer_tx_ix], txlen, - (buffer_tx_ix + txlen) == buffer_len, false); - buffer_tx_ix += txlen; - } - // Always return true indicating not to stall the EP. - return true; + if(queryState == 0 || (buffer_tx_ix == 0)) + { + TU_ASSERT(bulkInStarted == 0); + bulkInStarted = 1; + + // > If a USBTMC interface receives a Bulk-IN request prior to receiving a USBTMC command message + // that expects a response, the device must NAK the request (*not stall*) + } + else + { + size_t txlen = tu_min32(buffer_len-buffer_tx_ix,msgReqLen); + tud_usbtmc_transmit_dev_msg_data(&buffer[buffer_tx_ix], txlen, + (buffer_tx_ix+txlen) == buffer_len, false); + buffer_tx_ix += txlen; + } + // Always return true indicating not to stall the EP. + return true; } -void usbtmc_app_task_iter(void) -{ - switch (queryState) { - case 0: - break; - case 1: - queryDelayStart = board_millis(); - queryState = 2; - break; - case 2: - if ((board_millis() - queryDelayStart) > resp_delay) { - queryDelayStart = board_millis(); - queryState = 3; - status |= 0x10u; // MAV - status |= 0x40u; // SRQ - } - break; - case 3: - if ((board_millis() - queryDelayStart) > resp_delay) { - queryState = 4; - } - break; - case 4: // time to transmit; - if (bulkInStarted && (buffer_tx_ix == 0)) { - if (idnQuery) { - tud_usbtmc_transmit_dev_msg_data(idn, tu_min32(sizeof(idn) - 1, msgReqLen), true, - false); - queryState = 0; - bulkInStarted = 0; - } else { - buffer_tx_ix = tu_min32(buffer_len, msgReqLen); - tud_usbtmc_transmit_dev_msg_data(buffer, buffer_tx_ix, buffer_tx_ix == buffer_len, - false); - } - // MAV is cleared in the transfer complete callback. - } - break; - default: - TU_ASSERT(false, ); +void usbtmc_app_task_iter(void) { + switch(queryState) { + case 0: + break; + case 1: + queryDelayStart = board_millis(); + queryState = 2; + break; + case 2: + if( (board_millis() - queryDelayStart) > resp_delay) { + queryDelayStart = board_millis(); + queryState=3; + status |= 0x10u; // MAV + status |= 0x40u; // SRQ + } + break; + case 3: + if( (board_millis() - queryDelayStart) > resp_delay) { + queryState = 4; + } + break; + case 4: // time to transmit; + if(bulkInStarted && (buffer_tx_ix == 0)) { + if(idnQuery) + { + tud_usbtmc_transmit_dev_msg_data(idn, tu_min32(sizeof(idn)-1,msgReqLen),true,false); + queryState = 0; + bulkInStarted = 0; + } + else + { + buffer_tx_ix = tu_min32(buffer_len,msgReqLen); + tud_usbtmc_transmit_dev_msg_data(buffer, buffer_tx_ix, buffer_tx_ix == buffer_len, false); + } + // MAV is cleared in the transfer complete callback. } + break; + default: + TU_ASSERT(false,); + } } bool tud_usbtmc_initiate_clear_cb(uint8_t *tmcResult) { - *tmcResult = USBTMC_STATUS_SUCCESS; - queryState = 0; - bulkInStarted = false; - status = 0; - return true; + *tmcResult = USBTMC_STATUS_SUCCESS; + queryState = 0; + bulkInStarted = false; + status = 0; + return true; } bool tud_usbtmc_check_clear_cb(usbtmc_get_clear_status_rsp_t *rsp) { - queryState = 0; - bulkInStarted = false; - status = 0; - buffer_tx_ix = 0u; - buffer_len = 0u; - rsp->USBTMC_status = USBTMC_STATUS_SUCCESS; - rsp->bmClear.BulkInFifoBytes = 0u; - return true; + queryState = 0; + bulkInStarted = false; + status = 0; + buffer_tx_ix = 0u; + buffer_len = 0u; + rsp->USBTMC_status = USBTMC_STATUS_SUCCESS; + rsp->bmClear.BulkInFifoBytes = 0u; + return true; } bool tud_usbtmc_initiate_abort_bulk_in_cb(uint8_t *tmcResult) { - bulkInStarted = 0; - *tmcResult = USBTMC_STATUS_SUCCESS; - return true; + bulkInStarted = 0; + *tmcResult = USBTMC_STATUS_SUCCESS; + return true; } bool tud_usbtmc_check_abort_bulk_in_cb(usbtmc_check_abort_bulk_rsp_t *rsp) { - (void)rsp; - tud_usbtmc_start_bus_read(); - return true; + (void)rsp; + tud_usbtmc_start_bus_read(); + return true; } bool tud_usbtmc_initiate_abort_bulk_out_cb(uint8_t *tmcResult) { - *tmcResult = USBTMC_STATUS_SUCCESS; - return true; + *tmcResult = USBTMC_STATUS_SUCCESS; + return true; + } bool tud_usbtmc_check_abort_bulk_out_cb(usbtmc_check_abort_bulk_rsp_t *rsp) { - (void)rsp; - tud_usbtmc_start_bus_read(); - return true; + (void)rsp; + tud_usbtmc_start_bus_read(); + return true; } -void tud_usbtmc_bulkIn_clearFeature_cb(void) {} +void tud_usbtmc_bulkIn_clearFeature_cb(void) +{ +} void tud_usbtmc_bulkOut_clearFeature_cb(void) { - tud_usbtmc_start_bus_read(); + tud_usbtmc_start_bus_read(); } // Return status byte, but put the transfer result status code in the rspResult argument. uint8_t tud_usbtmc_get_stb_cb(uint8_t *tmcResult) { - uint8_t old_status = status; - status = (uint8_t)(status & ~(IEEE4882_STB_SRQ)); // clear SRQ + uint8_t old_status = status; + status = (uint8_t)(status & ~(IEEE4882_STB_SRQ)); // clear SRQ - *tmcResult = USBTMC_STATUS_SUCCESS; - // Increment status so that we see different results on each read... + *tmcResult = USBTMC_STATUS_SUCCESS; + // Increment status so that we see different results on each read... - return old_status; + return old_status; } -bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const *msg, uint8_t *tmcResult) +bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const * msg, uint8_t *tmcResult) { - (void)msg; - led_indicator_pulse(); - *tmcResult = USBTMC_STATUS_SUCCESS; - return true; + (void)msg; + led_indicator_pulse(); + *tmcResult = USBTMC_STATUS_SUCCESS; + return true; } diff --git a/Libraries/tinyusb/examples/device/video_capture/src/images.h b/Libraries/tinyusb/examples/device/video_capture/src/images.h index 41dce26d75c..ac372cb16d6 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/images.h +++ b/Libraries/tinyusb/examples/device/video_capture/src/images.h @@ -1,25219 +1,1939 @@ #if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) // uncopmressed frame static const unsigned char frame_buffer[128 * (96 + 1) * 2] = { - /* 0 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 1 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 2 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 3 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 4 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 5 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 6 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 7 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 8 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 9 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 10 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 11 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 12 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 13 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 14 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 15 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 16 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 17 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 18 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 19 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 20 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 21 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 22 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 23 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 24 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 25 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 26 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 27 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 28 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 29 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 30 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 31 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 32 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 33 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 34 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 35 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 36 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 37 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 38 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 39 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 40 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 41 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 42 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 43 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 44 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 45 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 46 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 47 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 48 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 49 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 50 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 51 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 52 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 53 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 54 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 55 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 56 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 57 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 58 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 59 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 60 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 61 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 62 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 63 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 64 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 65 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 66 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 67 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 68 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 69 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 70 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 71 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 72 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 73 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 74 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 75 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 76 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 77 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 78 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 79 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 80 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 81 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 82 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 83 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 84 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 85 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 86 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 87 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 88 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 89 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 90 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 91 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 92 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 93 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 94 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 95 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 96 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, + /* 0 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 1 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 2 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 3 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 4 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 5 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 6 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 7 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 8 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 9 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 10 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 11 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 12 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 13 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 14 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 15 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 16 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 17 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 18 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 19 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 20 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 21 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 22 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 23 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 24 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 25 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 26 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 27 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 28 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 29 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 30 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 31 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 32 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 33 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 34 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 35 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 36 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 37 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 38 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 39 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 40 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 41 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 42 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 43 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 44 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 45 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 46 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 47 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 48 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 49 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 50 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 51 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 52 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 53 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 54 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 55 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 56 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 57 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 58 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 59 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 60 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 61 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 62 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 63 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 64 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 65 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 66 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 67 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 68 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 69 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 70 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 71 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 72 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 73 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 74 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 75 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 76 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 77 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 78 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 79 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 80 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 81 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 82 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 83 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 84 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 85 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 86 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 87 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 88 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 89 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 90 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 91 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 92 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 93 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 94 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 95 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 96 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, }; #else // mpeg compressed data (not CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) -#define color_bar_0_jpg_len 511 -#define color_bar_1_jpg_len 512 -#define color_bar_2_jpg_len 511 -#define color_bar_3_jpg_len 511 -#define color_bar_4_jpg_len 511 -#define color_bar_5_jpg_len 512 -#define color_bar_6_jpg_len 511 -#define color_bar_7_jpg_len 511 +#define color_bar_0_jpg_len 511 +#define color_bar_1_jpg_len 512 +#define color_bar_2_jpg_len 511 +#define color_bar_3_jpg_len 511 +#define color_bar_4_jpg_len 511 +#define color_bar_5_jpg_len 512 +#define color_bar_6_jpg_len 511 +#define color_bar_7_jpg_len 511 unsigned char color_bar_0_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x92, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x92, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0xff, 0xd9 }; unsigned char color_bar_1_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x7d, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x7f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x7d, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x7f, 0xff, 0xd9 }; unsigned char color_bar_2_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x75, 0x14, 0xcc, - 0xc4, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x75, 0x14, 0xcc, + 0xc4, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 }; unsigned char color_bar_3_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x5a, 0x2a, 0x08, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x91, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x5a, 0x2a, 0x08, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x91, 0xff, 0xd9 }; unsigned char color_bar_4_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x4a, 0x2a, 0xcb, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x9f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x4a, 0x2a, 0xcb, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x9f, 0xff, 0xd9 }; unsigned char color_bar_5_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x6d, 0x14, 0x8d, - 0x04, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x7f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x6d, 0x14, 0x8d, + 0x04, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x7f, 0xff, 0xd9 }; unsigned char color_bar_6_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x65, 0x15, 0xa0, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x65, 0x15, 0xa0, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 }; unsigned char color_bar_7_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x8e, 0x8a, 0x00, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x47, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x8e, 0x8a, 0x00, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x47, 0xff, 0xd9 }; #endif diff --git a/Libraries/tinyusb/examples/device/video_capture/src/main.c b/Libraries/tinyusb/examples/device/video_capture/src/main.c index 4ac8d9acdb9..ddb51e03ad1 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/main.c +++ b/Libraries/tinyusb/examples/device/video_capture/src/main.c @@ -41,44 +41,44 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; -void led_blinking_task(void *param); +void led_blinking_task(void* param); void usb_device_task(void *param); -void video_task(void *param); +void video_task(void* param); #if CFG_TUSB_OS == OPT_OS_FREERTOS void freertos_init_task(void); #endif + //--------------------------------------------------------------------+ // Main //--------------------------------------------------------------------+ -int main(void) -{ - board_init(); +int main(void) { + board_init(); - // If using FreeRTOS: create blinky, tinyusb device, video task + // If using FreeRTOS: create blinky, tinyusb device, video task #if CFG_TUSB_OS == OPT_OS_FREERTOS - freertos_init_task(); + freertos_init_task(); #else - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(NULL); - video_task(NULL); - } + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(NULL); + video_task(NULL); + } #endif } @@ -87,30 +87,26 @@ int main(void) //--------------------------------------------------------------------+ // Invoked when device is mounted -void tud_mount_cb(void) -{ - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) { + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) -{ - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) { + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended // remote_wakeup_en : if host allow us to perform remote wakeup // Within 7ms, device must draw an average of current less than 2.5 mA from bus -void tud_suspend_cb(bool remote_wakeup_en) -{ - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; +void tud_suspend_cb(bool remote_wakeup_en) { + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed -void tud_resume_cb(void) -{ - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +void tud_resume_cb(void) { + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -127,13 +123,17 @@ static unsigned interval_ms = 1000 / FRAME_RATE; #if !defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) static struct { - uint32_t size; - uint8_t const *buffer; + uint32_t size; + uint8_t const *buffer; } const frames[] = { - { color_bar_0_jpg_len, color_bar_0_jpg }, { color_bar_1_jpg_len, color_bar_1_jpg }, - { color_bar_2_jpg_len, color_bar_2_jpg }, { color_bar_3_jpg_len, color_bar_3_jpg }, - { color_bar_4_jpg_len, color_bar_4_jpg }, { color_bar_5_jpg_len, color_bar_5_jpg }, - { color_bar_6_jpg_len, color_bar_6_jpg }, { color_bar_7_jpg_len, color_bar_7_jpg }, + {color_bar_0_jpg_len, color_bar_0_jpg}, + {color_bar_1_jpg_len, color_bar_1_jpg}, + {color_bar_2_jpg_len, color_bar_2_jpg}, + {color_bar_3_jpg_len, color_bar_3_jpg}, + {color_bar_4_jpg_len, color_bar_4_jpg}, + {color_bar_5_jpg_len, color_bar_5_jpg}, + {color_bar_6_jpg_len, color_bar_6_jpg}, + {color_bar_7_jpg_len, color_bar_7_jpg}, }; #endif @@ -142,154 +142,142 @@ static struct { // YUY2 frame buffer static uint8_t frame_buffer[FRAME_WIDTH * FRAME_HEIGHT * 16 / 8]; -static void fill_color_bar(uint8_t *buffer, unsigned start_position) -{ - /* EBU color bars: https://stackoverflow.com/questions/6939422 */ - static uint8_t const bar_color[8][4] = { - /* Y, U, Y, V */ - { 235, 128, 235, 128 }, /* 100% White */ - { 219, 16, 219, 138 }, /* Yellow */ - { 188, 154, 188, 16 }, /* Cyan */ - { 173, 42, 173, 26 }, /* Green */ - { 78, 214, 78, 230 }, /* Magenta */ - { 63, 102, 63, 240 }, /* Red */ - { 32, 240, 32, 118 }, /* Blue */ - { 16, 128, 16, 128 }, /* Black */ - }; - uint8_t *p; - - /* Generate the 1st line */ - uint8_t *end = &buffer[FRAME_WIDTH * 2]; - unsigned idx = (FRAME_WIDTH / 2 - 1) - (start_position % (FRAME_WIDTH / 2)); - p = &buffer[idx * 4]; - for (unsigned i = 0; i < 8; ++i) { - for (int j = 0; j < FRAME_WIDTH / (2 * 8); ++j) { - memcpy(p, &bar_color[i], 4); - p += 4; - if (end <= p) { - p = buffer; - } - } - } - - /* Duplicate the 1st line to the others */ - p = &buffer[FRAME_WIDTH * 2]; - for (unsigned i = 1; i < FRAME_HEIGHT; ++i) { - memcpy(p, buffer, FRAME_WIDTH * 2); - p += FRAME_WIDTH * 2; +static void fill_color_bar(uint8_t* buffer, unsigned start_position) { + /* EBU color bars: https://stackoverflow.com/questions/6939422 */ + static uint8_t const bar_color[8][4] = { + /* Y, U, Y, V */ + { 235, 128, 235, 128}, /* 100% White */ + { 219, 16, 219, 138}, /* Yellow */ + { 188, 154, 188, 16}, /* Cyan */ + { 173, 42, 173, 26}, /* Green */ + { 78, 214, 78, 230}, /* Magenta */ + { 63, 102, 63, 240}, /* Red */ + { 32, 240, 32, 118}, /* Blue */ + { 16, 128, 16, 128}, /* Black */ + }; + uint8_t* p; + + /* Generate the 1st line */ + uint8_t* end = &buffer[FRAME_WIDTH * 2]; + unsigned idx = (FRAME_WIDTH / 2 - 1) - (start_position % (FRAME_WIDTH / 2)); + p = &buffer[idx * 4]; + for (unsigned i = 0; i < 8; ++i) { + for (int j = 0; j < FRAME_WIDTH / (2 * 8); ++j) { + memcpy(p, &bar_color[i], 4); + p += 4; + if (end <= p) { + p = buffer; + } } + } + + /* Duplicate the 1st line to the others */ + p = &buffer[FRAME_WIDTH * 2]; + for (unsigned i = 1; i < FRAME_HEIGHT; ++i) { + memcpy(p, buffer, FRAME_WIDTH * 2); + p += FRAME_WIDTH * 2; + } } #endif -void video_send_frame(void) -{ - static unsigned start_ms = 0; - static unsigned already_sent = 0; +void video_send_frame(void) { + static unsigned start_ms = 0; + static unsigned already_sent = 0; - if (!tud_video_n_streaming(0, 0)) { - already_sent = 0; - frame_num = 0; - return; - } + if (!tud_video_n_streaming(0, 0)) { + already_sent = 0; + frame_num = 0; + return; + } - if (!already_sent) { - already_sent = 1; - tx_busy = 1; - start_ms = board_millis(); + if (!already_sent) { + already_sent = 1; + tx_busy = 1; + start_ms = board_millis(); #ifdef CFG_EXAMPLE_VIDEO_READONLY -#if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) - tud_video_n_frame_xfer( - 0, 0, (void *)(uintptr_t)&frame_buffer[(frame_num % (FRAME_WIDTH / 2)) * 4], - FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); -#else - tud_video_n_frame_xfer(0, 0, (void *)(uintptr_t)frames[frame_num % 8].buffer, - frames[frame_num % 8].size); -#endif + #if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) + tud_video_n_frame_xfer(0, 0, (void*)(uintptr_t)&frame_buffer[(frame_num % (FRAME_WIDTH / 2)) * 4], + FRAME_WIDTH * FRAME_HEIGHT * 16/8); + #else + tud_video_n_frame_xfer(0, 0, (void*)(uintptr_t)frames[frame_num % 8].buffer, frames[frame_num % 8].size); + #endif #else - fill_color_bar(frame_buffer, frame_num); - tud_video_n_frame_xfer(0, 0, (void *)frame_buffer, FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); + fill_color_bar(frame_buffer, frame_num); + tud_video_n_frame_xfer(0, 0, (void*) frame_buffer, FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); #endif - } + } - unsigned cur = board_millis(); - if (cur - start_ms < interval_ms) - return; // not enough time - if (tx_busy) - return; - start_ms += interval_ms; - tx_busy = 1; + unsigned cur = board_millis(); + if (cur - start_ms < interval_ms) return; // not enough time + if (tx_busy) return; + start_ms += interval_ms; + tx_busy = 1; #ifdef CFG_EXAMPLE_VIDEO_READONLY -#if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) - tud_video_n_frame_xfer(0, 0, - (void *)(uintptr_t)&frame_buffer[(frame_num % (FRAME_WIDTH / 2)) * 4], - FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); -#else - tud_video_n_frame_xfer(0, 0, (void *)(uintptr_t)frames[frame_num % 8].buffer, - frames[frame_num % 8].size); -#endif + #if defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) + tud_video_n_frame_xfer(0, 0, (void*)(uintptr_t)&frame_buffer[(frame_num % (FRAME_WIDTH / 2)) * 4], + FRAME_WIDTH * FRAME_HEIGHT * 16/8); + #else + tud_video_n_frame_xfer(0, 0, (void*)(uintptr_t)frames[frame_num % 8].buffer, frames[frame_num % 8].size); + #endif #else - fill_color_bar(frame_buffer, frame_num); - tud_video_n_frame_xfer(0, 0, (void *)frame_buffer, FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); + fill_color_bar(frame_buffer, frame_num); + tud_video_n_frame_xfer(0, 0, (void*) frame_buffer, FRAME_WIDTH * FRAME_HEIGHT * 16 / 8); #endif } -void video_task(void *param) -{ - (void)param; - while (1) { - video_send_frame(); +void video_task(void* param) { + (void) param; -#if CFG_TUSB_OS == OPT_OS_FREERTOS - vTaskDelay(interval_ms / portTICK_PERIOD_MS); -#else - return; -#endif - } + while(1) { + video_send_frame(); + + #if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(interval_ms / portTICK_PERIOD_MS); + #else + return; + #endif + } } -void tud_video_frame_xfer_complete_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) -{ - (void)ctl_idx; - (void)stm_idx; - tx_busy = 0; - /* flip buffer */ - ++frame_num; +void tud_video_frame_xfer_complete_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { + (void) ctl_idx; + (void) stm_idx; + tx_busy = 0; + /* flip buffer */ + ++frame_num; } int tud_video_commit_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, - video_probe_and_commit_control_t const *parameters) -{ - (void)ctl_idx; - (void)stm_idx; - /* convert unit to ms from 100 ns */ - interval_ms = parameters->dwFrameInterval / 10000; - return VIDEO_ERROR_NONE; + video_probe_and_commit_control_t const* parameters) { + (void) ctl_idx; + (void) stm_idx; + /* convert unit to ms from 100 ns */ + interval_ms = parameters->dwFrameInterval / 10000; + return VIDEO_ERROR_NONE; } //--------------------------------------------------------------------+ // Blinking Task //--------------------------------------------------------------------+ -void led_blinking_task(void *param) -{ - (void)param; - static uint32_t start_ms = 0; - static bool led_state = false; - - while (1) { -#if CFG_TUSB_OS == OPT_OS_FREERTOS - vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); -#else - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time -#endif - - start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } +void led_blinking_task(void* param) { + (void) param; + static uint32_t start_ms = 0; + static bool led_state = false; + + while (1) { + #if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); + #else + if (board_millis() - start_ms < blink_interval_ms) return; // not enough time + #endif + + start_ms += blink_interval_ms; + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } //--------------------------------------------------------------------+ @@ -297,19 +285,18 @@ void led_blinking_task(void *param) //--------------------------------------------------------------------+ #if CFG_TUSB_OS == OPT_OS_FREERTOS -#define BLINKY_STACK_SIZE configMINIMAL_STACK_SIZE -#define VIDEO_STACK_SIZE (configMINIMAL_STACK_SIZE * 4) +#define BLINKY_STACK_SIZE configMINIMAL_STACK_SIZE +#define VIDEO_STACK_SIZE (configMINIMAL_STACK_SIZE*4) #if TUP_MCU_ESPRESSIF -#define USBD_STACK_SIZE 4096 -int main(void); -void app_main(void) -{ + #define USBD_STACK_SIZE 4096 + int main(void); + void app_main(void) { main(); -} + } #else -// Increase stack size when debug log is enabled -#define USBD_STACK_SIZE (3 * configMINIMAL_STACK_SIZE / 2) * (CFG_TUSB_DEBUG ? 2 : 1) + // Increase stack size when debug log is enabled + #define USBD_STACK_SIZE (3*configMINIMAL_STACK_SIZE/2) * (CFG_TUSB_DEBUG ? 2 : 1) #endif // static task @@ -317,53 +304,48 @@ void app_main(void) StackType_t blinky_stack[BLINKY_STACK_SIZE]; StaticTask_t blinky_taskdef; -StackType_t usb_device_stack[USBD_STACK_SIZE]; +StackType_t usb_device_stack[USBD_STACK_SIZE]; StaticTask_t usb_device_taskdef; -StackType_t video_stack[VIDEO_STACK_SIZE]; +StackType_t video_stack[VIDEO_STACK_SIZE]; StaticTask_t video_taskdef; #endif // USB Device Driver task // This top level thread process all usb events and invoke callbacks -void usb_device_task(void *param) -{ - (void)param; - - // init device stack on configured roothub port - // This should be called after scheduler/kernel is started. - // Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API. - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - // RTOS forever loop - while (1) { - // put this thread to waiting state until there is new events - tud_task(); - } +void usb_device_task(void *param) { + (void) param; + + // init device stack on configured roothub port + // This should be called after scheduler/kernel is started. + // Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API. + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + // RTOS forever loop + while (1) { + // put this thread to waiting state until there is new events + tud_task(); + } } -void freertos_init_task(void) -{ -#if configSUPPORT_STATIC_ALLOCATION - xTaskCreateStatic(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, blinky_stack, - &blinky_taskdef); - xTaskCreateStatic(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, - usb_device_stack, &usb_device_taskdef); - xTaskCreateStatic(video_task, "cdc", VIDEO_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, - video_stack, &video_taskdef); -#else - xTaskCreate(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, NULL); - xTaskCreate(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL); - xTaskCreate(video_task, "video", VIDEO_STACK_SZIE, NULL, configMAX_PRIORITIES - 2, NULL); -#endif - -// skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 -#if !TUP_MCU_ESPRESSIF - vTaskStartScheduler(); -#endif +void freertos_init_task(void) { + #if configSUPPORT_STATIC_ALLOCATION + xTaskCreateStatic(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, blinky_stack, &blinky_taskdef); + xTaskCreateStatic(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES-1, usb_device_stack, &usb_device_taskdef); + xTaskCreateStatic(video_task, "cdc", VIDEO_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, video_stack, &video_taskdef); + #else + xTaskCreate(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, NULL); + xTaskCreate(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL); + xTaskCreate(video_task, "video", VIDEO_STACK_SZIE, NULL, configMAX_PRIORITIES - 2, NULL); + #endif + + // skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 + #if !TUP_MCU_ESPRESSIF + vTaskStartScheduler(); + #endif } #endif diff --git a/Libraries/tinyusb/examples/device/video_capture/src/tusb_config.h b/Libraries/tinyusb/examples/device/video_capture/src/tusb_config.h index 9ad8539e7a7..21483a2da74 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/video_capture/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,23 +54,23 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos / +#define CFG_TUSB_OS_INC_PATH freertos/ #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -84,7 +84,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -92,18 +92,18 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// // The number of video control interfaces -#define CFG_TUD_VIDEO 1 +#define CFG_TUD_VIDEO 1 // The number of video streaming interfaces -#define CFG_TUD_VIDEO_STREAMING 1 +#define CFG_TUD_VIDEO_STREAMING 1 // video streaming endpoint buffer size -#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256 +#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256 // use bulk endpoint for streaming interface #define CFG_TUD_VIDEO_STREAMING_BULK 1 @@ -112,7 +112,7 @@ extern "C" { //#define CFG_EXAMPLE_VIDEO_DISABLE_MJPEG #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.c index 2db45a46dcd..5011bee183c 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.c @@ -33,66 +33,64 @@ * Auto ProductID layout's Bitmap: * [MSB] VIDEO | AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6) ) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, - STRID_UVC_CONTROL, - STRID_UVC_STREAMING, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, + STRID_UVC_CONTROL, + STRID_UVC_STREAMING, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UVC Control", // 4: UVC Interface - "UVC Streaming", // 5: UVC Interface +char const* string_desc_arr[] = { + (const char[]) {0x09, 0x04}, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UVC Control", // 4: UVC Interface + "UVC Streaming", // 5: UVC Interface }; //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for Video // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = STRID_MANUFACTURER, - .iProduct = STRID_PRODUCT, - .iSerialNumber = STRID_SERIAL, + .iManufacturer = STRID_MANUFACTURER, + .iProduct = STRID_PRODUCT, + .iSerialNumber = STRID_SERIAL, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) -{ - return (uint8_t const *)&desc_device; +uint8_t const* tud_descriptor_device_cb(void) { + return (uint8_t const*) &desc_device; } //--------------------------------------------------------------------+ @@ -100,71 +98,75 @@ uint8_t const *tud_descriptor_device_cb(void) //--------------------------------------------------------------------+ /* Time stamp base clock. It is a deprecated parameter. */ -#define UVC_CLOCK_FREQUENCY 27000000 +#define UVC_CLOCK_FREQUENCY 27000000 /* video capture path */ -#define UVC_ENTITY_CAP_INPUT_TERMINAL 0x01 +#define UVC_ENTITY_CAP_INPUT_TERMINAL 0x01 #define UVC_ENTITY_CAP_OUTPUT_TERMINAL 0x02 -enum { ITF_NUM_VIDEO_CONTROL, ITF_NUM_VIDEO_STREAMING, ITF_NUM_TOTAL }; +enum { + ITF_NUM_VIDEO_CONTROL, + ITF_NUM_VIDEO_STREAMING, + ITF_NUM_TOTAL +}; // Select appropriate endpoint number #if TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -#define EPNUM_VIDEO_IN (CFG_TUD_VIDEO_STREAMING_BULK ? 0x82 : 0x83) + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... + #define EPNUM_VIDEO_IN (CFG_TUD_VIDEO_STREAMING_BULK ? 0x82 : 0x83) #elif TU_CHECK_MCU(OPT_MCU_NRF5X) -// nRF5x ISO can only be endpoint 8 -#define EPNUM_VIDEO_IN (CFG_TUD_VIDEO_STREAMING_BULK ? 0x81 : 0x88) + // nRF5x ISO can only be endpoint 8 + #define EPNUM_VIDEO_IN (CFG_TUD_VIDEO_STREAMING_BULK ? 0x81 : 0x88) #else -#define EPNUM_VIDEO_IN 0x81 + #define EPNUM_VIDEO_IN 0x81 #endif #if defined(CFG_EXAMPLE_VIDEO_READONLY) && !defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) -#define USE_MJPEG 1 + #define USE_MJPEG 1 #else -#define USE_MJPEG 0 + #define USE_MJPEG 0 #endif #define USE_ISO_STREAMING (!CFG_TUD_VIDEO_STREAMING_BULK) typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_control_header_1itf_t header; - tusb_desc_video_control_camera_terminal_t camera_terminal; - tusb_desc_video_control_output_terminal_t output_terminal; + tusb_desc_interface_t itf; + tusb_desc_video_control_header_1itf_t header; + tusb_desc_video_control_camera_terminal_t camera_terminal; + tusb_desc_video_control_output_terminal_t output_terminal; } uvc_control_desc_t; /* Windows support YUY2 and NV12 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */ typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_streaming_input_header_1byte_t header; + tusb_desc_interface_t itf; + tusb_desc_video_streaming_input_header_1byte_t header; #if USE_MJPEG - tusb_desc_video_format_mjpeg_t format; - tusb_desc_video_frame_mjpeg_continuous_t frame; + tusb_desc_video_format_mjpeg_t format; + tusb_desc_video_frame_mjpeg_continuous_t frame; #else - tusb_desc_video_format_uncompressed_t format; - tusb_desc_video_frame_uncompressed_continuous_t frame; + tusb_desc_video_format_uncompressed_t format; + tusb_desc_video_frame_uncompressed_continuous_t frame; #endif - tusb_desc_video_streaming_color_matching_t color; + tusb_desc_video_streaming_color_matching_t color; #if USE_ISO_STREAMING - // For ISO streaming, USB spec requires to alternate interface - tusb_desc_interface_t itf_alt; + // For ISO streaming, USB spec requires to alternate interface + tusb_desc_interface_t itf_alt; #endif - tusb_desc_endpoint_t ep; + tusb_desc_endpoint_t ep; } uvc_streaming_desc_t; typedef struct TU_ATTR_PACKED { - tusb_desc_configuration_t config; - tusb_desc_interface_assoc_t iad; - uvc_control_desc_t video_control; - uvc_streaming_desc_t video_streaming; + tusb_desc_configuration_t config; + tusb_desc_interface_assoc_t iad; + uvc_control_desc_t video_control; + uvc_streaming_desc_t video_streaming; } uvc_cfg_desc_t; const uvc_cfg_desc_t desc_fs_configuration = { @@ -364,77 +366,73 @@ const uvc_cfg_desc_t desc_fs_configuration = { #if TUD_OPT_HIGH_SPEED uvc_cfg_desc_t desc_hs_configuration; -static uint8_t *get_hs_configuration_desc(void) -{ - static bool init = false; +static uint8_t * get_hs_configuration_desc(void) { + static bool init = false; - if (!init) { - desc_hs_configuration = desc_fs_configuration; - // change endpoint bulk size to 512 if bulk streaming - if (CFG_TUD_VIDEO_STREAMING_BULK) { - desc_hs_configuration.video_streaming.ep.wMaxPacketSize = 512; - } + if (!init) { + desc_hs_configuration = desc_fs_configuration; + // change endpoint bulk size to 512 if bulk streaming + if (CFG_TUD_VIDEO_STREAMING_BULK) { + desc_hs_configuration.video_streaming.ep.wMaxPacketSize = 512; } - init = true; + } + init = true; - return (uint8_t *)&desc_hs_configuration; + return (uint8_t *) &desc_hs_configuration; } // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .bNumConfigurations = 0x01, - .bReserved = 0x00 + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void) -{ - return (uint8_t const *)&desc_device_qualifier; +uint8_t const* tud_descriptor_device_qualifier_cb(void) { + return (uint8_t const*) &desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) -{ - (void)index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - if (tud_speed_get() == TUSB_SPEED_HIGH) { - return (uint8_t const *)&desc_fs_configuration; - } else { - return get_hs_configuration_desc(); - } +uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { + (void) index; // for multiple configurations + // if link speed is high return fullspeed config, and vice versa + if (tud_speed_get() == TUSB_SPEED_HIGH) { + return (uint8_t const*) &desc_fs_configuration; + } else { + return get_hs_configuration_desc(); + } } #endif // highspeed // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) -{ - (void)index; // for multiple configurations +uint8_t const* tud_descriptor_configuration_cb(uint8_t index) { + (void) index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - if (tud_speed_get() == TUSB_SPEED_HIGH) { - return get_hs_configuration_desc(); - } else + // Although we are highspeed, host may be fullspeed. + if (tud_speed_get() == TUSB_SPEED_HIGH) { + return get_hs_configuration_desc(); + } else #endif - { - return (uint8_t const *)&desc_fs_configuration; - } + { + return (uint8_t const*) &desc_fs_configuration; + } } //--------------------------------------------------------------------+ @@ -445,45 +443,42 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) - return NULL; + if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) return NULL; - const char *str = string_desc_arr[index]; + const char* str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.h index 26857591003..12d41b2f3a8 100644 --- a/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/video_capture/src/usb_descriptors.h @@ -27,217 +27,212 @@ #ifndef _USB_DESCRIPTORS_H_ #define _USB_DESCRIPTORS_H_ -#define FRAME_WIDTH 128 -#define FRAME_HEIGHT 96 -#define FRAME_RATE 10 +#define FRAME_WIDTH 128 +#define FRAME_HEIGHT 96 +#define FRAME_RATE 10 // NOTE: descriptor template is not used but leave here as reference -#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN \ - (TUD_VIDEO_DESC_IAD_LEN /* control */ \ - + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + \ - (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN /* Interface 1, Alternate 1 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + 7 /* Endpoint */ \ - ) - -#define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN \ - (TUD_VIDEO_DESC_IAD_LEN /* control */ \ - + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + \ - (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN /* Interface 1, Alternate 1 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + 7 /* Endpoint */ \ - ) - -#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN \ - (TUD_VIDEO_DESC_IAD_LEN /* control */ \ - + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + \ - (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN + 7 /* Endpoint */ \ - ) - -#define TUD_VIDEO_CAPTURE_DESC_MJPEG_BULK_LEN \ - (TUD_VIDEO_DESC_IAD_LEN /* control */ \ - + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + \ - (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN + 7 /* Endpoint */ \ - ) +#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN (\ + TUD_VIDEO_DESC_IAD_LEN\ + /* control */\ + + TUD_VIDEO_DESC_STD_VC_LEN\ + + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ + + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ + + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ + + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\ + + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\ + + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ + /* Interface 1, Alternate 1 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + 7/* Endpoint */\ + ) + +#define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN (\ + TUD_VIDEO_DESC_IAD_LEN\ + /* control */\ + + TUD_VIDEO_DESC_STD_VC_LEN\ + + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ + + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ + + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ + + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN\ + + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN\ + + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ + /* Interface 1, Alternate 1 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + 7/* Endpoint */\ + ) + +#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN (\ + TUD_VIDEO_DESC_IAD_LEN\ + /* control */\ + + TUD_VIDEO_DESC_STD_VC_LEN\ + + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ + + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ + + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ + + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\ + + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\ + + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ + + 7/* Endpoint */\ + ) + +#define TUD_VIDEO_CAPTURE_DESC_MJPEG_BULK_LEN (\ + TUD_VIDEO_DESC_IAD_LEN\ + /* control */\ + + TUD_VIDEO_DESC_STD_VC_LEN\ + + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ + + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ + + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ + + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN\ + + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN\ + + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ + + 7/* Endpoint */\ + ) /* Windows support YUY2 and NV12 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */ -#define TUD_VIDEO_DESC_CS_VS_FMT_YUY2(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ - _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_YUY2, 16, _frmidx, \ - _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_NV12(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ - _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_NV12, 12, _frmidx, \ - _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_M420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ - _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_M420, 12, _frmidx, \ - _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_I420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ - _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, \ - _asrx, _asry, _interlace, _cp) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ - _stridx), /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC( \ - ITF_NUM_VIDEO_CONTROL, 0, \ - _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC( \ - 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ - UVC_CLOCK_FREQUENCY, \ - ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ - 0), /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, \ - _stridx), /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( \ - /*bNumFormats*/ 1, /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ - /*bmaControls(1)*/ 0), /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ - /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ - /*bCopyProtect*/ 0), /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ - _width *_height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, (10000000 / _fps), \ - (10000000 / _fps), (10000000 / _fps) * _fps, \ - (10000000 / _fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ - VIDEO_COLOR_XFER_CH_BT709, \ - VIDEO_COLOR_COEF_SMPTE170M), /* VS alt 1 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), /* EP */ \ - TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ - _stridx), /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC( \ - ITF_NUM_VIDEO_CONTROL, 0, \ - _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC( \ - 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ - UVC_CLOCK_FREQUENCY, \ - ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ - 0), /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, \ - _stridx), /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( \ - /*bNumFormats*/ 1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ - /*bmaControls(1)*/ 0), /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ - /*bmFlags*/ 0, /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ - /*bCopyProtect*/ 0), /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ - _width *_height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, (10000000 / _fps), \ - (10000000 / _fps), (10000000 / _fps) * _fps, \ - (10000000 / _fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ - VIDEO_COLOR_XFER_CH_BT709, \ - VIDEO_COLOR_COEF_SMPTE170M), /* VS alt 1 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), /* EP */ \ - TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ - _stridx), /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC( \ - ITF_NUM_VIDEO_CONTROL, 0, \ - _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC( \ - 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ - UVC_CLOCK_FREQUENCY, \ - ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ - 0), /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, \ - _stridx), /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( \ - /*bNumFormats*/ 1, /*wTotalLength - bLength */ \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ - /*bmaControls(1)*/ 0), /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ - /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ - /*bCopyProtect*/ 0), /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ - _width *_height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, (10000000 / _fps), \ - (10000000 / _fps), (10000000 / _fps) * _fps, \ - (10000000 / _fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING( \ - VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ +#define TUD_VIDEO_DESC_CS_VS_FMT_YUY2(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_YUY2, 16, _frmidx, _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_NV12(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_NV12, 12, _frmidx, _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_M420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_M420, 12, _frmidx, _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_I420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, _asrx, _asry, _interlace, _cp) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ + /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ + /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ + /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ + /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, _stridx), \ + /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ + _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ + /*bmaControls(1)*/0), \ + /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ + /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ + /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \ + _width * _height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, \ + (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ + /* VS alt 1 */\ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), \ + /* EP */ \ + TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ + /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ + /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ + /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ + /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, _stridx), \ + /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ + _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ + /*bmaControls(1)*/0), \ + /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ + /*bmFlags*/0, /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ + /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */1, 0, _width, _height, \ + _width * _height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, \ + (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ + /* VS alt 1 */\ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), \ + /* EP */ \ + TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) + + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ + /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ + /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ + /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ + /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \ + /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ + /*wTotalLength - bLength */\ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ + _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ + /*bmaControls(1)*/0), \ + /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ + /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ + /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \ + _width * _height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, \ + (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1) -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ - _stridx), /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC( \ - ITF_NUM_VIDEO_CONTROL, 0, \ - _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC( \ - 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ - UVC_CLOCK_FREQUENCY, \ - ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, \ - UVC_ENTITY_CAP_INPUT_TERMINAL, 0), /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, \ - _stridx), /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( \ - /*bNumFormats*/ 1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ - /*bmaControls(1)*/ 0), /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ - /*bmFlags*/ 0, /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ - /*bCopyProtect*/ 0), /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ - _width *_height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, (10000000 / _fps), \ - (10000000 / _fps), (10000000 / _fps) * _fps, \ - (10000000 / _fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ - VIDEO_COLOR_XFER_CH_BT709, \ - VIDEO_COLOR_COEF_SMPTE170M), /* EP */ \ +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ + /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ + /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ + /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, UVC_ENTITY_CAP_INPUT_TERMINAL, 0), \ + /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \ + /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ + _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ + /*bmaControls(1)*/0), \ + /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ + /*bmFlags*/0, /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ + /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */1, 0, _width, _height, \ + _width * _height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, \ + (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ + /* EP */ \ TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1) + #endif diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/images.h b/Libraries/tinyusb/examples/device/video_capture_2ch/src/images.h index 3d881a93fd6..f0badd07439 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/images.h +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/images.h @@ -3,24935 +3,1655 @@ // YUY2 Uncompressed Frame (fixed) //--------------------------------------------------------------------+ static const unsigned char framebuf_yuy2_readonly[128 * (96 + 1) * 2] = { - /* 0 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 1 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 2 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 3 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 4 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 5 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 6 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 7 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 8 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 9 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 10 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 11 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 12 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 13 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 14 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 15 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 16 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 17 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 18 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 19 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 20 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 21 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 22 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 23 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 24 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 25 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 26 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 27 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 28 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 29 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 30 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 31 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 32 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 33 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 34 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 35 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 36 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 37 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 38 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 39 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 40 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 41 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 42 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 43 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 44 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 45 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 46 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 47 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 48 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 49 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 50 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 51 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 52 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 53 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 54 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 55 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 56 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 57 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 58 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 59 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 60 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 61 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 62 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 63 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 64 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 65 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 66 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 67 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 68 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 69 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 70 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 71 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 72 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 73 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 74 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 75 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 76 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 77 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 78 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 79 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 80 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 81 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 82 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 83 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 84 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 85 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 86 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 87 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 88 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 89 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 90 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 91 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 92 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 93 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 94 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 95 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - /* 96 */ - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xeb, - 0x80, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xdb, - 0x10, - 0xdb, - 0x8a, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xbc, - 0x9a, - 0xbc, - 0x10, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0xad, - 0x2a, - 0xad, - 0x1a, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x4e, - 0xd6, - 0x4e, - 0xe6, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x3f, - 0x66, - 0x3f, - 0xf0, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x20, - 0xf0, - 0x20, - 0x76, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, - 0x10, - 0x80, + /* 0 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 1 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 2 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 3 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 4 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 5 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 6 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 7 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 8 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 9 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 10 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 11 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 12 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 13 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 14 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 15 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 16 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 17 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 18 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 19 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 20 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 21 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 22 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 23 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 24 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 25 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 26 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 27 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 28 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 29 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 30 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 31 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 32 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 33 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 34 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 35 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 36 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 37 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 38 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 39 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 40 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 41 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 42 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 43 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 44 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 45 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 46 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 47 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 48 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 49 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 50 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 51 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 52 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 53 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 54 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 55 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 56 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 57 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 58 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 59 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 60 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 61 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 62 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 63 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 64 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 65 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 66 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 67 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 68 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 69 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 70 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 71 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 72 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 73 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 74 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 75 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 76 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 77 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 78 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 79 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 80 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 81 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 82 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 83 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 84 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 85 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 86 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 87 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 88 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 89 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 90 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 91 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 92 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 93 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 94 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 95 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + /* 96 */ + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, 0xeb, 0x80, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, 0xdb, 0x10, 0xdb, 0x8a, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, 0xbc, 0x9a, 0xbc, 0x10, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, 0xad, 0x2a, 0xad, 0x1a, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, 0x4e, 0xd6, 0x4e, 0xe6, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, 0x3f, 0x66, 0x3f, 0xf0, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, 0x20, 0xf0, 0x20, 0x76, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, + 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, }; #endif @@ -24941,274 +1661,274 @@ static const unsigned char framebuf_yuy2_readonly[128 * (96 + 1) * 2] = { //--------------------------------------------------------------------+ unsigned char color_bar_0_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x92, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, - 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, - 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, - 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, - 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, - 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, - 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, - 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x92, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, + 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, + 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, + 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, + 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, + 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, + 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, + 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0xff, 0xd9 }; unsigned char color_bar_1_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x7d, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, - 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, - 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, - 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, - 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, - 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x7f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x7d, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, + 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, + 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, + 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, + 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, + 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x7f, 0xff, 0xd9 }; unsigned char color_bar_2_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x75, 0x14, 0xcc, - 0xc4, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, - 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, - 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, - 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, - 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, - 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x75, 0x14, 0xcc, + 0xc4, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, + 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, + 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, + 0x40, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, + 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x18, 0xda, 0x2b, 0x63, 0x61, 0x28, 0xac, 0xc6, 0x25, + 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x2c, 0x51, 0x40, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 }; unsigned char color_bar_3_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x5a, 0x2a, 0x08, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, - 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, - 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, - 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, - 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, - 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, - 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, - 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x91, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x5a, 0x2a, 0x08, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, + 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, + 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, + 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, + 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, + 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, + 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, + 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x91, 0xff, 0xd9 }; unsigned char color_bar_4_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x4a, 0x2a, 0xcb, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, - 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, - 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, - 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, - 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, - 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, - 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, - 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x9f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x4a, 0x2a, 0xcb, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, + 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, + 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, + 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, + 0xc8, 0x4a, 0x2b, 0x31, 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, + 0x45, 0x66, 0x32, 0xc5, 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, + 0x8d, 0xa2, 0xb6, 0x36, 0x12, 0x8a, 0xcc, 0x62, 0x51, 0x5a, 0x99, 0x09, 0x45, 0x66, 0x32, 0xc5, + 0x14, 0x00, 0x94, 0x56, 0x63, 0x12, 0x8a, 0xd4, 0xc8, 0x4a, 0x2b, 0x31, 0x9f, 0xff, 0xd9 }; unsigned char color_bar_5_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x6d, 0x14, 0x8d, - 0x04, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, - 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, - 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, - 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, - 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, - 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, - 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, - 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x7f, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x6d, 0x14, 0x8d, + 0x04, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, + 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, + 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, + 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, + 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, + 0x8a, 0x28, 0x01, 0x28, 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, + 0x6c, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x65, 0x8a, 0x28, 0x01, 0x28, + 0xac, 0xc6, 0x25, 0x15, 0xa9, 0x90, 0x94, 0x56, 0x63, 0x1b, 0x45, 0x6c, 0x6c, 0x7f, 0xff, 0xd9 }; unsigned char color_bar_6_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x65, 0x15, 0xa0, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, - 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, - 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, - 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, - 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, - 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, - 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, - 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x65, 0x15, 0xa0, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, + 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, + 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, + 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, + 0x1b, 0x09, 0x45, 0x66, 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, + 0x2b, 0x31, 0x89, 0x45, 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, + 0x31, 0x28, 0xad, 0x4c, 0x84, 0xa2, 0xb3, 0x19, 0x62, 0x8a, 0x00, 0x4a, 0x2b, 0x31, 0x89, 0x45, + 0x6a, 0x64, 0x25, 0x15, 0x98, 0xc6, 0xd1, 0x5b, 0x1b, 0x09, 0x45, 0x66, 0x33, 0xff, 0xd9 }; unsigned char color_bar_7_jpg[] = { - 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x8e, 0x8a, 0x00, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, - 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, - 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, - 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, - 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, - 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, - 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, - 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x47, 0xff, 0xd9 + 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, + 0x08, 0x00, 0x60, 0x00, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x8e, 0x8a, 0x00, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, + 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, + 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, + 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, + 0x18, 0x94, 0x56, 0xa6, 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, + 0xb5, 0x32, 0x12, 0x8a, 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, + 0x42, 0x51, 0x59, 0x8c, 0xb1, 0x45, 0x00, 0x25, 0x15, 0x98, 0xc4, 0xa2, 0xb5, 0x32, 0x12, 0x8a, + 0xcc, 0x63, 0x68, 0xad, 0x8d, 0x84, 0xa2, 0xb3, 0x18, 0x94, 0x56, 0xa6, 0x47, 0xff, 0xd9 }; diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/main.c b/Libraries/tinyusb/examples/device/video_capture_2ch/src/main.c index 52ca7245d56..e8c2ec6b01b 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/main.c +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/main.c @@ -41,44 +41,44 @@ * - 2500 ms : device is suspended */ enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; -void led_blinking_task(void *param); +void led_blinking_task(void* param); void usb_device_task(void *param); -void video_task(void *param); +void video_task(void* param); #if CFG_TUSB_OS == OPT_OS_FREERTOS void freertos_init_task(void); #endif + //--------------------------------------------------------------------+ // Main //--------------------------------------------------------------------+ -int main(void) -{ - board_init(); +int main(void) { + board_init(); - // If using FreeRTOS: create blinky, tinyusb device, video task + // If using FreeRTOS: create blinky, tinyusb device, video task #if CFG_TUSB_OS == OPT_OS_FREERTOS - freertos_init_task(); + freertos_init_task(); #else - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - while (1) { - tud_task(); // tinyusb device task - led_blinking_task(NULL); - video_task(NULL); - } + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + while (1) { + tud_task(); // tinyusb device task + led_blinking_task(NULL); + video_task(NULL); + } #endif } @@ -87,30 +87,26 @@ int main(void) //--------------------------------------------------------------------+ // Invoked when device is mounted -void tud_mount_cb(void) -{ - blink_interval_ms = BLINK_MOUNTED; +void tud_mount_cb(void) { + blink_interval_ms = BLINK_MOUNTED; } // Invoked when device is unmounted -void tud_umount_cb(void) -{ - blink_interval_ms = BLINK_NOT_MOUNTED; +void tud_umount_cb(void) { + blink_interval_ms = BLINK_NOT_MOUNTED; } // Invoked when usb bus is suspended // remote_wakeup_en : if host allow us to perform remote wakeup // Within 7ms, device must draw an average of current less than 2.5 mA from bus -void tud_suspend_cb(bool remote_wakeup_en) -{ - (void)remote_wakeup_en; - blink_interval_ms = BLINK_SUSPENDED; +void tud_suspend_cb(bool remote_wakeup_en) { + (void) remote_wakeup_en; + blink_interval_ms = BLINK_SUSPENDED; } // Invoked when usb bus is resumed -void tud_resume_cb(void) -{ - blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; +void tud_resume_cb(void) { + blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED; } //--------------------------------------------------------------------+ @@ -118,185 +114,178 @@ void tud_resume_cb(void) //--------------------------------------------------------------------+ #define FRAMEBUF_SIZE (FRAME_WIDTH * FRAME_HEIGHT * 16 / 8) -static unsigned frame_num[CFG_TUD_VIDEO_STREAMING] = { 1 }; +static unsigned frame_num[CFG_TUD_VIDEO_STREAMING] = {1}; static unsigned tx_busy = 0; -static unsigned interval_ms[CFG_TUD_VIDEO_STREAMING] = { 1000 / FRAME_RATE }; +static unsigned interval_ms[CFG_TUD_VIDEO_STREAMING] = {1000 / FRAME_RATE}; // For mcus that does not have enough SRAM for frame buffer, we use fixed frame data. // To further reduce the size, we use MJPEG format instead of YUY2. #include "images.h" static struct { - uint32_t size; - uint8_t const *buffer; + uint32_t size; + uint8_t const *buffer; } const framebuf_mjpeg[] = { - { sizeof(color_bar_0_jpg), color_bar_0_jpg }, { sizeof(color_bar_1_jpg), color_bar_1_jpg }, - { sizeof(color_bar_2_jpg), color_bar_2_jpg }, { sizeof(color_bar_3_jpg), color_bar_3_jpg }, - { sizeof(color_bar_4_jpg), color_bar_4_jpg }, { sizeof(color_bar_5_jpg), color_bar_5_jpg }, - { sizeof(color_bar_6_jpg), color_bar_6_jpg }, { sizeof(color_bar_7_jpg), color_bar_7_jpg }, + {sizeof(color_bar_0_jpg), color_bar_0_jpg}, + {sizeof(color_bar_1_jpg), color_bar_1_jpg}, + {sizeof(color_bar_2_jpg), color_bar_2_jpg}, + {sizeof(color_bar_3_jpg), color_bar_3_jpg}, + {sizeof(color_bar_4_jpg), color_bar_4_jpg}, + {sizeof(color_bar_5_jpg), color_bar_5_jpg}, + {sizeof(color_bar_6_jpg), color_bar_6_jpg}, + {sizeof(color_bar_7_jpg), color_bar_7_jpg}, }; #if !defined(CFG_EXAMPLE_VIDEO_READONLY) // YUY2 frame buffer static uint8_t framebuf_yuy2[FRAMEBUF_SIZE]; -static void fill_color_bar(uint8_t *buffer, unsigned start_position) -{ - /* EBU color bars: https://stackoverflow.com/questions/6939422 */ - static uint8_t const bar_color[8][4] = { - /* Y, U, Y, V */ - { 235, 128, 235, 128 }, /* 100% White */ - { 219, 16, 219, 138 }, /* Yellow */ - { 188, 154, 188, 16 }, /* Cyan */ - { 173, 42, 173, 26 }, /* Green */ - { 78, 214, 78, 230 }, /* Magenta */ - { 63, 102, 63, 240 }, /* Red */ - { 32, 240, 32, 118 }, /* Blue */ - { 16, 128, 16, 128 }, /* Black */ - }; - uint8_t *p; - - /* Generate the 1st line */ - uint8_t *end = &buffer[FRAME_WIDTH * 2]; - unsigned idx = (FRAME_WIDTH / 2 - 1) - (start_position % (FRAME_WIDTH / 2)); - p = &buffer[idx * 4]; - for (unsigned i = 0; i < 8; ++i) { - for (int j = 0; j < FRAME_WIDTH / (2 * 8); ++j) { - memcpy(p, &bar_color[i], 4); - p += 4; - if (end <= p) { - p = buffer; - } - } - } - - /* Duplicate the 1st line to the others */ - p = &buffer[FRAME_WIDTH * 2]; - for (unsigned i = 1; i < FRAME_HEIGHT; ++i) { - memcpy(p, buffer, FRAME_WIDTH * 2); - p += FRAME_WIDTH * 2; +static void fill_color_bar(uint8_t* buffer, unsigned start_position) { + /* EBU color bars: https://stackoverflow.com/questions/6939422 */ + static uint8_t const bar_color[8][4] = { + /* Y, U, Y, V */ + { 235, 128, 235, 128}, /* 100% White */ + { 219, 16, 219, 138}, /* Yellow */ + { 188, 154, 188, 16}, /* Cyan */ + { 173, 42, 173, 26}, /* Green */ + { 78, 214, 78, 230}, /* Magenta */ + { 63, 102, 63, 240}, /* Red */ + { 32, 240, 32, 118}, /* Blue */ + { 16, 128, 16, 128}, /* Black */ + }; + uint8_t* p; + + /* Generate the 1st line */ + uint8_t* end = &buffer[FRAME_WIDTH * 2]; + unsigned idx = (FRAME_WIDTH / 2 - 1) - (start_position % (FRAME_WIDTH / 2)); + p = &buffer[idx * 4]; + for (unsigned i = 0; i < 8; ++i) { + for (int j = 0; j < FRAME_WIDTH / (2 * 8); ++j) { + memcpy(p, &bar_color[i], 4); + p += 4; + if (end <= p) { + p = buffer; + } } + } + + /* Duplicate the 1st line to the others */ + p = &buffer[FRAME_WIDTH * 2]; + for (unsigned i = 1; i < FRAME_HEIGHT; ++i) { + memcpy(p, buffer, FRAME_WIDTH * 2); + p += FRAME_WIDTH * 2; + } } #endif -size_t get_framebuf(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, size_t fnum, void **fb) -{ - uint32_t idx = ctl_idx + stm_idx; - - if (idx == 0) { -// stream 0 use uncompressed YUY2 frame -#if defined(CFG_EXAMPLE_VIDEO_READONLY) - *fb = (void *)(uintptr_t)&framebuf_yuy2_readonly[(fnum % (FRAME_WIDTH / 2)) * 4]; -#else - fill_color_bar(framebuf_yuy2, frame_num[idx]); - *fb = framebuf_yuy2; -#endif - - return FRAMEBUF_SIZE; - } else { - // stream 1 use MJPEG frame - size_t const bar_id = fnum & 0x7; - - *fb = (void *)(uintptr_t)framebuf_mjpeg[bar_id].buffer; - return framebuf_mjpeg[bar_id].size; - } +size_t get_framebuf(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, size_t fnum, void **fb) { + uint32_t idx = ctl_idx + stm_idx; + + if (idx == 0) { + // stream 0 use uncompressed YUY2 frame + #if defined(CFG_EXAMPLE_VIDEO_READONLY) + *fb = (void*)(uintptr_t ) &framebuf_yuy2_readonly[(fnum % (FRAME_WIDTH / 2)) * 4]; + #else + fill_color_bar(framebuf_yuy2, frame_num[idx]); + *fb = framebuf_yuy2; + #endif + + return FRAMEBUF_SIZE; + }else { + // stream 1 use MJPEG frame + size_t const bar_id = fnum & 0x7; + + *fb = (void*)(uintptr_t) framebuf_mjpeg[bar_id].buffer; + return framebuf_mjpeg[bar_id].size; + } } //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ -void video_send_frame(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) -{ - static unsigned start_ms[CFG_TUD_VIDEO_STREAMING] = { - 0, - }; - static unsigned already_sent = 0; - - uint32_t idx = ctl_idx + stm_idx; - if (!tud_video_n_streaming(ctl_idx, stm_idx)) { - already_sent &= ~(1u << idx); - frame_num[idx] = 0; - return; - } - void *fp; - size_t fb_size; - - if (!(already_sent & (1u << idx))) { - already_sent |= 1u << idx; - tx_busy |= 1u << idx; - start_ms[idx] = board_millis(); - - fb_size = get_framebuf(ctl_idx, stm_idx, frame_num[idx], &fp); - tud_video_n_frame_xfer(ctl_idx, stm_idx, fp, fb_size); - } - - unsigned cur = board_millis(); - if (cur - start_ms[idx] < interval_ms[idx]) - return; // not enough time - if (tx_busy & (1u << idx)) - return; - start_ms[idx] += interval_ms[idx]; +void video_send_frame(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { + static unsigned start_ms[CFG_TUD_VIDEO_STREAMING] = {0, }; + static unsigned already_sent = 0; + + uint32_t idx = ctl_idx + stm_idx; + if (!tud_video_n_streaming(ctl_idx, stm_idx)) { + already_sent &= ~(1u << idx); + frame_num[idx] = 0; + return; + } + void* fp; + size_t fb_size; + + if (!(already_sent & (1u << idx))) { + already_sent |= 1u << idx; tx_busy |= 1u << idx; + start_ms[idx] = board_millis(); fb_size = get_framebuf(ctl_idx, stm_idx, frame_num[idx], &fp); tud_video_n_frame_xfer(ctl_idx, stm_idx, fp, fb_size); + } + + unsigned cur = board_millis(); + if (cur - start_ms[idx] < interval_ms[idx]) return; // not enough time + if (tx_busy & (1u << idx)) return; + start_ms[idx] += interval_ms[idx]; + tx_busy |= 1u << idx; + + fb_size = get_framebuf(ctl_idx, stm_idx, frame_num[idx], &fp); + tud_video_n_frame_xfer(ctl_idx, stm_idx, fp, fb_size); } -void video_task(void *param) -{ - (void)param; - while (1) { - video_send_frame(0, 0); - video_send_frame(1, 0); +void video_task(void* param) { + (void) param; -#if CFG_TUSB_OS == OPT_OS_FREERTOS - vTaskDelay(interval_ms[0] / portTICK_PERIOD_MS); -#else - return; -#endif - } + while(1) { + video_send_frame(0, 0); + video_send_frame(1, 0); + + #if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(interval_ms[0] / portTICK_PERIOD_MS); + #else + return; + #endif + } } -void tud_video_frame_xfer_complete_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) -{ - uint32_t idx = ctl_idx + stm_idx; - tx_busy &= ~(1u << idx); - /* flip buffer */ - ++frame_num[idx]; +void tud_video_frame_xfer_complete_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { + uint32_t idx = ctl_idx + stm_idx; + tx_busy &= ~(1u << idx); + /* flip buffer */ + ++frame_num[idx]; } int tud_video_commit_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, - video_probe_and_commit_control_t const *parameters) -{ - uint32_t idx = ctl_idx + stm_idx; - /* convert unit to ms from 100 ns */ - interval_ms[idx] = parameters->dwFrameInterval / 10000; - return VIDEO_ERROR_NONE; + video_probe_and_commit_control_t const* parameters) { + uint32_t idx = ctl_idx + stm_idx; + /* convert unit to ms from 100 ns */ + interval_ms[idx] = parameters->dwFrameInterval / 10000; + return VIDEO_ERROR_NONE; } //--------------------------------------------------------------------+ // Blinking Task //--------------------------------------------------------------------+ -void led_blinking_task(void *param) -{ - (void)param; - static uint32_t start_ms = 0; - static bool led_state = false; - - while (1) { -#if CFG_TUSB_OS == OPT_OS_FREERTOS - vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); -#else - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time -#endif - - start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle - } +void led_blinking_task(void* param) { + (void) param; + static uint32_t start_ms = 0; + static bool led_state = false; + + while (1) { + #if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(blink_interval_ms / portTICK_PERIOD_MS); + #else + if (board_millis() - start_ms < blink_interval_ms) return; // not enough time + #endif + + start_ms += blink_interval_ms; + board_led_write(led_state); + led_state = 1 - led_state; // toggle + } } //--------------------------------------------------------------------+ @@ -304,19 +293,18 @@ void led_blinking_task(void *param) //--------------------------------------------------------------------+ #if CFG_TUSB_OS == OPT_OS_FREERTOS -#define BLINKY_STACK_SIZE configMINIMAL_STACK_SIZE -#define VIDEO_STACK_SIZE (configMINIMAL_STACK_SIZE * 4) +#define BLINKY_STACK_SIZE configMINIMAL_STACK_SIZE +#define VIDEO_STACK_SIZE (configMINIMAL_STACK_SIZE*4) #if TUP_MCU_ESPRESSIF -#define USBD_STACK_SIZE 4096 -int main(void); -void app_main(void) -{ + #define USBD_STACK_SIZE 4096 + int main(void); + void app_main(void) { main(); -} + } #else -// Increase stack size when debug log is enabled -#define USBD_STACK_SIZE (3 * configMINIMAL_STACK_SIZE / 2) * (CFG_TUSB_DEBUG ? 2 : 1) + // Increase stack size when debug log is enabled + #define USBD_STACK_SIZE (3*configMINIMAL_STACK_SIZE/2) * (CFG_TUSB_DEBUG ? 2 : 1) #endif // static task @@ -324,53 +312,48 @@ void app_main(void) StackType_t blinky_stack[BLINKY_STACK_SIZE]; StaticTask_t blinky_taskdef; -StackType_t usb_device_stack[USBD_STACK_SIZE]; +StackType_t usb_device_stack[USBD_STACK_SIZE]; StaticTask_t usb_device_taskdef; -StackType_t video_stack[VIDEO_STACK_SIZE]; +StackType_t video_stack[VIDEO_STACK_SIZE]; StaticTask_t video_taskdef; #endif // USB Device Driver task // This top level thread process all usb events and invoke callbacks -void usb_device_task(void *param) -{ - (void)param; - - // init device stack on configured roothub port - // This should be called after scheduler/kernel is started. - // Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API. - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - // RTOS forever loop - while (1) { - // put this thread to waiting state until there is new events - tud_task(); - } +void usb_device_task(void *param) { + (void) param; + + // init device stack on configured roothub port + // This should be called after scheduler/kernel is started. + // Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API. + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + // RTOS forever loop + while (1) { + // put this thread to waiting state until there is new events + tud_task(); + } } -void freertos_init_task(void) -{ -#if configSUPPORT_STATIC_ALLOCATION - xTaskCreateStatic(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, blinky_stack, - &blinky_taskdef); - xTaskCreateStatic(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, - usb_device_stack, &usb_device_taskdef); - xTaskCreateStatic(video_task, "cdc", VIDEO_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, - video_stack, &video_taskdef); -#else - xTaskCreate(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, NULL); - xTaskCreate(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL); - xTaskCreate(video_task, "video", VIDEO_STACK_SZIE, NULL, configMAX_PRIORITIES - 2, NULL); -#endif - -// skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 -#if !TUP_MCU_ESPRESSIF - vTaskStartScheduler(); -#endif +void freertos_init_task(void) { + #if configSUPPORT_STATIC_ALLOCATION + xTaskCreateStatic(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, blinky_stack, &blinky_taskdef); + xTaskCreateStatic(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES-1, usb_device_stack, &usb_device_taskdef); + xTaskCreateStatic(video_task, "cdc", VIDEO_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, video_stack, &video_taskdef); + #else + xTaskCreate(led_blinking_task, "blinky", BLINKY_STACK_SIZE, NULL, 1, NULL); + xTaskCreate(usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL); + xTaskCreate(video_task, "video", VIDEO_STACK_SZIE, NULL, configMAX_PRIORITIES - 2, NULL); + #endif + + // skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 + #if !TUP_MCU_ESPRESSIF + vTaskStartScheduler(); + #endif } #endif diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/tusb_config.h b/Libraries/tinyusb/examples/device/video_capture_2ch/src/tusb_config.h index 9b5ea8d1958..43c7dfc9033 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,23 +54,23 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif // Espressif IDF requires "freertos/" prefix in include path #if TUP_MCU_ESPRESSIF -#define CFG_TUSB_OS_INC_PATH freertos / +#define CFG_TUSB_OS_INC_PATH freertos/ #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -84,7 +84,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -92,18 +92,18 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// // The number of video control interfaces -#define CFG_TUD_VIDEO 2 +#define CFG_TUD_VIDEO 2 // The number of video streaming interfaces -#define CFG_TUD_VIDEO_STREAMING 2 +#define CFG_TUD_VIDEO_STREAMING 2 // video streaming endpoint buffer size -#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256 +#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256 // use bulk endpoint for streaming interface #define CFG_TUD_VIDEO_STREAMING_BULK 1 @@ -114,7 +114,7 @@ extern "C" { #define CFG_TUD_VIDEO_LOG_LEVEL 1 #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.c index b519698e059..e78e452fc63 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.c @@ -33,36 +33,35 @@ * Auto ProductID layout's Bitmap: * [MSB] VIDEO | AUDIO | MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6) ) -#define USB_VID 0xCafe -#define USB_BCD 0x0200 +#define USB_VID 0xCafe +#define USB_BCD 0x0200 // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, - STRID_UVC_CONTROL_1, - STRID_UVC_STREAMING_1, - STRID_UVC_CONTROL_2, - STRID_UVC_STREAMING_2, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, + STRID_UVC_CONTROL_1, + STRID_UVC_STREAMING_1, + STRID_UVC_CONTROL_2, + STRID_UVC_STREAMING_2, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "UVC Control 1", // 4: UVC Interface 1 - "UVC Streaming 1", // 5: UVC Interface 1 - "UVC Control 2", // 6: UVC Interface 2 - "UVC Streaming 2", // 7: UVC Interface 2 +char const* string_desc_arr[] = { + (const char[]) {0x09, 0x04}, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "UVC Control 1", // 4: UVC Interface 1 + "UVC Streaming 1", // 5: UVC Interface 1 + "UVC Control 2", // 6: UVC Interface 2 + "UVC Streaming 2", // 7: UVC Interface 2 }; @@ -70,34 +69,33 @@ char const *string_desc_arr[] = { // Device Descriptors //--------------------------------------------------------------------+ tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, // Use Interface Association Descriptor (IAD) for Video // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = USB_VID, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = STRID_MANUFACTURER, - .iProduct = STRID_PRODUCT, - .iSerialNumber = STRID_SERIAL, + .iManufacturer = STRID_MANUFACTURER, + .iProduct = STRID_PRODUCT, + .iSerialNumber = STRID_SERIAL, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) -{ - return (uint8_t const *)&desc_device; +uint8_t const* tud_descriptor_device_cb(void) { + return (uint8_t const*) &desc_device; } //--------------------------------------------------------------------+ @@ -105,85 +103,85 @@ uint8_t const *tud_descriptor_device_cb(void) //--------------------------------------------------------------------+ /* Time stamp base clock. It is a deprecated parameter. */ -#define UVC_CLOCK_FREQUENCY 27000000 +#define UVC_CLOCK_FREQUENCY 27000000 /* video capture path */ -#define UVC_ENTITY_CAP_INPUT_TERMINAL 0x01 +#define UVC_ENTITY_CAP_INPUT_TERMINAL 0x01 #define UVC_ENTITY_CAP_OUTPUT_TERMINAL 0x02 enum { - ITF_NUM_VIDEO_CONTROL_1, - ITF_NUM_VIDEO_STREAMING_1, - ITF_NUM_VIDEO_CONTROL_2, - ITF_NUM_VIDEO_STREAMING_2, - ITF_NUM_TOTAL + ITF_NUM_VIDEO_CONTROL_1, + ITF_NUM_VIDEO_STREAMING_1, + ITF_NUM_VIDEO_CONTROL_2, + ITF_NUM_VIDEO_STREAMING_2, + ITF_NUM_TOTAL }; -#define EPNUM_VIDEO_IN_1 0x81 -#define EPNUM_VIDEO_IN_2 0x82 +#define EPNUM_VIDEO_IN_1 0x81 +#define EPNUM_VIDEO_IN_2 0x82 #if defined(CFG_EXAMPLE_VIDEO_READONLY) && !defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG) -#define USE_MJPEG 1 + #define USE_MJPEG 1 #else -#define USE_MJPEG 0 + #define USE_MJPEG 0 #endif #define USE_ISO_STREAMING (!CFG_TUD_VIDEO_STREAMING_BULK) typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_control_header_1itf_t header; - tusb_desc_video_control_camera_terminal_t camera_terminal; - tusb_desc_video_control_output_terminal_t output_terminal; + tusb_desc_interface_t itf; + tusb_desc_video_control_header_1itf_t header; + tusb_desc_video_control_camera_terminal_t camera_terminal; + tusb_desc_video_control_output_terminal_t output_terminal; } uvc_control_desc_t; /* Windows support YUY2 and NV12 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */ typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_streaming_input_header_1byte_t header; - tusb_desc_video_format_uncompressed_t format; - tusb_desc_video_frame_uncompressed_continuous_t frame; - tusb_desc_video_streaming_color_matching_t color; + tusb_desc_interface_t itf; + tusb_desc_video_streaming_input_header_1byte_t header; + tusb_desc_video_format_uncompressed_t format; + tusb_desc_video_frame_uncompressed_continuous_t frame; + tusb_desc_video_streaming_color_matching_t color; #if USE_ISO_STREAMING - // For ISO streaming, USB spec requires to alternate interface - tusb_desc_interface_t itf_alt; + // For ISO streaming, USB spec requires to alternate interface + tusb_desc_interface_t itf_alt; #endif - tusb_desc_endpoint_t ep; + tusb_desc_endpoint_t ep; } uvc_streaming_yuy2_desc_t; typedef struct TU_ATTR_PACKED { - tusb_desc_interface_t itf; - tusb_desc_video_streaming_input_header_1byte_t header; - tusb_desc_video_format_mjpeg_t format; - tusb_desc_video_frame_mjpeg_continuous_t frame; - tusb_desc_video_streaming_color_matching_t color; + tusb_desc_interface_t itf; + tusb_desc_video_streaming_input_header_1byte_t header; + tusb_desc_video_format_mjpeg_t format; + tusb_desc_video_frame_mjpeg_continuous_t frame; + tusb_desc_video_streaming_color_matching_t color; #if USE_ISO_STREAMING - // For ISO streaming, USB spec requires to alternate interface - tusb_desc_interface_t itf_alt; + // For ISO streaming, USB spec requires to alternate interface + tusb_desc_interface_t itf_alt; #endif - tusb_desc_endpoint_t ep; + tusb_desc_endpoint_t ep; } uvc_streaming_mpeg_desc_t; typedef struct TU_ATTR_PACKED { - tusb_desc_configuration_t config; - - struct TU_ATTR_PACKED { - tusb_desc_interface_assoc_t iad; - uvc_control_desc_t video_control; - uvc_streaming_yuy2_desc_t video_streaming; - } uvc_yuy2; - - struct TU_ATTR_PACKED { - tusb_desc_interface_assoc_t iad; - uvc_control_desc_t video_control; - uvc_streaming_mpeg_desc_t video_streaming; - } uvc_mpeg; + tusb_desc_configuration_t config; + + struct TU_ATTR_PACKED { + tusb_desc_interface_assoc_t iad; + uvc_control_desc_t video_control; + uvc_streaming_yuy2_desc_t video_streaming; + } uvc_yuy2; + + struct TU_ATTR_PACKED { + tusb_desc_interface_assoc_t iad; + uvc_control_desc_t video_control; + uvc_streaming_mpeg_desc_t video_streaming; + } uvc_mpeg; } uvc_cfg_desc_t; const uvc_cfg_desc_t desc_fs_configuration = { @@ -536,78 +534,74 @@ const uvc_cfg_desc_t desc_fs_configuration = { #if TUD_OPT_HIGH_SPEED uvc_cfg_desc_t desc_hs_configuration; -static uint8_t *get_hs_configuration_desc(void) -{ - static bool init = false; +static uint8_t * get_hs_configuration_desc(void) { + static bool init = false; - if (!init) { - desc_hs_configuration = desc_fs_configuration; - // change endpoint bulk size to 512 if bulk streaming - if (CFG_TUD_VIDEO_STREAMING_BULK) { - desc_hs_configuration.uvc_yuy2.video_streaming.ep.wMaxPacketSize = 512; - desc_hs_configuration.uvc_mpeg.video_streaming.ep.wMaxPacketSize = 512; - } + if (!init) { + desc_hs_configuration = desc_fs_configuration; + // change endpoint bulk size to 512 if bulk streaming + if (CFG_TUD_VIDEO_STREAMING_BULK) { + desc_hs_configuration.uvc_yuy2.video_streaming.ep.wMaxPacketSize = 512; + desc_hs_configuration.uvc_mpeg.video_streaming.ep.wMaxPacketSize = 512; } - init = true; + } + init = true; - return (uint8_t *)&desc_hs_configuration; + return (uint8_t *) &desc_hs_configuration; } // device qualifier is mostly similar to device descriptor since we don't change configuration based on speed tusb_desc_device_qualifier_t const desc_device_qualifier = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = USB_BCD, + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .bNumConfigurations = 0x01, - .bReserved = 0x00 + .bReserved = 0x00 }; // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void) -{ - return (uint8_t const *)&desc_device_qualifier; +uint8_t const* tud_descriptor_device_qualifier_cb(void) { + return (uint8_t const*) &desc_device_qualifier; } // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) -{ - (void)index; // for multiple configurations - // if link speed is high return fullspeed config, and vice versa - if (tud_speed_get() == TUSB_SPEED_HIGH) { - return (uint8_t const *)&desc_fs_configuration; - } else { - return get_hs_configuration_desc(); - } +uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { + (void) index; // for multiple configurations + // if link speed is high return fullspeed config, and vice versa + if (tud_speed_get() == TUSB_SPEED_HIGH) { + return (uint8_t const*) &desc_fs_configuration; + } else { + return get_hs_configuration_desc(); + } } #endif // highspeed // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) -{ - (void)index; // for multiple configurations +uint8_t const* tud_descriptor_configuration_cb(uint8_t index) { + (void) index; // for multiple configurations #if TUD_OPT_HIGH_SPEED - // Although we are highspeed, host may be fullspeed. - if (tud_speed_get() == TUSB_SPEED_HIGH) { - return get_hs_configuration_desc(); - } else + // Although we are highspeed, host may be fullspeed. + if (tud_speed_get() == TUSB_SPEED_HIGH) { + return get_hs_configuration_desc(); + } else #endif - { - return (uint8_t const *)&desc_fs_configuration; - } + { + return (uint8_t const*) &desc_fs_configuration; + } } //--------------------------------------------------------------------+ @@ -618,45 +612,42 @@ static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch (index) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) - return NULL; + if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) return NULL; - const char *str = string_desc_arr[index]; + const char* str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if (chr_count > max_count) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for (size_t i = 0; i < chr_count; i++) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.h index 26857591003..12d41b2f3a8 100644 --- a/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/video_capture_2ch/src/usb_descriptors.h @@ -27,217 +27,212 @@ #ifndef _USB_DESCRIPTORS_H_ #define _USB_DESCRIPTORS_H_ -#define FRAME_WIDTH 128 -#define FRAME_HEIGHT 96 -#define FRAME_RATE 10 +#define FRAME_WIDTH 128 +#define FRAME_HEIGHT 96 +#define FRAME_RATE 10 // NOTE: descriptor template is not used but leave here as reference -#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN \ - (TUD_VIDEO_DESC_IAD_LEN /* control */ \ - + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + \ - (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN /* Interface 1, Alternate 1 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + 7 /* Endpoint */ \ - ) - -#define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN \ - (TUD_VIDEO_DESC_IAD_LEN /* control */ \ - + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + \ - (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN /* Interface 1, Alternate 1 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + 7 /* Endpoint */ \ - ) - -#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN \ - (TUD_VIDEO_DESC_IAD_LEN /* control */ \ - + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + \ - (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN + 7 /* Endpoint */ \ - ) - -#define TUD_VIDEO_CAPTURE_DESC_MJPEG_BULK_LEN \ - (TUD_VIDEO_DESC_IAD_LEN /* control */ \ - + TUD_VIDEO_DESC_STD_VC_LEN + (TUD_VIDEO_DESC_CS_VC_LEN + 1 /*bInCollection*/) + \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN + \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN /* Interface 1, Alternate 0 */ \ - + TUD_VIDEO_DESC_STD_VS_LEN + \ - (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1 /*bNumFormats x bControlSize*/) + \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN + 7 /* Endpoint */ \ - ) +#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN (\ + TUD_VIDEO_DESC_IAD_LEN\ + /* control */\ + + TUD_VIDEO_DESC_STD_VC_LEN\ + + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ + + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ + + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ + + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\ + + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\ + + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ + /* Interface 1, Alternate 1 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + 7/* Endpoint */\ + ) + +#define TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN (\ + TUD_VIDEO_DESC_IAD_LEN\ + /* control */\ + + TUD_VIDEO_DESC_STD_VC_LEN\ + + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ + + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ + + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ + + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN\ + + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN\ + + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ + /* Interface 1, Alternate 1 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + 7/* Endpoint */\ + ) + +#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN (\ + TUD_VIDEO_DESC_IAD_LEN\ + /* control */\ + + TUD_VIDEO_DESC_STD_VC_LEN\ + + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ + + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ + + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ + + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\ + + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\ + + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ + + 7/* Endpoint */\ + ) + +#define TUD_VIDEO_CAPTURE_DESC_MJPEG_BULK_LEN (\ + TUD_VIDEO_DESC_IAD_LEN\ + /* control */\ + + TUD_VIDEO_DESC_STD_VC_LEN\ + + (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\ + + TUD_VIDEO_DESC_CAMERA_TERM_LEN\ + + TUD_VIDEO_DESC_OUTPUT_TERM_LEN\ + /* Interface 1, Alternate 0 */\ + + TUD_VIDEO_DESC_STD_VS_LEN\ + + (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\ + + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN\ + + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN\ + + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\ + + 7/* Endpoint */\ + ) /* Windows support YUY2 and NV12 * https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */ -#define TUD_VIDEO_DESC_CS_VS_FMT_YUY2(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ - _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_YUY2, 16, _frmidx, \ - _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_NV12(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ - _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_NV12, 12, _frmidx, \ - _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_M420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ - _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_M420, 12, _frmidx, \ - _asrx, _asry, _interlace, _cp) -#define TUD_VIDEO_DESC_CS_VS_FMT_I420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, \ - _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, \ - _asrx, _asry, _interlace, _cp) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ - _stridx), /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC( \ - ITF_NUM_VIDEO_CONTROL, 0, \ - _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC( \ - 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ - UVC_CLOCK_FREQUENCY, \ - ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ - 0), /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, \ - _stridx), /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( \ - /*bNumFormats*/ 1, /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ - /*bmaControls(1)*/ 0), /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ - /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ - /*bCopyProtect*/ 0), /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ - _width *_height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, (10000000 / _fps), \ - (10000000 / _fps), (10000000 / _fps) * _fps, \ - (10000000 / _fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ - VIDEO_COLOR_XFER_CH_BT709, \ - VIDEO_COLOR_COEF_SMPTE170M), /* VS alt 1 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), /* EP */ \ - TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ - _stridx), /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC( \ - ITF_NUM_VIDEO_CONTROL, 0, \ - _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC( \ - 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ - UVC_CLOCK_FREQUENCY, \ - ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ - 0), /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, \ - _stridx), /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( \ - /*bNumFormats*/ 1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ - /*bmaControls(1)*/ 0), /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ - /*bmFlags*/ 0, /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ - /*bCopyProtect*/ 0), /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ - _width *_height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, (10000000 / _fps), \ - (10000000 / _fps), (10000000 / _fps) * _fps, \ - (10000000 / _fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ - VIDEO_COLOR_XFER_CH_BT709, \ - VIDEO_COLOR_COEF_SMPTE170M), /* VS alt 1 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), /* EP */ \ - TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) - -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ - _stridx), /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC( \ - ITF_NUM_VIDEO_CONTROL, 0, \ - _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC( \ - 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ - UVC_CLOCK_FREQUENCY, \ - ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, \ - 0), /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, \ - _stridx), /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( \ - /*bNumFormats*/ 1, /*wTotalLength - bLength */ \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ - /*bmaControls(1)*/ 0), /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ - /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ - /*bCopyProtect*/ 0), /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ - _width *_height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, (10000000 / _fps), \ - (10000000 / _fps), (10000000 / _fps) * _fps, \ - (10000000 / _fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING( \ - VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ +#define TUD_VIDEO_DESC_CS_VS_FMT_YUY2(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_YUY2, 16, _frmidx, _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_NV12(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_NV12, 12, _frmidx, _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_M420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_M420, 12, _frmidx, _asrx, _asry, _interlace, _cp) +#define TUD_VIDEO_DESC_CS_VS_FMT_I420(_fmtidx, _numfmtdesc, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfmtdesc, TUD_VIDEO_GUID_I420, 12, _frmidx, _asrx, _asry, _interlace, _cp) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ + /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ + /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ + /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ + /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, _stridx), \ + /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ + _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ + /*bmaControls(1)*/0), \ + /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ + /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ + /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \ + _width * _height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, \ + (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ + /* VS alt 1 */\ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), \ + /* EP */ \ + TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ + /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ + /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ + /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ + /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 0, _stridx), \ + /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ + _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ + /*bmaControls(1)*/0), \ + /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ + /*bmFlags*/0, /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ + /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */1, 0, _width, _height, \ + _width * _height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, \ + (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ + /* VS alt 1 */\ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 1, 1, _stridx), \ + /* EP */ \ + TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1) + + +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ + /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ + /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ + /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \ + /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \ + /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ + /*wTotalLength - bLength */\ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ + _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ + /*bmaControls(1)*/0), \ + /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ + /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ + /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \ + _width * _height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, \ + (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1) -#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ - TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, \ - _stridx), /* Video control 0 */ \ - TUD_VIDEO_DESC_STD_VC( \ - ITF_NUM_VIDEO_CONTROL, 0, \ - _stridx), /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ - TUD_VIDEO_DESC_CS_VC( \ - 0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \ - UVC_CLOCK_FREQUENCY, \ - ITF_NUM_VIDEO_STREAMING), /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ - TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ - TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, \ - UVC_ENTITY_CAP_INPUT_TERMINAL, 0), /* Video stream alt. 0 */ \ - TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, \ - _stridx), /* Video stream header for without still image capture */ \ - TUD_VIDEO_DESC_CS_VS_INPUT( \ - /*bNumFormats*/ 1, \ - /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ - _epin, /*bmInfo*/ 0, /*bTerminalLink*/ UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ - /*bStillCaptureMethod*/ 0, /*bTriggerSupport*/ 0, /*bTriggerUsage*/ 0, \ - /*bmaControls(1)*/ 0), /* Video stream format */ \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/ 1, /*bNumFrameDescriptors*/ 1, \ - /*bmFlags*/ 0, /*bDefaultFrameIndex*/ 1, 0, 0, 0, \ - /*bCopyProtect*/ 0), /* Video stream frame format */ \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */ 1, 0, _width, _height, \ - _width *_height * 16, _width * _height * 16 * _fps, \ - _width * _height * 16 / 8, (10000000 / _fps), \ - (10000000 / _fps), (10000000 / _fps) * _fps, \ - (10000000 / _fps)), \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, \ - VIDEO_COLOR_XFER_CH_BT709, \ - VIDEO_COLOR_COEF_SMPTE170M), /* EP */ \ +#define TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \ + TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \ + /* Video control 0 */ \ + TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \ + /* Header: UVC 1.5, length of followed descs, clock (deprecated), streaming interfaces */ \ + TUD_VIDEO_DESC_CS_VC(0x0150, TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \ + /* Camera Terminal: ID, bAssocTerminal, iTerminal, focal min, max, length, bmControl */ \ + TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0, 0, 0, 0, 0), \ + TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, UVC_ENTITY_CAP_INPUT_TERMINAL, 0), \ + /* Video stream alt. 0 */ \ + TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \ + /* Video stream header for without still image capture */ \ + TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \ + /*wTotalLength - bLength */ TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\ + _epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \ + /*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \ + /*bmaControls(1)*/0), \ + /* Video stream format */ \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \ + /*bmFlags*/0, /*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \ + /* Video stream frame format */ \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(/*bFrameIndex */1, 0, _width, _height, \ + _width * _height * 16, _width * _height * 16 * _fps, \ + _width * _height * 16 / 8, \ + (10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \ + /* EP */ \ TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1) + #endif diff --git a/Libraries/tinyusb/examples/device/webusb_serial/src/main.c b/Libraries/tinyusb/examples/device/webusb_serial/src/main.c index bee9ec5e3a0..800d435b8a1 100644 --- a/Libraries/tinyusb/examples/device/webusb_serial/src/main.c +++ b/Libraries/tinyusb/examples/device/webusb_serial/src/main.c @@ -60,23 +60,26 @@ * - 1000 ms : device mounted * - 2500 ms : device is suspended */ -enum { - BLINK_NOT_MOUNTED = 250, - BLINK_MOUNTED = 1000, - BLINK_SUSPENDED = 2500, +enum { + BLINK_NOT_MOUNTED = 250, + BLINK_MOUNTED = 1000, + BLINK_SUSPENDED = 2500, - BLINK_ALWAYS_ON = UINT32_MAX, - BLINK_ALWAYS_OFF = 0 + BLINK_ALWAYS_ON = UINT32_MAX, + BLINK_ALWAYS_OFF = 0 }; static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; -#define URL "example.tinyusb.org/webusb-serial/index.html" +#define URL "example.tinyusb.org/webusb-serial/index.html" -const tusb_desc_webusb_url_t desc_url = { .bLength = 3 + sizeof(URL) - 1, - .bDescriptorType = 3, // WEBUSB URL type - .bScheme = 1, // 0: http, 1: https - .url = URL }; +const tusb_desc_webusb_url_t desc_url = +{ + .bLength = 3 + sizeof(URL) - 1, + .bDescriptorType = 3, // WEBUSB URL type + .bScheme = 1, // 0: http, 1: https + .url = URL +}; static bool web_serial_connected = false; @@ -88,42 +91,45 @@ void webserial_task(void); /*------------- MAIN -------------*/ int main(void) { - board_init(); - - // init device stack on configured roothub port - tud_init(BOARD_TUD_RHPORT); - - if (board_init_after_tusb) { - board_init_after_tusb(); - } - - while (1) { - tud_task(); // tinyusb device task - cdc_task(); - webserial_task(); - led_blinking_task(); - } + board_init(); + + // init device stack on configured roothub port + tud_init(BOARD_TUD_RHPORT); + + if (board_init_after_tusb) { + board_init_after_tusb(); + } + + while (1) + { + tud_task(); // tinyusb device task + cdc_task(); + webserial_task(); + led_blinking_task(); + } } // send characters to both CDC and WebUSB void echo_all(uint8_t buf[], uint32_t count) { - // echo to web serial - if (web_serial_connected) { - tud_vendor_write(buf, count); - tud_vendor_write_flush(); - } - - // echo to cdc - if (tud_cdc_connected()) { - for (uint32_t i = 0; i < count; i++) { - tud_cdc_write_char(buf[i]); - - if (buf[i] == '\r') - tud_cdc_write_char('\n'); - } - tud_cdc_write_flush(); + // echo to web serial + if ( web_serial_connected ) + { + tud_vendor_write(buf, count); + tud_vendor_write_flush(); + } + + // echo to cdc + if ( tud_cdc_connected() ) + { + for(uint32_t i=0; ibmRequestType_bit.type) { + switch (request->bmRequestType_bit.type) + { case TUSB_REQ_TYPE_VENDOR: - switch (request->bRequest) { + switch (request->bRequest) + { case VENDOR_REQUEST_WEBUSB: - // match vendor request in BOS descriptor - // Get landing page url - return tud_control_xfer(rhport, request, (void *)(uintptr_t)&desc_url, - desc_url.bLength); + // match vendor request in BOS descriptor + // Get landing page url + return tud_control_xfer(rhport, request, (void*)(uintptr_t) &desc_url, desc_url.bLength); case VENDOR_REQUEST_MICROSOFT: - if (request->wIndex == 7) { - // Get Microsoft OS 2.0 compatible descriptor - uint16_t total_len; - memcpy(&total_len, desc_ms_os_20 + 8, 2); - - return tud_control_xfer(rhport, request, (void *)(uintptr_t)desc_ms_os_20, - total_len); - } else { - return false; - } - - default: - break; - } - break; + if ( request->wIndex == 7 ) + { + // Get Microsoft OS 2.0 compatible descriptor + uint16_t total_len; + memcpy(&total_len, desc_ms_os_20+8, 2); + + return tud_control_xfer(rhport, request, (void*)(uintptr_t) desc_ms_os_20, total_len); + }else + { + return false; + } + + default: break; + } + break; case TUSB_REQ_TYPE_CLASS: - if (request->bRequest == 0x22) { - // Webserial simulate the CDC_REQUEST_SET_CONTROL_LINE_STATE (0x22) to connect and disconnect. - web_serial_connected = (request->wValue != 0); - - // Always lit LED if connected - if (web_serial_connected) { - board_led_write(true); - blink_interval_ms = BLINK_ALWAYS_ON; - - tud_vendor_write_str("\r\nWebUSB interface connected\r\n"); - tud_vendor_write_flush(); - } else { - blink_interval_ms = BLINK_MOUNTED; - } - - // response with status OK - return tud_control_status(rhport, request); + if (request->bRequest == 0x22) + { + // Webserial simulate the CDC_REQUEST_SET_CONTROL_LINE_STATE (0x22) to connect and disconnect. + web_serial_connected = (request->wValue != 0); + + // Always lit LED if connected + if ( web_serial_connected ) + { + board_led_write(true); + blink_interval_ms = BLINK_ALWAYS_ON; + + tud_vendor_write_str("\r\nWebUSB interface connected\r\n"); + tud_vendor_write_flush(); + }else + { + blink_interval_ms = BLINK_MOUNTED; } - break; - default: - break; - } + // response with status OK + return tud_control_status(rhport, request); + } + break; - // stall unknown request - return false; + default: break; + } + + // stall unknown request + return false; } void webserial_task(void) { - if (web_serial_connected) { - if (tud_vendor_available()) { - uint8_t buf[64]; - uint32_t count = tud_vendor_read(buf, sizeof(buf)); - - // echo back to both web serial and cdc - echo_all(buf, count); - } + if ( web_serial_connected ) + { + if ( tud_vendor_available() ) + { + uint8_t buf[64]; + uint32_t count = tud_vendor_read(buf, sizeof(buf)); + + // echo back to both web serial and cdc + echo_all(buf, count); } + } } + //--------------------------------------------------------------------+ // USB CDC //--------------------------------------------------------------------+ void cdc_task(void) { - if (tud_cdc_connected()) { - // connected and there are data available - if (tud_cdc_available()) { - uint8_t buf[64]; + if ( tud_cdc_connected() ) + { + // connected and there are data available + if ( tud_cdc_available() ) + { + uint8_t buf[64]; - uint32_t count = tud_cdc_read(buf, sizeof(buf)); + uint32_t count = tud_cdc_read(buf, sizeof(buf)); - // echo back to both web serial and cdc - echo_all(buf, count); - } + // echo back to both web serial and cdc + echo_all(buf, count); } + } } // Invoked when cdc when line state changed e.g connected/disconnected void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { - (void)itf; - - // connected - if (dtr && rts) { - // print initial message when connected - tud_cdc_write_str("\r\nTinyUSB WebUSB device example\r\n"); - } + (void) itf; + + // connected + if ( dtr && rts ) + { + // print initial message when connected + tud_cdc_write_str("\r\nTinyUSB WebUSB device example\r\n"); + } } // Invoked when CDC interface received data from host void tud_cdc_rx_cb(uint8_t itf) { - (void)itf; + (void) itf; } //--------------------------------------------------------------------+ @@ -280,14 +293,13 @@ void tud_cdc_rx_cb(uint8_t itf) //--------------------------------------------------------------------+ void led_blinking_task(void) { - static uint32_t start_ms = 0; - static bool led_state = false; + static uint32_t start_ms = 0; + static bool led_state = false; - // Blink every interval ms - if (board_millis() - start_ms < blink_interval_ms) - return; // not enough time - start_ms += blink_interval_ms; + // Blink every interval ms + if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time + start_ms += blink_interval_ms; - board_led_write(led_state); - led_state = 1 - led_state; // toggle + board_led_write(led_state); + led_state = 1 - led_state; // toggle } diff --git a/Libraries/tinyusb/examples/device/webusb_serial/src/tusb_config.h b/Libraries/tinyusb/examples/device/webusb_serial/src/tusb_config.h index 555f3ba63a4..fde732b9ec7 100644 --- a/Libraries/tinyusb/examples/device/webusb_serial/src/tusb_config.h +++ b/Libraries/tinyusb/examples/device/webusb_serial/src/tusb_config.h @@ -27,7 +27,7 @@ #define _TUSB_CONFIG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -36,12 +36,12 @@ extern "C" { // RHPort number used for device can be defined by board.mk, default to port 0 #ifndef BOARD_TUD_RHPORT -#define BOARD_TUD_RHPORT 0 +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk #ifndef BOARD_TUD_MAX_SPEED -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif //-------------------------------------------------------------------- @@ -54,18 +54,18 @@ extern "C" { #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 +#define CFG_TUSB_DEBUG 0 #endif // Enable Device stack -#define CFG_TUD_ENABLED 1 +#define CFG_TUD_ENABLED 1 // Default is max speed that hardware controller could support with on-chip PHY -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -79,7 +79,7 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -87,27 +87,28 @@ extern "C" { //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 +#define CFG_TUD_ENDPOINT0_SIZE 64 #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 1 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 1 +#define CFG_TUD_CDC 1 +#define CFG_TUD_MSC 0 +#define CFG_TUD_HID 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 1 // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_CDC_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) // Vendor FIFO size of TX and RX // If not configured vendor endpoints will not be buffered #define CFG_TUD_VENDOR_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #define CFG_TUD_VENDOR_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) + #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CONFIG_H_ */ diff --git a/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c b/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c index 1ff8412cd60..ae1051af619 100644 --- a/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c +++ b/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c @@ -33,108 +33,112 @@ * Auto ProductID layout's Bitmap: * [MSB] MIDI | HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | \ - _PID_MAP(VENDOR, 4)) +#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) ) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ + _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = { - .bLength = sizeof(tusb_desc_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0210, // at least 2.1 or 3.x for BOS & webUSB +tusb_desc_device_t const desc_device = +{ + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0210, // at least 2.1 or 3.x for BOS & webUSB // Use Interface Association Descriptor (IAD) for CDC // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) - .bDeviceClass = TUSB_CLASS_MISC, - .bDeviceSubClass = MISC_SUBCLASS_COMMON, - .bDeviceProtocol = MISC_PROTOCOL_IAD, - .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, - .bcdDevice = 0x0100, + .idVendor = 0xCafe, + .idProduct = USB_PID, + .bcdDevice = 0x0100, - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, .bNumConfigurations = 0x01 }; // Invoked when received GET DEVICE DESCRIPTOR // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void) +uint8_t const * tud_descriptor_device_cb(void) { - return (uint8_t const *)&desc_device; + return (uint8_t const *) &desc_device; } //--------------------------------------------------------------------+ // Configuration Descriptor //--------------------------------------------------------------------+ -enum { ITF_NUM_CDC = 0, ITF_NUM_CDC_DATA, ITF_NUM_VENDOR, ITF_NUM_TOTAL }; - -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_VENDOR_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || \ - CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_CDC_IN 2 -#define EPNUM_CDC_OUT 2 -#define EPNUM_VENDOR_IN 5 -#define EPNUM_VENDOR_OUT 5 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X -// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_IN 2 -#define EPNUM_CDC_OUT 3 -#define EPNUM_VENDOR_IN 4 -#define EPNUM_VENDOR_OUT 5 +enum +{ + ITF_NUM_CDC = 0, + ITF_NUM_CDC_DATA, + ITF_NUM_VENDOR, + ITF_NUM_TOTAL +}; + +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_VENDOR_DESC_LEN) + +#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX + // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number + // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... + #define EPNUM_CDC_IN 2 + #define EPNUM_CDC_OUT 2 + #define EPNUM_VENDOR_IN 5 + #define EPNUM_VENDOR_OUT 5 +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X + // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_IN 2 + #define EPNUM_CDC_OUT 3 + #define EPNUM_VENDOR_IN 4 + #define EPNUM_VENDOR_OUT 5 #elif CFG_TUSB_MCU == OPT_MCU_FT90X || CFG_TUSB_MCU == OPT_MCU_FT93X -// FT9XX doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_IN 2 -#define EPNUM_CDC_OUT 3 -#define EPNUM_VENDOR_IN 4 -#define EPNUM_VENDOR_OUT 5 + // FT9XX doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_IN 2 + #define EPNUM_CDC_OUT 3 + #define EPNUM_VENDOR_IN 4 + #define EPNUM_VENDOR_OUT 5 #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 || CFG_TUSB_MCU == OPT_MCU_MAX32650 || \ - CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 -// MAX32 doesn't support a same endpoint number with different direction IN and OUT -// e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_CDC_IN 2 -#define EPNUM_CDC_OUT 3 -#define EPNUM_VENDOR_IN 4 -#define EPNUM_VENDOR_OUT 5 + CFG_TUSB_MCU == OPT_MCU_MAX32666 || CFG_TUSB_MCU == OPT_MCU_MAX78002 + // MAX32 doesn't support a same endpoint number with different direction IN and OUT + // e.g EP1 OUT & EP1 IN cannot exist together + #define EPNUM_CDC_IN 2 + #define EPNUM_CDC_OUT 3 + #define EPNUM_VENDOR_IN 4 + #define EPNUM_VENDOR_OUT 5 #else -#define EPNUM_CDC_IN 2 -#define EPNUM_CDC_OUT 2 -#define EPNUM_VENDOR_IN 3 -#define EPNUM_VENDOR_OUT 3 + #define EPNUM_CDC_IN 2 + #define EPNUM_CDC_OUT 2 + #define EPNUM_VENDOR_IN 3 + #define EPNUM_VENDOR_OUT 3 #endif -uint8_t const desc_configuration[] = { - // Config number, interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), +uint8_t const desc_configuration[] = +{ + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), - // Interface number, string index, EP notification address and size, EP data address (out, in) and size. - TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, 0x81, 8, EPNUM_CDC_OUT, 0x80 | EPNUM_CDC_IN, - TUD_OPT_HIGH_SPEED ? 512 : 64), + // Interface number, string index, EP notification address and size, EP data address (out, in) and size. + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, 0x81, 8, EPNUM_CDC_OUT, 0x80 | EPNUM_CDC_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), - // Interface number, string index, EP Out & IN address, EP size - TUD_VENDOR_DESCRIPTOR(ITF_NUM_VENDOR, 5, EPNUM_VENDOR_OUT, 0x80 | EPNUM_VENDOR_IN, - TUD_OPT_HIGH_SPEED ? 512 : 64) + // Interface number, string index, EP Out & IN address, EP size + TUD_VENDOR_DESCRIPTOR(ITF_NUM_VENDOR, 5, EPNUM_VENDOR_OUT, 0x80 | EPNUM_VENDOR_IN, TUD_OPT_HIGH_SPEED ? 512 : 64) }; // Invoked when received GET CONFIGURATION DESCRIPTOR // Application return pointer to descriptor // Descriptor contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +uint8_t const * tud_descriptor_configuration_cb(uint8_t index) { - (void)index; // for multiple configurations - return desc_configuration; + (void) index; // for multiple configurations + return desc_configuration; } //--------------------------------------------------------------------+ @@ -155,59 +159,55 @@ GUID is freshly generated and should be OK to use. (Section Microsoft OS compatibility descriptors) */ -#define BOS_TOTAL_LEN (TUD_BOS_DESC_LEN + TUD_BOS_WEBUSB_DESC_LEN + TUD_BOS_MICROSOFT_OS_DESC_LEN) +#define BOS_TOTAL_LEN (TUD_BOS_DESC_LEN + TUD_BOS_WEBUSB_DESC_LEN + TUD_BOS_MICROSOFT_OS_DESC_LEN) -#define MS_OS_20_DESC_LEN 0xB2 +#define MS_OS_20_DESC_LEN 0xB2 // BOS Descriptor is required for webUSB -uint8_t const desc_bos[] = { - // total length, number of device caps - TUD_BOS_DESCRIPTOR(BOS_TOTAL_LEN, 2), +uint8_t const desc_bos[] = +{ + // total length, number of device caps + TUD_BOS_DESCRIPTOR(BOS_TOTAL_LEN, 2), - // Vendor Code, iLandingPage - TUD_BOS_WEBUSB_DESCRIPTOR(VENDOR_REQUEST_WEBUSB, 1), + // Vendor Code, iLandingPage + TUD_BOS_WEBUSB_DESCRIPTOR(VENDOR_REQUEST_WEBUSB, 1), - // Microsoft OS 2.0 descriptor - TUD_BOS_MS_OS_20_DESCRIPTOR(MS_OS_20_DESC_LEN, VENDOR_REQUEST_MICROSOFT) + // Microsoft OS 2.0 descriptor + TUD_BOS_MS_OS_20_DESCRIPTOR(MS_OS_20_DESC_LEN, VENDOR_REQUEST_MICROSOFT) }; -uint8_t const *tud_descriptor_bos_cb(void) +uint8_t const * tud_descriptor_bos_cb(void) { - return desc_bos; + return desc_bos; } -uint8_t const desc_ms_os_20[] = { - // Set header: length, type, windows version, total length - U16_TO_U8S_LE(0x000A), U16_TO_U8S_LE(MS_OS_20_SET_HEADER_DESCRIPTOR), U32_TO_U8S_LE(0x06030000), - U16_TO_U8S_LE(MS_OS_20_DESC_LEN), - - // Configuration subset header: length, type, configuration index, reserved, configuration total length - U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_CONFIGURATION), 0, 0, - U16_TO_U8S_LE(MS_OS_20_DESC_LEN - 0x0A), - - // Function Subset header: length, type, first interface, reserved, subset length - U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_FUNCTION), ITF_NUM_VENDOR, 0, - U16_TO_U8S_LE(MS_OS_20_DESC_LEN - 0x0A - 0x08), - - // MS OS 2.0 Compatible ID descriptor: length, type, compatible ID, sub compatible ID - U16_TO_U8S_LE(0x0014), U16_TO_U8S_LE(MS_OS_20_FEATURE_COMPATBLE_ID), 'W', 'I', 'N', 'U', 'S', - 'B', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sub-compatible - - // MS OS 2.0 Registry property descriptor: length, type - U16_TO_U8S_LE(MS_OS_20_DESC_LEN - 0x0A - 0x08 - 0x08 - 0x14), - U16_TO_U8S_LE(MS_OS_20_FEATURE_REG_PROPERTY), U16_TO_U8S_LE(0x0007), - U16_TO_U8S_LE( - 0x002A), // wPropertyDataType, wPropertyNameLength and PropertyName "DeviceInterfaceGUIDs\0" in UTF-16 - 'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, 'I', 0x00, 'n', 0x00, 't', - 0x00, 'e', 0x00, 'r', 0x00, 'f', 0x00, 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, - 'I', 0x00, 'D', 0x00, 's', 0x00, 0x00, 0x00, - U16_TO_U8S_LE(0x0050), // wPropertyDataLength - //bPropertyData: “{975F44D9-0D08-43FD-8B3E-127CA8AFFF9D}”. - '{', 0x00, '9', 0x00, '7', 0x00, '5', 0x00, 'F', 0x00, '4', 0x00, '4', 0x00, 'D', 0x00, '9', - 0x00, '-', 0x00, '0', 0x00, 'D', 0x00, '0', 0x00, '8', 0x00, '-', 0x00, '4', 0x00, '3', 0x00, - 'F', 0x00, 'D', 0x00, '-', 0x00, '8', 0x00, 'B', 0x00, '3', 0x00, 'E', 0x00, '-', 0x00, '1', - 0x00, '2', 0x00, '7', 0x00, 'C', 0x00, 'A', 0x00, '8', 0x00, 'A', 0x00, 'F', 0x00, 'F', 0x00, - 'F', 0x00, '9', 0x00, 'D', 0x00, '}', 0x00, 0x00, 0x00, 0x00, 0x00 + +uint8_t const desc_ms_os_20[] = +{ + // Set header: length, type, windows version, total length + U16_TO_U8S_LE(0x000A), U16_TO_U8S_LE(MS_OS_20_SET_HEADER_DESCRIPTOR), U32_TO_U8S_LE(0x06030000), U16_TO_U8S_LE(MS_OS_20_DESC_LEN), + + // Configuration subset header: length, type, configuration index, reserved, configuration total length + U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_CONFIGURATION), 0, 0, U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A), + + // Function Subset header: length, type, first interface, reserved, subset length + U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_FUNCTION), ITF_NUM_VENDOR, 0, U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A-0x08), + + // MS OS 2.0 Compatible ID descriptor: length, type, compatible ID, sub compatible ID + U16_TO_U8S_LE(0x0014), U16_TO_U8S_LE(MS_OS_20_FEATURE_COMPATBLE_ID), 'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sub-compatible + + // MS OS 2.0 Registry property descriptor: length, type + U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A-0x08-0x08-0x14), U16_TO_U8S_LE(MS_OS_20_FEATURE_REG_PROPERTY), + U16_TO_U8S_LE(0x0007), U16_TO_U8S_LE(0x002A), // wPropertyDataType, wPropertyNameLength and PropertyName "DeviceInterfaceGUIDs\0" in UTF-16 + 'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, 'I', 0x00, 'n', 0x00, 't', 0x00, 'e', 0x00, + 'r', 0x00, 'f', 0x00, 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, 'I', 0x00, 'D', 0x00, 's', 0x00, 0x00, 0x00, + U16_TO_U8S_LE(0x0050), // wPropertyDataLength + //bPropertyData: “{975F44D9-0D08-43FD-8B3E-127CA8AFFF9D}”. + '{', 0x00, '9', 0x00, '7', 0x00, '5', 0x00, 'F', 0x00, '4', 0x00, '4', 0x00, 'D', 0x00, '9', 0x00, '-', 0x00, + '0', 0x00, 'D', 0x00, '0', 0x00, '8', 0x00, '-', 0x00, '4', 0x00, '3', 0x00, 'F', 0x00, 'D', 0x00, '-', 0x00, + '8', 0x00, 'B', 0x00, '3', 0x00, 'E', 0x00, '-', 0x00, '1', 0x00, '2', 0x00, '7', 0x00, 'C', 0x00, 'A', 0x00, + '8', 0x00, 'A', 0x00, 'F', 0x00, 'F', 0x00, 'F', 0x00, '9', 0x00, 'D', 0x00, '}', 0x00, 0x00, 0x00, 0x00, 0x00 }; TU_VERIFY_STATIC(sizeof(desc_ms_os_20) == MS_OS_20_DESC_LEN, "Incorrect size"); @@ -218,65 +218,63 @@ TU_VERIFY_STATIC(sizeof(desc_ms_os_20) == MS_OS_20_DESC_LEN, "Incorrect size"); // String Descriptor Index enum { - STRID_LANGID = 0, - STRID_MANUFACTURER, - STRID_PRODUCT, - STRID_SERIAL, + STRID_LANGID = 0, + STRID_MANUFACTURER, + STRID_PRODUCT, + STRID_SERIAL, }; // array of pointer to string descriptors -char const *string_desc_arr[] = { - (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) - "TinyUSB", // 1: Manufacturer - "TinyUSB Device", // 2: Product - NULL, // 3: Serials will use unique ID if possible - "TinyUSB CDC", // 4: CDC Interface - "TinyUSB WebUSB" // 5: Vendor Interface +char const *string_desc_arr[] = +{ + (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "TinyUSB", // 1: Manufacturer + "TinyUSB Device", // 2: Product + NULL, // 3: Serials will use unique ID if possible + "TinyUSB CDC", // 4: CDC Interface + "TinyUSB WebUSB" // 5: Vendor Interface }; static uint16_t _desc_str[32 + 1]; // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) -{ - (void)langid; - size_t chr_count; +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) { + (void) langid; + size_t chr_count; - switch (index) { + switch ( index ) { case STRID_LANGID: - memcpy(&_desc_str[1], string_desc_arr[0], 2); - chr_count = 1; - break; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + break; case STRID_SERIAL: - chr_count = board_usb_get_serial(_desc_str + 1, 32); - break; + chr_count = board_usb_get_serial(_desc_str + 1, 32); + break; default: - // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. - // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors - if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) - return NULL; + if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL; - const char *str = string_desc_arr[index]; + const char *str = string_desc_arr[index]; - // Cap at max char - chr_count = strlen(str); - size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type - if (chr_count > max_count) - chr_count = max_count; + // Cap at max char + chr_count = strlen(str); + size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type + if ( chr_count > max_count ) chr_count = max_count; - // Convert ASCII string into UTF-16 - for (size_t i = 0; i < chr_count; i++) { - _desc_str[1 + i] = str[i]; - } - break; - } + // Convert ASCII string into UTF-16 + for ( size_t i = 0; i < chr_count; i++ ) { + _desc_str[1 + i] = str[i]; + } + break; + } - // first byte is length (including header), second byte is string type - _desc_str[0] = (uint16_t)((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); + // first byte is length (including header), second byte is string type + _desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2)); - return _desc_str; + return _desc_str; } diff --git a/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h b/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h index 27f9a67f653..a1c4a2cf117 100644 --- a/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h +++ b/Libraries/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h @@ -25,7 +25,11 @@ #ifndef USB_DESCRIPTORS_H_ #define USB_DESCRIPTORS_H_ -enum { VENDOR_REQUEST_WEBUSB = 1, VENDOR_REQUEST_MICROSOFT = 2 }; +enum +{ + VENDOR_REQUEST_WEBUSB = 1, + VENDOR_REQUEST_MICROSOFT = 2 +}; extern uint8_t const desc_ms_os_20[]; diff --git a/Libraries/tinyusb/hw/bsp/ansi_escape.h b/Libraries/tinyusb/hw/bsp/ansi_escape.h index 4a356f14a8e..15af2f3ab1c 100644 --- a/Libraries/tinyusb/hw/bsp/ansi_escape.h +++ b/Libraries/tinyusb/hw/bsp/ansi_escape.h @@ -31,65 +31,65 @@ #ifndef _TUSB_ANSI_ESC_CODE_H_ #define _TUSB_ANSI_ESC_CODE_H_ + #ifdef __cplusplus -extern "C" { + extern "C" { #endif -#define CSI_CODE(seq) "\33[" seq -#define CSI_SGR(x) CSI_CODE(#x) "m" +#define CSI_CODE(seq) "\33[" seq +#define CSI_SGR(x) CSI_CODE(#x) "m" //------------- Cursor movement -------------// /** \defgroup group_ansi_cursor Cursor Movement * @{ */ -#define ANSI_CURSOR_UP(n) CSI_CODE(#n "A") ///< Move cursor up -#define ANSI_CURSOR_DOWN(n) CSI_CODE(#n "B") ///< Move cursor down -#define ANSI_CURSOR_FORWARD(n) CSI_CODE(#n "C") ///< Move cursor forward -#define ANSI_CURSOR_BACKWARD(n) CSI_CODE(#n "D") ///< Move cursor backward -#define ANSI_CURSOR_LINE_DOWN(n) \ - CSI_CODE(#n "E") ///< Move cursor to the beginning of the line (n) down -#define ANSI_CURSOR_LINE_UP(n) CSI_CODE(#n "F") ///< Move cursor to the beginning of the line (n) up +#define ANSI_CURSOR_UP(n) CSI_CODE(#n "A") ///< Move cursor up +#define ANSI_CURSOR_DOWN(n) CSI_CODE(#n "B") ///< Move cursor down +#define ANSI_CURSOR_FORWARD(n) CSI_CODE(#n "C") ///< Move cursor forward +#define ANSI_CURSOR_BACKWARD(n) CSI_CODE(#n "D") ///< Move cursor backward +#define ANSI_CURSOR_LINE_DOWN(n) CSI_CODE(#n "E") ///< Move cursor to the beginning of the line (n) down +#define ANSI_CURSOR_LINE_UP(n) CSI_CODE(#n "F") ///< Move cursor to the beginning of the line (n) up #define ANSI_CURSOR_POSITION(n, m) CSI_CODE(#n ";" #m "H") ///< Move cursor to position (n, m) /** @} */ //------------- Screen -------------// /** \defgroup group_ansi_screen Screen Control * @{ */ -#define ANSI_ERASE_SCREEN(n) CSI_CODE(#n "J") ///< Erase the screen -#define ANSI_ERASE_LINE(n) CSI_CODE(#n "K") ///< Erase the line (n) -#define ANSI_SCROLL_UP(n) CSI_CODE(#n "S") ///< Scroll the whole page up (n) lines -#define ANSI_SCROLL_DOWN(n) CSI_CODE(#n "T") ///< Scroll the whole page down (n) lines +#define ANSI_ERASE_SCREEN(n) CSI_CODE(#n "J") ///< Erase the screen +#define ANSI_ERASE_LINE(n) CSI_CODE(#n "K") ///< Erase the line (n) +#define ANSI_SCROLL_UP(n) CSI_CODE(#n "S") ///< Scroll the whole page up (n) lines +#define ANSI_SCROLL_DOWN(n) CSI_CODE(#n "T") ///< Scroll the whole page down (n) lines /** @} */ //------------- Text Color -------------// /** \defgroup group_ansi_text Text Color * @{ */ -#define ANSI_TEXT_BLACK CSI_SGR(30) -#define ANSI_TEXT_RED CSI_SGR(31) -#define ANSI_TEXT_GREEN CSI_SGR(32) -#define ANSI_TEXT_YELLOW CSI_SGR(33) -#define ANSI_TEXT_BLUE CSI_SGR(34) -#define ANSI_TEXT_MAGENTA CSI_SGR(35) -#define ANSI_TEXT_CYAN CSI_SGR(36) -#define ANSI_TEXT_WHITE CSI_SGR(37) -#define ANSI_TEXT_DEFAULT CSI_SGR(39) +#define ANSI_TEXT_BLACK CSI_SGR(30) +#define ANSI_TEXT_RED CSI_SGR(31) +#define ANSI_TEXT_GREEN CSI_SGR(32) +#define ANSI_TEXT_YELLOW CSI_SGR(33) +#define ANSI_TEXT_BLUE CSI_SGR(34) +#define ANSI_TEXT_MAGENTA CSI_SGR(35) +#define ANSI_TEXT_CYAN CSI_SGR(36) +#define ANSI_TEXT_WHITE CSI_SGR(37) +#define ANSI_TEXT_DEFAULT CSI_SGR(39) /** @} */ //------------- Background Color -------------// /** \defgroup group_ansi_background Background Color * @{ */ -#define ANSI_BG_BLACK CSI_SGR(40) -#define ANSI_BG_RED CSI_SGR(41) -#define ANSI_BG_GREEN CSI_SGR(42) -#define ANSI_BG_YELLOW CSI_SGR(43) -#define ANSI_BG_BLUE CSI_SGR(44) -#define ANSI_BG_MAGENTA CSI_SGR(45) -#define ANSI_BG_CYAN CSI_SGR(46) -#define ANSI_BG_WHITE CSI_SGR(47) -#define ANSI_BG_DEFAULT CSI_SGR(49) +#define ANSI_BG_BLACK CSI_SGR(40) +#define ANSI_BG_RED CSI_SGR(41) +#define ANSI_BG_GREEN CSI_SGR(42) +#define ANSI_BG_YELLOW CSI_SGR(43) +#define ANSI_BG_BLUE CSI_SGR(44) +#define ANSI_BG_MAGENTA CSI_SGR(45) +#define ANSI_BG_CYAN CSI_SGR(46) +#define ANSI_BG_WHITE CSI_SGR(47) +#define ANSI_BG_DEFAULT CSI_SGR(49) /** @} */ #ifdef __cplusplus -} + } #endif #endif /* _TUSB_ANSI_ESC_CODE_H_ */ diff --git a/Libraries/tinyusb/hw/bsp/board.c b/Libraries/tinyusb/hw/bsp/board.c index f11efa19218..bb339f61363 100644 --- a/Libraries/tinyusb/hw/bsp/board.c +++ b/Libraries/tinyusb/hw/bsp/board.c @@ -29,14 +29,14 @@ // newlib read()/write() retarget //--------------------------------------------------------------------+ #ifdef __ICCARM__ -#define sys_write __write -#define sys_read __read + #define sys_write __write + #define sys_read __read #elif defined(__MSP430__) || defined(__RX__) -#define sys_write write -#define sys_read read + #define sys_write write + #define sys_read read #else -#define sys_write _write -#define sys_read _read + #define sys_write _write + #define sys_read _read #endif #if defined(LOGGER_RTT) @@ -46,18 +46,16 @@ #if !(defined __SES_ARM) && !(defined __SES_RISCV) && !(defined __CROSSWORKS_ARM) #include "SEGGER_RTT.h" -TU_ATTR_USED int sys_write(int fhdl, const char *buf, size_t count) -{ - (void)fhdl; - SEGGER_RTT_Write(0, (const char *)buf, (int)count); - return (int)count; +TU_ATTR_USED int sys_write(int fhdl, const char *buf, size_t count) { + (void) fhdl; + SEGGER_RTT_Write(0, (const char *) buf, (int) count); + return (int) count; } -TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) -{ - (void)fhdl; - int rd = (int)SEGGER_RTT_Read(0, buf, count); - return (rd > 0) ? rd : -1; +TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) { + (void) fhdl; + int rd = (int) SEGGER_RTT_Read(0, buf, count); + return (rd > 0) ? rd : -1; } #endif @@ -66,40 +64,36 @@ TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) // Logging with SWO for ARM Cortex #include "board_mcu.h" -TU_ATTR_USED int sys_write(int fhdl, const char *buf, size_t count) -{ - (void)fhdl; - uint8_t const *buf8 = (uint8_t const *)buf; +TU_ATTR_USED int sys_write (int fhdl, const char *buf, size_t count) { + (void) fhdl; + uint8_t const* buf8 = (uint8_t const*) buf; - for (size_t i = 0; i < count; i++) { - ITM_SendChar(buf8[i]); - } + for(size_t i=0; i 0) ? rd : -1; +TU_ATTR_USED int sys_read (int fhdl, char *buf, size_t count) { + (void) fhdl; + int rd = board_uart_read((uint8_t*) buf, (int) count); + return (rd > 0) ? rd : -1; } #endif @@ -116,17 +110,15 @@ TU_ATTR_USED int sys_read(int fhdl, char *buf, size_t count) // Clang use picolibc #if defined(__clang__) -static int cl_putc(char c, FILE *f) -{ - (void)f; - return sys_write(0, &c, 1); +static int cl_putc(char c, FILE *f) { + (void) f; + return sys_write(0, &c, 1); } -static int cl_getc(FILE *f) -{ - (void)f; - char c; - return sys_read(0, &c, 1) > 0 ? c : -1; +static int cl_getc(FILE* f) { + (void) f; + char c; + return sys_read(0, &c, 1) > 0 ? c : -1; } static FILE __stdio = FDEV_SETUP_STREAM(cl_putc, cl_getc, NULL, _FDEV_SETUP_RW); @@ -138,8 +130,7 @@ __strong_reference(stdin, stderr); //--------------------------------------------------------------------+ // Board API //--------------------------------------------------------------------+ -int board_getchar(void) -{ - char c; - return (sys_read(0, &c, 1) > 0) ? (int)c : (-1); +int board_getchar(void) { + char c; + return (sys_read(0, &c, 1) > 0) ? (int) c : (-1); } diff --git a/Libraries/tinyusb/hw/bsp/board_api.h b/Libraries/tinyusb/hw/bsp/board_api.h index fc4963bb25f..a458a3fdcc4 100644 --- a/Libraries/tinyusb/hw/bsp/board_api.h +++ b/Libraries/tinyusb/hw/bsp/board_api.h @@ -40,25 +40,25 @@ extern "C" { #if CFG_TUSB_OS == OPT_OS_FREERTOS #if TUP_MCU_ESPRESSIF -// ESP-IDF need "freertos/" prefix in include path. -// CFG_TUSB_OS_INC_PATH should be defined accordingly. -#include "freertos/FreeRTOS.h" -#include "freertos/semphr.h" -#include "freertos/queue.h" -#include "freertos/task.h" -#include "freertos/timers.h" + // ESP-IDF need "freertos/" prefix in include path. + // CFG_TUSB_OS_INC_PATH should be defined accordingly. + #include "freertos/FreeRTOS.h" + #include "freertos/semphr.h" + #include "freertos/queue.h" + #include "freertos/task.h" + #include "freertos/timers.h" #else -#include "FreeRTOS.h" -#include "semphr.h" -#include "queue.h" -#include "task.h" -#include "timers.h" + #include "FreeRTOS.h" + #include "semphr.h" + #include "queue.h" + #include "task.h" + #include "timers.h" #endif #endif // Define the default baudrate #ifndef CFG_BOARD_UART_BAUDRATE -#define CFG_BOARD_UART_BAUDRATE 115200 ///< Default baud rate +#define CFG_BOARD_UART_BAUDRATE 115200 ///< Default baud rate #endif //--------------------------------------------------------------------+ @@ -100,28 +100,24 @@ int board_uart_write(void const *buf, int len); uint32_t board_millis(void); #elif CFG_TUSB_OS == OPT_OS_FREERTOS -static inline uint32_t board_millis(void) -{ - return ((((uint64_t)xTaskGetTickCount()) * 1000) / configTICK_RATE_HZ); +static inline uint32_t board_millis(void) { + return ( ( ((uint64_t) xTaskGetTickCount()) * 1000) / configTICK_RATE_HZ ); } #elif CFG_TUSB_OS == OPT_OS_MYNEWT -static inline uint32_t board_millis(void) -{ - return os_time_ticks_to_ms32(os_time_get()); +static inline uint32_t board_millis(void) { + return os_time_ticks_to_ms32( os_time_get() ); } #elif CFG_TUSB_OS == OPT_OS_PICO #include "pico/time.h" -static inline uint32_t board_millis(void) -{ - return to_ms_since_boot(get_absolute_time()); +static inline uint32_t board_millis(void) { + return to_ms_since_boot(get_absolute_time()); } #elif CFG_TUSB_OS == OPT_OS_RTTHREAD -static inline uint32_t board_millis(void) -{ - return (((uint64_t)rt_tick_get()) * 1000 / RT_TICK_PER_SECOND); +static inline uint32_t board_millis(void) { + return (((uint64_t)rt_tick_get()) * 1000 / RT_TICK_PER_SECOND); } #elif CFG_TUSB_OS == OPT_OS_CUSTOM @@ -129,69 +125,66 @@ static inline uint32_t board_millis(void) uint32_t board_millis(void); #else -#error "board_millis() is not implemented for this OS" + #error "board_millis() is not implemented for this OS" #endif //--------------------------------------------------------------------+ // Helper functions //--------------------------------------------------------------------+ -static inline void board_led_on(void) -{ - board_led_write(true); +static inline void board_led_on(void) { + board_led_write(true); } -static inline void board_led_off(void) -{ - board_led_write(false); +static inline void board_led_off(void) { + board_led_write(false); } // Get USB Serial number string from unique ID if available. Return number of character. // Input is string descriptor from index 1 (index 0 is type + len) -static inline size_t board_usb_get_serial(uint16_t desc_str1[], size_t max_chars) -{ - uint8_t uid[16] TU_ATTR_ALIGNED(4); - size_t uid_len; - - // TODO work with make, but not working with esp32s3 cmake - if (board_get_unique_id) { - uid_len = board_get_unique_id(uid, sizeof(uid)); - } else { - // fixed serial string is 01234567889ABCDEF - uint32_t *uid32 = (uint32_t *)(uintptr_t)uid; - uid32[0] = 0x67452301; - uid32[1] = 0xEFCDAB89; - uid_len = 8; +static inline size_t board_usb_get_serial(uint16_t desc_str1[], size_t max_chars) { + uint8_t uid[16] TU_ATTR_ALIGNED(4); + size_t uid_len; + + // TODO work with make, but not working with esp32s3 cmake + if ( board_get_unique_id ) { + uid_len = board_get_unique_id(uid, sizeof(uid)); + }else { + // fixed serial string is 01234567889ABCDEF + uint32_t* uid32 = (uint32_t*) (uintptr_t) uid; + uid32[0] = 0x67452301; + uid32[1] = 0xEFCDAB89; + uid_len = 8; + } + + if ( uid_len > max_chars / 2 ) uid_len = max_chars / 2; + + for ( size_t i = 0; i < uid_len; i++ ) { + for ( size_t j = 0; j < 2; j++ ) { + const char nibble_to_hex[16] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + uint8_t const nibble = (uid[i] >> (j * 4)) & 0xf; + desc_str1[i * 2 + (1 - j)] = nibble_to_hex[nibble]; // UTF-16-LE } + } - if (uid_len > max_chars / 2) - uid_len = max_chars / 2; - - for (size_t i = 0; i < uid_len; i++) { - for (size_t j = 0; j < 2; j++) { - const char nibble_to_hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - uint8_t const nibble = (uid[i] >> (j * 4)) & 0xf; - desc_str1[i * 2 + (1 - j)] = nibble_to_hex[nibble]; // UTF-16-LE - } - } - - return 2 * uid_len; + return 2 * uid_len; } // TODO remove -static inline void board_delay(uint32_t ms) -{ - uint32_t start_ms = board_millis(); - while (board_millis() - start_ms < ms) { -// take chance to run usb background -#if CFG_TUD_ENABLED - tud_task(); -#endif - -#if CFG_TUH_ENABLED - tuh_task(); -#endif - } +static inline void board_delay(uint32_t ms) { + uint32_t start_ms = board_millis(); + while ( board_millis() - start_ms < ms ) { + // take chance to run usb background + #if CFG_TUD_ENABLED + tud_task(); + #endif + + #if CFG_TUH_ENABLED + tuh_task(); + #endif + } } // stdio getchar() is blocking, this is non-blocking version diff --git a/Libraries/tinyusb/hw/bsp/board_mcu.h b/Libraries/tinyusb/hw/bsp/board_mcu.h index d86f5dd930d..d3a33cf36df 100644 --- a/Libraries/tinyusb/hw/bsp/board_mcu.h +++ b/Libraries/tinyusb/hw/bsp/board_mcu.h @@ -24,6 +24,7 @@ * This file is part of the TinyUSB stack. */ + #ifndef BOARD_MCU_H_ #define BOARD_MCU_H_ @@ -38,151 +39,152 @@ //--------------------------------------------------------------------+ // Include order follows OPT_MCU_ number -#if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) || \ - TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC18XX) || \ - TU_CHECK_MCU(OPT_MCU_LPC40XX, OPT_MCU_LPC43XX) -#include "chip.h" +#if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) || \ + TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC18XX) || \ + TU_CHECK_MCU(OPT_MCU_LPC40XX, OPT_MCU_LPC43XX) + #include "chip.h" #elif TU_CHECK_MCU(OPT_MCU_LPC51UXX, OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX, OPT_MCU_MCXN9) -#include "fsl_device_registers.h" + #include "fsl_device_registers.h" #elif TU_CHECK_MCU(OPT_MCU_KINETIS_KL, OPT_MCU_KINETIS_K32L, OPT_MCU_KINETIS_K) -#include "fsl_device_registers.h" + #include "fsl_device_registers.h" #elif CFG_TUSB_MCU == OPT_MCU_NRF5X -#include "nrf.h" + #include "nrf.h" #elif CFG_TUSB_MCU == OPT_MCU_SAMD11 || CFG_TUSB_MCU == OPT_MCU_SAMD21 || \ - CFG_TUSB_MCU == OPT_MCU_SAMD51 || CFG_TUSB_MCU == OPT_MCU_SAME5X || \ - CFG_TUSB_MCU == OPT_MCU_SAML22 || CFG_TUSB_MCU == OPT_MCU_SAML21 -#include "sam.h" + CFG_TUSB_MCU == OPT_MCU_SAMD51 || CFG_TUSB_MCU == OPT_MCU_SAME5X || \ + CFG_TUSB_MCU == OPT_MCU_SAML22 || CFG_TUSB_MCU == OPT_MCU_SAML21 + #include "sam.h" #elif CFG_TUSB_MCU == OPT_MCU_SAMG -#undef LITTLE_ENDIAN // hack to suppress "LITTLE_ENDIAN" redefined -#include "sam.h" + #undef LITTLE_ENDIAN // hack to suppress "LITTLE_ENDIAN" redefined + #include "sam.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F0 -#include "stm32f0xx.h" + #include "stm32f0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F1 -#include "stm32f1xx.h" + #include "stm32f1xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F2 -#include "stm32f2xx.h" + #include "stm32f2xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F3 -#include "stm32f3xx.h" + #include "stm32f3xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F4 -#include "stm32f4xx.h" + #include "stm32f4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32F7 -#include "stm32f7xx.h" + #include "stm32f7xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32G4 -#include "stm32g4xx.h" + #include "stm32g4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32H5 -#include "stm32h5xx.h" + #include "stm32h5xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32H7 -#include "stm32h7xx.h" + #include "stm32h7xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L0 -#include "stm32l0xx.h" + #include "stm32l0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L1 -#include "stm32l1xx.h" + #include "stm32l1xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32L4 -#include "stm32l4xx.h" + #include "stm32l4xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32WB -#include "stm32wbxx.h" + #include "stm32wbxx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32U5 -#include "stm32u5xx.h" + #include "stm32u5xx.h" #elif CFG_TUSB_MCU == OPT_MCU_STM32G0 -#include "stm32g0xx.h" + #include "stm32g0xx.h" #elif CFG_TUSB_MCU == OPT_MCU_CXD56 -// no header needed + // no header needed #elif CFG_TUSB_MCU == OPT_MCU_MSP430x5xx -#include "msp430.h" + #include "msp430.h" #elif CFG_TUSB_MCU == OPT_MCU_MSP432E4 -#include "msp.h" + #include "msp.h" #elif CFG_TUSB_MCU == OPT_MCU_VALENTYUSB_EPTRI -// no header needed + // no header needed #elif CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX -#include "fsl_device_registers.h" + #include "fsl_device_registers.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC120 -#include "NUC100Series.h" + #include "NUC100Series.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC121 || CFG_TUSB_MCU == OPT_MCU_NUC126 -#include "NuMicro.h" + #include "NuMicro.h" #elif CFG_TUSB_MCU == OPT_MCU_NUC505 -#include "NUC505Series.h" + #include "NUC505Series.h" #elif CFG_TUSB_MCU == OPT_MCU_ESP32S2 -// no header needed + // no header needed #elif CFG_TUSB_MCU == OPT_MCU_ESP32S3 -// no header needed + // no header needed #elif CFG_TUSB_MCU == OPT_MCU_DA1469X -#include "DA1469xAB.h" + #include "DA1469xAB.h" #elif CFG_TUSB_MCU == OPT_MCU_RP2040 -#include "pico.h" + #include "pico.h" #elif CFG_TUSB_MCU == OPT_MCU_EFM32GG -#include "em_device.h" + #include "em_device.h" #elif CFG_TUSB_MCU == OPT_MCU_RX63X || CFG_TUSB_MCU == OPT_MCU_RX65X -// no header needed + // no header needed #elif CFG_TUSB_MCU == OPT_MCU_RAXXX -#include "bsp_api.h" + #include "bsp_api.h" #elif CFG_TUSB_MCU == OPT_MCU_GD32VF103 -#include "gd32vf103.h" + #include "gd32vf103.h" #elif CFG_TUSB_MCU == OPT_MCU_MM32F327X -#include "mm32_device.h" + #include "mm32_device.h" #elif CFG_TUSB_MCU == OPT_MCU_XMC4000 -#include "xmc_device.h" + #include "xmc_device.h" #elif CFG_TUSB_MCU == OPT_MCU_TM4C123 -#include "TM4C123.h" + #include "TM4C123.h" #elif CFG_TUSB_MCU == OPT_MCU_CH32F20X -#include "ch32f20x.h" + #include "ch32f20x.h" #elif TU_CHECK_MCU(OPT_MCU_BCM2711, OPT_MCU_BCM2835, OPT_MCU_BCM2837) -// no header needed + // no header needed #elif CFG_TUSB_MCU == OPT_MCU_MAX32690 -#include "max32690.h" + #include "max32690.h" #elif CFG_TUSB_MCU == OPT_MCU_MAX32650 -#include "max32650.h" + #include "max32650.h" #elif CFG_TUSB_MCU == OPT_MCU_MAX32666 -#include "max32665.h" + #include "max32665.h" #elif CFG_TUSB_MCU == OPT_MCU_MAX78002 -#include "max78002.h" + #include "max78002.h" #else -#error "Missing MCU header" + #error "Missing MCU header" #endif + #endif /* BOARD_MCU_H_ */ diff --git a/Libraries/tinyusb/src/class/audio/audio.h b/Libraries/tinyusb/src/class/audio/audio.h index dbab66a6135..2f97c0f23d7 100644 --- a/Libraries/tinyusb/src/class/audio/audio.h +++ b/Libraries/tinyusb/src/class/audio/audio.h @@ -42,390 +42,426 @@ extern "C" { /// Audio Device Class Codes /// A.2 - Audio Function Subclass Codes -typedef enum { - AUDIO_FUNCTION_SUBCLASS_UNDEFINED = 0x00, +typedef enum +{ + AUDIO_FUNCTION_SUBCLASS_UNDEFINED = 0x00, } audio_function_subclass_type_t; /// A.3 - Audio Function Protocol Codes -typedef enum { - AUDIO_FUNC_PROTOCOL_CODE_UNDEF = 0x00, - AUDIO_FUNC_PROTOCOL_CODE_V2 = 0x20, ///< Version 2.0 +typedef enum +{ + AUDIO_FUNC_PROTOCOL_CODE_UNDEF = 0x00, + AUDIO_FUNC_PROTOCOL_CODE_V2 = 0x20, ///< Version 2.0 } audio_function_protocol_code_t; /// A.5 - Audio Interface Subclass Codes -typedef enum { - AUDIO_SUBCLASS_UNDEFINED = 0x00, - AUDIO_SUBCLASS_CONTROL, ///< Audio Control - AUDIO_SUBCLASS_STREAMING, ///< Audio Streaming - AUDIO_SUBCLASS_MIDI_STREAMING, ///< MIDI Streaming +typedef enum +{ + AUDIO_SUBCLASS_UNDEFINED = 0x00, + AUDIO_SUBCLASS_CONTROL , ///< Audio Control + AUDIO_SUBCLASS_STREAMING , ///< Audio Streaming + AUDIO_SUBCLASS_MIDI_STREAMING , ///< MIDI Streaming } audio_subclass_type_t; /// A.6 - Audio Interface Protocol Codes -typedef enum { - AUDIO_INT_PROTOCOL_CODE_UNDEF = 0x00, - AUDIO_INT_PROTOCOL_CODE_V2 = 0x20, ///< Version 2.0 +typedef enum +{ + AUDIO_INT_PROTOCOL_CODE_UNDEF = 0x00, + AUDIO_INT_PROTOCOL_CODE_V2 = 0x20, ///< Version 2.0 } audio_interface_protocol_code_t; /// A.7 - Audio Function Category Codes -typedef enum { - AUDIO_FUNC_UNDEF = 0x00, - AUDIO_FUNC_DESKTOP_SPEAKER = 0x01, - AUDIO_FUNC_HOME_THEATER = 0x02, - AUDIO_FUNC_MICROPHONE = 0x03, - AUDIO_FUNC_HEADSET = 0x04, - AUDIO_FUNC_TELEPHONE = 0x05, - AUDIO_FUNC_CONVERTER = 0x06, - AUDIO_FUNC_SOUND_RECODER = 0x07, - AUDIO_FUNC_IO_BOX = 0x08, - AUDIO_FUNC_MUSICAL_INSTRUMENT = 0x09, - AUDIO_FUNC_PRO_AUDIO = 0x0A, - AUDIO_FUNC_AUDIO_VIDEO = 0x0B, - AUDIO_FUNC_CONTROL_PANEL = 0x0C, - AUDIO_FUNC_OTHER = 0xFF, +typedef enum +{ + AUDIO_FUNC_UNDEF = 0x00, + AUDIO_FUNC_DESKTOP_SPEAKER = 0x01, + AUDIO_FUNC_HOME_THEATER = 0x02, + AUDIO_FUNC_MICROPHONE = 0x03, + AUDIO_FUNC_HEADSET = 0x04, + AUDIO_FUNC_TELEPHONE = 0x05, + AUDIO_FUNC_CONVERTER = 0x06, + AUDIO_FUNC_SOUND_RECODER = 0x07, + AUDIO_FUNC_IO_BOX = 0x08, + AUDIO_FUNC_MUSICAL_INSTRUMENT = 0x09, + AUDIO_FUNC_PRO_AUDIO = 0x0A, + AUDIO_FUNC_AUDIO_VIDEO = 0x0B, + AUDIO_FUNC_CONTROL_PANEL = 0x0C, + AUDIO_FUNC_OTHER = 0xFF, } audio_function_code_t; /// A.9 - Audio Class-Specific AC Interface Descriptor Subtypes UAC2 -typedef enum { - AUDIO_CS_AC_INTERFACE_AC_DESCRIPTOR_UNDEF = 0x00, - AUDIO_CS_AC_INTERFACE_HEADER = 0x01, - AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL = 0x02, - AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL = 0x03, - AUDIO_CS_AC_INTERFACE_MIXER_UNIT = 0x04, - AUDIO_CS_AC_INTERFACE_SELECTOR_UNIT = 0x05, - AUDIO_CS_AC_INTERFACE_FEATURE_UNIT = 0x06, - AUDIO_CS_AC_INTERFACE_EFFECT_UNIT = 0x07, - AUDIO_CS_AC_INTERFACE_PROCESSING_UNIT = 0x08, - AUDIO_CS_AC_INTERFACE_EXTENSION_UNIT = 0x09, - AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE = 0x0A, - AUDIO_CS_AC_INTERFACE_CLOCK_SELECTOR = 0x0B, - AUDIO_CS_AC_INTERFACE_CLOCK_MULTIPLIER = 0x0C, - AUDIO_CS_AC_INTERFACE_SAMPLE_RATE_CONVERTER = 0x0D, +typedef enum +{ + AUDIO_CS_AC_INTERFACE_AC_DESCRIPTOR_UNDEF = 0x00, + AUDIO_CS_AC_INTERFACE_HEADER = 0x01, + AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL = 0x02, + AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL = 0x03, + AUDIO_CS_AC_INTERFACE_MIXER_UNIT = 0x04, + AUDIO_CS_AC_INTERFACE_SELECTOR_UNIT = 0x05, + AUDIO_CS_AC_INTERFACE_FEATURE_UNIT = 0x06, + AUDIO_CS_AC_INTERFACE_EFFECT_UNIT = 0x07, + AUDIO_CS_AC_INTERFACE_PROCESSING_UNIT = 0x08, + AUDIO_CS_AC_INTERFACE_EXTENSION_UNIT = 0x09, + AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE = 0x0A, + AUDIO_CS_AC_INTERFACE_CLOCK_SELECTOR = 0x0B, + AUDIO_CS_AC_INTERFACE_CLOCK_MULTIPLIER = 0x0C, + AUDIO_CS_AC_INTERFACE_SAMPLE_RATE_CONVERTER = 0x0D, } audio_cs_ac_interface_subtype_t; /// A.10 - Audio Class-Specific AS Interface Descriptor Subtypes UAC2 -typedef enum { - AUDIO_CS_AS_INTERFACE_AS_DESCRIPTOR_UNDEF = 0x00, - AUDIO_CS_AS_INTERFACE_AS_GENERAL = 0x01, - AUDIO_CS_AS_INTERFACE_FORMAT_TYPE = 0x02, - AUDIO_CS_AS_INTERFACE_ENCODER = 0x03, - AUDIO_CS_AS_INTERFACE_DECODER = 0x04, +typedef enum +{ + AUDIO_CS_AS_INTERFACE_AS_DESCRIPTOR_UNDEF = 0x00, + AUDIO_CS_AS_INTERFACE_AS_GENERAL = 0x01, + AUDIO_CS_AS_INTERFACE_FORMAT_TYPE = 0x02, + AUDIO_CS_AS_INTERFACE_ENCODER = 0x03, + AUDIO_CS_AS_INTERFACE_DECODER = 0x04, } audio_cs_as_interface_subtype_t; /// A.11 - Effect Unit Effect Types -typedef enum { - AUDIO_EFFECT_TYPE_UNDEF = 0x00, - AUDIO_EFFECT_TYPE_PARAM_EQ_SECTION = 0x01, - AUDIO_EFFECT_TYPE_REVERBERATION = 0x02, - AUDIO_EFFECT_TYPE_MOD_DELAY = 0x03, - AUDIO_EFFECT_TYPE_DYN_RANGE_COMP = 0x04, +typedef enum +{ + AUDIO_EFFECT_TYPE_UNDEF = 0x00, + AUDIO_EFFECT_TYPE_PARAM_EQ_SECTION = 0x01, + AUDIO_EFFECT_TYPE_REVERBERATION = 0x02, + AUDIO_EFFECT_TYPE_MOD_DELAY = 0x03, + AUDIO_EFFECT_TYPE_DYN_RANGE_COMP = 0x04, } audio_effect_unit_effect_type_t; /// A.12 - Processing Unit Process Types -typedef enum { - AUDIO_PROCESS_TYPE_UNDEF = 0x00, - AUDIO_PROCESS_TYPE_UP_DOWN_MIX = 0x01, - AUDIO_PROCESS_TYPE_DOLBY_PROLOGIC = 0x02, - AUDIO_PROCESS_TYPE_STEREO_EXTENDER = 0x03, +typedef enum +{ + AUDIO_PROCESS_TYPE_UNDEF = 0x00, + AUDIO_PROCESS_TYPE_UP_DOWN_MIX = 0x01, + AUDIO_PROCESS_TYPE_DOLBY_PROLOGIC = 0x02, + AUDIO_PROCESS_TYPE_STEREO_EXTENDER = 0x03, } audio_processing_unit_process_type_t; /// A.13 - Audio Class-Specific EP Descriptor Subtypes UAC2 -typedef enum { - AUDIO_CS_EP_SUBTYPE_UNDEF = 0x00, - AUDIO_CS_EP_SUBTYPE_GENERAL = 0x01, +typedef enum +{ + AUDIO_CS_EP_SUBTYPE_UNDEF = 0x00, + AUDIO_CS_EP_SUBTYPE_GENERAL = 0x01, } audio_cs_ep_subtype_t; /// A.14 - Audio Class-Specific Request Codes -typedef enum { - AUDIO_CS_REQ_UNDEF = 0x00, - AUDIO_CS_REQ_CUR = 0x01, - AUDIO_CS_REQ_RANGE = 0x02, - AUDIO_CS_REQ_MEM = 0x03, +typedef enum +{ + AUDIO_CS_REQ_UNDEF = 0x00, + AUDIO_CS_REQ_CUR = 0x01, + AUDIO_CS_REQ_RANGE = 0x02, + AUDIO_CS_REQ_MEM = 0x03, } audio_cs_req_t; /// A.17 - Control Selector Codes /// A.17.1 - Clock Source Control Selectors -typedef enum { - AUDIO_CS_CTRL_UNDEF = 0x00, - AUDIO_CS_CTRL_SAM_FREQ = 0x01, - AUDIO_CS_CTRL_CLK_VALID = 0x02, +typedef enum +{ + AUDIO_CS_CTRL_UNDEF = 0x00, + AUDIO_CS_CTRL_SAM_FREQ = 0x01, + AUDIO_CS_CTRL_CLK_VALID = 0x02, } audio_clock_src_control_selector_t; /// A.17.2 - Clock Selector Control Selectors -typedef enum { - AUDIO_CX_CTRL_UNDEF = 0x00, - AUDIO_CX_CTRL_CONTROL = 0x01, +typedef enum +{ + AUDIO_CX_CTRL_UNDEF = 0x00, + AUDIO_CX_CTRL_CONTROL = 0x01, } audio_clock_sel_control_selector_t; /// A.17.3 - Clock Multiplier Control Selectors -typedef enum { - AUDIO_CM_CTRL_UNDEF = 0x00, - AUDIO_CM_CTRL_NUMERATOR_CONTROL = 0x01, - AUDIO_CM_CTRL_DENOMINATOR_CONTROL = 0x02, +typedef enum +{ + AUDIO_CM_CTRL_UNDEF = 0x00, + AUDIO_CM_CTRL_NUMERATOR_CONTROL = 0x01, + AUDIO_CM_CTRL_DENOMINATOR_CONTROL = 0x02, } audio_clock_mul_control_selector_t; /// A.17.4 - Terminal Control Selectors -typedef enum { - AUDIO_TE_CTRL_UNDEF = 0x00, - AUDIO_TE_CTRL_COPY_PROTECT = 0x01, - AUDIO_TE_CTRL_CONNECTOR = 0x02, - AUDIO_TE_CTRL_OVERLOAD = 0x03, - AUDIO_TE_CTRL_CLUSTER = 0x04, - AUDIO_TE_CTRL_UNDERFLOW = 0x05, - AUDIO_TE_CTRL_OVERFLOW = 0x06, - AUDIO_TE_CTRL_LATENCY = 0x07, +typedef enum +{ + AUDIO_TE_CTRL_UNDEF = 0x00, + AUDIO_TE_CTRL_COPY_PROTECT = 0x01, + AUDIO_TE_CTRL_CONNECTOR = 0x02, + AUDIO_TE_CTRL_OVERLOAD = 0x03, + AUDIO_TE_CTRL_CLUSTER = 0x04, + AUDIO_TE_CTRL_UNDERFLOW = 0x05, + AUDIO_TE_CTRL_OVERFLOW = 0x06, + AUDIO_TE_CTRL_LATENCY = 0x07, } audio_terminal_control_selector_t; /// A.17.5 - Mixer Control Selectors -typedef enum { - AUDIO_MU_CTRL_UNDEF = 0x00, - AUDIO_MU_CTRL_MIXER = 0x01, - AUDIO_MU_CTRL_CLUSTER = 0x02, - AUDIO_MU_CTRL_UNDERFLOW = 0x03, - AUDIO_MU_CTRL_OVERFLOW = 0x04, - AUDIO_MU_CTRL_LATENCY = 0x05, +typedef enum +{ + AUDIO_MU_CTRL_UNDEF = 0x00, + AUDIO_MU_CTRL_MIXER = 0x01, + AUDIO_MU_CTRL_CLUSTER = 0x02, + AUDIO_MU_CTRL_UNDERFLOW = 0x03, + AUDIO_MU_CTRL_OVERFLOW = 0x04, + AUDIO_MU_CTRL_LATENCY = 0x05, } audio_mixer_control_selector_t; /// A.17.6 - Selector Control Selectors -typedef enum { - AUDIO_SU_CTRL_UNDEF = 0x00, - AUDIO_SU_CTRL_SELECTOR = 0x01, - AUDIO_SU_CTRL_LATENCY = 0x02, +typedef enum +{ + AUDIO_SU_CTRL_UNDEF = 0x00, + AUDIO_SU_CTRL_SELECTOR = 0x01, + AUDIO_SU_CTRL_LATENCY = 0x02, } audio_sel_control_selector_t; /// A.17.7 - Feature Unit Control Selectors -typedef enum { - AUDIO_FU_CTRL_UNDEF = 0x00, - AUDIO_FU_CTRL_MUTE = 0x01, - AUDIO_FU_CTRL_VOLUME = 0x02, - AUDIO_FU_CTRL_BASS = 0x03, - AUDIO_FU_CTRL_MID = 0x04, - AUDIO_FU_CTRL_TREBLE = 0x05, - AUDIO_FU_CTRL_GRAPHIC_EQUALIZER = 0x06, - AUDIO_FU_CTRL_AGC = 0x07, - AUDIO_FU_CTRL_DELAY = 0x08, - AUDIO_FU_CTRL_BASS_BOOST = 0x09, - AUDIO_FU_CTRL_LOUDNESS = 0x0A, - AUDIO_FU_CTRL_INPUT_GAIN = 0x0B, - AUDIO_FU_CTRL_GAIN_PAD = 0x0C, - AUDIO_FU_CTRL_INVERTER = 0x0D, - AUDIO_FU_CTRL_UNDERFLOW = 0x0E, - AUDIO_FU_CTRL_OVERVLOW = 0x0F, - AUDIO_FU_CTRL_LATENCY = 0x10, +typedef enum +{ + AUDIO_FU_CTRL_UNDEF = 0x00, + AUDIO_FU_CTRL_MUTE = 0x01, + AUDIO_FU_CTRL_VOLUME = 0x02, + AUDIO_FU_CTRL_BASS = 0x03, + AUDIO_FU_CTRL_MID = 0x04, + AUDIO_FU_CTRL_TREBLE = 0x05, + AUDIO_FU_CTRL_GRAPHIC_EQUALIZER = 0x06, + AUDIO_FU_CTRL_AGC = 0x07, + AUDIO_FU_CTRL_DELAY = 0x08, + AUDIO_FU_CTRL_BASS_BOOST = 0x09, + AUDIO_FU_CTRL_LOUDNESS = 0x0A, + AUDIO_FU_CTRL_INPUT_GAIN = 0x0B, + AUDIO_FU_CTRL_GAIN_PAD = 0x0C, + AUDIO_FU_CTRL_INVERTER = 0x0D, + AUDIO_FU_CTRL_UNDERFLOW = 0x0E, + AUDIO_FU_CTRL_OVERVLOW = 0x0F, + AUDIO_FU_CTRL_LATENCY = 0x10, } audio_feature_unit_control_selector_t; /// A.17.8 Effect Unit Control Selectors /// A.17.8.1 Parametric Equalizer Section Effect Unit Control Selectors -typedef enum { - AUDIO_PE_CTRL_UNDEF = 0x00, - AUDIO_PE_CTRL_ENABLE = 0x01, - AUDIO_PE_CTRL_CENTERFREQ = 0x02, - AUDIO_PE_CTRL_QFACTOR = 0x03, - AUDIO_PE_CTRL_GAIN = 0x04, - AUDIO_PE_CTRL_UNDERFLOW = 0x05, - AUDIO_PE_CTRL_OVERFLOW = 0x06, - AUDIO_PE_CTRL_LATENCY = 0x07, +typedef enum +{ + AUDIO_PE_CTRL_UNDEF = 0x00, + AUDIO_PE_CTRL_ENABLE = 0x01, + AUDIO_PE_CTRL_CENTERFREQ = 0x02, + AUDIO_PE_CTRL_QFACTOR = 0x03, + AUDIO_PE_CTRL_GAIN = 0x04, + AUDIO_PE_CTRL_UNDERFLOW = 0x05, + AUDIO_PE_CTRL_OVERFLOW = 0x06, + AUDIO_PE_CTRL_LATENCY = 0x07, } audio_parametric_equalizer_control_selector_t; /// A.17.8.2 Reverberation Effect Unit Control Selectors -typedef enum { - AUDIO_RV_CTRL_UNDEF = 0x00, - AUDIO_RV_CTRL_ENABLE = 0x01, - AUDIO_RV_CTRL_TYPE = 0x02, - AUDIO_RV_CTRL_LEVEL = 0x03, - AUDIO_RV_CTRL_TIME = 0x04, - AUDIO_RV_CTRL_FEEDBACK = 0x05, - AUDIO_RV_CTRL_PREDELAY = 0x06, - AUDIO_RV_CTRL_DENSITY = 0x07, - AUDIO_RV_CTRL_HIFREQ_ROLLOFF = 0x08, - AUDIO_RV_CTRL_UNDERFLOW = 0x09, - AUDIO_RV_CTRL_OVERFLOW = 0x0A, - AUDIO_RV_CTRL_LATENCY = 0x0B, +typedef enum +{ + AUDIO_RV_CTRL_UNDEF = 0x00, + AUDIO_RV_CTRL_ENABLE = 0x01, + AUDIO_RV_CTRL_TYPE = 0x02, + AUDIO_RV_CTRL_LEVEL = 0x03, + AUDIO_RV_CTRL_TIME = 0x04, + AUDIO_RV_CTRL_FEEDBACK = 0x05, + AUDIO_RV_CTRL_PREDELAY = 0x06, + AUDIO_RV_CTRL_DENSITY = 0x07, + AUDIO_RV_CTRL_HIFREQ_ROLLOFF = 0x08, + AUDIO_RV_CTRL_UNDERFLOW = 0x09, + AUDIO_RV_CTRL_OVERFLOW = 0x0A, + AUDIO_RV_CTRL_LATENCY = 0x0B, } audio_reverberation_effect_control_selector_t; /// A.17.8.3 Modulation Delay Effect Unit Control Selectors -typedef enum { - AUDIO_MD_CTRL_UNDEF = 0x00, - AUDIO_MD_CTRL_ENABLE = 0x01, - AUDIO_MD_CTRL_BALANCE = 0x02, - AUDIO_MD_CTRL_RATE = 0x03, - AUDIO_MD_CTRL_DEPTH = 0x04, - AUDIO_MD_CTRL_TIME = 0x05, - AUDIO_MD_CTRL_FEEDBACK = 0x06, - AUDIO_MD_CTRL_UNDERFLOW = 0x07, - AUDIO_MD_CTRL_OVERFLOW = 0x08, - AUDIO_MD_CTRL_LATENCY = 0x09, +typedef enum +{ + AUDIO_MD_CTRL_UNDEF = 0x00, + AUDIO_MD_CTRL_ENABLE = 0x01, + AUDIO_MD_CTRL_BALANCE = 0x02, + AUDIO_MD_CTRL_RATE = 0x03, + AUDIO_MD_CTRL_DEPTH = 0x04, + AUDIO_MD_CTRL_TIME = 0x05, + AUDIO_MD_CTRL_FEEDBACK = 0x06, + AUDIO_MD_CTRL_UNDERFLOW = 0x07, + AUDIO_MD_CTRL_OVERFLOW = 0x08, + AUDIO_MD_CTRL_LATENCY = 0x09, } audio_modulation_delay_control_selector_t; /// A.17.8.4 Dynamic Range Compressor Effect Unit Control Selectors -typedef enum { - AUDIO_DR_CTRL_UNDEF = 0x00, - AUDIO_DR_CTRL_ENABLE = 0x01, - AUDIO_DR_CTRL_COMPRESSION_RATE = 0x02, - AUDIO_DR_CTRL_MAXAMPL = 0x03, - AUDIO_DR_CTRL_THRESHOLD = 0x04, - AUDIO_DR_CTRL_ATTACK_TIME = 0x05, - AUDIO_DR_CTRL_RELEASE_TIME = 0x06, - AUDIO_DR_CTRL_UNDERFLOW = 0x07, - AUDIO_DR_CTRL_OVERFLOW = 0x08, - AUDIO_DR_CTRL_LATENCY = 0x09, +typedef enum +{ + AUDIO_DR_CTRL_UNDEF = 0x00, + AUDIO_DR_CTRL_ENABLE = 0x01, + AUDIO_DR_CTRL_COMPRESSION_RATE = 0x02, + AUDIO_DR_CTRL_MAXAMPL = 0x03, + AUDIO_DR_CTRL_THRESHOLD = 0x04, + AUDIO_DR_CTRL_ATTACK_TIME = 0x05, + AUDIO_DR_CTRL_RELEASE_TIME = 0x06, + AUDIO_DR_CTRL_UNDERFLOW = 0x07, + AUDIO_DR_CTRL_OVERFLOW = 0x08, + AUDIO_DR_CTRL_LATENCY = 0x09, } audio_dynamic_range_compression_control_selector_t; /// A.17.9 Processing Unit Control Selectors /// A.17.9.1 Up/Down-mix Processing Unit Control Selectors -typedef enum { - AUDIO_UD_CTRL_UNDEF = 0x00, - AUDIO_UD_CTRL_ENABLE = 0x01, - AUDIO_UD_CTRL_MODE_SELECT = 0x02, - AUDIO_UD_CTRL_CLUSTER = 0x03, - AUDIO_UD_CTRL_UNDERFLOW = 0x04, - AUDIO_UD_CTRL_OVERFLOW = 0x05, - AUDIO_UD_CTRL_LATENCY = 0x06, +typedef enum +{ + AUDIO_UD_CTRL_UNDEF = 0x00, + AUDIO_UD_CTRL_ENABLE = 0x01, + AUDIO_UD_CTRL_MODE_SELECT = 0x02, + AUDIO_UD_CTRL_CLUSTER = 0x03, + AUDIO_UD_CTRL_UNDERFLOW = 0x04, + AUDIO_UD_CTRL_OVERFLOW = 0x05, + AUDIO_UD_CTRL_LATENCY = 0x06, } audio_up_down_mix_control_selector_t; /// A.17.9.2 Dolby Prologic ™ Processing Unit Control Selectors -typedef enum { - AUDIO_DP_CTRL_UNDEF = 0x00, - AUDIO_DP_CTRL_ENABLE = 0x01, - AUDIO_DP_CTRL_MODE_SELECT = 0x02, - AUDIO_DP_CTRL_CLUSTER = 0x03, - AUDIO_DP_CTRL_UNDERFLOW = 0x04, - AUDIO_DP_CTRL_OVERFLOW = 0x05, - AUDIO_DP_CTRL_LATENCY = 0x06, +typedef enum +{ + AUDIO_DP_CTRL_UNDEF = 0x00, + AUDIO_DP_CTRL_ENABLE = 0x01, + AUDIO_DP_CTRL_MODE_SELECT = 0x02, + AUDIO_DP_CTRL_CLUSTER = 0x03, + AUDIO_DP_CTRL_UNDERFLOW = 0x04, + AUDIO_DP_CTRL_OVERFLOW = 0x05, + AUDIO_DP_CTRL_LATENCY = 0x06, } audio_dolby_prologic_control_selector_t; /// A.17.9.3 Stereo Extender Processing Unit Control Selectors -typedef enum { - AUDIO_ST_EXT_CTRL_UNDEF = 0x00, - AUDIO_ST_EXT_CTRL_ENABLE = 0x01, - AUDIO_ST_EXT_CTRL_WIDTH = 0x02, - AUDIO_ST_EXT_CTRL_UNDERFLOW = 0x03, - AUDIO_ST_EXT_CTRL_OVERFLOW = 0x04, - AUDIO_ST_EXT_CTRL_LATENCY = 0x05, +typedef enum +{ + AUDIO_ST_EXT_CTRL_UNDEF = 0x00, + AUDIO_ST_EXT_CTRL_ENABLE = 0x01, + AUDIO_ST_EXT_CTRL_WIDTH = 0x02, + AUDIO_ST_EXT_CTRL_UNDERFLOW = 0x03, + AUDIO_ST_EXT_CTRL_OVERFLOW = 0x04, + AUDIO_ST_EXT_CTRL_LATENCY = 0x05, } audio_stereo_extender_control_selector_t; /// A.17.10 Extension Unit Control Selectors -typedef enum { - AUDIO_XU_CTRL_UNDEF = 0x00, - AUDIO_XU_CTRL_ENABLE = 0x01, - AUDIO_XU_CTRL_CLUSTER = 0x02, - AUDIO_XU_CTRL_UNDERFLOW = 0x03, - AUDIO_XU_CTRL_OVERFLOW = 0x04, - AUDIO_XU_CTRL_LATENCY = 0x05, +typedef enum +{ + AUDIO_XU_CTRL_UNDEF = 0x00, + AUDIO_XU_CTRL_ENABLE = 0x01, + AUDIO_XU_CTRL_CLUSTER = 0x02, + AUDIO_XU_CTRL_UNDERFLOW = 0x03, + AUDIO_XU_CTRL_OVERFLOW = 0x04, + AUDIO_XU_CTRL_LATENCY = 0x05, } audio_extension_unit_control_selector_t; /// A.17.11 AudioStreaming Interface Control Selectors -typedef enum { - AUDIO_AS_CTRL_UNDEF = 0x00, - AUDIO_AS_CTRL_ACT_ALT_SETTING = 0x01, - AUDIO_AS_CTRL_VAL_ALT_SETTINGS = 0x02, - AUDIO_AS_CTRL_AUDIO_DATA_FORMAT = 0x03, +typedef enum +{ + AUDIO_AS_CTRL_UNDEF = 0x00, + AUDIO_AS_CTRL_ACT_ALT_SETTING = 0x01, + AUDIO_AS_CTRL_VAL_ALT_SETTINGS = 0x02, + AUDIO_AS_CTRL_AUDIO_DATA_FORMAT = 0x03, } audio_audiostreaming_interface_control_selector_t; /// A.17.12 Encoder Control Selectors -typedef enum { - AUDIO_EN_CTRL_UNDEF = 0x00, - AUDIO_EN_CTRL_BIT_RATE = 0x01, - AUDIO_EN_CTRL_QUALITY = 0x02, - AUDIO_EN_CTRL_VBR = 0x03, - AUDIO_EN_CTRL_TYPE = 0x04, - AUDIO_EN_CTRL_UNDERFLOW = 0x05, - AUDIO_EN_CTRL_OVERFLOW = 0x06, - AUDIO_EN_CTRL_ENCODER_ERROR = 0x07, - AUDIO_EN_CTRL_PARAM1 = 0x08, - AUDIO_EN_CTRL_PARAM2 = 0x09, - AUDIO_EN_CTRL_PARAM3 = 0x0A, - AUDIO_EN_CTRL_PARAM4 = 0x0B, - AUDIO_EN_CTRL_PARAM5 = 0x0C, - AUDIO_EN_CTRL_PARAM6 = 0x0D, - AUDIO_EN_CTRL_PARAM7 = 0x0E, - AUDIO_EN_CTRL_PARAM8 = 0x0F, +typedef enum +{ + AUDIO_EN_CTRL_UNDEF = 0x00, + AUDIO_EN_CTRL_BIT_RATE = 0x01, + AUDIO_EN_CTRL_QUALITY = 0x02, + AUDIO_EN_CTRL_VBR = 0x03, + AUDIO_EN_CTRL_TYPE = 0x04, + AUDIO_EN_CTRL_UNDERFLOW = 0x05, + AUDIO_EN_CTRL_OVERFLOW = 0x06, + AUDIO_EN_CTRL_ENCODER_ERROR = 0x07, + AUDIO_EN_CTRL_PARAM1 = 0x08, + AUDIO_EN_CTRL_PARAM2 = 0x09, + AUDIO_EN_CTRL_PARAM3 = 0x0A, + AUDIO_EN_CTRL_PARAM4 = 0x0B, + AUDIO_EN_CTRL_PARAM5 = 0x0C, + AUDIO_EN_CTRL_PARAM6 = 0x0D, + AUDIO_EN_CTRL_PARAM7 = 0x0E, + AUDIO_EN_CTRL_PARAM8 = 0x0F, } audio_encoder_control_selector_t; /// A.17.13 Decoder Control Selectors /// A.17.13.1 MPEG Decoder Control Selectors -typedef enum { - AUDIO_MPD_CTRL_UNDEF = 0x00, - AUDIO_MPD_CTRL_DUAL_CHANNEL = 0x01, - AUDIO_MPD_CTRL_SECOND_STEREO = 0x02, - AUDIO_MPD_CTRL_MULTILINGUAL = 0x03, - AUDIO_MPD_CTRL_DYN_RANGE = 0x04, - AUDIO_MPD_CTRL_SCALING = 0x05, - AUDIO_MPD_CTRL_HILO_SCALING = 0x06, - AUDIO_MPD_CTRL_UNDERFLOW = 0x07, - AUDIO_MPD_CTRL_OVERFLOW = 0x08, - AUDIO_MPD_CTRL_DECODER_ERROR = 0x09, +typedef enum +{ + AUDIO_MPD_CTRL_UNDEF = 0x00, + AUDIO_MPD_CTRL_DUAL_CHANNEL = 0x01, + AUDIO_MPD_CTRL_SECOND_STEREO = 0x02, + AUDIO_MPD_CTRL_MULTILINGUAL = 0x03, + AUDIO_MPD_CTRL_DYN_RANGE = 0x04, + AUDIO_MPD_CTRL_SCALING = 0x05, + AUDIO_MPD_CTRL_HILO_SCALING = 0x06, + AUDIO_MPD_CTRL_UNDERFLOW = 0x07, + AUDIO_MPD_CTRL_OVERFLOW = 0x08, + AUDIO_MPD_CTRL_DECODER_ERROR = 0x09, } audio_MPEG_decoder_control_selector_t; /// A.17.13.2 AC-3 Decoder Control Selectors -typedef enum { - AUDIO_AD_CTRL_UNDEF = 0x00, - AUDIO_AD_CTRL_MODE = 0x01, - AUDIO_AD_CTRL_DYN_RANGE = 0x02, - AUDIO_AD_CTRL_SCALING = 0x03, - AUDIO_AD_CTRL_HILO_SCALING = 0x04, - AUDIO_AD_CTRL_UNDERFLOW = 0x05, - AUDIO_AD_CTRL_OVERFLOW = 0x06, - AUDIO_AD_CTRL_DECODER_ERROR = 0x07, +typedef enum +{ + AUDIO_AD_CTRL_UNDEF = 0x00, + AUDIO_AD_CTRL_MODE = 0x01, + AUDIO_AD_CTRL_DYN_RANGE = 0x02, + AUDIO_AD_CTRL_SCALING = 0x03, + AUDIO_AD_CTRL_HILO_SCALING = 0x04, + AUDIO_AD_CTRL_UNDERFLOW = 0x05, + AUDIO_AD_CTRL_OVERFLOW = 0x06, + AUDIO_AD_CTRL_DECODER_ERROR = 0x07, } audio_AC3_decoder_control_selector_t; /// A.17.13.3 WMA Decoder Control Selectors -typedef enum { - AUDIO_WD_CTRL_UNDEF = 0x00, - AUDIO_WD_CTRL_UNDERFLOW = 0x01, - AUDIO_WD_CTRL_OVERFLOW = 0x02, - AUDIO_WD_CTRL_DECODER_ERROR = 0x03, +typedef enum +{ + AUDIO_WD_CTRL_UNDEF = 0x00, + AUDIO_WD_CTRL_UNDERFLOW = 0x01, + AUDIO_WD_CTRL_OVERFLOW = 0x02, + AUDIO_WD_CTRL_DECODER_ERROR = 0x03, } audio_WMA_decoder_control_selector_t; /// A.17.13.4 DTS Decoder Control Selectors -typedef enum { - AUDIO_DD_CTRL_UNDEF = 0x00, - AUDIO_DD_CTRL_UNDERFLOW = 0x01, - AUDIO_DD_CTRL_OVERFLOW = 0x02, - AUDIO_DD_CTRL_DECODER_ERROR = 0x03, +typedef enum +{ + AUDIO_DD_CTRL_UNDEF = 0x00, + AUDIO_DD_CTRL_UNDERFLOW = 0x01, + AUDIO_DD_CTRL_OVERFLOW = 0x02, + AUDIO_DD_CTRL_DECODER_ERROR = 0x03, } audio_DTS_decoder_control_selector_t; /// A.17.14 Endpoint Control Selectors -typedef enum { - AUDIO_EP_CTRL_UNDEF = 0x00, - AUDIO_EP_CTRL_PITCH = 0x01, - AUDIO_EP_CTRL_DATA_OVERRUN = 0x02, - AUDIO_EP_CTRL_DATA_UNDERRUN = 0x03, +typedef enum +{ + AUDIO_EP_CTRL_UNDEF = 0x00, + AUDIO_EP_CTRL_PITCH = 0x01, + AUDIO_EP_CTRL_DATA_OVERRUN = 0x02, + AUDIO_EP_CTRL_DATA_UNDERRUN = 0x03, } audio_EP_control_selector_t; /// Terminal Types /// 2.1 - Audio Class-Terminal Types UAC2 -typedef enum { - AUDIO_TERM_TYPE_USB_UNDEFINED = 0x0100, - AUDIO_TERM_TYPE_USB_STREAMING = 0x0101, - AUDIO_TERM_TYPE_USB_VENDOR_SPEC = 0x01FF, +typedef enum +{ + AUDIO_TERM_TYPE_USB_UNDEFINED = 0x0100, + AUDIO_TERM_TYPE_USB_STREAMING = 0x0101, + AUDIO_TERM_TYPE_USB_VENDOR_SPEC = 0x01FF, } audio_terminal_type_t; /// 2.2 - Audio Class-Input Terminal Types UAC2 -typedef enum { - AUDIO_TERM_TYPE_IN_UNDEFINED = 0x0200, - AUDIO_TERM_TYPE_IN_GENERIC_MIC = 0x0201, - AUDIO_TERM_TYPE_IN_DESKTOP_MIC = 0x0202, - AUDIO_TERM_TYPE_IN_PERSONAL_MIC = 0x0203, - AUDIO_TERM_TYPE_IN_OMNI_MIC = 0x0204, - AUDIO_TERM_TYPE_IN_ARRAY_MIC = 0x0205, - AUDIO_TERM_TYPE_IN_PROC_ARRAY_MIC = 0x0206, +typedef enum +{ + AUDIO_TERM_TYPE_IN_UNDEFINED = 0x0200, + AUDIO_TERM_TYPE_IN_GENERIC_MIC = 0x0201, + AUDIO_TERM_TYPE_IN_DESKTOP_MIC = 0x0202, + AUDIO_TERM_TYPE_IN_PERSONAL_MIC = 0x0203, + AUDIO_TERM_TYPE_IN_OMNI_MIC = 0x0204, + AUDIO_TERM_TYPE_IN_ARRAY_MIC = 0x0205, + AUDIO_TERM_TYPE_IN_PROC_ARRAY_MIC = 0x0206, } audio_terminal_input_type_t; /// 2.3 - Audio Class-Output Terminal Types UAC2 -typedef enum { - AUDIO_TERM_TYPE_OUT_UNDEFINED = 0x0300, - AUDIO_TERM_TYPE_OUT_GENERIC_SPEAKER = 0x0301, - AUDIO_TERM_TYPE_OUT_HEADPHONES = 0x0302, - AUDIO_TERM_TYPE_OUT_HEAD_MNT_DISP_AUIDO = 0x0303, - AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER = 0x0304, - AUDIO_TERM_TYPE_OUT_ROOM_SPEAKER = 0x0305, - AUDIO_TERM_TYPE_OUT_COMMUNICATION_SPEAKER = 0x0306, - AUDIO_TERM_TYPE_OUT_LOW_FRQ_EFFECTS_SPEAKER = 0x0307, +typedef enum +{ + AUDIO_TERM_TYPE_OUT_UNDEFINED = 0x0300, + AUDIO_TERM_TYPE_OUT_GENERIC_SPEAKER = 0x0301, + AUDIO_TERM_TYPE_OUT_HEADPHONES = 0x0302, + AUDIO_TERM_TYPE_OUT_HEAD_MNT_DISP_AUIDO = 0x0303, + AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER = 0x0304, + AUDIO_TERM_TYPE_OUT_ROOM_SPEAKER = 0x0305, + AUDIO_TERM_TYPE_OUT_COMMUNICATION_SPEAKER = 0x0306, + AUDIO_TERM_TYPE_OUT_LOW_FRQ_EFFECTS_SPEAKER = 0x0307, } audio_terminal_output_type_t; /// Rest is yet to be implemented @@ -433,370 +469,370 @@ typedef enum { /// Additional Audio Device Class Codes - Source: Audio Data Formats /// A.1 - Audio Class-Format Type Codes UAC2 -typedef enum { - AUDIO_FORMAT_TYPE_UNDEFINED = 0x00, - AUDIO_FORMAT_TYPE_I = 0x01, - AUDIO_FORMAT_TYPE_II = 0x02, - AUDIO_FORMAT_TYPE_III = 0x03, - AUDIO_FORMAT_TYPE_IV = 0x04, - AUDIO_EXT_FORMAT_TYPE_I = 0x81, - AUDIO_EXT_FORMAT_TYPE_II = 0x82, - AUDIO_EXT_FORMAT_TYPE_III = 0x83, +typedef enum +{ + AUDIO_FORMAT_TYPE_UNDEFINED = 0x00, + AUDIO_FORMAT_TYPE_I = 0x01, + AUDIO_FORMAT_TYPE_II = 0x02, + AUDIO_FORMAT_TYPE_III = 0x03, + AUDIO_FORMAT_TYPE_IV = 0x04, + AUDIO_EXT_FORMAT_TYPE_I = 0x81, + AUDIO_EXT_FORMAT_TYPE_II = 0x82, + AUDIO_EXT_FORMAT_TYPE_III = 0x83, } audio_format_type_t; // A.2.1 - Audio Class-Audio Data Format Type I UAC2 -typedef enum { - AUDIO_DATA_FORMAT_TYPE_I_PCM = (uint32_t)(1 << 0), - AUDIO_DATA_FORMAT_TYPE_I_PCM8 = (uint32_t)(1 << 1), - AUDIO_DATA_FORMAT_TYPE_I_IEEE_FLOAT = (uint32_t)(1 << 2), - AUDIO_DATA_FORMAT_TYPE_I_ALAW = (uint32_t)(1 << 3), - AUDIO_DATA_FORMAT_TYPE_I_MULAW = (uint32_t)(1 << 4), - AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA = 0x80000000u, +typedef enum +{ + AUDIO_DATA_FORMAT_TYPE_I_PCM = (uint32_t) (1 << 0), + AUDIO_DATA_FORMAT_TYPE_I_PCM8 = (uint32_t) (1 << 1), + AUDIO_DATA_FORMAT_TYPE_I_IEEE_FLOAT = (uint32_t) (1 << 2), + AUDIO_DATA_FORMAT_TYPE_I_ALAW = (uint32_t) (1 << 3), + AUDIO_DATA_FORMAT_TYPE_I_MULAW = (uint32_t) (1 << 4), + AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA = 0x80000000u, } audio_data_format_type_I_t; /// All remaining definitions are taken from the descriptor descriptions in the UAC2 main specification /// Audio Class-Control Values UAC2 -typedef enum { - AUDIO_CTRL_NONE = 0x00, ///< No Host access - AUDIO_CTRL_R = 0x01, ///< Host read access only - AUDIO_CTRL_RW = 0x03, ///< Host read write access +typedef enum +{ + AUDIO_CTRL_NONE = 0x00, ///< No Host access + AUDIO_CTRL_R = 0x01, ///< Host read access only + AUDIO_CTRL_RW = 0x03, ///< Host read write access } audio_control_t; /// Audio Class-Specific AC Interface Descriptor Controls UAC2 -typedef enum { - AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS = 0, +typedef enum +{ + AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS = 0, } audio_cs_ac_interface_control_pos_t; /// Audio Class-Specific AS Interface Descriptor Controls UAC2 -typedef enum { - AUDIO_CS_AS_INTERFACE_CTRL_ACTIVE_ALT_SET_POS = 0, - AUDIO_CS_AS_INTERFACE_CTRL_VALID_ALT_SET_POS = 2, +typedef enum +{ + AUDIO_CS_AS_INTERFACE_CTRL_ACTIVE_ALT_SET_POS = 0, + AUDIO_CS_AS_INTERFACE_CTRL_VALID_ALT_SET_POS = 2, } audio_cs_as_interface_control_pos_t; /// Audio Class-Specific AS Isochronous Data EP Attributes UAC2 -typedef enum { - AUDIO_CS_AS_ISO_DATA_EP_ATT_MAX_PACKETS_ONLY = 0x80, - AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK = 0x00, +typedef enum +{ + AUDIO_CS_AS_ISO_DATA_EP_ATT_MAX_PACKETS_ONLY = 0x80, + AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK = 0x00, } audio_cs_as_iso_data_ep_attribute_t; /// Audio Class-Specific AS Isochronous Data EP Controls UAC2 -typedef enum { - AUDIO_CS_AS_ISO_DATA_EP_CTRL_PITCH_POS = 0, - AUDIO_CS_AS_ISO_DATA_EP_CTRL_DATA_OVERRUN_POS = 2, - AUDIO_CS_AS_ISO_DATA_EP_CTRL_DATA_UNDERRUN_POS = 4, +typedef enum +{ + AUDIO_CS_AS_ISO_DATA_EP_CTRL_PITCH_POS = 0, + AUDIO_CS_AS_ISO_DATA_EP_CTRL_DATA_OVERRUN_POS = 2, + AUDIO_CS_AS_ISO_DATA_EP_CTRL_DATA_UNDERRUN_POS = 4, } audio_cs_as_iso_data_ep_control_pos_t; /// Audio Class-Specific AS Isochronous Data EP Lock Delay Units UAC2 -typedef enum { - AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED = 0x00, - AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC = 0x01, - AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_PCM_SAMPLES = 0x02, +typedef enum +{ + AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED = 0x00, + AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC = 0x01, + AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_PCM_SAMPLES = 0x02, } audio_cs_as_iso_data_ep_lock_delay_unit_t; /// Audio Class-Clock Source Attributes UAC2 -typedef enum { - AUDIO_CLOCK_SOURCE_ATT_EXT_CLK = 0x00, - AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK = 0x01, - AUDIO_CLOCK_SOURCE_ATT_INT_VAR_CLK = 0x02, - AUDIO_CLOCK_SOURCE_ATT_INT_PRO_CLK = 0x03, - AUDIO_CLOCK_SOURCE_ATT_CLK_SYC_SOF = 0x04, +typedef enum +{ + AUDIO_CLOCK_SOURCE_ATT_EXT_CLK = 0x00, + AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK = 0x01, + AUDIO_CLOCK_SOURCE_ATT_INT_VAR_CLK = 0x02, + AUDIO_CLOCK_SOURCE_ATT_INT_PRO_CLK = 0x03, + AUDIO_CLOCK_SOURCE_ATT_CLK_SYC_SOF = 0x04, } audio_clock_source_attribute_t; /// Audio Class-Clock Source Controls UAC2 -typedef enum { - AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS = 0, - AUDIO_CLOCK_SOURCE_CTRL_CLK_VAL_POS = 2, +typedef enum +{ + AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS = 0, + AUDIO_CLOCK_SOURCE_CTRL_CLK_VAL_POS = 2, } audio_clock_source_control_pos_t; /// Audio Class-Clock Selector Controls UAC2 -typedef enum { - AUDIO_CLOCK_SELECTOR_CTRL_POS = 0, +typedef enum +{ + AUDIO_CLOCK_SELECTOR_CTRL_POS = 0, } audio_clock_selector_control_pos_t; /// Audio Class-Clock Multiplier Controls UAC2 -typedef enum { - AUDIO_CLOCK_MULTIPLIER_CTRL_NUMERATOR_POS = 0, - AUDIO_CLOCK_MULTIPLIER_CTRL_DENOMINATOR_POS = 2, +typedef enum +{ + AUDIO_CLOCK_MULTIPLIER_CTRL_NUMERATOR_POS = 0, + AUDIO_CLOCK_MULTIPLIER_CTRL_DENOMINATOR_POS = 2, } audio_clock_multiplier_control_pos_t; /// Audio Class-Input Terminal Controls UAC2 -typedef enum { - AUDIO_IN_TERM_CTRL_CPY_PROT_POS = 0, - AUDIO_IN_TERM_CTRL_CONNECTOR_POS = 2, - AUDIO_IN_TERM_CTRL_OVERLOAD_POS = 4, - AUDIO_IN_TERM_CTRL_CLUSTER_POS = 6, - AUDIO_IN_TERM_CTRL_UNDERFLOW_POS = 8, - AUDIO_IN_TERM_CTRL_OVERFLOW_POS = 10, +typedef enum +{ + AUDIO_IN_TERM_CTRL_CPY_PROT_POS = 0, + AUDIO_IN_TERM_CTRL_CONNECTOR_POS = 2, + AUDIO_IN_TERM_CTRL_OVERLOAD_POS = 4, + AUDIO_IN_TERM_CTRL_CLUSTER_POS = 6, + AUDIO_IN_TERM_CTRL_UNDERFLOW_POS = 8, + AUDIO_IN_TERM_CTRL_OVERFLOW_POS = 10, } audio_terminal_input_control_pos_t; /// Audio Class-Output Terminal Controls UAC2 -typedef enum { - AUDIO_OUT_TERM_CTRL_CPY_PROT_POS = 0, - AUDIO_OUT_TERM_CTRL_CONNECTOR_POS = 2, - AUDIO_OUT_TERM_CTRL_OVERLOAD_POS = 4, - AUDIO_OUT_TERM_CTRL_UNDERFLOW_POS = 6, - AUDIO_OUT_TERM_CTRL_OVERFLOW_POS = 8, +typedef enum +{ + AUDIO_OUT_TERM_CTRL_CPY_PROT_POS = 0, + AUDIO_OUT_TERM_CTRL_CONNECTOR_POS = 2, + AUDIO_OUT_TERM_CTRL_OVERLOAD_POS = 4, + AUDIO_OUT_TERM_CTRL_UNDERFLOW_POS = 6, + AUDIO_OUT_TERM_CTRL_OVERFLOW_POS = 8, } audio_terminal_output_control_pos_t; /// Audio Class-Feature Unit Controls UAC2 -typedef enum { - AUDIO_FEATURE_UNIT_CTRL_MUTE_POS = 0, - AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS = 2, - AUDIO_FEATURE_UNIT_CTRL_BASS_POS = 4, - AUDIO_FEATURE_UNIT_CTRL_MID_POS = 6, - AUDIO_FEATURE_UNIT_CTRL_TREBLE_POS = 8, - AUDIO_FEATURE_UNIT_CTRL_GRAPHIC_EQU_POS = 10, - AUDIO_FEATURE_UNIT_CTRL_AGC_POS = 12, - AUDIO_FEATURE_UNIT_CTRL_DELAY_POS = 14, - AUDIO_FEATURE_UNIT_CTRL_BASS_BOOST_POS = 16, - AUDIO_FEATURE_UNIT_CTRL_LOUDNESS_POS = 18, - AUDIO_FEATURE_UNIT_CTRL_INPUT_GAIN_POS = 20, - AUDIO_FEATURE_UNIT_CTRL_INPUT_GAIN_PAD_POS = 22, - AUDIO_FEATURE_UNIT_CTRL_PHASE_INV_POS = 24, - AUDIO_FEATURE_UNIT_CTRL_UNDERFLOW_POS = 26, - AUDIO_FEATURE_UNIT_CTRL_OVERFLOW_POS = 28, +typedef enum +{ + AUDIO_FEATURE_UNIT_CTRL_MUTE_POS = 0, + AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS = 2, + AUDIO_FEATURE_UNIT_CTRL_BASS_POS = 4, + AUDIO_FEATURE_UNIT_CTRL_MID_POS = 6, + AUDIO_FEATURE_UNIT_CTRL_TREBLE_POS = 8, + AUDIO_FEATURE_UNIT_CTRL_GRAPHIC_EQU_POS = 10, + AUDIO_FEATURE_UNIT_CTRL_AGC_POS = 12, + AUDIO_FEATURE_UNIT_CTRL_DELAY_POS = 14, + AUDIO_FEATURE_UNIT_CTRL_BASS_BOOST_POS = 16, + AUDIO_FEATURE_UNIT_CTRL_LOUDNESS_POS = 18, + AUDIO_FEATURE_UNIT_CTRL_INPUT_GAIN_POS = 20, + AUDIO_FEATURE_UNIT_CTRL_INPUT_GAIN_PAD_POS = 22, + AUDIO_FEATURE_UNIT_CTRL_PHASE_INV_POS = 24, + AUDIO_FEATURE_UNIT_CTRL_UNDERFLOW_POS = 26, + AUDIO_FEATURE_UNIT_CTRL_OVERFLOW_POS = 28, } audio_feature_unit_control_pos_t; /// Audio Class-Audio Channel Configuration UAC2 -typedef enum { - AUDIO_CHANNEL_CONFIG_NON_PREDEFINED = 0x00000000, - AUDIO_CHANNEL_CONFIG_FRONT_LEFT = 0x00000001, - AUDIO_CHANNEL_CONFIG_FRONT_RIGHT = 0x00000002, - AUDIO_CHANNEL_CONFIG_FRONT_CENTER = 0x00000004, - AUDIO_CHANNEL_CONFIG_LOW_FRQ_EFFECTS = 0x00000008, - AUDIO_CHANNEL_CONFIG_BACK_LEFT = 0x00000010, - AUDIO_CHANNEL_CONFIG_BACK_RIGHT = 0x00000020, - AUDIO_CHANNEL_CONFIG_FRONT_LEFT_OF_CENTER = 0x00000040, - AUDIO_CHANNEL_CONFIG_FRONT_RIGHT_OF_CENTER = 0x00000080, - AUDIO_CHANNEL_CONFIG_BACK_CENTER = 0x00000100, - AUDIO_CHANNEL_CONFIG_SIDE_LEFT = 0x00000200, - AUDIO_CHANNEL_CONFIG_SIDE_RIGHT = 0x00000400, - AUDIO_CHANNEL_CONFIG_TOP_CENTER = 0x00000800, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_LEFT = 0x00001000, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_CENTER = 0x00002000, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_RIGHT = 0x00004000, - AUDIO_CHANNEL_CONFIG_TOP_BACK_LEFT = 0x00008000, - AUDIO_CHANNEL_CONFIG_TOP_BACK_CENTER = 0x00010000, - AUDIO_CHANNEL_CONFIG_TOP_BACK_RIGHT = 0x00020000, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_LEFT_OF_CENTER = 0x00040000, - AUDIO_CHANNEL_CONFIG_TOP_FRONT_RIGHT_OF_CENTER = 0x00080000, - AUDIO_CHANNEL_CONFIG_LEFT_LOW_FRQ_EFFECTS = 0x00100000, - AUDIO_CHANNEL_CONFIG_RIGHT_LOW_FRQ_EFFECTS = 0x00200000, - AUDIO_CHANNEL_CONFIG_TOP_SIDE_LEFT = 0x00400000, - AUDIO_CHANNEL_CONFIG_TOP_SIDE_RIGHT = 0x00800000, - AUDIO_CHANNEL_CONFIG_BOTTOM_CENTER = 0x01000000, - AUDIO_CHANNEL_CONFIG_BACK_LEFT_OF_CENTER = 0x02000000, - AUDIO_CHANNEL_CONFIG_BACK_RIGHT_OF_CENTER = 0x04000000, - AUDIO_CHANNEL_CONFIG_RAW_DATA = 0x80000000u, +typedef enum +{ + AUDIO_CHANNEL_CONFIG_NON_PREDEFINED = 0x00000000, + AUDIO_CHANNEL_CONFIG_FRONT_LEFT = 0x00000001, + AUDIO_CHANNEL_CONFIG_FRONT_RIGHT = 0x00000002, + AUDIO_CHANNEL_CONFIG_FRONT_CENTER = 0x00000004, + AUDIO_CHANNEL_CONFIG_LOW_FRQ_EFFECTS = 0x00000008, + AUDIO_CHANNEL_CONFIG_BACK_LEFT = 0x00000010, + AUDIO_CHANNEL_CONFIG_BACK_RIGHT = 0x00000020, + AUDIO_CHANNEL_CONFIG_FRONT_LEFT_OF_CENTER = 0x00000040, + AUDIO_CHANNEL_CONFIG_FRONT_RIGHT_OF_CENTER = 0x00000080, + AUDIO_CHANNEL_CONFIG_BACK_CENTER = 0x00000100, + AUDIO_CHANNEL_CONFIG_SIDE_LEFT = 0x00000200, + AUDIO_CHANNEL_CONFIG_SIDE_RIGHT = 0x00000400, + AUDIO_CHANNEL_CONFIG_TOP_CENTER = 0x00000800, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_LEFT = 0x00001000, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_CENTER = 0x00002000, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_RIGHT = 0x00004000, + AUDIO_CHANNEL_CONFIG_TOP_BACK_LEFT = 0x00008000, + AUDIO_CHANNEL_CONFIG_TOP_BACK_CENTER = 0x00010000, + AUDIO_CHANNEL_CONFIG_TOP_BACK_RIGHT = 0x00020000, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_LEFT_OF_CENTER = 0x00040000, + AUDIO_CHANNEL_CONFIG_TOP_FRONT_RIGHT_OF_CENTER = 0x00080000, + AUDIO_CHANNEL_CONFIG_LEFT_LOW_FRQ_EFFECTS = 0x00100000, + AUDIO_CHANNEL_CONFIG_RIGHT_LOW_FRQ_EFFECTS = 0x00200000, + AUDIO_CHANNEL_CONFIG_TOP_SIDE_LEFT = 0x00400000, + AUDIO_CHANNEL_CONFIG_TOP_SIDE_RIGHT = 0x00800000, + AUDIO_CHANNEL_CONFIG_BOTTOM_CENTER = 0x01000000, + AUDIO_CHANNEL_CONFIG_BACK_LEFT_OF_CENTER = 0x02000000, + AUDIO_CHANNEL_CONFIG_BACK_RIGHT_OF_CENTER = 0x04000000, + AUDIO_CHANNEL_CONFIG_RAW_DATA = 0x80000000u, } audio_channel_config_t; /// AUDIO Channel Cluster Descriptor (4.1) typedef struct TU_ATTR_PACKED { - uint8_t bNrChannels; ///< Number of channels currently connected. - audio_channel_config_t - bmChannelConfig; ///< Bitmap according to 'audio_channel_config_t' with a 1 set if channel is connected and 0 else. In case channels are non-predefined ignore them here (see UAC2 specification 4.1 Audio Channel Cluster Descriptor. - uint8_t - iChannelNames; ///< Index of a string descriptor, describing the name of the first inserted channel with a non-predefined spatial location. + uint8_t bNrChannels; ///< Number of channels currently connected. + audio_channel_config_t bmChannelConfig; ///< Bitmap according to 'audio_channel_config_t' with a 1 set if channel is connected and 0 else. In case channels are non-predefined ignore them here (see UAC2 specification 4.1 Audio Channel Cluster Descriptor. + uint8_t iChannelNames; ///< Index of a string descriptor, describing the name of the first inserted channel with a non-predefined spatial location. } audio_desc_channel_cluster_t; /// AUDIO Class-Specific AC Interface Header Descriptor (4.7.2) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes: 9. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_HEADER. - uint16_t - bcdADC; ///< Audio Device Class Specification Release Number in Binary-Coded Decimal. Value: U16_TO_U8S_LE(0x0200). - uint8_t - bCategory; ///< Constant, indicating the primary use of this audio function, as intended by the manufacturer. See: audio_function_t. - uint16_t - wTotalLength; ///< Total number of bytes returned for the class-specific AudioControl interface descriptor. Includes the combined length of this descriptor header and all Clock Source, Unit and Terminal descriptors. - uint8_t bmControls; ///< See: audio_cs_ac_interface_control_pos_t. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes: 9. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_HEADER. + uint16_t bcdADC ; ///< Audio Device Class Specification Release Number in Binary-Coded Decimal. Value: U16_TO_U8S_LE(0x0200). + uint8_t bCategory ; ///< Constant, indicating the primary use of this audio function, as intended by the manufacturer. See: audio_function_t. + uint16_t wTotalLength ; ///< Total number of bytes returned for the class-specific AudioControl interface descriptor. Includes the combined length of this descriptor header and all Clock Source, Unit and Terminal descriptors. + uint8_t bmControls ; ///< See: audio_cs_ac_interface_control_pos_t. } audio_desc_cs_ac_interface_t; /// AUDIO Clock Source Descriptor (4.7.2.1) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes: 8. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE. - uint8_t - bClockID; ///< Constant uniquely identifying the Clock Source Entity within the audio function. This value is used in all requests to address this Entity. - uint8_t bmAttributes; ///< See: audio_clock_source_attribute_t. - uint8_t bmControls; ///< See: audio_clock_source_control_pos_t. - uint8_t - bAssocTerminal; ///< Terminal ID of the Terminal that is associated with this Clock Source. - uint8_t iClockSource; ///< Index of a string descriptor, describing the Clock Source Entity. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes: 8. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE. + uint8_t bClockID ; ///< Constant uniquely identifying the Clock Source Entity within the audio function. This value is used in all requests to address this Entity. + uint8_t bmAttributes ; ///< See: audio_clock_source_attribute_t. + uint8_t bmControls ; ///< See: audio_clock_source_control_pos_t. + uint8_t bAssocTerminal ; ///< Terminal ID of the Terminal that is associated with this Clock Source. + uint8_t iClockSource ; ///< Index of a string descriptor, describing the Clock Source Entity. } audio_desc_clock_source_t; /// AUDIO Clock Selector Descriptor (4.7.2.2) for ONE pin -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor, in bytes: 7+p. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_SELECTOR. - uint8_t - bClockID; ///< Constant uniquely identifying the Clock Selector Entity within the audio function. This value is used in all requests to address this Entity. - uint8_t bNrInPins; ///< Number of Input Pins of this Unit: p = 1 thus bNrInPins = 1. - uint8_t - baCSourceID; ///< ID of the Clock Entity to which the first Clock Input Pin of this Clock Selector Entity is connected.. - uint8_t bmControls; ///< See: audio_clock_selector_control_pos_t. - uint8_t iClockSource; ///< Index of a string descriptor, describing the Clock Selector Entity. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor, in bytes: 7+p. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_SELECTOR. + uint8_t bClockID ; ///< Constant uniquely identifying the Clock Selector Entity within the audio function. This value is used in all requests to address this Entity. + uint8_t bNrInPins ; ///< Number of Input Pins of this Unit: p = 1 thus bNrInPins = 1. + uint8_t baCSourceID ; ///< ID of the Clock Entity to which the first Clock Input Pin of this Clock Selector Entity is connected.. + uint8_t bmControls ; ///< See: audio_clock_selector_control_pos_t. + uint8_t iClockSource ; ///< Index of a string descriptor, describing the Clock Selector Entity. } audio_desc_clock_selector_t; /// AUDIO Clock Selector Descriptor (4.7.2.2) for multiple pins #define audio_desc_clock_selector_n_t(source_num) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bClockID; \ - uint8_t bNrInPins; \ - struct TU_ATTR_PACKED { \ - uint8_t baSourceID; \ - } sourceID[source_num]; \ - uint8_t bmControls; \ - uint8_t iClockSource; \ - } + struct TU_ATTR_PACKED { \ + uint8_t bLength ; \ + uint8_t bDescriptorType ; \ + uint8_t bDescriptorSubType ; \ + uint8_t bClockID ; \ + uint8_t bNrInPins ; \ + struct TU_ATTR_PACKED { \ + uint8_t baSourceID ; \ + } sourceID[source_num] ; \ + uint8_t bmControls ; \ + uint8_t iClockSource ; \ +} /// AUDIO Clock Multiplier Descriptor (4.7.2.3) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor, in bytes: 7. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t - bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_MULTIPLIER. - uint8_t - bClockID; ///< Constant uniquely identifying the Clock Multiplier Entity within the audio function. This value is used in all requests to address this Entity. - uint8_t - bCSourceID; ///< ID of the Clock Entity to which the last Clock Input Pin of this Clock Selector Entity is connected. - uint8_t bmControls; ///< See: audio_clock_multiplier_control_pos_t. - uint8_t iClockSource; ///< Index of a string descriptor, describing the Clock Multiplier Entity. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor, in bytes: 7. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_CLOCK_MULTIPLIER. + uint8_t bClockID ; ///< Constant uniquely identifying the Clock Multiplier Entity within the audio function. This value is used in all requests to address this Entity. + uint8_t bCSourceID ; ///< ID of the Clock Entity to which the last Clock Input Pin of this Clock Selector Entity is connected. + uint8_t bmControls ; ///< See: audio_clock_multiplier_control_pos_t. + uint8_t iClockSource ; ///< Index of a string descriptor, describing the Clock Multiplier Entity. } audio_desc_clock_multiplier_t; /// AUDIO Input Terminal Descriptor(4.7.2.4) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor, in bytes: 17. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL. - uint8_t - bTerminalID; ///< Constant uniquely identifying the Terminal within the audio function. This value is used in all requests to address this terminal. - uint16_t - wTerminalType; ///< Constant characterizing the type of Terminal. See: audio_terminal_type_t for USB streaming and audio_terminal_input_type_t for other input types. - uint8_t bAssocTerminal; ///< ID of the Output Terminal to which this Input Terminal is associated. - uint8_t bCSourceID; ///< ID of the Clock Entity to which this Input Terminal is connected. - uint8_t - bNrChannels; ///< Number of logical output channels in the Terminal’s output audio channel cluster. - uint32_t - bmChannelConfig; ///< Describes the spatial location of the logical channels. See:audio_channel_config_t. - uint8_t - iChannelNames; ///< Index of a string descriptor, describing the name of the first logical channel. - uint16_t bmControls; ///< See: audio_terminal_input_control_pos_t. - uint8_t iTerminal; ///< Index of a string descriptor, describing the Input Terminal. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor, in bytes: 17. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL. + uint8_t bTerminalID ; ///< Constant uniquely identifying the Terminal within the audio function. This value is used in all requests to address this terminal. + uint16_t wTerminalType ; ///< Constant characterizing the type of Terminal. See: audio_terminal_type_t for USB streaming and audio_terminal_input_type_t for other input types. + uint8_t bAssocTerminal ; ///< ID of the Output Terminal to which this Input Terminal is associated. + uint8_t bCSourceID ; ///< ID of the Clock Entity to which this Input Terminal is connected. + uint8_t bNrChannels ; ///< Number of logical output channels in the Terminal’s output audio channel cluster. + uint32_t bmChannelConfig ; ///< Describes the spatial location of the logical channels. See:audio_channel_config_t. + uint8_t iChannelNames ; ///< Index of a string descriptor, describing the name of the first logical channel. + uint16_t bmControls ; ///< See: audio_terminal_input_control_pos_t. + uint8_t iTerminal ; ///< Index of a string descriptor, describing the Input Terminal. } audio_desc_input_terminal_t; /// AUDIO Output Terminal Descriptor(4.7.2.5) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor, in bytes: 12. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL. - uint8_t - bTerminalID; ///< Constant uniquely identifying the Terminal within the audio function. This value is used in all requests to address this Terminal. - uint16_t - wTerminalType; ///< Constant characterizing the type of Terminal. See: audio_terminal_type_t for USB streaming and audio_terminal_output_type_t for other output types. - uint8_t - bAssocTerminal; ///< Constant, identifying the Input Terminal to which this Output Terminal is associated. - uint8_t bSourceID; ///< ID of the Unit or Terminal to which this Terminal is connected. - uint8_t bCSourceID; ///< ID of the Clock Entity to which this Output Terminal is connected. - uint16_t bmControls; ///< See: audio_terminal_output_type_t. - uint8_t iTerminal; ///< Index of a string descriptor, describing the Output Terminal. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor, in bytes: 12. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL. + uint8_t bTerminalID ; ///< Constant uniquely identifying the Terminal within the audio function. This value is used in all requests to address this Terminal. + uint16_t wTerminalType ; ///< Constant characterizing the type of Terminal. See: audio_terminal_type_t for USB streaming and audio_terminal_output_type_t for other output types. + uint8_t bAssocTerminal ; ///< Constant, identifying the Input Terminal to which this Output Terminal is associated. + uint8_t bSourceID ; ///< ID of the Unit or Terminal to which this Terminal is connected. + uint8_t bCSourceID ; ///< ID of the Clock Entity to which this Output Terminal is connected. + uint16_t bmControls ; ///< See: audio_terminal_output_type_t. + uint8_t iTerminal ; ///< Index of a string descriptor, describing the Output Terminal. } audio_desc_output_terminal_t; /// AUDIO Feature Unit Descriptor(4.7.2.8) for ONE channel -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor, in bytes: 14. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_FEATURE_UNIT. - uint8_t - bUnitID; ///< Constant uniquely identifying the Unit within the audio function. This value is used in all requests to address this Unit. - uint8_t bSourceID; ///< ID of the Unit or Terminal to which this Feature Unit is connected. - struct TU_ATTR_PACKED { - uint32_t - bmaControls; ///< See: audio_feature_unit_control_pos_t. Controls0 is master channel 0 (always present) and Controls1 is logical channel 1. - } controls[2]; - uint8_t iTerminal; ///< Index of a string descriptor, describing this Feature Unit. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor, in bytes: 14. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AC_INTERFACE_FEATURE_UNIT. + uint8_t bUnitID ; ///< Constant uniquely identifying the Unit within the audio function. This value is used in all requests to address this Unit. + uint8_t bSourceID ; ///< ID of the Unit or Terminal to which this Feature Unit is connected. + struct TU_ATTR_PACKED { + uint32_t bmaControls ; ///< See: audio_feature_unit_control_pos_t. Controls0 is master channel 0 (always present) and Controls1 is logical channel 1. + } controls[2] ; + uint8_t iTerminal ; ///< Index of a string descriptor, describing this Feature Unit. } audio_desc_feature_unit_t; /// AUDIO Feature Unit Descriptor(4.7.2.8) for multiple channels -#define audio_desc_feature_unit_n_t(ch_num) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; /* 6+(ch_num+1)*4 */ \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bUnitID; \ - uint8_t bSourceID; \ - struct TU_ATTR_PACKED { \ - uint32_t bmaControls; \ - } controls[ch_num + 1]; \ - uint8_t iTerminal; \ - } +#define audio_desc_feature_unit_n_t(ch_num)\ + struct TU_ATTR_PACKED { \ + uint8_t bLength ; /* 6+(ch_num+1)*4 */\ + uint8_t bDescriptorType ; \ + uint8_t bDescriptorSubType ; \ + uint8_t bUnitID ; \ + uint8_t bSourceID ; \ + struct TU_ATTR_PACKED { \ + uint32_t bmaControls ; \ + } controls[ch_num+1] ; \ + uint8_t iTerminal ; \ +} /// AUDIO Class-Specific AS Interface Descriptor(4.9.2) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor, in bytes: 16. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AS_INTERFACE_AS_GENERAL. - uint8_t bTerminalLink; ///< The Terminal ID of the Terminal to which this interface is connected. - uint8_t bmControls; ///< See: audio_cs_as_interface_control_pos_t. - uint8_t - bFormatType; ///< Constant identifying the Format Type the AudioStreaming interface is using. See: audio_format_type_t. - uint32_t - bmFormats; ///< The Audio Data Format(s) that can be used to communicate with this interface.See: audio_data_format_type_I_t. - uint8_t bNrChannels; ///< Number of physical channels in the AS Interface audio channel cluster. - uint32_t - bmChannelConfig; ///< Describes the spatial location of the physical channels. See: audio_channel_config_t. - uint8_t - iChannelNames; ///< Index of a string descriptor, describing the name of the first physical channel. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor, in bytes: 16. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AS_INTERFACE_AS_GENERAL. + uint8_t bTerminalLink ; ///< The Terminal ID of the Terminal to which this interface is connected. + uint8_t bmControls ; ///< See: audio_cs_as_interface_control_pos_t. + uint8_t bFormatType ; ///< Constant identifying the Format Type the AudioStreaming interface is using. See: audio_format_type_t. + uint32_t bmFormats ; ///< The Audio Data Format(s) that can be used to communicate with this interface.See: audio_data_format_type_I_t. + uint8_t bNrChannels ; ///< Number of physical channels in the AS Interface audio channel cluster. + uint32_t bmChannelConfig ; ///< Describes the spatial location of the physical channels. See: audio_channel_config_t. + uint8_t iChannelNames ; ///< Index of a string descriptor, describing the name of the first physical channel. } audio_desc_cs_as_interface_t; /// AUDIO Type I Format Type Descriptor(2.3.1.6 - Audio Formats) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor, in bytes: 6. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_AS_INTERFACE_FORMAT_TYPE. - uint8_t - bFormatType; ///< Constant identifying the Format Type the AudioStreaming interface is using. Value: AUDIO_FORMAT_TYPE_I. - uint8_t bSubslotSize; ///< The number of bytes occupied by one audio subslot. Can be 1, 2, 3 or 4. - uint8_t - bBitResolution; ///< The number of effectively used bits from the available bits in an audio subslot. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor, in bytes: 6. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_INTERFACE. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_AS_INTERFACE_FORMAT_TYPE. + uint8_t bFormatType ; ///< Constant identifying the Format Type the AudioStreaming interface is using. Value: AUDIO_FORMAT_TYPE_I. + uint8_t bSubslotSize ; ///< The number of bytes occupied by one audio subslot. Can be 1, 2, 3 or 4. + uint8_t bBitResolution ; ///< The number of effectively used bits from the available bits in an audio subslot. } audio_desc_type_I_format_t; /// AUDIO Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor, in bytes: 8. - uint8_t bDescriptorType; ///< Descriptor Type. Value: TUSB_DESC_CS_ENDPOINT. - uint8_t bDescriptorSubType; ///< Descriptor SubType. Value: AUDIO_CS_EP_SUBTYPE_GENERAL. - uint8_t bmAttributes; ///< See: audio_cs_as_iso_data_ep_attribute_t. - uint8_t bmControls; ///< See: audio_cs_as_iso_data_ep_control_pos_t. - uint8_t - bLockDelayUnits; ///< Indicates the units used for the wLockDelay field. See: audio_cs_as_iso_data_ep_lock_delay_unit_t. - uint16_t - wLockDelay; ///< Indicates the time it takes this endpoint to reliably lock its internal clock recovery circuitry. Units used depend on the value of the bLockDelayUnits field. +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor, in bytes: 8. + uint8_t bDescriptorType ; ///< Descriptor Type. Value: TUSB_DESC_CS_ENDPOINT. + uint8_t bDescriptorSubType ; ///< Descriptor SubType. Value: AUDIO_CS_EP_SUBTYPE_GENERAL. + uint8_t bmAttributes ; ///< See: audio_cs_as_iso_data_ep_attribute_t. + uint8_t bmControls ; ///< See: audio_cs_as_iso_data_ep_control_pos_t. + uint8_t bLockDelayUnits ; ///< Indicates the units used for the wLockDelay field. See: audio_cs_as_iso_data_ep_lock_delay_unit_t. + uint16_t wLockDelay ; ///< Indicates the time it takes this endpoint to reliably lock its internal clock recovery circuitry. Units used depend on the value of the bLockDelayUnits field. } audio_desc_cs_as_iso_data_ep_t; // 5.2.2 Control Request Layout -typedef struct TU_ATTR_PACKED { - union { - struct TU_ATTR_PACKED { - uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. - uint8_t type : 2; ///< Request type tusb_request_type_t. - uint8_t direction : 1; ///< Direction type. tusb_dir_t +typedef struct TU_ATTR_PACKED +{ + union + { + struct TU_ATTR_PACKED + { + uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. + uint8_t type : 2; ///< Request type tusb_request_type_t. + uint8_t direction : 1; ///< Direction type. tusb_dir_t } bmRequestType_bit; uint8_t bmRequestType; }; - uint8_t bRequest; ///< Request type audio_cs_req_t + uint8_t bRequest; ///< Request type audio_cs_req_t uint8_t bChannelNumber; uint8_t bControlSelector; - union { + union + { uint8_t bInterface; uint8_t bEndpoint; }; @@ -807,120 +843,110 @@ typedef struct TU_ATTR_PACKED { //// 5.2.3 Control Request Parameter Block Layout // 5.2.3.1 1-byte Control CUR Parameter Block -typedef struct TU_ATTR_PACKED { - int8_t bCur; ///< The setting for the CUR attribute of the addressed Control +typedef struct TU_ATTR_PACKED +{ + int8_t bCur ; ///< The setting for the CUR attribute of the addressed Control } audio_control_cur_1_t; // 5.2.3.2 2-byte Control CUR Parameter Block -typedef struct TU_ATTR_PACKED { - int16_t bCur; ///< The setting for the CUR attribute of the addressed Control +typedef struct TU_ATTR_PACKED +{ + int16_t bCur ; ///< The setting for the CUR attribute of the addressed Control } audio_control_cur_2_t; // 5.2.3.3 4-byte Control CUR Parameter Block -typedef struct TU_ATTR_PACKED { - int32_t bCur; ///< The setting for the CUR attribute of the addressed Control +typedef struct TU_ATTR_PACKED +{ + int32_t bCur ; ///< The setting for the CUR attribute of the addressed Control } audio_control_cur_4_t; // Use the following ONLY for RECEIVED data - compiler does not know how many subranges are defined! Use the one below for predefined lengths - or if you know what you are doing do what you like // 5.2.3.1 1-byte Control RANGE Parameter Block typedef struct TU_ATTR_PACKED { - uint16_t wNumSubRanges; - struct TU_ATTR_PACKED { - int8_t - bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ - int8_t - bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ - uint8_t - bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ - } subrange[]; + uint16_t wNumSubRanges; + struct TU_ATTR_PACKED { + int8_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ + int8_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ + uint8_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ + } subrange[] ; } audio_control_range_1_t; // 5.2.3.2 2-byte Control RANGE Parameter Block typedef struct TU_ATTR_PACKED { - uint16_t wNumSubRanges; - struct TU_ATTR_PACKED { - int16_t - bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ - int16_t - bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ - uint16_t - bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ - } subrange[]; + uint16_t wNumSubRanges; + struct TU_ATTR_PACKED { + int16_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ + int16_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ + uint16_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ + } subrange[] ; } audio_control_range_2_t; // 5.2.3.3 4-byte Control RANGE Parameter Block typedef struct TU_ATTR_PACKED { - uint16_t wNumSubRanges; - struct TU_ATTR_PACKED { - int32_t - bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ - int32_t - bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ - uint32_t - bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ - } subrange[]; + uint16_t wNumSubRanges; + struct TU_ATTR_PACKED { + int32_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ + int32_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ + uint32_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ + } subrange[] ; } audio_control_range_4_t; // 5.2.3.1 1-byte Control RANGE Parameter Block -#define audio_control_range_1_n_t(numSubRanges) \ - struct TU_ATTR_PACKED { \ - uint16_t wNumSubRanges; \ - struct TU_ATTR_PACKED { \ - int8_t \ - bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ \ - int8_t \ - bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ \ - uint8_t \ - bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ \ - } subrange[numSubRanges]; \ - } +#define audio_control_range_1_n_t(numSubRanges) \ + struct TU_ATTR_PACKED { \ + uint16_t wNumSubRanges; \ + struct TU_ATTR_PACKED { \ + int8_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ + int8_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ + uint8_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/\ + } subrange[numSubRanges] ; \ +} /// 5.2.3.2 2-byte Control RANGE Parameter Block -#define audio_control_range_2_n_t(numSubRanges) \ - struct TU_ATTR_PACKED { \ - uint16_t wNumSubRanges; \ - struct TU_ATTR_PACKED { \ - int16_t \ - bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ \ - int16_t \ - bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ \ - uint16_t \ - bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ \ - } subrange[numSubRanges]; \ - } +#define audio_control_range_2_n_t(numSubRanges) \ + struct TU_ATTR_PACKED { \ + uint16_t wNumSubRanges; \ + struct TU_ATTR_PACKED { \ + int16_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ + int16_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ + uint16_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/\ + } subrange[numSubRanges]; \ +} // 5.2.3.3 4-byte Control RANGE Parameter Block -#define audio_control_range_4_n_t(numSubRanges) \ - struct TU_ATTR_PACKED { \ - uint16_t wNumSubRanges; \ - struct TU_ATTR_PACKED { \ - int32_t \ - bMin; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/ \ - int32_t \ - bMax; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/ \ - uint32_t \ - bRes; /*The setting for the RES attribute of the nth subrange of the addressed Control*/ \ - } subrange[numSubRanges]; \ - } +#define audio_control_range_4_n_t(numSubRanges) \ + struct TU_ATTR_PACKED { \ + uint16_t wNumSubRanges; \ + struct TU_ATTR_PACKED { \ + int32_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ + int32_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ + uint32_t bRes ; /*The setting for the RES attribute of the nth subrange of the addressed Control*/\ + } subrange[numSubRanges]; \ +} // 6.1 Interrupt Data Message Format -typedef struct TU_ATTR_PACKED { - uint8_t bInfo; - uint8_t bAttribute; - union { - uint16_t wValue; - struct { - uint8_t wValue_cn_or_mcn; - uint8_t wValue_cs; - }; +typedef struct TU_ATTR_PACKED +{ + uint8_t bInfo; + uint8_t bAttribute; + union + { + uint16_t wValue; + struct + { + uint8_t wValue_cn_or_mcn; + uint8_t wValue_cs; }; - union { - uint16_t wIndex; - struct { - uint8_t wIndex_ep_or_int; - uint8_t wIndex_entity_id; - }; + }; + union + { + uint16_t wIndex; + struct + { + uint8_t wIndex_ep_or_int; + uint8_t wIndex_entity_id; }; + }; } audio_interrupt_data_t; /** @} */ diff --git a/Libraries/tinyusb/src/class/audio/audio_device.c b/Libraries/tinyusb/src/class/audio/audio_device.c index 3f7f7f033da..8c86de4337d 100644 --- a/Libraries/tinyusb/src/class/audio/audio_device.c +++ b/Libraries/tinyusb/src/class/audio/audio_device.c @@ -68,12 +68,12 @@ // Use ring buffer if it's available, some MCUs need extra RAM requirements // For DWC2 enable ring buffer will disable DMA (if available) #ifndef TUD_AUDIO_PREFER_RING_BUFFER -#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || \ - CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || defined(TUP_USBIP_DWC2) -#define TUD_AUDIO_PREFER_RING_BUFFER 0 -#else -#define TUD_AUDIO_PREFER_RING_BUFFER 1 -#endif + #if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \ + defined(TUP_USBIP_DWC2) + #define TUD_AUDIO_PREFER_RING_BUFFER 0 + #else + #define TUD_AUDIO_PREFER_RING_BUFFER 1 + #endif #endif // Linear buffer in case target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer @@ -81,18 +81,22 @@ // Only STM32 and dcd_transdimension use non-linear buffer for now // dwc2 except esp32sx (since it may use dcd_esp32sx) -#if (defined(TUP_USBIP_DWC2) && !TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)) || \ - defined(TUP_USBIP_FSDEV) || CFG_TUSB_MCU == OPT_MCU_RX63X || CFG_TUSB_MCU == OPT_MCU_RX65X || \ - CFG_TUSB_MCU == OPT_MCU_RX72N || CFG_TUSB_MCU == OPT_MCU_LPC18XX || \ - CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \ +#if (defined(TUP_USBIP_DWC2) && !TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)) || \ + defined(TUP_USBIP_FSDEV) || \ + CFG_TUSB_MCU == OPT_MCU_RX63X || \ + CFG_TUSB_MCU == OPT_MCU_RX65X || \ + CFG_TUSB_MCU == OPT_MCU_RX72N || \ + CFG_TUSB_MCU == OPT_MCU_LPC18XX || \ + CFG_TUSB_MCU == OPT_MCU_LPC43XX || \ + CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \ CFG_TUSB_MCU == OPT_MCU_MSP432E4 -#if TUD_AUDIO_PREFER_RING_BUFFER -#define USE_LINEAR_BUFFER 0 -#else -#define USE_LINEAR_BUFFER 1 -#endif + #if TUD_AUDIO_PREFER_RING_BUFFER + #define USE_LINEAR_BUFFER 0 + #else + #define USE_LINEAR_BUFFER 1 + #endif #else -#define USE_LINEAR_BUFFER 1 + #define USE_LINEAR_BUFFER 1 #endif // Declaration of buffers @@ -116,116 +120,95 @@ // EP IN software buffers and mutexes #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING -#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 -tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - audio_ep_in_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t - ep_in_ff_mutex_wr_1; // No need for read mutex as only USB driver reads from FIFO -#endif -#endif // CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 - -#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 -tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - audio_ep_in_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t - ep_in_ff_mutex_wr_2; // No need for read mutex as only USB driver reads from FIFO -#endif -#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 - -#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 -tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - audio_ep_in_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t - ep_in_ff_mutex_wr_3; // No need for read mutex as only USB driver reads from FIFO -#endif -#endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 + #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 + tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t ep_in_ff_mutex_wr_1; // No need for read mutex as only USB driver reads from FIFO + #endif + #endif // CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 + + #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 + tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t ep_in_ff_mutex_wr_2; // No need for read mutex as only USB driver reads from FIFO + #endif + #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 + + #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 + tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t ep_in_ff_mutex_wr_3; // No need for read mutex as only USB driver reads from FIFO + #endif + #endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING // Linear buffer TX in case: // - target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR // - the software encoding is used - in this case the linear buffers serve as a target memory where logical channels are encoded into #if CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_ENCODING) -#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - lin_buf_in_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX]; -#endif + #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0 + tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX]; + #endif -#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - lin_buf_in_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX]; -#endif + #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0 + tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX]; + #endif -#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - lin_buf_in_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX]; -#endif + #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0 + tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX]; + #endif #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING) // EP OUT software buffers and mutexes #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING -#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 -tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - audio_ep_out_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t - ep_out_ff_mutex_rd_1; // No need for write mutex as only USB driver writes into FIFO -#endif -#endif // CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 - -#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 -tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - audio_ep_out_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t - ep_out_ff_mutex_rd_2; // No need for write mutex as only USB driver writes into FIFO -#endif -#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 - -#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 -tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - audio_ep_out_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t - ep_out_ff_mutex_rd_3; // No need for write mutex as only USB driver writes into FIFO -#endif -#endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 + #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 + tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t ep_out_ff_mutex_rd_1; // No need for write mutex as only USB driver writes into FIFO + #endif + #endif // CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 + + #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 + tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t ep_out_ff_mutex_rd_2; // No need for write mutex as only USB driver writes into FIFO + #endif + #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 + + #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 + tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t ep_out_ff_mutex_rd_3; // No need for write mutex as only USB driver writes into FIFO + #endif + #endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING // Linear buffer RX in case: // - target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR // - the software encoding is used - in this case the linear buffers serve as a target memory where logical channels are encoded into #if CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING) -#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - lin_buf_out_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX]; -#endif + #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0 + tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX]; + #endif -#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - lin_buf_out_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX]; -#endif + #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0 + tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX]; + #endif -#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - lin_buf_out_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX]; -#endif + #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0 + tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX]; + #endif #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING) // Control buffers -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - ctrl_buf_1[CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ]; +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_1[CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ]; #if CFG_TUD_AUDIO > 1 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - ctrl_buf_2[CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ]; +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_2[CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ]; #endif #if CFG_TUD_AUDIO > 2 -tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t - ctrl_buf_3[CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ]; +tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_3[CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ]; #endif // Active alternate setting of interfaces @@ -241,396 +224,349 @@ tu_static uint8_t alt_setting_3[CFG_TUD_AUDIO_FUNC_3_N_AS_INT]; // Software encoding/decoding support FIFOs #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING -#if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 -tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO] - [CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ]; -tu_static tu_fifo_t tx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_1 - [CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO -#endif -#endif - -#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 -tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO] - [CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ]; -tu_static tu_fifo_t tx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_2 - [CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO -#endif -#endif - -#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0 -tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO] - [CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ]; -tu_static tu_fifo_t tx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_3 - [CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO -#endif -#endif + #if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 + tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ]; + tu_static tu_fifo_t tx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO + #endif + #endif + + #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 + tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ]; + tu_static tu_fifo_t tx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO + #endif + #endif + + #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0 + tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ]; + tu_static tu_fifo_t tx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO + #endif + #endif #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING -#if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 -tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO] - [CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ]; -tu_static tu_fifo_t rx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_1 - [CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO -#endif -#endif - -#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 -tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO] - [CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ]; -tu_static tu_fifo_t rx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_2 - [CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO -#endif -#endif - -#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0 -tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO] - [CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ]; -tu_static tu_fifo_t rx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; -#if CFG_FIFO_MUTEX -tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_3 - [CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO -#endif -#endif -#endif - -typedef struct { - uint8_t rhport; - uint8_t const * - p_desc; // Pointer pointing to Standard AC Interface Descriptor(4.7.1) - Audio Control descriptor defining audio function + #if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 + tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ]; + tu_static tu_fifo_t rx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO + #endif + #endif + + #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 + tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ]; + tu_static tu_fifo_t rx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO + #endif + #endif + + #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0 + tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ]; + tu_static tu_fifo_t rx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; + #if CFG_FIFO_MUTEX + tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO + #endif + #endif +#endif + +typedef struct +{ + uint8_t rhport; + uint8_t const * p_desc; // Pointer pointing to Standard AC Interface Descriptor(4.7.1) - Audio Control descriptor defining audio function #if CFG_TUD_AUDIO_ENABLE_EP_IN - uint8_t ep_in; // TX audio data EP. - uint16_t ep_in_sz; // Current size of TX EP - uint8_t - ep_in_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to output terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero) + uint8_t ep_in; // TX audio data EP. + uint16_t ep_in_sz; // Current size of TX EP + uint8_t ep_in_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to output terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero) #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT - uint8_t ep_out; // Incoming (into uC) audio data EP. - uint16_t ep_out_sz; // Current size of RX EP - uint8_t - ep_out_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to input terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero) + uint8_t ep_out; // Incoming (into uC) audio data EP. + uint16_t ep_out_sz; // Current size of RX EP + uint8_t ep_out_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to input terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero) #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - uint8_t ep_fb; // Feedback EP. + uint8_t ep_fb; // Feedback EP. #endif #endif #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP - uint8_t ep_int; // Audio control interrupt EP. + uint8_t ep_int; // Audio control interrupt EP. #endif - bool mounted; // Device opened + bool mounted; // Device opened - uint16_t desc_length; // Length of audio function descriptor + uint16_t desc_length; // Length of audio function descriptor #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - struct { - CFG_TUSB_MEM_ALIGN uint32_t send_buf; - uint32_t value; // Feedback value for asynchronous mode (in 16.16 format). - uint32_t min_value; // min value according to UAC2 FMT-2.0 section 2.3.1.1. - uint32_t max_value; // max value according to UAC2 FMT-2.0 section 2.3.1.1. - - uint8_t frame_shift; // bInterval-1 in unit of frame (FS), micro-frame (HS) - uint8_t compute_method; - bool format_correction; - union { - uint8_t power_of_2; // pre-computed power of 2 shift - float float_const; // pre-computed float constant - - struct { - uint32_t sample_freq; - uint32_t mclk_freq; - } fixed; - - struct { - uint32_t nom_value; // In 16.16 format - uint32_t fifo_lvl_avg; // In 16.16 format - uint16_t fifo_lvl_thr; // fifo level threshold - uint16_t rate_const[2]; // pre-computed feedback/fifo_depth rate - } fifo_count; - } compute; - - } feedback; + struct { + CFG_TUSB_MEM_ALIGN uint32_t send_buf; + uint32_t value; // Feedback value for asynchronous mode (in 16.16 format). + uint32_t min_value; // min value according to UAC2 FMT-2.0 section 2.3.1.1. + uint32_t max_value; // max value according to UAC2 FMT-2.0 section 2.3.1.1. + + uint8_t frame_shift; // bInterval-1 in unit of frame (FS), micro-frame (HS) + uint8_t compute_method; + bool format_correction; + union { + uint8_t power_of_2; // pre-computed power of 2 shift + float float_const; // pre-computed float constant + + struct { + uint32_t sample_freq; + uint32_t mclk_freq; + }fixed; + + struct { + uint32_t nom_value; // In 16.16 format + uint32_t fifo_lvl_avg; // In 16.16 format + uint16_t fifo_lvl_thr; // fifo level threshold + uint16_t rate_const[2]; // pre-computed feedback/fifo_depth rate + }fifo_count; + }compute; + + } feedback; #endif // CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Decoding parameters - parameters are set when alternate AS interface is set by host - // Coding is currently only supported for EP. Software coding corresponding to AS interfaces without EPs are not supported currently. + // Decoding parameters - parameters are set when alternate AS interface is set by host + // Coding is currently only supported for EP. Software coding corresponding to AS interfaces without EPs are not supported currently. #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - audio_format_type_t format_type_rx; - uint8_t n_channels_rx; + audio_format_type_t format_type_rx; + uint8_t n_channels_rx; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - audio_data_format_type_I_t format_type_I_rx; - uint8_t n_bytes_per_sample_rx; - uint8_t n_ff_used_rx; + audio_data_format_type_I_t format_type_I_rx; + uint8_t n_bytes_per_sample_rx; + uint8_t n_ff_used_rx; #endif #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - uint32_t sample_rate_tx; - uint16_t packet_sz_tx[3]; - uint8_t bclock_id_tx; - uint8_t interval_tx; + uint32_t sample_rate_tx; + uint16_t packet_sz_tx[3]; + uint8_t bclock_id_tx; + uint8_t interval_tx; #endif - // Encoding parameters - parameters are set when alternate AS interface is set by host -#if CFG_TUD_AUDIO_ENABLE_EP_IN && \ - (CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL) - audio_format_type_t format_type_tx; - uint8_t n_channels_tx; - uint8_t n_bytes_per_sample_tx; + // Encoding parameters - parameters are set when alternate AS interface is set by host +#if CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL) + audio_format_type_t format_type_tx; + uint8_t n_channels_tx; + uint8_t n_bytes_per_sample_tx; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - audio_data_format_type_I_t format_type_I_tx; - uint8_t n_ff_used_tx; + audio_data_format_type_I_t format_type_I_tx; + uint8_t n_ff_used_tx; #endif #endif - /*------------- From this point, data is not cleared by bus reset -------------*/ + /*------------- From this point, data is not cleared by bus reset -------------*/ - // Buffer for control requests - uint8_t *ctrl_buf; - uint8_t ctrl_buf_sz; + // Buffer for control requests + uint8_t * ctrl_buf; + uint8_t ctrl_buf_sz; - // Current active alternate settings - uint8_t * - alt_setting; // We need to save the current alternate setting this way, because it is possible that there are AS interfaces which do not have an EP! + // Current active alternate settings + uint8_t * alt_setting; // We need to save the current alternate setting this way, because it is possible that there are AS interfaces which do not have an EP! - // EP Transfer buffers and FIFOs + // EP Transfer buffers and FIFOs #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - tu_fifo_t ep_out_ff; + tu_fifo_t ep_out_ff; #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING - tu_fifo_t ep_in_ff; + tu_fifo_t ep_in_ff; #endif - // Audio control interrupt buffer - no FIFO - 6 Bytes according to UAC 2 specification (p. 74) + // Audio control interrupt buffer - no FIFO - 6 Bytes according to UAC 2 specification (p. 74) #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP - CFG_TUSB_MEM_ALIGN uint8_t ep_int_buf[6]; + CFG_TUSB_MEM_ALIGN uint8_t ep_int_buf[6]; #endif - // Support FIFOs for software encoding and decoding + // Support FIFOs for software encoding and decoding #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - tu_fifo_t *rx_supp_ff; - uint8_t n_rx_supp_ff; - uint16_t rx_supp_ff_sz_max; + tu_fifo_t * rx_supp_ff; + uint8_t n_rx_supp_ff; + uint16_t rx_supp_ff_sz_max; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - uint8_t n_channels_per_ff_rx; + uint8_t n_channels_per_ff_rx; #endif #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - tu_fifo_t *tx_supp_ff; - uint8_t n_tx_supp_ff; - uint16_t tx_supp_ff_sz_max; + tu_fifo_t * tx_supp_ff; + uint8_t n_tx_supp_ff; + uint16_t tx_supp_ff_sz_max; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - uint8_t n_channels_per_ff_tx; + uint8_t n_channels_per_ff_tx; #endif #endif - // Linear buffer in case target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR the support FIFOs are used + // Linear buffer in case target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR the support FIFOs are used #if CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING) - uint8_t *lin_buf_out; -#define USE_LINEAR_BUFFER_RX 1 + uint8_t * lin_buf_out; +#define USE_LINEAR_BUFFER_RX 1 #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_ENCODING) - uint8_t *lin_buf_in; -#define USE_LINEAR_BUFFER_TX 1 + uint8_t * lin_buf_in; +#define USE_LINEAR_BUFFER_TX 1 #endif } audiod_function_t; #ifndef USE_LINEAR_BUFFER_TX -#define USE_LINEAR_BUFFER_TX 0 +#define USE_LINEAR_BUFFER_TX 0 #endif #ifndef USE_LINEAR_BUFFER_RX -#define USE_LINEAR_BUFFER_RX 0 +#define USE_LINEAR_BUFFER_RX 0 #endif -#define ITF_MEM_RESET_SIZE offsetof(audiod_function_t, ctrl_buf) +#define ITF_MEM_RESET_SIZE offsetof(audiod_function_t, ctrl_buf) //--------------------------------------------------------------------+ // WEAK FUNCTION STUBS //--------------------------------------------------------------------+ #if CFG_TUD_AUDIO_ENABLE_EP_IN -TU_ATTR_WEAK bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t func_id, uint8_t ep_in, - uint8_t cur_alt_setting) -{ - (void)rhport; - (void)func_id; - (void)ep_in; - (void)cur_alt_setting; - return true; +TU_ATTR_WEAK bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t func_id, uint8_t ep_in, uint8_t cur_alt_setting) { + (void) rhport; + (void) func_id; + (void) ep_in; + (void) cur_alt_setting; + return true; } -TU_ATTR_WEAK bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, - uint8_t func_id, uint8_t ep_in, - uint8_t cur_alt_setting) -{ - (void)rhport; - (void)n_bytes_copied; - (void)func_id; - (void)ep_in; - (void)cur_alt_setting; - return true; +TU_ATTR_WEAK bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t func_id, uint8_t ep_in, uint8_t cur_alt_setting) { + (void) rhport; + (void) n_bytes_copied; + (void) func_id; + (void) ep_in; + (void) cur_alt_setting; + return true; } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT -TU_ATTR_WEAK bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, - uint8_t func_id, uint8_t ep_out, - uint8_t cur_alt_setting) -{ - (void)rhport; - (void)n_bytes_received; - (void)func_id; - (void)ep_out; - (void)cur_alt_setting; - return true; +TU_ATTR_WEAK bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) { + (void) rhport; + (void) n_bytes_received; + (void) func_id; + (void) ep_out; + (void) cur_alt_setting; + return true; } -TU_ATTR_WEAK bool tud_audio_rx_done_post_read_cb(uint8_t rhport, uint16_t n_bytes_received, - uint8_t func_id, uint8_t ep_out, - uint8_t cur_alt_setting) -{ - (void)rhport; - (void)n_bytes_received; - (void)func_id; - (void)ep_out; - (void)cur_alt_setting; - return true; +TU_ATTR_WEAK bool tud_audio_rx_done_post_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) { + (void) rhport; + (void) n_bytes_received; + (void) func_id; + (void) ep_out; + (void) cur_alt_setting; + return true; } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -TU_ATTR_WEAK void tud_audio_fb_done_cb(uint8_t func_id) -{ - (void)func_id; +TU_ATTR_WEAK void tud_audio_fb_done_cb(uint8_t func_id) { + (void) func_id; } -TU_ATTR_WEAK void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, - audio_feedback_params_t *feedback_param) -{ - (void)func_id; - (void)alt_itf; - feedback_param->method = AUDIO_FEEDBACK_METHOD_DISABLED; +TU_ATTR_WEAK void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, audio_feedback_params_t* feedback_param) { + (void) func_id; + (void) alt_itf; + feedback_param->method = AUDIO_FEEDBACK_METHOD_DISABLED; } -TU_ATTR_WEAK bool tud_audio_feedback_format_correction_cb(uint8_t func_id) -{ - (void)func_id; - return CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION; +TU_ATTR_WEAK bool tud_audio_feedback_format_correction_cb(uint8_t func_id) { + (void) func_id; + return CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION; } #endif -TU_ATTR_WEAK TU_ATTR_FAST_FUNC void -tud_audio_feedback_interval_isr(uint8_t func_id, uint32_t frame_number, uint8_t interval_shift) -{ - (void)func_id; - (void)frame_number; - (void)interval_shift; +TU_ATTR_WEAK TU_ATTR_FAST_FUNC void tud_audio_feedback_interval_isr(uint8_t func_id, uint32_t frame_number, uint8_t interval_shift) { + (void) func_id; + (void) frame_number; + (void) interval_shift; } #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -TU_ATTR_WEAK void tud_audio_int_done_cb(uint8_t rhport) -{ - (void)rhport; +TU_ATTR_WEAK void tud_audio_int_done_cb(uint8_t rhport) { + (void) rhport; } #endif // Invoked when audio set interface request received -TU_ATTR_WEAK bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) -{ - (void)rhport; - (void)p_request; - return true; +TU_ATTR_WEAK bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { + (void) rhport; + (void) p_request; + return true; } // Invoked when audio set interface request received which closes an EP -TU_ATTR_WEAK bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, - tusb_control_request_t const *p_request) -{ - (void)rhport; - (void)p_request; - return true; +TU_ATTR_WEAK bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) { + (void) rhport; + (void) p_request; + return true; } // Invoked when audio class specific set request received for an EP -TU_ATTR_WEAK bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) -{ - (void)rhport; - (void)p_request; - (void)pBuff; - TU_LOG2(" No EP set request callback available!\r\n"); - return false; // In case no callback function is present or request can not be conducted we stall it +TU_ATTR_WEAK bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { + (void) rhport; + (void) p_request; + (void) pBuff; + TU_LOG2(" No EP set request callback available!\r\n"); + return false; // In case no callback function is present or request can not be conducted we stall it } // Invoked when audio class specific set request received for an interface -TU_ATTR_WEAK bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff) -{ - (void)rhport; - (void)p_request; - (void)pBuff; - TU_LOG2(" No interface set request callback available!\r\n"); - return false; // In case no callback function is present or request can not be conducted we stall it +TU_ATTR_WEAK bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { + (void) rhport; + (void) p_request; + (void) pBuff; + TU_LOG2(" No interface set request callback available!\r\n"); + return false; // In case no callback function is present or request can not be conducted we stall it } // Invoked when audio class specific set request received for an entity -TU_ATTR_WEAK bool -tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *pBuff) -{ - (void)rhport; - (void)p_request; - (void)pBuff; - TU_LOG2(" No entity set request callback available!\r\n"); - return false; // In case no callback function is present or request can not be conducted we stall it +TU_ATTR_WEAK bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) { + (void) rhport; + (void) p_request; + (void) pBuff; + TU_LOG2(" No entity set request callback available!\r\n"); + return false; // In case no callback function is present or request can not be conducted we stall it } // Invoked when audio class specific get request received for an EP -TU_ATTR_WEAK bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) -{ - (void)rhport; - (void)p_request; - TU_LOG2(" No EP get request callback available!\r\n"); - return false; // Stall +TU_ATTR_WEAK bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) { + (void) rhport; + (void) p_request; + TU_LOG2(" No EP get request callback available!\r\n"); + return false; // Stall } // Invoked when audio class specific get request received for an interface -TU_ATTR_WEAK bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) -{ - (void)rhport; - (void)p_request; - TU_LOG2(" No interface get request callback available!\r\n"); - return false; // Stall +TU_ATTR_WEAK bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) { + (void) rhport; + (void) p_request; + TU_LOG2(" No interface get request callback available!\r\n"); + return false; // Stall } // Invoked when audio class specific get request received for an entity -TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, - tusb_control_request_t const *p_request) -{ - (void)rhport; - (void)p_request; - TU_LOG2(" No entity get request callback available!\r\n"); - return false; // Stall +TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) { + (void) rhport; + (void) p_request; + TU_LOG2(" No entity get request callback available!\r\n"); + return false; // Stall } //--------------------------------------------------------------------+ @@ -639,64 +575,56 @@ TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, tu_static CFG_TUD_MEM_SECTION audiod_function_t _audiod_fct[CFG_TUD_AUDIO]; #if CFG_TUD_AUDIO_ENABLE_EP_OUT -static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t *audio, uint16_t n_bytes_received); +static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received); #endif #if CFG_TUD_AUDIO_ENABLE_DECODING && CFG_TUD_AUDIO_ENABLE_EP_OUT -static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t *audio, - uint16_t n_bytes_received); +static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN -static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t *audio); +static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t* audio); #endif #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN -static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t *audio); +static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audio); #endif -static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const *p_request); -static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *p_request); +static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const * p_request); +static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * p_request); -static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, - uint8_t const **pp_desc_int); -static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t *audio, uint8_t *idxItf, - uint8_t const **pp_desc_int); +static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, uint8_t const **pp_desc_int); +static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t * audio, uint8_t *idxItf, uint8_t const **pp_desc_int); static bool audiod_verify_entity_exists(uint8_t itf, uint8_t entityID, uint8_t *func_id); static bool audiod_verify_itf_exists(uint8_t itf, uint8_t *func_id); static bool audiod_verify_ep_exists(uint8_t ep, uint8_t *func_id); -static uint8_t audiod_get_audio_fct_idx(audiod_function_t *audio); +static uint8_t audiod_get_audio_fct_idx(audiod_function_t * audio); -#if (CFG_TUD_AUDIO_ENABLE_EP_IN && \ - (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || \ - (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) -static void audiod_parse_for_AS_params(audiod_function_t *audio, uint8_t const *p_desc, - uint8_t const *p_desc_end, uint8_t const as_itf); +#if (CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) +static void audiod_parse_for_AS_params(audiod_function_t* audio, uint8_t const * p_desc, uint8_t const * p_desc_end, uint8_t const as_itf); -static inline uint8_t tu_desc_subtype(void const *desc) +static inline uint8_t tu_desc_subtype(void const* desc) { - return ((uint8_t const *)desc)[2]; + return ((uint8_t const*) desc)[2]; } #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL -static bool audiod_calc_tx_packet_sz(audiod_function_t *audio); -static uint16_t audiod_tx_packet_size(const uint16_t *norminal_size, uint16_t data_count, - uint16_t fifo_depth, uint16_t max_size); +static bool audiod_calc_tx_packet_sz(audiod_function_t* audio); +static uint16_t audiod_tx_packet_size(const uint16_t* norminal_size, uint16_t data_count, uint16_t fifo_depth, uint16_t max_size); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -static bool audiod_set_fb_params_freq(audiod_function_t *audio, uint32_t sample_freq, - uint32_t mclk_freq); -static void audiod_fb_fifo_count_update(audiod_function_t *audio, uint16_t lvl_new); +static bool audiod_set_fb_params_freq(audiod_function_t* audio, uint32_t sample_freq, uint32_t mclk_freq); +static void audiod_fb_fifo_count_update(audiod_function_t* audio, uint16_t lvl_new); #endif bool tud_audio_n_mounted(uint8_t func_id) { - TU_VERIFY(func_id < CFG_TUD_AUDIO); - audiod_function_t *audio = &_audiod_fct[func_id]; + TU_VERIFY(func_id < CFG_TUD_AUDIO); + audiod_function_t* audio = &_audiod_fct[func_id]; - return audio->mounted; + return audio->mounted; } //--------------------------------------------------------------------+ @@ -707,27 +635,26 @@ bool tud_audio_n_mounted(uint8_t func_id) uint16_t tud_audio_n_available(uint8_t func_id) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_count(&_audiod_fct[func_id].ep_out_ff); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_count(&_audiod_fct[func_id].ep_out_ff); } -uint16_t tud_audio_n_read(uint8_t func_id, void *buffer, uint16_t bufsize) +uint16_t tud_audio_n_read(uint8_t func_id, void* buffer, uint16_t bufsize) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_read_n(&_audiod_fct[func_id].ep_out_ff, buffer, bufsize); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_read_n(&_audiod_fct[func_id].ep_out_ff, buffer, bufsize); } bool tud_audio_n_clear_ep_out_ff(uint8_t func_id) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_clear(&_audiod_fct[func_id].ep_out_ff); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_clear(&_audiod_fct[func_id].ep_out_ff); } -tu_fifo_t *tud_audio_n_get_ep_out_ff(uint8_t func_id) +tu_fifo_t* tud_audio_n_get_ep_out_ff(uint8_t func_id) { - if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) - return &_audiod_fct[func_id].ep_out_ff; - return NULL; + if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) return &_audiod_fct[func_id].ep_out_ff; + return NULL; } #endif @@ -736,32 +663,26 @@ tu_fifo_t *tud_audio_n_get_ep_out_ff(uint8_t func_id) // Delete all content in the support RX FIFOs bool tud_audio_n_clear_rx_support_ff(uint8_t func_id, uint8_t ff_idx) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && - ff_idx < _audiod_fct[func_id].n_rx_supp_ff); - return tu_fifo_clear(&_audiod_fct[func_id].rx_supp_ff[ff_idx]); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff); + return tu_fifo_clear(&_audiod_fct[func_id].rx_supp_ff[ff_idx]); } uint16_t tud_audio_n_available_support_ff(uint8_t func_id, uint8_t ff_idx) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && - ff_idx < _audiod_fct[func_id].n_rx_supp_ff); - return tu_fifo_count(&_audiod_fct[func_id].rx_supp_ff[ff_idx]); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff); + return tu_fifo_count(&_audiod_fct[func_id].rx_supp_ff[ff_idx]); } -uint16_t tud_audio_n_read_support_ff(uint8_t func_id, uint8_t ff_idx, void *buffer, - uint16_t bufsize) +uint16_t tud_audio_n_read_support_ff(uint8_t func_id, uint8_t ff_idx, void* buffer, uint16_t bufsize) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && - ff_idx < _audiod_fct[func_id].n_rx_supp_ff); - return tu_fifo_read_n(&_audiod_fct[func_id].rx_supp_ff[ff_idx], buffer, bufsize); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff); + return tu_fifo_read_n(&_audiod_fct[func_id].rx_supp_ff[ff_idx], buffer, bufsize); } -tu_fifo_t *tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx) +tu_fifo_t* tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx) { - if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && - ff_idx < _audiod_fct[func_id].n_rx_supp_ff) - return &_audiod_fct[func_id].rx_supp_ff[ff_idx]; - return NULL; + if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff) return &_audiod_fct[func_id].rx_supp_ff[ff_idx]; + return NULL; } #endif @@ -770,80 +691,80 @@ tu_fifo_t *tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx) #if CFG_TUD_AUDIO_ENABLE_EP_OUT -static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t *audio, uint16_t n_bytes_received) +static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received) { - uint8_t idxItf = 0; - uint8_t const *dummy2; - uint8_t idx_audio_fct = 0; + uint8_t idxItf = 0; + uint8_t const *dummy2; + uint8_t idx_audio_fct = 0; - idx_audio_fct = audiod_get_audio_fct_idx(audio); - TU_VERIFY(audiod_get_AS_interface_index(audio->ep_out_as_intf_num, audio, &idxItf, &dummy2)); + idx_audio_fct = audiod_get_audio_fct_idx(audio); + TU_VERIFY(audiod_get_AS_interface_index(audio->ep_out_as_intf_num, audio, &idxItf, &dummy2)); - // Call a weak callback here - a possibility for user to get informed an audio packet was received and data gets now loaded into EP FIFO (or decoded into support RX software FIFO) - TU_VERIFY(tud_audio_rx_done_pre_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, - audio->alt_setting[idxItf])); + // Call a weak callback here - a possibility for user to get informed an audio packet was received and data gets now loaded into EP FIFO (or decoded into support RX software FIFO) + TU_VERIFY(tud_audio_rx_done_pre_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, audio->alt_setting[idxItf])); #if CFG_TUD_AUDIO_ENABLE_DECODING - switch (audio->format_type_rx) { + switch (audio->format_type_rx) + { case AUDIO_FORMAT_TYPE_UNDEFINED: - // INDIVIDUAL DECODING PROCEDURE REQUIRED HERE! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n"); - TU_BREAKPOINT(); - break; + // INDIVIDUAL DECODING PROCEDURE REQUIRED HERE! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n"); + TU_BREAKPOINT(); + break; case AUDIO_FORMAT_TYPE_I: - switch (audio->format_type_I_rx) { + switch (audio->format_type_I_rx) + { case AUDIO_DATA_FORMAT_TYPE_I_PCM: - TU_VERIFY(audiod_decode_type_I_pcm(rhport, audio, n_bytes_received)); - break; + TU_VERIFY(audiod_decode_type_I_pcm(rhport, audio, n_bytes_received)); + break; default: - // DESIRED CFG_TUD_AUDIO_FORMAT_TYPE_I_RX NOT IMPLEMENTED! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_I_RX encoding not implemented!\r\n"); - TU_BREAKPOINT(); - break; - } - break; + // DESIRED CFG_TUD_AUDIO_FORMAT_TYPE_I_RX NOT IMPLEMENTED! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_I_RX encoding not implemented!\r\n"); + TU_BREAKPOINT(); + break; + } + break; - default: - // Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented!\r\n"); - TU_BREAKPOINT(); - break; - } + default: + // Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented!\r\n"); + TU_BREAKPOINT(); + break; + } - // Prepare for next transmission - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); + // Prepare for next transmission + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); #else #if USE_LINEAR_BUFFER_RX - // Data currently is in linear buffer, copy into EP OUT FIFO - TU_VERIFY(tu_fifo_write_n(&audio->ep_out_ff, audio->lin_buf_out, n_bytes_received)); + // Data currently is in linear buffer, copy into EP OUT FIFO + TU_VERIFY(tu_fifo_write_n(&audio->ep_out_ff, audio->lin_buf_out, n_bytes_received)); - // Schedule for next receive - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); + // Schedule for next receive + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); #else - // Data is already placed in EP FIFO, schedule for next receive - TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, audio->ep_out_sz), - false); + // Data is already placed in EP FIFO, schedule for next receive + TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, audio->ep_out_sz), false); #endif #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) { - audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->ep_out_ff)); - } + if(audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) + { + audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->ep_out_ff)); + } #endif #endif - // Call a weak callback here - a possibility for user to get informed decoding was completed - TU_VERIFY(tud_audio_rx_done_post_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, - audio->alt_setting[idxItf])); + // Call a weak callback here - a possibility for user to get informed decoding was completed + TU_VERIFY(tud_audio_rx_done_post_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, audio->alt_setting[idxItf])); - return true; + return true; } #endif //CFG_TUD_AUDIO_ENABLE_EP_OUT @@ -854,97 +775,105 @@ static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t *audio, uint16_t // Decoding according to 2.3.1.5 Audio Streams // Helper function -static inline void *audiod_interleaved_copy_bytes_fast_decode(uint16_t const nBytesPerSample, - void *dst, const void *dst_end, - void *src, uint8_t const n_ff_used) -{ - // Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2) - uint16_t *dst16 = dst; - uint16_t *src16 = src; - const uint16_t *dst_end16 = dst_end; - uint32_t *dst32 = dst; - uint32_t *src32 = src; - const uint32_t *dst_end32 = dst_end; - - if (nBytesPerSample == 1) { - while (dst16 < dst_end16) { - *dst16++ = *src16++; - src16 += n_ff_used - 1; - } - return src16; - } else if (nBytesPerSample == 2) { - while (dst32 < dst_end32) { - *dst32++ = *src32++; - src32 += n_ff_used - 1; - } - return src32; - } else if (nBytesPerSample == 3) { - while (dst16 < dst_end16) { - *dst16++ = *src16++; - *dst16++ = *src16++; - *dst16++ = *src16++; - src16 += 3 * (n_ff_used - 1); - } - return src16; - } else // nBytesPerSample == 4 +static inline void * audiod_interleaved_copy_bytes_fast_decode(uint16_t const nBytesPerSample, void * dst, const void * dst_end, void * src, uint8_t const n_ff_used) +{ + // Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2) + uint16_t * dst16 = dst; + uint16_t * src16 = src; + const uint16_t * dst_end16 = dst_end; + uint32_t * dst32 = dst; + uint32_t * src32 = src; + const uint32_t * dst_end32 = dst_end; + + if (nBytesPerSample == 1) + { + while(dst16 < dst_end16) { - while (dst32 < dst_end32) { - *dst32++ = *src32++; - *dst32++ = *src32++; - src32 += 2 * (n_ff_used - 1); - } - return src32; + *dst16++ = *src16++; + src16 += n_ff_used - 1; } + return src16; + } + else if (nBytesPerSample == 2) + { + while(dst32 < dst_end32) + { + *dst32++ = *src32++; + src32 += n_ff_used - 1; + } + return src32; + } + else if (nBytesPerSample == 3) + { + while(dst16 < dst_end16) + { + *dst16++ = *src16++; + *dst16++ = *src16++; + *dst16++ = *src16++; + src16 += 3 * (n_ff_used - 1); + } + return src16; + } + else // nBytesPerSample == 4 + { + while(dst32 < dst_end32) + { + *dst32++ = *src32++; + *dst32++ = *src32++; + src32 += 2 * (n_ff_used - 1); + } + return src32; + } } -static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t *audio, - uint16_t n_bytes_received) +static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received) { - (void)rhport; - - // Determine amount of samples - uint8_t const n_ff_used = audio->n_ff_used_rx; - uint16_t const nBytesPerFFToRead = n_bytes_received / n_ff_used; - uint8_t cnt_ff; - - // Decode - uint8_t *src; - uint8_t *dst_end; - - tu_fifo_buffer_info_t info; - - for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) { - tu_fifo_get_write_info(&audio->rx_supp_ff[cnt_ff], &info); - - if (info.len_lin != 0) { - info.len_lin = tu_min16(nBytesPerFFToRead, info.len_lin); - src = &audio->lin_buf_out[cnt_ff * audio->n_channels_per_ff_rx * - audio->n_bytes_per_sample_rx]; - dst_end = info.ptr_lin + info.len_lin; - src = audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, - info.ptr_lin, dst_end, src, n_ff_used); - - // Handle wrapped part of FIFO - info.len_wrap = tu_min16(nBytesPerFFToRead - info.len_lin, info.len_wrap); - if (info.len_wrap != 0) { - dst_end = info.ptr_wrap + info.len_wrap; - audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, - info.ptr_wrap, dst_end, src, n_ff_used); - } - tu_fifo_advance_write_pointer(&audio->rx_supp_ff[cnt_ff], info.len_lin + info.len_wrap); - } + (void) rhport; + + // Determine amount of samples + uint8_t const n_ff_used = audio->n_ff_used_rx; + uint16_t const nBytesPerFFToRead = n_bytes_received / n_ff_used; + uint8_t cnt_ff; + + // Decode + uint8_t * src; + uint8_t * dst_end; + + tu_fifo_buffer_info_t info; + + for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) + { + tu_fifo_get_write_info(&audio->rx_supp_ff[cnt_ff], &info); + + if (info.len_lin != 0) + { + info.len_lin = tu_min16(nBytesPerFFToRead, info.len_lin); + src = &audio->lin_buf_out[cnt_ff*audio->n_channels_per_ff_rx * audio->n_bytes_per_sample_rx]; + dst_end = info.ptr_lin + info.len_lin; + src = audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, info.ptr_lin, dst_end, src, n_ff_used); + + // Handle wrapped part of FIFO + info.len_wrap = tu_min16(nBytesPerFFToRead - info.len_lin, info.len_wrap); + if (info.len_wrap != 0) + { + dst_end = info.ptr_wrap + info.len_wrap; + audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, info.ptr_wrap, dst_end, src, n_ff_used); + } + tu_fifo_advance_write_pointer(&audio->rx_supp_ff[cnt_ff], info.len_lin + info.len_wrap); } + } - // Number of bytes should be a multiple of CFG_TUD_AUDIO_N_BYTES_PER_SAMPLE_RX * CFG_TUD_AUDIO_N_CHANNELS_RX but checking makes no sense - no way to correct it - // TU_VERIFY(cnt != n_bytes); + // Number of bytes should be a multiple of CFG_TUD_AUDIO_N_BYTES_PER_SAMPLE_RX * CFG_TUD_AUDIO_N_CHANNELS_RX but checking makes no sense - no way to correct it + // TU_VERIFY(cnt != n_bytes); #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) { - audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->rx_supp_ff[0])); - } + if(audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) + { + audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->rx_supp_ff[0])); + } #endif - return true; + return true; } #endif //CFG_TUD_AUDIO_ENABLE_DECODING @@ -965,96 +894,87 @@ static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t *audio, * \param[in] len: # of array elements to copy * \return Number of bytes actually written */ -uint16_t tud_audio_n_write(uint8_t func_id, const void *data, uint16_t len) +uint16_t tud_audio_n_write(uint8_t func_id, const void * data, uint16_t len) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_write_n(&_audiod_fct[func_id].ep_in_ff, data, len); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_write_n(&_audiod_fct[func_id].ep_in_ff, data, len); } -bool tud_audio_n_clear_ep_in_ff(uint8_t func_id) // Delete all content in the EP IN FIFO +bool tud_audio_n_clear_ep_in_ff(uint8_t func_id) // Delete all content in the EP IN FIFO { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return tu_fifo_clear(&_audiod_fct[func_id].ep_in_ff); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + return tu_fifo_clear(&_audiod_fct[func_id].ep_in_ff); } -tu_fifo_t *tud_audio_n_get_ep_in_ff(uint8_t func_id) +tu_fifo_t* tud_audio_n_get_ep_in_ff(uint8_t func_id) { - if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) - return &_audiod_fct[func_id].ep_in_ff; - return NULL; + if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) return &_audiod_fct[func_id].ep_in_ff; + return NULL; } #endif #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN -uint16_t tud_audio_n_flush_tx_support_ff( - uint8_t - func_id) // Force all content in the support TX FIFOs to be written into linear buffer and schedule a transmit +uint16_t tud_audio_n_flush_tx_support_ff(uint8_t func_id) // Force all content in the support TX FIFOs to be written into linear buffer and schedule a transmit { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - audiod_function_t *audio = &_audiod_fct[func_id]; + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + audiod_function_t* audio = &_audiod_fct[func_id]; - uint16_t n_bytes_copied = tu_fifo_count(&audio->tx_supp_ff[0]); + uint16_t n_bytes_copied = tu_fifo_count(&audio->tx_supp_ff[0]); - TU_VERIFY(audiod_tx_done_cb(audio->rhport, audio)); + TU_VERIFY(audiod_tx_done_cb(audio->rhport, audio)); - n_bytes_copied -= tu_fifo_count(&audio->tx_supp_ff[0]); - n_bytes_copied = n_bytes_copied * audio->tx_supp_ff[0].item_size; + n_bytes_copied -= tu_fifo_count(&audio->tx_supp_ff[0]); + n_bytes_copied = n_bytes_copied*audio->tx_supp_ff[0].item_size; - return n_bytes_copied; + return n_bytes_copied; } bool tud_audio_n_clear_tx_support_ff(uint8_t func_id, uint8_t ff_idx) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && - ff_idx < _audiod_fct[func_id].n_tx_supp_ff); - return tu_fifo_clear(&_audiod_fct[func_id].tx_supp_ff[ff_idx]); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff); + return tu_fifo_clear(&_audiod_fct[func_id].tx_supp_ff[ff_idx]); } -uint16_t tud_audio_n_write_support_ff(uint8_t func_id, uint8_t ff_idx, const void *data, - uint16_t len) +uint16_t tud_audio_n_write_support_ff(uint8_t func_id, uint8_t ff_idx, const void * data, uint16_t len) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && - ff_idx < _audiod_fct[func_id].n_tx_supp_ff); - return tu_fifo_write_n(&_audiod_fct[func_id].tx_supp_ff[ff_idx], data, len); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff); + return tu_fifo_write_n(&_audiod_fct[func_id].tx_supp_ff[ff_idx], data, len); } -tu_fifo_t *tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx) +tu_fifo_t* tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx) { - if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && - ff_idx < _audiod_fct[func_id].n_tx_supp_ff) - return &_audiod_fct[func_id].tx_supp_ff[ff_idx]; - return NULL; + if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff) return &_audiod_fct[func_id].tx_supp_ff[ff_idx]; + return NULL; } #endif + #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP // If no interrupt transmit is pending bytes get written into buffer and a transmit is scheduled - once transmit completed tud_audio_int_done_cb() is called in inform user -bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t *data) +bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t * data) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - - TU_VERIFY(_audiod_fct[func_id].ep_int != 0); - - // We write directly into the EP's buffer - abort if previous transfer not complete - TU_VERIFY(usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int)); - - // Check length - if (tu_memcpy_s(_audiod_fct[func_id].ep_int_buf, sizeof(_audiod_fct[func_id].ep_int_buf), data, - sizeof(audio_interrupt_data_t)) == 0) { - // Schedule transmit - TU_ASSERT(usbd_edpt_xfer(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int, - _audiod_fct[func_id].ep_int_buf, - sizeof(_audiod_fct[func_id].ep_int_buf)), - 0); - } else { - // Release endpoint since we don't make any transfer - usbd_edpt_release(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int); - } + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - return true; + TU_VERIFY(_audiod_fct[func_id].ep_int != 0); + + // We write directly into the EP's buffer - abort if previous transfer not complete + TU_VERIFY(usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int)); + + // Check length + if (tu_memcpy_s(_audiod_fct[func_id].ep_int_buf, sizeof(_audiod_fct[func_id].ep_int_buf), data, sizeof(audio_interrupt_data_t)) == 0) + { + // Schedule transmit + TU_ASSERT(usbd_edpt_xfer(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int, _audiod_fct[func_id].ep_int_buf, sizeof(_audiod_fct[func_id].ep_int_buf)), 0); + } else + { + // Release endpoint since we don't make any transfer + usbd_edpt_release(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int); + } + + return true; } #endif @@ -1063,89 +983,85 @@ bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t *data) // n_bytes_copied - Informs caller how many bytes were loaded. In case n_bytes_copied = 0, a ZLP is scheduled to inform host no data is available for current frame. #if CFG_TUD_AUDIO_ENABLE_EP_IN -static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t *audio) +static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t * audio) { - uint8_t idxItf; - uint8_t const *dummy2; + uint8_t idxItf; + uint8_t const *dummy2; - uint8_t idx_audio_fct = audiod_get_audio_fct_idx(audio); - TU_VERIFY(audiod_get_AS_interface_index(audio->ep_in_as_intf_num, audio, &idxItf, &dummy2)); + uint8_t idx_audio_fct = audiod_get_audio_fct_idx(audio); + TU_VERIFY(audiod_get_AS_interface_index(audio->ep_in_as_intf_num, audio, &idxItf, &dummy2)); - // Only send something if current alternate interface is not 0 as in this case nothing is to be sent due to UAC2 specifications - if (audio->alt_setting[idxItf] == 0) - return false; + // Only send something if current alternate interface is not 0 as in this case nothing is to be sent due to UAC2 specifications + if (audio->alt_setting[idxItf] == 0) return false; - // Call a weak callback here - a possibility for user to get informed former TX was completed and data gets now loaded into EP in buffer (in case FIFOs are used) or - // if no FIFOs are used the user may use this call back to load its data into the EP IN buffer by use of tud_audio_n_write_ep_in_buffer(). - TU_VERIFY(tud_audio_tx_done_pre_load_cb(rhport, idx_audio_fct, audio->ep_in, - audio->alt_setting[idxItf])); + // Call a weak callback here - a possibility for user to get informed former TX was completed and data gets now loaded into EP in buffer (in case FIFOs are used) or + // if no FIFOs are used the user may use this call back to load its data into the EP IN buffer by use of tud_audio_n_write_ep_in_buffer(). + TU_VERIFY(tud_audio_tx_done_pre_load_cb(rhport, idx_audio_fct, audio->ep_in, audio->alt_setting[idxItf])); - // Send everything in ISO EP FIFO - uint16_t n_bytes_tx; + // Send everything in ISO EP FIFO + uint16_t n_bytes_tx; - // If support FIFOs are used, encode and schedule transmit + // If support FIFOs are used, encode and schedule transmit #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN - switch (audio->format_type_tx) { + switch (audio->format_type_tx) + { case AUDIO_FORMAT_TYPE_UNDEFINED: - // INDIVIDUAL ENCODING PROCEDURE REQUIRED HERE! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n"); - TU_BREAKPOINT(); - n_bytes_tx = 0; - break; + // INDIVIDUAL ENCODING PROCEDURE REQUIRED HERE! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n"); + TU_BREAKPOINT(); + n_bytes_tx = 0; + break; case AUDIO_FORMAT_TYPE_I: - switch (audio->format_type_I_tx) { + switch (audio->format_type_I_tx) + { case AUDIO_DATA_FORMAT_TYPE_I_PCM: - n_bytes_tx = audiod_encode_type_I_pcm(rhport, audio); - break; + n_bytes_tx = audiod_encode_type_I_pcm(rhport, audio); + break; default: - // YOUR ENCODING IS REQUIRED HERE! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_I_TX encoding not implemented!\r\n"); - TU_BREAKPOINT(); - n_bytes_tx = 0; - break; - } - break; + // YOUR ENCODING IS REQUIRED HERE! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_I_TX encoding not implemented!\r\n"); + TU_BREAKPOINT(); + n_bytes_tx = 0; + break; + } + break; - default: - // Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented! - TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented!\r\n"); - TU_BREAKPOINT(); - n_bytes_tx = 0; - break; - } + default: + // Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented! + TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented!\r\n"); + TU_BREAKPOINT(); + n_bytes_tx = 0; + break; + } - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx)); + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx)); #else - // No support FIFOs, if no linear buffer required schedule transmit, else put data into linear buffer and schedule + // No support FIFOs, if no linear buffer required schedule transmit, else put data into linear buffer and schedule #if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - // packet_sz_tx is based on total packet size, here we want size for each support buffer. - n_bytes_tx = audiod_tx_packet_size(audio->packet_sz_tx, tu_fifo_count(&audio->ep_in_ff), - audio->ep_in_ff.depth, audio->ep_in_sz); + // packet_sz_tx is based on total packet size, here we want size for each support buffer. + n_bytes_tx = audiod_tx_packet_size(audio->packet_sz_tx, tu_fifo_count(&audio->ep_in_ff), audio->ep_in_ff.depth, audio->ep_in_sz); #else - n_bytes_tx = - tu_min16(tu_fifo_count(&audio->ep_in_ff), - audio->ep_in_sz); // Limit up to max packet size, more can not be done for ISO + n_bytes_tx = tu_min16(tu_fifo_count(&audio->ep_in_ff), audio->ep_in_sz); // Limit up to max packet size, more can not be done for ISO #endif #if USE_LINEAR_BUFFER_TX - tu_fifo_read_n(&audio->ep_in_ff, audio->lin_buf_in, n_bytes_tx); - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx)); + tu_fifo_read_n(&audio->ep_in_ff, audio->lin_buf_in, n_bytes_tx); + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx)); #else - // Send everything in ISO EP FIFO - TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_in, &audio->ep_in_ff, n_bytes_tx)); + // Send everything in ISO EP FIFO + TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_in, &audio->ep_in_ff, n_bytes_tx)); #endif #endif - // Call a weak callback here - a possibility for user to get informed former TX was completed and how many bytes were loaded for the next frame - TU_VERIFY(tud_audio_tx_done_post_load_cb(rhport, n_bytes_tx, idx_audio_fct, audio->ep_in, - audio->alt_setting[idxItf])); + // Call a weak callback here - a possibility for user to get informed former TX was completed and how many bytes were loaded for the next frame + TU_VERIFY(tud_audio_tx_done_post_load_cb(rhport, n_bytes_tx, idx_audio_fct, audio->ep_in, audio->alt_setting[idxItf])); - return true; + return true; } #endif //CFG_TUD_AUDIO_ENABLE_EP_IN @@ -1169,124 +1085,130 @@ range [-1, +1) * */ // Helper function -static inline void *audiod_interleaved_copy_bytes_fast_encode(uint16_t const nBytesPerSample, - void *src, const void *src_end, - void *dst, uint8_t const n_ff_used) -{ - // Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2) - uint16_t *dst16 = dst; - uint16_t *src16 = src; - const uint16_t *src_end16 = src_end; - uint32_t *dst32 = dst; - uint32_t *src32 = src; - const uint32_t *src_end32 = src_end; - - if (nBytesPerSample == 1) { - while (src16 < src_end16) { - *dst16++ = *src16++; - dst16 += n_ff_used - 1; - } - return dst16; - } else if (nBytesPerSample == 2) { - while (src32 < src_end32) { - *dst32++ = *src32++; - dst32 += n_ff_used - 1; - } - return dst32; - } else if (nBytesPerSample == 3) { - while (src16 < src_end16) { - *dst16++ = *src16++; - *dst16++ = *src16++; - *dst16++ = *src16++; - dst16 += 3 * (n_ff_used - 1); - } - return dst16; - } else // nBytesPerSample == 4 +static inline void * audiod_interleaved_copy_bytes_fast_encode(uint16_t const nBytesPerSample, void * src, const void * src_end, void * dst, uint8_t const n_ff_used) +{ + // Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2) + uint16_t * dst16 = dst; + uint16_t * src16 = src; + const uint16_t * src_end16 = src_end; + uint32_t * dst32 = dst; + uint32_t * src32 = src; + const uint32_t * src_end32 = src_end; + + if (nBytesPerSample == 1) + { + while(src16 < src_end16) { - while (src32 < src_end32) { - *dst32++ = *src32++; - *dst32++ = *src32++; - dst32 += 2 * (n_ff_used - 1); - } - return dst32; + *dst16++ = *src16++; + dst16 += n_ff_used - 1; + } + return dst16; + } + else if (nBytesPerSample == 2) + { + while(src32 < src_end32) + { + *dst32++ = *src32++; + dst32 += n_ff_used - 1; + } + return dst32; + } + else if (nBytesPerSample == 3) + { + while(src16 < src_end16) + { + *dst16++ = *src16++; + *dst16++ = *src16++; + *dst16++ = *src16++; + dst16 += 3 * (n_ff_used - 1); + } + return dst16; + } + else // nBytesPerSample == 4 + { + while(src32 < src_end32) + { + *dst32++ = *src32++; + *dst32++ = *src32++; + dst32 += 2 * (n_ff_used - 1); } + return dst32; + } } -static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t *audio) +static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audio) { - // This function relies on the fact that the length of the support FIFOs was configured to be a multiple of the active sample size in bytes s.t. no sample is split within a wrap - // This is ensured within set_interface, where the FIFOs are reconfigured according to this size + // This function relies on the fact that the length of the support FIFOs was configured to be a multiple of the active sample size in bytes s.t. no sample is split within a wrap + // This is ensured within set_interface, where the FIFOs are reconfigured according to this size - // We encode directly into IN EP's linear buffer - abort if previous transfer not complete - TU_VERIFY(!usbd_edpt_busy(rhport, audio->ep_in)); + // We encode directly into IN EP's linear buffer - abort if previous transfer not complete + TU_VERIFY(!usbd_edpt_busy(rhport, audio->ep_in)); - // Determine amount of samples - uint8_t const n_ff_used = audio->n_ff_used_tx; - uint16_t nBytesPerFFToSend = tu_fifo_count(&audio->tx_supp_ff[0]); - uint8_t cnt_ff; + // Determine amount of samples + uint8_t const n_ff_used = audio->n_ff_used_tx; + uint16_t nBytesPerFFToSend = tu_fifo_count(&audio->tx_supp_ff[0]); + uint8_t cnt_ff; - for (cnt_ff = 1; cnt_ff < n_ff_used; cnt_ff++) { - uint16_t const count = tu_fifo_count(&audio->tx_supp_ff[cnt_ff]); - if (count < nBytesPerFFToSend) { - nBytesPerFFToSend = count; - } + for (cnt_ff = 1; cnt_ff < n_ff_used; cnt_ff++) + { + uint16_t const count = tu_fifo_count(&audio->tx_supp_ff[cnt_ff]); + if (count < nBytesPerFFToSend) + { + nBytesPerFFToSend = count; } + } #if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - const uint16_t norm_packet_sz_tx[3] = { audio->packet_sz_tx[0] / n_ff_used, - audio->packet_sz_tx[1] / n_ff_used, - audio->packet_sz_tx[2] / n_ff_used }; - // packet_sz_tx is based on total packet size, here we want size for each support buffer. - nBytesPerFFToSend = audiod_tx_packet_size(norm_packet_sz_tx, nBytesPerFFToSend, - audio->tx_supp_ff[0].depth, - audio->ep_in_sz / n_ff_used); - // Check if there is enough data - if (nBytesPerFFToSend == 0) - return 0; + const uint16_t norm_packet_sz_tx[3] = {audio->packet_sz_tx[0] / n_ff_used, + audio->packet_sz_tx[1] / n_ff_used, + audio->packet_sz_tx[2] / n_ff_used}; + // packet_sz_tx is based on total packet size, here we want size for each support buffer. + nBytesPerFFToSend = audiod_tx_packet_size(norm_packet_sz_tx, nBytesPerFFToSend, audio->tx_supp_ff[0].depth, audio->ep_in_sz / n_ff_used); + // Check if there is enough data + if (nBytesPerFFToSend == 0) return 0; #else - // Check if there is enough data - if (nBytesPerFFToSend == 0) - return 0; - // Limit to maximum sample number - THIS IS A POSSIBLE ERROR SOURCE IF TOO MANY SAMPLE WOULD NEED TO BE SENT BUT CAN NOT! - nBytesPerFFToSend = tu_min16(nBytesPerFFToSend, audio->ep_in_sz / n_ff_used); - // Round to full number of samples (flooring) - uint16_t const nSlotSize = audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx; - nBytesPerFFToSend = (nBytesPerFFToSend / nSlotSize) * nSlotSize; -#endif - - // Encode - uint8_t *dst; - uint8_t *src_end; - - tu_fifo_buffer_info_t info; - - for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) { - dst = - &audio->lin_buf_in[cnt_ff * audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx]; - - tu_fifo_get_read_info(&audio->tx_supp_ff[cnt_ff], &info); - - if (info.len_lin != 0) { - info.len_lin = tu_min16(nBytesPerFFToSend, info.len_lin); // Limit up to desired length - src_end = (uint8_t *)info.ptr_lin + info.len_lin; - dst = audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, - info.ptr_lin, src_end, dst, n_ff_used); - - // Limit up to desired length - info.len_wrap = tu_min16(nBytesPerFFToSend - info.len_lin, info.len_wrap); - - // Handle wrapped part of FIFO - if (info.len_wrap != 0) { - src_end = (uint8_t *)info.ptr_wrap + info.len_wrap; - audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, - info.ptr_wrap, src_end, dst, n_ff_used); - } + // Check if there is enough data + if (nBytesPerFFToSend == 0) return 0; + // Limit to maximum sample number - THIS IS A POSSIBLE ERROR SOURCE IF TOO MANY SAMPLE WOULD NEED TO BE SENT BUT CAN NOT! + nBytesPerFFToSend = tu_min16(nBytesPerFFToSend, audio->ep_in_sz / n_ff_used); + // Round to full number of samples (flooring) + uint16_t const nSlotSize = audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx; + nBytesPerFFToSend = (nBytesPerFFToSend / nSlotSize) * nSlotSize; +#endif - tu_fifo_advance_read_pointer(&audio->tx_supp_ff[cnt_ff], info.len_lin + info.len_wrap); - } + // Encode + uint8_t * dst; + uint8_t * src_end; + + tu_fifo_buffer_info_t info; + + for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) + { + dst = &audio->lin_buf_in[cnt_ff*audio->n_channels_per_ff_tx*audio->n_bytes_per_sample_tx]; + + tu_fifo_get_read_info(&audio->tx_supp_ff[cnt_ff], &info); + + if (info.len_lin != 0) + { + info.len_lin = tu_min16(nBytesPerFFToSend, info.len_lin); // Limit up to desired length + src_end = (uint8_t *)info.ptr_lin + info.len_lin; + dst = audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, info.ptr_lin, src_end, dst, n_ff_used); + + // Limit up to desired length + info.len_wrap = tu_min16(nBytesPerFFToSend - info.len_lin, info.len_wrap); + + // Handle wrapped part of FIFO + if (info.len_wrap != 0) + { + src_end = (uint8_t *)info.ptr_wrap + info.len_wrap; + audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, info.ptr_wrap, src_end, dst, n_ff_used); + } + + tu_fifo_advance_read_pointer(&audio->tx_supp_ff[cnt_ff], info.len_lin + info.len_wrap); } + } - return nBytesPerFFToSend * n_ff_used; + return nBytesPerFFToSend * n_ff_used; } #endif //CFG_TUD_AUDIO_ENABLE_ENCODING @@ -1295,36 +1217,36 @@ static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t *audi #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP static inline bool audiod_fb_send(audiod_function_t *audio) { - bool apply_correction = (TUSB_SPEED_FULL == tud_speed_get()) && - audio->feedback.format_correction; - // Format the feedback value - if (apply_correction) { - uint8_t *fb = (uint8_t *)&audio->feedback.send_buf; - - // For FS format is 10.14 - *(fb++) = (audio->feedback.value >> 2) & 0xFF; - *(fb++) = (audio->feedback.value >> 10) & 0xFF; - *(fb++) = (audio->feedback.value >> 18) & 0xFF; - *fb = 0; - } else { - audio->feedback.send_buf = audio->feedback.value; - } - - // About feedback format on FS - // - // 3 variables: Format | packetSize | sendSize | Working OS: - // 16.16 4 4 Linux, Windows - // 16.16 4 3 Linux - // 16.16 3 4 Linux - // 16.16 3 3 Linux - // 10.14 4 4 Linux - // 10.14 4 3 Linux - // 10.14 3 4 Linux, OSX - // 10.14 3 3 Linux, OSX - // - // We send 3 bytes since sending packet larger than wMaxPacketSize is pretty ugly - return usbd_edpt_xfer(audio->rhport, audio->ep_fb, (uint8_t *)&audio->feedback.send_buf, - apply_correction ? 3 : 4); + bool apply_correction = (TUSB_SPEED_FULL == tud_speed_get()) && audio->feedback.format_correction; + // Format the feedback value + if (apply_correction) + { + uint8_t * fb = (uint8_t *) &audio->feedback.send_buf; + + // For FS format is 10.14 + *(fb++) = (audio->feedback.value >> 2) & 0xFF; + *(fb++) = (audio->feedback.value >> 10) & 0xFF; + *(fb++) = (audio->feedback.value >> 18) & 0xFF; + *fb = 0; + } else + { + audio->feedback.send_buf = audio->feedback.value; + } + + // About feedback format on FS + // + // 3 variables: Format | packetSize | sendSize | Working OS: + // 16.16 4 4 Linux, Windows + // 16.16 4 3 Linux + // 16.16 3 4 Linux + // 16.16 3 3 Linux + // 10.14 4 4 Linux + // 10.14 4 3 Linux + // 10.14 3 4 Linux, OSX + // 10.14 3 3 Linux, OSX + // + // We send 3 bytes since sending packet larger than wMaxPacketSize is pretty ugly + return usbd_edpt_xfer(audio->rhport, audio->ep_fb, (uint8_t *) &audio->feedback.send_buf, apply_correction ? 3 : 4); } #endif @@ -1333,1613 +1255,1647 @@ static inline bool audiod_fb_send(audiod_function_t *audio) //--------------------------------------------------------------------+ void audiod_init(void) { - tu_memclr(_audiod_fct, sizeof(_audiod_fct)); + tu_memclr(_audiod_fct, sizeof(_audiod_fct)); - for (uint8_t i = 0; i < CFG_TUD_AUDIO; i++) { - audiod_function_t *audio = &_audiod_fct[i]; + for(uint8_t i=0; ictrl_buf = ctrl_buf_1; - audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ; - break; + // Initialize control buffers + switch (i) + { + case 0: + audio->ctrl_buf = ctrl_buf_1; + audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ; + break; #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ > 0 - case 1: - audio->ctrl_buf = ctrl_buf_2; - audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ; - break; + case 1: + audio->ctrl_buf = ctrl_buf_2; + audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ > 0 - case 2: - audio->ctrl_buf = ctrl_buf_3; - audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ; - break; + case 2: + audio->ctrl_buf = ctrl_buf_3; + audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ; + break; #endif - } + } - // Initialize active alternate interface buffers - switch (i) { + // Initialize active alternate interface buffers + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_N_AS_INT > 0 - case 0: - audio->alt_setting = alt_setting_1; - break; + case 0: + audio->alt_setting = alt_setting_1; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_N_AS_INT > 0 - case 1: - audio->alt_setting = alt_setting_2; - break; + case 1: + audio->alt_setting = alt_setting_2; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_N_AS_INT > 0 - case 2: - audio->alt_setting = alt_setting_3; - break; + case 2: + audio->alt_setting = alt_setting_3; + break; #endif - } + } - // Initialize IN EP FIFO if required + // Initialize IN EP FIFO if required #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING - switch (i) { + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0 - case 0: - tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_1, - CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ, 1, true); + case 0: + tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_1, CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_1), NULL); + tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_1), NULL); #endif - break; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0 - case 1: - tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_2, - CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ, 1, true); + case 1: + tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_2, CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_2), NULL); + tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_2), NULL); #endif - break; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0 - case 2: - tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_3, - CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ, 1, true); + case 2: + tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_3, CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_3), NULL); + tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_3), NULL); #endif - break; + break; #endif - } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING - // Initialize linear buffers + // Initialize linear buffers #if USE_LINEAR_BUFFER_TX - switch (i) { + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0 - case 0: - audio->lin_buf_in = lin_buf_in_1; - break; + case 0: + audio->lin_buf_in = lin_buf_in_1; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0 - case 1: - audio->lin_buf_in = lin_buf_in_2; - break; + case 1: + audio->lin_buf_in = lin_buf_in_2; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0 - case 2: - audio->lin_buf_in = lin_buf_in_3; - break; + case 2: + audio->lin_buf_in = lin_buf_in_3; + break; #endif - } + } #endif // USE_LINEAR_BUFFER_TX - // Initialize OUT EP FIFO if required + // Initialize OUT EP FIFO if required #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - switch (i) { + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0 - case 0: - tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_1, - CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ, 1, true); + case 0: + tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_1, CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_1)); + tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_1)); #endif - break; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0 - case 1: - tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_2, - CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ, 1, true); + case 1: + tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_2, CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_2)); + tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_2)); #endif - break; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0 - case 2: - tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_3, - CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ, 1, true); + case 2: + tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_3, CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_3)); + tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_3)); #endif - break; + break; #endif - } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - // Initialize linear buffers + // Initialize linear buffers #if USE_LINEAR_BUFFER_RX - switch (i) { + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0 - case 0: - audio->lin_buf_out = lin_buf_out_1; - break; + case 0: + audio->lin_buf_out = lin_buf_out_1; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0 - case 1: - audio->lin_buf_out = lin_buf_out_2; - break; + case 1: + audio->lin_buf_out = lin_buf_out_2; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0 - case 2: - audio->lin_buf_out = lin_buf_out_3; - break; + case 2: + audio->lin_buf_out = lin_buf_out_3; + break; #endif - } + } #endif // USE_LINEAR_BUFFER_TX - // Initialize TX support FIFOs if required + // Initialize TX support FIFOs if required #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - switch (i) { + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 - case 0: - audio->tx_supp_ff = tx_supp_ff_1; - audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; - audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++) { - tu_fifo_config(&tx_supp_ff_1[cnt], tx_supp_ff_buf_1[cnt], - CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ, 1, true); + case 0: + audio->tx_supp_ff = tx_supp_ff_1; + audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; + audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++) + { + tu_fifo_config(&tx_supp_ff_1[cnt], tx_supp_ff_buf_1[cnt], CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&tx_supp_ff_1[cnt], - osal_mutex_create(&tx_supp_ff_mutex_wr_1[cnt]), NULL); + tu_fifo_config_mutex(&tx_supp_ff_1[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_1[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 - case 1: - audio->tx_supp_ff = tx_supp_ff_2; - audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; - audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; cnt++) { - tu_fifo_config(&tx_supp_ff_2[cnt], tx_supp_ff_buf_2[cnt], - CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ, 1, true); + case 1: + audio->tx_supp_ff = tx_supp_ff_2; + audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; + audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; cnt++) + { + tu_fifo_config(&tx_supp_ff_2[cnt], tx_supp_ff_buf_2[cnt], CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&tx_supp_ff_2[cnt], - osal_mutex_create(&tx_supp_ff_mutex_wr_2[cnt]), NULL); + tu_fifo_config_mutex(&tx_supp_ff_2[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_2[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0 - case 2: - audio->tx_supp_ff = tx_supp_ff_3; - audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; - audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; cnt++) { - tu_fifo_config(&tx_supp_ff_3[cnt], tx_supp_ff_buf_3[cnt], - CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ, 1, true); + case 2: + audio->tx_supp_ff = tx_supp_ff_3; + audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; + audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; cnt++) + { + tu_fifo_config(&tx_supp_ff_3[cnt], tx_supp_ff_buf_3[cnt], CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&tx_supp_ff_3[cnt], - osal_mutex_create(&tx_supp_ff_mutex_wr_3[cnt]), NULL); + tu_fifo_config_mutex(&tx_supp_ff_3[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_3[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 - } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - // Set encoding parameters for Type_I formats + // Set encoding parameters for Type_I formats #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - switch (i) { + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0 - case 0: - audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX; - break; + case 0: + audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0 - case 1: - audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_TX; - break; + case 1: + audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_TX; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0 - case 2: - audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_TX; - break; + case 2: + audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_TX; + break; #endif - } + } #endif // CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - // Initialize RX support FIFOs if required + // Initialize RX support FIFOs if required #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - switch (i) { + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 - case 0: - audio->rx_supp_ff = rx_supp_ff_1; - audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; - audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; cnt++) { - tu_fifo_config(&rx_supp_ff_1[cnt], rx_supp_ff_buf_1[cnt], - CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ, 1, true); + case 0: + audio->rx_supp_ff = rx_supp_ff_1; + audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; + audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; cnt++) + { + tu_fifo_config(&rx_supp_ff_1[cnt], rx_supp_ff_buf_1[cnt], CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&rx_supp_ff_1[cnt], - osal_mutex_create(&rx_supp_ff_mutex_rd_1[cnt]), NULL); + tu_fifo_config_mutex(&rx_supp_ff_1[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_1[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 - case 1: - audio->rx_supp_ff = rx_supp_ff_2; - audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; - audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; cnt++) { - tu_fifo_config(&rx_supp_ff_2[cnt], rx_supp_ff_buf_2[cnt], - CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ, 1, true); + case 1: + audio->rx_supp_ff = rx_supp_ff_2; + audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; + audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; cnt++) + { + tu_fifo_config(&rx_supp_ff_2[cnt], rx_supp_ff_buf_2[cnt], CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&rx_supp_ff_2[cnt], - osal_mutex_create(&rx_supp_ff_mutex_rd_2[cnt]), NULL); + tu_fifo_config_mutex(&rx_supp_ff_2[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_2[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0 - case 2: - audio->rx_supp_ff = rx_supp_ff_3; - audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; - audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ; - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; cnt++) { - tu_fifo_config(&rx_supp_ff_3[cnt], rx_supp_ff_buf_3[cnt], - CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ, 1, true); + case 2: + audio->rx_supp_ff = rx_supp_ff_3; + audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; + audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ; + for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; cnt++) + { + tu_fifo_config(&rx_supp_ff_3[cnt], rx_supp_ff_buf_3[cnt], CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ, 1, true); #if CFG_FIFO_MUTEX - tu_fifo_config_mutex(&rx_supp_ff_3[cnt], - osal_mutex_create(&rx_supp_ff_mutex_rd_3[cnt]), NULL); + tu_fifo_config_mutex(&rx_supp_ff_3[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_3[cnt]), NULL); #endif - } + } - break; + break; #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 - } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - // Set encoding parameters for Type_I formats + // Set encoding parameters for Type_I formats #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - switch (i) { + switch (i) + { #if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0 - case 0: - audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_RX; - break; + case 0: + audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_RX; + break; #endif #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0 - case 1: - audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_RX; - break; + case 1: + audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_RX; + break; #endif #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0 - case 2: - audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_RX; - break; + case 2: + audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_RX; + break; #endif - } -#endif // CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING } +#endif // CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING + } } -bool audiod_deinit(void) -{ - return false; // TODO not implemented yet +bool audiod_deinit(void) { + return false; // TODO not implemented yet } void audiod_reset(uint8_t rhport) { - (void)rhport; + (void) rhport; - for (uint8_t i = 0; i < CFG_TUD_AUDIO; i++) { - audiod_function_t *audio = &_audiod_fct[i]; - tu_memclr(audio, ITF_MEM_RESET_SIZE); + for(uint8_t i=0; iep_in_ff); + tu_fifo_clear(&audio->ep_in_ff); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING - tu_fifo_clear(&audio->ep_out_ff); + tu_fifo_clear(&audio->ep_out_ff); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING - for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) { - tu_fifo_clear(&audio->tx_supp_ff[cnt]); - } + for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) + { + tu_fifo_clear(&audio->tx_supp_ff[cnt]); + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) { - tu_fifo_clear(&audio->rx_supp_ff[cnt]); - } -#endif + for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) + { + tu_fifo_clear(&audio->rx_supp_ff[cnt]); } +#endif + } } -uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { - (void)max_len; + (void) max_len; - TU_VERIFY(TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass && - AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass); + TU_VERIFY ( TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass && + AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass); - // Verify version is correct - this check can be omitted - TU_VERIFY(itf_desc->bInterfaceProtocol == AUDIO_INT_PROTOCOL_CODE_V2); + // Verify version is correct - this check can be omitted + TU_VERIFY(itf_desc->bInterfaceProtocol == AUDIO_INT_PROTOCOL_CODE_V2); - // Verify interrupt control EP is enabled if demanded by descriptor - TU_ASSERT(itf_desc->bNumEndpoints <= 1); // 0 or 1 EPs are allowed - if (itf_desc->bNumEndpoints == 1) { - TU_ASSERT(CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP); - } + // Verify interrupt control EP is enabled if demanded by descriptor + TU_ASSERT(itf_desc->bNumEndpoints <= 1); // 0 or 1 EPs are allowed + if (itf_desc->bNumEndpoints == 1) + { + TU_ASSERT(CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP); + } + + // Alternate setting MUST be zero - this check can be omitted + TU_VERIFY(itf_desc->bAlternateSetting == 0); - // Alternate setting MUST be zero - this check can be omitted - TU_VERIFY(itf_desc->bAlternateSetting == 0); - - // Find available audio driver interface - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) { - if (!_audiod_fct[i].p_desc) { - _audiod_fct[i].p_desc = (uint8_t const *) - itf_desc; // Save pointer to AC descriptor which is by specification always the first one - _audiod_fct[i].rhport = rhport; - - // Setup descriptor lengths - switch (i) { - case 0: - _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_1_DESC_LEN; - break; + // Find available audio driver interface + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) + { + if (!_audiod_fct[i].p_desc) + { + _audiod_fct[i].p_desc = (uint8_t const *)itf_desc; // Save pointer to AC descriptor which is by specification always the first one + _audiod_fct[i].rhport = rhport; + + // Setup descriptor lengths + switch (i) + { + case 0: + _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_1_DESC_LEN; + break; #if CFG_TUD_AUDIO > 1 - case 1: - _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_2_DESC_LEN; - break; + case 1: + _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_2_DESC_LEN; + break; #endif #if CFG_TUD_AUDIO > 2 - case 2: - _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_3_DESC_LEN; - break; + case 2: + _audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_3_DESC_LEN; + break; #endif - } + } #ifdef TUP_DCD_EDPT_ISO_ALLOC + { + #if CFG_TUD_AUDIO_ENABLE_EP_IN + uint8_t ep_in = 0; + uint16_t ep_in_size = 0; + #endif + + #if CFG_TUD_AUDIO_ENABLE_EP_OUT + uint8_t ep_out = 0; + uint16_t ep_out_size = 0; + #endif + + #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + uint8_t ep_fb = 0; + #endif + uint8_t const *p_desc = _audiod_fct[i].p_desc; + uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) + { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc; + if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { -#if CFG_TUD_AUDIO_ENABLE_EP_IN - uint8_t ep_in = 0; - uint16_t ep_in_size = 0; -#endif - -#if CFG_TUD_AUDIO_ENABLE_EP_OUT - uint8_t ep_out = 0; - uint16_t ep_out_size = 0; -#endif + #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + // Explicit feedback EP + if (desc_ep->bmAttributes.usage == 1) + { + ep_fb = desc_ep->bEndpointAddress; + } + #endif + // Data EP + if (desc_ep->bmAttributes.usage == 0) + { + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) + { + #if CFG_TUD_AUDIO_ENABLE_EP_IN + ep_in = desc_ep->bEndpointAddress; + ep_in_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_in_size); + #endif + } else + { + #if CFG_TUD_AUDIO_ENABLE_EP_OUT + ep_out = desc_ep->bEndpointAddress; + ep_out_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_out_size); + #endif + } + } -#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - uint8_t ep_fb = 0; -#endif - uint8_t const *p_desc = _audiod_fct[i].p_desc; - uint8_t const *p_desc_end = - p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; - if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { -#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Explicit feedback EP - if (desc_ep->bmAttributes.usage == 1) { - ep_fb = desc_ep->bEndpointAddress; - } -#endif - // Data EP - if (desc_ep->bmAttributes.usage == 0) { - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { -#if CFG_TUD_AUDIO_ENABLE_EP_IN - ep_in = desc_ep->bEndpointAddress; - ep_in_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_in_size); -#endif - } else { -#if CFG_TUD_AUDIO_ENABLE_EP_OUT - ep_out = desc_ep->bEndpointAddress; - ep_out_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_out_size); -#endif - } - } - } - } + } + } - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + } -#if CFG_TUD_AUDIO_ENABLE_EP_IN - if (ep_in) { - usbd_edpt_iso_alloc(rhport, ep_in, ep_in_size); - } -#endif + #if CFG_TUD_AUDIO_ENABLE_EP_IN + if (ep_in) + { + usbd_edpt_iso_alloc(rhport, ep_in, ep_in_size); + } + #endif -#if CFG_TUD_AUDIO_ENABLE_EP_OUT - if (ep_out) { - usbd_edpt_iso_alloc(rhport, ep_out, ep_out_size); - } -#endif + #if CFG_TUD_AUDIO_ENABLE_EP_OUT + if (ep_out) + { + usbd_edpt_iso_alloc(rhport, ep_out, ep_out_size); + } + #endif -#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - if (ep_fb) { - usbd_edpt_iso_alloc(rhport, ep_fb, 4); - } -#endif - } + #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + if (ep_fb) + { + usbd_edpt_iso_alloc(rhport, ep_fb, 4); + } + #endif + } #endif // TUP_DCD_EDPT_ISO_ALLOC #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL + { + uint8_t const *p_desc = _audiod_fct[i].p_desc; + uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) + { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc; + if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - uint8_t const *p_desc = _audiod_fct[i].p_desc; - uint8_t const *p_desc_end = - p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; - if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - if (desc_ep->bmAttributes.usage == 0) { - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { - _audiod_fct[i].interval_tx = desc_ep->bInterval; - } - } - } - } else if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && - tu_desc_subtype(p_desc) == AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL) { - if (tu_unaligned_read16(p_desc + 4) == AUDIO_TERM_TYPE_USB_STREAMING) { - _audiod_fct[i].bclock_id_tx = p_desc[8]; - } - } - p_desc = tu_desc_next(p_desc); + if (desc_ep->bmAttributes.usage == 0) + { + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) + { + _audiod_fct[i].interval_tx = desc_ep->bInterval; } + } + } + } else + if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL) + { + if(tu_unaligned_read16(p_desc + 4) == AUDIO_TERM_TYPE_USB_STREAMING) + { + _audiod_fct[i].bclock_id_tx = p_desc[8]; } + } + p_desc = tu_desc_next(p_desc); + } + } #endif // CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP + { + uint8_t const *p_desc = _audiod_fct[i].p_desc; + uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + // For each endpoint + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) + { + tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const *) p_desc; + uint8_t const ep_addr = desc_ep->bEndpointAddress; + // If endpoint is input-direction and interrupt-type + if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.xfer == TUSB_XFER_INTERRUPT) { - uint8_t const *p_desc = _audiod_fct[i].p_desc; - uint8_t const *p_desc_end = - p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - // For each endpoint - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; - uint8_t const ep_addr = desc_ep->bEndpointAddress; - // If endpoint is input-direction and interrupt-type - if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && - desc_ep->bmAttributes.xfer == TUSB_XFER_INTERRUPT) { - // Store endpoint number and open endpoint - _audiod_fct[i].ep_int = ep_addr; - TU_ASSERT(usbd_edpt_open(_audiod_fct[i].rhport, desc_ep)); - } - } - p_desc = tu_desc_next(p_desc); - } + // Store endpoint number and open endpoint + _audiod_fct[i].ep_int = ep_addr; + TU_ASSERT(usbd_edpt_open(_audiod_fct[i].rhport, desc_ep)); } + } + p_desc = tu_desc_next(p_desc); + } + } #endif - _audiod_fct[i].mounted = true; - break; - } + _audiod_fct[i].mounted = true; + break; } + } - // Verify we found a free one - TU_ASSERT(i < CFG_TUD_AUDIO); + // Verify we found a free one + TU_ASSERT( i < CFG_TUD_AUDIO ); - // This is all we need so far - the EPs are setup by a later set_interface request (as per UAC2 specification) - uint16_t drv_len = - _audiod_fct[i].desc_length - - TUD_AUDIO_DESC_IAD_LEN; // - TUD_AUDIO_DESC_IAD_LEN since tinyUSB already handles the IAD descriptor + // This is all we need so far - the EPs are setup by a later set_interface request (as per UAC2 specification) + uint16_t drv_len = _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; // - TUD_AUDIO_DESC_IAD_LEN since tinyUSB already handles the IAD descriptor - return drv_len; + return drv_len; } -static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const *p_request) +static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const * p_request) { - uint8_t const itf = tu_u16_low(p_request->wIndex); + uint8_t const itf = tu_u16_low(p_request->wIndex); - // Find index of audio streaming interface - uint8_t func_id, idxItf; - uint8_t const *dummy; + // Find index of audio streaming interface + uint8_t func_id, idxItf; + uint8_t const *dummy; - TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &dummy)); - TU_VERIFY(tud_control_xfer(rhport, p_request, &_audiod_fct[func_id].alt_setting[idxItf], 1)); + TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &dummy)); + TU_VERIFY(tud_control_xfer(rhport, p_request, &_audiod_fct[func_id].alt_setting[idxItf], 1)); - TU_LOG2(" Get itf: %u - current alt: %u\r\n", itf, _audiod_fct[func_id].alt_setting[idxItf]); + TU_LOG2(" Get itf: %u - current alt: %u\r\n", itf, _audiod_fct[func_id].alt_setting[idxItf]); - return true; + return true; } -static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *p_request) +static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Here we need to do the following: + // Here we need to do the following: - // 1. Find the audio driver assigned to the given interface to be set - // Since one audio driver interface has to be able to cover an unknown number of interfaces (AC, AS + its alternate settings), the best memory efficient way to solve this is to always search through the descriptors. - // The audio driver is mapped to an audio function by a reference pointer to the corresponding AC interface of this audio function which serves as a starting point for searching + // 1. Find the audio driver assigned to the given interface to be set + // Since one audio driver interface has to be able to cover an unknown number of interfaces (AC, AS + its alternate settings), the best memory efficient way to solve this is to always search through the descriptors. + // The audio driver is mapped to an audio function by a reference pointer to the corresponding AC interface of this audio function which serves as a starting point for searching - // 2. Close EPs which are currently open - // To do so it is not necessary to know the current active alternate interface since we already save the current EP addresses - we simply close them + // 2. Close EPs which are currently open + // To do so it is not necessary to know the current active alternate interface since we already save the current EP addresses - we simply close them - // 3. Open new EP + // 3. Open new EP - uint8_t const itf = tu_u16_low(p_request->wIndex); - uint8_t const alt = tu_u16_low(p_request->wValue); + uint8_t const itf = tu_u16_low(p_request->wIndex); + uint8_t const alt = tu_u16_low(p_request->wValue); - TU_LOG2(" Set itf: %u - alt: %u\r\n", itf, alt); + TU_LOG2(" Set itf: %u - alt: %u\r\n", itf, alt); - // Find index of audio streaming interface and index of interface - uint8_t func_id, idxItf; - uint8_t const *p_desc; - TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &p_desc)); + // Find index of audio streaming interface and index of interface + uint8_t func_id, idxItf; + uint8_t const *p_desc; + TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &p_desc)); - audiod_function_t *audio = &_audiod_fct[func_id]; + audiod_function_t* audio = &_audiod_fct[func_id]; - // Look if there is an EP to be closed - for this driver, there are only 3 possible EPs which may be closed (only AS related EPs can be closed, AC EP (if present) is always open) + // Look if there is an EP to be closed - for this driver, there are only 3 possible EPs which may be closed (only AS related EPs can be closed, AC EP (if present) is always open) #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (audio->ep_in_as_intf_num == itf) { - audio->ep_in_as_intf_num = 0; -#ifndef TUP_DCD_EDPT_ISO_ALLOC - usbd_edpt_close(rhport, audio->ep_in); -#endif - - // Clear FIFOs, since data is no longer valid -#if !CFG_TUD_AUDIO_ENABLE_ENCODING - tu_fifo_clear(&audio->ep_in_ff); -#else - for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) { - tu_fifo_clear(&audio->tx_supp_ff[cnt]); - } -#endif + if (audio->ep_in_as_intf_num == itf) + { + audio->ep_in_as_intf_num = 0; + #ifndef TUP_DCD_EDPT_ISO_ALLOC + usbd_edpt_close(rhport, audio->ep_in); + #endif + + // Clear FIFOs, since data is no longer valid + #if !CFG_TUD_AUDIO_ENABLE_ENCODING + tu_fifo_clear(&audio->ep_in_ff); + #else + for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) + { + tu_fifo_clear(&audio->tx_supp_ff[cnt]); + } + #endif - // Invoke callback - can be used to stop data sampling - TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request)); + // Invoke callback - can be used to stop data sampling + TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request)); - audio->ep_in = 0; // Necessary? + audio->ep_in = 0; // Necessary? -#if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - audio->packet_sz_tx[0] = 0; - audio->packet_sz_tx[1] = 0; - audio->packet_sz_tx[2] = 0; -#endif - } + #if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL + audio->packet_sz_tx[0] = 0; + audio->packet_sz_tx[1] = 0; + audio->packet_sz_tx[2] = 0; + #endif + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN #if CFG_TUD_AUDIO_ENABLE_EP_OUT - if (audio->ep_out_as_intf_num == itf) { - audio->ep_out_as_intf_num = 0; -#ifndef TUP_DCD_EDPT_ISO_ALLOC - usbd_edpt_close(rhport, audio->ep_out); -#endif - - // Clear FIFOs, since data is no longer valid -#if !CFG_TUD_AUDIO_ENABLE_DECODING - tu_fifo_clear(&audio->ep_out_ff); -#else - for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) { - tu_fifo_clear(&audio->rx_supp_ff[cnt]); - } -#endif - - // Invoke callback - can be used to stop data sampling - TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request)); - - audio->ep_out = 0; // Necessary? - - // Close corresponding feedback EP -#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -#ifndef TUP_DCD_EDPT_ISO_ALLOC - usbd_edpt_close(rhport, audio->ep_fb); -#endif - audio->ep_fb = 0; - tu_memclr(&audio->feedback, sizeof(audio->feedback)); -#endif + if (audio->ep_out_as_intf_num == itf) + { + audio->ep_out_as_intf_num = 0; + #ifndef TUP_DCD_EDPT_ISO_ALLOC + usbd_edpt_close(rhport, audio->ep_out); + #endif + + // Clear FIFOs, since data is no longer valid + #if !CFG_TUD_AUDIO_ENABLE_DECODING + tu_fifo_clear(&audio->ep_out_ff); + #else + for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) + { + tu_fifo_clear(&audio->rx_supp_ff[cnt]); } + #endif + + // Invoke callback - can be used to stop data sampling + TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request)); + + audio->ep_out = 0; // Necessary? + + // Close corresponding feedback EP + #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + #ifndef TUP_DCD_EDPT_ISO_ALLOC + usbd_edpt_close(rhport, audio->ep_fb); + #endif + audio->ep_fb = 0; + tu_memclr(&audio->feedback, sizeof(audio->feedback)); + #endif + } #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT - // Save current alternative interface setting - audio->alt_setting[idxItf] = alt; + // Save current alternative interface setting + audio->alt_setting[idxItf] = alt; - // Open new EP if necessary - EPs are only to be closed or opened for AS interfaces - Look for AS interface with correct alternate interface - // Get pointer at end - uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Open new EP if necessary - EPs are only to be closed or opened for AS interfaces - Look for AS interface with correct alternate interface + // Get pointer at end + uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN; - // p_desc starts at required interface with alternate setting zero - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - // Find correct interface - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && - ((tusb_desc_interface_t const *)p_desc)->bInterfaceNumber == itf && - ((tusb_desc_interface_t const *)p_desc)->bAlternateSetting == alt) { -#if (CFG_TUD_AUDIO_ENABLE_EP_IN && \ - (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || \ - (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) - uint8_t const *p_desc_parse_for_params = p_desc; -#endif - // From this point forward follow the EP descriptors associated to the current alternate setting interface - Open EPs if necessary - uint8_t foundEPs = 0, nEps = ((tusb_desc_interface_t const *)p_desc)->bNumEndpoints; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (foundEPs < nEps && (p_desc_end - p_desc > 0)) { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + // p_desc starts at required interface with alternate setting zero + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + // Find correct interface + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const * )p_desc)->bInterfaceNumber == itf && ((tusb_desc_interface_t const * )p_desc)->bAlternateSetting == alt) + { +#if (CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) + uint8_t const * p_desc_parse_for_params = p_desc; +#endif + // From this point forward follow the EP descriptors associated to the current alternate setting interface - Open EPs if necessary + uint8_t foundEPs = 0, nEps = ((tusb_desc_interface_t const * )p_desc)->bNumEndpoints; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (foundEPs < nEps && (p_desc_end - p_desc > 0)) + { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) + { + tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const *) p_desc; #ifdef TUP_DCD_EDPT_ISO_ALLOC - TU_ASSERT(usbd_edpt_iso_activate(rhport, desc_ep)); + TU_ASSERT(usbd_edpt_iso_activate(rhport, desc_ep)); #else - TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); + TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); #endif - uint8_t const ep_addr = desc_ep->bEndpointAddress; + uint8_t const ep_addr = desc_ep->bEndpointAddress; - //TODO: We need to set EP non busy since this is not taken care of right now in ep_close() - THIS IS A WORKAROUND! - usbd_edpt_clear_stall(rhport, ep_addr); + //TODO: We need to set EP non busy since this is not taken care of right now in ep_close() - THIS IS A WORKAROUND! + usbd_edpt_clear_stall(rhport, ep_addr); #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && - desc_ep->bmAttributes.usage == 0x00) // Check if usage is data EP - { - // Save address - audio->ep_in = ep_addr; - audio->ep_in_as_intf_num = itf; - audio->ep_in_sz = tu_edpt_packet_size(desc_ep); - - // If software encoding is enabled, parse for the corresponding parameters - doing this here means only AS interfaces with EPs get scanned for parameters -#if CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf); - - // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap -#if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - const uint16_t active_fifo_depth = - (uint16_t)((audio->tx_supp_ff_sz_max / (audio->n_channels_per_ff_tx * - audio->n_bytes_per_sample_tx)) * - (audio->n_channels_per_ff_tx * - audio->n_bytes_per_sample_tx)); - for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) { - tu_fifo_config(&audio->tx_supp_ff[cnt], audio->tx_supp_ff[cnt].buffer, - active_fifo_depth, 1, true); - } - audio->n_ff_used_tx = audio->n_channels_tx / audio->n_channels_per_ff_tx; - TU_ASSERT(audio->n_ff_used_tx <= audio->n_tx_supp_ff); -#endif -#endif - - // Schedule first transmit if alternate interface is not zero i.e. streaming is disabled - in case no sample data is available a ZLP is loaded - // It is necessary to trigger this here since the refill is done with an RX FIFO empty interrupt which can only trigger if something was in there - TU_VERIFY(audiod_tx_done_cb(rhport, &_audiod_fct[func_id])); - } + if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 0x00) // Check if usage is data EP + { + // Save address + audio->ep_in = ep_addr; + audio->ep_in_as_intf_num = itf; + audio->ep_in_sz = tu_edpt_packet_size(desc_ep); + + // If software encoding is enabled, parse for the corresponding parameters - doing this here means only AS interfaces with EPs get scanned for parameters + #if CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL + audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf); + + // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap + #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING + const uint16_t active_fifo_depth = (uint16_t) ((audio->tx_supp_ff_sz_max / (audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx)) + * (audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx)); + for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) + { + tu_fifo_config(&audio->tx_supp_ff[cnt], audio->tx_supp_ff[cnt].buffer, active_fifo_depth, 1, true); + } + audio->n_ff_used_tx = audio->n_channels_tx / audio->n_channels_per_ff_tx; + TU_ASSERT( audio->n_ff_used_tx <= audio->n_tx_supp_ff ); + #endif + #endif + + // Schedule first transmit if alternate interface is not zero i.e. streaming is disabled - in case no sample data is available a ZLP is loaded + // It is necessary to trigger this here since the refill is done with an RX FIFO empty interrupt which can only trigger if something was in there + TU_VERIFY(audiod_tx_done_cb(rhport, &_audiod_fct[func_id])); + } #endif // CFG_TUD_AUDIO_ENABLE_EP_IN #if CFG_TUD_AUDIO_ENABLE_EP_OUT - if (tu_edpt_dir(ep_addr) == TUSB_DIR_OUT) // Checking usage not necessary - { - // Save address - audio->ep_out = ep_addr; - audio->ep_out_as_intf_num = itf; - audio->ep_out_sz = tu_edpt_packet_size(desc_ep); - -#if CFG_TUD_AUDIO_ENABLE_DECODING - audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf); + if (tu_edpt_dir(ep_addr) == TUSB_DIR_OUT) // Checking usage not necessary + { + // Save address + audio->ep_out = ep_addr; + audio->ep_out_as_intf_num = itf; + audio->ep_out_sz = tu_edpt_packet_size(desc_ep); - // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap -#if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - const uint16_t active_fifo_depth = - (audio->rx_supp_ff_sz_max / audio->n_bytes_per_sample_rx) * - audio->n_bytes_per_sample_rx; - for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) { - tu_fifo_config(&audio->rx_supp_ff[cnt], audio->rx_supp_ff[cnt].buffer, - active_fifo_depth, 1, true); - } - audio->n_ff_used_rx = audio->n_channels_rx / audio->n_channels_per_ff_rx; - TU_ASSERT(audio->n_ff_used_rx <= audio->n_rx_supp_ff); -#endif -#endif + #if CFG_TUD_AUDIO_ENABLE_DECODING + audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf); - // Prepare for incoming data -#if USE_LINEAR_BUFFER_RX - TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, - audio->ep_out_sz), - false); -#else - TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, - audio->ep_out_sz), - false); -#endif - } - -#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && - desc_ep->bmAttributes.usage == - 1) // Check if usage is explicit data feedback - { - audio->ep_fb = ep_addr; - audio->feedback.frame_shift = desc_ep->bInterval - 1; - } -#endif + // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap + #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING + const uint16_t active_fifo_depth = (audio->rx_supp_ff_sz_max / audio->n_bytes_per_sample_rx) * audio->n_bytes_per_sample_rx; + for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) + { + tu_fifo_config(&audio->rx_supp_ff[cnt], audio->rx_supp_ff[cnt].buffer, active_fifo_depth, 1, true); + } + audio->n_ff_used_rx = audio->n_channels_rx / audio->n_channels_per_ff_rx; + TU_ASSERT( audio->n_ff_used_rx <= audio->n_rx_supp_ff ); + #endif + #endif + + // Prepare for incoming data + #if USE_LINEAR_BUFFER_RX + TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false); + #else + TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, audio->ep_out_sz), false); + #endif + } + + #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 1) // Check if usage is explicit data feedback + { + audio->ep_fb = ep_addr; + audio->feedback.frame_shift = desc_ep->bInterval -1; + } + #endif #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT - foundEPs += 1; - } - p_desc = tu_desc_next(p_desc); - } + foundEPs += 1; + } + p_desc = tu_desc_next(p_desc); + } - TU_VERIFY(foundEPs == nEps); + TU_VERIFY(foundEPs == nEps); - // Invoke one callback for a final set interface - TU_VERIFY(tud_audio_set_itf_cb(rhport, p_request)); + // Invoke one callback for a final set interface + TU_VERIFY(tud_audio_set_itf_cb(rhport, p_request)); #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Prepare feedback computation if endpoint is available - if (audio->ep_fb != 0) { - audio_feedback_params_t fb_param; - - tud_audio_feedback_params_cb(func_id, alt, &fb_param); - audio->feedback.compute_method = fb_param.method; - - if (TUSB_SPEED_FULL == tud_speed_get()) - audio->feedback.format_correction = - tud_audio_feedback_format_correction_cb(func_id); - - // Minimal/Maximum value in 16.16 format for full speed (1ms per frame) or high speed (125 us per frame) - uint32_t const frame_div = (TUSB_SPEED_FULL == tud_speed_get()) ? 1000 : 8000; - audio->feedback.min_value = ((fb_param.sample_freq - 1) / frame_div) << 16; - audio->feedback.max_value = (fb_param.sample_freq / frame_div + 1) << 16; - - switch (fb_param.method) { - case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: - case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT: - case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2: - audiod_set_fb_params_freq(audio, fb_param.sample_freq, - fb_param.frequency.mclk_freq); - break; - - case AUDIO_FEEDBACK_METHOD_FIFO_COUNT: { - // Initialize the threshold level to half filled - uint16_t fifo_lvl_thr; + // Prepare feedback computation if endpoint is available + if(audio->ep_fb != 0) + { + audio_feedback_params_t fb_param; + + tud_audio_feedback_params_cb(func_id, alt, &fb_param); + audio->feedback.compute_method = fb_param.method; + + if(TUSB_SPEED_FULL == tud_speed_get()) + audio->feedback.format_correction = tud_audio_feedback_format_correction_cb(func_id); + + // Minimal/Maximum value in 16.16 format for full speed (1ms per frame) or high speed (125 us per frame) + uint32_t const frame_div = (TUSB_SPEED_FULL == tud_speed_get()) ? 1000 : 8000; + audio->feedback.min_value = ((fb_param.sample_freq - 1)/frame_div) << 16; + audio->feedback.max_value = (fb_param.sample_freq/frame_div + 1) << 16; + + switch(fb_param.method) + { + case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: + case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT: + case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2: + audiod_set_fb_params_freq(audio, fb_param.sample_freq, fb_param.frequency.mclk_freq); + break; + + case AUDIO_FEEDBACK_METHOD_FIFO_COUNT: + { + // Initialize the threshold level to half filled + uint16_t fifo_lvl_thr; #if CFG_TUD_AUDIO_ENABLE_DECODING - fifo_lvl_thr = tu_fifo_depth(&audio->rx_supp_ff[0]) / 2; + fifo_lvl_thr = tu_fifo_depth(&audio->rx_supp_ff[0]) / 2; #else - fifo_lvl_thr = tu_fifo_depth(&audio->ep_out_ff) / 2; -#endif - audio->feedback.compute.fifo_count.fifo_lvl_thr = fifo_lvl_thr; - audio->feedback.compute.fifo_count.fifo_lvl_avg = ((uint32_t)fifo_lvl_thr) - << 16; - // Avoid 64bit division - uint32_t nominal = ((fb_param.sample_freq / 100) << 16) / (frame_div / 100); - audio->feedback.compute.fifo_count.nom_value = nominal; - audio->feedback.compute.fifo_count.rate_const[0] = - (audio->feedback.max_value - nominal) / fifo_lvl_thr; - audio->feedback.compute.fifo_count.rate_const[1] = - (nominal - audio->feedback.min_value) / fifo_lvl_thr; - // On HS feedback is more sensitive since packet size can vary every MSOF, could cause instability - if (tud_speed_get() == TUSB_SPEED_HIGH) { - audio->feedback.compute.fifo_count.rate_const[0] /= 8; - audio->feedback.compute.fifo_count.rate_const[1] /= 8; - } - } break; - - // nothing to do - default: - break; - } + fifo_lvl_thr = tu_fifo_depth(&audio->ep_out_ff) / 2; +#endif + audio->feedback.compute.fifo_count.fifo_lvl_thr = fifo_lvl_thr; + audio->feedback.compute.fifo_count.fifo_lvl_avg = ((uint32_t)fifo_lvl_thr) << 16; + // Avoid 64bit division + uint32_t nominal = ((fb_param.sample_freq / 100) << 16) / (frame_div / 100); + audio->feedback.compute.fifo_count.nom_value = nominal; + audio->feedback.compute.fifo_count.rate_const[0] = (audio->feedback.max_value - nominal) / fifo_lvl_thr; + audio->feedback.compute.fifo_count.rate_const[1] = (nominal - audio->feedback.min_value) / fifo_lvl_thr; + // On HS feedback is more sensitive since packet size can vary every MSOF, could cause instability + if(tud_speed_get() == TUSB_SPEED_HIGH) { + audio->feedback.compute.fifo_count.rate_const[0] /= 8; + audio->feedback.compute.fifo_count.rate_const[1] /= 8; } -#endif // CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP + } + break; - // We are done - abort loop - break; + // nothing to do + default: break; } + } +#endif // CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Moving forward - p_desc = tu_desc_next(p_desc); + // We are done - abort loop + break; } + // Moving forward + p_desc = tu_desc_next(p_desc); + } + #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Disable SOF interrupt if no driver has any enabled feedback EP - bool enable_sof = false; - for (uint8_t i = 0; i < CFG_TUD_AUDIO; i++) { - if (_audiod_fct[i].ep_fb != 0 && - (_audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED || - _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT || - _audiod_fct[i].feedback.compute_method == - AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2)) { - enable_sof = true; - break; - } + // Disable SOF interrupt if no driver has any enabled feedback EP + bool enable_sof = false; + for(uint8_t i=0; i < CFG_TUD_AUDIO; i++) + { + if (_audiod_fct[i].ep_fb != 0 && + (_audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED || + _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT || + _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2 )) + { + enable_sof = true; + break; } - usbd_sof_enable(rhport, SOF_CONSUMER_AUDIO, enable_sof); + } + usbd_sof_enable(rhport, SOF_CONSUMER_AUDIO, enable_sof); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - audiod_calc_tx_packet_sz(audio); + audiod_calc_tx_packet_sz(audio); #endif - tud_control_status(rhport, p_request); + tud_control_status(rhport, p_request); - return true; + return true; } // Invoked when class request DATA stage is finished. // return false to stall control EP (e.g Host send non-sense DATA) -static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const *p_request) +static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const * p_request) { - // Handle audio class specific set requests - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && - p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) { - uint8_t func_id; - - switch (p_request->bmRequestType_bit.recipient) { - case TUSB_REQ_RCPT_INTERFACE: { - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - if (entityID != 0) { - // Check if entity is present and get corresponding driver index - TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); - - // Invoke callback - return tud_audio_set_req_entity_cb(rhport, p_request, - _audiod_fct[func_id].ctrl_buf); - } else { - // Find index of audio driver structure and verify interface really exists - TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); - - // Invoke callback - return tud_audio_set_req_itf_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); - } - } break; + // Handle audio class specific set requests + if(p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) + { + uint8_t func_id; - case TUSB_REQ_RCPT_ENDPOINT: { - uint8_t ep = TU_U16_LOW(p_request->wIndex); + switch (p_request->bmRequestType_bit.recipient) + { + case TUSB_REQ_RCPT_INTERFACE: + { + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - // Check if entity is present and get corresponding driver index - TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); + if (entityID != 0) + { + // Check if entity is present and get corresponding driver index + TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); - // Invoke callback - return tud_audio_set_req_ep_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); - } break; - // Unknown/Unsupported recipient - default: - TU_BREAKPOINT(); - return false; + // Invoke callback + return tud_audio_set_req_entity_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); } + else + { + // Find index of audio driver structure and verify interface really exists + TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); + + // Invoke callback + return tud_audio_set_req_itf_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); + } + } + break; + + case TUSB_REQ_RCPT_ENDPOINT: + { + uint8_t ep = TU_U16_LOW(p_request->wIndex); + + // Check if entity is present and get corresponding driver index + TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); + + // Invoke callback + return tud_audio_set_req_ep_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf); + } + break; + // Unknown/Unsupported recipient + default: TU_BREAKPOINT(); return false; } - return true; + } + return true; } // Handle class control request // return false to stall control endpoint (e.g unsupported request) -static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const *p_request) +static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const * p_request) { - (void)rhport; + (void) rhport; - // Handle standard requests - standard set requests usually have no data stage so we also handle set requests here - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { - switch (p_request->bRequest) { - case TUSB_REQ_GET_INTERFACE: - return audiod_get_interface(rhport, p_request); + // Handle standard requests - standard set requests usually have no data stage so we also handle set requests here + if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) + { + switch (p_request->bRequest) + { + case TUSB_REQ_GET_INTERFACE: + return audiod_get_interface(rhport, p_request); - case TUSB_REQ_SET_INTERFACE: - return audiod_set_interface(rhport, p_request); + case TUSB_REQ_SET_INTERFACE: + return audiod_set_interface(rhport, p_request); - case TUSB_REQ_CLEAR_FEATURE: - return true; + case TUSB_REQ_CLEAR_FEATURE: + return true; - // Unknown/Unsupported request - default: - TU_BREAKPOINT(); - return false; - } + // Unknown/Unsupported request + default: TU_BREAKPOINT(); return false; } + } - // Handle class requests - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { - uint8_t itf = TU_U16_LOW(p_request->wIndex); - uint8_t func_id; - - // Conduct checks which depend on the recipient - switch (p_request->bmRequestType_bit.recipient) { - case TUSB_REQ_RCPT_INTERFACE: { - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - - // Verify if entity is present - if (entityID != 0) { - // Find index of audio driver structure and verify entity really exists - TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); - - // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests - if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) { - return tud_audio_get_req_entity_cb(rhport, p_request); - } - } else { - // Find index of audio driver structure and verify interface really exists - TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); + // Handle class requests + if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) + { + uint8_t itf = TU_U16_LOW(p_request->wIndex); + uint8_t func_id; - // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests - if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) { - return tud_audio_get_req_itf_cb(rhport, p_request); - } - } - } break; + // Conduct checks which depend on the recipient + switch (p_request->bmRequestType_bit.recipient) + { + case TUSB_REQ_RCPT_INTERFACE: + { + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - case TUSB_REQ_RCPT_ENDPOINT: { - uint8_t ep = TU_U16_LOW(p_request->wIndex); + // Verify if entity is present + if (entityID != 0) + { + // Find index of audio driver structure and verify entity really exists + TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); + + // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests + if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) + { + return tud_audio_get_req_entity_cb(rhport, p_request); + } + } + else + { + // Find index of audio driver structure and verify interface really exists + TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); + + // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests + if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) + { + return tud_audio_get_req_itf_cb(rhport, p_request); + } + } + } + break; - // Find index of audio driver structure and verify EP really exists - TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); + case TUSB_REQ_RCPT_ENDPOINT: + { + uint8_t ep = TU_U16_LOW(p_request->wIndex); - // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests - if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) { - return tud_audio_get_req_ep_cb(rhport, p_request); - } - } break; + // Find index of audio driver structure and verify EP really exists + TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); - // Unknown/Unsupported recipient - default: - TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); - TU_BREAKPOINT(); - return false; + // In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests + if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) + { + return tud_audio_get_req_ep_cb(rhport, p_request); } + } + break; - // If we end here, the received request is a set request - we schedule a receive for the data stage and return true here. We handle the rest later in audiod_control_complete() once the data stage was finished - TU_VERIFY(tud_control_xfer(rhport, p_request, _audiod_fct[func_id].ctrl_buf, - _audiod_fct[func_id].ctrl_buf_sz)); - return true; + // Unknown/Unsupported recipient + default: TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); TU_BREAKPOINT(); return false; } - // There went something wrong - unsupported control request type - TU_BREAKPOINT(); - return false; + // If we end here, the received request is a set request - we schedule a receive for the data stage and return true here. We handle the rest later in audiod_control_complete() once the data stage was finished + TU_VERIFY(tud_control_xfer(rhport, p_request, _audiod_fct[func_id].ctrl_buf, _audiod_fct[func_id].ctrl_buf_sz)); + return true; + } + + // There went something wrong - unsupported control request type + TU_BREAKPOINT(); + return false; } -bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - if (stage == CONTROL_STAGE_SETUP) { - return audiod_control_request(rhport, request); - } else if (stage == CONTROL_STAGE_DATA) { - return audiod_control_complete(rhport, request); - } + if ( stage == CONTROL_STAGE_SETUP ) + { + return audiod_control_request(rhport, request); + } + else if ( stage == CONTROL_STAGE_DATA ) + { + return audiod_control_complete(rhport, request); + } - return true; + return true; } bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void)result; - (void)xferred_bytes; + (void) result; + (void) xferred_bytes; - // Search for interface belonging to given end point address and proceed as required - for (uint8_t func_id = 0; func_id < CFG_TUD_AUDIO; func_id++) { - audiod_function_t *audio = &_audiod_fct[func_id]; + // Search for interface belonging to given end point address and proceed as required + for (uint8_t func_id = 0; func_id < CFG_TUD_AUDIO; func_id++) + { + audiod_function_t* audio = &_audiod_fct[func_id]; #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP - // Data transmission of control interrupt finished - if (audio->ep_int == ep_addr) { - // According to USB2 specification, maximum payload of interrupt EP is 8 bytes on low speed, 64 bytes on full speed, and 1024 bytes on high speed (but only if an alternate interface other than 0 is used - see specification p. 49) - // In case there is nothing to send we have to return a NAK - this is taken care of by PHY ??? - // In case of an erroneous transmission a retransmission is conducted - this is taken care of by PHY ??? + // Data transmission of control interrupt finished + if (audio->ep_int == ep_addr) + { + // According to USB2 specification, maximum payload of interrupt EP is 8 bytes on low speed, 64 bytes on full speed, and 1024 bytes on high speed (but only if an alternate interface other than 0 is used - see specification p. 49) + // In case there is nothing to send we have to return a NAK - this is taken care of by PHY ??? + // In case of an erroneous transmission a retransmission is conducted - this is taken care of by PHY ??? - // I assume here, that things above are handled by PHY - // All transmission is done - what remains to do is to inform job was completed + // I assume here, that things above are handled by PHY + // All transmission is done - what remains to do is to inform job was completed - tud_audio_int_done_cb(rhport); - return true; - } + tud_audio_int_done_cb(rhport); + return true; + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN - // Data transmission of audio packet finished - if (audio->ep_in == ep_addr && audio->alt_setting != 0) { - // USB 2.0, section 5.6.4, third paragraph, states "An isochronous endpoint must specify its required bus access period. However, an isochronous endpoint must be prepared to handle poll rates faster than the one specified." - // That paragraph goes on to say "An isochronous IN endpoint must return a zero-length packet whenever data is requested at a faster interval than the specified interval and data is not available." - // This can only be solved reliably if we load a ZLP after every IN transmission since we can not say if the host requests samples earlier than we declared! Once all samples are collected we overwrite the loaded ZLP. + // Data transmission of audio packet finished + if (audio->ep_in == ep_addr && audio->alt_setting != 0) + { + // USB 2.0, section 5.6.4, third paragraph, states "An isochronous endpoint must specify its required bus access period. However, an isochronous endpoint must be prepared to handle poll rates faster than the one specified." + // That paragraph goes on to say "An isochronous IN endpoint must return a zero-length packet whenever data is requested at a faster interval than the specified interval and data is not available." + // This can only be solved reliably if we load a ZLP after every IN transmission since we can not say if the host requests samples earlier than we declared! Once all samples are collected we overwrite the loaded ZLP. - // Check if there is data to load into EPs buffer - if not load it with ZLP - // Be aware - we as a device are not able to know if the host polls for data with a faster rate as we stated this in the descriptors. Therefore we always have to put something into the EPs buffer. However, once we did that, there is no way of aborting this or replacing what we put into the buffer before! - // This is the only place where we can fill something into the EPs buffer! + // Check if there is data to load into EPs buffer - if not load it with ZLP + // Be aware - we as a device are not able to know if the host polls for data with a faster rate as we stated this in the descriptors. Therefore we always have to put something into the EPs buffer. However, once we did that, there is no way of aborting this or replacing what we put into the buffer before! + // This is the only place where we can fill something into the EPs buffer! - // Load new data - TU_VERIFY(audiod_tx_done_cb(rhport, audio)); + // Load new data + TU_VERIFY(audiod_tx_done_cb(rhport, audio)); - // Transmission of ZLP is done by audiod_tx_done_cb() - return true; - } + // Transmission of ZLP is done by audiod_tx_done_cb() + return true; + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT - // New audio packet received - if (audio->ep_out == ep_addr) { - TU_VERIFY(audiod_rx_done_cb(rhport, audio, (uint16_t)xferred_bytes)); - return true; - } + // New audio packet received + if (audio->ep_out == ep_addr) + { + TU_VERIFY(audiod_rx_done_cb(rhport, audio, (uint16_t) xferred_bytes)); + return true; + } + #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Transmission of feedback EP finished - if (audio->ep_fb == ep_addr) { - tud_audio_fb_done_cb(func_id); - - // Schedule a transmit with the new value if EP is not busy - if (usbd_edpt_claim(rhport, audio->ep_fb)) { - // Schedule next transmission - value is changed bytud_audio_n_fb_set() in the meantime or the old value gets sent - return audiod_fb_send(audio); - } - } + // Transmission of feedback EP finished + if (audio->ep_fb == ep_addr) + { + tud_audio_fb_done_cb(func_id); + + // Schedule a transmit with the new value if EP is not busy + if (usbd_edpt_claim(rhport, audio->ep_fb)) + { + // Schedule next transmission - value is changed bytud_audio_n_fb_set() in the meantime or the old value gets sent + return audiod_fb_send(audio); + } + } #endif #endif - } + } - return false; + return false; } #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -static bool audiod_set_fb_params_freq(audiod_function_t *audio, uint32_t sample_freq, - uint32_t mclk_freq) +static bool audiod_set_fb_params_freq(audiod_function_t* audio, uint32_t sample_freq, uint32_t mclk_freq) { - // Check if frame interval is within sane limits - // The interval value n_frames was taken from the descriptors within audiod_set_interface() - - // n_frames_min is ceil(2^10 * f_s / f_m) for full speed and ceil(2^13 * f_s / f_m) for high speed - // this lower limit ensures the measures feedback value has sufficient precision - uint32_t const k = (TUSB_SPEED_FULL == tud_speed_get()) ? 10 : 13; - uint32_t const n_frame = (1UL << audio->feedback.frame_shift); - - if ((((1UL << k) * sample_freq / mclk_freq) + 1) > n_frame) { - TU_LOG1(" UAC2 feedback interval too small\r\n"); - TU_BREAKPOINT(); - return false; - } + // Check if frame interval is within sane limits + // The interval value n_frames was taken from the descriptors within audiod_set_interface() - // Check if parameters really allow for a power of two division - if ((mclk_freq % sample_freq) == 0 && tu_is_power_of_two(mclk_freq / sample_freq)) { - audio->feedback.compute_method = AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2; - audio->feedback.compute.power_of_2 = - 16 - (audio->feedback.frame_shift - 1) - tu_log2(mclk_freq / sample_freq); - } else if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT) { - audio->feedback.compute.float_const = - (float)sample_freq / mclk_freq * (1UL << (16 - (audio->feedback.frame_shift - 1))); - } else { - audio->feedback.compute.fixed.sample_freq = sample_freq; - audio->feedback.compute.fixed.mclk_freq = mclk_freq; - } + // n_frames_min is ceil(2^10 * f_s / f_m) for full speed and ceil(2^13 * f_s / f_m) for high speed + // this lower limit ensures the measures feedback value has sufficient precision + uint32_t const k = (TUSB_SPEED_FULL == tud_speed_get()) ? 10 : 13; + uint32_t const n_frame = (1UL << audio->feedback.frame_shift); - return true; + if ( (((1UL << k) * sample_freq / mclk_freq) + 1) > n_frame ) + { + TU_LOG1(" UAC2 feedback interval too small\r\n"); TU_BREAKPOINT(); return false; + } + + // Check if parameters really allow for a power of two division + if ((mclk_freq % sample_freq) == 0 && tu_is_power_of_two(mclk_freq / sample_freq)) + { + audio->feedback.compute_method = AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2; + audio->feedback.compute.power_of_2 = 16 - (audio->feedback.frame_shift - 1) - tu_log2(mclk_freq / sample_freq); + } + else if ( audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT) + { + audio->feedback.compute.float_const = (float)sample_freq / mclk_freq * (1UL << (16 - (audio->feedback.frame_shift - 1))); + } + else + { + audio->feedback.compute.fixed.sample_freq = sample_freq; + audio->feedback.compute.fixed.mclk_freq = mclk_freq; + } + + return true; } -static void audiod_fb_fifo_count_update(audiod_function_t *audio, uint16_t lvl_new) +static void audiod_fb_fifo_count_update(audiod_function_t* audio, uint16_t lvl_new) { - /* Low-pass (averaging) filter */ - uint32_t lvl = audio->feedback.compute.fifo_count.fifo_lvl_avg; - lvl = (uint32_t)(((uint64_t)lvl * 63 + ((uint32_t)lvl_new << 16)) >> 6); - audio->feedback.compute.fifo_count.fifo_lvl_avg = lvl; + /* Low-pass (averaging) filter */ + uint32_t lvl = audio->feedback.compute.fifo_count.fifo_lvl_avg; + lvl = (uint32_t)(((uint64_t)lvl * 63 + ((uint32_t)lvl_new << 16)) >> 6); + audio->feedback.compute.fifo_count.fifo_lvl_avg = lvl; - uint32_t const ff_lvl = lvl >> 16; - uint16_t const ff_thr = audio->feedback.compute.fifo_count.fifo_lvl_thr; - uint16_t const *rate = audio->feedback.compute.fifo_count.rate_const; + uint32_t const ff_lvl = lvl >> 16; + uint16_t const ff_thr = audio->feedback.compute.fifo_count.fifo_lvl_thr; + uint16_t const *rate = audio->feedback.compute.fifo_count.rate_const; - uint32_t feedback; + uint32_t feedback; - if (ff_lvl < ff_thr) { - feedback = audio->feedback.compute.fifo_count.nom_value + (ff_thr - ff_lvl) * rate[0]; - } else { - feedback = audio->feedback.compute.fifo_count.nom_value - (ff_lvl - ff_thr) * rate[1]; - } + if(ff_lvl < ff_thr) + { + feedback = audio->feedback.compute.fifo_count.nom_value + (ff_thr - ff_lvl) * rate[0]; + } else + { + feedback = audio->feedback.compute.fifo_count.nom_value - (ff_lvl - ff_thr) * rate[1]; + } - if (feedback > audio->feedback.max_value) - feedback = audio->feedback.max_value; - if (feedback < audio->feedback.min_value) - feedback = audio->feedback.min_value; - audio->feedback.value = feedback; + if ( feedback > audio->feedback.max_value ) feedback = audio->feedback.max_value; + if ( feedback < audio->feedback.min_value ) feedback = audio->feedback.min_value; + audio->feedback.value = feedback; - // Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value - if (usbd_edpt_claim(audio->rhport, audio->ep_fb)) { - audiod_fb_send(audio); - } + // Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value + if (usbd_edpt_claim(audio->rhport, audio->ep_fb)) + { + audiod_fb_send(audio); + } } uint32_t tud_audio_feedback_update(uint8_t func_id, uint32_t cycles) { - audiod_function_t *audio = &_audiod_fct[func_id]; - uint32_t feedback; + audiod_function_t* audio = &_audiod_fct[func_id]; + uint32_t feedback; - switch (audio->feedback.compute_method) { + switch (audio->feedback.compute_method) + { case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2: - feedback = (cycles << audio->feedback.compute.power_of_2); - break; + feedback = (cycles << audio->feedback.compute.power_of_2); + break; case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT: - feedback = (uint32_t)((float)cycles * audio->feedback.compute.float_const); - break; - - case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: { - uint64_t fb64 = (((uint64_t)cycles) * audio->feedback.compute.fixed.sample_freq) - << (16 - (audio->feedback.frame_shift - 1)); - feedback = (uint32_t)(fb64 / audio->feedback.compute.fixed.mclk_freq); - } break; + feedback = (uint32_t) ((float) cycles * audio->feedback.compute.float_const); + break; - default: - return 0; + case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: + { + uint64_t fb64 = (((uint64_t) cycles) * audio->feedback.compute.fixed.sample_freq) << (16 - (audio->feedback.frame_shift - 1)); + feedback = (uint32_t) (fb64 / audio->feedback.compute.fixed.mclk_freq); } + break; + + default: return 0; + } - // For Windows: https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/usb-2-0-audio-drivers - // The size of isochronous packets created by the device must be within the limits specified in FMT-2.0 section 2.3.1.1. - // This means that the deviation of actual packet size from nominal size must not exceed +/- one audio slot - // (audio slot = channel count samples). - if (feedback > audio->feedback.max_value) - feedback = audio->feedback.max_value; - if (feedback < audio->feedback.min_value) - feedback = audio->feedback.min_value; + // For Windows: https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/usb-2-0-audio-drivers + // The size of isochronous packets created by the device must be within the limits specified in FMT-2.0 section 2.3.1.1. + // This means that the deviation of actual packet size from nominal size must not exceed +/- one audio slot + // (audio slot = channel count samples). + if ( feedback > audio->feedback.max_value ) feedback = audio->feedback.max_value; + if ( feedback < audio->feedback.min_value ) feedback = audio->feedback.min_value; - tud_audio_n_fb_set(func_id, feedback); + tud_audio_n_fb_set(func_id, feedback); - return feedback; + return feedback; } bool tud_audio_n_fb_set(uint8_t func_id, uint32_t feedback) { - TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); + TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL); - _audiod_fct[func_id].feedback.value = feedback; + _audiod_fct[func_id].feedback.value = feedback; - // Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value - if (usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_fb)) { - return audiod_fb_send(&_audiod_fct[func_id]); - } + // Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value + if (usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_fb)) + { + return audiod_fb_send(&_audiod_fct[func_id]); + } - return true; + return true; } #endif -TU_ATTR_FAST_FUNC void audiod_sof_isr(uint8_t rhport, uint32_t frame_count) +TU_ATTR_FAST_FUNC void audiod_sof_isr (uint8_t rhport, uint32_t frame_count) { - (void)rhport; - (void)frame_count; + (void) rhport; + (void) frame_count; #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP - // Determine feedback value - The feedback method is described in 5.12.4.2 of the USB 2.0 spec - // Boiled down, the feedback value Ff = n_samples / (micro)frame. - // Since an accuracy of less than 1 Sample / second is desired, at least n_frames = ceil(2^K * f_s / f_m) frames need to be measured, where K = 10 for full speed and K = 13 for high speed, f_s is the sampling frequency e.g. 48 kHz and f_m is the cpu clock frequency e.g. 100 MHz (or any other master clock whose clock count is available and locked to f_s) - // The update interval in the (4.10.2.1) Feedback Endpoint Descriptor must be less or equal to 2^(K - P), where P = min( ceil(log2(f_m / f_s)), K) - // feedback = n_cycles / n_frames * f_s / f_m in 16.16 format, where n_cycles are the number of main clock cycles within fb_n_frames - - // Iterate over audio functions and set feedback value - for (uint8_t i = 0; i < CFG_TUD_AUDIO; i++) { - audiod_function_t *audio = &_audiod_fct[i]; - - if (audio->ep_fb != 0) { - // HS shift need to be adjusted since SOF event is generated for frame only - uint8_t const hs_adjust = (TUSB_SPEED_HIGH == tud_speed_get()) ? 3 : 0; - uint32_t const interval = 1UL << (audio->feedback.frame_shift - hs_adjust); - if (0 == (frame_count & (interval - 1))) { - tud_audio_feedback_interval_isr(i, frame_count, audio->feedback.frame_shift); - } - } + // Determine feedback value - The feedback method is described in 5.12.4.2 of the USB 2.0 spec + // Boiled down, the feedback value Ff = n_samples / (micro)frame. + // Since an accuracy of less than 1 Sample / second is desired, at least n_frames = ceil(2^K * f_s / f_m) frames need to be measured, where K = 10 for full speed and K = 13 for high speed, f_s is the sampling frequency e.g. 48 kHz and f_m is the cpu clock frequency e.g. 100 MHz (or any other master clock whose clock count is available and locked to f_s) + // The update interval in the (4.10.2.1) Feedback Endpoint Descriptor must be less or equal to 2^(K - P), where P = min( ceil(log2(f_m / f_s)), K) + // feedback = n_cycles / n_frames * f_s / f_m in 16.16 format, where n_cycles are the number of main clock cycles within fb_n_frames + + // Iterate over audio functions and set feedback value + for(uint8_t i=0; i < CFG_TUD_AUDIO; i++) + { + audiod_function_t* audio = &_audiod_fct[i]; + + if (audio->ep_fb != 0) + { + // HS shift need to be adjusted since SOF event is generated for frame only + uint8_t const hs_adjust = (TUSB_SPEED_HIGH == tud_speed_get()) ? 3 : 0; + uint32_t const interval = 1UL << (audio->feedback.frame_shift - hs_adjust); + if ( 0 == (frame_count & (interval-1)) ) + { + tud_audio_feedback_interval_isr(i, frame_count, audio->feedback.frame_shift); + } } + } #endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP } -bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, - tusb_control_request_t const *p_request, void *data, - uint16_t len) +bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_request_t const * p_request, void* data, uint16_t len) { - // Handles only sending of data not receiving - if (p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) - return false; - - // Get corresponding driver index - uint8_t func_id; - uint8_t itf = TU_U16_LOW(p_request->wIndex); + // Handles only sending of data not receiving + if (p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) return false; - // Conduct checks which depend on the recipient - switch (p_request->bmRequestType_bit.recipient) { - case TUSB_REQ_RCPT_INTERFACE: { - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + // Get corresponding driver index + uint8_t func_id; + uint8_t itf = TU_U16_LOW(p_request->wIndex); - // Verify if entity is present - if (entityID != 0) { - // Find index of audio driver structure and verify entity really exists - TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); - } else { - // Find index of audio driver structure and verify interface really exists - TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); - } - } break; + // Conduct checks which depend on the recipient + switch (p_request->bmRequestType_bit.recipient) + { + case TUSB_REQ_RCPT_INTERFACE: + { + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + + // Verify if entity is present + if (entityID != 0) + { + // Find index of audio driver structure and verify entity really exists + TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id)); + } + else + { + // Find index of audio driver structure and verify interface really exists + TU_VERIFY(audiod_verify_itf_exists(itf, &func_id)); + } + } + break; - case TUSB_REQ_RCPT_ENDPOINT: { - uint8_t ep = TU_U16_LOW(p_request->wIndex); + case TUSB_REQ_RCPT_ENDPOINT: + { + uint8_t ep = TU_U16_LOW(p_request->wIndex); - // Find index of audio driver structure and verify EP really exists - TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); - } break; + // Find index of audio driver structure and verify EP really exists + TU_VERIFY(audiod_verify_ep_exists(ep, &func_id)); + } + break; // Unknown/Unsupported recipient - default: - TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); - TU_BREAKPOINT(); - return false; - } + default: TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); TU_BREAKPOINT(); return false; + } - // Crop length - if (len > _audiod_fct[func_id].ctrl_buf_sz) - len = _audiod_fct[func_id].ctrl_buf_sz; + // Crop length + if (len > _audiod_fct[func_id].ctrl_buf_sz) len = _audiod_fct[func_id].ctrl_buf_sz; - // Copy into buffer - TU_VERIFY(0 == tu_memcpy_s(_audiod_fct[func_id].ctrl_buf, _audiod_fct[func_id].ctrl_buf_sz, - data, (size_t)len)); + // Copy into buffer + TU_VERIFY(0 == tu_memcpy_s(_audiod_fct[func_id].ctrl_buf, _audiod_fct[func_id].ctrl_buf_sz, data, (size_t)len)); #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL - // Find data for sampling_frequency_control - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && - p_request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) { - uint8_t entityID = TU_U16_HIGH(p_request->wIndex); - uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); - if (_audiod_fct[func_id].bclock_id_tx == entityID && ctrlSel == AUDIO_CS_CTRL_SAM_FREQ && - p_request->bRequest == AUDIO_CS_REQ_CUR) { - _audiod_fct[func_id].sample_rate_tx = - tu_unaligned_read32(_audiod_fct[func_id].ctrl_buf); - } + // Find data for sampling_frequency_control + if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && p_request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) + { + uint8_t entityID = TU_U16_HIGH(p_request->wIndex); + uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue); + if (_audiod_fct[func_id].bclock_id_tx == entityID && ctrlSel == AUDIO_CS_CTRL_SAM_FREQ && p_request->bRequest == AUDIO_CS_REQ_CUR) + { + _audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(_audiod_fct[func_id].ctrl_buf); } + } #endif - // Schedule transmit - return tud_control_xfer(rhport, p_request, (void *)_audiod_fct[func_id].ctrl_buf, len); + // Schedule transmit + return tud_control_xfer(rhport, p_request, (void*)_audiod_fct[func_id].ctrl_buf, len); } // This helper function finds for a given audio function and AS interface number the index of the attached driver structure, the index of the interface in the audio function // (e.g. the std. AS interface with interface number 15 is the first AS interface for the given audio function and thus gets index zero), and // finally a pointer to the std. AS interface, where the pointer always points to the first alternate setting i.e. alternate interface zero. -static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t *audio, uint8_t *idxItf, - uint8_t const **pp_desc_int) +static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t * audio, uint8_t *idxItf, uint8_t const **pp_desc_int) { - if (audio->p_desc) { - // Get pointer at end - uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN; + if (audio->p_desc) + { + // Get pointer at end + uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Advance past AC descriptors - uint8_t const *p_desc = tu_desc_next(audio->p_desc); - p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength; + // Advance past AC descriptors + uint8_t const *p_desc = tu_desc_next(audio->p_desc); + p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength; - uint8_t tmp = 0; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - // We assume the number of alternate settings is increasing thus we return the index of alternate setting zero! - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && - ((tusb_desc_interface_t const *)p_desc)->bAlternateSetting == 0) { - if (((tusb_desc_interface_t const *)p_desc)->bInterfaceNumber == itf) { - *idxItf = tmp; - *pp_desc_int = p_desc; - return true; - } - // Increase index, bytes read, and pointer - tmp++; - } - p_desc = tu_desc_next(p_desc); + uint8_t tmp = 0; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + // We assume the number of alternate settings is increasing thus we return the index of alternate setting zero! + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const * )p_desc)->bAlternateSetting == 0) + { + if (((tusb_desc_interface_t const * )p_desc)->bInterfaceNumber == itf) + { + *idxItf = tmp; + *pp_desc_int = p_desc; + return true; } + // Increase index, bytes read, and pointer + tmp++; + } + p_desc = tu_desc_next(p_desc); } - return false; + } + return false; } // This helper function finds for a given AS interface number the index of the attached driver structure, the index of the interface in the audio function // (e.g. the std. AS interface with interface number 15 is the first AS interface for the given audio function and thus gets index zero), and // finally a pointer to the std. AS interface, where the pointer always points to the first alternate setting i.e. alternate interface zero. -static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, - uint8_t const **pp_desc_int) +static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, uint8_t const **pp_desc_int) { - // Loop over audio driver interfaces - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) { - if (audiod_get_AS_interface_index(itf, &_audiod_fct[i], idxItf, pp_desc_int)) { - *func_id = i; - return true; - } + // Loop over audio driver interfaces + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) + { + if (audiod_get_AS_interface_index(itf, &_audiod_fct[i], idxItf, pp_desc_int)) + { + *func_id = i; + return true; } + } - return false; + return false; } // Verify an entity with the given ID exists and returns also the corresponding driver index static bool audiod_verify_entity_exists(uint8_t itf, uint8_t entityID, uint8_t *func_id) { - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) { - // Look for the correct driver by checking if the unique standard AC interface number fits - if (_audiod_fct[i].p_desc && - ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == itf) { - // Get pointers after class specific AC descriptors and end of AC descriptors - entities are defined in between - uint8_t const *p_desc = - tu_desc_next(_audiod_fct[i].p_desc); // Points to CS AC descriptor - uint8_t const *p_desc_end = - ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength + p_desc; - p_desc = tu_desc_next(p_desc); // Get past CS AC descriptor - - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - if (p_desc[3] == entityID) // Entity IDs are always at offset 3 - { - *func_id = i; - return true; - } - p_desc = tu_desc_next(p_desc); - } + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) + { + // Look for the correct driver by checking if the unique standard AC interface number fits + if (_audiod_fct[i].p_desc && ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == itf) + { + // Get pointers after class specific AC descriptors and end of AC descriptors - entities are defined in between + uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc); // Points to CS AC descriptor + uint8_t const *p_desc_end = ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength + p_desc; + p_desc = tu_desc_next(p_desc); // Get past CS AC descriptor + + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + if (p_desc[3] == entityID) // Entity IDs are always at offset 3 + { + *func_id = i; + return true; } + p_desc = tu_desc_next(p_desc); + } } - return false; + } + return false; } static bool audiod_verify_itf_exists(uint8_t itf, uint8_t *func_id) { - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) { - if (_audiod_fct[i].p_desc) { - // Get pointer at beginning and end - uint8_t const *p_desc = _audiod_fct[i].p_desc; - uint8_t const *p_desc_end = - _audiod_fct[i].p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && - ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == - itf) { - *func_id = i; - return true; - } - p_desc = tu_desc_next(p_desc); - } + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) + { + if (_audiod_fct[i].p_desc) + { + // Get pointer at beginning and end + uint8_t const *p_desc = _audiod_fct[i].p_desc; + uint8_t const *p_desc_end = _audiod_fct[i].p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == itf) + { + *func_id = i; + return true; } + p_desc = tu_desc_next(p_desc); + } } - return false; + } + return false; } static bool audiod_verify_ep_exists(uint8_t ep, uint8_t *func_id) { - uint8_t i; - for (i = 0; i < CFG_TUD_AUDIO; i++) { - if (_audiod_fct[i].p_desc) { - // Get pointer at end - uint8_t const *p_desc_end = _audiod_fct[i].p_desc + _audiod_fct[i].desc_length; - - // Advance past AC descriptors - EP we look for are streaming EPs - uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc); - p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength; - - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT && - ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress == ep) { - *func_id = i; - return true; - } - p_desc = tu_desc_next(p_desc); - } + uint8_t i; + for (i = 0; i < CFG_TUD_AUDIO; i++) + { + if (_audiod_fct[i].p_desc) + { + // Get pointer at end + uint8_t const *p_desc_end = _audiod_fct[i].p_desc + _audiod_fct[i].desc_length; + + // Advance past AC descriptors - EP we look for are streaming EPs + uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc); + p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength; + + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT && ((tusb_desc_endpoint_t const * )p_desc)->bEndpointAddress == ep) + { + *func_id = i; + return true; } + p_desc = tu_desc_next(p_desc); + } } - return false; + } + return false; } -#if (CFG_TUD_AUDIO_ENABLE_EP_IN && \ - (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || \ - (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) +#if (CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING) // p_desc points to the AS interface of alternate setting zero // itf is the interface number of the corresponding interface - we check if the interface belongs to EP in or EP out to see if it is a TX or RX parameter // Currently, only AS interfaces with an EP (in or out) are supposed to be parsed for! -static void audiod_parse_for_AS_params(audiod_function_t *audio, uint8_t const *p_desc, - uint8_t const *p_desc_end, uint8_t const as_itf) +static void audiod_parse_for_AS_params(audiod_function_t* audio, uint8_t const * p_desc, uint8_t const * p_desc_end, uint8_t const as_itf) { #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) - return; // Abort, this interface has no EP, this driver does not support this currently + if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) return; // Abort, this interface has no EP, this driver does not support this currently #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_in_as_intf_num) - return; + if (as_itf != audio->ep_in_as_intf_num) return; #endif #if !CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_out_as_intf_num) - return; + if (as_itf != audio->ep_out_as_intf_num) return; #endif - p_desc = tu_desc_next( - p_desc); // Exclude standard AS interface descriptor of current alternate interface descriptor - // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning - while (p_desc_end - p_desc > 0) { - // Abort if follow up descriptor is a new standard interface descriptor - indicates the last AS descriptor was already finished - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) - break; - - // Look for a Class-Specific AS Interface Descriptor(4.9.2) to verify format type and format and also to get number of physical channels - if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && - tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_AS_GENERAL) { + p_desc = tu_desc_next(p_desc); // Exclude standard AS interface descriptor of current alternate interface descriptor + // Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning + while (p_desc_end - p_desc > 0) + { + // Abort if follow up descriptor is a new standard interface descriptor - indicates the last AS descriptor was already finished + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) break; + + // Look for a Class-Specific AS Interface Descriptor(4.9.2) to verify format type and format and also to get number of physical channels + if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_AS_GENERAL) + { #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (as_itf == audio->ep_in_as_intf_num) { - audio->n_channels_tx = ((audio_desc_cs_as_interface_t const *)p_desc)->bNrChannels; - audio->format_type_tx = - (audio_format_type_t)(((audio_desc_cs_as_interface_t const *)p_desc) - ->bFormatType); + if (as_itf == audio->ep_in_as_intf_num) + { + audio->n_channels_tx = ((audio_desc_cs_as_interface_t const * )p_desc)->bNrChannels; + audio->format_type_tx = (audio_format_type_t)(((audio_desc_cs_as_interface_t const * )p_desc)->bFormatType); #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING - audio->format_type_I_tx = - (audio_data_format_type_I_t)(((audio_desc_cs_as_interface_t const *)p_desc) - ->bmFormats); + audio->format_type_I_tx = (audio_data_format_type_I_t)(((audio_desc_cs_as_interface_t const * )p_desc)->bmFormats); #endif - } + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - if (as_itf == audio->ep_out_as_intf_num) { - audio->n_channels_rx = ((audio_desc_cs_as_interface_t const *)p_desc)->bNrChannels; - audio->format_type_rx = ((audio_desc_cs_as_interface_t const *)p_desc)->bFormatType; + if (as_itf == audio->ep_out_as_intf_num) + { + audio->n_channels_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bNrChannels; + audio->format_type_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bFormatType; #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - audio->format_type_I_rx = ((audio_desc_cs_as_interface_t const *)p_desc)->bmFormats; + audio->format_type_I_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bmFormats; #endif - } + } #endif - } + } - // Look for a Type I Format Type Descriptor(2.3.1.6 - Audio Formats) -#if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || \ - CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING - if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && - tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_FORMAT_TYPE && - ((audio_desc_type_I_format_t const *)p_desc)->bFormatType == AUDIO_FORMAT_TYPE_I) { + // Look for a Type I Format Type Descriptor(2.3.1.6 - Audio Formats) +#if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING + if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_FORMAT_TYPE && ((audio_desc_type_I_format_t const * )p_desc)->bFormatType == AUDIO_FORMAT_TYPE_I) + { #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) - break; // Abort loop, this interface has no EP, this driver does not support this currently + if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) break; // Abort loop, this interface has no EP, this driver does not support this currently #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_in_as_intf_num) - break; + if (as_itf != audio->ep_in_as_intf_num) break; #endif #if !CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT - if (as_itf != audio->ep_out_as_intf_num) - break; + if (as_itf != audio->ep_out_as_intf_num) break; #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN - if (as_itf == audio->ep_in_as_intf_num) { - audio->n_bytes_per_sample_tx = - ((audio_desc_type_I_format_t const *)p_desc)->bSubslotSize; - } + if (as_itf == audio->ep_in_as_intf_num) + { + audio->n_bytes_per_sample_tx = ((audio_desc_type_I_format_t const * )p_desc)->bSubslotSize; + } #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING - if (as_itf == audio->ep_out_as_intf_num) { - audio->n_bytes_per_sample_rx = - ((audio_desc_type_I_format_t const *)p_desc)->bSubslotSize; - } + if (as_itf == audio->ep_out_as_intf_num) + { + audio->n_bytes_per_sample_rx = ((audio_desc_type_I_format_t const * )p_desc)->bSubslotSize; + } #endif - } + } #endif - // Other format types are not supported yet + // Other format types are not supported yet - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + } } #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL -static bool audiod_calc_tx_packet_sz(audiod_function_t *audio) -{ - TU_VERIFY(audio->format_type_tx == AUDIO_FORMAT_TYPE_I); - TU_VERIFY(audio->n_channels_tx); - TU_VERIFY(audio->n_bytes_per_sample_tx); - TU_VERIFY(audio->interval_tx); - TU_VERIFY(audio->sample_rate_tx); - - const uint8_t interval = (tud_speed_get() == TUSB_SPEED_FULL) ? audio->interval_tx : - 1 << (audio->interval_tx - 1); - - const uint16_t sample_normimal = - (uint16_t)(audio->sample_rate_tx * interval / - ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000)); - const uint16_t sample_reminder = - (uint16_t)(audio->sample_rate_tx * interval % - ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000)); - - const uint16_t packet_sz_tx_min = - (uint16_t)((sample_normimal - 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx); - const uint16_t packet_sz_tx_norm = - (uint16_t)(sample_normimal * audio->n_channels_tx * audio->n_bytes_per_sample_tx); - const uint16_t packet_sz_tx_max = - (uint16_t)((sample_normimal + 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx); - - // Endpoint size must larger than packet size - TU_ASSERT(packet_sz_tx_max <= audio->ep_in_sz); - - // Frmt20.pdf 2.3.1.1 USB Packets - if (sample_reminder) { - // All virtual frame packets must either contain INT(nav) audio slots (small VFP) or INT(nav)+1 (large VFP) audio slots - audio->packet_sz_tx[0] = packet_sz_tx_norm; - audio->packet_sz_tx[1] = packet_sz_tx_norm; - audio->packet_sz_tx[2] = packet_sz_tx_max; - } else { - // In the case where nav = INT(nav), ni may vary between INT(nav)-1 (small VFP), INT(nav) - // (medium VFP) and INT(nav)+1 (large VFP). - audio->packet_sz_tx[0] = packet_sz_tx_min; - audio->packet_sz_tx[1] = packet_sz_tx_norm; - audio->packet_sz_tx[2] = packet_sz_tx_max; - } - - return true; -} - -static uint16_t audiod_tx_packet_size(const uint16_t *norminal_size, uint16_t data_count, - uint16_t fifo_depth, uint16_t max_depth) -{ - // Flow control need a FIFO size of at least 4*Navg - if (norminal_size[1] && norminal_size[1] <= fifo_depth * 4) { - // Use blackout to prioritize normal size packet - static int ctrl_blackout = 0; - uint16_t packet_size; - uint16_t slot_size = norminal_size[2] - norminal_size[1]; - if (data_count < norminal_size[0]) { - // If you get here frequently, then your I2S clock deviation is too big ! - packet_size = 0; - } else if (data_count < fifo_depth / 2 - slot_size && !ctrl_blackout) { - packet_size = norminal_size[0]; - ctrl_blackout = 10; - } else if (data_count > fifo_depth / 2 + slot_size && !ctrl_blackout) { - packet_size = norminal_size[2]; - if (norminal_size[0] == norminal_size[1]) { - // nav > INT(nav), eg. 44.1k, 88.2k - ctrl_blackout = 0; - } else { - // nav = INT(nav), eg. 48k, 96k - ctrl_blackout = 10; - } - } else { - packet_size = norminal_size[1]; - if (ctrl_blackout) { - ctrl_blackout--; - } - } - // Normally this cap is not necessary - return tu_min16(packet_size, max_depth); - } else { - return tu_min16(data_count, max_depth); +static bool audiod_calc_tx_packet_sz(audiod_function_t* audio) +{ + TU_VERIFY(audio->format_type_tx == AUDIO_FORMAT_TYPE_I); + TU_VERIFY(audio->n_channels_tx); + TU_VERIFY(audio->n_bytes_per_sample_tx); + TU_VERIFY(audio->interval_tx); + TU_VERIFY(audio->sample_rate_tx); + + const uint8_t interval = (tud_speed_get() == TUSB_SPEED_FULL) ? audio->interval_tx : 1 << (audio->interval_tx - 1); + + const uint16_t sample_normimal = (uint16_t)(audio->sample_rate_tx * interval / ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000)); + const uint16_t sample_reminder = (uint16_t)(audio->sample_rate_tx * interval % ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000)); + + const uint16_t packet_sz_tx_min = (uint16_t)((sample_normimal - 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx); + const uint16_t packet_sz_tx_norm = (uint16_t)(sample_normimal * audio->n_channels_tx * audio->n_bytes_per_sample_tx); + const uint16_t packet_sz_tx_max = (uint16_t)((sample_normimal + 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx); + + // Endpoint size must larger than packet size + TU_ASSERT(packet_sz_tx_max <= audio->ep_in_sz); + + // Frmt20.pdf 2.3.1.1 USB Packets + if (sample_reminder) + { + // All virtual frame packets must either contain INT(nav) audio slots (small VFP) or INT(nav)+1 (large VFP) audio slots + audio->packet_sz_tx[0] = packet_sz_tx_norm; + audio->packet_sz_tx[1] = packet_sz_tx_norm; + audio->packet_sz_tx[2] = packet_sz_tx_max; + } else + { + // In the case where nav = INT(nav), ni may vary between INT(nav)-1 (small VFP), INT(nav) + // (medium VFP) and INT(nav)+1 (large VFP). + audio->packet_sz_tx[0] = packet_sz_tx_min; + audio->packet_sz_tx[1] = packet_sz_tx_norm; + audio->packet_sz_tx[2] = packet_sz_tx_max; + } + + return true; +} + +static uint16_t audiod_tx_packet_size(const uint16_t* norminal_size, uint16_t data_count, uint16_t fifo_depth, uint16_t max_depth) +{ + // Flow control need a FIFO size of at least 4*Navg + if(norminal_size[1] && norminal_size[1] <= fifo_depth * 4) + { + // Use blackout to prioritize normal size packet + static int ctrl_blackout = 0; + uint16_t packet_size; + uint16_t slot_size = norminal_size[2] - norminal_size[1]; + if (data_count < norminal_size[0]) + { + // If you get here frequently, then your I2S clock deviation is too big ! + packet_size = 0; + } else + if (data_count < fifo_depth / 2 - slot_size && !ctrl_blackout) + { + packet_size = norminal_size[0]; + ctrl_blackout = 10; + } else + if (data_count > fifo_depth / 2 + slot_size && !ctrl_blackout) + { + packet_size = norminal_size[2]; + if(norminal_size[0] == norminal_size[1]) + { + // nav > INT(nav), eg. 44.1k, 88.2k + ctrl_blackout = 0; + } else + { + // nav = INT(nav), eg. 48k, 96k + ctrl_blackout = 10; + } + } else + { + packet_size = norminal_size[1]; + if (ctrl_blackout) + { + ctrl_blackout--; + } } + // Normally this cap is not necessary + return tu_min16(packet_size, max_depth); + } else + { + return tu_min16(data_count, max_depth); + } } #endif // No security checks here - internal function only which should always succeed -static uint8_t audiod_get_audio_fct_idx(audiod_function_t *audio) +static uint8_t audiod_get_audio_fct_idx(audiod_function_t * audio) { - for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO; cnt++) { - if (&_audiod_fct[cnt] == audio) - return cnt; - } - return 0; + for (uint8_t cnt=0; cnt < CFG_TUD_AUDIO; cnt++) + { + if (&_audiod_fct[cnt] == audio) return cnt; + } + return 0; } #endif //CFG_TUD_ENABLED && CFG_TUD_AUDIO diff --git a/Libraries/tinyusb/src/class/audio/audio_device.h b/Libraries/tinyusb/src/class/audio/audio_device.h index 425cf56f6e7..ae253f49d2c 100644 --- a/Libraries/tinyusb/src/class/audio/audio_device.h +++ b/Libraries/tinyusb/src/class/audio/audio_device.h @@ -85,11 +85,11 @@ // End point sizes IN BYTES - Limits: Full Speed <= 1023, High Speed <= 1024 #ifndef CFG_TUD_AUDIO_ENABLE_EP_IN -#define CFG_TUD_AUDIO_ENABLE_EP_IN 0 // TX +#define CFG_TUD_AUDIO_ENABLE_EP_IN 0 // TX #endif #ifndef CFG_TUD_AUDIO_ENABLE_EP_OUT -#define CFG_TUD_AUDIO_ENABLE_EP_OUT 0 // RX +#define CFG_TUD_AUDIO_ENABLE_EP_OUT 0 // RX #endif // Maximum EP sizes for all alternate AS interface settings - used for checks and buffer allocation @@ -127,23 +127,23 @@ // Software EP FIFO buffer sizes - must be >= max EP SIZEs! #ifndef CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ -#define CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ 0 +#define CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ 0 #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN @@ -184,23 +184,23 @@ // (For TYPE-I format only) Flow control is necessary to allow IN ep send correct amount of data, unless it's a virtual device where data is perfectly synchronized to USB clock. #ifndef CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL -#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 +#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1 #endif // Enable/disable feedback EP (required for asynchronous RX applications) #ifndef CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP -#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP 0 // Feedback - 0 or 1 +#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP 0 // Feedback - 0 or 1 #endif // Enable/disable conversion from 16.16 to 10.14 format on full-speed devices. See tud_audio_n_fb_set(). // Can be override by tud_audio_feedback_format_correction_cb() #ifndef CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION -#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION 0 // 0 or 1 +#define CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION 0 // 0 or 1 #endif // Enable/disable interrupt EP (required for notifying host of control changes) #ifndef CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 0 // Feedback - 0 or 1 +#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 0 // Feedback - 0 or 1 #endif // Use software encoding/decoding @@ -251,26 +251,25 @@ // For PCM encoding/decoding #ifndef CFG_TUD_AUDIO_ENABLE_ENCODING -#define CFG_TUD_AUDIO_ENABLE_ENCODING 0 +#define CFG_TUD_AUDIO_ENABLE_ENCODING 0 #endif #ifndef CFG_TUD_AUDIO_ENABLE_DECODING -#define CFG_TUD_AUDIO_ENABLE_DECODING 0 +#define CFG_TUD_AUDIO_ENABLE_DECODING 0 #endif // This enabling allows to save the current coding parameters e.g. # of bytes per sample etc. - TYPE_I includes common PCM encoding #ifndef CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING -#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 0 +#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 0 #endif #ifndef CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING -#define CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING 0 +#define CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING 0 #endif // Type I Coding parameters not given within UAC2 descriptors // It would be possible to allow for a more flexible setting and not fix this parameter as done below. However, this is most often not needed and kept for later if really necessary. The more flexible setting could be implemented within set_interface(), however, how the values are saved per alternate setting is to be determined! -#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING && \ - CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING +#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING #ifndef CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX #error You must tell the driver the number of channels per FIFO for the interleaved encoding! E.g. for an I2S interface having two channels, CHANNEL_PER_FIFO = 2 as the I2S stream having two channels is usually saved within one FIFO #endif @@ -286,8 +285,7 @@ #endif #endif -#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING && \ - CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING +#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING #ifndef CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_RX #error You must tell the driver the number of channels per FIFO for the interleaved encoding! E.g. for an I2S interface having two channels, CHANNEL_PER_FIFO = 2 as the I2S stream having two channels is usually saved within one FIFO #endif @@ -307,46 +305,44 @@ // Number of support FIFOs to set up - multiple channels can be handled by one FIFO - very common is two channels per FIFO stemming from one I2S interface #ifndef CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO -#define CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO 0 +#define CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO 0 #endif // Size of support FIFOs IN BYTES - if size > 0 there are as many FIFOs set up as CFG_TUD_AUDIO_FUNC_X_N_TX_SUPP_SW_FIFO and CFG_TUD_AUDIO_FUNC_X_N_RX_SUPP_SW_FIFO #ifndef CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ \ - 0 // FIFO size - minimum size: ceil(f_s/1000) * max(# of TX channels) / (# of TX support FIFOs) * max(# of bytes per sample) +#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ 0 // FIFO size - minimum size: ceil(f_s/1000) * max(# of TX channels) / (# of TX support FIFOs) * max(# of bytes per sample) #endif #ifndef CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ 0 +#define CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ \ - 0 // FIFO size - minimum size: ceil(f_s/1000) * max(# of RX channels) / (# of RX support FIFOs) * max(# of bytes per sample) +#define CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ 0 // FIFO size - minimum size: ceil(f_s/1000) * max(# of RX channels) / (# of RX support FIFOs) * max(# of bytes per sample) #endif #ifndef CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ 0 +#define CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ 0 #endif #ifndef CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ -#define CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ 0 +#define CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ 0 #endif //static_assert(sizeof(tud_audio_desc_lengths) != CFG_TUD_AUDIO, "Supply audio function descriptor pack length!"); @@ -367,84 +363,81 @@ extern "C" { // Application API (Multiple Interfaces) // CFG_TUD_AUDIO > 1 //--------------------------------------------------------------------+ -bool tud_audio_n_mounted(uint8_t func_id); +bool tud_audio_n_mounted (uint8_t func_id); #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING -uint16_t tud_audio_n_available(uint8_t func_id); -uint16_t tud_audio_n_read(uint8_t func_id, void *buffer, uint16_t bufsize); -bool tud_audio_n_clear_ep_out_ff(uint8_t func_id); // Delete all content in the EP OUT FIFO -tu_fifo_t *tud_audio_n_get_ep_out_ff(uint8_t func_id); +uint16_t tud_audio_n_available (uint8_t func_id); +uint16_t tud_audio_n_read (uint8_t func_id, void* buffer, uint16_t bufsize); +bool tud_audio_n_clear_ep_out_ff (uint8_t func_id); // Delete all content in the EP OUT FIFO +tu_fifo_t* tud_audio_n_get_ep_out_ff (uint8_t func_id); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING -bool tud_audio_n_clear_rx_support_ff(uint8_t func_id, - uint8_t ff_idx); // Delete all content in the support RX FIFOs -uint16_t tud_audio_n_available_support_ff(uint8_t func_id, uint8_t ff_idx); -uint16_t tud_audio_n_read_support_ff(uint8_t func_id, uint8_t ff_idx, void *buffer, - uint16_t bufsize); -tu_fifo_t *tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx); +bool tud_audio_n_clear_rx_support_ff (uint8_t func_id, uint8_t ff_idx); // Delete all content in the support RX FIFOs +uint16_t tud_audio_n_available_support_ff (uint8_t func_id, uint8_t ff_idx); +uint16_t tud_audio_n_read_support_ff (uint8_t func_id, uint8_t ff_idx, void* buffer, uint16_t bufsize); +tu_fifo_t* tud_audio_n_get_rx_support_ff (uint8_t func_id, uint8_t ff_idx); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING -uint16_t tud_audio_n_write(uint8_t func_id, const void *data, uint16_t len); -bool tud_audio_n_clear_ep_in_ff(uint8_t func_id); // Delete all content in the EP IN FIFO -tu_fifo_t *tud_audio_n_get_ep_in_ff(uint8_t func_id); +uint16_t tud_audio_n_write (uint8_t func_id, const void * data, uint16_t len); +bool tud_audio_n_clear_ep_in_ff (uint8_t func_id); // Delete all content in the EP IN FIFO +tu_fifo_t* tud_audio_n_get_ep_in_ff (uint8_t func_id); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING -uint16_t tud_audio_n_flush_tx_support_ff( - uint8_t func_id); // Force all content in the support TX FIFOs to be written into EP SW FIFO -bool tud_audio_n_clear_tx_support_ff(uint8_t func_id, uint8_t ff_idx); -uint16_t tud_audio_n_write_support_ff(uint8_t func_id, uint8_t ff_idx, const void *data, - uint16_t len); -tu_fifo_t *tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx); +uint16_t tud_audio_n_flush_tx_support_ff (uint8_t func_id); // Force all content in the support TX FIFOs to be written into EP SW FIFO +bool tud_audio_n_clear_tx_support_ff (uint8_t func_id, uint8_t ff_idx); +uint16_t tud_audio_n_write_support_ff (uint8_t func_id, uint8_t ff_idx, const void * data, uint16_t len); +tu_fifo_t* tud_audio_n_get_tx_support_ff (uint8_t func_id, uint8_t ff_idx); #endif #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t *data); +bool tud_audio_int_n_write (uint8_t func_id, const audio_interrupt_data_t * data); #endif + //--------------------------------------------------------------------+ // Application API (Interface0) //--------------------------------------------------------------------+ -static inline bool tud_audio_mounted(void); +static inline bool tud_audio_mounted (void); // RX API #if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING -static inline uint16_t tud_audio_available(void); -static inline bool tud_audio_clear_ep_out_ff(void); // Delete all content in the EP OUT FIFO -static inline uint16_t tud_audio_read(void *buffer, uint16_t bufsize); -static inline tu_fifo_t *tud_audio_get_ep_out_ff(void); +static inline uint16_t tud_audio_available (void); +static inline bool tud_audio_clear_ep_out_ff (void); // Delete all content in the EP OUT FIFO +static inline uint16_t tud_audio_read (void* buffer, uint16_t bufsize); +static inline tu_fifo_t* tud_audio_get_ep_out_ff (void); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING -static inline bool tud_audio_clear_rx_support_ff(uint8_t ff_idx); -static inline uint16_t tud_audio_available_support_ff(uint8_t ff_idx); -static inline uint16_t tud_audio_read_support_ff(uint8_t ff_idx, void *buffer, uint16_t bufsize); -static inline tu_fifo_t *tud_audio_get_rx_support_ff(uint8_t ff_idx); +static inline bool tud_audio_clear_rx_support_ff (uint8_t ff_idx); +static inline uint16_t tud_audio_available_support_ff (uint8_t ff_idx); +static inline uint16_t tud_audio_read_support_ff (uint8_t ff_idx, void* buffer, uint16_t bufsize); +static inline tu_fifo_t* tud_audio_get_rx_support_ff (uint8_t ff_idx); #endif // TX API #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING -static inline uint16_t tud_audio_write(const void *data, uint16_t len); -static inline bool tud_audio_clear_ep_in_ff(void); -static inline tu_fifo_t *tud_audio_get_ep_in_ff(void); +static inline uint16_t tud_audio_write (const void * data, uint16_t len); +static inline bool tud_audio_clear_ep_in_ff (void); +static inline tu_fifo_t* tud_audio_get_ep_in_ff (void); #endif #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING -static inline uint16_t tud_audio_flush_tx_support_ff(void); -static inline uint16_t tud_audio_clear_tx_support_ff(uint8_t ff_idx); -static inline uint16_t tud_audio_write_support_ff(uint8_t ff_idx, const void *data, uint16_t len); -static inline tu_fifo_t *tud_audio_get_tx_support_ff(uint8_t ff_idx); +static inline uint16_t tud_audio_flush_tx_support_ff (void); +static inline uint16_t tud_audio_clear_tx_support_ff (uint8_t ff_idx); +static inline uint16_t tud_audio_write_support_ff (uint8_t ff_idx, const void * data, uint16_t len); +static inline tu_fifo_t* tud_audio_get_tx_support_ff (uint8_t ff_idx); #endif // INT CTR API #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -static inline bool tud_audio_int_write(const audio_interrupt_data_t *data); +static inline bool tud_audio_int_write (const audio_interrupt_data_t * data); #endif // Buffer control EP data and schedule a transmit @@ -453,31 +446,26 @@ static inline bool tud_audio_int_write(const audio_interrupt_data_t *data); // Since transmission is triggered via interrupts, a persistent memory location is required onto which the buffer pointer in pointing. If you already have such // available you may directly use 'tud_control_xfer(...)'. In this case data does not need to be copied into an additional buffer and you save some time. // If the request's wLength is zero, a status packet is sent instead. -bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, - tusb_control_request_t const *p_request, void *data, - uint16_t len); +bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_request_t const * p_request, void* data, uint16_t len); //--------------------------------------------------------------------+ // Application Callback API //--------------------------------------------------------------------+ #if CFG_TUD_AUDIO_ENABLE_EP_IN -bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t func_id, uint8_t ep_in, - uint8_t cur_alt_setting); -bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t func_id, - uint8_t ep_in, uint8_t cur_alt_setting); +bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t func_id, uint8_t ep_in, uint8_t cur_alt_setting); +bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t func_id, uint8_t ep_in, uint8_t cur_alt_setting); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT -bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, - uint8_t ep_out, uint8_t cur_alt_setting); -bool tud_audio_rx_done_post_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, - uint8_t ep_out, uint8_t cur_alt_setting); +bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting); +bool tud_audio_rx_done_post_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting); #endif #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP void tud_audio_fb_done_cb(uint8_t func_id); + // Note about feedback calculation // // Option 1 - AUDIO_FEEDBACK_METHOD_FIFO_COUNT @@ -500,6 +488,7 @@ void tud_audio_fb_done_cb(uint8_t func_id); // Advantage: No ISR interrupt is enabled, hence the CPU need not to handle an ISR every 1ms or 125us and thus less CPU load. // Disadvantage: typically a larger FIFO is needed to compensate for jitter (e.g. 6 frames), i.e. a larger delay is introduced. + // This function is used to provide data rate feedback from an asynchronous sink. Feedback value will be sent at FB endpoint interval till it's changed. // // The feedback format is specified to be 16.16 for HS and 10.14 for FS devices (see Universal Serial Bus Specification Revision 2.0 5.12.4.2). By default, @@ -529,35 +518,33 @@ bool tud_audio_n_fb_set(uint8_t func_id, uint32_t feedback); uint32_t tud_audio_feedback_update(uint8_t func_id, uint32_t cycles); enum { - AUDIO_FEEDBACK_METHOD_DISABLED, - AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED, - AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT, - AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2, // For driver internal use only - AUDIO_FEEDBACK_METHOD_FIFO_COUNT + AUDIO_FEEDBACK_METHOD_DISABLED, + AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED, + AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT, + AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2, // For driver internal use only + AUDIO_FEEDBACK_METHOD_FIFO_COUNT }; typedef struct { - uint8_t method; - uint32_t sample_freq; // sample frequency in Hz + uint8_t method; + uint32_t sample_freq; // sample frequency in Hz + + union { + struct { + uint32_t mclk_freq; // Main clock frequency in Hz i.e. master clock to which sample clock is based on + }frequency; - union { - struct { - uint32_t - mclk_freq; // Main clock frequency in Hz i.e. master clock to which sample clock is based on - } frequency; - }; -} audio_feedback_params_t; + }; +}audio_feedback_params_t; // Invoked when needed to set feedback parameters -void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, - audio_feedback_params_t *feedback_param); +void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, audio_feedback_params_t* feedback_param); // Callback in ISR context, invoked periodically according to feedback endpoint bInterval. // Could be used to compute and update feedback value, should be placed in RAM if possible // frame_number : current SOF count // interval_shift: number of bit shift i.e log2(interval) from Feedback endpoint descriptor -TU_ATTR_FAST_FUNC void tud_audio_feedback_interval_isr(uint8_t func_id, uint32_t frame_number, - uint8_t interval_shift); +TU_ATTR_FAST_FUNC void tud_audio_feedback_interval_isr(uint8_t func_id, uint32_t frame_number, uint8_t interval_shift); // (Full-Speed only) Callback to set feedback format correction is applied or not, // default to CFG_TUD_AUDIO_ENABLE_FEEDBACK_FORMAT_CORRECTION if not implemented. @@ -569,31 +556,28 @@ void tud_audio_int_done_cb(uint8_t rhport); #endif // Invoked when audio set interface request received -bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request); +bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request); // Invoked when audio set interface request received which closes an EP -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request); +bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request); // Invoked when audio class specific set request received for an EP -bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff); +bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff); // Invoked when audio class specific set request received for an interface -bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff); +bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff); // Invoked when audio class specific set request received for an entity -bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, - uint8_t *pBuff); +bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff); // Invoked when audio class specific get request received for an EP -bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request); +bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request); // Invoked when audio class specific get request received for an interface -bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request); +bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request); // Invoked when audio class specific get request received for an entity -bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request); +bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request); //--------------------------------------------------------------------+ // Inline Functions @@ -601,7 +585,7 @@ bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p static inline bool tud_audio_mounted(void) { - return tud_audio_n_mounted(0); + return tud_audio_n_mounted(0); } // RX API @@ -610,22 +594,22 @@ static inline bool tud_audio_mounted(void) static inline uint16_t tud_audio_available(void) { - return tud_audio_n_available(0); + return tud_audio_n_available(0); } -static inline uint16_t tud_audio_read(void *buffer, uint16_t bufsize) +static inline uint16_t tud_audio_read(void* buffer, uint16_t bufsize) { - return tud_audio_n_read(0, buffer, bufsize); + return tud_audio_n_read(0, buffer, bufsize); } static inline bool tud_audio_clear_ep_out_ff(void) { - return tud_audio_n_clear_ep_out_ff(0); + return tud_audio_n_clear_ep_out_ff(0); } -static inline tu_fifo_t *tud_audio_get_ep_out_ff(void) +static inline tu_fifo_t* tud_audio_get_ep_out_ff(void) { - return tud_audio_n_get_ep_out_ff(0); + return tud_audio_n_get_ep_out_ff(0); } #endif @@ -634,22 +618,22 @@ static inline tu_fifo_t *tud_audio_get_ep_out_ff(void) static inline bool tud_audio_clear_rx_support_ff(uint8_t ff_idx) { - return tud_audio_n_clear_rx_support_ff(0, ff_idx); + return tud_audio_n_clear_rx_support_ff(0, ff_idx); } static inline uint16_t tud_audio_available_support_ff(uint8_t ff_idx) { - return tud_audio_n_available_support_ff(0, ff_idx); + return tud_audio_n_available_support_ff(0, ff_idx); } -static inline uint16_t tud_audio_read_support_ff(uint8_t ff_idx, void *buffer, uint16_t bufsize) +static inline uint16_t tud_audio_read_support_ff(uint8_t ff_idx, void* buffer, uint16_t bufsize) { - return tud_audio_n_read_support_ff(0, ff_idx, buffer, bufsize); + return tud_audio_n_read_support_ff(0, ff_idx, buffer, bufsize); } -static inline tu_fifo_t *tud_audio_get_rx_support_ff(uint8_t ff_idx) +static inline tu_fifo_t* tud_audio_get_rx_support_ff(uint8_t ff_idx) { - return tud_audio_n_get_rx_support_ff(0, ff_idx); + return tud_audio_n_get_rx_support_ff(0, ff_idx); } #endif @@ -658,19 +642,19 @@ static inline tu_fifo_t *tud_audio_get_rx_support_ff(uint8_t ff_idx) #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING -static inline uint16_t tud_audio_write(const void *data, uint16_t len) +static inline uint16_t tud_audio_write(const void * data, uint16_t len) { - return tud_audio_n_write(0, data, len); + return tud_audio_n_write(0, data, len); } static inline bool tud_audio_clear_ep_in_ff(void) { - return tud_audio_n_clear_ep_in_ff(0); + return tud_audio_n_clear_ep_in_ff(0); } -static inline tu_fifo_t *tud_audio_get_ep_in_ff(void) +static inline tu_fifo_t* tud_audio_get_ep_in_ff(void) { - return tud_audio_n_get_ep_in_ff(0); + return tud_audio_n_get_ep_in_ff(0); } #endif @@ -679,30 +663,30 @@ static inline tu_fifo_t *tud_audio_get_ep_in_ff(void) static inline uint16_t tud_audio_flush_tx_support_ff(void) { - return tud_audio_n_flush_tx_support_ff(0); + return tud_audio_n_flush_tx_support_ff(0); } static inline uint16_t tud_audio_clear_tx_support_ff(uint8_t ff_idx) { - return tud_audio_n_clear_tx_support_ff(0, ff_idx); + return tud_audio_n_clear_tx_support_ff(0, ff_idx); } -static inline uint16_t tud_audio_write_support_ff(uint8_t ff_idx, const void *data, uint16_t len) +static inline uint16_t tud_audio_write_support_ff(uint8_t ff_idx, const void * data, uint16_t len) { - return tud_audio_n_write_support_ff(0, ff_idx, data, len); + return tud_audio_n_write_support_ff(0, ff_idx, data, len); } -static inline tu_fifo_t *tud_audio_get_tx_support_ff(uint8_t ff_idx) +static inline tu_fifo_t* tud_audio_get_tx_support_ff(uint8_t ff_idx) { - return tud_audio_n_get_tx_support_ff(0, ff_idx); + return tud_audio_n_get_tx_support_ff(0, ff_idx); } #endif #if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP -static inline bool tud_audio_int_write(const audio_interrupt_data_t *data) +static inline bool tud_audio_int_write(const audio_interrupt_data_t * data) { - return tud_audio_int_n_write(0, data); + return tud_audio_int_n_write(0, data); } #endif @@ -710,7 +694,7 @@ static inline bool tud_audio_int_write(const audio_interrupt_data_t *data) static inline bool tud_audio_fb_set(uint32_t feedback) { - return tud_audio_n_fb_set(0, feedback); + return tud_audio_n_fb_set(0, feedback); } #endif @@ -718,14 +702,13 @@ static inline bool tud_audio_fb_set(uint32_t feedback) //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void audiod_init(void); -bool audiod_deinit(void); -void audiod_reset(uint8_t rhport); -uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); -bool audiod_xfer_cb(uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, - uint32_t xferred_bytes); -void audiod_sof_isr(uint8_t rhport, uint32_t frame_count); +void audiod_init (void); +bool audiod_deinit (void); +void audiod_reset (uint8_t rhport); +uint16_t audiod_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +bool audiod_xfer_cb (uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); +void audiod_sof_isr (uint8_t rhport, uint32_t frame_count); #ifdef __cplusplus } diff --git a/Libraries/tinyusb/src/class/bth/bth_device.c b/Libraries/tinyusb/src/class/bth/bth_device.c index 88f2c65f9a6..cbf6e13321b 100644 --- a/Libraries/tinyusb/src/class/bth/bth_device.c +++ b/Libraries/tinyusb/src/class/bth/bth_device.c @@ -37,17 +37,18 @@ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -typedef struct { - uint8_t itf_num; - uint8_t ep_ev; - uint8_t ep_acl_in; - uint8_t ep_acl_out; - uint8_t ep_voice[2]; // Not used yet - uint8_t ep_voice_size[2][CFG_TUD_BTH_ISO_ALT_COUNT]; - - // Endpoint Transfer buffer - CFG_TUSB_MEM_ALIGN bt_hci_cmd_t hci_cmd; - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_BTH_DATA_EPSIZE]; +typedef struct +{ + uint8_t itf_num; + uint8_t ep_ev; + uint8_t ep_acl_in; + uint8_t ep_acl_out; + uint8_t ep_voice[2]; // Not used yet + uint8_t ep_voice_size[2][CFG_TUD_BTH_ISO_ALT_COUNT]; + + // Endpoint Transfer buffer + CFG_TUSB_MEM_ALIGN bt_hci_cmd_t hci_cmd; + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_BTH_DATA_EPSIZE]; } btd_interface_t; @@ -58,153 +59,139 @@ CFG_TUD_MEM_SECTION btd_interface_t _btd_itf; static bool bt_tx_data(uint8_t ep, void *data, uint16_t len) { - uint8_t const rhport = 0; + uint8_t const rhport = 0; - // skip if previous transfer not complete - TU_VERIFY(!usbd_edpt_busy(rhport, ep)); + // skip if previous transfer not complete + TU_VERIFY(!usbd_edpt_busy(rhport, ep)); - TU_ASSERT(usbd_edpt_xfer(rhport, ep, data, len)); + TU_ASSERT(usbd_edpt_xfer(rhport, ep, data, len)); - return true; + return true; } //--------------------------------------------------------------------+ // READ API //--------------------------------------------------------------------+ + //--------------------------------------------------------------------+ // WRITE API //--------------------------------------------------------------------+ bool tud_bt_event_send(void *event, uint16_t event_len) { - return bt_tx_data(_btd_itf.ep_ev, event, event_len); + return bt_tx_data(_btd_itf.ep_ev, event, event_len); } bool tud_bt_acl_data_send(void *event, uint16_t event_len) { - return bt_tx_data(_btd_itf.ep_acl_in, event, event_len); + return bt_tx_data(_btd_itf.ep_acl_in, event, event_len); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void btd_init(void) -{ - tu_memclr(&_btd_itf, sizeof(_btd_itf)); +void btd_init(void) { + tu_memclr(&_btd_itf, sizeof(_btd_itf)); } -bool btd_deinit(void) -{ - return true; +bool btd_deinit(void) { + return true; } void btd_reset(uint8_t rhport) { - (void)rhport; + (void)rhport; } uint16_t btd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { - tusb_desc_endpoint_t const *desc_ep; - uint16_t drv_len = 0; - // Size of single alternative of ISO interface - const uint16_t iso_alt_itf_size = - sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t); - // Size of hci interface - const uint16_t hci_itf_size = sizeof(tusb_desc_interface_t) + 3 * sizeof(tusb_desc_endpoint_t); - // Ensure this is BT Primary Controller - TU_VERIFY(TUSB_CLASS_WIRELESS_CONTROLLER == itf_desc->bInterfaceClass && - TUD_BT_APP_SUBCLASS == itf_desc->bInterfaceSubClass && - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER == itf_desc->bInterfaceProtocol, - 0); - - TU_ASSERT(itf_desc->bNumEndpoints == 3 && max_len >= hci_itf_size); - - _btd_itf.itf_num = itf_desc->bInterfaceNumber; - - desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); - - TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && - TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer, - 0); - TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0); - _btd_itf.ep_ev = desc_ep->bEndpointAddress; - - // Open endpoint pair - TU_ASSERT(usbd_open_edpt_pair(rhport, tu_desc_next(desc_ep), 2, TUSB_XFER_BULK, - &_btd_itf.ep_acl_out, &_btd_itf.ep_acl_in), - 0); - - itf_desc = (tusb_desc_interface_t const *)tu_desc_next(tu_desc_next(tu_desc_next(desc_ep))); - - // Prepare for incoming data from host - TU_ASSERT(usbd_edpt_xfer(rhport, _btd_itf.ep_acl_out, _btd_itf.epout_buf, - CFG_TUD_BTH_DATA_EPSIZE), - 0); - - drv_len = hci_itf_size; - - // Ensure this is still BT Primary Controller - TU_ASSERT(TUSB_CLASS_WIRELESS_CONTROLLER == itf_desc->bInterfaceClass && - TUD_BT_APP_SUBCLASS == itf_desc->bInterfaceSubClass && - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER == itf_desc->bInterfaceProtocol, - 0); - TU_ASSERT(itf_desc->bNumEndpoints == 2 && max_len >= iso_alt_itf_size + drv_len); - - uint8_t dir; + tusb_desc_endpoint_t const *desc_ep; + uint16_t drv_len = 0; + // Size of single alternative of ISO interface + const uint16_t iso_alt_itf_size = sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t); + // Size of hci interface + const uint16_t hci_itf_size = sizeof(tusb_desc_interface_t) + 3 * sizeof(tusb_desc_endpoint_t); + // Ensure this is BT Primary Controller + TU_VERIFY(TUSB_CLASS_WIRELESS_CONTROLLER == itf_desc->bInterfaceClass && + TUD_BT_APP_SUBCLASS == itf_desc->bInterfaceSubClass && + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER == itf_desc->bInterfaceProtocol, 0); + + TU_ASSERT(itf_desc->bNumEndpoints == 3 && max_len >= hci_itf_size); + + _btd_itf.itf_num = itf_desc->bInterfaceNumber; + + desc_ep = (tusb_desc_endpoint_t const *) tu_desc_next(itf_desc); + + TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer, 0); + TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0); + _btd_itf.ep_ev = desc_ep->bEndpointAddress; + + // Open endpoint pair + TU_ASSERT(usbd_open_edpt_pair(rhport, tu_desc_next(desc_ep), 2, TUSB_XFER_BULK, &_btd_itf.ep_acl_out, + &_btd_itf.ep_acl_in), 0); + + itf_desc = (tusb_desc_interface_t const *)tu_desc_next(tu_desc_next(tu_desc_next(desc_ep))); + + // Prepare for incoming data from host + TU_ASSERT(usbd_edpt_xfer(rhport, _btd_itf.ep_acl_out, _btd_itf.epout_buf, CFG_TUD_BTH_DATA_EPSIZE), 0); + + drv_len = hci_itf_size; + + // Ensure this is still BT Primary Controller + TU_ASSERT(TUSB_CLASS_WIRELESS_CONTROLLER == itf_desc->bInterfaceClass && + TUD_BT_APP_SUBCLASS == itf_desc->bInterfaceSubClass && + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER == itf_desc->bInterfaceProtocol, 0); + TU_ASSERT(itf_desc->bNumEndpoints == 2 && max_len >= iso_alt_itf_size + drv_len); + + uint8_t dir; + + desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); + TU_ASSERT(itf_desc->bAlternateSetting < CFG_TUD_BTH_ISO_ALT_COUNT, 0); + TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT, 0); + dir = tu_edpt_dir(desc_ep->bEndpointAddress); + _btd_itf.ep_voice[dir] = desc_ep->bEndpointAddress; + // Store endpoint size for alternative + _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = (uint8_t) tu_edpt_packet_size(desc_ep); + + desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(desc_ep); + TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT, 0); + dir = tu_edpt_dir(desc_ep->bEndpointAddress); + _btd_itf.ep_voice[dir] = desc_ep->bEndpointAddress; + // Store endpoint size for alternative + _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = (uint8_t) tu_edpt_packet_size(desc_ep); + drv_len += iso_alt_itf_size; + + for (int i = 1; i < CFG_TUD_BTH_ISO_ALT_COUNT && drv_len + iso_alt_itf_size <= max_len; ++i) { + // Make sure rest of alternatives matches + itf_desc = (tusb_desc_interface_t const *)tu_desc_next(desc_ep); + if (itf_desc->bDescriptorType != TUSB_DESC_INTERFACE || + TUSB_CLASS_WIRELESS_CONTROLLER != itf_desc->bInterfaceClass || + TUD_BT_APP_SUBCLASS != itf_desc->bInterfaceSubClass || + TUD_BT_PROTOCOL_PRIMARY_CONTROLLER != itf_desc->bInterfaceProtocol) + { + // Not an Iso interface instance + break; + } + TU_ASSERT(itf_desc->bAlternateSetting < CFG_TUD_BTH_ISO_ALT_COUNT, 0); desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); - TU_ASSERT(itf_desc->bAlternateSetting < CFG_TUD_BTH_ISO_ALT_COUNT, 0); - TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT, 0); dir = tu_edpt_dir(desc_ep->bEndpointAddress); - _btd_itf.ep_voice[dir] = desc_ep->bEndpointAddress; - // Store endpoint size for alternative - _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = - (uint8_t)tu_edpt_packet_size(desc_ep); + // Verify that alternative endpoint are same as first ones + TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT && + _btd_itf.ep_voice[dir] == desc_ep->bEndpointAddress, 0); + _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = (uint8_t) tu_edpt_packet_size(desc_ep); desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(desc_ep); - TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT, 0); dir = tu_edpt_dir(desc_ep->bEndpointAddress); - _btd_itf.ep_voice[dir] = desc_ep->bEndpointAddress; - // Store endpoint size for alternative - _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = - (uint8_t)tu_edpt_packet_size(desc_ep); + // Verify that alternative endpoint are same as first ones + TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT && + _btd_itf.ep_voice[dir] == desc_ep->bEndpointAddress, 0); + _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = (uint8_t) tu_edpt_packet_size(desc_ep); drv_len += iso_alt_itf_size; + } - for (int i = 1; i < CFG_TUD_BTH_ISO_ALT_COUNT && drv_len + iso_alt_itf_size <= max_len; ++i) { - // Make sure rest of alternatives matches - itf_desc = (tusb_desc_interface_t const *)tu_desc_next(desc_ep); - if (itf_desc->bDescriptorType != TUSB_DESC_INTERFACE || - TUSB_CLASS_WIRELESS_CONTROLLER != itf_desc->bInterfaceClass || - TUD_BT_APP_SUBCLASS != itf_desc->bInterfaceSubClass || - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER != itf_desc->bInterfaceProtocol) { - // Not an Iso interface instance - break; - } - TU_ASSERT(itf_desc->bAlternateSetting < CFG_TUD_BTH_ISO_ALT_COUNT, 0); - - desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); - dir = tu_edpt_dir(desc_ep->bEndpointAddress); - // Verify that alternative endpoint are same as first ones - TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT && - _btd_itf.ep_voice[dir] == desc_ep->bEndpointAddress, - 0); - _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = - (uint8_t)tu_edpt_packet_size(desc_ep); - - desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(desc_ep); - dir = tu_edpt_dir(desc_ep->bEndpointAddress); - // Verify that alternative endpoint are same as first ones - TU_ASSERT(desc_ep->bDescriptorType == TUSB_DESC_ENDPOINT && - _btd_itf.ep_voice[dir] == desc_ep->bEndpointAddress, - 0); - _btd_itf.ep_voice_size[dir][itf_desc->bAlternateSetting] = - (uint8_t)tu_edpt_packet_size(desc_ep); - drv_len += iso_alt_itf_size; - } - - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class @@ -212,61 +199,67 @@ uint16_t btd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_ // return false to stall control endpoint (e.g unsupported request) bool btd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { - (void)rhport; - - if (stage == CONTROL_STAGE_SETUP) { - if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && - request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE) { - // HCI command packet addressing for single function Primary Controllers - // also compatible with historical mode if enabled - TU_VERIFY((request->bRequest == 0 && request->wValue == 0 && request->wIndex == 0) || - (CFG_TUD_BTH_HISTORICAL_COMPATIBLE && request->bRequest == 0xe0)); - } else if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) { - if (request->bRequest == TUSB_REQ_SET_INTERFACE && - _btd_itf.itf_num + 1 == request->wIndex) { - // TODO: Set interface it would involve changing size of endpoint size - } else { - // HCI command packet for Primary Controller function in a composite device - TU_VERIFY(request->bRequest == 0 && request->wValue == 0 && - request->wIndex == _btd_itf.itf_num); - } - } else - return false; - - return tud_control_xfer(rhport, request, &_btd_itf.hci_cmd, sizeof(_btd_itf.hci_cmd)); - } else if (stage == CONTROL_STAGE_DATA) { - // Handle class request only - TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - - if (tud_bt_hci_cmd_cb) - tud_bt_hci_cmd_cb(&_btd_itf.hci_cmd, - tu_min16(request->wLength, sizeof(_btd_itf.hci_cmd))); + (void)rhport; + + if ( stage == CONTROL_STAGE_SETUP ) + { + if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && + request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE) + { + // HCI command packet addressing for single function Primary Controllers + // also compatible with historical mode if enabled + TU_VERIFY((request->bRequest == 0 && request->wValue == 0 && request->wIndex == 0) || + (CFG_TUD_BTH_HISTORICAL_COMPATIBLE && request->bRequest == 0xe0)); + } + else if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) + { + if (request->bRequest == TUSB_REQ_SET_INTERFACE && _btd_itf.itf_num + 1 == request->wIndex) + { + // TODO: Set interface it would involve changing size of endpoint size + } + else + { + // HCI command packet for Primary Controller function in a composite device + TU_VERIFY(request->bRequest == 0 && request->wValue == 0 && request->wIndex == _btd_itf.itf_num); + } } + else return false; + + return tud_control_xfer(rhport, request, &_btd_itf.hci_cmd, sizeof(_btd_itf.hci_cmd)); + } + else if ( stage == CONTROL_STAGE_DATA ) + { + // Handle class request only + TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - return true; + if (tud_bt_hci_cmd_cb) tud_bt_hci_cmd_cb(&_btd_itf.hci_cmd, tu_min16(request->wLength, sizeof(_btd_itf.hci_cmd))); + } + + return true; } bool btd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void)result; - - // received new data from host - if (ep_addr == _btd_itf.ep_acl_out) { - if (tud_bt_acl_data_received_cb) - tud_bt_acl_data_received_cb(_btd_itf.epout_buf, xferred_bytes); - - // prepare for next data - TU_ASSERT(usbd_edpt_xfer(rhport, _btd_itf.ep_acl_out, _btd_itf.epout_buf, - CFG_TUD_BTH_DATA_EPSIZE)); - } else if (ep_addr == _btd_itf.ep_ev) { - if (tud_bt_event_sent_cb) - tud_bt_event_sent_cb((uint16_t)xferred_bytes); - } else if (ep_addr == _btd_itf.ep_acl_in) { - if (tud_bt_acl_data_sent_cb) - tud_bt_acl_data_sent_cb((uint16_t)xferred_bytes); - } - - return true; + (void)result; + + // received new data from host + if (ep_addr == _btd_itf.ep_acl_out) + { + if (tud_bt_acl_data_received_cb) tud_bt_acl_data_received_cb(_btd_itf.epout_buf, xferred_bytes); + + // prepare for next data + TU_ASSERT(usbd_edpt_xfer(rhport, _btd_itf.ep_acl_out, _btd_itf.epout_buf, CFG_TUD_BTH_DATA_EPSIZE)); + } + else if (ep_addr == _btd_itf.ep_ev) + { + if (tud_bt_event_sent_cb) tud_bt_event_sent_cb((uint16_t)xferred_bytes); + } + else if (ep_addr == _btd_itf.ep_acl_in) + { + if (tud_bt_acl_data_sent_cb) tud_bt_acl_data_sent_cb((uint16_t)xferred_bytes); + } + + return true; } #endif diff --git a/Libraries/tinyusb/src/class/bth/bth_device.h b/Libraries/tinyusb/src/class/bth/bth_device.h index 960fa181af2..4f63508393e 100644 --- a/Libraries/tinyusb/src/class/bth/bth_device.h +++ b/Libraries/tinyusb/src/class/bth/bth_device.h @@ -34,11 +34,11 @@ // Class Driver Configuration //--------------------------------------------------------------------+ #ifndef CFG_TUD_BTH_EVENT_EPSIZE -#define CFG_TUD_BTH_EVENT_EPSIZE 16 +#define CFG_TUD_BTH_EVENT_EPSIZE 16 #endif #ifndef CFG_TUD_BTH_DATA_EPSIZE -#define CFG_TUD_BTH_DATA_EPSIZE 64 +#define CFG_TUD_BTH_DATA_EPSIZE 64 #endif // Allow BTH class to work in historically compatibility mode where the bRequest is always 0xe0. @@ -47,14 +47,15 @@ #define CFG_TUD_BTH_HISTORICAL_COMPATIBLE 0 #endif -typedef struct TU_ATTR_PACKED { - uint16_t op_code; - uint8_t param_length; - uint8_t param[255]; +typedef struct TU_ATTR_PACKED +{ + uint16_t op_code; + uint8_t param_length; + uint8_t param[255]; } bt_hci_cmd_t; #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -102,15 +103,15 @@ bool tud_bt_acl_data_send(void *acl_data, uint16_t data_len); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void btd_init(void); -bool btd_deinit(void); -void btd_reset(uint8_t rhport); -uint16_t btd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool btd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); -bool btd_xfer_cb(uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); +void btd_init (void); +bool btd_deinit (void); +void btd_reset (uint8_t rhport); +uint16_t btd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool btd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +bool btd_xfer_cb (uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_BTH_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/cdc.h b/Libraries/tinyusb/src/class/cdc/cdc.h index 9353eaae3b8..5cbd658fe24 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc.h +++ b/Libraries/tinyusb/src/class/cdc/cdc.h @@ -35,7 +35,7 @@ #include "common/tusb_common.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif /** \defgroup ClassDriver_CDC_Common Common Definitions @@ -46,82 +46,68 @@ extern "C" { //--------------------------------------------------------------------+ /// Communication Interface Subclass Codes -typedef enum { - CDC_COMM_SUBCLASS_DIRECT_LINE_CONTROL_MODEL = - 0x01, ///< Direct Line Control Model [USBPSTN1.2] - CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL = - 0x02, ///< Abstract Control Model [USBPSTN1.2] - CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL = - 0x03, ///< Telephone Control Model [USBPSTN1.2] - CDC_COMM_SUBCLASS_MULTICHANNEL_CONTROL_MODEL = - 0x04, ///< Multi-Channel Control Model [USBISDN1.2] - CDC_COMM_SUBCLASS_CAPI_CONTROL_MODEL = 0x05, ///< CAPI Control Model [USBISDN1.2] - CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL = - 0x06, ///< Ethernet Networking Control Model [USBECM1.2] - CDC_COMM_SUBCLASS_ATM_NETWORKING_CONTROL_MODEL = - 0x07, ///< ATM Networking Control Model [USBATM1.2] - CDC_COMM_SUBCLASS_WIRELESS_HANDSET_CONTROL_MODEL = - 0x08, ///< Wireless Handset Control Model [USBWMC1.1] - CDC_COMM_SUBCLASS_DEVICE_MANAGEMENT = 0x09, ///< Device Management [USBWMC1.1] - CDC_COMM_SUBCLASS_MOBILE_DIRECT_LINE_MODEL = - 0x0A, ///< Mobile Direct Line Model [USBWMC1.1] - CDC_COMM_SUBCLASS_OBEX = 0x0B, ///< OBEX [USBWMC1.1] - CDC_COMM_SUBCLASS_ETHERNET_EMULATION_MODEL = - 0x0C, ///< Ethernet Emulation Model [USBEEM1.0] - CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL = - 0x0D ///< Network Control Model [USBNCM1.0] +typedef enum +{ + CDC_COMM_SUBCLASS_DIRECT_LINE_CONTROL_MODEL = 0x01 , ///< Direct Line Control Model [USBPSTN1.2] + CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL = 0x02 , ///< Abstract Control Model [USBPSTN1.2] + CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL = 0x03 , ///< Telephone Control Model [USBPSTN1.2] + CDC_COMM_SUBCLASS_MULTICHANNEL_CONTROL_MODEL = 0x04 , ///< Multi-Channel Control Model [USBISDN1.2] + CDC_COMM_SUBCLASS_CAPI_CONTROL_MODEL = 0x05 , ///< CAPI Control Model [USBISDN1.2] + CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL = 0x06 , ///< Ethernet Networking Control Model [USBECM1.2] + CDC_COMM_SUBCLASS_ATM_NETWORKING_CONTROL_MODEL = 0x07 , ///< ATM Networking Control Model [USBATM1.2] + CDC_COMM_SUBCLASS_WIRELESS_HANDSET_CONTROL_MODEL = 0x08 , ///< Wireless Handset Control Model [USBWMC1.1] + CDC_COMM_SUBCLASS_DEVICE_MANAGEMENT = 0x09 , ///< Device Management [USBWMC1.1] + CDC_COMM_SUBCLASS_MOBILE_DIRECT_LINE_MODEL = 0x0A , ///< Mobile Direct Line Model [USBWMC1.1] + CDC_COMM_SUBCLASS_OBEX = 0x0B , ///< OBEX [USBWMC1.1] + CDC_COMM_SUBCLASS_ETHERNET_EMULATION_MODEL = 0x0C , ///< Ethernet Emulation Model [USBEEM1.0] + CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL = 0x0D ///< Network Control Model [USBNCM1.0] } cdc_comm_sublcass_type_t; /// Communication Interface Protocol Codes -typedef enum { - CDC_COMM_PROTOCOL_NONE = 0x00, ///< No specific protocol - CDC_COMM_PROTOCOL_ATCOMMAND = 0x01, ///< AT Commands: V.250 etc - CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101 = 0x02, ///< AT Commands defined by PCCA-101 - CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101_AND_ANNEXO = - 0x03, ///< AT Commands defined by PCCA-101 & Annex O - CDC_COMM_PROTOCOL_ATCOMMAND_GSM_707 = 0x04, ///< AT Commands defined by GSM 07.07 - CDC_COMM_PROTOCOL_ATCOMMAND_3GPP_27007 = 0x05, ///< AT Commands defined by 3GPP 27.007 - CDC_COMM_PROTOCOL_ATCOMMAND_CDMA = 0x06, ///< AT Commands defined by TIA for CDMA - CDC_COMM_PROTOCOL_ETHERNET_EMULATION_MODEL = 0x07 ///< Ethernet Emulation Model +typedef enum +{ + CDC_COMM_PROTOCOL_NONE = 0x00 , ///< No specific protocol + CDC_COMM_PROTOCOL_ATCOMMAND = 0x01 , ///< AT Commands: V.250 etc + CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101 = 0x02 , ///< AT Commands defined by PCCA-101 + CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101_AND_ANNEXO = 0x03 , ///< AT Commands defined by PCCA-101 & Annex O + CDC_COMM_PROTOCOL_ATCOMMAND_GSM_707 = 0x04 , ///< AT Commands defined by GSM 07.07 + CDC_COMM_PROTOCOL_ATCOMMAND_3GPP_27007 = 0x05 , ///< AT Commands defined by 3GPP 27.007 + CDC_COMM_PROTOCOL_ATCOMMAND_CDMA = 0x06 , ///< AT Commands defined by TIA for CDMA + CDC_COMM_PROTOCOL_ETHERNET_EMULATION_MODEL = 0x07 ///< Ethernet Emulation Model } cdc_comm_protocol_type_t; //------------- SubType Descriptor in COMM Functional Descriptor -------------// /// Communication Interface SubType Descriptor -typedef enum { - CDC_FUNC_DESC_HEADER = - 0x00, ///< Header Functional Descriptor, which marks the beginning of the concatenated set of functional descriptors for the interface. - CDC_FUNC_DESC_CALL_MANAGEMENT = 0x01, ///< Call Management Functional Descriptor. - CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT = - 0x02, ///< Abstract Control Management Functional Descriptor. - CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT = 0x03, ///< Direct Line Management Functional Descriptor. - CDC_FUNC_DESC_TELEPHONE_RINGER = 0x04, ///< Telephone Ringer Functional Descriptor. - CDC_FUNC_DESC_TELEPHONE_CALL_AND_LINE_STATE_REPORTING_CAPACITY = - 0x05, ///< Telephone Call and Line State Reporting Capabilities Functional Descriptor. - CDC_FUNC_DESC_UNION = 0x06, ///< Union Functional Descriptor - CDC_FUNC_DESC_COUNTRY_SELECTION = 0x07, ///< Country Selection Functional Descriptor - CDC_FUNC_DESC_TELEPHONE_OPERATIONAL_MODES = - 0x08, ///< Telephone Operational ModesFunctional Descriptor - CDC_FUNC_DESC_USB_TERMINAL = 0x09, ///< USB Terminal Functional Descriptor - CDC_FUNC_DESC_NETWORK_CHANNEL_TERMINAL = 0x0A, ///< Network Channel Terminal Descriptor - CDC_FUNC_DESC_PROTOCOL_UNIT = 0x0B, ///< Protocol Unit Functional Descriptor - CDC_FUNC_DESC_EXTENSION_UNIT = 0x0C, ///< Extension Unit Functional Descriptor - CDC_FUNC_DESC_MULTICHANEL_MANAGEMENT = 0x0D, ///< Multi-Channel Management Functional Descriptor - CDC_FUNC_DESC_CAPI_CONTROL_MANAGEMENT = 0x0E, ///< CAPI Control Management Functional Descriptor - CDC_FUNC_DESC_ETHERNET_NETWORKING = 0x0F, ///< Ethernet Networking Functional Descriptor - CDC_FUNC_DESC_ATM_NETWORKING = 0x10, ///< ATM Networking Functional Descriptor - CDC_FUNC_DESC_WIRELESS_HANDSET_CONTROL_MODEL = - 0x11, ///< Wireless Handset Control Model Functional Descriptor - CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL = - 0x12, ///< Mobile Direct Line Model Functional Descriptor - CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL_DETAIL = 0x13, ///< MDLM Detail Functional Descriptor - CDC_FUNC_DESC_DEVICE_MANAGEMENT_MODEL = 0x14, ///< Device Management Model Functional Descriptor - CDC_FUNC_DESC_OBEX = 0x15, ///< OBEX Functional Descriptor - CDC_FUNC_DESC_COMMAND_SET = 0x16, ///< Command Set Functional Descriptor - CDC_FUNC_DESC_COMMAND_SET_DETAIL = 0x17, ///< Command Set Detail Functional Descriptor - CDC_FUNC_DESC_TELEPHONE_CONTROL_MODEL = 0x18, ///< Telephone Control Model Functional Descriptor - CDC_FUNC_DESC_OBEX_SERVICE_IDENTIFIER = 0x19, ///< OBEX Service Identifier Functional Descriptor - CDC_FUNC_DESC_NCM = 0x1A, ///< NCM Functional Descriptor -} cdc_func_desc_type_t; +typedef enum +{ + CDC_FUNC_DESC_HEADER = 0x00 , ///< Header Functional Descriptor, which marks the beginning of the concatenated set of functional descriptors for the interface. + CDC_FUNC_DESC_CALL_MANAGEMENT = 0x01 , ///< Call Management Functional Descriptor. + CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT = 0x02 , ///< Abstract Control Management Functional Descriptor. + CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT = 0x03 , ///< Direct Line Management Functional Descriptor. + CDC_FUNC_DESC_TELEPHONE_RINGER = 0x04 , ///< Telephone Ringer Functional Descriptor. + CDC_FUNC_DESC_TELEPHONE_CALL_AND_LINE_STATE_REPORTING_CAPACITY = 0x05 , ///< Telephone Call and Line State Reporting Capabilities Functional Descriptor. + CDC_FUNC_DESC_UNION = 0x06 , ///< Union Functional Descriptor + CDC_FUNC_DESC_COUNTRY_SELECTION = 0x07 , ///< Country Selection Functional Descriptor + CDC_FUNC_DESC_TELEPHONE_OPERATIONAL_MODES = 0x08 , ///< Telephone Operational ModesFunctional Descriptor + CDC_FUNC_DESC_USB_TERMINAL = 0x09 , ///< USB Terminal Functional Descriptor + CDC_FUNC_DESC_NETWORK_CHANNEL_TERMINAL = 0x0A , ///< Network Channel Terminal Descriptor + CDC_FUNC_DESC_PROTOCOL_UNIT = 0x0B , ///< Protocol Unit Functional Descriptor + CDC_FUNC_DESC_EXTENSION_UNIT = 0x0C , ///< Extension Unit Functional Descriptor + CDC_FUNC_DESC_MULTICHANEL_MANAGEMENT = 0x0D , ///< Multi-Channel Management Functional Descriptor + CDC_FUNC_DESC_CAPI_CONTROL_MANAGEMENT = 0x0E , ///< CAPI Control Management Functional Descriptor + CDC_FUNC_DESC_ETHERNET_NETWORKING = 0x0F , ///< Ethernet Networking Functional Descriptor + CDC_FUNC_DESC_ATM_NETWORKING = 0x10 , ///< ATM Networking Functional Descriptor + CDC_FUNC_DESC_WIRELESS_HANDSET_CONTROL_MODEL = 0x11 , ///< Wireless Handset Control Model Functional Descriptor + CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL = 0x12 , ///< Mobile Direct Line Model Functional Descriptor + CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL_DETAIL = 0x13 , ///< MDLM Detail Functional Descriptor + CDC_FUNC_DESC_DEVICE_MANAGEMENT_MODEL = 0x14 , ///< Device Management Model Functional Descriptor + CDC_FUNC_DESC_OBEX = 0x15 , ///< OBEX Functional Descriptor + CDC_FUNC_DESC_COMMAND_SET = 0x16 , ///< Command Set Functional Descriptor + CDC_FUNC_DESC_COMMAND_SET_DETAIL = 0x17 , ///< Command Set Detail Functional Descriptor + CDC_FUNC_DESC_TELEPHONE_CONTROL_MODEL = 0x18 , ///< Telephone Control Model Functional Descriptor + CDC_FUNC_DESC_OBEX_SERVICE_IDENTIFIER = 0x19 , ///< OBEX Service Identifier Functional Descriptor + CDC_FUNC_DESC_NCM = 0x1A , ///< NCM Functional Descriptor +}cdc_func_desc_type_t; //--------------------------------------------------------------------+ // CDC Data Interface Class @@ -130,22 +116,20 @@ typedef enum { // SUBCLASS code of Data Interface is not used and should/must be zero // Data Interface Protocol Codes -typedef enum { - CDC_DATA_PROTOCOL_ISDN_BRI = 0x30, ///< Physical interface protocol for ISDN BRI - CDC_DATA_PROTOCOL_HDLC = 0x31, ///< HDLC - CDC_DATA_PROTOCOL_TRANSPARENT = 0x32, ///< Transparent - CDC_DATA_PROTOCOL_Q921_MANAGEMENT = 0x50, ///< Management protocol for Q.921 data link protocol - CDC_DATA_PROTOCOL_Q921_DATA_LINK = 0x51, ///< Data link protocol for Q.931 - CDC_DATA_PROTOCOL_Q921_TEI_MULTIPLEXOR = 0x52, ///< TEI-multiplexor for Q.921 data link protocol - CDC_DATA_PROTOCOL_V42BIS_DATA_COMPRESSION = 0x90, ///< Data compression procedures - CDC_DATA_PROTOCOL_EURO_ISDN = 0x91, ///< Euro-ISDN protocol control - CDC_DATA_PROTOCOL_V24_RATE_ADAPTION_TO_ISDN = 0x92, ///< V.24 rate adaptation to ISDN - CDC_DATA_PROTOCOL_CAPI_COMMAND = 0x93, ///< CAPI Commands - CDC_DATA_PROTOCOL_HOST_BASED_DRIVER = - 0xFD, ///< Host based driver. Note: This protocol code should only be used in messages between host and device to identify the host driver portion of a protocol stack. - CDC_DATA_PROTOCOL_IN_PROTOCOL_UNIT_FUNCTIONAL_DESCRIPTOR = - 0xFE ///< The protocol(s) are described using a ProtocolUnit Functional Descriptors on Communications Class Interface -} cdc_data_protocol_type_t; +typedef enum{ + CDC_DATA_PROTOCOL_ISDN_BRI = 0x30, ///< Physical interface protocol for ISDN BRI + CDC_DATA_PROTOCOL_HDLC = 0x31, ///< HDLC + CDC_DATA_PROTOCOL_TRANSPARENT = 0x32, ///< Transparent + CDC_DATA_PROTOCOL_Q921_MANAGEMENT = 0x50, ///< Management protocol for Q.921 data link protocol + CDC_DATA_PROTOCOL_Q921_DATA_LINK = 0x51, ///< Data link protocol for Q.931 + CDC_DATA_PROTOCOL_Q921_TEI_MULTIPLEXOR = 0x52, ///< TEI-multiplexor for Q.921 data link protocol + CDC_DATA_PROTOCOL_V42BIS_DATA_COMPRESSION = 0x90, ///< Data compression procedures + CDC_DATA_PROTOCOL_EURO_ISDN = 0x91, ///< Euro-ISDN protocol control + CDC_DATA_PROTOCOL_V24_RATE_ADAPTION_TO_ISDN = 0x92, ///< V.24 rate adaptation to ISDN + CDC_DATA_PROTOCOL_CAPI_COMMAND = 0x93, ///< CAPI Commands + CDC_DATA_PROTOCOL_HOST_BASED_DRIVER = 0xFD, ///< Host based driver. Note: This protocol code should only be used in messages between host and device to identify the host driver portion of a protocol stack. + CDC_DATA_PROTOCOL_IN_PROTOCOL_UNIT_FUNCTIONAL_DESCRIPTOR = 0xFE ///< The protocol(s) are described using a ProtocolUnit Functional Descriptors on Communications Class Interface +}cdc_data_protocol_type_t; //--------------------------------------------------------------------+ // Management Element Request (Control Endpoint) @@ -153,74 +137,72 @@ typedef enum { /// Communication Interface Management Element Request Codes typedef enum { - CDC_REQUEST_SEND_ENCAPSULATED_COMMAND = - 0x00, ///< is used to issue a command in the format of the supported control protocol of the Communications Class interface - CDC_REQUEST_GET_ENCAPSULATED_RESPONSE = - 0x01, ///< is used to request a response in the format of the supported control protocol of the Communications Class interface. - CDC_REQUEST_SET_COMM_FEATURE = 0x02, - CDC_REQUEST_GET_COMM_FEATURE = 0x03, - CDC_REQUEST_CLEAR_COMM_FEATURE = 0x04, - - CDC_REQUEST_SET_AUX_LINE_STATE = 0x10, - CDC_REQUEST_SET_HOOK_STATE = 0x11, - CDC_REQUEST_PULSE_SETUP = 0x12, - CDC_REQUEST_SEND_PULSE = 0x13, - CDC_REQUEST_SET_PULSE_TIME = 0x14, - CDC_REQUEST_RING_AUX_JACK = 0x15, - - CDC_REQUEST_SET_LINE_CODING = 0x20, - CDC_REQUEST_GET_LINE_CODING = 0x21, - CDC_REQUEST_SET_CONTROL_LINE_STATE = 0x22, - CDC_REQUEST_SEND_BREAK = 0x23, - - CDC_REQUEST_SET_RINGER_PARMS = 0x30, - CDC_REQUEST_GET_RINGER_PARMS = 0x31, - CDC_REQUEST_SET_OPERATION_PARMS = 0x32, - CDC_REQUEST_GET_OPERATION_PARMS = 0x33, - CDC_REQUEST_SET_LINE_PARMS = 0x34, - CDC_REQUEST_GET_LINE_PARMS = 0x35, - CDC_REQUEST_DIAL_DIGITS = 0x36, - CDC_REQUEST_SET_UNIT_PARAMETER = 0x37, - CDC_REQUEST_GET_UNIT_PARAMETER = 0x38, - CDC_REQUEST_CLEAR_UNIT_PARAMETER = 0x39, - CDC_REQUEST_GET_PROFILE = 0x3A, - - CDC_REQUEST_SET_ETHERNET_MULTICAST_FILTERS = 0x40, - CDC_REQUEST_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, - CDC_REQUEST_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, - CDC_REQUEST_SET_ETHERNET_PACKET_FILTER = 0x43, - CDC_REQUEST_GET_ETHERNET_STATISTIC = 0x44, - - CDC_REQUEST_SET_ATM_DATA_FORMAT = 0x50, - CDC_REQUEST_GET_ATM_DEVICE_STATISTICS = 0x51, - CDC_REQUEST_SET_ATM_DEFAULT_VC = 0x52, - CDC_REQUEST_GET_ATM_VC_STATISTICS = 0x53, - - CDC_REQUEST_MDLM_SEMANTIC_MODEL = 0x60, + CDC_REQUEST_SEND_ENCAPSULATED_COMMAND = 0x00, ///< is used to issue a command in the format of the supported control protocol of the Communications Class interface + CDC_REQUEST_GET_ENCAPSULATED_RESPONSE = 0x01, ///< is used to request a response in the format of the supported control protocol of the Communications Class interface. + CDC_REQUEST_SET_COMM_FEATURE = 0x02, + CDC_REQUEST_GET_COMM_FEATURE = 0x03, + CDC_REQUEST_CLEAR_COMM_FEATURE = 0x04, + + CDC_REQUEST_SET_AUX_LINE_STATE = 0x10, + CDC_REQUEST_SET_HOOK_STATE = 0x11, + CDC_REQUEST_PULSE_SETUP = 0x12, + CDC_REQUEST_SEND_PULSE = 0x13, + CDC_REQUEST_SET_PULSE_TIME = 0x14, + CDC_REQUEST_RING_AUX_JACK = 0x15, + + CDC_REQUEST_SET_LINE_CODING = 0x20, + CDC_REQUEST_GET_LINE_CODING = 0x21, + CDC_REQUEST_SET_CONTROL_LINE_STATE = 0x22, + CDC_REQUEST_SEND_BREAK = 0x23, + + CDC_REQUEST_SET_RINGER_PARMS = 0x30, + CDC_REQUEST_GET_RINGER_PARMS = 0x31, + CDC_REQUEST_SET_OPERATION_PARMS = 0x32, + CDC_REQUEST_GET_OPERATION_PARMS = 0x33, + CDC_REQUEST_SET_LINE_PARMS = 0x34, + CDC_REQUEST_GET_LINE_PARMS = 0x35, + CDC_REQUEST_DIAL_DIGITS = 0x36, + CDC_REQUEST_SET_UNIT_PARAMETER = 0x37, + CDC_REQUEST_GET_UNIT_PARAMETER = 0x38, + CDC_REQUEST_CLEAR_UNIT_PARAMETER = 0x39, + CDC_REQUEST_GET_PROFILE = 0x3A, + + CDC_REQUEST_SET_ETHERNET_MULTICAST_FILTERS = 0x40, + CDC_REQUEST_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, + CDC_REQUEST_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, + CDC_REQUEST_SET_ETHERNET_PACKET_FILTER = 0x43, + CDC_REQUEST_GET_ETHERNET_STATISTIC = 0x44, + + CDC_REQUEST_SET_ATM_DATA_FORMAT = 0x50, + CDC_REQUEST_GET_ATM_DEVICE_STATISTICS = 0x51, + CDC_REQUEST_SET_ATM_DEFAULT_VC = 0x52, + CDC_REQUEST_GET_ATM_VC_STATISTICS = 0x53, + + CDC_REQUEST_MDLM_SEMANTIC_MODEL = 0x60, } cdc_management_request_t; typedef enum { - CDC_CONTROL_LINE_STATE_DTR = 0x01, - CDC_CONTROL_LINE_STATE_RTS = 0x02, + CDC_CONTROL_LINE_STATE_DTR = 0x01, + CDC_CONTROL_LINE_STATE_RTS = 0x02, } cdc_control_line_state_t; typedef enum { - CDC_LINE_CODING_STOP_BITS_1 = 0, // 1 bit - CDC_LINE_CODING_STOP_BITS_1_5 = 1, // 1.5 bits - CDC_LINE_CODING_STOP_BITS_2 = 2, // 2 bits + CDC_LINE_CODING_STOP_BITS_1 = 0, // 1 bit + CDC_LINE_CODING_STOP_BITS_1_5 = 1, // 1.5 bits + CDC_LINE_CODING_STOP_BITS_2 = 2, // 2 bits } cdc_line_coding_stopbits_t; // TODO Backward compatible for typos. Maybe removed in the future release -#define CDC_LINE_CONDING_STOP_BITS_1 CDC_LINE_CODING_STOP_BITS_1 +#define CDC_LINE_CONDING_STOP_BITS_1 CDC_LINE_CODING_STOP_BITS_1 #define CDC_LINE_CONDING_STOP_BITS_1_5 CDC_LINE_CODING_STOP_BITS_1_5 -#define CDC_LINE_CONDING_STOP_BITS_2 CDC_LINE_CODING_STOP_BITS_2 +#define CDC_LINE_CONDING_STOP_BITS_2 CDC_LINE_CODING_STOP_BITS_2 typedef enum { - CDC_LINE_CODING_PARITY_NONE = 0, - CDC_LINE_CODING_PARITY_ODD = 1, - CDC_LINE_CODING_PARITY_EVEN = 2, - CDC_LINE_CODING_PARITY_MARK = 3, - CDC_LINE_CODING_PARITY_SPACE = 4, + CDC_LINE_CODING_PARITY_NONE = 0, + CDC_LINE_CODING_PARITY_ODD = 1, + CDC_LINE_CODING_PARITY_EVEN = 2, + CDC_LINE_CODING_PARITY_MARK = 3, + CDC_LINE_CODING_PARITY_SPACE = 4, } cdc_line_coding_parity_t; //--------------------------------------------------------------------+ @@ -229,19 +211,16 @@ typedef enum { /// 6.3 Notification Codes typedef enum { - CDC_NOTIF_NETWORK_CONNECTION = - 0x00, ///< This notification allows the device to notify the host about network connection status. - CDC_NOTIF_RESPONSE_AVAILABLE = - 0x01, ///< This notification allows the device to notify the hostthat a response is available. This response can be retrieved with a subsequent \ref CDC_REQUEST_GET_ENCAPSULATED_RESPONSE request. - CDC_NOTIF_AUX_JACK_HOOK_STATE = 0x08, - CDC_NOTIF_RING_DETECT = 0x09, - CDC_NOTIF_SERIAL_STATE = 0x20, - CDC_NOTIF_CALL_STATE_CHANGE = 0x28, - CDC_NOTIF_LINE_STATE_CHANGE = 0x29, - CDC_NOTIF_CONNECTION_SPEED_CHANGE = - 0x2A, ///< This notification allows the device to inform the host-networking driver that a change in either the upstream or the downstream bit rate of the connection has occurred - CDC_NOTIF_MDLM_SEMANTIC_MODEL_NOTIFICATION = 0x40, -} cdc_notification_request_t; + CDC_NOTIF_NETWORK_CONNECTION = 0x00, ///< This notification allows the device to notify the host about network connection status. + CDC_NOTIF_RESPONSE_AVAILABLE = 0x01, ///< This notification allows the device to notify the hostthat a response is available. This response can be retrieved with a subsequent \ref CDC_REQUEST_GET_ENCAPSULATED_RESPONSE request. + CDC_NOTIF_AUX_JACK_HOOK_STATE = 0x08, + CDC_NOTIF_RING_DETECT = 0x09, + CDC_NOTIF_SERIAL_STATE = 0x20, + CDC_NOTIF_CALL_STATE_CHANGE = 0x28, + CDC_NOTIF_LINE_STATE_CHANGE = 0x29, + CDC_NOTIF_CONNECTION_SPEED_CHANGE = 0x2A, ///< This notification allows the device to inform the host-networking driver that a change in either the upstream or the downstream bit rate of the connection has occurred + CDC_NOTIF_MDLM_SEMANTIC_MODEL_NOTIFICATION = 0x40, +}cdc_notification_request_t; //--------------------------------------------------------------------+ // Class Specific Functional Descriptor (Communication Interface) @@ -252,50 +231,51 @@ TU_ATTR_PACKED_BEGIN TU_ATTR_BIT_FIELD_ORDER_BEGIN /// Header Functional Descriptor (Communication Interface) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUNC_DESC_ - uint16_t bcdCDC; ///< CDC release number in Binary-Coded Decimal -} cdc_desc_func_header_t; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUNC_DESC_ + uint16_t bcdCDC ; ///< CDC release number in Binary-Coded Decimal +}cdc_desc_func_header_t; /// Union Functional Descriptor (Communication Interface) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - uint8_t bControlInterface; ///< Interface number of Communication Interface - uint8_t bSubordinateInterface; ///< Array of Interface number of Data Interface -} cdc_desc_func_union_t; - -#define cdc_desc_func_union_n_t(no_slave) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bControlInterface; \ - uint8_t bSubordinateInterface[no_slave]; \ - } +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + uint8_t bControlInterface ; ///< Interface number of Communication Interface + uint8_t bSubordinateInterface ; ///< Array of Interface number of Data Interface +}cdc_desc_func_union_t; + +#define cdc_desc_func_union_n_t(no_slave)\ + struct TU_ATTR_PACKED { \ + uint8_t bLength ;\ + uint8_t bDescriptorType ;\ + uint8_t bDescriptorSubType ;\ + uint8_t bControlInterface ;\ + uint8_t bSubordinateInterface[no_slave] ;\ +} /// Country Selection Functional Descriptor (Communication Interface) -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - uint8_t - iCountryCodeRelDate; ///< Index of a string giving the release date for the implemented ISO 3166 Country Codes. - uint16_t - wCountryCode; ///< Country code in the format as defined in [ISO3166], release date as specified inoffset 3 for the first supported country. -} cdc_desc_func_country_selection_t; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + uint8_t iCountryCodeRelDate ; ///< Index of a string giving the release date for the implemented ISO 3166 Country Codes. + uint16_t wCountryCode ; ///< Country code in the format as defined in [ISO3166], release date as specified inoffset 3 for the first supported country. +}cdc_desc_func_country_selection_t; #define cdc_desc_func_country_selection_n_t(no_country) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t iCountryCodeRelDate; \ - uint16_t wCountryCode[no_country]; \ - } + struct TU_ATTR_PACKED { \ + uint8_t bLength ;\ + uint8_t bDescriptorType ;\ + uint8_t bDescriptorSubType ;\ + uint8_t iCountryCodeRelDate ;\ + uint16_t wCountryCode[no_country] ;\ +} //--------------------------------------------------------------------+ // PUBLIC SWITCHED TELEPHONE NETWORK (PSTN) SUBCLASS @@ -303,144 +283,140 @@ typedef struct TU_ATTR_PACKED { /// \brief Call Management Functional Descriptor /// \details This functional descriptor describes the processing of calls for the Communications Class interface. -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - - struct { - uint8_t - handle_call : 1; ///< 0 - Device sends/receives call management information only over the Communications Class interface. 1 - Device can send/receive call management information over a Data Class interface. - uint8_t - send_recv_call : 1; ///< 0 - Device does not handle call management itself. 1 - Device handles call management itself. - uint8_t TU_RESERVED : 6; - } bmCapabilities; - - uint8_t bDataInterface; -} cdc_desc_func_call_management_t; - -typedef struct TU_ATTR_PACKED { - uint8_t - support_comm_request : 1; ///< Device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and Get_Comm_Feature. - uint8_t - support_line_request : 1; ///< Device supports the request combination of Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State. - uint8_t support_send_break : 1; ///< Device supports the request Send_Break - uint8_t - support_notification_network_connection : 1; ///< Device supports the notification Network_Connection. - uint8_t TU_RESERVED : 4; -} cdc_acm_capability_t; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + + struct { + uint8_t handle_call : 1; ///< 0 - Device sends/receives call management information only over the Communications Class interface. 1 - Device can send/receive call management information over a Data Class interface. + uint8_t send_recv_call : 1; ///< 0 - Device does not handle call management itself. 1 - Device handles call management itself. + uint8_t TU_RESERVED : 6; + } bmCapabilities; + + uint8_t bDataInterface; +}cdc_desc_func_call_management_t; + +typedef struct TU_ATTR_PACKED +{ + uint8_t support_comm_request : 1; ///< Device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and Get_Comm_Feature. + uint8_t support_line_request : 1; ///< Device supports the request combination of Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State. + uint8_t support_send_break : 1; ///< Device supports the request Send_Break + uint8_t support_notification_network_connection : 1; ///< Device supports the notification Network_Connection. + uint8_t TU_RESERVED : 4; +}cdc_acm_capability_t; TU_VERIFY_STATIC(sizeof(cdc_acm_capability_t) == 1, "mostly problem with compiler"); /// Abstract Control Management Functional Descriptor /// This functional descriptor describes the commands supported by by the Communications Class interface with SubClass code of \ref CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - cdc_acm_capability_t bmCapabilities; -} cdc_desc_func_acm_t; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + cdc_acm_capability_t bmCapabilities ; +}cdc_desc_func_acm_t; /// \brief Direct Line Management Functional Descriptor /// \details This functional descriptor describes the commands supported by the Communications Class interface with SubClass code of \ref CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - struct { - uint8_t - require_pulse_setup : 1; ///< Device requires extra Pulse_Setup request during pulse dialing sequence to disengage holding circuit. - uint8_t - support_aux_request : 1; ///< Device supports the request combination of Set_Aux_Line_State, Ring_Aux_Jack, and notification Aux_Jack_Hook_State. - uint8_t - support_pulse_request : 1; ///< Device supports the request combination of Pulse_Setup, Send_Pulse, and Set_Pulse_Time. - uint8_t TU_RESERVED : 5; - } bmCapabilities; -} cdc_desc_func_direct_line_management_t; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + struct { + uint8_t require_pulse_setup : 1; ///< Device requires extra Pulse_Setup request during pulse dialing sequence to disengage holding circuit. + uint8_t support_aux_request : 1; ///< Device supports the request combination of Set_Aux_Line_State, Ring_Aux_Jack, and notification Aux_Jack_Hook_State. + uint8_t support_pulse_request : 1; ///< Device supports the request combination of Pulse_Setup, Send_Pulse, and Set_Pulse_Time. + uint8_t TU_RESERVED : 5; + } bmCapabilities; +}cdc_desc_func_direct_line_management_t; /// \brief Telephone Ringer Functional Descriptor /// \details The Telephone Ringer functional descriptor describes the ringer capabilities supported by the Communications Class interface, /// with the SubClass code of \ref CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - uint8_t bRingerVolSteps; - uint8_t bNumRingerPatterns; -} cdc_desc_func_telephone_ringer_t; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + uint8_t bRingerVolSteps ; + uint8_t bNumRingerPatterns ; +}cdc_desc_func_telephone_ringer_t; /// \brief Telephone Operational Modes Functional Descriptor /// \details The Telephone Operational Modes functional descriptor describes the operational modes supported by /// the Communications Class interface, with the SubClass code of \ref CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - struct { - uint8_t simple_mode : 1; - uint8_t standalone_mode : 1; - uint8_t computer_centric_mode : 1; - uint8_t TU_RESERVED : 5; - } bmCapabilities; -} cdc_desc_func_telephone_operational_modes_t; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + struct { + uint8_t simple_mode : 1; + uint8_t standalone_mode : 1; + uint8_t computer_centric_mode : 1; + uint8_t TU_RESERVED : 5; + } bmCapabilities; +}cdc_desc_func_telephone_operational_modes_t; /// \brief Telephone Call and Line State Reporting Capabilities Descriptor /// \details The Telephone Call and Line State Reporting Capabilities functional descriptor describes the abilities of a /// telephone device to report optional call and line states. -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType one of above CDC_FUCN_DESC_ - struct { - uint32_t - interrupted_dialtone : 1; ///< 0 : Reports only dialtone (does not differentiate between normal and interrupted dialtone). 1 : Reports interrupted dialtone in addition to normal dialtone - uint32_t - ringback_busy_fastbusy : 1; ///< 0 : Reports only dialing state. 1 : Reports ringback, busy, and fast busy states. - uint32_t caller_id : 1; ///< 0 : Does not report caller ID. 1 : Reports caller ID information. - uint32_t - incoming_distinctive : 1; ///< 0 : Reports only incoming ringing. 1 : Reports incoming distinctive ringing patterns. - uint32_t - dual_tone_multi_freq : 1; ///< 0 : Cannot report dual tone multi-frequency (DTMF) digits input remotely over the telephone line. 1 : Can report DTMF digits input remotely over the telephone line. - uint32_t - line_state_change : 1; ///< 0 : Does not support line state change notification. 1 : Does support line state change notification - uint32_t TU_RESERVED0 : 2; - uint32_t TU_RESERVED1 : 16; - uint32_t TU_RESERVED2 : 8; - } bmCapabilities; -} cdc_desc_func_telephone_call_state_reporting_capabilities_t; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_ + struct { + uint32_t interrupted_dialtone : 1; ///< 0 : Reports only dialtone (does not differentiate between normal and interrupted dialtone). 1 : Reports interrupted dialtone in addition to normal dialtone + uint32_t ringback_busy_fastbusy : 1; ///< 0 : Reports only dialing state. 1 : Reports ringback, busy, and fast busy states. + uint32_t caller_id : 1; ///< 0 : Does not report caller ID. 1 : Reports caller ID information. + uint32_t incoming_distinctive : 1; ///< 0 : Reports only incoming ringing. 1 : Reports incoming distinctive ringing patterns. + uint32_t dual_tone_multi_freq : 1; ///< 0 : Cannot report dual tone multi-frequency (DTMF) digits input remotely over the telephone line. 1 : Can report DTMF digits input remotely over the telephone line. + uint32_t line_state_change : 1; ///< 0 : Does not support line state change notification. 1 : Does support line state change notification + uint32_t TU_RESERVED0 : 2; + uint32_t TU_RESERVED1 : 16; + uint32_t TU_RESERVED2 : 8; + } bmCapabilities; +}cdc_desc_func_telephone_call_state_reporting_capabilities_t; // TODO remove -static inline uint8_t cdc_functional_desc_typeof(uint8_t const *p_desc) +static inline uint8_t cdc_functional_desc_typeof(uint8_t const * p_desc) { - return p_desc[2]; + return p_desc[2]; } //--------------------------------------------------------------------+ // Requests //--------------------------------------------------------------------+ -typedef struct TU_ATTR_PACKED { - uint32_t bit_rate; - uint8_t stop_bits; ///< 0: 1 stop bit - 1: 1.5 stop bits - 2: 2 stop bits - uint8_t parity; ///< 0: None - 1: Odd - 2: Even - 3: Mark - 4: Space - uint8_t data_bits; ///< can be 5, 6, 7, 8 or 16 +typedef struct TU_ATTR_PACKED +{ + uint32_t bit_rate; + uint8_t stop_bits; ///< 0: 1 stop bit - 1: 1.5 stop bits - 2: 2 stop bits + uint8_t parity; ///< 0: None - 1: Odd - 2: Even - 3: Mark - 4: Space + uint8_t data_bits; ///< can be 5, 6, 7, 8 or 16 } cdc_line_coding_t; TU_VERIFY_STATIC(sizeof(cdc_line_coding_t) == 7, "size is not correct"); -typedef struct TU_ATTR_PACKED { - uint16_t dtr : 1; - uint16_t rts : 1; - uint16_t : 6; - uint16_t : 8; +typedef struct TU_ATTR_PACKED +{ + uint16_t dtr : 1; + uint16_t rts : 1; + uint16_t : 6; + uint16_t : 8; } cdc_line_control_state_t; TU_VERIFY_STATIC(sizeof(cdc_line_control_state_t) == 2, "size is not correct"); -TU_ATTR_PACKED_END // End of all packed definitions - TU_ATTR_BIT_FIELD_ORDER_END +TU_ATTR_PACKED_END // End of all packed definitions +TU_ATTR_BIT_FIELD_ORDER_END #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/class/cdc/cdc_device.c b/Libraries/tinyusb/src/class/cdc/cdc_device.c index e403a6786f6..ebc408f5a88 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_device.c +++ b/Libraries/tinyusb/src/class/cdc/cdc_device.c @@ -35,10 +35,10 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_CDC_LOG_LEVEL -#define CFG_TUD_CDC_LOG_LEVEL CFG_TUD_LOG_LEVEL + #define CFG_TUD_CDC_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_CDC_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_CDC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF @@ -46,34 +46,34 @@ #define BULK_PACKET_SIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) typedef struct { - uint8_t itf_num; - uint8_t ep_notif; - uint8_t ep_in; - uint8_t ep_out; + uint8_t itf_num; + uint8_t ep_notif; + uint8_t ep_in; + uint8_t ep_out; - // Bit 0: DTR (Data Terminal Ready), Bit 1: RTS (Request to Send) - uint8_t line_state; + // Bit 0: DTR (Data Terminal Ready), Bit 1: RTS (Request to Send) + uint8_t line_state; - /*------------- From this point, data is not cleared by bus reset -------------*/ - char wanted_char; - TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; + /*------------- From this point, data is not cleared by bus reset -------------*/ + char wanted_char; + TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; - // FIFO - tu_fifo_t rx_ff; - tu_fifo_t tx_ff; + // FIFO + tu_fifo_t rx_ff; + tu_fifo_t tx_ff; - uint8_t rx_ff_buf[CFG_TUD_CDC_RX_BUFSIZE]; - uint8_t tx_ff_buf[CFG_TUD_CDC_TX_BUFSIZE]; + uint8_t rx_ff_buf[CFG_TUD_CDC_RX_BUFSIZE]; + uint8_t tx_ff_buf[CFG_TUD_CDC_TX_BUFSIZE]; - OSAL_MUTEX_DEF(rx_ff_mutex); - OSAL_MUTEX_DEF(tx_ff_mutex); + OSAL_MUTEX_DEF(rx_ff_mutex); + OSAL_MUTEX_DEF(tx_ff_mutex); - // Endpoint Transfer buffer - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_CDC_EP_BUFSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_CDC_EP_BUFSIZE]; + // Endpoint Transfer buffer + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_CDC_EP_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_CDC_EP_BUFSIZE]; } cdcd_interface_t; -#define ITF_MEM_RESET_SIZE offsetof(cdcd_interface_t, wanted_char) +#define ITF_MEM_RESET_SIZE offsetof(cdcd_interface_t, wanted_char) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION @@ -81,439 +81,402 @@ typedef struct { CFG_TUD_MEM_SECTION static cdcd_interface_t _cdcd_itf[CFG_TUD_CDC]; static tud_cdc_configure_fifo_t _cdcd_fifo_cfg; -static bool _prep_out_transaction(cdcd_interface_t *p_cdc) -{ - uint8_t const rhport = 0; +static bool _prep_out_transaction (cdcd_interface_t* p_cdc) { + uint8_t const rhport = 0; - // Skip if usb is not ready yet - TU_VERIFY(tud_ready() && p_cdc->ep_out); + // Skip if usb is not ready yet + TU_VERIFY(tud_ready() && p_cdc->ep_out); - uint16_t available = tu_fifo_remaining(&p_cdc->rx_ff); + uint16_t available = tu_fifo_remaining(&p_cdc->rx_ff); - // Prepare for incoming data but only allow what we can store in the ring buffer. - // TODO Actually we can still carry out the transfer, keeping count of received bytes - // and slowly move it to the FIFO when read(). - // This pre-check reduces endpoint claiming - TU_VERIFY(available >= sizeof(p_cdc->epout_buf)); + // Prepare for incoming data but only allow what we can store in the ring buffer. + // TODO Actually we can still carry out the transfer, keeping count of received bytes + // and slowly move it to the FIFO when read(). + // This pre-check reduces endpoint claiming + TU_VERIFY(available >= sizeof(p_cdc->epout_buf)); - // claim endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_out)); + // claim endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_out)); - // fifo can be changed before endpoint is claimed - available = tu_fifo_remaining(&p_cdc->rx_ff); + // fifo can be changed before endpoint is claimed + available = tu_fifo_remaining(&p_cdc->rx_ff); - if (available >= sizeof(p_cdc->epout_buf)) { - return usbd_edpt_xfer(rhport, p_cdc->ep_out, p_cdc->epout_buf, sizeof(p_cdc->epout_buf)); - } else { - // Release endpoint since we don't make any transfer - usbd_edpt_release(rhport, p_cdc->ep_out); - return false; - } + if ( available >= sizeof(p_cdc->epout_buf) ) { + return usbd_edpt_xfer(rhport, p_cdc->ep_out, p_cdc->epout_buf, sizeof(p_cdc->epout_buf)); + }else { + // Release endpoint since we don't make any transfer + usbd_edpt_release(rhport, p_cdc->ep_out); + return false; + } } //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ -bool tud_cdc_configure_fifo(tud_cdc_configure_fifo_t const *cfg) -{ - TU_VERIFY(cfg); - _cdcd_fifo_cfg = (*cfg); - return true; +bool tud_cdc_configure_fifo(tud_cdc_configure_fifo_t const* cfg) { + TU_VERIFY(cfg); + _cdcd_fifo_cfg = (*cfg); + return true; } -bool tud_cdc_n_ready(uint8_t itf) -{ - return tud_ready() && _cdcd_itf[itf].ep_in != 0 && _cdcd_itf[itf].ep_out != 0; +bool tud_cdc_n_ready(uint8_t itf) { + return tud_ready() && _cdcd_itf[itf].ep_in != 0 && _cdcd_itf[itf].ep_out != 0; } -bool tud_cdc_n_connected(uint8_t itf) -{ - // DTR (bit 0) active is considered as connected - return tud_ready() && tu_bit_test(_cdcd_itf[itf].line_state, 0); +bool tud_cdc_n_connected(uint8_t itf) { + // DTR (bit 0) active is considered as connected + return tud_ready() && tu_bit_test(_cdcd_itf[itf].line_state, 0); } -uint8_t tud_cdc_n_get_line_state(uint8_t itf) -{ - return _cdcd_itf[itf].line_state; +uint8_t tud_cdc_n_get_line_state(uint8_t itf) { + return _cdcd_itf[itf].line_state; } -void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t *coding) -{ - (*coding) = _cdcd_itf[itf].line_coding; +void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t* coding) { + (*coding) = _cdcd_itf[itf].line_coding; } -void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted) -{ - _cdcd_itf[itf].wanted_char = wanted; +void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted) { + _cdcd_itf[itf].wanted_char = wanted; } //--------------------------------------------------------------------+ // READ API //--------------------------------------------------------------------+ -uint32_t tud_cdc_n_available(uint8_t itf) -{ - return tu_fifo_count(&_cdcd_itf[itf].rx_ff); +uint32_t tud_cdc_n_available(uint8_t itf) { + return tu_fifo_count(&_cdcd_itf[itf].rx_ff); } -uint32_t tud_cdc_n_read(uint8_t itf, void *buffer, uint32_t bufsize) -{ - cdcd_interface_t *p_cdc = &_cdcd_itf[itf]; - uint32_t num_read = - tu_fifo_read_n(&p_cdc->rx_ff, buffer, (uint16_t)TU_MIN(bufsize, UINT16_MAX)); - _prep_out_transaction(p_cdc); - return num_read; +uint32_t tud_cdc_n_read(uint8_t itf, void* buffer, uint32_t bufsize) { + cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; + uint32_t num_read = tu_fifo_read_n(&p_cdc->rx_ff, buffer, (uint16_t) TU_MIN(bufsize, UINT16_MAX)); + _prep_out_transaction(p_cdc); + return num_read; } -bool tud_cdc_n_peek(uint8_t itf, uint8_t *chr) -{ - return tu_fifo_peek(&_cdcd_itf[itf].rx_ff, chr); +bool tud_cdc_n_peek(uint8_t itf, uint8_t* chr) { + return tu_fifo_peek(&_cdcd_itf[itf].rx_ff, chr); } -void tud_cdc_n_read_flush(uint8_t itf) -{ - cdcd_interface_t *p_cdc = &_cdcd_itf[itf]; - tu_fifo_clear(&p_cdc->rx_ff); - _prep_out_transaction(p_cdc); +void tud_cdc_n_read_flush(uint8_t itf) { + cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; + tu_fifo_clear(&p_cdc->rx_ff); + _prep_out_transaction(p_cdc); } //--------------------------------------------------------------------+ // WRITE API //--------------------------------------------------------------------+ -uint32_t tud_cdc_n_write(uint8_t itf, void const *buffer, uint32_t bufsize) -{ - cdcd_interface_t *p_cdc = &_cdcd_itf[itf]; - uint16_t ret = tu_fifo_write_n(&p_cdc->tx_ff, buffer, (uint16_t)TU_MIN(bufsize, UINT16_MAX)); - - // flush if queue more than packet size - if (tu_fifo_count(&p_cdc->tx_ff) >= BULK_PACKET_SIZE -#if CFG_TUD_CDC_TX_BUFSIZE < BULK_PACKET_SIZE - || tu_fifo_full(&p_cdc->tx_ff) // check full if fifo size is less than packet size -#endif - ) { - tud_cdc_n_write_flush(itf); - } - - return ret; +uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize) { + cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; + uint16_t ret = tu_fifo_write_n(&p_cdc->tx_ff, buffer, (uint16_t) TU_MIN(bufsize, UINT16_MAX)); + + // flush if queue more than packet size + if (tu_fifo_count(&p_cdc->tx_ff) >= BULK_PACKET_SIZE + #if CFG_TUD_CDC_TX_BUFSIZE < BULK_PACKET_SIZE + || tu_fifo_full(&p_cdc->tx_ff) // check full if fifo size is less than packet size + #endif + ) { + tud_cdc_n_write_flush(itf); + } + + return ret; } -uint32_t tud_cdc_n_write_flush(uint8_t itf) -{ - cdcd_interface_t *p_cdc = &_cdcd_itf[itf]; +uint32_t tud_cdc_n_write_flush(uint8_t itf) { + cdcd_interface_t* p_cdc = &_cdcd_itf[itf]; - // Skip if usb is not ready yet - TU_VERIFY(tud_ready(), 0); + // Skip if usb is not ready yet + TU_VERIFY(tud_ready(), 0); - // No data to send - if (!tu_fifo_count(&p_cdc->tx_ff)) - return 0; + // No data to send + if (!tu_fifo_count(&p_cdc->tx_ff)) return 0; - uint8_t const rhport = 0; + uint8_t const rhport = 0; - // Claim the endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_in), 0); + // Claim the endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_cdc->ep_in), 0); - // Pull data from FIFO - uint16_t const count = tu_fifo_read_n(&p_cdc->tx_ff, p_cdc->epin_buf, sizeof(p_cdc->epin_buf)); + // Pull data from FIFO + uint16_t const count = tu_fifo_read_n(&p_cdc->tx_ff, p_cdc->epin_buf, sizeof(p_cdc->epin_buf)); - if (count) { - TU_ASSERT(usbd_edpt_xfer(rhport, p_cdc->ep_in, p_cdc->epin_buf, count), 0); - return count; - } else { - // Release endpoint since we don't make any transfer - // Note: data is dropped if terminal is not connected - usbd_edpt_release(rhport, p_cdc->ep_in); - return 0; - } + if (count) { + TU_ASSERT(usbd_edpt_xfer(rhport, p_cdc->ep_in, p_cdc->epin_buf, count), 0); + return count; + } else { + // Release endpoint since we don't make any transfer + // Note: data is dropped if terminal is not connected + usbd_edpt_release(rhport, p_cdc->ep_in); + return 0; + } } -uint32_t tud_cdc_n_write_available(uint8_t itf) -{ - return tu_fifo_remaining(&_cdcd_itf[itf].tx_ff); +uint32_t tud_cdc_n_write_available(uint8_t itf) { + return tu_fifo_remaining(&_cdcd_itf[itf].tx_ff); } -bool tud_cdc_n_write_clear(uint8_t itf) -{ - return tu_fifo_clear(&_cdcd_itf[itf].tx_ff); +bool tud_cdc_n_write_clear(uint8_t itf) { + return tu_fifo_clear(&_cdcd_itf[itf].tx_ff); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void cdcd_init(void) -{ - tu_memclr(_cdcd_itf, sizeof(_cdcd_itf)); - tu_memclr(&_cdcd_fifo_cfg, sizeof(_cdcd_fifo_cfg)); - - for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { - cdcd_interface_t *p_cdc = &_cdcd_itf[i]; - - p_cdc->wanted_char = (char)-1; - - // default line coding is : stop bit = 1, parity = none, data bits = 8 - p_cdc->line_coding.bit_rate = 115200; - p_cdc->line_coding.stop_bits = 0; - p_cdc->line_coding.parity = 0; - p_cdc->line_coding.data_bits = 8; - - // Config RX fifo - tu_fifo_config(&p_cdc->rx_ff, p_cdc->rx_ff_buf, TU_ARRAY_SIZE(p_cdc->rx_ff_buf), 1, false); - - // Config TX fifo as overwritable at initialization and will be changed to non-overwritable - // if terminal supports DTR bit. Without DTR we do not know if data is actually polled by terminal. - // In this way, the most current data is prioritized. - tu_fifo_config(&p_cdc->tx_ff, p_cdc->tx_ff_buf, TU_ARRAY_SIZE(p_cdc->tx_ff_buf), 1, true); +void cdcd_init(void) { + tu_memclr(_cdcd_itf, sizeof(_cdcd_itf)); + tu_memclr(&_cdcd_fifo_cfg, sizeof(_cdcd_fifo_cfg)); + + for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { + cdcd_interface_t* p_cdc = &_cdcd_itf[i]; + + p_cdc->wanted_char = (char) -1; + + // default line coding is : stop bit = 1, parity = none, data bits = 8 + p_cdc->line_coding.bit_rate = 115200; + p_cdc->line_coding.stop_bits = 0; + p_cdc->line_coding.parity = 0; + p_cdc->line_coding.data_bits = 8; + + // Config RX fifo + tu_fifo_config(&p_cdc->rx_ff, p_cdc->rx_ff_buf, TU_ARRAY_SIZE(p_cdc->rx_ff_buf), 1, false); + + // Config TX fifo as overwritable at initialization and will be changed to non-overwritable + // if terminal supports DTR bit. Without DTR we do not know if data is actually polled by terminal. + // In this way, the most current data is prioritized. + tu_fifo_config(&p_cdc->tx_ff, p_cdc->tx_ff_buf, TU_ARRAY_SIZE(p_cdc->tx_ff_buf), 1, true); + + #if OSAL_MUTEX_REQUIRED + osal_mutex_t mutex_rd = osal_mutex_create(&p_cdc->rx_ff_mutex); + osal_mutex_t mutex_wr = osal_mutex_create(&p_cdc->tx_ff_mutex); + TU_ASSERT(mutex_rd != NULL && mutex_wr != NULL, ); + + tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, mutex_rd); + tu_fifo_config_mutex(&p_cdc->tx_ff, mutex_wr, NULL); + #endif + } +} -#if OSAL_MUTEX_REQUIRED - osal_mutex_t mutex_rd = osal_mutex_create(&p_cdc->rx_ff_mutex); - osal_mutex_t mutex_wr = osal_mutex_create(&p_cdc->tx_ff_mutex); - TU_ASSERT(mutex_rd != NULL && mutex_wr != NULL, ); +bool cdcd_deinit(void) { + #if OSAL_MUTEX_REQUIRED + for(uint8_t i=0; irx_ff.mutex_rd; + osal_mutex_t mutex_wr = p_cdc->tx_ff.mutex_wr; - tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, mutex_rd); - tu_fifo_config_mutex(&p_cdc->tx_ff, mutex_wr, NULL); -#endif + if (mutex_rd) { + osal_mutex_delete(mutex_rd); + tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, NULL); } -} -bool cdcd_deinit(void) -{ -#if OSAL_MUTEX_REQUIRED - for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { - cdcd_interface_t *p_cdc = &_cdcd_itf[i]; - osal_mutex_t mutex_rd = p_cdc->rx_ff.mutex_rd; - osal_mutex_t mutex_wr = p_cdc->tx_ff.mutex_wr; - - if (mutex_rd) { - osal_mutex_delete(mutex_rd); - tu_fifo_config_mutex(&p_cdc->rx_ff, NULL, NULL); - } - - if (mutex_wr) { - osal_mutex_delete(mutex_wr); - tu_fifo_config_mutex(&p_cdc->tx_ff, NULL, NULL); - } + if (mutex_wr) { + osal_mutex_delete(mutex_wr); + tu_fifo_config_mutex(&p_cdc->tx_ff, NULL, NULL); } -#endif + } + #endif - return true; + return true; } -void cdcd_reset(uint8_t rhport) -{ - (void)rhport; +void cdcd_reset(uint8_t rhport) { + (void) rhport; - for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { - cdcd_interface_t *p_cdc = &_cdcd_itf[i]; + for (uint8_t i = 0; i < CFG_TUD_CDC; i++) { + cdcd_interface_t* p_cdc = &_cdcd_itf[i]; - tu_memclr(p_cdc, ITF_MEM_RESET_SIZE); - if (!_cdcd_fifo_cfg.rx_persistent) - tu_fifo_clear(&p_cdc->rx_ff); - if (!_cdcd_fifo_cfg.tx_persistent) - tu_fifo_clear(&p_cdc->tx_ff); - tu_fifo_set_overwritable(&p_cdc->tx_ff, true); - } + tu_memclr(p_cdc, ITF_MEM_RESET_SIZE); + if (!_cdcd_fifo_cfg.rx_persistent) tu_fifo_clear(&p_cdc->rx_ff); + if (!_cdcd_fifo_cfg.tx_persistent) tu_fifo_clear(&p_cdc->tx_ff); + tu_fifo_set_overwritable(&p_cdc->tx_ff, true); + } } -uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) -{ - // Only support ACM subclass - TU_VERIFY(TUSB_CLASS_CDC == itf_desc->bInterfaceClass && - CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass, - 0); - - // Find available interface - cdcd_interface_t *p_cdc = NULL; - for (uint8_t cdc_id = 0; cdc_id < CFG_TUD_CDC; cdc_id++) { - if (_cdcd_itf[cdc_id].ep_in == 0) { - p_cdc = &_cdcd_itf[cdc_id]; - break; - } +uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { + // Only support ACM subclass + TU_VERIFY( TUSB_CLASS_CDC == itf_desc->bInterfaceClass && + CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass, 0); + + // Find available interface + cdcd_interface_t* p_cdc = NULL; + for (uint8_t cdc_id = 0; cdc_id < CFG_TUD_CDC; cdc_id++) { + if (_cdcd_itf[cdc_id].ep_in == 0) { + p_cdc = &_cdcd_itf[cdc_id]; + break; } - TU_ASSERT(p_cdc, 0); + } + TU_ASSERT(p_cdc, 0); - //------------- Control Interface -------------// - p_cdc->itf_num = itf_desc->bInterfaceNumber; + //------------- Control Interface -------------// + p_cdc->itf_num = itf_desc->bInterfaceNumber; - uint16_t drv_len = sizeof(tusb_desc_interface_t); - uint8_t const *p_desc = tu_desc_next(itf_desc); + uint16_t drv_len = sizeof(tusb_desc_interface_t); + uint8_t const* p_desc = tu_desc_next(itf_desc); - // Communication Functional Descriptors - while (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len) { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + // Communication Functional Descriptors + while (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len) { + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { - // notification endpoint - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { + // notification endpoint + tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) p_desc; - TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0); - p_cdc->ep_notif = desc_ep->bEndpointAddress; + TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0); + p_cdc->ep_notif = desc_ep->bEndpointAddress; - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - //------------- Data Interface (if any) -------------// - if ((TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && - (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const *)p_desc)->bInterfaceClass)) { - // next to endpoint descriptor - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); + //------------- Data Interface (if any) -------------// + if ((TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && + (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const*) p_desc)->bInterfaceClass)) { + // next to endpoint descriptor + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); - // Open endpoint pair - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &p_cdc->ep_out, - &p_cdc->ep_in), - 0); + // Open endpoint pair + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &p_cdc->ep_out, &p_cdc->ep_in), 0); - drv_len += 2 * sizeof(tusb_desc_endpoint_t); - } + drv_len += 2 * sizeof(tusb_desc_endpoint_t); + } - // Prepare for incoming data - _prep_out_transaction(p_cdc); + // Prepare for incoming data + _prep_out_transaction(p_cdc); - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool cdcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) -{ - // Handle class request only - TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); +bool cdcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const* request) { + // Handle class request only + TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - uint8_t itf = 0; - cdcd_interface_t *p_cdc = _cdcd_itf; + uint8_t itf = 0; + cdcd_interface_t* p_cdc = _cdcd_itf; - // Identify which interface to use - for (;; itf++, p_cdc++) { - if (itf >= TU_ARRAY_SIZE(_cdcd_itf)) - return false; + // Identify which interface to use + for (;; itf++, p_cdc++) { + if (itf >= TU_ARRAY_SIZE(_cdcd_itf)) return false; - if (p_cdc->itf_num == request->wIndex) - break; - } + if (p_cdc->itf_num == request->wIndex) break; + } - switch (request->bRequest) { + switch (request->bRequest) { case CDC_REQUEST_SET_LINE_CODING: - if (stage == CONTROL_STAGE_SETUP) { - TU_LOG_DRV(" Set Line Coding\r\n"); - tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); - } else if (stage == CONTROL_STAGE_ACK) { - if (tud_cdc_line_coding_cb) - tud_cdc_line_coding_cb(itf, &p_cdc->line_coding); - } - break; + if (stage == CONTROL_STAGE_SETUP) { + TU_LOG_DRV(" Set Line Coding\r\n"); + tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); + } else if (stage == CONTROL_STAGE_ACK) { + if (tud_cdc_line_coding_cb) tud_cdc_line_coding_cb(itf, &p_cdc->line_coding); + } + break; case CDC_REQUEST_GET_LINE_CODING: - if (stage == CONTROL_STAGE_SETUP) { - TU_LOG_DRV(" Get Line Coding\r\n"); - tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); - } - break; + if (stage == CONTROL_STAGE_SETUP) { + TU_LOG_DRV(" Get Line Coding\r\n"); + tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t)); + } + break; case CDC_REQUEST_SET_CONTROL_LINE_STATE: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_status(rhport, request); - } else if (stage == CONTROL_STAGE_ACK) { - // CDC PSTN v1.2 section 6.3.12 - // Bit 0: Indicates if DTE is present or not. - // This signal corresponds to V.24 signal 108/2 and RS-232 signal DTR (Data Terminal Ready) - // Bit 1: Carrier control for half-duplex modems. - // This signal corresponds to V.24 signal 105 and RS-232 signal RTS (Request to Send) - bool const dtr = tu_bit_test(request->wValue, 0); - bool const rts = tu_bit_test(request->wValue, 1); - - p_cdc->line_state = (uint8_t)request->wValue; - - // Disable fifo overwriting if DTR bit is set - tu_fifo_set_overwritable(&p_cdc->tx_ff, !dtr); - - TU_LOG_DRV(" Set Control Line State: DTR = %d, RTS = %d\r\n", dtr, rts); - - // Invoke callback - if (tud_cdc_line_state_cb) - tud_cdc_line_state_cb(itf, dtr, rts); - } - break; + if (stage == CONTROL_STAGE_SETUP) { + tud_control_status(rhport, request); + } else if (stage == CONTROL_STAGE_ACK) { + // CDC PSTN v1.2 section 6.3.12 + // Bit 0: Indicates if DTE is present or not. + // This signal corresponds to V.24 signal 108/2 and RS-232 signal DTR (Data Terminal Ready) + // Bit 1: Carrier control for half-duplex modems. + // This signal corresponds to V.24 signal 105 and RS-232 signal RTS (Request to Send) + bool const dtr = tu_bit_test(request->wValue, 0); + bool const rts = tu_bit_test(request->wValue, 1); + + p_cdc->line_state = (uint8_t) request->wValue; + + // Disable fifo overwriting if DTR bit is set + tu_fifo_set_overwritable(&p_cdc->tx_ff, !dtr); + + TU_LOG_DRV(" Set Control Line State: DTR = %d, RTS = %d\r\n", dtr, rts); + + // Invoke callback + if (tud_cdc_line_state_cb) tud_cdc_line_state_cb(itf, dtr, rts); + } + break; case CDC_REQUEST_SEND_BREAK: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_status(rhport, request); - } else if (stage == CONTROL_STAGE_ACK) { - TU_LOG_DRV(" Send Break\r\n"); - if (tud_cdc_send_break_cb) - tud_cdc_send_break_cb(itf, request->wValue); - } - break; + if (stage == CONTROL_STAGE_SETUP) { + tud_control_status(rhport, request); + } else if (stage == CONTROL_STAGE_ACK) { + TU_LOG_DRV(" Send Break\r\n"); + if (tud_cdc_send_break_cb) tud_cdc_send_break_cb(itf, request->wValue); + } + break; default: - return false; // stall unsupported request - } + return false; // stall unsupported request + } - return true; + return true; } -bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) -{ - (void)result; +bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { + (void) result; - uint8_t itf; - cdcd_interface_t *p_cdc; + uint8_t itf; + cdcd_interface_t* p_cdc; - // Identify which interface to use - for (itf = 0; itf < CFG_TUD_CDC; itf++) { - p_cdc = &_cdcd_itf[itf]; - if ((ep_addr == p_cdc->ep_out) || (ep_addr == p_cdc->ep_in)) - break; - } - TU_ASSERT(itf < CFG_TUD_CDC); - - // Received new data - if (ep_addr == p_cdc->ep_out) { - tu_fifo_write_n(&p_cdc->rx_ff, p_cdc->epout_buf, (uint16_t)xferred_bytes); - - // Check for wanted char and invoke callback if needed - if (tud_cdc_rx_wanted_cb && (((signed char)p_cdc->wanted_char) != -1)) { - for (uint32_t i = 0; i < xferred_bytes; i++) { - if ((p_cdc->wanted_char == p_cdc->epout_buf[i]) && !tu_fifo_empty(&p_cdc->rx_ff)) { - tud_cdc_rx_wanted_cb(itf, p_cdc->wanted_char); - } - } - } + // Identify which interface to use + for (itf = 0; itf < CFG_TUD_CDC; itf++) { + p_cdc = &_cdcd_itf[itf]; + if ((ep_addr == p_cdc->ep_out) || (ep_addr == p_cdc->ep_in)) break; + } + TU_ASSERT(itf < CFG_TUD_CDC); - // invoke receive callback (if there is still data) - if (tud_cdc_rx_cb && !tu_fifo_empty(&p_cdc->rx_ff)) - tud_cdc_rx_cb(itf); + // Received new data + if (ep_addr == p_cdc->ep_out) { + tu_fifo_write_n(&p_cdc->rx_ff, p_cdc->epout_buf, (uint16_t) xferred_bytes); - // prepare for OUT transaction - _prep_out_transaction(p_cdc); + // Check for wanted char and invoke callback if needed + if (tud_cdc_rx_wanted_cb && (((signed char) p_cdc->wanted_char) != -1)) { + for (uint32_t i = 0; i < xferred_bytes; i++) { + if ((p_cdc->wanted_char == p_cdc->epout_buf[i]) && !tu_fifo_empty(&p_cdc->rx_ff)) { + tud_cdc_rx_wanted_cb(itf, p_cdc->wanted_char); + } + } } - // Data sent to host, we continue to fetch from tx fifo to send. - // Note: This will cause incorrect baudrate set in line coding. - // Though maybe the baudrate is not really important !!! - if (ep_addr == p_cdc->ep_in) { - // invoke transmit callback to possibly refill tx fifo - if (tud_cdc_tx_complete_cb) - tud_cdc_tx_complete_cb(itf); - - if (0 == tud_cdc_n_write_flush(itf)) { - // If there is no data left, a ZLP should be sent if - // xferred_bytes is multiple of EP Packet size and not zero - if (!tu_fifo_count(&p_cdc->tx_ff) && xferred_bytes && - (0 == (xferred_bytes & (BULK_PACKET_SIZE - 1)))) { - if (usbd_edpt_claim(rhport, p_cdc->ep_in)) { - usbd_edpt_xfer(rhport, p_cdc->ep_in, NULL, 0); - } - } + // invoke receive callback (if there is still data) + if (tud_cdc_rx_cb && !tu_fifo_empty(&p_cdc->rx_ff)) tud_cdc_rx_cb(itf); + + // prepare for OUT transaction + _prep_out_transaction(p_cdc); + } + + // Data sent to host, we continue to fetch from tx fifo to send. + // Note: This will cause incorrect baudrate set in line coding. + // Though maybe the baudrate is not really important !!! + if (ep_addr == p_cdc->ep_in) { + // invoke transmit callback to possibly refill tx fifo + if (tud_cdc_tx_complete_cb) tud_cdc_tx_complete_cb(itf); + + if (0 == tud_cdc_n_write_flush(itf)) { + // If there is no data left, a ZLP should be sent if + // xferred_bytes is multiple of EP Packet size and not zero + if (!tu_fifo_count(&p_cdc->tx_ff) && xferred_bytes && (0 == (xferred_bytes & (BULK_PACKET_SIZE - 1)))) { + if (usbd_edpt_claim(rhport, p_cdc->ep_in)) { + usbd_edpt_xfer(rhport, p_cdc->ep_in, NULL, 0); } + } } + } - // nothing to do with notif endpoint for now + // nothing to do with notif endpoint for now - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/cdc/cdc_device.h b/Libraries/tinyusb/src/class/cdc/cdc_device.h index c593a872056..3ad7c8baf55 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_device.h +++ b/Libraries/tinyusb/src/class/cdc/cdc_device.h @@ -33,16 +33,16 @@ // Class Driver Configuration //--------------------------------------------------------------------+ #if !defined(CFG_TUD_CDC_EP_BUFSIZE) && defined(CFG_TUD_CDC_EPSIZE) -#warning CFG_TUD_CDC_EPSIZE is renamed to CFG_TUD_CDC_EP_BUFSIZE, please update to use the new name -#define CFG_TUD_CDC_EP_BUFSIZE CFG_TUD_CDC_EPSIZE + #warning CFG_TUD_CDC_EPSIZE is renamed to CFG_TUD_CDC_EP_BUFSIZE, please update to use the new name + #define CFG_TUD_CDC_EP_BUFSIZE CFG_TUD_CDC_EPSIZE #endif #ifndef CFG_TUD_CDC_EP_BUFSIZE -#define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) + #define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #endif #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -50,12 +50,12 @@ extern "C" { //--------------------------------------------------------------------+ typedef struct TU_ATTR_PACKED { - uint8_t rx_persistent : 1; // keep rx fifo on bus reset or disconnect - uint8_t tx_persistent : 1; // keep tx fifo on bus reset or disconnect + uint8_t rx_persistent : 1; // keep rx fifo on bus reset or disconnect + uint8_t tx_persistent : 1; // keep tx fifo on bus reset or disconnect } tud_cdc_configure_fifo_t; // Configure CDC FIFOs behavior -bool tud_cdc_configure_fifo(tud_cdc_configure_fifo_t const *cfg); +bool tud_cdc_configure_fifo(tud_cdc_configure_fifo_t const* cfg); //--------------------------------------------------------------------+ // Application API (Multiple Ports) i.e. CFG_TUD_CDC > 1 @@ -71,7 +71,7 @@ bool tud_cdc_n_connected(uint8_t itf); uint8_t tud_cdc_n_get_line_state(uint8_t itf); // Get current line encoding: bit rate, stop bits parity etc .. -void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t *coding); +void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t* coding); // Set special character that will trigger tud_cdc_rx_wanted_cb() callback on receiving void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted); @@ -80,34 +80,31 @@ void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted); uint32_t tud_cdc_n_available(uint8_t itf); // Read received bytes -uint32_t tud_cdc_n_read(uint8_t itf, void *buffer, uint32_t bufsize); +uint32_t tud_cdc_n_read(uint8_t itf, void* buffer, uint32_t bufsize); // Read a byte, return -1 if there is none -TU_ATTR_ALWAYS_INLINE static inline int32_t tud_cdc_n_read_char(uint8_t itf) -{ - uint8_t ch; - return tud_cdc_n_read(itf, &ch, 1) ? (int32_t)ch : -1; +TU_ATTR_ALWAYS_INLINE static inline int32_t tud_cdc_n_read_char(uint8_t itf) { + uint8_t ch; + return tud_cdc_n_read(itf, &ch, 1) ? (int32_t) ch : -1; } // Clear the received FIFO void tud_cdc_n_read_flush(uint8_t itf); // Get a byte from FIFO without removing it -bool tud_cdc_n_peek(uint8_t itf, uint8_t *ui8); +bool tud_cdc_n_peek(uint8_t itf, uint8_t* ui8); // Write bytes to TX FIFO, data may remain in the FIFO for a while -uint32_t tud_cdc_n_write(uint8_t itf, void const *buffer, uint32_t bufsize); +uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize); // Write a byte -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_n_write_char(uint8_t itf, char ch) -{ - return tud_cdc_n_write(itf, &ch, 1); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_n_write_char(uint8_t itf, char ch) { + return tud_cdc_n_write(itf, &ch, 1); } // Write a null-terminated string -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_n_write_str(uint8_t itf, char const *str) -{ - return tud_cdc_n_write(itf, str, strlen(str)); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_n_write_str(uint8_t itf, char const* str) { + return tud_cdc_n_write(itf, str, strlen(str)); } // Force sending data if possible, return number of forced bytes @@ -123,84 +120,68 @@ bool tud_cdc_n_write_clear(uint8_t itf); // Application API (Single Port) //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_ready(void) -{ - return tud_cdc_n_ready(0); +TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_ready(void) { + return tud_cdc_n_ready(0); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_connected(void) -{ - return tud_cdc_n_connected(0); +TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_connected(void) { + return tud_cdc_n_connected(0); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_cdc_get_line_state(void) -{ - return tud_cdc_n_get_line_state(0); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_cdc_get_line_state(void) { + return tud_cdc_n_get_line_state(0); } -TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_get_line_coding(cdc_line_coding_t *coding) -{ - tud_cdc_n_get_line_coding(0, coding); +TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_get_line_coding(cdc_line_coding_t* coding) { + tud_cdc_n_get_line_coding(0, coding); } -TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_set_wanted_char(char wanted) -{ - tud_cdc_n_set_wanted_char(0, wanted); +TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_set_wanted_char(char wanted) { + tud_cdc_n_set_wanted_char(0, wanted); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_available(void) -{ - return tud_cdc_n_available(0); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_available(void) { + return tud_cdc_n_available(0); } -TU_ATTR_ALWAYS_INLINE static inline int32_t tud_cdc_read_char(void) -{ - return tud_cdc_n_read_char(0); +TU_ATTR_ALWAYS_INLINE static inline int32_t tud_cdc_read_char(void) { + return tud_cdc_n_read_char(0); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_read(void *buffer, uint32_t bufsize) -{ - return tud_cdc_n_read(0, buffer, bufsize); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_read(void* buffer, uint32_t bufsize) { + return tud_cdc_n_read(0, buffer, bufsize); } -TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_read_flush(void) -{ - tud_cdc_n_read_flush(0); +TU_ATTR_ALWAYS_INLINE static inline void tud_cdc_read_flush(void) { + tud_cdc_n_read_flush(0); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_peek(uint8_t *ui8) -{ - return tud_cdc_n_peek(0, ui8); +TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_peek(uint8_t* ui8) { + return tud_cdc_n_peek(0, ui8); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_char(char ch) -{ - return tud_cdc_n_write_char(0, ch); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_char(char ch) { + return tud_cdc_n_write_char(0, ch); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write(void const *buffer, uint32_t bufsize) -{ - return tud_cdc_n_write(0, buffer, bufsize); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write(void const* buffer, uint32_t bufsize) { + return tud_cdc_n_write(0, buffer, bufsize); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_str(char const *str) -{ - return tud_cdc_n_write_str(0, str); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_str(char const* str) { + return tud_cdc_n_write_str(0, str); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_flush(void) -{ - return tud_cdc_n_write_flush(0); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_flush(void) { + return tud_cdc_n_write_flush(0); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_available(void) -{ - return tud_cdc_n_write_available(0); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tud_cdc_write_available(void) { + return tud_cdc_n_write_available(0); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_write_clear(void) -{ - return tud_cdc_n_write_clear(0); +TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_write_clear(void) { + return tud_cdc_n_write_clear(0); } //--------------------------------------------------------------------+ @@ -220,7 +201,7 @@ TU_ATTR_WEAK void tud_cdc_tx_complete_cb(uint8_t itf); TU_ATTR_WEAK void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts); // Invoked when line coding is change via SET_LINE_CODING -TU_ATTR_WEAK void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const *p_line_coding); +TU_ATTR_WEAK void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const* p_line_coding); // Invoked when received send break TU_ATTR_WEAK void tud_cdc_send_break_cb(uint8_t itf, uint16_t duration_ms); @@ -228,15 +209,15 @@ TU_ATTR_WEAK void tud_cdc_send_break_cb(uint8_t itf, uint16_t duration_ms); //--------------------------------------------------------------------+ // INTERNAL USBD-CLASS DRIVER API //--------------------------------------------------------------------+ -void cdcd_init(void); -bool cdcd_deinit(void); -void cdcd_reset(uint8_t rhport); -uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool cdcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); -bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); +void cdcd_init (void); +bool cdcd_deinit (void); +void cdcd_reset (uint8_t rhport); +uint16_t cdcd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool cdcd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +bool cdcd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CDC_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/cdc_host.c b/Libraries/tinyusb/src/class/cdc/cdc_host.c index 7707398b4e9..133a10f6ecf 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_host.c +++ b/Libraries/tinyusb/src/class/cdc/cdc_host.c @@ -38,46 +38,46 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUH_CDC_LOG_LEVEL -#define CFG_TUH_CDC_LOG_LEVEL CFG_TUH_LOG_LEVEL + #define CFG_TUH_CDC_LOG_LEVEL CFG_TUH_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_CDC_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_CDC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // Host CDC Interface //--------------------------------------------------------------------+ typedef struct { - uint8_t daddr; - uint8_t bInterfaceNumber; - uint8_t bInterfaceSubClass; - uint8_t bInterfaceProtocol; - - uint8_t ep_notif; - uint8_t serial_drid; // Serial Driver ID - bool mounted; // Enumeration is complete - cdc_acm_capability_t acm_capability; - - TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; // Baudrate, stop bits, parity, data width - uint8_t line_state; // DTR (bit0), RTS (bit1) - -#if CFG_TUH_CDC_FTDI || CFG_TUH_CDC_CP210X || CFG_TUH_CDC_CH34X - cdc_line_coding_t requested_line_coding; -// 1 byte padding -#endif + uint8_t daddr; + uint8_t bInterfaceNumber; + uint8_t bInterfaceSubClass; + uint8_t bInterfaceProtocol; + + uint8_t ep_notif; + uint8_t serial_drid; // Serial Driver ID + bool mounted; // Enumeration is complete + cdc_acm_capability_t acm_capability; + + TU_ATTR_ALIGNED(4) cdc_line_coding_t line_coding; // Baudrate, stop bits, parity, data width + uint8_t line_state; // DTR (bit0), RTS (bit1) - tuh_xfer_cb_t user_control_cb; + #if CFG_TUH_CDC_FTDI || CFG_TUH_CDC_CP210X || CFG_TUH_CDC_CH34X + cdc_line_coding_t requested_line_coding; + // 1 byte padding + #endif - struct { - tu_edpt_stream_t tx; - tu_edpt_stream_t rx; + tuh_xfer_cb_t user_control_cb; - uint8_t tx_ff_buf[CFG_TUH_CDC_TX_BUFSIZE]; - CFG_TUH_MEM_ALIGN uint8_t tx_ep_buf[CFG_TUH_CDC_TX_EPSIZE]; + struct { + tu_edpt_stream_t tx; + tu_edpt_stream_t rx; - uint8_t rx_ff_buf[CFG_TUH_CDC_TX_BUFSIZE]; - CFG_TUH_MEM_ALIGN uint8_t rx_ep_buf[CFG_TUH_CDC_TX_EPSIZE]; - } stream; + uint8_t tx_ff_buf[CFG_TUH_CDC_TX_BUFSIZE]; + CFG_TUH_MEM_ALIGN uint8_t tx_ep_buf[CFG_TUH_CDC_TX_EPSIZE]; + + uint8_t rx_ff_buf[CFG_TUH_CDC_TX_BUFSIZE]; + CFG_TUH_MEM_ALIGN uint8_t rx_ep_buf[CFG_TUH_CDC_TX_EPSIZE]; + } stream; } cdch_interface_t; CFG_TUH_MEM_SECTION @@ -89,765 +89,703 @@ static cdch_interface_t cdch_data[CFG_TUH_CDC]; //------------- ACM prototypes -------------// static bool acm_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -static void acm_process_config(tuh_xfer_t *xfer); +static void acm_process_config(tuh_xfer_t* xfer); -static bool acm_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, - uintptr_t user_data); -static bool acm_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool acm_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool acm_set_control_line_state(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool acm_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool acm_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool acm_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool acm_set_control_line_state(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); //------------- FTDI prototypes -------------// #if CFG_TUH_CDC_FTDI #include "serial/ftdi_sio.h" -static uint16_t const ftdi_vid_pid_list[][2] = { CFG_TUH_CDC_FTDI_VID_PID_LIST }; +static uint16_t const ftdi_vid_pid_list[][2] = {CFG_TUH_CDC_FTDI_VID_PID_LIST}; static bool ftdi_open(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len); -static void ftdi_process_config(tuh_xfer_t *xfer); - -static bool ftdi_sio_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ftdi_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ftdi_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ftdi_sio_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static void ftdi_process_config(tuh_xfer_t* xfer); + +static bool ftdi_sio_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ftdi_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ftdi_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ftdi_sio_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); #endif //------------- CP210X prototypes -------------// #if CFG_TUH_CDC_CP210X #include "serial/cp210x.h" -static uint16_t const cp210x_vid_pid_list[][2] = { CFG_TUH_CDC_CP210X_VID_PID_LIST }; +static uint16_t const cp210x_vid_pid_list[][2] = {CFG_TUH_CDC_CP210X_VID_PID_LIST}; static bool cp210x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -static void cp210x_process_config(tuh_xfer_t *xfer); - -static bool cp210x_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool cp210x_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, - uintptr_t user_data); -static bool cp210x_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool cp210x_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static void cp210x_process_config(tuh_xfer_t* xfer); + +static bool cp210x_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool cp210x_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool cp210x_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool cp210x_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); #endif //------------- CH34x prototypes -------------// #if CFG_TUH_CDC_CH34X #include "serial/ch34x.h" -static uint16_t const ch34x_vid_pid_list[][2] = { CFG_TUH_CDC_CH34X_VID_PID_LIST }; +static uint16_t const ch34x_vid_pid_list[][2] = {CFG_TUH_CDC_CH34X_VID_PID_LIST}; -static bool ch34x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -static void ch34x_process_config(tuh_xfer_t *xfer); +static bool ch34x_open(uint8_t daddr, tusb_desc_interface_t const* itf_desc, uint16_t max_len); +static void ch34x_process_config(tuh_xfer_t* xfer); -static bool ch34x_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ch34x_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, - uintptr_t user_data); -static bool ch34x_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); -static bool ch34x_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ch34x_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ch34x_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ch34x_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); +static bool ch34x_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); #endif //------------- Common -------------// enum { - SERIAL_DRIVER_ACM = 0, + SERIAL_DRIVER_ACM = 0, #if CFG_TUH_CDC_FTDI - SERIAL_DRIVER_FTDI, + SERIAL_DRIVER_FTDI, #endif #if CFG_TUH_CDC_CP210X - SERIAL_DRIVER_CP210X, + SERIAL_DRIVER_CP210X, #endif #if CFG_TUH_CDC_CH34X - SERIAL_DRIVER_CH34X, + SERIAL_DRIVER_CH34X, #endif - SERIAL_DRIVER_COUNT + SERIAL_DRIVER_COUNT }; typedef struct { - uint16_t const (*vid_pid_list)[2]; - uint16_t const vid_pid_count; - bool (*const open)(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len); - void (*const process_set_config)(tuh_xfer_t *xfer); - bool (*const set_control_line_state)(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); - bool (*const set_baudrate)(cdch_interface_t *p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); - bool (*const set_data_format)(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, - uintptr_t user_data); - bool (*const set_line_coding)(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); + uint16_t const (*vid_pid_list)[2]; + uint16_t const vid_pid_count; + bool (*const open)(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len); + void (*const process_set_config)(tuh_xfer_t* xfer); + bool (*const set_control_line_state)(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); + bool (*const set_baudrate)(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); + bool (*const set_data_format)(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); + bool (*const set_line_coding)(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); } cdch_serial_driver_t; // Note driver list must be in the same order as SERIAL_DRIVER enum static const cdch_serial_driver_t serial_drivers[] = { - { .vid_pid_list = NULL, - .vid_pid_count = 0, - .open = acm_open, - .process_set_config = acm_process_config, + { + .vid_pid_list = NULL, + .vid_pid_count = 0, + .open = acm_open, + .process_set_config = acm_process_config, .set_control_line_state = acm_set_control_line_state, - .set_baudrate = acm_set_baudrate, - .set_data_format = acm_set_data_format, - .set_line_coding = acm_set_line_coding }, - -#if CFG_TUH_CDC_FTDI - { .vid_pid_list = ftdi_vid_pid_list, - .vid_pid_count = TU_ARRAY_SIZE(ftdi_vid_pid_list), - .open = ftdi_open, - .process_set_config = ftdi_process_config, + .set_baudrate = acm_set_baudrate, + .set_data_format = acm_set_data_format, + .set_line_coding = acm_set_line_coding + }, + + #if CFG_TUH_CDC_FTDI + { + .vid_pid_list = ftdi_vid_pid_list, + .vid_pid_count = TU_ARRAY_SIZE(ftdi_vid_pid_list), + .open = ftdi_open, + .process_set_config = ftdi_process_config, .set_control_line_state = ftdi_sio_set_modem_ctrl, - .set_baudrate = ftdi_sio_set_baudrate, - .set_data_format = ftdi_set_data_format, - .set_line_coding = ftdi_set_line_coding }, -#endif - -#if CFG_TUH_CDC_CP210X - { .vid_pid_list = cp210x_vid_pid_list, - .vid_pid_count = TU_ARRAY_SIZE(cp210x_vid_pid_list), - .open = cp210x_open, - .process_set_config = cp210x_process_config, + .set_baudrate = ftdi_sio_set_baudrate, + .set_data_format = ftdi_set_data_format, + .set_line_coding = ftdi_set_line_coding + }, + #endif + + #if CFG_TUH_CDC_CP210X + { + .vid_pid_list = cp210x_vid_pid_list, + .vid_pid_count = TU_ARRAY_SIZE(cp210x_vid_pid_list), + .open = cp210x_open, + .process_set_config = cp210x_process_config, .set_control_line_state = cp210x_set_modem_ctrl, - .set_baudrate = cp210x_set_baudrate, - .set_data_format = cp210x_set_data_format, - .set_line_coding = cp210x_set_line_coding }, -#endif - -#if CFG_TUH_CDC_CH34X - { .vid_pid_list = ch34x_vid_pid_list, - .vid_pid_count = TU_ARRAY_SIZE(ch34x_vid_pid_list), - .open = ch34x_open, - .process_set_config = ch34x_process_config, + .set_baudrate = cp210x_set_baudrate, + .set_data_format = cp210x_set_data_format, + .set_line_coding = cp210x_set_line_coding + }, + #endif + + #if CFG_TUH_CDC_CH34X + { + .vid_pid_list = ch34x_vid_pid_list, + .vid_pid_count = TU_ARRAY_SIZE(ch34x_vid_pid_list), + .open = ch34x_open, + .process_set_config = ch34x_process_config, .set_control_line_state = ch34x_set_modem_ctrl, - .set_baudrate = ch34x_set_baudrate, - .set_data_format = ch34x_set_data_format, - .set_line_coding = ch34x_set_line_coding }, -#endif + .set_baudrate = ch34x_set_baudrate, + .set_data_format = ch34x_set_data_format, + .set_line_coding = ch34x_set_line_coding + }, + #endif }; -TU_VERIFY_STATIC(TU_ARRAY_SIZE(serial_drivers) == SERIAL_DRIVER_COUNT, - "Serial driver count mismatch"); +TU_VERIFY_STATIC(TU_ARRAY_SIZE(serial_drivers) == SERIAL_DRIVER_COUNT, "Serial driver count mismatch"); //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -static inline cdch_interface_t *get_itf(uint8_t idx) -{ - TU_ASSERT(idx < CFG_TUH_CDC, NULL); - cdch_interface_t *p_cdc = &cdch_data[idx]; +static inline cdch_interface_t* get_itf(uint8_t idx) { + TU_ASSERT(idx < CFG_TUH_CDC, NULL); + cdch_interface_t* p_cdc = &cdch_data[idx]; - return (p_cdc->daddr != 0) ? p_cdc : NULL; + return (p_cdc->daddr != 0) ? p_cdc : NULL; } -static inline uint8_t get_idx_by_ep_addr(uint8_t daddr, uint8_t ep_addr) -{ - for (uint8_t i = 0; i < CFG_TUH_CDC; i++) { - cdch_interface_t *p_cdc = &cdch_data[i]; - if ((p_cdc->daddr == daddr) && - (ep_addr == p_cdc->ep_notif || ep_addr == p_cdc->stream.rx.ep_addr || - ep_addr == p_cdc->stream.tx.ep_addr)) { - return i; - } +static inline uint8_t get_idx_by_ep_addr(uint8_t daddr, uint8_t ep_addr) { + for(uint8_t i=0; idaddr == daddr) && + (ep_addr == p_cdc->ep_notif || ep_addr == p_cdc->stream.rx.ep_addr || ep_addr == p_cdc->stream.tx.ep_addr)) { + return i; } + } - return TUSB_INDEX_INVALID_8; + return TUSB_INDEX_INVALID_8; } -static cdch_interface_t *make_new_itf(uint8_t daddr, tusb_desc_interface_t const *itf_desc) -{ - for (uint8_t i = 0; i < CFG_TUH_CDC; i++) { - if (cdch_data[i].daddr == 0) { - cdch_interface_t *p_cdc = &cdch_data[i]; - p_cdc->daddr = daddr; - p_cdc->bInterfaceNumber = itf_desc->bInterfaceNumber; - p_cdc->bInterfaceSubClass = itf_desc->bInterfaceSubClass; - p_cdc->bInterfaceProtocol = itf_desc->bInterfaceProtocol; - p_cdc->line_state = 0; - return p_cdc; - } +static cdch_interface_t* make_new_itf(uint8_t daddr, tusb_desc_interface_t const *itf_desc) { + for(uint8_t i=0; idaddr = daddr; + p_cdc->bInterfaceNumber = itf_desc->bInterfaceNumber; + p_cdc->bInterfaceSubClass = itf_desc->bInterfaceSubClass; + p_cdc->bInterfaceProtocol = itf_desc->bInterfaceProtocol; + p_cdc->line_state = 0; + return p_cdc; } + } - return NULL; + return NULL; } -static bool open_ep_stream_pair(cdch_interface_t *p_cdc, tusb_desc_endpoint_t const *desc_ep); -static void set_config_complete(cdch_interface_t *p_cdc, uint8_t idx, uint8_t itf_num); -static void cdch_internal_control_complete(tuh_xfer_t *xfer); +static bool open_ep_stream_pair(cdch_interface_t* p_cdc , tusb_desc_endpoint_t const *desc_ep); +static void set_config_complete(cdch_interface_t * p_cdc, uint8_t idx, uint8_t itf_num); +static void cdch_internal_control_complete(tuh_xfer_t* xfer); //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ -uint8_t tuh_cdc_itf_get_index(uint8_t daddr, uint8_t itf_num) -{ - for (uint8_t i = 0; i < CFG_TUH_CDC; i++) { - const cdch_interface_t *p_cdc = &cdch_data[i]; - if (p_cdc->daddr == daddr && p_cdc->bInterfaceNumber == itf_num) - return i; - } +uint8_t tuh_cdc_itf_get_index(uint8_t daddr, uint8_t itf_num) { + for (uint8_t i = 0; i < CFG_TUH_CDC; i++) { + const cdch_interface_t* p_cdc = &cdch_data[i]; + if (p_cdc->daddr == daddr && p_cdc->bInterfaceNumber == itf_num) return i; + } - return TUSB_INDEX_INVALID_8; + return TUSB_INDEX_INVALID_8; } -bool tuh_cdc_itf_get_info(uint8_t idx, tuh_itf_info_t *info) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && info); +bool tuh_cdc_itf_get_info(uint8_t idx, tuh_itf_info_t* info) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && info); - info->daddr = p_cdc->daddr; + info->daddr = p_cdc->daddr; - // re-construct descriptor - tusb_desc_interface_t *desc = &info->desc; - desc->bLength = sizeof(tusb_desc_interface_t); - desc->bDescriptorType = TUSB_DESC_INTERFACE; + // re-construct descriptor + tusb_desc_interface_t* desc = &info->desc; + desc->bLength = sizeof(tusb_desc_interface_t); + desc->bDescriptorType = TUSB_DESC_INTERFACE; - desc->bInterfaceNumber = p_cdc->bInterfaceNumber; - desc->bAlternateSetting = 0; - desc->bNumEndpoints = 2u + (p_cdc->ep_notif ? 1u : 0u); - desc->bInterfaceClass = TUSB_CLASS_CDC; - desc->bInterfaceSubClass = p_cdc->bInterfaceSubClass; - desc->bInterfaceProtocol = p_cdc->bInterfaceProtocol; - desc->iInterface = 0; // not used yet + desc->bInterfaceNumber = p_cdc->bInterfaceNumber; + desc->bAlternateSetting = 0; + desc->bNumEndpoints = 2u + (p_cdc->ep_notif ? 1u : 0u); + desc->bInterfaceClass = TUSB_CLASS_CDC; + desc->bInterfaceSubClass = p_cdc->bInterfaceSubClass; + desc->bInterfaceProtocol = p_cdc->bInterfaceProtocol; + desc->iInterface = 0; // not used yet - return true; + return true; } -bool tuh_cdc_mounted(uint8_t idx) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); - return p_cdc->mounted; +bool tuh_cdc_mounted(uint8_t idx) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); + return p_cdc->mounted; } -bool tuh_cdc_get_dtr(uint8_t idx) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_get_dtr(uint8_t idx) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return (p_cdc->line_state & CDC_CONTROL_LINE_STATE_DTR) ? true : false; + return (p_cdc->line_state & CDC_CONTROL_LINE_STATE_DTR) ? true : false; } -bool tuh_cdc_get_rts(uint8_t idx) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_get_rts(uint8_t idx) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return (p_cdc->line_state & CDC_CONTROL_LINE_STATE_RTS) ? true : false; + return (p_cdc->line_state & CDC_CONTROL_LINE_STATE_RTS) ? true : false; } -bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t *line_coding) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t* line_coding) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - *line_coding = p_cdc->line_coding; + *line_coding = p_cdc->line_coding; - return true; + return true; } //--------------------------------------------------------------------+ // Write //--------------------------------------------------------------------+ -uint32_t tuh_cdc_write(uint8_t idx, void const *buffer, uint32_t bufsize) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_write(uint8_t idx, void const* buffer, uint32_t bufsize) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_write(&p_cdc->stream.tx, buffer, bufsize); + return tu_edpt_stream_write(&p_cdc->stream.tx, buffer, bufsize); } -uint32_t tuh_cdc_write_flush(uint8_t idx) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_write_flush(uint8_t idx) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_write_xfer(&p_cdc->stream.tx); + return tu_edpt_stream_write_xfer(&p_cdc->stream.tx); } -bool tuh_cdc_write_clear(uint8_t idx) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_write_clear(uint8_t idx) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_clear(&p_cdc->stream.tx); + return tu_edpt_stream_clear(&p_cdc->stream.tx); } -uint32_t tuh_cdc_write_available(uint8_t idx) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_write_available(uint8_t idx) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_write_available(&p_cdc->stream.tx); + return tu_edpt_stream_write_available(&p_cdc->stream.tx); } //--------------------------------------------------------------------+ // Read //--------------------------------------------------------------------+ -uint32_t tuh_cdc_read(uint8_t idx, void *buffer, uint32_t bufsize) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_read (uint8_t idx, void* buffer, uint32_t bufsize) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_read(&p_cdc->stream.rx, buffer, bufsize); + return tu_edpt_stream_read(&p_cdc->stream.rx, buffer, bufsize); } -uint32_t tuh_cdc_read_available(uint8_t idx) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +uint32_t tuh_cdc_read_available(uint8_t idx) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_read_available(&p_cdc->stream.rx); + return tu_edpt_stream_read_available(&p_cdc->stream.rx); } -bool tuh_cdc_peek(uint8_t idx, uint8_t *ch) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_peek(uint8_t idx, uint8_t* ch) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - return tu_edpt_stream_peek(&p_cdc->stream.rx, ch); + return tu_edpt_stream_peek(&p_cdc->stream.rx, ch); } -bool tuh_cdc_read_clear(uint8_t idx) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc); +bool tuh_cdc_read_clear (uint8_t idx) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc); - bool ret = tu_edpt_stream_clear(&p_cdc->stream.rx); - tu_edpt_stream_read_xfer(&p_cdc->stream.rx); - return ret; + bool ret = tu_edpt_stream_clear(&p_cdc->stream.rx); + tu_edpt_stream_read_xfer(&p_cdc->stream.rx); + return ret; } //--------------------------------------------------------------------+ // Control Endpoint API //--------------------------------------------------------------------+ -static void process_internal_control_complete(tuh_xfer_t *xfer, uint8_t itf_num) -{ - uint8_t idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t *p_cdc = get_itf(idx); - TU_ASSERT(p_cdc, ); - uint16_t const value = tu_le16toh(xfer->setup->wValue); - - if (xfer->result == XFER_RESULT_SUCCESS) { - switch (p_cdc->serial_drid) { - case SERIAL_DRIVER_ACM: - switch (xfer->setup->bRequest) { - case CDC_REQUEST_SET_CONTROL_LINE_STATE: - p_cdc->line_state = (uint8_t)value; - break; +static void process_internal_control_complete(tuh_xfer_t* xfer, uint8_t itf_num) { + uint8_t idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t* p_cdc = get_itf(idx); + TU_ASSERT(p_cdc, ); + uint16_t const value = tu_le16toh(xfer->setup->wValue); + + if (xfer->result == XFER_RESULT_SUCCESS) { + switch (p_cdc->serial_drid) { + case SERIAL_DRIVER_ACM: + switch (xfer->setup->bRequest) { + case CDC_REQUEST_SET_CONTROL_LINE_STATE: + p_cdc->line_state = (uint8_t) value; + break; - case CDC_REQUEST_SET_LINE_CODING: { - uint16_t const len = - tu_min16(sizeof(cdc_line_coding_t), tu_le16toh(xfer->setup->wLength)); - memcpy(&p_cdc->line_coding, xfer->buffer, len); - break; - } + case CDC_REQUEST_SET_LINE_CODING: { + uint16_t const len = tu_min16(sizeof(cdc_line_coding_t), tu_le16toh(xfer->setup->wLength)); + memcpy(&p_cdc->line_coding, xfer->buffer, len); + break; + } - default: - break; - } + default: break; + } + break; + + #if CFG_TUH_CDC_FTDI + case SERIAL_DRIVER_FTDI: + switch (xfer->setup->bRequest) { + case FTDI_SIO_MODEM_CTRL: + p_cdc->line_state = (uint8_t) value; break; -#if CFG_TUH_CDC_FTDI - case SERIAL_DRIVER_FTDI: - switch (xfer->setup->bRequest) { - case FTDI_SIO_MODEM_CTRL: - p_cdc->line_state = (uint8_t)value; - break; + case FTDI_SIO_SET_BAUD_RATE: + p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; + break; - case FTDI_SIO_SET_BAUD_RATE: - p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; - break; + default: break; + } + break; + #endif - default: - break; - } + #if CFG_TUH_CDC_CP210X + case SERIAL_DRIVER_CP210X: + switch(xfer->setup->bRequest) { + case CP210X_SET_MHS: + p_cdc->line_state = (uint8_t) value; break; -#endif -#if CFG_TUH_CDC_CP210X - case SERIAL_DRIVER_CP210X: - switch (xfer->setup->bRequest) { - case CP210X_SET_MHS: - p_cdc->line_state = (uint8_t)value; - break; + case CP210X_SET_BAUDRATE: { + uint32_t baudrate; + memcpy(&baudrate, xfer->buffer, sizeof(uint32_t)); + p_cdc->line_coding.bit_rate = tu_le32toh(baudrate); + break; + } - case CP210X_SET_BAUDRATE: { - uint32_t baudrate; - memcpy(&baudrate, xfer->buffer, sizeof(uint32_t)); - p_cdc->line_coding.bit_rate = tu_le32toh(baudrate); + default: break; + } + break; + #endif + + #if CFG_TUH_CDC_CH34X + case SERIAL_DRIVER_CH34X: + switch (xfer->setup->bRequest) { + case CH34X_REQ_WRITE_REG: + // register write request + switch (value) { + case CH34X_REG16_DIVISOR_PRESCALER: + // baudrate + p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; break; - } - default: + case CH32X_REG16_LCR2_LCR: + // data format + p_cdc->line_coding.stop_bits = p_cdc->requested_line_coding.stop_bits; + p_cdc->line_coding.parity = p_cdc->requested_line_coding.parity; + p_cdc->line_coding.data_bits = p_cdc->requested_line_coding.data_bits; break; + + default: break; } break; -#endif - -#if CFG_TUH_CDC_CH34X - case SERIAL_DRIVER_CH34X: - switch (xfer->setup->bRequest) { - case CH34X_REQ_WRITE_REG: - // register write request - switch (value) { - case CH34X_REG16_DIVISOR_PRESCALER: - // baudrate - p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; - break; - - case CH32X_REG16_LCR2_LCR: - // data format - p_cdc->line_coding.stop_bits = p_cdc->requested_line_coding.stop_bits; - p_cdc->line_coding.parity = p_cdc->requested_line_coding.parity; - p_cdc->line_coding.data_bits = p_cdc->requested_line_coding.data_bits; - break; - - default: - break; - } - break; - case CH34X_REQ_MODEM_CTRL: { - // set modem controls RTS/DTR request. Note: signals are inverted - uint16_t const modem_signal = ~value; - if (modem_signal & CH34X_BIT_RTS) { - p_cdc->line_state |= CDC_CONTROL_LINE_STATE_RTS; - } else { - p_cdc->line_state &= (uint8_t)~CDC_CONTROL_LINE_STATE_RTS; - } - - if (modem_signal & CH34X_BIT_DTR) { - p_cdc->line_state |= CDC_CONTROL_LINE_STATE_DTR; - } else { - p_cdc->line_state &= (uint8_t)~CDC_CONTROL_LINE_STATE_DTR; - } - break; + case CH34X_REQ_MODEM_CTRL: { + // set modem controls RTS/DTR request. Note: signals are inverted + uint16_t const modem_signal = ~value; + if (modem_signal & CH34X_BIT_RTS) { + p_cdc->line_state |= CDC_CONTROL_LINE_STATE_RTS; + } else { + p_cdc->line_state &= (uint8_t) ~CDC_CONTROL_LINE_STATE_RTS; } - default: - break; + if (modem_signal & CH34X_BIT_DTR) { + p_cdc->line_state |= CDC_CONTROL_LINE_STATE_DTR; + } else { + p_cdc->line_state &= (uint8_t) ~CDC_CONTROL_LINE_STATE_DTR; } break; -#endif + } - default: - break; + default: break; } - } + break; + #endif - xfer->complete_cb = p_cdc->user_control_cb; - if (xfer->complete_cb) { - xfer->complete_cb(xfer); + default: break; } -} + } -// internal control complete to update state such as line state, encoding -static void cdch_internal_control_complete(tuh_xfer_t *xfer) -{ - uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); - process_internal_control_complete(xfer, itf_num); + xfer->complete_cb = p_cdc->user_control_cb; + if (xfer->complete_cb) { + xfer->complete_cb(xfer); + } } -bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_cb_t complete_cb, - uintptr_t user_data) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - cdch_serial_driver_t const *driver = &serial_drivers[p_cdc->serial_drid]; - - if (complete_cb) { - return driver->set_control_line_state(p_cdc, line_state, complete_cb, user_data); - } else { - // blocking - xfer_result_t result = XFER_RESULT_INVALID; - bool ret = - driver->set_control_line_state(p_cdc, line_state, complete_cb, (uintptr_t)&result); - - if (user_data) { - // user_data is not NULL, return result via user_data - *((xfer_result_t *)user_data) = result; - } - - TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); - p_cdc->line_state = (uint8_t)line_state; - return true; +// internal control complete to update state such as line state, encoding +static void cdch_internal_control_complete(tuh_xfer_t* xfer) { + uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); + process_internal_control_complete(xfer, itf_num); +} + +bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + cdch_serial_driver_t const* driver = &serial_drivers[p_cdc->serial_drid]; + + if (complete_cb) { + return driver->set_control_line_state(p_cdc, line_state, complete_cb, user_data); + } else { + // blocking + xfer_result_t result = XFER_RESULT_INVALID; + bool ret = driver->set_control_line_state(p_cdc, line_state, complete_cb, (uintptr_t) &result); + + if (user_data) { + // user_data is not NULL, return result via user_data + *((xfer_result_t*) user_data) = result; } -} -bool tuh_cdc_set_baudrate(uint8_t idx, uint32_t baudrate, tuh_xfer_cb_t complete_cb, - uintptr_t user_data) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - cdch_serial_driver_t const *driver = &serial_drivers[p_cdc->serial_drid]; + TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); + p_cdc->line_state = (uint8_t) line_state; + return true; + } +} - if (complete_cb) { - return driver->set_baudrate(p_cdc, baudrate, complete_cb, user_data); - } else { - // blocking - xfer_result_t result = XFER_RESULT_INVALID; - bool ret = driver->set_baudrate(p_cdc, baudrate, complete_cb, (uintptr_t)&result); +bool tuh_cdc_set_baudrate(uint8_t idx, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + cdch_serial_driver_t const* driver = &serial_drivers[p_cdc->serial_drid]; - if (user_data) { - // user_data is not NULL, return result via user_data - *((xfer_result_t *)user_data) = result; - } + if (complete_cb) { + return driver->set_baudrate(p_cdc, baudrate, complete_cb, user_data); + } else { + // blocking + xfer_result_t result = XFER_RESULT_INVALID; + bool ret = driver->set_baudrate(p_cdc, baudrate, complete_cb, (uintptr_t) &result); - TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); - p_cdc->line_coding.bit_rate = baudrate; - return true; + if (user_data) { + // user_data is not NULL, return result via user_data + *((xfer_result_t*) user_data) = result; } + + TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); + p_cdc->line_coding.bit_rate = baudrate; + return true; + } } bool tuh_cdc_set_data_format(uint8_t idx, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - cdch_serial_driver_t const *driver = &serial_drivers[p_cdc->serial_drid]; - - if (complete_cb) { - return driver->set_data_format(p_cdc, stop_bits, parity, data_bits, complete_cb, user_data); - } else { - // blocking - xfer_result_t result = XFER_RESULT_INVALID; - bool ret = driver->set_data_format(p_cdc, stop_bits, parity, data_bits, complete_cb, - (uintptr_t)&result); - - if (user_data) { - // user_data is not NULL, return result via user_data - *((xfer_result_t *)user_data) = result; - } - - TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); - p_cdc->line_coding.stop_bits = stop_bits; - p_cdc->line_coding.parity = parity; - p_cdc->line_coding.data_bits = data_bits; - return true; + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + cdch_serial_driver_t const* driver = &serial_drivers[p_cdc->serial_drid]; + + if (complete_cb) { + return driver->set_data_format(p_cdc, stop_bits, parity, data_bits, complete_cb, user_data); + } else { + // blocking + xfer_result_t result = XFER_RESULT_INVALID; + bool ret = driver->set_data_format(p_cdc, stop_bits, parity, data_bits, complete_cb, (uintptr_t) &result); + + if (user_data) { + // user_data is not NULL, return result via user_data + *((xfer_result_t*) user_data) = result; } -} -bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - cdch_interface_t *p_cdc = get_itf(idx); - TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - cdch_serial_driver_t const *driver = &serial_drivers[p_cdc->serial_drid]; + TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); + p_cdc->line_coding.stop_bits = stop_bits; + p_cdc->line_coding.parity = parity; + p_cdc->line_coding.data_bits = data_bits; + return true; + } +} - if (complete_cb) { - return driver->set_line_coding(p_cdc, line_coding, complete_cb, user_data); - } else { - // blocking - xfer_result_t result = XFER_RESULT_INVALID; - bool ret = driver->set_line_coding(p_cdc, line_coding, complete_cb, (uintptr_t)&result); +bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + cdch_interface_t* p_cdc = get_itf(idx); + TU_VERIFY(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + cdch_serial_driver_t const* driver = &serial_drivers[p_cdc->serial_drid]; - if (user_data) { - // user_data is not NULL, return result via user_data - *((xfer_result_t *)user_data) = result; - } + if ( complete_cb ) { + return driver->set_line_coding(p_cdc, line_coding, complete_cb, user_data); + } else { + // blocking + xfer_result_t result = XFER_RESULT_INVALID; + bool ret = driver->set_line_coding(p_cdc, line_coding, complete_cb, (uintptr_t) &result); - TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); - p_cdc->line_coding = *line_coding; - return true; + if (user_data) { + // user_data is not NULL, return result via user_data + *((xfer_result_t*) user_data) = result; } + + TU_VERIFY(ret && result == XFER_RESULT_SUCCESS); + p_cdc->line_coding = *line_coding; + return true; + } } //--------------------------------------------------------------------+ // CLASS-USBH API //--------------------------------------------------------------------+ -bool cdch_init(void) -{ - TU_LOG_DRV("sizeof(cdch_interface_t) = %u\r\n", sizeof(cdch_interface_t)); - tu_memclr(cdch_data, sizeof(cdch_data)); - for (size_t i = 0; i < CFG_TUH_CDC; i++) { - cdch_interface_t *p_cdc = &cdch_data[i]; - tu_edpt_stream_init(&p_cdc->stream.tx, true, true, false, p_cdc->stream.tx_ff_buf, - CFG_TUH_CDC_TX_BUFSIZE, p_cdc->stream.tx_ep_buf, CFG_TUH_CDC_TX_EPSIZE); - - tu_edpt_stream_init(&p_cdc->stream.rx, true, false, false, p_cdc->stream.rx_ff_buf, - CFG_TUH_CDC_RX_BUFSIZE, p_cdc->stream.rx_ep_buf, CFG_TUH_CDC_RX_EPSIZE); +bool cdch_init(void) { + TU_LOG_DRV("sizeof(cdch_interface_t) = %u\r\n", sizeof(cdch_interface_t)); + tu_memclr(cdch_data, sizeof(cdch_data)); + for (size_t i = 0; i < CFG_TUH_CDC; i++) { + cdch_interface_t* p_cdc = &cdch_data[i]; + tu_edpt_stream_init(&p_cdc->stream.tx, true, true, false, + p_cdc->stream.tx_ff_buf, CFG_TUH_CDC_TX_BUFSIZE, + p_cdc->stream.tx_ep_buf, CFG_TUH_CDC_TX_EPSIZE); + + tu_edpt_stream_init(&p_cdc->stream.rx, true, false, false, + p_cdc->stream.rx_ff_buf, CFG_TUH_CDC_RX_BUFSIZE, + p_cdc->stream.rx_ep_buf, CFG_TUH_CDC_RX_EPSIZE); + } + + return true; +} + +bool cdch_deinit(void) { + for (size_t i = 0; i < CFG_TUH_CDC; i++) { + cdch_interface_t* p_cdc = &cdch_data[i]; + tu_edpt_stream_deinit(&p_cdc->stream.tx); + tu_edpt_stream_deinit(&p_cdc->stream.rx); + } + return true; +} + +void cdch_close(uint8_t daddr) { + for (uint8_t idx = 0; idx < CFG_TUH_CDC; idx++) { + cdch_interface_t* p_cdc = &cdch_data[idx]; + if (p_cdc->daddr == daddr) { + TU_LOG_DRV(" CDCh close addr = %u index = %u\r\n", daddr, idx); + + // Invoke application callback + if (tuh_cdc_umount_cb) tuh_cdc_umount_cb(idx); + + p_cdc->daddr = 0; + p_cdc->bInterfaceNumber = 0; + p_cdc->mounted = false; + tu_edpt_stream_close(&p_cdc->stream.tx); + tu_edpt_stream_close(&p_cdc->stream.rx); } - - return true; + } } -bool cdch_deinit(void) -{ - for (size_t i = 0; i < CFG_TUH_CDC; i++) { - cdch_interface_t *p_cdc = &cdch_data[i]; - tu_edpt_stream_deinit(&p_cdc->stream.tx); - tu_edpt_stream_deinit(&p_cdc->stream.rx); - } - return true; -} +bool cdch_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) { + // TODO handle stall response, retry failed transfer ... + TU_ASSERT(event == XFER_RESULT_SUCCESS); -void cdch_close(uint8_t daddr) -{ - for (uint8_t idx = 0; idx < CFG_TUH_CDC; idx++) { - cdch_interface_t *p_cdc = &cdch_data[idx]; - if (p_cdc->daddr == daddr) { - TU_LOG_DRV(" CDCh close addr = %u index = %u\r\n", daddr, idx); + uint8_t const idx = get_idx_by_ep_addr(daddr, ep_addr); + cdch_interface_t * p_cdc = get_itf(idx); + TU_ASSERT(p_cdc); - // Invoke application callback - if (tuh_cdc_umount_cb) - tuh_cdc_umount_cb(idx); + if ( ep_addr == p_cdc->stream.tx.ep_addr ) { + // invoke tx complete callback to possibly refill tx fifo + if (tuh_cdc_tx_complete_cb) tuh_cdc_tx_complete_cb(idx); - p_cdc->daddr = 0; - p_cdc->bInterfaceNumber = 0; - p_cdc->mounted = false; - tu_edpt_stream_close(&p_cdc->stream.tx); - tu_edpt_stream_close(&p_cdc->stream.rx); - } + if ( 0 == tu_edpt_stream_write_xfer(&p_cdc->stream.tx) ) { + // If there is no data left, a ZLP should be sent if: + // - xferred_bytes is multiple of EP Packet size and not zero + tu_edpt_stream_write_zlp_if_needed(&p_cdc->stream.tx, xferred_bytes); + } + } else if ( ep_addr == p_cdc->stream.rx.ep_addr ) { + #if CFG_TUH_CDC_FTDI + if (p_cdc->serial_drid == SERIAL_DRIVER_FTDI) { + // FTDI reserve 2 bytes for status + // uint8_t status[2] = {p_cdc->stream.rx.ep_buf[0], p_cdc->stream.rx.ep_buf[1]}; + tu_edpt_stream_read_xfer_complete_offset(&p_cdc->stream.rx, xferred_bytes, 2); + }else + #endif + { + tu_edpt_stream_read_xfer_complete(&p_cdc->stream.rx, xferred_bytes); } -} - -bool cdch_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) -{ - // TODO handle stall response, retry failed transfer ... - TU_ASSERT(event == XFER_RESULT_SUCCESS); - - uint8_t const idx = get_idx_by_ep_addr(daddr, ep_addr); - cdch_interface_t *p_cdc = get_itf(idx); - TU_ASSERT(p_cdc); - - if (ep_addr == p_cdc->stream.tx.ep_addr) { - // invoke tx complete callback to possibly refill tx fifo - if (tuh_cdc_tx_complete_cb) - tuh_cdc_tx_complete_cb(idx); - - if (0 == tu_edpt_stream_write_xfer(&p_cdc->stream.tx)) { - // If there is no data left, a ZLP should be sent if: - // - xferred_bytes is multiple of EP Packet size and not zero - tu_edpt_stream_write_zlp_if_needed(&p_cdc->stream.tx, xferred_bytes); - } - } else if (ep_addr == p_cdc->stream.rx.ep_addr) { -#if CFG_TUH_CDC_FTDI - if (p_cdc->serial_drid == SERIAL_DRIVER_FTDI) { - // FTDI reserve 2 bytes for status - // uint8_t status[2] = {p_cdc->stream.rx.ep_buf[0], p_cdc->stream.rx.ep_buf[1]}; - tu_edpt_stream_read_xfer_complete_offset(&p_cdc->stream.rx, xferred_bytes, 2); - } else -#endif - { - tu_edpt_stream_read_xfer_complete(&p_cdc->stream.rx, xferred_bytes); - } - // invoke receive callback - if (tuh_cdc_rx_cb) - tuh_cdc_rx_cb(idx); + // invoke receive callback + if (tuh_cdc_rx_cb) tuh_cdc_rx_cb(idx); - // prepare for next transfer if needed - tu_edpt_stream_read_xfer(&p_cdc->stream.rx); - } else if (ep_addr == p_cdc->ep_notif) { - // TODO handle notification endpoint - } else { - TU_ASSERT(false); - } + // prepare for next transfer if needed + tu_edpt_stream_read_xfer(&p_cdc->stream.rx); + }else if ( ep_addr == p_cdc->ep_notif ) { + // TODO handle notification endpoint + }else { + TU_ASSERT(false); + } - return true; + return true; } //--------------------------------------------------------------------+ // Enumeration //--------------------------------------------------------------------+ -static bool open_ep_stream_pair(cdch_interface_t *p_cdc, tusb_desc_endpoint_t const *desc_ep) -{ - for (size_t i = 0; i < 2; i++) { - TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && - TUSB_XFER_BULK == desc_ep->bmAttributes.xfer); - TU_ASSERT(tuh_edpt_open(p_cdc->daddr, desc_ep)); - - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { - tu_edpt_stream_open(&p_cdc->stream.rx, p_cdc->daddr, desc_ep); - } else { - tu_edpt_stream_open(&p_cdc->stream.tx, p_cdc->daddr, desc_ep); - } +static bool open_ep_stream_pair(cdch_interface_t* p_cdc, tusb_desc_endpoint_t const* desc_ep) { + for (size_t i = 0; i < 2; i++) { + TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && + TUSB_XFER_BULK == desc_ep->bmAttributes.xfer); + TU_ASSERT(tuh_edpt_open(p_cdc->daddr, desc_ep)); - desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(desc_ep); + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { + tu_edpt_stream_open(&p_cdc->stream.rx, p_cdc->daddr, desc_ep); + } else { + tu_edpt_stream_open(&p_cdc->stream.tx, p_cdc->daddr, desc_ep); } - return true; + desc_ep = (tusb_desc_endpoint_t const*) tu_desc_next(desc_ep); + } + + return true; } -bool cdch_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const *itf_desc, - uint16_t max_len) -{ - (void)rhport; - - // For CDC: only support ACM subclass - // Note: Protocol 0xFF can be RNDIS device - if (TUSB_CLASS_CDC == itf_desc->bInterfaceClass && - CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass) { - return acm_open(daddr, itf_desc, max_len); - } else if (SERIAL_DRIVER_COUNT > 1 && TUSB_CLASS_VENDOR_SPECIFIC == itf_desc->bInterfaceClass) { - uint16_t vid, pid; - TU_VERIFY(tuh_vid_pid_get(daddr, &vid, &pid)); - - for (size_t dr = 1; dr < SERIAL_DRIVER_COUNT; dr++) { - cdch_serial_driver_t const *driver = &serial_drivers[dr]; - for (size_t i = 0; i < driver->vid_pid_count; i++) { - if (driver->vid_pid_list[i][0] == vid && driver->vid_pid_list[i][1] == pid) { - return driver->open(daddr, itf_desc, max_len); - } - } +bool cdch_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { + (void) rhport; + + // For CDC: only support ACM subclass + // Note: Protocol 0xFF can be RNDIS device + if (TUSB_CLASS_CDC == itf_desc->bInterfaceClass && + CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass) { + return acm_open(daddr, itf_desc, max_len); + } + else if (SERIAL_DRIVER_COUNT > 1 && + TUSB_CLASS_VENDOR_SPECIFIC == itf_desc->bInterfaceClass) { + uint16_t vid, pid; + TU_VERIFY(tuh_vid_pid_get(daddr, &vid, &pid)); + + for (size_t dr = 1; dr < SERIAL_DRIVER_COUNT; dr++) { + cdch_serial_driver_t const* driver = &serial_drivers[dr]; + for (size_t i = 0; i < driver->vid_pid_count; i++) { + if (driver->vid_pid_list[i][0] == vid && driver->vid_pid_list[i][1] == pid) { + return driver->open(daddr, itf_desc, max_len); } + } } + } - return false; + return false; } -static void set_config_complete(cdch_interface_t *p_cdc, uint8_t idx, uint8_t itf_num) -{ - TU_LOG_DRV("CDCh Set Configure complete\r\n"); - p_cdc->mounted = true; - if (tuh_cdc_mount_cb) - tuh_cdc_mount_cb(idx); +static void set_config_complete(cdch_interface_t * p_cdc, uint8_t idx, uint8_t itf_num) { + TU_LOG_DRV("CDCh Set Configure complete\r\n"); + p_cdc->mounted = true; + if (tuh_cdc_mount_cb) tuh_cdc_mount_cb(idx); - // Prepare for incoming data - tu_edpt_stream_read_xfer(&p_cdc->stream.rx); + // Prepare for incoming data + tu_edpt_stream_read_xfer(&p_cdc->stream.rx); - // notify usbh that driver enumeration is complete - usbh_driver_set_config_complete(p_cdc->daddr, itf_num); + // notify usbh that driver enumeration is complete + usbh_driver_set_config_complete(p_cdc->daddr, itf_num); } -bool cdch_set_config(uint8_t daddr, uint8_t itf_num) -{ - tusb_control_request_t request; - request.wIndex = tu_htole16((uint16_t)itf_num); +bool cdch_set_config(uint8_t daddr, uint8_t itf_num) { + tusb_control_request_t request; + request.wIndex = tu_htole16((uint16_t) itf_num); - // fake transfer to kick-off process - tuh_xfer_t xfer; - xfer.daddr = daddr; - xfer.result = XFER_RESULT_SUCCESS; - xfer.setup = &request; - xfer.user_data = 0; // initial state + // fake transfer to kick-off process + tuh_xfer_t xfer; + xfer.daddr = daddr; + xfer.result = XFER_RESULT_SUCCESS; + xfer.setup = &request; + xfer.user_data = 0; // initial state - uint8_t const idx = tuh_cdc_itf_get_index(daddr, itf_num); - cdch_interface_t *p_cdc = get_itf(idx); - TU_ASSERT(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); + uint8_t const idx = tuh_cdc_itf_get_index(daddr, itf_num); + cdch_interface_t * p_cdc = get_itf(idx); + TU_ASSERT(p_cdc && p_cdc->serial_drid < SERIAL_DRIVER_COUNT); - serial_drivers[p_cdc->serial_drid].process_set_config(&xfer); - return true; + serial_drivers[p_cdc->serial_drid].process_set_config(&xfer); + return true; } //--------------------------------------------------------------------+ @@ -855,178 +793,174 @@ bool cdch_set_config(uint8_t daddr, uint8_t itf_num) //--------------------------------------------------------------------+ enum { - CONFIG_ACM_SET_CONTROL_LINE_STATE = 0, - CONFIG_ACM_SET_LINE_CODING, - CONFIG_ACM_COMPLETE, + CONFIG_ACM_SET_CONTROL_LINE_STATE = 0, + CONFIG_ACM_SET_LINE_CODING, + CONFIG_ACM_COMPLETE, }; -static bool acm_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) -{ - uint8_t const *p_desc_end = ((uint8_t const *)itf_desc) + max_len; +static bool acm_open(uint8_t daddr, tusb_desc_interface_t const* itf_desc, uint16_t max_len) { + uint8_t const* p_desc_end = ((uint8_t const*) itf_desc) + max_len; - cdch_interface_t *p_cdc = make_new_itf(daddr, itf_desc); - TU_VERIFY(p_cdc); - p_cdc->serial_drid = SERIAL_DRIVER_ACM; + cdch_interface_t* p_cdc = make_new_itf(daddr, itf_desc); + TU_VERIFY(p_cdc); + p_cdc->serial_drid = SERIAL_DRIVER_ACM; - //------------- Control Interface -------------// - uint8_t const *p_desc = tu_desc_next(itf_desc); - - // Communication Functional Descriptors - while ((p_desc < p_desc_end) && (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc))) { - if (CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT == cdc_functional_desc_typeof(p_desc)) { - // save ACM bmCapabilities - p_cdc->acm_capability = ((cdc_desc_func_acm_t const *)p_desc)->bmCapabilities; - } + //------------- Control Interface -------------// + uint8_t const* p_desc = tu_desc_next(itf_desc); - p_desc = tu_desc_next(p_desc); + // Communication Functional Descriptors + while ((p_desc < p_desc_end) && (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc))) { + if (CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT == cdc_functional_desc_typeof(p_desc)) { + // save ACM bmCapabilities + p_cdc->acm_capability = ((cdc_desc_func_acm_t const*) p_desc)->bmCapabilities; } - // Open notification endpoint of control interface if any - if (itf_desc->bNumEndpoints == 1) { - TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)); - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + p_desc = tu_desc_next(p_desc); + } - TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); - p_cdc->ep_notif = desc_ep->bEndpointAddress; + // Open notification endpoint of control interface if any + if (itf_desc->bNumEndpoints == 1) { + TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)); + tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) p_desc; - p_desc = tu_desc_next(p_desc); - } + TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); + p_cdc->ep_notif = desc_ep->bEndpointAddress; - //------------- Data Interface (if any) -------------// - if ((TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && - (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const *)p_desc)->bInterfaceClass)) { - // next to endpoint descriptor - p_desc = tu_desc_next(p_desc); + p_desc = tu_desc_next(p_desc); + } - // data endpoints expected to be in pairs - TU_ASSERT(open_ep_stream_pair(p_cdc, (tusb_desc_endpoint_t const *)p_desc)); - } + //------------- Data Interface (if any) -------------// + if ((TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && + (TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const*) p_desc)->bInterfaceClass)) { + // next to endpoint descriptor + p_desc = tu_desc_next(p_desc); - return true; + // data endpoints expected to be in pairs + TU_ASSERT(open_ep_stream_pair(p_cdc, (tusb_desc_endpoint_t const*) p_desc)); + } + + return true; } -static void acm_process_config(tuh_xfer_t *xfer) -{ - uintptr_t const state = xfer->user_data; - uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t *p_cdc = get_itf(idx); - TU_ASSERT(p_cdc, ); +static void acm_process_config(tuh_xfer_t* xfer) { + uintptr_t const state = xfer->user_data; + uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t* p_cdc = get_itf(idx); + TU_ASSERT(p_cdc,); - switch (state) { + switch (state) { case CONFIG_ACM_SET_CONTROL_LINE_STATE: -#if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM - if (p_cdc->acm_capability.support_line_request) { - TU_ASSERT(acm_set_control_line_state(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, - acm_process_config, CONFIG_ACM_SET_LINE_CODING), ); - break; - } -#endif - TU_ATTR_FALLTHROUGH; + #if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM + if (p_cdc->acm_capability.support_line_request) { + TU_ASSERT(acm_set_control_line_state(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, acm_process_config, CONFIG_ACM_SET_LINE_CODING),); + break; + } + #endif + TU_ATTR_FALLTHROUGH; case CONFIG_ACM_SET_LINE_CODING: -#ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM - if (p_cdc->acm_capability.support_line_request) { - cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; - TU_ASSERT(acm_set_line_coding(p_cdc, &line_coding, acm_process_config, - CONFIG_ACM_COMPLETE), ); - break; - } -#endif - TU_ATTR_FALLTHROUGH; + #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM + if (p_cdc->acm_capability.support_line_request) { + cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; + TU_ASSERT(acm_set_line_coding(p_cdc, &line_coding, acm_process_config, CONFIG_ACM_COMPLETE),); + break; + } + #endif + TU_ATTR_FALLTHROUGH; case CONFIG_ACM_COMPLETE: - // itf_num+1 to account for data interface as well - set_config_complete(p_cdc, idx, itf_num + 1); - break; + // itf_num+1 to account for data interface as well + set_config_complete(p_cdc, idx, itf_num + 1); + break; default: - break; - } -} - -static bool acm_set_control_line_state(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - TU_VERIFY(p_cdc->acm_capability.support_line_request); - TU_LOG_DRV("CDC ACM Set Control Line State\r\n"); - - tusb_control_request_t const request = { - .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT }, - .bRequest = CDC_REQUEST_SET_CONTROL_LINE_STATE, - .wValue = tu_htole16(line_state), - .wIndex = tu_htole16((uint16_t)p_cdc->bInterfaceNumber), - .wLength = 0 - }; - - p_cdc->user_control_cb = complete_cb; - - tuh_xfer_t xfer = { .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request, - .buffer = NULL, - .complete_cb = complete_cb ? cdch_internal_control_complete : - NULL, // complete_cb is NULL for sync call - .user_data = user_data }; - - TU_ASSERT(tuh_control_xfer(&xfer)); - return true; -} - -static bool acm_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - TU_LOG_DRV("CDC ACM Set Line Conding\r\n"); - - tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = - TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT }, - .bRequest = CDC_REQUEST_SET_LINE_CODING, - .wValue = 0, - .wIndex = tu_htole16(p_cdc->bInterfaceNumber), - .wLength = tu_htole16(sizeof(cdc_line_coding_t)) }; - - // use usbh enum buf to hold line coding since user line_coding variable does not live long enough - uint8_t *enum_buf = usbh_get_enum_buf(); - memcpy(enum_buf, line_coding, sizeof(cdc_line_coding_t)); - - p_cdc->user_control_cb = complete_cb; - tuh_xfer_t xfer = { .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request, - .buffer = enum_buf, - .complete_cb = complete_cb ? cdch_internal_control_complete : - NULL, // complete_cb is NULL for sync call - .user_data = user_data }; - - TU_ASSERT(tuh_control_xfer(&xfer)); - return true; -} - -static bool acm_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - TU_LOG_DRV("CDC ACM Set Data Format\r\n"); - - cdc_line_coding_t line_coding; - line_coding.bit_rate = p_cdc->line_coding.bit_rate; - line_coding.stop_bits = stop_bits; - line_coding.parity = parity; - line_coding.data_bits = data_bits; - - return acm_set_line_coding(p_cdc, &line_coding, complete_cb, user_data); -} - -static bool acm_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, - uintptr_t user_data) -{ - TU_VERIFY(p_cdc->acm_capability.support_line_request); - cdc_line_coding_t line_coding = p_cdc->line_coding; - line_coding.bit_rate = baudrate; - return acm_set_line_coding(p_cdc, &line_coding, complete_cb, user_data); + break; + } +} + +static bool acm_set_control_line_state(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + TU_VERIFY(p_cdc->acm_capability.support_line_request); + TU_LOG_DRV("CDC ACM Set Control Line State\r\n"); + + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT + }, + .bRequest = CDC_REQUEST_SET_CONTROL_LINE_STATE, + .wValue = tu_htole16(line_state), + .wIndex = tu_htole16((uint16_t) p_cdc->bInterfaceNumber), + .wLength = 0 + }; + + p_cdc->user_control_cb = complete_cb; + + tuh_xfer_t xfer = { + .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request, + .buffer = NULL, + .complete_cb = complete_cb ? cdch_internal_control_complete : NULL, // complete_cb is NULL for sync call + .user_data = user_data + }; + + TU_ASSERT(tuh_control_xfer(&xfer)); + return true; +} + +static bool acm_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + TU_LOG_DRV("CDC ACM Set Line Conding\r\n"); + + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT + }, + .bRequest = CDC_REQUEST_SET_LINE_CODING, + .wValue = 0, + .wIndex = tu_htole16(p_cdc->bInterfaceNumber), + .wLength = tu_htole16(sizeof(cdc_line_coding_t)) + }; + + // use usbh enum buf to hold line coding since user line_coding variable does not live long enough + uint8_t* enum_buf = usbh_get_enum_buf(); + memcpy(enum_buf, line_coding, sizeof(cdc_line_coding_t)); + + p_cdc->user_control_cb = complete_cb; + tuh_xfer_t xfer = { + .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request, + .buffer = enum_buf, + .complete_cb = complete_cb ? cdch_internal_control_complete : NULL, // complete_cb is NULL for sync call + .user_data = user_data + }; + + TU_ASSERT(tuh_control_xfer(&xfer)); + return true; +} + +static bool acm_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + TU_LOG_DRV("CDC ACM Set Data Format\r\n"); + + cdc_line_coding_t line_coding; + line_coding.bit_rate = p_cdc->line_coding.bit_rate; + line_coding.stop_bits = stop_bits; + line_coding.parity = parity; + line_coding.data_bits = data_bits; + + return acm_set_line_coding(p_cdc, &line_coding, complete_cb, user_data); +} + +static bool acm_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + TU_VERIFY(p_cdc->acm_capability.support_line_request); + cdc_line_coding_t line_coding = p_cdc->line_coding; + line_coding.bit_rate = baudrate; + return acm_set_line_coding(p_cdc, &line_coding, complete_cb, user_data); } //--------------------------------------------------------------------+ @@ -1035,187 +969,176 @@ static bool acm_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, tuh_xfe #if CFG_TUH_CDC_FTDI enum { - CONFIG_FTDI_RESET = 0, - CONFIG_FTDI_MODEM_CTRL, - CONFIG_FTDI_SET_BAUDRATE, - CONFIG_FTDI_SET_DATA, - CONFIG_FTDI_COMPLETE + CONFIG_FTDI_RESET = 0, + CONFIG_FTDI_MODEM_CTRL, + CONFIG_FTDI_SET_BAUDRATE, + CONFIG_FTDI_SET_DATA, + CONFIG_FTDI_COMPLETE }; -static bool ftdi_open(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len) -{ - // FTDI Interface includes 1 vendor interface + 2 bulk endpoints - TU_VERIFY(itf_desc->bInterfaceSubClass == 0xff && itf_desc->bInterfaceProtocol == 0xff && - itf_desc->bNumEndpoints == 2); - TU_VERIFY(sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t) <= max_len); +static bool ftdi_open(uint8_t daddr, const tusb_desc_interface_t *itf_desc, uint16_t max_len) { + // FTDI Interface includes 1 vendor interface + 2 bulk endpoints + TU_VERIFY(itf_desc->bInterfaceSubClass == 0xff && itf_desc->bInterfaceProtocol == 0xff && itf_desc->bNumEndpoints == 2); + TU_VERIFY(sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t) <= max_len); - cdch_interface_t *p_cdc = make_new_itf(daddr, itf_desc); - TU_VERIFY(p_cdc); + cdch_interface_t * p_cdc = make_new_itf(daddr, itf_desc); + TU_VERIFY(p_cdc); - TU_LOG_DRV("FTDI opened\r\n"); - p_cdc->serial_drid = SERIAL_DRIVER_FTDI; + TU_LOG_DRV("FTDI opened\r\n"); + p_cdc->serial_drid = SERIAL_DRIVER_FTDI; - // endpoint pair - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); + // endpoint pair + tusb_desc_endpoint_t const * desc_ep = (tusb_desc_endpoint_t const *) tu_desc_next(itf_desc); - // data endpoints expected to be in pairs - return open_ep_stream_pair(p_cdc, desc_ep); + // data endpoints expected to be in pairs + return open_ep_stream_pair(p_cdc, desc_ep); } // set request without data -static bool ftdi_sio_set_request(cdch_interface_t *p_cdc, uint8_t command, uint16_t value, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = - TUSB_REQ_RCPT_DEVICE, - .type = TUSB_REQ_TYPE_VENDOR, - .direction = TUSB_DIR_OUT }, - .bRequest = command, - .wValue = tu_htole16(value), - .wIndex = 0, - .wLength = 0 }; - - tuh_xfer_t xfer = { .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request, - .buffer = NULL, - .complete_cb = complete_cb, - .user_data = user_data }; - - return tuh_control_xfer(&xfer); -} - -static bool ftdi_sio_reset(cdch_interface_t *p_cdc, tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - return ftdi_sio_set_request(p_cdc, FTDI_SIO_RESET, FTDI_SIO_RESET_SIO, complete_cb, user_data); -} - -static bool ftdi_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - (void)p_cdc; - (void)stop_bits; - (void)parity; - (void)data_bits; - (void)complete_cb; - (void)user_data; - // TODO not implemented yet - return false; -} - -static bool ftdi_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - (void)p_cdc; - (void)line_coding; - (void)complete_cb; - (void)user_data; - // TODO not implemented yet - return false; -} - -static bool ftdi_sio_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - TU_LOG_DRV("CDC FTDI Set Control Line State\r\n"); - p_cdc->user_control_cb = complete_cb; - TU_ASSERT(ftdi_sio_set_request(p_cdc, FTDI_SIO_MODEM_CTRL, 0x0300 | line_state, - complete_cb ? cdch_internal_control_complete : NULL, user_data)); - return true; -} - -static uint32_t ftdi_232bm_baud_base_to_divisor(uint32_t baud, uint32_t base) -{ - const uint8_t divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 }; - uint32_t divisor; - - /* divisor shifted 3 bits to the left */ - uint32_t divisor3 = base / (2 * baud); - divisor = (divisor3 >> 3); - divisor |= (uint32_t)divfrac[divisor3 & 0x7] << 14; - - /* Deal with special cases for highest baud rates. */ - if (divisor == 1) { /* 1.0 */ - divisor = 0; - } else if (divisor == 0x4001) { /* 1.5 */ - divisor = 1; - } - - return divisor; -} - -static uint32_t ftdi_232bm_baud_to_divisor(uint32_t baud) -{ - return ftdi_232bm_baud_base_to_divisor(baud, 48000000u); -} - -static bool ftdi_sio_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - uint16_t const divisor = (uint16_t)ftdi_232bm_baud_to_divisor(baudrate); - TU_LOG_DRV("CDC FTDI Set BaudRate = %" PRIu32 ", divisor = 0x%04x\r\n", baudrate, divisor); - - p_cdc->user_control_cb = complete_cb; - p_cdc->requested_line_coding.bit_rate = baudrate; - TU_ASSERT(ftdi_sio_set_request(p_cdc, FTDI_SIO_SET_BAUD_RATE, divisor, - complete_cb ? cdch_internal_control_complete : NULL, user_data)); - - return true; -} - -static void ftdi_process_config(tuh_xfer_t *xfer) -{ - uintptr_t const state = xfer->user_data; - uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t *p_cdc = get_itf(idx); - TU_ASSERT(p_cdc, ); - - switch (state) { +static bool ftdi_sio_set_request(cdch_interface_t* p_cdc, uint8_t command, uint16_t value, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_DEVICE, + .type = TUSB_REQ_TYPE_VENDOR, + .direction = TUSB_DIR_OUT + }, + .bRequest = command, + .wValue = tu_htole16(value), + .wIndex = 0, + .wLength = 0 + }; + + tuh_xfer_t xfer = { + .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request, + .buffer = NULL, + .complete_cb = complete_cb, + .user_data = user_data + }; + + return tuh_control_xfer(&xfer); +} + +static bool ftdi_sio_reset(cdch_interface_t* p_cdc, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + return ftdi_sio_set_request(p_cdc, FTDI_SIO_RESET, FTDI_SIO_RESET_SIO, complete_cb, user_data); +} + +static bool ftdi_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + (void) p_cdc; + (void) stop_bits; + (void) parity; + (void) data_bits; + (void) complete_cb; + (void) user_data; + // TODO not implemented yet + return false; +} + +static bool ftdi_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + (void) p_cdc; + (void) line_coding; + (void) complete_cb; + (void) user_data; + // TODO not implemented yet + return false; +} + +static bool ftdi_sio_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + TU_LOG_DRV("CDC FTDI Set Control Line State\r\n"); + p_cdc->user_control_cb = complete_cb; + TU_ASSERT(ftdi_sio_set_request(p_cdc, FTDI_SIO_MODEM_CTRL, 0x0300 | line_state, + complete_cb ? cdch_internal_control_complete : NULL, user_data)); + return true; +} + +static uint32_t ftdi_232bm_baud_base_to_divisor(uint32_t baud, uint32_t base) { + const uint8_t divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 }; + uint32_t divisor; + + /* divisor shifted 3 bits to the left */ + uint32_t divisor3 = base / (2 * baud); + divisor = (divisor3 >> 3); + divisor |= (uint32_t) divfrac[divisor3 & 0x7] << 14; + + /* Deal with special cases for highest baud rates. */ + if (divisor == 1) { /* 1.0 */ + divisor = 0; + } + else if (divisor == 0x4001) { /* 1.5 */ + divisor = 1; + } + + return divisor; +} + +static uint32_t ftdi_232bm_baud_to_divisor(uint32_t baud) { + return ftdi_232bm_baud_base_to_divisor(baud, 48000000u); +} + +static bool ftdi_sio_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + uint16_t const divisor = (uint16_t) ftdi_232bm_baud_to_divisor(baudrate); + TU_LOG_DRV("CDC FTDI Set BaudRate = %" PRIu32 ", divisor = 0x%04x\r\n", baudrate, divisor); + + p_cdc->user_control_cb = complete_cb; + p_cdc->requested_line_coding.bit_rate = baudrate; + TU_ASSERT(ftdi_sio_set_request(p_cdc, FTDI_SIO_SET_BAUD_RATE, divisor, + complete_cb ? cdch_internal_control_complete : NULL, user_data)); + + return true; +} + +static void ftdi_process_config(tuh_xfer_t* xfer) { + uintptr_t const state = xfer->user_data; + uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t * p_cdc = get_itf(idx); + TU_ASSERT(p_cdc, ); + + switch(state) { // Note may need to read FTDI eeprom case CONFIG_FTDI_RESET: - TU_ASSERT(ftdi_sio_reset(p_cdc, ftdi_process_config, CONFIG_FTDI_MODEM_CTRL), ); - break; + TU_ASSERT(ftdi_sio_reset(p_cdc, ftdi_process_config, CONFIG_FTDI_MODEM_CTRL),); + break; case CONFIG_FTDI_MODEM_CTRL: -#if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM - TU_ASSERT(ftdi_sio_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, - ftdi_process_config, CONFIG_FTDI_SET_BAUDRATE), ); - break; -#else - TU_ATTR_FALLTHROUGH; -#endif + #if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM + TU_ASSERT(ftdi_sio_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, ftdi_process_config, CONFIG_FTDI_SET_BAUDRATE),); + break; + #else + TU_ATTR_FALLTHROUGH; + #endif case CONFIG_FTDI_SET_BAUDRATE: { -#ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM - cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; - TU_ASSERT(ftdi_sio_set_baudrate(p_cdc, line_coding.bit_rate, ftdi_process_config, - CONFIG_FTDI_SET_DATA), ); - break; -#else - TU_ATTR_FALLTHROUGH; -#endif + #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM + cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; + TU_ASSERT(ftdi_sio_set_baudrate(p_cdc, line_coding.bit_rate, ftdi_process_config, CONFIG_FTDI_SET_DATA),); + break; + #else + TU_ATTR_FALLTHROUGH; + #endif } case CONFIG_FTDI_SET_DATA: { -#if 0 // TODO set data format -#ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM + #if 0 // TODO set data format + #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; TU_ASSERT(ftdi_sio_set_data(p_cdc, process_ftdi_config, CONFIG_FTDI_COMPLETE),); break; -#endif -#endif + #endif + #endif - TU_ATTR_FALLTHROUGH; + TU_ATTR_FALLTHROUGH; } case CONFIG_FTDI_COMPLETE: - set_config_complete(p_cdc, idx, itf_num); - break; + set_config_complete(p_cdc, idx, itf_num); + break; default: - break; - } + break; + } } #endif @@ -1227,163 +1150,149 @@ static void ftdi_process_config(tuh_xfer_t *xfer) #if CFG_TUH_CDC_CP210X enum { - CONFIG_CP210X_IFC_ENABLE = 0, - CONFIG_CP210X_SET_BAUDRATE, - CONFIG_CP210X_SET_LINE_CTL, - CONFIG_CP210X_SET_DTR_RTS, - CONFIG_CP210X_COMPLETE + CONFIG_CP210X_IFC_ENABLE = 0, + CONFIG_CP210X_SET_BAUDRATE, + CONFIG_CP210X_SET_LINE_CTL, + CONFIG_CP210X_SET_DTR_RTS, + CONFIG_CP210X_COMPLETE }; -static bool cp210x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) -{ - // CP210x Interface includes 1 vendor interface + 2 bulk endpoints - TU_VERIFY(itf_desc->bInterfaceSubClass == 0 && itf_desc->bInterfaceProtocol == 0 && - itf_desc->bNumEndpoints == 2); - TU_VERIFY(sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t) <= max_len); - - cdch_interface_t *p_cdc = make_new_itf(daddr, itf_desc); - TU_VERIFY(p_cdc); - - TU_LOG_DRV("CP210x opened\r\n"); - p_cdc->serial_drid = SERIAL_DRIVER_CP210X; - - // endpoint pair - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); - - // data endpoints expected to be in pairs - return open_ep_stream_pair(p_cdc, desc_ep); -} - -static bool cp210x_set_request(cdch_interface_t *p_cdc, uint8_t command, uint16_t value, - uint8_t *buffer, uint16_t length, tuh_xfer_cb_t complete_cb, - uintptr_t user_data) -{ - tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = - TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_VENDOR, - .direction = TUSB_DIR_OUT }, - .bRequest = command, - .wValue = tu_htole16(value), - .wIndex = p_cdc->bInterfaceNumber, - .wLength = tu_htole16(length) }; - - // use usbh enum buf since application variable does not live long enough - uint8_t *enum_buf = NULL; - - if (buffer && length > 0) { - enum_buf = usbh_get_enum_buf(); - tu_memcpy_s(enum_buf, CFG_TUH_ENUMERATION_BUFSIZE, buffer, length); - } - - tuh_xfer_t xfer = { .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request, - .buffer = enum_buf, - .complete_cb = complete_cb, - .user_data = user_data }; - - return tuh_control_xfer(&xfer); -} - -static bool cp210x_ifc_enable(cdch_interface_t *p_cdc, uint16_t enabled, tuh_xfer_cb_t complete_cb, - uintptr_t user_data) -{ - return cp210x_set_request(p_cdc, CP210X_IFC_ENABLE, enabled, NULL, 0, complete_cb, user_data); -} - -static bool cp210x_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - // TODO implement later - (void)p_cdc; - (void)line_coding; - (void)complete_cb; - (void)user_data; - return false; -} - -static bool cp210x_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - TU_LOG_DRV("CDC CP210x Set BaudRate = %" PRIu32 "\r\n", baudrate); - uint32_t baud_le = tu_htole32(baudrate); - p_cdc->user_control_cb = complete_cb; - return cp210x_set_request(p_cdc, CP210X_SET_BAUDRATE, 0, (uint8_t *)&baud_le, 4, - complete_cb ? cdch_internal_control_complete : NULL, user_data); -} - -static bool cp210x_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, - uintptr_t user_data) -{ - (void)p_cdc; - (void)stop_bits; - (void)parity; - (void)data_bits; - (void)complete_cb; - (void)user_data; - // TODO not implemented yet - return false; -} - -static bool cp210x_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - TU_LOG_DRV("CDC CP210x Set Control Line State\r\n"); - p_cdc->user_control_cb = complete_cb; - return cp210x_set_request(p_cdc, CP210X_SET_MHS, 0x0300 | line_state, NULL, 0, - complete_cb ? cdch_internal_control_complete : NULL, user_data); -} - -static void cp210x_process_config(tuh_xfer_t *xfer) -{ - uintptr_t const state = xfer->user_data; - uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t *p_cdc = get_itf(idx); - TU_ASSERT(p_cdc, ); - - switch (state) { +static bool cp210x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { + // CP210x Interface includes 1 vendor interface + 2 bulk endpoints + TU_VERIFY(itf_desc->bInterfaceSubClass == 0 && itf_desc->bInterfaceProtocol == 0 && itf_desc->bNumEndpoints == 2); + TU_VERIFY(sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t) <= max_len); + + cdch_interface_t * p_cdc = make_new_itf(daddr, itf_desc); + TU_VERIFY(p_cdc); + + TU_LOG_DRV("CP210x opened\r\n"); + p_cdc->serial_drid = SERIAL_DRIVER_CP210X; + + // endpoint pair + tusb_desc_endpoint_t const * desc_ep = (tusb_desc_endpoint_t const *) tu_desc_next(itf_desc); + + // data endpoints expected to be in pairs + return open_ep_stream_pair(p_cdc, desc_ep); +} + +static bool cp210x_set_request(cdch_interface_t* p_cdc, uint8_t command, uint16_t value, uint8_t* buffer, uint16_t length, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_VENDOR, + .direction = TUSB_DIR_OUT + }, + .bRequest = command, + .wValue = tu_htole16(value), + .wIndex = p_cdc->bInterfaceNumber, + .wLength = tu_htole16(length) + }; + + // use usbh enum buf since application variable does not live long enough + uint8_t* enum_buf = NULL; + + if (buffer && length > 0) { + enum_buf = usbh_get_enum_buf(); + tu_memcpy_s(enum_buf, CFG_TUH_ENUMERATION_BUFSIZE, buffer, length); + } + + tuh_xfer_t xfer = { + .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request, + .buffer = enum_buf, + .complete_cb = complete_cb, + .user_data = user_data + }; + + return tuh_control_xfer(&xfer); +} + +static bool cp210x_ifc_enable(cdch_interface_t* p_cdc, uint16_t enabled, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + return cp210x_set_request(p_cdc, CP210X_IFC_ENABLE, enabled, NULL, 0, complete_cb, user_data); +} + +static bool cp210x_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + // TODO implement later + (void) p_cdc; + (void) line_coding; + (void) complete_cb; + (void) user_data; + return false; +} + +static bool cp210x_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + TU_LOG_DRV("CDC CP210x Set BaudRate = %" PRIu32 "\r\n", baudrate); + uint32_t baud_le = tu_htole32(baudrate); + p_cdc->user_control_cb = complete_cb; + return cp210x_set_request(p_cdc, CP210X_SET_BAUDRATE, 0, (uint8_t *) &baud_le, 4, + complete_cb ? cdch_internal_control_complete : NULL, user_data); +} + +static bool cp210x_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + (void) p_cdc; + (void) stop_bits; + (void) parity; + (void) data_bits; + (void) complete_cb; + (void) user_data; + // TODO not implemented yet + return false; +} + +static bool cp210x_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + TU_LOG_DRV("CDC CP210x Set Control Line State\r\n"); + p_cdc->user_control_cb = complete_cb; + return cp210x_set_request(p_cdc, CP210X_SET_MHS, 0x0300 | line_state, NULL, 0, + complete_cb ? cdch_internal_control_complete : NULL, user_data); +} + +static void cp210x_process_config(tuh_xfer_t* xfer) { + uintptr_t const state = xfer->user_data; + uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t *p_cdc = get_itf(idx); + TU_ASSERT(p_cdc,); + + switch (state) { case CONFIG_CP210X_IFC_ENABLE: - TU_ASSERT(cp210x_ifc_enable(p_cdc, 1, cp210x_process_config, CONFIG_CP210X_SET_BAUDRATE), ); - break; + TU_ASSERT(cp210x_ifc_enable(p_cdc, 1, cp210x_process_config, CONFIG_CP210X_SET_BAUDRATE),); + break; case CONFIG_CP210X_SET_BAUDRATE: { -#ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM - cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; - TU_ASSERT(cp210x_set_baudrate(p_cdc, line_coding.bit_rate, cp210x_process_config, - CONFIG_CP210X_SET_LINE_CTL), ); - break; -#else - TU_ATTR_FALLTHROUGH; -#endif + #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM + cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; + TU_ASSERT(cp210x_set_baudrate(p_cdc, line_coding.bit_rate, cp210x_process_config, CONFIG_CP210X_SET_LINE_CTL),); + break; + #else + TU_ATTR_FALLTHROUGH; + #endif } case CONFIG_CP210X_SET_LINE_CTL: { -#if defined(CFG_TUH_CDC_LINE_CODING_ON_ENUM) && 0 // skip for now - cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; - break; -#else - TU_ATTR_FALLTHROUGH; -#endif + #if defined(CFG_TUH_CDC_LINE_CODING_ON_ENUM) && 0 // skip for now + cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM; + break; + #else + TU_ATTR_FALLTHROUGH; + #endif } case CONFIG_CP210X_SET_DTR_RTS: -#if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM - TU_ASSERT(cp210x_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, - cp210x_process_config, CONFIG_CP210X_COMPLETE), ); - break; -#else - TU_ATTR_FALLTHROUGH; -#endif + #if CFG_TUH_CDC_LINE_CONTROL_ON_ENUM + TU_ASSERT(cp210x_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, cp210x_process_config, CONFIG_CP210X_COMPLETE),); + break; + #else + TU_ATTR_FALLTHROUGH; + #endif case CONFIG_CP210X_COMPLETE: - set_config_complete(p_cdc, idx, itf_num); - break; + set_config_complete(p_cdc, idx, itf_num); + break; - default: - break; - } + default: break; + } } #endif @@ -1399,59 +1308,55 @@ static uint16_t ch34x_get_divisor_prescaler(uint32_t baval); //------------- control request -------------// -static bool ch34x_set_request(cdch_interface_t *p_cdc, uint8_t direction, uint8_t request, - uint16_t value, uint16_t index, uint8_t *buffer, uint16_t length, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - tusb_control_request_t const request_setup = { - .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_DEVICE, - .type = TUSB_REQ_TYPE_VENDOR, - .direction = direction & 0x01u }, - .bRequest = request, - .wValue = tu_htole16(value), - .wIndex = tu_htole16(index), - .wLength = tu_htole16(length) - }; - - // use usbh enum buf since application variable does not live long enough - uint8_t *enum_buf = NULL; - - if (buffer && length > 0) { - enum_buf = usbh_get_enum_buf(); - if (direction == TUSB_DIR_OUT) { - tu_memcpy_s(enum_buf, CFG_TUH_ENUMERATION_BUFSIZE, buffer, length); - } +static bool ch34x_set_request(cdch_interface_t* p_cdc, uint8_t direction, uint8_t request, uint16_t value, + uint16_t index, uint8_t* buffer, uint16_t length, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + tusb_control_request_t const request_setup = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_DEVICE, + .type = TUSB_REQ_TYPE_VENDOR, + .direction = direction & 0x01u + }, + .bRequest = request, + .wValue = tu_htole16 (value), + .wIndex = tu_htole16 (index), + .wLength = tu_htole16 (length) + }; + + // use usbh enum buf since application variable does not live long enough + uint8_t* enum_buf = NULL; + + if (buffer && length > 0) { + enum_buf = usbh_get_enum_buf(); + if (direction == TUSB_DIR_OUT) { + tu_memcpy_s(enum_buf, CFG_TUH_ENUMERATION_BUFSIZE, buffer, length); } + } - tuh_xfer_t xfer = { .daddr = p_cdc->daddr, - .ep_addr = 0, - .setup = &request_setup, - .buffer = enum_buf, - .complete_cb = complete_cb, - .user_data = user_data }; + tuh_xfer_t xfer = { + .daddr = p_cdc->daddr, + .ep_addr = 0, + .setup = &request_setup, + .buffer = enum_buf, + .complete_cb = complete_cb, + .user_data = user_data + }; - return tuh_control_xfer(&xfer); + return tuh_control_xfer(&xfer); } -static inline bool ch34x_control_out(cdch_interface_t *p_cdc, uint8_t request, uint16_t value, - uint16_t index, tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - return ch34x_set_request(p_cdc, TUSB_DIR_OUT, request, value, index, NULL, 0, complete_cb, - user_data); +static inline bool ch34x_control_out(cdch_interface_t* p_cdc, uint8_t request, uint16_t value, uint16_t index, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + return ch34x_set_request(p_cdc, TUSB_DIR_OUT, request, value, index, NULL, 0, complete_cb, user_data); } -static inline bool ch34x_control_in(cdch_interface_t *p_cdc, uint8_t request, uint16_t value, - uint16_t index, uint8_t *buffer, uint16_t buffersize, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - return ch34x_set_request(p_cdc, TUSB_DIR_IN, request, value, index, buffer, buffersize, - complete_cb, user_data); +static inline bool ch34x_control_in(cdch_interface_t* p_cdc, uint8_t request, uint16_t value, uint16_t index, + uint8_t* buffer, uint16_t buffersize, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + return ch34x_set_request(p_cdc, TUSB_DIR_IN, request, value, index, buffer, buffersize, + complete_cb, user_data); } -static inline bool ch34x_write_reg(cdch_interface_t *p_cdc, uint16_t reg, uint16_t reg_value, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - return ch34x_control_out(p_cdc, CH34X_REQ_WRITE_REG, reg, reg_value, complete_cb, user_data); +static inline bool ch34x_write_reg(cdch_interface_t* p_cdc, uint16_t reg, uint16_t reg_value, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + return ch34x_control_out(p_cdc, CH34X_REQ_WRITE_REG, reg, reg_value, complete_cb, user_data); } //static bool ch34x_read_reg_request ( cdch_interface_t* p_cdc, uint16_t reg, @@ -1460,324 +1365,306 @@ static inline bool ch34x_write_reg(cdch_interface_t *p_cdc, uint16_t reg, uint16 // return ch34x_control_in ( p_cdc, CH34X_REQ_READ_REG, reg, 0, buffer, buffersize, complete_cb, user_data ); //} -static bool ch34x_write_reg_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - uint16_t const div_ps = ch34x_get_divisor_prescaler(baudrate); - TU_VERIFY(div_ps); - TU_ASSERT( - ch34x_write_reg(p_cdc, CH34X_REG16_DIVISOR_PRESCALER, div_ps, complete_cb, user_data)); - return true; +static bool ch34x_write_reg_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + uint16_t const div_ps = ch34x_get_divisor_prescaler(baudrate); + TU_VERIFY(div_ps); + TU_ASSERT(ch34x_write_reg(p_cdc, CH34X_REG16_DIVISOR_PRESCALER, div_ps, + complete_cb, user_data)); + return true; } //------------- Driver API -------------// // internal control complete to update state such as line state, encoding -static void ch34x_control_complete(tuh_xfer_t *xfer) -{ - // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber - process_internal_control_complete(xfer, 0); -} - -static bool ch34x_set_data_format(cdch_interface_t *p_cdc, uint8_t stop_bits, uint8_t parity, - uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - p_cdc->requested_line_coding.stop_bits = stop_bits; - p_cdc->requested_line_coding.parity = parity; - p_cdc->requested_line_coding.data_bits = data_bits; - - uint8_t const lcr = ch34x_get_lcr(stop_bits, parity, data_bits); - TU_VERIFY(lcr); - TU_ASSERT(ch34x_control_out(p_cdc, CH34X_REQ_WRITE_REG, CH32X_REG16_LCR2_LCR, lcr, - complete_cb ? ch34x_control_complete : NULL, user_data)); - return true; -} - -static bool ch34x_set_baudrate(cdch_interface_t *p_cdc, uint32_t baudrate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - p_cdc->requested_line_coding.bit_rate = baudrate; - p_cdc->user_control_cb = complete_cb; - TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, baudrate, complete_cb ? ch34x_control_complete : NULL, - user_data)); - return true; -} - -static void ch34x_set_line_coding_stage1_complete(tuh_xfer_t *xfer) -{ - // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber - uint8_t const itf_num = 0; - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t *p_cdc = get_itf(idx); - TU_ASSERT(p_cdc, ); - - if (xfer->result == XFER_RESULT_SUCCESS) { - // stage 1 success, continue to stage 2 - p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; - TU_ASSERT(ch34x_set_data_format(p_cdc, p_cdc->requested_line_coding.stop_bits, - p_cdc->requested_line_coding.parity, - p_cdc->requested_line_coding.data_bits, - ch34x_control_complete, xfer->user_data), ); - } else { - // stage 1 failed, notify user - xfer->complete_cb = p_cdc->user_control_cb; - if (xfer->complete_cb) { - xfer->complete_cb(xfer); - } +static void ch34x_control_complete(tuh_xfer_t* xfer) { + // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber + process_internal_control_complete(xfer, 0); +} + +static bool ch34x_set_data_format(cdch_interface_t* p_cdc, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + p_cdc->requested_line_coding.stop_bits = stop_bits; + p_cdc->requested_line_coding.parity = parity; + p_cdc->requested_line_coding.data_bits = data_bits; + + uint8_t const lcr = ch34x_get_lcr(stop_bits, parity, data_bits); + TU_VERIFY(lcr); + TU_ASSERT (ch34x_control_out(p_cdc, CH34X_REQ_WRITE_REG, CH32X_REG16_LCR2_LCR, lcr, + complete_cb ? ch34x_control_complete : NULL, user_data)); + return true; +} + +static bool ch34x_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + p_cdc->requested_line_coding.bit_rate = baudrate; + p_cdc->user_control_cb = complete_cb; + TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, baudrate, + complete_cb ? ch34x_control_complete : NULL, user_data)); + return true; +} + +static void ch34x_set_line_coding_stage1_complete(tuh_xfer_t* xfer) { + // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber + uint8_t const itf_num = 0; + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t* p_cdc = get_itf(idx); + TU_ASSERT(p_cdc, ); + + if (xfer->result == XFER_RESULT_SUCCESS) { + // stage 1 success, continue to stage 2 + p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; + TU_ASSERT(ch34x_set_data_format(p_cdc, p_cdc->requested_line_coding.stop_bits, p_cdc->requested_line_coding.parity, + p_cdc->requested_line_coding.data_bits, ch34x_control_complete, xfer->user_data), ); + } else { + // stage 1 failed, notify user + xfer->complete_cb = p_cdc->user_control_cb; + if (xfer->complete_cb) { + xfer->complete_cb(xfer); } + } } // 2 stages: set baudrate (stage1) + set data format (stage2) -static bool ch34x_set_line_coding(cdch_interface_t *p_cdc, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - p_cdc->requested_line_coding = *line_coding; - p_cdc->user_control_cb = complete_cb; - - if (complete_cb) { - // stage 1 set baudrate - TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, line_coding->bit_rate, - ch34x_set_line_coding_stage1_complete, user_data)); - } else { - // sync call - xfer_result_t result; - - // stage 1 set baudrate - TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, line_coding->bit_rate, NULL, (uintptr_t)&result)); - TU_VERIFY(result == XFER_RESULT_SUCCESS); - p_cdc->line_coding.bit_rate = line_coding->bit_rate; - - // stage 2 set data format - TU_ASSERT(ch34x_set_data_format(p_cdc, line_coding->stop_bits, line_coding->parity, - line_coding->data_bits, NULL, (uintptr_t)&result)); - TU_VERIFY(result == XFER_RESULT_SUCCESS); - p_cdc->line_coding.stop_bits = line_coding->stop_bits; - p_cdc->line_coding.parity = line_coding->parity; - p_cdc->line_coding.data_bits = line_coding->data_bits; - - // update transfer result, user_data is expected to point to xfer_result_t - if (user_data) { - *((xfer_result_t *)user_data) = result; - } +static bool ch34x_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_coding, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + p_cdc->requested_line_coding = *line_coding; + p_cdc->user_control_cb = complete_cb; + + if (complete_cb) { + // stage 1 set baudrate + TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, line_coding->bit_rate, + ch34x_set_line_coding_stage1_complete, user_data)); + } else { + // sync call + xfer_result_t result; + + // stage 1 set baudrate + TU_ASSERT(ch34x_write_reg_baudrate(p_cdc, line_coding->bit_rate, NULL, (uintptr_t) &result)); + TU_VERIFY(result == XFER_RESULT_SUCCESS); + p_cdc->line_coding.bit_rate = line_coding->bit_rate; + + // stage 2 set data format + TU_ASSERT(ch34x_set_data_format(p_cdc, line_coding->stop_bits, line_coding->parity, line_coding->data_bits, + NULL, (uintptr_t) &result)); + TU_VERIFY(result == XFER_RESULT_SUCCESS); + p_cdc->line_coding.stop_bits = line_coding->stop_bits; + p_cdc->line_coding.parity = line_coding->parity; + p_cdc->line_coding.data_bits = line_coding->data_bits; + + // update transfer result, user_data is expected to point to xfer_result_t + if (user_data) { + *((xfer_result_t*) user_data) = result; } + } - return true; + return true; } -static bool ch34x_set_modem_ctrl(cdch_interface_t *p_cdc, uint16_t line_state, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - uint8_t control = 0; - if (line_state & CDC_CONTROL_LINE_STATE_RTS) { - control |= CH34X_BIT_RTS; - } - if (line_state & CDC_CONTROL_LINE_STATE_DTR) { - control |= CH34X_BIT_DTR; - } +static bool ch34x_set_modem_ctrl(cdch_interface_t* p_cdc, uint16_t line_state, + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + uint8_t control = 0; + if (line_state & CDC_CONTROL_LINE_STATE_RTS) { + control |= CH34X_BIT_RTS; + } + if (line_state & CDC_CONTROL_LINE_STATE_DTR) { + control |= CH34X_BIT_DTR; + } - // CH34x signals are inverted - control = ~control; + // CH34x signals are inverted + control = ~control; - p_cdc->user_control_cb = complete_cb; - TU_ASSERT(ch34x_control_out(p_cdc, CH34X_REQ_MODEM_CTRL, control, 0, - complete_cb ? ch34x_control_complete : NULL, user_data)); - return true; + p_cdc->user_control_cb = complete_cb; + TU_ASSERT (ch34x_control_out(p_cdc, CH34X_REQ_MODEM_CTRL, control, 0, + complete_cb ? ch34x_control_complete : NULL, user_data)); + return true; } //------------- Enumeration -------------// enum { - CONFIG_CH34X_READ_VERSION = 0, - CONFIG_CH34X_SERIAL_INIT, - CONFIG_CH34X_SPECIAL_REG_WRITE, - CONFIG_CH34X_FLOW_CONTROL, - CONFIG_CH34X_MODEM_CONTROL, - CONFIG_CH34X_COMPLETE + CONFIG_CH34X_READ_VERSION = 0, + CONFIG_CH34X_SERIAL_INIT, + CONFIG_CH34X_SPECIAL_REG_WRITE, + CONFIG_CH34X_FLOW_CONTROL, + CONFIG_CH34X_MODEM_CONTROL, + CONFIG_CH34X_COMPLETE }; -static bool ch34x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len) -{ - // CH34x Interface includes 1 vendor interface + 2 bulk + 1 interrupt endpoints - TU_VERIFY(itf_desc->bNumEndpoints == 3); - TU_VERIFY(sizeof(tusb_desc_interface_t) + 3 * sizeof(tusb_desc_endpoint_t) <= max_len); +static bool ch34x_open(uint8_t daddr, tusb_desc_interface_t const* itf_desc, uint16_t max_len) { + // CH34x Interface includes 1 vendor interface + 2 bulk + 1 interrupt endpoints + TU_VERIFY (itf_desc->bNumEndpoints == 3); + TU_VERIFY (sizeof(tusb_desc_interface_t) + 3 * sizeof(tusb_desc_endpoint_t) <= max_len); - cdch_interface_t *p_cdc = make_new_itf(daddr, itf_desc); - TU_VERIFY(p_cdc); + cdch_interface_t* p_cdc = make_new_itf(daddr, itf_desc); + TU_VERIFY (p_cdc); - TU_LOG_DRV("CH34x opened\r\n"); - p_cdc->serial_drid = SERIAL_DRIVER_CH34X; + TU_LOG_DRV ("CH34x opened\r\n"); + p_cdc->serial_drid = SERIAL_DRIVER_CH34X; - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)tu_desc_next(itf_desc); + tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) tu_desc_next(itf_desc); - // data endpoints expected to be in pairs - TU_ASSERT(open_ep_stream_pair(p_cdc, desc_ep)); - desc_ep += 2; + // data endpoints expected to be in pairs + TU_ASSERT(open_ep_stream_pair(p_cdc, desc_ep)); + desc_ep += 2; - // Interrupt endpoint: not used for now - TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(desc_ep) && - TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer); - TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); - p_cdc->ep_notif = desc_ep->bEndpointAddress; + // Interrupt endpoint: not used for now + TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(desc_ep) && + TUSB_XFER_INTERRUPT == desc_ep->bmAttributes.xfer); + TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); + p_cdc->ep_notif = desc_ep->bEndpointAddress; - return true; + return true; } -static void ch34x_process_config(tuh_xfer_t *xfer) -{ - // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber - uint8_t const itf_num = 0; - uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); - cdch_interface_t *p_cdc = get_itf(idx); - uintptr_t const state = xfer->user_data; - uint8_t buffer[2]; // TODO remove - TU_ASSERT(p_cdc, ); - TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); +static void ch34x_process_config(tuh_xfer_t* xfer) { + // CH34x only has 1 interface and use wIndex as payload and not for bInterfaceNumber + uint8_t const itf_num = 0; + uint8_t const idx = tuh_cdc_itf_get_index(xfer->daddr, itf_num); + cdch_interface_t* p_cdc = get_itf(idx); + uintptr_t const state = xfer->user_data; + uint8_t buffer[2]; // TODO remove + TU_ASSERT (p_cdc,); + TU_ASSERT (xfer->result == XFER_RESULT_SUCCESS,); - switch (state) { + switch (state) { case CONFIG_CH34X_READ_VERSION: - TU_LOG_DRV("[%u] CDCh CH34x attempt to read Chip Version\r\n", p_cdc->daddr); - TU_ASSERT(ch34x_control_in(p_cdc, CH34X_REQ_READ_VERSION, 0, 0, buffer, 2, - ch34x_process_config, CONFIG_CH34X_SERIAL_INIT), ); - break; + TU_LOG_DRV("[%u] CDCh CH34x attempt to read Chip Version\r\n", p_cdc->daddr); + TU_ASSERT (ch34x_control_in(p_cdc, CH34X_REQ_READ_VERSION, 0, 0, buffer, 2, ch34x_process_config, CONFIG_CH34X_SERIAL_INIT),); + break; case CONFIG_CH34X_SERIAL_INIT: { - // handle version read data, set CH34x line coding (incl. baudrate) - uint8_t const version = xfer->buffer[0]; - TU_LOG_DRV("[%u] CDCh CH34x Chip Version = %02x\r\n", p_cdc->daddr, version); - // only versions >= 0x30 are tested, below 0x30 seems having other programming, see drivers from WCH vendor, Linux kernel and FreeBSD - TU_ASSERT(version >= 0x30, ); - // init CH34x with line coding - cdc_line_coding_t const line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X; - uint16_t const div_ps = ch34x_get_divisor_prescaler(line_coding.bit_rate); - TU_ASSERT(div_ps, ); - uint8_t const lcr = - ch34x_get_lcr(line_coding.stop_bits, line_coding.parity, line_coding.data_bits); - TU_ASSERT(lcr, ); - TU_ASSERT(ch34x_control_out(p_cdc, CH34X_REQ_SERIAL_INIT, tu_u16(lcr, 0x9c), div_ps, - ch34x_process_config, CONFIG_CH34X_SPECIAL_REG_WRITE), ); - break; + // handle version read data, set CH34x line coding (incl. baudrate) + uint8_t const version = xfer->buffer[0]; + TU_LOG_DRV("[%u] CDCh CH34x Chip Version = %02x\r\n", p_cdc->daddr, version); + // only versions >= 0x30 are tested, below 0x30 seems having other programming, see drivers from WCH vendor, Linux kernel and FreeBSD + TU_ASSERT (version >= 0x30,); + // init CH34x with line coding + cdc_line_coding_t const line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X; + uint16_t const div_ps = ch34x_get_divisor_prescaler(line_coding.bit_rate); + TU_ASSERT(div_ps, ); + uint8_t const lcr = ch34x_get_lcr(line_coding.stop_bits, line_coding.parity, line_coding.data_bits); + TU_ASSERT(lcr, ); + TU_ASSERT (ch34x_control_out(p_cdc, CH34X_REQ_SERIAL_INIT, tu_u16(lcr, 0x9c), div_ps, + ch34x_process_config, CONFIG_CH34X_SPECIAL_REG_WRITE),); + break; } case CONFIG_CH34X_SPECIAL_REG_WRITE: - // overtake line coding and do special reg write, purpose unknown, overtaken from WCH driver - p_cdc->line_coding = ((cdc_line_coding_t)CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X); - TU_ASSERT(ch34x_write_reg(p_cdc, TU_U16(CH341_REG_0x0F, CH341_REG_0x2C), 0x0007, - ch34x_process_config, CONFIG_CH34X_FLOW_CONTROL), ); - break; + // overtake line coding and do special reg write, purpose unknown, overtaken from WCH driver + p_cdc->line_coding = ((cdc_line_coding_t) CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X); + TU_ASSERT (ch34x_write_reg(p_cdc, TU_U16(CH341_REG_0x0F, CH341_REG_0x2C), 0x0007, ch34x_process_config, CONFIG_CH34X_FLOW_CONTROL),); + break; case CONFIG_CH34X_FLOW_CONTROL: - // no hardware flow control - TU_ASSERT(ch34x_write_reg(p_cdc, TU_U16(CH341_REG_0x27, CH341_REG_0x27), 0x0000, - ch34x_process_config, CONFIG_CH34X_MODEM_CONTROL), ); - break; + // no hardware flow control + TU_ASSERT (ch34x_write_reg(p_cdc, TU_U16(CH341_REG_0x27, CH341_REG_0x27), 0x0000, ch34x_process_config, CONFIG_CH34X_MODEM_CONTROL),); + break; case CONFIG_CH34X_MODEM_CONTROL: - // !always! set modem controls RTS/DTR (CH34x has no reset state after CH34X_REQ_SERIAL_INIT) - TU_ASSERT(ch34x_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, - ch34x_process_config, CONFIG_CH34X_COMPLETE), ); - break; + // !always! set modem controls RTS/DTR (CH34x has no reset state after CH34X_REQ_SERIAL_INIT) + TU_ASSERT (ch34x_set_modem_ctrl(p_cdc, CFG_TUH_CDC_LINE_CONTROL_ON_ENUM, ch34x_process_config, CONFIG_CH34X_COMPLETE),); + break; case CONFIG_CH34X_COMPLETE: - set_config_complete(p_cdc, idx, itf_num); - break; + set_config_complete(p_cdc, idx, itf_num); + break; default: - TU_ASSERT(false, ); - break; - } + TU_ASSERT (false,); + break; + } } //------------- CH34x helper -------------// // calculate divisor and prescaler for baudrate, return it as 16-bit combined value -static uint16_t ch34x_get_divisor_prescaler(uint32_t baval) -{ - uint8_t a; - uint8_t b; - uint32_t c; - - TU_VERIFY(baval != 0 && baval <= 2000000, 0); - switch (baval) { +static uint16_t ch34x_get_divisor_prescaler(uint32_t baval) { + uint8_t a; + uint8_t b; + uint32_t c; + + TU_VERIFY(baval != 0 && baval <= 2000000, 0); + switch (baval) { case 921600: - a = 0xf3; - b = 7; - break; + a = 0xf3; + b = 7; + break; case 307200: - a = 0xd9; - b = 7; - break; + a = 0xd9; + b = 7; + break; default: - if (baval > 6000000 / 255) { - b = 3; - c = 6000000; - } else if (baval > 750000 / 255) { - b = 2; - c = 750000; - } else if (baval > 93750 / 255) { - b = 1; - c = 93750; - } else { - b = 0; - c = 11719; - } - a = (uint8_t)(c / baval); - if (a == 0 || a == 0xFF) { - return 0; - } - if ((c / a - baval) > (baval - c / (a + 1))) { - a++; - } - a = (uint8_t)(256 - a); - break; - } + if (baval > 6000000 / 255) { + b = 3; + c = 6000000; + } else if (baval > 750000 / 255) { + b = 2; + c = 750000; + } else if (baval > 93750 / 255) { + b = 1; + c = 93750; + } else { + b = 0; + c = 11719; + } + a = (uint8_t) (c / baval); + if (a == 0 || a == 0xFF) { + return 0; + } + if ((c / a - baval) > (baval - c / (a + 1))) { + a++; + } + a = (uint8_t) (256 - a); + break; + } - // reg divisor = a, reg prescaler = b - // According to linux code we need to set bit 7 of UCHCOM_REG_BPS_PRE, - // otherwise the chip will buffer data. - return (uint16_t)((uint16_t)a << 8 | 0x80 | b); + // reg divisor = a, reg prescaler = b + // According to linux code we need to set bit 7 of UCHCOM_REG_BPS_PRE, + // otherwise the chip will buffer data. + return (uint16_t) ((uint16_t)a << 8 | 0x80 | b); } // calculate lcr value from data coding -static uint8_t ch34x_get_lcr(uint8_t stop_bits, uint8_t parity, uint8_t data_bits) -{ - uint8_t lcr = CH34X_LCR_ENABLE_RX | CH34X_LCR_ENABLE_TX; - TU_VERIFY(data_bits >= 5 && data_bits <= 8, 0); - lcr |= (uint8_t)(data_bits - 5); +static uint8_t ch34x_get_lcr(uint8_t stop_bits, uint8_t parity, uint8_t data_bits) { + uint8_t lcr = CH34X_LCR_ENABLE_RX | CH34X_LCR_ENABLE_TX; + TU_VERIFY(data_bits >= 5 && data_bits <= 8, 0); + lcr |= (uint8_t) (data_bits - 5); - switch (parity) { + switch(parity) { case CDC_LINE_CODING_PARITY_NONE: - break; + break; case CDC_LINE_CODING_PARITY_ODD: - lcr |= CH34X_LCR_ENABLE_PAR; - break; + lcr |= CH34X_LCR_ENABLE_PAR; + break; case CDC_LINE_CODING_PARITY_EVEN: - lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_PAR_EVEN; - break; + lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_PAR_EVEN; + break; case CDC_LINE_CODING_PARITY_MARK: - lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_MARK_SPACE; - break; + lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_MARK_SPACE; + break; case CDC_LINE_CODING_PARITY_SPACE: - lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_MARK_SPACE | CH34X_LCR_PAR_EVEN; - break; + lcr |= CH34X_LCR_ENABLE_PAR | CH34X_LCR_MARK_SPACE | CH34X_LCR_PAR_EVEN; + break; - default: - break; - } + default: break; + } - // 1.5 stop bits not supported - TU_VERIFY(stop_bits != CDC_LINE_CODING_STOP_BITS_1_5, 0); - if (stop_bits == CDC_LINE_CODING_STOP_BITS_2) { - lcr |= CH34X_LCR_STOP_BITS_2; - } + // 1.5 stop bits not supported + TU_VERIFY(stop_bits != CDC_LINE_CODING_STOP_BITS_1_5, 0); + if (stop_bits == CDC_LINE_CODING_STOP_BITS_2) { + lcr |= CH34X_LCR_STOP_BITS_2; + } - return lcr; + return lcr; } + #endif // CFG_TUH_CDC_CH34X #endif diff --git a/Libraries/tinyusb/src/class/cdc/cdc_host.h b/Libraries/tinyusb/src/class/cdc/cdc_host.h index a82e1a9728a..b63dd153097 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_host.h +++ b/Libraries/tinyusb/src/class/cdc/cdc_host.h @@ -30,7 +30,7 @@ #include "cdc.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -39,7 +39,7 @@ extern "C" { // Set Line Control state on enumeration/mounted: DTR ( bit 0), RTS (bit 1) #ifndef CFG_TUH_CDC_LINE_CONTROL_ON_ENUM -#define CFG_TUH_CDC_LINE_CONTROL_ON_ENUM 0 +#define CFG_TUH_CDC_LINE_CONTROL_ON_ENUM 0 #endif // Set Line Coding on enumeration/mounted, value for cdc_line_coding_t @@ -54,7 +54,7 @@ extern "C" { // RX Endpoint size #ifndef CFG_TUH_CDC_RX_EPSIZE -#define CFG_TUH_CDC_RX_EPSIZE USBH_EPSIZE_BULK_MAX +#define CFG_TUH_CDC_RX_EPSIZE USBH_EPSIZE_BULK_MAX #endif // TX FIFO size @@ -64,7 +64,7 @@ extern "C" { // TX Endpoint size #ifndef CFG_TUH_CDC_TX_EPSIZE -#define CFG_TUH_CDC_TX_EPSIZE USBH_EPSIZE_BULK_MAX +#define CFG_TUH_CDC_TX_EPSIZE USBH_EPSIZE_BULK_MAX #endif //--------------------------------------------------------------------+ @@ -77,7 +77,7 @@ uint8_t tuh_cdc_itf_get_index(uint8_t daddr, uint8_t itf_num); // Get Interface information // return true if index is correct and interface is currently mounted -bool tuh_cdc_itf_get_info(uint8_t idx, tuh_itf_info_t *info); +bool tuh_cdc_itf_get_info(uint8_t idx, tuh_itf_info_t* info); // Check if a interface is mounted bool tuh_cdc_mounted(uint8_t idx); @@ -91,14 +91,14 @@ bool tuh_cdc_get_rts(uint8_t idx); // Check if interface is connected (DTR active) TU_ATTR_ALWAYS_INLINE static inline bool tuh_cdc_connected(uint8_t idx) { - return tuh_cdc_get_dtr(idx); + return tuh_cdc_get_dtr(idx); } // Get local (saved/cached) version of line coding. // This function should return correct values if tuh_cdc_set_line_coding() / tuh_cdc_get_line_coding() // are invoked previously or CFG_TUH_CDC_LINE_CODING_ON_ENUM is defined. // NOTE: This function does not make any USB transfer request to device. -bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t *line_coding); +bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t* line_coding); //--------------------------------------------------------------------+ // Write API @@ -108,7 +108,7 @@ bool tuh_cdc_get_local_line_coding(uint8_t idx, cdc_line_coding_t *line_coding); uint32_t tuh_cdc_write_available(uint8_t idx); // Write to cdc interface -uint32_t tuh_cdc_write(uint8_t idx, void const *buffer, uint32_t bufsize); +uint32_t tuh_cdc_write(uint8_t idx, void const* buffer, uint32_t bufsize); // Force sending data if possible, return number of forced bytes uint32_t tuh_cdc_write_flush(uint8_t idx); @@ -124,13 +124,13 @@ bool tuh_cdc_write_clear(uint8_t idx); uint32_t tuh_cdc_read_available(uint8_t idx); // Read from cdc interface -uint32_t tuh_cdc_read(uint8_t idx, void *buffer, uint32_t bufsize); +uint32_t tuh_cdc_read (uint8_t idx, void* buffer, uint32_t bufsize); // Get a byte from RX FIFO without removing it -bool tuh_cdc_peek(uint8_t idx, uint8_t *ch); +bool tuh_cdc_peek(uint8_t idx, uint8_t* ch); // Clear the received FIFO -bool tuh_cdc_read_clear(uint8_t idx); +bool tuh_cdc_read_clear (uint8_t idx); //--------------------------------------------------------------------+ // Control Endpoint (Request) API @@ -143,21 +143,17 @@ bool tuh_cdc_read_clear(uint8_t idx); //--------------------------------------------------------------------+ // Request to Set Control Line State: DTR (bit 0), RTS (bit 1) -bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_cb_t complete_cb, - uintptr_t user_data); +bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Request to set baudrate -bool tuh_cdc_set_baudrate(uint8_t idx, uint32_t baudrate, tuh_xfer_cb_t complete_cb, - uintptr_t user_data); +bool tuh_cdc_set_baudrate(uint8_t idx, uint32_t baudrate, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Request to set data format -bool tuh_cdc_set_data_format(uint8_t idx, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); +bool tuh_cdc_set_data_format(uint8_t idx, uint8_t stop_bits, uint8_t parity, uint8_t data_bits, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Request to Set Line Coding = baudrate + data format // Note: only implemented by ACM and CH34x, not supported by FTDI and CP210x yet -bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const *line_coding, - tuh_xfer_cb_t complete_cb, uintptr_t user_data); +bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const* line_coding, tuh_xfer_cb_t complete_cb, uintptr_t user_data); // Request to Get Line Coding (ACM only) // Should only use if tuh_cdc_set_line_coding() / tuh_cdc_get_line_coding() never got invoked and @@ -165,18 +161,15 @@ bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const *line_coding, // bool tuh_cdc_get_line_coding(uint8_t idx, cdc_line_coding_t* coding); // Connect by set both DTR, RTS -TU_ATTR_ALWAYS_INLINE static inline bool tuh_cdc_connect(uint8_t idx, tuh_xfer_cb_t complete_cb, - uintptr_t user_data) -{ - return tuh_cdc_set_control_line_state( - idx, CDC_CONTROL_LINE_STATE_DTR | CDC_CONTROL_LINE_STATE_RTS, complete_cb, user_data); +TU_ATTR_ALWAYS_INLINE static inline +bool tuh_cdc_connect(uint8_t idx, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + return tuh_cdc_set_control_line_state(idx, CDC_CONTROL_LINE_STATE_DTR | CDC_CONTROL_LINE_STATE_RTS, complete_cb, user_data); } // Disconnect by clear both DTR, RTS -TU_ATTR_ALWAYS_INLINE static inline bool tuh_cdc_disconnect(uint8_t idx, tuh_xfer_cb_t complete_cb, - uintptr_t user_data) -{ - return tuh_cdc_set_control_line_state(idx, 0x00, complete_cb, user_data); +TU_ATTR_ALWAYS_INLINE static inline +bool tuh_cdc_disconnect(uint8_t idx, tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + return tuh_cdc_set_control_line_state(idx, 0x00, complete_cb, user_data); } //--------------------------------------------------------------------+ @@ -199,16 +192,15 @@ TU_ATTR_WEAK extern void tuh_cdc_tx_complete_cb(uint8_t idx); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -bool cdch_init(void); -bool cdch_deinit(void); -bool cdch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, - uint16_t max_len); -bool cdch_set_config(uint8_t dev_addr, uint8_t itf_num); -bool cdch_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); -void cdch_close(uint8_t dev_addr); +bool cdch_init (void); +bool cdch_deinit (void); +bool cdch_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len); +bool cdch_set_config (uint8_t dev_addr, uint8_t itf_num); +bool cdch_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +void cdch_close (uint8_t dev_addr); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CDC_HOST_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/cdc_rndis.h b/Libraries/tinyusb/src/class/cdc/cdc_rndis.h index c3a3eddc36b..ad153e0ace7 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_rndis.h +++ b/Libraries/tinyusb/src/class/cdc/cdc_rndis.h @@ -36,7 +36,7 @@ #include "cdc.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif #ifdef __CC_ARM @@ -44,43 +44,40 @@ extern "C" { #endif /// RNDIS Message Types -typedef enum { - RNDIS_MSG_PACKET = - 0x00000001UL, ///< The host and device use this to send network data to one another. +typedef enum +{ + RNDIS_MSG_PACKET = 0x00000001UL, ///< The host and device use this to send network data to one another. - RNDIS_MSG_INITIALIZE = 0x00000002UL, ///< Sent by the host to initialize the device. - RNDIS_MSG_INITIALIZE_CMPLT = 0x80000002UL, ///< Device response to an initialize message. + RNDIS_MSG_INITIALIZE = 0x00000002UL, ///< Sent by the host to initialize the device. + RNDIS_MSG_INITIALIZE_CMPLT = 0x80000002UL, ///< Device response to an initialize message. - RNDIS_MSG_HALT = - 0x00000003UL, ///< Sent by the host to halt the device. This does not have a response. It is optional for the device to send this message to the host. + RNDIS_MSG_HALT = 0x00000003UL, ///< Sent by the host to halt the device. This does not have a response. It is optional for the device to send this message to the host. - RNDIS_MSG_QUERY = 0x00000004UL, ///< Sent by the host to send a query OID. - RNDIS_MSG_QUERY_CMPLT = 0x80000004UL, ///< Device response to a query OID. + RNDIS_MSG_QUERY = 0x00000004UL, ///< Sent by the host to send a query OID. + RNDIS_MSG_QUERY_CMPLT = 0x80000004UL, ///< Device response to a query OID. - RNDIS_MSG_SET = 0x00000005UL, ///< Sent by the host to send a set OID. - RNDIS_MSG_SET_CMPLT = 0x80000005UL, ///< Device response to a set OID. + RNDIS_MSG_SET = 0x00000005UL, ///< Sent by the host to send a set OID. + RNDIS_MSG_SET_CMPLT = 0x80000005UL, ///< Device response to a set OID. - RNDIS_MSG_RESET = 0x00000006UL, ///< Sent by the host to perform a soft reset on the device. - RNDIS_MSG_RESET_CMPLT = 0x80000006UL, ///< Device response to reset message. + RNDIS_MSG_RESET = 0x00000006UL, ///< Sent by the host to perform a soft reset on the device. + RNDIS_MSG_RESET_CMPLT = 0x80000006UL, ///< Device response to reset message. - RNDIS_MSG_INDICATE_STATUS = - 0x00000007UL, ///< Sent by the device to indicate its status or an error when an unrecognized message is received. + RNDIS_MSG_INDICATE_STATUS = 0x00000007UL, ///< Sent by the device to indicate its status or an error when an unrecognized message is received. - RNDIS_MSG_KEEP_ALIVE = - 0x00000008UL, ///< During idle periods, sent every few seconds by the host to check that the device is still responsive. It is optional for the device to send this message to check if the host is active. - RNDIS_MSG_KEEP_ALIVE_CMPLT = - 0x80000008UL ///< The device response to a keepalivemessage. The host can respond with this message to a keepalive message from the device when the device implements the optional KeepAliveTimer. -} rndis_msg_type_t; + RNDIS_MSG_KEEP_ALIVE = 0x00000008UL, ///< During idle periods, sent every few seconds by the host to check that the device is still responsive. It is optional for the device to send this message to check if the host is active. + RNDIS_MSG_KEEP_ALIVE_CMPLT = 0x80000008UL ///< The device response to a keepalivemessage. The host can respond with this message to a keepalive message from the device when the device implements the optional KeepAliveTimer. +}rndis_msg_type_t; /// RNDIS Message Status Values -typedef enum { - RNDIS_STATUS_SUCCESS = 0x00000000UL, ///< Success - RNDIS_STATUS_FAILURE = 0xC0000001UL, ///< Unspecified error - RNDIS_STATUS_INVALID_DATA = 0xC0010015UL, ///< Invalid data error - RNDIS_STATUS_NOT_SUPPORTED = 0xC00000BBUL, ///< Unsupported request error - RNDIS_STATUS_MEDIA_CONNECT = 0x4001000BUL, ///< Device is connected to a network medium. - RNDIS_STATUS_MEDIA_DISCONNECT = 0x4001000CUL ///< Device is disconnected from the medium. -} rndis_msg_status_t; +typedef enum +{ + RNDIS_STATUS_SUCCESS = 0x00000000UL, ///< Success + RNDIS_STATUS_FAILURE = 0xC0000001UL, ///< Unspecified error + RNDIS_STATUS_INVALID_DATA = 0xC0010015UL, ///< Invalid data error + RNDIS_STATUS_NOT_SUPPORTED = 0xC00000BBUL, ///< Unsupported request error + RNDIS_STATUS_MEDIA_CONNECT = 0x4001000BUL, ///< Device is connected to a network medium. + RNDIS_STATUS_MEDIA_DISCONNECT = 0x4001000CUL ///< Device is disconnected from the medium. +}rndis_msg_status_t; #ifdef __CC_ARM #pragma diag_default 66 // return Keil 66 to normal severity @@ -94,98 +91,77 @@ typedef enum { /// \brief Initialize Message /// \details This message MUST be sent by the host to initialize the device. typedef struct { - uint32_t type; ///< Message type, must be \ref RNDIS_MSG_INITIALIZE - uint32_t length; ///< Message length in bytes, must be 0x18 - uint32_t - request_id; ///< A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. - uint32_t major_version; ///< The major version of the RNDIS Protocol implemented by the host. - uint32_t minor_version; ///< The minor version of the RNDIS Protocol implemented by the host - uint32_t - max_xfer_size; ///< The maximum size, in bytes, of any single bus data transfer that the host expects to receive from the device. -} rndis_msg_initialize_t; + uint32_t type ; ///< Message type, must be \ref RNDIS_MSG_INITIALIZE + uint32_t length ; ///< Message length in bytes, must be 0x18 + uint32_t request_id ; ///< A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. + uint32_t major_version ; ///< The major version of the RNDIS Protocol implemented by the host. + uint32_t minor_version ; ///< The minor version of the RNDIS Protocol implemented by the host + uint32_t max_xfer_size ; ///< The maximum size, in bytes, of any single bus data transfer that the host expects to receive from the device. +}rndis_msg_initialize_t; /// \brief Initialize Complete Message /// \details This message MUST be sent by the device in response to an initialize message. typedef struct { - uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_INITIALIZE_CMPLT - uint32_t length; ///< Message length in bytes, must be 0x30 - uint32_t - request_id; ///< A 32-bit integer value from \a request_id field of the \ref rndis_msg_initialize_t to which this message is a response. - uint32_t - status; ///< The initialization status of the device, has value from \ref rndis_msg_status_t - uint32_t major_version; ///< the highest-numbered RNDIS Protocol version supported by the device. - uint32_t minor_version; ///< the highest-numbered RNDIS Protocol version supported by the device. - uint32_t device_flags; ///< MUST be set to 0x000000010. Other values are reserved for future use. - uint32_t medium; ///< is 0x00 for RNDIS_MEDIUM_802_3 - uint32_t - max_packet_per_xfer; ///< The maximum number of concatenated \ref RNDIS_MSG_PACKET messages that the device can handle in a single bus transfer to it. This value MUST be at least 1. - uint32_t - max_xfer_size; ///< The maximum size, in bytes, of any single bus data transfer that the device expects to receive from the host. - uint32_t - packet_alignment_factor; ///< The byte alignment the device expects for each RNDIS message that is part of a multimessage transfer to it. The value is specified as an exponent of 2; for example, the host uses 2{PacketAlignmentFactor} as the alignment value. - uint32_t reserved[2]; + uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_INITIALIZE_CMPLT + uint32_t length ; ///< Message length in bytes, must be 0x30 + uint32_t request_id ; ///< A 32-bit integer value from \a request_id field of the \ref rndis_msg_initialize_t to which this message is a response. + uint32_t status ; ///< The initialization status of the device, has value from \ref rndis_msg_status_t + uint32_t major_version ; ///< the highest-numbered RNDIS Protocol version supported by the device. + uint32_t minor_version ; ///< the highest-numbered RNDIS Protocol version supported by the device. + uint32_t device_flags ; ///< MUST be set to 0x000000010. Other values are reserved for future use. + uint32_t medium ; ///< is 0x00 for RNDIS_MEDIUM_802_3 + uint32_t max_packet_per_xfer ; ///< The maximum number of concatenated \ref RNDIS_MSG_PACKET messages that the device can handle in a single bus transfer to it. This value MUST be at least 1. + uint32_t max_xfer_size ; ///< The maximum size, in bytes, of any single bus data transfer that the device expects to receive from the host. + uint32_t packet_alignment_factor ; ///< The byte alignment the device expects for each RNDIS message that is part of a multimessage transfer to it. The value is specified as an exponent of 2; for example, the host uses 2{PacketAlignmentFactor} as the alignment value. + uint32_t reserved[2] ; } rndis_msg_initialize_cmplt_t; //------------- Query -------------// /// \brief Query Message /// \details This message MUST be sent by the host to query an OID. typedef struct { - uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_QUERY - uint32_t length; ///< Message length in bytes, including the header and the \a oid_buffer - uint32_t - request_id; ///< A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. - uint32_t - oid; ///< The integer value of the host operating system-defined identifier, for the parameter of the device being queried for. - uint32_t - buffer_length; ///< The length, in bytes, of the input data required for the OID query. This MUST be set to 0 when there is no input data associated with the OID. - uint32_t - buffer_offset; ///< The offset, in bytes, from the beginning of \a request_id field where the input data for the query is located in the message. This value MUST be set to 0 when there is no input data associated with the OID. - uint32_t reserved; - uint8_t oid_buffer - []; ///< Flexible array contains the input data supplied by the host, required for the OID query request processing by the device, as per the host NDIS specification. + uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_QUERY + uint32_t length ; ///< Message length in bytes, including the header and the \a oid_buffer + uint32_t request_id ; ///< A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. + uint32_t oid ; ///< The integer value of the host operating system-defined identifier, for the parameter of the device being queried for. + uint32_t buffer_length ; ///< The length, in bytes, of the input data required for the OID query. This MUST be set to 0 when there is no input data associated with the OID. + uint32_t buffer_offset ; ///< The offset, in bytes, from the beginning of \a request_id field where the input data for the query is located in the message. This value MUST be set to 0 when there is no input data associated with the OID. + uint32_t reserved ; + uint8_t oid_buffer[] ; ///< Flexible array contains the input data supplied by the host, required for the OID query request processing by the device, as per the host NDIS specification. } rndis_msg_query_t, rndis_msg_set_t; -TU_VERIFY_STATIC(sizeof(rndis_msg_query_t) == 28, - "Make sure flexible array member does not affect layout"); +TU_VERIFY_STATIC(sizeof(rndis_msg_query_t) == 28, "Make sure flexible array member does not affect layout"); /// \brief Query Complete Message /// \details This message MUST be sent by the device in response to a query OID message. typedef struct { - uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_QUERY_CMPLT - uint32_t length; ///< Message length in bytes, including the header and the \a oid_buffer - uint32_t - request_id; ///< A 32-bit integer value from \a request_id field of the \ref rndis_msg_query_t to which this message is a response. - uint32_t - status; ///< The status of processing for the query request, has value from \ref rndis_msg_status_t. - uint32_t - buffer_length; ///< The length, in bytes, of the data in the response to the query. This MUST be set to 0 when there is no OIDInputBuffer. - uint32_t - buffer_offset; ///< The offset, in bytes, from the beginning of \a request_id field where the response data for the query is located in the message. This MUST be set to 0 when there is no \ref oid_buffer. - uint8_t oid_buffer - []; ///< Flexible array member contains the response data to the OID query request as specified by the host. + uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_QUERY_CMPLT + uint32_t length ; ///< Message length in bytes, including the header and the \a oid_buffer + uint32_t request_id ; ///< A 32-bit integer value from \a request_id field of the \ref rndis_msg_query_t to which this message is a response. + uint32_t status ; ///< The status of processing for the query request, has value from \ref rndis_msg_status_t. + uint32_t buffer_length ; ///< The length, in bytes, of the data in the response to the query. This MUST be set to 0 when there is no OIDInputBuffer. + uint32_t buffer_offset ; ///< The offset, in bytes, from the beginning of \a request_id field where the response data for the query is located in the message. This MUST be set to 0 when there is no \ref oid_buffer. + uint8_t oid_buffer[] ; ///< Flexible array member contains the response data to the OID query request as specified by the host. } rndis_msg_query_cmplt_t; -TU_VERIFY_STATIC(sizeof(rndis_msg_query_cmplt_t) == 24, - "Make sure flexible array member does not affect layout"); +TU_VERIFY_STATIC(sizeof(rndis_msg_query_cmplt_t) == 24, "Make sure flexible array member does not affect layout"); //------------- Reset -------------// /// \brief Reset Message /// \details This message MUST be sent by the host to perform a soft reset on the device. typedef struct { - uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_RESET - uint32_t length; ///< Message length in bytes, MUST be 0x06 - uint32_t reserved; + uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_RESET + uint32_t length ; ///< Message length in bytes, MUST be 0x06 + uint32_t reserved ; } rndis_msg_reset_t; /// \brief Reset Complete Message /// \details This message MUST be sent by the device in response to a reset message. typedef struct { - uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_RESET_CMPLT - uint32_t length; ///< Message length in bytes, MUST be 0x10 - uint32_t - status; ///< The status of processing for the \ref rndis_msg_reset_t, has value from \ref rndis_msg_status_t. - uint32_t - addressing_reset; ///< This field indicates whether the addressing information, which is the multicast address list or packet filter, has been lost during the reset operation. This MUST be set to 0x00000001 if the device requires that the host to resend addressing information or MUST be set to zero otherwise. + uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_RESET_CMPLT + uint32_t length ; ///< Message length in bytes, MUST be 0x10 + uint32_t status ; ///< The status of processing for the \ref rndis_msg_reset_t, has value from \ref rndis_msg_status_t. + uint32_t addressing_reset ; ///< This field indicates whether the addressing information, which is the multicast address list or packet filter, has been lost during the reset operation. This MUST be set to 0x00000001 if the device requires that the host to resend addressing information or MUST be set to zero otherwise. } rndis_msg_reset_cmplt_t; //typedef struct { @@ -202,62 +178,54 @@ typedef struct { /// \brief Keep Alive Message /// \details This message MUST be sent by the host to check that device is still responsive. It is optional for the device to send this message to check if the host is active typedef struct { - uint32_t type; ///< Message Type - uint32_t length; ///< Message length in bytes, MUST be 0x10 - uint32_t request_id; + uint32_t type ; ///< Message Type + uint32_t length ; ///< Message length in bytes, MUST be 0x10 + uint32_t request_id ; } rndis_msg_keep_alive_t, rndis_msg_halt_t; /// \brief Set Complete Message /// \brief This message MUST be sent in response to a the request message typedef struct { - uint32_t type; ///< Message Type - uint32_t length; ///< Message length in bytes, MUST be 0x10 - uint32_t request_id; ///< must be the same as requesting message - uint32_t - status; ///< The status of processing for the request message request by the device to which this message is the response. + uint32_t type ; ///< Message Type + uint32_t length ; ///< Message length in bytes, MUST be 0x10 + uint32_t request_id ; ///< must be the same as requesting message + uint32_t status ; ///< The status of processing for the request message request by the device to which this message is the response. } rndis_msg_set_cmplt_t, rndis_msg_keep_alive_cmplt_t; /// \brief Packet Data Message /// \brief This message MUST be used by the host and the device to send network data to one another. typedef struct { - uint32_t type; ///< Message Type, must be \ref RNDIS_MSG_PACKET - uint32_t - length; ///< Message length in bytes, The total length of this RNDIS message including the header, payload, and padding. - uint32_t - data_offset; ///< Specifies the offset, in bytes, from the start of this \a data_offset field of this message to the start of the data. This MUST be an integer multiple of 4. - uint32_t data_length; ///< Specifies the number of bytes in the payload of this message. - uint32_t - out_of_band_data_offet; ///< Specifies the offset, in bytes, of the first out-of-band data record from the start of the DataOffset field in this message. MUST be an integer multiple of 4 when out-of-band data is present or set to 0 otherwise. When there are multiple out-ofband data records, each subsequent record MUST immediately follow the previous out-of-band data record. - uint32_t - out_of_band_data_length; ///< Specifies, in bytes, the total length of the out-of-band data. - uint32_t - num_out_of_band_data_elements; ///< Specifies the number of out-of-band records in this message. - uint32_t - per_packet_info_offset; ///< Specifies the offset, in bytes, of the start of per-packet-info data record from the start of the \a data_offset field in this message. MUST be an integer multiple of 4 when per-packet-info data record is present or MUST be set to 0 otherwise. When there are multiple per-packet-info data records, each subsequent record MUST immediately follow the previous record. - uint32_t - per_packet_info_length; ///< Specifies, in bytes, the total length of per-packetinformation contained in this message. - uint32_t reserved[2]; - uint32_t payload[0]; ///< Network data contained in this message. - - // uint8_t padding[0] - // Additional bytes of zeros added at the end of the message to comply with - // the internal and external padding requirements. Internal padding SHOULD be as per the - // specification of the out-of-band data record and per-packet-info data record. The external - //padding size SHOULD be determined based on the PacketAlignmentFactor field specification - //in REMOTE_NDIS_INITIALIZE_CMPLT message by the device, when multiple - //REMOTE_NDIS_PACKET_MSG messages are bundled together in a single bus-native message. - //In this case, all but the very last REMOTE_NDIS_PACKET_MSG MUST respect the - //PacketAlignmentFactor field. - - // rndis_msg_packet_t [0] : (optional) more packet if multiple packet per bus transaction is supported + uint32_t type ; ///< Message Type, must be \ref RNDIS_MSG_PACKET + uint32_t length ; ///< Message length in bytes, The total length of this RNDIS message including the header, payload, and padding. + uint32_t data_offset ; ///< Specifies the offset, in bytes, from the start of this \a data_offset field of this message to the start of the data. This MUST be an integer multiple of 4. + uint32_t data_length ; ///< Specifies the number of bytes in the payload of this message. + uint32_t out_of_band_data_offet ; ///< Specifies the offset, in bytes, of the first out-of-band data record from the start of the DataOffset field in this message. MUST be an integer multiple of 4 when out-of-band data is present or set to 0 otherwise. When there are multiple out-ofband data records, each subsequent record MUST immediately follow the previous out-of-band data record. + uint32_t out_of_band_data_length ; ///< Specifies, in bytes, the total length of the out-of-band data. + uint32_t num_out_of_band_data_elements ; ///< Specifies the number of out-of-band records in this message. + uint32_t per_packet_info_offset ; ///< Specifies the offset, in bytes, of the start of per-packet-info data record from the start of the \a data_offset field in this message. MUST be an integer multiple of 4 when per-packet-info data record is present or MUST be set to 0 otherwise. When there are multiple per-packet-info data records, each subsequent record MUST immediately follow the previous record. + uint32_t per_packet_info_length ; ///< Specifies, in bytes, the total length of per-packetinformation contained in this message. + uint32_t reserved[2] ; + uint32_t payload[0] ; ///< Network data contained in this message. + + // uint8_t padding[0] + // Additional bytes of zeros added at the end of the message to comply with + // the internal and external padding requirements. Internal padding SHOULD be as per the + // specification of the out-of-band data record and per-packet-info data record. The external + //padding size SHOULD be determined based on the PacketAlignmentFactor field specification + //in REMOTE_NDIS_INITIALIZE_CMPLT message by the device, when multiple + //REMOTE_NDIS_PACKET_MSG messages are bundled together in a single bus-native message. + //In this case, all but the very last REMOTE_NDIS_PACKET_MSG MUST respect the + //PacketAlignmentFactor field. + + // rndis_msg_packet_t [0] : (optional) more packet if multiple packet per bus transaction is supported } rndis_msg_packet_t; + typedef struct { - uint32_t - size; ///< Length, in bytes, of this header and appended data and padding. This value MUST be an integer multiple of 4. - uint32_t type; ///< MUST be as per host operating system specification. - uint32_t offset; ///< The byte offset from the beginning of this record to the beginning of data. - uint32_t data[0]; ///< Flexible array contains data + uint32_t size ; ///< Length, in bytes, of this header and appended data and padding. This value MUST be an integer multiple of 4. + uint32_t type ; ///< MUST be as per host operating system specification. + uint32_t offset ; ///< The byte offset from the beginning of this record to the beginning of data. + uint32_t data[0] ; ///< Flexible array contains data } rndis_msg_out_of_band_data_t, rndis_msg_per_packet_info_t; //--------------------------------------------------------------------+ @@ -265,80 +233,66 @@ typedef struct { //--------------------------------------------------------------------+ /// NDIS Object ID -typedef enum { - //------------- General Required OIDs -------------// - RNDIS_OID_GEN_SUPPORTED_LIST = 0x00010101, ///< List of supported OIDs - RNDIS_OID_GEN_HARDWARE_STATUS = 0x00010102, ///< Hardware status - RNDIS_OID_GEN_MEDIA_SUPPORTED = 0x00010103, ///< Media types supported (encoded) - RNDIS_OID_GEN_MEDIA_IN_USE = 0x00010104, ///< Media types in use (encoded) - RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD = 0x00010105, ///< - RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE = 0x00010106, ///< Maximum frame size in bytes - RNDIS_OID_GEN_LINK_SPEED = 0x00010107, ///< Link speed in units of 100 bps - RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE = 0x00010108, ///< Transmit buffer space - RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE = 0x00010109, ///< Receive buffer space - RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE = - 0x0001010A, ///< Minimum amount of storage, in bytes, that a single packet occupies in the transmit buffer space of the NIC - RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE = - 0x0001010B, ///< Amount of storage, in bytes, that a single packet occupies in the receive buffer space of the NIC - RNDIS_OID_GEN_VENDOR_ID = 0x0001010C, ///< Vendor NIC code - RNDIS_OID_GEN_VENDOR_DESCRIPTION = 0x0001010D, ///< Vendor network card description - RNDIS_OID_GEN_CURRENT_PACKET_FILTER = 0x0001010E, ///< Current packet filter (encoded) - RNDIS_OID_GEN_CURRENT_LOOKAHEAD = 0x0001010F, ///< Current lookahead size in bytes - RNDIS_OID_GEN_DRIVER_VERSION = 0x00010110, ///< NDIS version number used by the driver - RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE = 0x00010111, ///< Maximum total packet length in bytes - RNDIS_OID_GEN_PROTOCOL_OPTIONS = 0x00010112, ///< Optional protocol flags (encoded) - RNDIS_OID_GEN_MAC_OPTIONS = 0x00010113, ///< Optional NIC flags (encoded) - RNDIS_OID_GEN_MEDIA_CONNECT_STATUS = - 0x00010114, ///< Whether the NIC is connected to the network - RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS = - 0x00010115, ///< The maximum number of send packets the driver can accept per call to its MiniportSendPacketsfunction - - //------------- General Optional OIDs -------------// - RNDIS_OID_GEN_VENDOR_DRIVER_VERSION = - 0x00010116, ///< Vendor-assigned version number of the driver - RNDIS_OID_GEN_SUPPORTED_GUIDS = - 0x00010117, ///< The custom GUIDs (Globally Unique Identifier) supported by the miniport driver - RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES = - 0x00010118, ///< List of network-layer addresses associated with the binding between a transport and the driver - RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET = 0x00010119, ///< Size of packets' additional headers - RNDIS_OID_GEN_MEDIA_CAPABILITIES = 0x00010201, ///< - RNDIS_OID_GEN_PHYSICAL_MEDIUM = - 0x00010202, ///< Physical media supported by the miniport driver (encoded) - - //------------- 802.3 Objects (Ethernet) -------------// - RNDIS_OID_802_3_PERMANENT_ADDRESS = 0x01010101, ///< Permanent station address - RNDIS_OID_802_3_CURRENT_ADDRESS = 0x01010102, ///< Current station address - RNDIS_OID_802_3_MULTICAST_LIST = 0x01010103, ///< Current multicast address list - RNDIS_OID_802_3_MAXIMUM_LIST_SIZE = 0x01010104, ///< Maximum size of multicast address list +typedef enum +{ + //------------- General Required OIDs -------------// + RNDIS_OID_GEN_SUPPORTED_LIST = 0x00010101, ///< List of supported OIDs + RNDIS_OID_GEN_HARDWARE_STATUS = 0x00010102, ///< Hardware status + RNDIS_OID_GEN_MEDIA_SUPPORTED = 0x00010103, ///< Media types supported (encoded) + RNDIS_OID_GEN_MEDIA_IN_USE = 0x00010104, ///< Media types in use (encoded) + RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD = 0x00010105, ///< + RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE = 0x00010106, ///< Maximum frame size in bytes + RNDIS_OID_GEN_LINK_SPEED = 0x00010107, ///< Link speed in units of 100 bps + RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE = 0x00010108, ///< Transmit buffer space + RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE = 0x00010109, ///< Receive buffer space + RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE = 0x0001010A, ///< Minimum amount of storage, in bytes, that a single packet occupies in the transmit buffer space of the NIC + RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE = 0x0001010B, ///< Amount of storage, in bytes, that a single packet occupies in the receive buffer space of the NIC + RNDIS_OID_GEN_VENDOR_ID = 0x0001010C, ///< Vendor NIC code + RNDIS_OID_GEN_VENDOR_DESCRIPTION = 0x0001010D, ///< Vendor network card description + RNDIS_OID_GEN_CURRENT_PACKET_FILTER = 0x0001010E, ///< Current packet filter (encoded) + RNDIS_OID_GEN_CURRENT_LOOKAHEAD = 0x0001010F, ///< Current lookahead size in bytes + RNDIS_OID_GEN_DRIVER_VERSION = 0x00010110, ///< NDIS version number used by the driver + RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE = 0x00010111, ///< Maximum total packet length in bytes + RNDIS_OID_GEN_PROTOCOL_OPTIONS = 0x00010112, ///< Optional protocol flags (encoded) + RNDIS_OID_GEN_MAC_OPTIONS = 0x00010113, ///< Optional NIC flags (encoded) + RNDIS_OID_GEN_MEDIA_CONNECT_STATUS = 0x00010114, ///< Whether the NIC is connected to the network + RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS = 0x00010115, ///< The maximum number of send packets the driver can accept per call to its MiniportSendPacketsfunction + + //------------- General Optional OIDs -------------// + RNDIS_OID_GEN_VENDOR_DRIVER_VERSION = 0x00010116, ///< Vendor-assigned version number of the driver + RNDIS_OID_GEN_SUPPORTED_GUIDS = 0x00010117, ///< The custom GUIDs (Globally Unique Identifier) supported by the miniport driver + RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES = 0x00010118, ///< List of network-layer addresses associated with the binding between a transport and the driver + RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET = 0x00010119, ///< Size of packets' additional headers + RNDIS_OID_GEN_MEDIA_CAPABILITIES = 0x00010201, ///< + RNDIS_OID_GEN_PHYSICAL_MEDIUM = 0x00010202, ///< Physical media supported by the miniport driver (encoded) + + //------------- 802.3 Objects (Ethernet) -------------// + RNDIS_OID_802_3_PERMANENT_ADDRESS = 0x01010101, ///< Permanent station address + RNDIS_OID_802_3_CURRENT_ADDRESS = 0x01010102, ///< Current station address + RNDIS_OID_802_3_MULTICAST_LIST = 0x01010103, ///< Current multicast address list + RNDIS_OID_802_3_MAXIMUM_LIST_SIZE = 0x01010104, ///< Maximum size of multicast address list } rndis_oid_type_t; /// RNDIS Packet Filter Bits \ref RNDIS_OID_GEN_CURRENT_PACKET_FILTER. -typedef enum { - RNDIS_PACKET_TYPE_DIRECTED = - 0x00000001, ///< Directed packets. Directed packets contain a destination address equal to the station address of the NIC. - RNDIS_PACKET_TYPE_MULTICAST = - 0x00000002, ///< Multicast address packets sent to addresses in the multicast address list. - RNDIS_PACKET_TYPE_ALL_MULTICAST = - 0x00000004, ///< All multicast address packets, not just the ones enumerated in the multicast address list. - RNDIS_PACKET_TYPE_BROADCAST = 0x00000008, ///< Broadcast packets. - RNDIS_PACKET_TYPE_SOURCE_ROUTING = - 0x00000010, ///< All source routing packets. If the protocol driver sets this bit, the NDIS library attempts to act as a source routing bridge. - RNDIS_PACKET_TYPE_PROMISCUOUS = - 0x00000020, ///< Specifies all packets regardless of whether VLAN filtering is enabled or not and whether the VLAN identifier matches or not. - RNDIS_PACKET_TYPE_SMT = 0x00000040, ///< SMT packets that an FDDI NIC receives. - RNDIS_PACKET_TYPE_ALL_LOCAL = - 0x00000080, ///< All packets sent by installed protocols and all packets indicated by the NIC that is identified by a given NdisBindingHandle. - RNDIS_PACKET_TYPE_GROUP = 0x00001000, ///< Packets sent to the current group address. - RNDIS_PACKET_TYPE_ALL_FUNCTIONAL = - 0x00002000, ///< All functional address packets, not just the ones in the current functional address. - RNDIS_PACKET_TYPE_FUNCTIONAL = - 0x00004000, ///< Functional address packets sent to addresses included in the current functional address. - RNDIS_PACKET_TYPE_MAC_FRAME = 0x00008000, ///< NIC driver frames that a Token Ring NIC receives. - RNDIS_PACKET_TYPE_NO_LOCAL = 0x00010000, +typedef enum +{ + RNDIS_PACKET_TYPE_DIRECTED = 0x00000001, ///< Directed packets. Directed packets contain a destination address equal to the station address of the NIC. + RNDIS_PACKET_TYPE_MULTICAST = 0x00000002, ///< Multicast address packets sent to addresses in the multicast address list. + RNDIS_PACKET_TYPE_ALL_MULTICAST = 0x00000004, ///< All multicast address packets, not just the ones enumerated in the multicast address list. + RNDIS_PACKET_TYPE_BROADCAST = 0x00000008, ///< Broadcast packets. + RNDIS_PACKET_TYPE_SOURCE_ROUTING = 0x00000010, ///< All source routing packets. If the protocol driver sets this bit, the NDIS library attempts to act as a source routing bridge. + RNDIS_PACKET_TYPE_PROMISCUOUS = 0x00000020, ///< Specifies all packets regardless of whether VLAN filtering is enabled or not and whether the VLAN identifier matches or not. + RNDIS_PACKET_TYPE_SMT = 0x00000040, ///< SMT packets that an FDDI NIC receives. + RNDIS_PACKET_TYPE_ALL_LOCAL = 0x00000080, ///< All packets sent by installed protocols and all packets indicated by the NIC that is identified by a given NdisBindingHandle. + RNDIS_PACKET_TYPE_GROUP = 0x00001000, ///< Packets sent to the current group address. + RNDIS_PACKET_TYPE_ALL_FUNCTIONAL = 0x00002000, ///< All functional address packets, not just the ones in the current functional address. + RNDIS_PACKET_TYPE_FUNCTIONAL = 0x00004000, ///< Functional address packets sent to addresses included in the current functional address. + RNDIS_PACKET_TYPE_MAC_FRAME = 0x00008000, ///< NIC driver frames that a Token Ring NIC receives. + RNDIS_PACKET_TYPE_NO_LOCAL = 0x00010000, } rndis_packet_filter_type_t; #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CDC_RNDIS_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.c b/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.c index a27a1ac2562..11a5355aa2e 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.c +++ b/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.c @@ -35,20 +35,20 @@ #include "cdc_host.h" #include "cdc_rndis_host.h" -#if 0 // TODO remove subtask related macros later +#if 0 // TODO remove subtask related macros later // Sub Task #define OSAL_SUBTASK_BEGIN -#define OSAL_SUBTASK_END return TUSB_ERROR_NONE; +#define OSAL_SUBTASK_END return TUSB_ERROR_NONE; -#define STASK_RETURN(_error) return _error; -#define STASK_INVOKE(_subtask, _status) (_status) = _subtask -#define STASK_ASSERT(_cond) TU_VERIFY(_cond, TUSB_ERROR_OSAL_TASK_FAILED) +#define STASK_RETURN(_error) return _error; +#define STASK_INVOKE(_subtask, _status) (_status) = _subtask +#define STASK_ASSERT(_cond) TU_VERIFY(_cond, TUSB_ERROR_OSAL_TASK_FAILED) #endif //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -#define RNDIS_MSG_PAYLOAD_MAX (1024 * 4) +#define RNDIS_MSG_PAYLOAD_MAX (1024*4) CFG_TUH_MEM_SECTION static uint8_t msg_notification[CFG_TUH_DEVICE_MAX][8]; CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN static uint8_t msg_payload[RNDIS_MSG_PAYLOAD_MAX]; @@ -61,21 +61,21 @@ static rndish_data_t rndish_data[CFG_TUH_DEVICE_MAX]; // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ static tusb_error_t rndis_body_subtask(void); -static tusb_error_t send_message_get_response_subtask(uint8_t dev_addr, cdch_data_t *p_cdc, - uint8_t *p_mess, uint32_t mess_length, - uint8_t *p_response); +static tusb_error_t send_message_get_response_subtask( uint8_t dev_addr, cdch_data_t *p_cdc, + uint8_t * p_mess, uint32_t mess_length, + uint8_t *p_response ); //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ tusb_error_t tusbh_cdc_rndis_get_mac_addr(uint8_t dev_addr, uint8_t mac_address[6]) { - TU_ASSERT(tusbh_cdc_rndis_is_mounted(dev_addr), TUSB_ERROR_CDCH_DEVICE_NOT_MOUNTED); - TU_VERIFY(mac_address, TUSB_ERROR_INVALID_PARA); + TU_ASSERT( tusbh_cdc_rndis_is_mounted(dev_addr), TUSB_ERROR_CDCH_DEVICE_NOT_MOUNTED); + TU_VERIFY( mac_address, TUSB_ERROR_INVALID_PARA); - memcpy(mac_address, rndish_data[dev_addr - 1].mac_address, 6); + memcpy(mac_address, rndish_data[dev_addr-1].mac_address, 6); - return TUSB_ERROR_NONE; + return TUSB_ERROR_NONE; } //--------------------------------------------------------------------+ @@ -85,24 +85,27 @@ tusb_error_t tusbh_cdc_rndis_get_mac_addr(uint8_t dev_addr, uint8_t mac_address[ // To enable the TASK_ASSERT style (quick return on false condition) in a real RTOS, a task must act as a wrapper // and is used mainly to call subtasks. Within a subtask return statement can be called freely, the task with // forever loop cannot have any return at all. -OSAL_TASK_FUNCTION(cdch_rndis_task)(void *param;) +OSAL_TASK_FUNCTION(cdch_rndis_task) (void* param;) { - OSAL_TASK_BEGIN - rndis_body_subtask(); - OSAL_TASK_END + OSAL_TASK_BEGIN + rndis_body_subtask(); + OSAL_TASK_END } static tusb_error_t rndis_body_subtask(void) { - static uint8_t relative_addr; + static uint8_t relative_addr; - OSAL_SUBTASK_BEGIN + OSAL_SUBTASK_BEGIN - for (relative_addr = 0; relative_addr < CFG_TUH_DEVICE_MAX; relative_addr++) {} + for (relative_addr = 0; relative_addr < CFG_TUH_DEVICE_MAX; relative_addr++) + { - osal_task_delay(100); + } - OSAL_SUBTASK_END + osal_task_delay(100); + + OSAL_SUBTASK_END } //--------------------------------------------------------------------+ @@ -110,155 +113,157 @@ static tusb_error_t rndis_body_subtask(void) //--------------------------------------------------------------------+ void rndish_init(void) { - tu_memclr(rndish_data, sizeof(rndish_data_t) * CFG_TUH_DEVICE_MAX); + tu_memclr(rndish_data, sizeof(rndish_data_t)*CFG_TUH_DEVICE_MAX); - //------------- Task creation -------------// + //------------- Task creation -------------// - //------------- semaphore creation for notification pipe -------------// - for (uint8_t i = 0; i < CFG_TUH_DEVICE_MAX; i++) { - rndish_data[i].sem_notification_hdl = - osal_semaphore_create(OSAL_SEM_REF(rndish_data[i].semaphore_notification)); - } + //------------- semaphore creation for notification pipe -------------// + for(uint8_t i=0; itype == RNDIS_MSG_INITIALIZE_CMPLT && - p_init_cmpt->status == RNDIS_STATUS_SUCCESS && - p_init_cmpt->max_packet_per_xfer == 1 && - p_init_cmpt->max_xfer_size <= RNDIS_MSG_PAYLOAD_MAX); - rndish_data[dev_addr - 1].max_xfer_size = p_init_cmpt->max_xfer_size; - - //------------- Message Query 802.3 Permanent Address -------------// - memcpy(msg_payload, &msg_query_permanent_addr, sizeof(rndis_msg_query_t)); - tu_memclr(msg_payload + sizeof(rndis_msg_query_t), 6); // 6 bytes for MAC address - - STASK_INVOKE(send_message_get_response_subtask(dev_addr, p_cdc, msg_payload, - sizeof(rndis_msg_query_t) + 6, msg_payload), - error); - if (TUSB_ERROR_NONE != error) - STASK_RETURN(error); - - rndis_msg_query_cmplt_t *const p_query_cmpt = (rndis_msg_query_cmplt_t *)msg_payload; - STASK_ASSERT(p_query_cmpt->type == RNDIS_MSG_QUERY_CMPLT && - p_query_cmpt->status == RNDIS_STATUS_SUCCESS); - memcpy(rndish_data[dev_addr - 1].mac_address, msg_payload + 8 + p_query_cmpt->buffer_offset, 6); - - //------------- Set OID_GEN_CURRENT_PACKET_FILTER to (DIRECTED | MULTICAST | BROADCAST) -------------// - memcpy(msg_payload, &msg_set_packet_filter, sizeof(rndis_msg_set_t)); - tu_memclr(msg_payload + sizeof(rndis_msg_set_t), 4); // 4 bytes for filter flags - ((rndis_msg_set_t *)msg_payload)->oid_buffer[0] = - (RNDIS_PACKET_TYPE_DIRECTED | RNDIS_PACKET_TYPE_MULTICAST | RNDIS_PACKET_TYPE_BROADCAST); - - STASK_INVOKE(send_message_get_response_subtask(dev_addr, p_cdc, msg_payload, - sizeof(rndis_msg_set_t) + 4, msg_payload), - error); - if (TUSB_ERROR_NONE != error) - STASK_RETURN(error); - - rndis_msg_set_cmplt_t *const p_set_cmpt = (rndis_msg_set_cmplt_t *)msg_payload; - STASK_ASSERT(p_set_cmpt->type == RNDIS_MSG_SET_CMPLT && - p_set_cmpt->status == RNDIS_STATUS_SUCCESS); - - tusbh_cdc_rndis_mounted_cb(dev_addr); - - OSAL_SUBTASK_END + tusb_error_t error; + + OSAL_SUBTASK_BEGIN + + //------------- Message Initialize -------------// + memcpy(msg_payload, &msg_init, sizeof(rndis_msg_initialize_t)); + STASK_INVOKE( + send_message_get_response_subtask( dev_addr, p_cdc, + msg_payload, sizeof(rndis_msg_initialize_t), + msg_payload), + error + ); + if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); + + // TODO currently not support multiple data packets per xfer + rndis_msg_initialize_cmplt_t * const p_init_cmpt = (rndis_msg_initialize_cmplt_t *) msg_payload; + STASK_ASSERT(p_init_cmpt->type == RNDIS_MSG_INITIALIZE_CMPLT && p_init_cmpt->status == RNDIS_STATUS_SUCCESS && + p_init_cmpt->max_packet_per_xfer == 1 && p_init_cmpt->max_xfer_size <= RNDIS_MSG_PAYLOAD_MAX); + rndish_data[dev_addr-1].max_xfer_size = p_init_cmpt->max_xfer_size; + + //------------- Message Query 802.3 Permanent Address -------------// + memcpy(msg_payload, &msg_query_permanent_addr, sizeof(rndis_msg_query_t)); + tu_memclr(msg_payload + sizeof(rndis_msg_query_t), 6); // 6 bytes for MAC address + + STASK_INVOKE( + send_message_get_response_subtask( dev_addr, p_cdc, + msg_payload, sizeof(rndis_msg_query_t) + 6, + msg_payload), + error + ); + if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); + + rndis_msg_query_cmplt_t * const p_query_cmpt = (rndis_msg_query_cmplt_t *) msg_payload; + STASK_ASSERT(p_query_cmpt->type == RNDIS_MSG_QUERY_CMPLT && p_query_cmpt->status == RNDIS_STATUS_SUCCESS); + memcpy(rndish_data[dev_addr-1].mac_address, msg_payload + 8 + p_query_cmpt->buffer_offset, 6); + + //------------- Set OID_GEN_CURRENT_PACKET_FILTER to (DIRECTED | MULTICAST | BROADCAST) -------------// + memcpy(msg_payload, &msg_set_packet_filter, sizeof(rndis_msg_set_t)); + tu_memclr(msg_payload + sizeof(rndis_msg_set_t), 4); // 4 bytes for filter flags + ((rndis_msg_set_t*) msg_payload)->oid_buffer[0] = (RNDIS_PACKET_TYPE_DIRECTED | RNDIS_PACKET_TYPE_MULTICAST | RNDIS_PACKET_TYPE_BROADCAST); + + STASK_INVOKE( + send_message_get_response_subtask( dev_addr, p_cdc, + msg_payload, sizeof(rndis_msg_set_t) + 4, + msg_payload), + error + ); + if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); + + rndis_msg_set_cmplt_t * const p_set_cmpt = (rndis_msg_set_cmplt_t *) msg_payload; + STASK_ASSERT(p_set_cmpt->type == RNDIS_MSG_SET_CMPLT && p_set_cmpt->status == RNDIS_STATUS_SUCCESS); + + tusbh_cdc_rndis_mounted_cb(dev_addr); + + OSAL_SUBTASK_END } -void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, xfer_result_t event, - uint32_t xferred_bytes) +void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_bytes) { - if (pipehandle_is_equal(pipe_hdl, p_cdc->pipe_notification)) { - osal_semaphore_post(rndish_data[pipe_hdl.dev_addr - 1].sem_notification_hdl); - } + if ( pipehandle_is_equal(pipe_hdl, p_cdc->pipe_notification) ) + { + osal_semaphore_post( rndish_data[pipe_hdl.dev_addr-1].sem_notification_hdl ); + } } //--------------------------------------------------------------------+ // INTERNAL & HELPER //--------------------------------------------------------------------+ -static tusb_error_t send_message_get_response_subtask(uint8_t dev_addr, cdch_data_t *p_cdc, - uint8_t *p_mess, uint32_t mess_length, - uint8_t *p_response) +static tusb_error_t send_message_get_response_subtask( uint8_t dev_addr, cdch_data_t *p_cdc, + uint8_t * p_mess, uint32_t mess_length, + uint8_t *p_response) { - tusb_error_t error; - - OSAL_SUBTASK_BEGIN - - //------------- Send RNDIS Control Message -------------// - STASK_INVOKE( - usbh_control_xfer_subtask( - dev_addr, bm_request_type(TUSB_DIR_OUT, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE), - CDC_REQUEST_SEND_ENCAPSULATED_COMMAND, 0, p_cdc->interface_number, mess_length, p_mess), - error); - if (TUSB_ERROR_NONE != error) - STASK_RETURN(error); - - //------------- waiting for Response Available notification -------------// - (void)usbh_edpt_xfer(p_cdc->pipe_notification, msg_notification[dev_addr - 1], 8); - osal_semaphore_wait(rndish_data[dev_addr - 1].sem_notification_hdl, OSAL_TIMEOUT_NORMAL, - &error); - if (TUSB_ERROR_NONE != error) - STASK_RETURN(error); - STASK_ASSERT(msg_notification[dev_addr - 1][0] == 1); - - //------------- Get RNDIS Message Initialize Complete -------------// - STASK_INVOKE(usbh_control_xfer_subtask( - dev_addr, - bm_request_type(TUSB_DIR_IN, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE), - CDC_REQUEST_GET_ENCAPSULATED_RESPONSE, 0, p_cdc->interface_number, - RNDIS_MSG_PAYLOAD_MAX, p_response), - error); - if (TUSB_ERROR_NONE != error) - STASK_RETURN(error); - - OSAL_SUBTASK_END + tusb_error_t error; + + OSAL_SUBTASK_BEGIN + + //------------- Send RNDIS Control Message -------------// + STASK_INVOKE( + usbh_control_xfer_subtask( dev_addr, bm_request_type(TUSB_DIR_OUT, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE), + CDC_REQUEST_SEND_ENCAPSULATED_COMMAND, 0, p_cdc->interface_number, + mess_length, p_mess), + error + ); + if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); + + //------------- waiting for Response Available notification -------------// + (void) usbh_edpt_xfer(p_cdc->pipe_notification, msg_notification[dev_addr-1], 8); + osal_semaphore_wait(rndish_data[dev_addr-1].sem_notification_hdl, OSAL_TIMEOUT_NORMAL, &error); + if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); + STASK_ASSERT(msg_notification[dev_addr-1][0] == 1); + + //------------- Get RNDIS Message Initialize Complete -------------// + STASK_INVOKE( + usbh_control_xfer_subtask( dev_addr, bm_request_type(TUSB_DIR_IN, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE), + CDC_REQUEST_GET_ENCAPSULATED_RESPONSE, 0, p_cdc->interface_number, + RNDIS_MSG_PAYLOAD_MAX, p_response), + error + ); + if ( TUSB_ERROR_NONE != error ) STASK_RETURN(error); + + OSAL_SUBTASK_END } //static tusb_error_t send_process_msg_initialize_subtask(uint8_t dev_addr, cdch_data_t *p_cdc) diff --git a/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.h b/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.h index 36f9d6cfbf1..bb431ec1f75 100644 --- a/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.h +++ b/Libraries/tinyusb/src/class/cdc/cdc_rndis_host.h @@ -36,27 +36,26 @@ #include "cdc_rndis.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ // INTERNAL RNDIS-CDC Driver API //--------------------------------------------------------------------+ typedef struct { - OSAL_SEM_DEF(semaphore_notification); - osal_semaphore_handle_t sem_notification_hdl; // used to wait on notification pipe - uint32_t max_xfer_size; // got from device's msg initialize complete - uint8_t mac_address[6]; -} rndish_data_t; + OSAL_SEM_DEF(semaphore_notification); + osal_semaphore_handle_t sem_notification_hdl; // used to wait on notification pipe + uint32_t max_xfer_size; // got from device's msg initialize complete + uint8_t mac_address[6]; +}rndish_data_t; void rndish_init(void); bool rndish_open_subtask(uint8_t dev_addr, cdch_data_t *p_cdc); -void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, xfer_result_t event, - uint32_t xferred_bytes); +void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_bytes); void rndish_close(uint8_t dev_addr); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_CDC_RNDIS_HOST_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/serial/ch34x.h b/Libraries/tinyusb/src/class/cdc/serial/ch34x.h index b23a73f3480..c18066f5788 100644 --- a/Libraries/tinyusb/src/class/cdc/serial/ch34x.h +++ b/Libraries/tinyusb/src/class/cdc/serial/ch34x.h @@ -36,52 +36,49 @@ #ifdef CFG_TUH_CDC_LINE_CODING_ON_ENUM #define CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X CFG_TUH_CDC_LINE_CODING_ON_ENUM #else // this default is necessary to work properly -#define CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X \ - { \ - 9600, CDC_LINE_CONDING_STOP_BITS_1, CDC_LINE_CODING_PARITY_NONE, 8 \ - } +#define CFG_TUH_CDC_LINE_CODING_ON_ENUM_CH34X { 9600, CDC_LINE_CONDING_STOP_BITS_1, CDC_LINE_CODING_PARITY_NONE, 8 } #endif // USB requests #define CH34X_REQ_READ_VERSION 0x5F // dec 95 -#define CH34X_REQ_WRITE_REG 0x9A // dec 154 -#define CH34X_REQ_READ_REG 0x95 // dec 149 -#define CH34X_REQ_SERIAL_INIT 0xA1 // dec 161 -#define CH34X_REQ_MODEM_CTRL 0xA4 // dev 164 +#define CH34X_REQ_WRITE_REG 0x9A // dec 154 +#define CH34X_REQ_READ_REG 0x95 // dec 149 +#define CH34X_REQ_SERIAL_INIT 0xA1 // dec 161 +#define CH34X_REQ_MODEM_CTRL 0xA4 // dev 164 // registers -#define CH34X_REG_BREAK 0x05 -#define CH34X_REG_PRESCALER 0x12 -#define CH34X_REG_DIVISOR 0x13 -#define CH34X_REG_LCR 0x18 -#define CH34X_REG_LCR2 0x25 -#define CH34X_REG_MCR_MSR 0x06 -#define CH34X_REG_MCR_MSR2 0x07 -#define CH34X_NBREAK_BITS 0x01 +#define CH34X_REG_BREAK 0x05 +#define CH34X_REG_PRESCALER 0x12 +#define CH34X_REG_DIVISOR 0x13 +#define CH34X_REG_LCR 0x18 +#define CH34X_REG_LCR2 0x25 +#define CH34X_REG_MCR_MSR 0x06 +#define CH34X_REG_MCR_MSR2 0x07 +#define CH34X_NBREAK_BITS 0x01 -#define CH341_REG_0x0F 0x0F // undocumented register -#define CH341_REG_0x2C 0x2C // undocumented register -#define CH341_REG_0x27 0x27 // hardware flow control (cts/rts) +#define CH341_REG_0x0F 0x0F // undocumented register +#define CH341_REG_0x2C 0x2C // undocumented register +#define CH341_REG_0x27 0x27 // hardware flow control (cts/rts) -#define CH34X_REG16_DIVISOR_PRESCALER TU_U16(CH34X_REG_DIVISOR, CH34X_REG_PRESCALER) -#define CH32X_REG16_LCR2_LCR TU_U16(CH34X_REG_LCR2, CH34X_REG_LCR) +#define CH34X_REG16_DIVISOR_PRESCALER TU_U16(CH34X_REG_DIVISOR, CH34X_REG_PRESCALER) +#define CH32X_REG16_LCR2_LCR TU_U16(CH34X_REG_LCR2, CH34X_REG_LCR) // modem control bits -#define CH34X_BIT_RTS (1 << 6) -#define CH34X_BIT_DTR (1 << 5) +#define CH34X_BIT_RTS ( 1 << 6 ) +#define CH34X_BIT_DTR ( 1 << 5 ) // line control bits -#define CH34X_LCR_ENABLE_RX 0x80 -#define CH34X_LCR_ENABLE_TX 0x40 -#define CH34X_LCR_MARK_SPACE 0x20 -#define CH34X_LCR_PAR_EVEN 0x10 -#define CH34X_LCR_ENABLE_PAR 0x08 -#define CH34X_LCR_PAR_MASK 0x38 // all parity bits -#define CH34X_LCR_STOP_BITS_2 0x04 -#define CH34X_LCR_CS8 0x03 -#define CH34X_LCR_CS7 0x02 -#define CH34X_LCR_CS6 0x01 -#define CH34X_LCR_CS5 0x00 -#define CH34X_LCR_CS_MASK 0x03 // all CSx bits +#define CH34X_LCR_ENABLE_RX 0x80 +#define CH34X_LCR_ENABLE_TX 0x40 +#define CH34X_LCR_MARK_SPACE 0x20 +#define CH34X_LCR_PAR_EVEN 0x10 +#define CH34X_LCR_ENABLE_PAR 0x08 +#define CH34X_LCR_PAR_MASK 0x38 // all parity bits +#define CH34X_LCR_STOP_BITS_2 0x04 +#define CH34X_LCR_CS8 0x03 +#define CH34X_LCR_CS7 0x02 +#define CH34X_LCR_CS6 0x01 +#define CH34X_LCR_CS5 0x00 +#define CH34X_LCR_CS_MASK 0x03 // all CSx bits #endif /* _CH34X_H_ */ diff --git a/Libraries/tinyusb/src/class/cdc/serial/cp210x.h b/Libraries/tinyusb/src/class/cdc/serial/cp210x.h index 048bd4a1a21..2c749f522a1 100644 --- a/Libraries/tinyusb/src/class/cdc/serial/cp210x.h +++ b/Libraries/tinyusb/src/class/cdc/serial/cp210x.h @@ -31,32 +31,32 @@ #define TU_CP210X_VID 0x10C4 /* Config request codes */ -#define CP210X_IFC_ENABLE 0x00 -#define CP210X_SET_BAUDDIV 0x01 -#define CP210X_GET_BAUDDIV 0x02 -#define CP210X_SET_LINE_CTL 0x03 // Set parity, data bits, stop bits -#define CP210X_GET_LINE_CTL 0x04 -#define CP210X_SET_BREAK 0x05 -#define CP210X_IMM_CHAR 0x06 -#define CP210X_SET_MHS 0x07 // Set DTR, RTS -#define CP210X_GET_MDMSTS 0x08 // Get modem status (DTR, RTS, CTS, DSR, RI, DCD) -#define CP210X_SET_XON 0x09 -#define CP210X_SET_XOFF 0x0A -#define CP210X_SET_EVENTMASK 0x0B -#define CP210X_GET_EVENTMASK 0x0C -#define CP210X_SET_CHAR 0x0D -#define CP210X_GET_CHARS 0x0E -#define CP210X_GET_PROPS 0x0F +#define CP210X_IFC_ENABLE 0x00 +#define CP210X_SET_BAUDDIV 0x01 +#define CP210X_GET_BAUDDIV 0x02 +#define CP210X_SET_LINE_CTL 0x03 // Set parity, data bits, stop bits +#define CP210X_GET_LINE_CTL 0x04 +#define CP210X_SET_BREAK 0x05 +#define CP210X_IMM_CHAR 0x06 +#define CP210X_SET_MHS 0x07 // Set DTR, RTS +#define CP210X_GET_MDMSTS 0x08 // Get modem status (DTR, RTS, CTS, DSR, RI, DCD) +#define CP210X_SET_XON 0x09 +#define CP210X_SET_XOFF 0x0A +#define CP210X_SET_EVENTMASK 0x0B +#define CP210X_GET_EVENTMASK 0x0C +#define CP210X_SET_CHAR 0x0D +#define CP210X_GET_CHARS 0x0E +#define CP210X_GET_PROPS 0x0F #define CP210X_GET_COMM_STATUS 0x10 -#define CP210X_RESET 0x11 -#define CP210X_PURGE 0x12 -#define CP210X_SET_FLOW 0x13 -#define CP210X_GET_FLOW 0x14 -#define CP210X_EMBED_EVENTS 0x15 -#define CP210X_GET_EVENTSTATE 0x16 -#define CP210X_SET_CHARS 0x19 -#define CP210X_GET_BAUDRATE 0x1D -#define CP210X_SET_BAUDRATE 0x1E +#define CP210X_RESET 0x11 +#define CP210X_PURGE 0x12 +#define CP210X_SET_FLOW 0x13 +#define CP210X_GET_FLOW 0x14 +#define CP210X_EMBED_EVENTS 0x15 +#define CP210X_GET_EVENTSTATE 0x16 +#define CP210X_SET_CHARS 0x19 +#define CP210X_GET_BAUDRATE 0x1D +#define CP210X_SET_BAUDRATE 0x1E #define CP210X_VENDOR_SPECIFIC 0xFF // GPIO, Recipient must be Device #endif //TUSB_CP210X_H diff --git a/Libraries/tinyusb/src/class/cdc/serial/ftdi_sio.h b/Libraries/tinyusb/src/class/cdc/serial/ftdi_sio.h index 77bac9d3b2f..0825f07195e 100644 --- a/Libraries/tinyusb/src/class/cdc/serial/ftdi_sio.h +++ b/Libraries/tinyusb/src/class/cdc/serial/ftdi_sio.h @@ -29,19 +29,19 @@ #define TU_FTDI_VID 0x0403 // Commands -#define FTDI_SIO_RESET 0 /* Reset the port */ -#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ -#define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */ -#define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */ -#define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */ -#define FTDI_SIO_GET_MODEM_STATUS 5 /* Retrieve current value of modem status register */ -#define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */ -#define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */ -#define FTDI_SIO_SET_LATENCY_TIMER 9 /* Set the latency timer */ -#define FTDI_SIO_GET_LATENCY_TIMER 0x0a /* Get the latency timer */ -#define FTDI_SIO_SET_BITMODE 0x0b /* Set bitbang mode */ -#define FTDI_SIO_READ_PINS 0x0c /* Read immediate value of pins */ -#define FTDI_SIO_READ_EEPROM 0x90 /* Read EEPROM */ +#define FTDI_SIO_RESET 0 /* Reset the port */ +#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ +#define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */ +#define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */ +#define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */ +#define FTDI_SIO_GET_MODEM_STATUS 5 /* Retrieve current value of modem status register */ +#define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */ +#define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */ +#define FTDI_SIO_SET_LATENCY_TIMER 9 /* Set the latency timer */ +#define FTDI_SIO_GET_LATENCY_TIMER 0x0a /* Get the latency timer */ +#define FTDI_SIO_SET_BITMODE 0x0b /* Set bitbang mode */ +#define FTDI_SIO_READ_PINS 0x0c /* Read immediate value of pins */ +#define FTDI_SIO_READ_EEPROM 0x90 /* Read EEPROM */ /* FTDI_SIO_RESET */ #define FTDI_SIO_RESET_SIO 0 @@ -90,10 +90,10 @@ #define FTDI_SIO_SET_DTR_MASK 0x1 #define FTDI_SIO_SET_DTR_HIGH ((FTDI_SIO_SET_DTR_MASK << 8) | 1) -#define FTDI_SIO_SET_DTR_LOW ((FTDI_SIO_SET_DTR_MASK << 8) | 0) +#define FTDI_SIO_SET_DTR_LOW ((FTDI_SIO_SET_DTR_MASK << 8) | 0) #define FTDI_SIO_SET_RTS_MASK 0x2 #define FTDI_SIO_SET_RTS_HIGH ((FTDI_SIO_SET_RTS_MASK << 8) | 2) -#define FTDI_SIO_SET_RTS_LOW ((FTDI_SIO_SET_RTS_MASK << 8) | 0) +#define FTDI_SIO_SET_RTS_LOW ((FTDI_SIO_SET_RTS_MASK << 8) | 0) /* * ControlValue @@ -156,15 +156,15 @@ */ /* FTDI_SIO_SET_DATA */ -#define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8) -#define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8) -#define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8) -#define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8) -#define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8) -#define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11) -#define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11) -#define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11) -#define FTDI_SIO_SET_BREAK (0x1 << 14) +#define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8) +#define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8) +#define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8) +#define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8) +#define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8) +#define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11) +#define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11) +#define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11) +#define FTDI_SIO_SET_BREAK (0x1 << 14) /* * BmRequestType: 0100 0000B @@ -229,18 +229,18 @@ * B7 Error in RCVR FIFO * */ -#define FTDI_RS0_CTS (1 << 4) -#define FTDI_RS0_DSR (1 << 5) -#define FTDI_RS0_RI (1 << 6) -#define FTDI_RS0_RLSD (1 << 7) - -#define FTDI_RS_DR 1 -#define FTDI_RS_OE (1 << 1) -#define FTDI_RS_PE (1 << 2) -#define FTDI_RS_FE (1 << 3) -#define FTDI_RS_BI (1 << 4) -#define FTDI_RS_THRE (1 << 5) -#define FTDI_RS_TEMT (1 << 6) -#define FTDI_RS_FIFO (1 << 7) +#define FTDI_RS0_CTS (1 << 4) +#define FTDI_RS0_DSR (1 << 5) +#define FTDI_RS0_RI (1 << 6) +#define FTDI_RS0_RLSD (1 << 7) + +#define FTDI_RS_DR 1 +#define FTDI_RS_OE (1<<1) +#define FTDI_RS_PE (1<<2) +#define FTDI_RS_FE (1<<3) +#define FTDI_RS_BI (1<<4) +#define FTDI_RS_THRE (1<<5) +#define FTDI_RS_TEMT (1<<6) +#define FTDI_RS_FIFO (1<<7) #endif //TUSB_FTDI_SIO_H diff --git a/Libraries/tinyusb/src/class/dfu/dfu.h b/Libraries/tinyusb/src/class/dfu/dfu.h index 64a0a7ac5c3..114c827b8b7 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu.h +++ b/Libraries/tinyusb/src/class/dfu/dfu.h @@ -30,7 +30,7 @@ #include "common/tusb_common.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -38,79 +38,82 @@ extern "C" { //--------------------------------------------------------------------+ // DFU Protocol -typedef enum { - DFU_PROTOCOL_RT = 0x01, - DFU_PROTOCOL_DFU = 0x02, +typedef enum +{ + DFU_PROTOCOL_RT = 0x01, + DFU_PROTOCOL_DFU = 0x02, } dfu_protocol_type_t; // DFU Descriptor Type -typedef enum { - DFU_DESC_FUNCTIONAL = 0x21, +typedef enum +{ + DFU_DESC_FUNCTIONAL = 0x21, } dfu_descriptor_type_t; // DFU Requests typedef enum { - DFU_REQUEST_DETACH = 0, - DFU_REQUEST_DNLOAD = 1, - DFU_REQUEST_UPLOAD = 2, - DFU_REQUEST_GETSTATUS = 3, - DFU_REQUEST_CLRSTATUS = 4, - DFU_REQUEST_GETSTATE = 5, - DFU_REQUEST_ABORT = 6, + DFU_REQUEST_DETACH = 0, + DFU_REQUEST_DNLOAD = 1, + DFU_REQUEST_UPLOAD = 2, + DFU_REQUEST_GETSTATUS = 3, + DFU_REQUEST_CLRSTATUS = 4, + DFU_REQUEST_GETSTATE = 5, + DFU_REQUEST_ABORT = 6, } dfu_requests_t; // DFU States typedef enum { - APP_IDLE = 0, - APP_DETACH = 1, - DFU_IDLE = 2, - DFU_DNLOAD_SYNC = 3, - DFU_DNBUSY = 4, - DFU_DNLOAD_IDLE = 5, - DFU_MANIFEST_SYNC = 6, - DFU_MANIFEST = 7, - DFU_MANIFEST_WAIT_RESET = 8, - DFU_UPLOAD_IDLE = 9, - DFU_ERROR = 10, + APP_IDLE = 0, + APP_DETACH = 1, + DFU_IDLE = 2, + DFU_DNLOAD_SYNC = 3, + DFU_DNBUSY = 4, + DFU_DNLOAD_IDLE = 5, + DFU_MANIFEST_SYNC = 6, + DFU_MANIFEST = 7, + DFU_MANIFEST_WAIT_RESET = 8, + DFU_UPLOAD_IDLE = 9, + DFU_ERROR = 10, } dfu_state_t; // DFU Status typedef enum { - DFU_STATUS_OK = 0x00, - DFU_STATUS_ERR_TARGET = 0x01, - DFU_STATUS_ERR_FILE = 0x02, - DFU_STATUS_ERR_WRITE = 0x03, - DFU_STATUS_ERR_ERASE = 0x04, - DFU_STATUS_ERR_CHECK_ERASED = 0x05, - DFU_STATUS_ERR_PROG = 0x06, - DFU_STATUS_ERR_VERIFY = 0x07, - DFU_STATUS_ERR_ADDRESS = 0x08, - DFU_STATUS_ERR_NOTDONE = 0x09, - DFU_STATUS_ERR_FIRMWARE = 0x0A, - DFU_STATUS_ERR_VENDOR = 0x0B, - DFU_STATUS_ERR_USBR = 0x0C, - DFU_STATUS_ERR_POR = 0x0D, - DFU_STATUS_ERR_UNKNOWN = 0x0E, - DFU_STATUS_ERR_STALLEDPKT = 0x0F, + DFU_STATUS_OK = 0x00, + DFU_STATUS_ERR_TARGET = 0x01, + DFU_STATUS_ERR_FILE = 0x02, + DFU_STATUS_ERR_WRITE = 0x03, + DFU_STATUS_ERR_ERASE = 0x04, + DFU_STATUS_ERR_CHECK_ERASED = 0x05, + DFU_STATUS_ERR_PROG = 0x06, + DFU_STATUS_ERR_VERIFY = 0x07, + DFU_STATUS_ERR_ADDRESS = 0x08, + DFU_STATUS_ERR_NOTDONE = 0x09, + DFU_STATUS_ERR_FIRMWARE = 0x0A, + DFU_STATUS_ERR_VENDOR = 0x0B, + DFU_STATUS_ERR_USBR = 0x0C, + DFU_STATUS_ERR_POR = 0x0D, + DFU_STATUS_ERR_UNKNOWN = 0x0E, + DFU_STATUS_ERR_STALLEDPKT = 0x0F, } dfu_status_t; -#define DFU_ATTR_CAN_DOWNLOAD (1u << 0) -#define DFU_ATTR_CAN_UPLOAD (1u << 1) -#define DFU_ATTR_MANIFESTATION_TOLERANT (1u << 2) -#define DFU_ATTR_WILL_DETACH (1u << 3) +#define DFU_ATTR_CAN_DOWNLOAD (1u << 0) +#define DFU_ATTR_CAN_UPLOAD (1u << 1) +#define DFU_ATTR_MANIFESTATION_TOLERANT (1u << 2) +#define DFU_ATTR_WILL_DETACH (1u << 3) // DFU Status Request Payload -typedef struct TU_ATTR_PACKED { - uint8_t bStatus; - uint8_t bwPollTimeout[3]; - uint8_t bState; - uint8_t iString; +typedef struct TU_ATTR_PACKED +{ + uint8_t bStatus; + uint8_t bwPollTimeout[3]; + uint8_t bState; + uint8_t iString; } dfu_status_response_t; -TU_VERIFY_STATIC(sizeof(dfu_status_response_t) == 6, "size is not correct"); +TU_VERIFY_STATIC( sizeof(dfu_status_response_t) == 6, "size is not correct"); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_DFU_H_ */ diff --git a/Libraries/tinyusb/src/class/dfu/dfu_device.c b/Libraries/tinyusb/src/class/dfu/dfu_device.c index ab9d623e699..71e7ac2b36f 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu_device.c +++ b/Libraries/tinyusb/src/class/dfu/dfu_device.c @@ -39,26 +39,27 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_DFU_LOG_LEVEL -#define CFG_TUD_DFU_LOG_LEVEL CFG_TUD_LOG_LEVEL + #define CFG_TUD_DFU_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -typedef struct { - uint8_t attrs; - uint8_t alt; +typedef struct +{ + uint8_t attrs; + uint8_t alt; - dfu_state_t state; - dfu_status_t status; + dfu_state_t state; + dfu_status_t status; - bool flashing_in_progress; - uint16_t block; - uint16_t length; + bool flashing_in_progress; + uint16_t block; + uint16_t length; - CFG_TUSB_MEM_ALIGN uint8_t transfer_buf[CFG_TUD_DFU_XFER_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t transfer_buf[CFG_TUD_DFU_XFER_BUFSIZE]; } dfu_state_ctx_t; // Only a single dfu state is allowed @@ -66,75 +67,83 @@ CFG_TUD_MEM_SECTION tu_static dfu_state_ctx_t _dfu_ctx; static void reset_state(void) { - _dfu_ctx.state = DFU_IDLE; - _dfu_ctx.status = DFU_STATUS_OK; - _dfu_ctx.flashing_in_progress = false; + _dfu_ctx.state = DFU_IDLE; + _dfu_ctx.status = DFU_STATUS_OK; + _dfu_ctx.flashing_in_progress = false; } -static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const *request, - dfu_state_t state, dfu_status_t status, uint32_t timeout); -static bool process_download_get_status(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request); -static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request); +static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const * request, dfu_state_t state, dfu_status_t status, uint32_t timeout); +static bool process_download_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); //--------------------------------------------------------------------+ // Debug //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= 2 -tu_static tu_lookup_entry_t const _dfu_request_lookup[] = { - { .key = DFU_REQUEST_DETACH, .data = "DETACH" }, - { .key = DFU_REQUEST_DNLOAD, .data = "DNLOAD" }, - { .key = DFU_REQUEST_UPLOAD, .data = "UPLOAD" }, - { .key = DFU_REQUEST_GETSTATUS, .data = "GETSTATUS" }, - { .key = DFU_REQUEST_CLRSTATUS, .data = "CLRSTATUS" }, - { .key = DFU_REQUEST_GETSTATE, .data = "GETSTATE" }, - { .key = DFU_REQUEST_ABORT, .data = "ABORT" }, +tu_static tu_lookup_entry_t const _dfu_request_lookup[] = +{ + { .key = DFU_REQUEST_DETACH , .data = "DETACH" }, + { .key = DFU_REQUEST_DNLOAD , .data = "DNLOAD" }, + { .key = DFU_REQUEST_UPLOAD , .data = "UPLOAD" }, + { .key = DFU_REQUEST_GETSTATUS , .data = "GETSTATUS" }, + { .key = DFU_REQUEST_CLRSTATUS , .data = "CLRSTATUS" }, + { .key = DFU_REQUEST_GETSTATE , .data = "GETSTATE" }, + { .key = DFU_REQUEST_ABORT , .data = "ABORT" }, }; -tu_static tu_lookup_table_t const _dfu_request_table = { .count = - TU_ARRAY_SIZE(_dfu_request_lookup), - .items = _dfu_request_lookup }; - -tu_static tu_lookup_entry_t const _dfu_state_lookup[] = { - { .key = APP_IDLE, .data = "APP_IDLE" }, - { .key = APP_DETACH, .data = "APP_DETACH" }, - { .key = DFU_IDLE, .data = "IDLE" }, - { .key = DFU_DNLOAD_SYNC, .data = "DNLOAD_SYNC" }, - { .key = DFU_DNBUSY, .data = "DNBUSY" }, - { .key = DFU_DNLOAD_IDLE, .data = "DNLOAD_IDLE" }, - { .key = DFU_MANIFEST_SYNC, .data = "MANIFEST_SYNC" }, - { .key = DFU_MANIFEST, .data = "MANIFEST" }, - { .key = DFU_MANIFEST_WAIT_RESET, .data = "MANIFEST_WAIT_RESET" }, - { .key = DFU_UPLOAD_IDLE, .data = "UPLOAD_IDLE" }, - { .key = DFU_ERROR, .data = "ERROR" }, +tu_static tu_lookup_table_t const _dfu_request_table = +{ + .count = TU_ARRAY_SIZE(_dfu_request_lookup), + .items = _dfu_request_lookup }; -tu_static tu_lookup_table_t const _dfu_state_table = { .count = TU_ARRAY_SIZE(_dfu_state_lookup), - .items = _dfu_state_lookup }; - -tu_static tu_lookup_entry_t const _dfu_status_lookup[] = { - { .key = DFU_STATUS_OK, .data = "OK" }, - { .key = DFU_STATUS_ERR_TARGET, .data = "errTARGET" }, - { .key = DFU_STATUS_ERR_FILE, .data = "errFILE" }, - { .key = DFU_STATUS_ERR_WRITE, .data = "errWRITE" }, - { .key = DFU_STATUS_ERR_ERASE, .data = "errERASE" }, - { .key = DFU_STATUS_ERR_CHECK_ERASED, .data = "errCHECK_ERASED" }, - { .key = DFU_STATUS_ERR_PROG, .data = "errPROG" }, - { .key = DFU_STATUS_ERR_VERIFY, .data = "errVERIFY" }, - { .key = DFU_STATUS_ERR_ADDRESS, .data = "errADDRESS" }, - { .key = DFU_STATUS_ERR_NOTDONE, .data = "errNOTDONE" }, - { .key = DFU_STATUS_ERR_FIRMWARE, .data = "errFIRMWARE" }, - { .key = DFU_STATUS_ERR_VENDOR, .data = "errVENDOR" }, - { .key = DFU_STATUS_ERR_USBR, .data = "errUSBR" }, - { .key = DFU_STATUS_ERR_POR, .data = "errPOR" }, - { .key = DFU_STATUS_ERR_UNKNOWN, .data = "errUNKNOWN" }, - { .key = DFU_STATUS_ERR_STALLEDPKT, .data = "errSTALLEDPKT" }, +tu_static tu_lookup_entry_t const _dfu_state_lookup[] = +{ + { .key = APP_IDLE , .data = "APP_IDLE" }, + { .key = APP_DETACH , .data = "APP_DETACH" }, + { .key = DFU_IDLE , .data = "IDLE" }, + { .key = DFU_DNLOAD_SYNC , .data = "DNLOAD_SYNC" }, + { .key = DFU_DNBUSY , .data = "DNBUSY" }, + { .key = DFU_DNLOAD_IDLE , .data = "DNLOAD_IDLE" }, + { .key = DFU_MANIFEST_SYNC , .data = "MANIFEST_SYNC" }, + { .key = DFU_MANIFEST , .data = "MANIFEST" }, + { .key = DFU_MANIFEST_WAIT_RESET , .data = "MANIFEST_WAIT_RESET" }, + { .key = DFU_UPLOAD_IDLE , .data = "UPLOAD_IDLE" }, + { .key = DFU_ERROR , .data = "ERROR" }, }; -tu_static tu_lookup_table_t const _dfu_status_table = { .count = TU_ARRAY_SIZE(_dfu_status_lookup), - .items = _dfu_status_lookup }; +tu_static tu_lookup_table_t const _dfu_state_table = +{ + .count = TU_ARRAY_SIZE(_dfu_state_lookup), + .items = _dfu_state_lookup +}; + +tu_static tu_lookup_entry_t const _dfu_status_lookup[] = +{ + { .key = DFU_STATUS_OK , .data = "OK" }, + { .key = DFU_STATUS_ERR_TARGET , .data = "errTARGET" }, + { .key = DFU_STATUS_ERR_FILE , .data = "errFILE" }, + { .key = DFU_STATUS_ERR_WRITE , .data = "errWRITE" }, + { .key = DFU_STATUS_ERR_ERASE , .data = "errERASE" }, + { .key = DFU_STATUS_ERR_CHECK_ERASED , .data = "errCHECK_ERASED" }, + { .key = DFU_STATUS_ERR_PROG , .data = "errPROG" }, + { .key = DFU_STATUS_ERR_VERIFY , .data = "errVERIFY" }, + { .key = DFU_STATUS_ERR_ADDRESS , .data = "errADDRESS" }, + { .key = DFU_STATUS_ERR_NOTDONE , .data = "errNOTDONE" }, + { .key = DFU_STATUS_ERR_FIRMWARE , .data = "errFIRMWARE" }, + { .key = DFU_STATUS_ERR_VENDOR , .data = "errVENDOR" }, + { .key = DFU_STATUS_ERR_USBR , .data = "errUSBR" }, + { .key = DFU_STATUS_ERR_POR , .data = "errPOR" }, + { .key = DFU_STATUS_ERR_UNKNOWN , .data = "errUNKNOWN" }, + { .key = DFU_STATUS_ERR_STALLEDPKT , .data = "errSTALLEDPKT" }, +}; + +tu_static tu_lookup_table_t const _dfu_status_table = +{ + .count = TU_ARRAY_SIZE(_dfu_status_lookup), + .items = _dfu_status_lookup +}; #endif @@ -143,293 +152,319 @@ tu_static tu_lookup_table_t const _dfu_status_table = { .count = TU_ARRAY_SIZE(_ //--------------------------------------------------------------------+ void dfu_moded_reset(uint8_t rhport) { - (void)rhport; + (void) rhport; - _dfu_ctx.attrs = 0; - _dfu_ctx.alt = 0; + _dfu_ctx.attrs = 0; + _dfu_ctx.alt = 0; - reset_state(); + reset_state(); } -void dfu_moded_init(void) -{ - dfu_moded_reset(0); +void dfu_moded_init(void) { + dfu_moded_reset(0); } -bool dfu_moded_deinit(void) -{ - return true; +bool dfu_moded_deinit(void) { + return true; } -uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { - (void)rhport; + (void) rhport; - //------------- Interface (with Alt) descriptor -------------// - uint8_t const itf_num = itf_desc->bInterfaceNumber; - uint8_t alt_count = 0; + //------------- Interface (with Alt) descriptor -------------// + uint8_t const itf_num = itf_desc->bInterfaceNumber; + uint8_t alt_count = 0; - uint16_t drv_len = 0; - TU_VERIFY(itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS && - itf_desc->bInterfaceProtocol == DFU_PROTOCOL_DFU, - 0); + uint16_t drv_len = 0; + TU_VERIFY(itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS && itf_desc->bInterfaceProtocol == DFU_PROTOCOL_DFU, 0); - while (itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS && - itf_desc->bInterfaceProtocol == DFU_PROTOCOL_DFU) { - TU_ASSERT(max_len > drv_len, 0); + while(itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS && itf_desc->bInterfaceProtocol == DFU_PROTOCOL_DFU) + { + TU_ASSERT(max_len > drv_len, 0); - // Alternate must have the same interface number - TU_ASSERT(itf_desc->bInterfaceNumber == itf_num, 0); + // Alternate must have the same interface number + TU_ASSERT(itf_desc->bInterfaceNumber == itf_num, 0); - // Alt should increase by one every time - TU_ASSERT(itf_desc->bAlternateSetting == alt_count, 0); - alt_count++; + // Alt should increase by one every time + TU_ASSERT(itf_desc->bAlternateSetting == alt_count, 0); + alt_count++; - drv_len += tu_desc_len(itf_desc); - itf_desc = (tusb_desc_interface_t const *)tu_desc_next(itf_desc); - } + drv_len += tu_desc_len(itf_desc); + itf_desc = (tusb_desc_interface_t const *) tu_desc_next(itf_desc); + } - //------------- DFU Functional descriptor -------------// - tusb_desc_dfu_functional_t const *func_desc = (tusb_desc_dfu_functional_t const *)itf_desc; - TU_ASSERT(tu_desc_type(func_desc) == TUSB_DESC_FUNCTIONAL, 0); - drv_len += sizeof(tusb_desc_dfu_functional_t); + //------------- DFU Functional descriptor -------------// + tusb_desc_dfu_functional_t const *func_desc = (tusb_desc_dfu_functional_t const *) itf_desc; + TU_ASSERT(tu_desc_type(func_desc) == TUSB_DESC_FUNCTIONAL, 0); + drv_len += sizeof(tusb_desc_dfu_functional_t); - _dfu_ctx.attrs = func_desc->bAttributes; + _dfu_ctx.attrs = func_desc->bAttributes; - // CFG_TUD_DFU_XFER_BUFSIZE has to be set to the buffer size used in TUD_DFU_DESCRIPTOR - uint16_t const transfer_size = tu_le16toh(tu_unaligned_read16( - (uint8_t const *)func_desc + offsetof(tusb_desc_dfu_functional_t, wTransferSize))); - TU_ASSERT(transfer_size <= CFG_TUD_DFU_XFER_BUFSIZE, drv_len); + // CFG_TUD_DFU_XFER_BUFSIZE has to be set to the buffer size used in TUD_DFU_DESCRIPTOR + uint16_t const transfer_size = tu_le16toh( tu_unaligned_read16((uint8_t const*) func_desc + offsetof(tusb_desc_dfu_functional_t, wTransferSize)) ); + TU_ASSERT(transfer_size <= CFG_TUD_DFU_XFER_BUFSIZE, drv_len); - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); - - TU_LOG_DRV(" DFU State : %s, Status: %s\r\n", - tu_lookup_find(&_dfu_state_table, _dfu_ctx.state), - tu_lookup_find(&_dfu_status_table, _dfu_ctx.status)); - - if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { - // Standard request include GET/SET_INTERFACE - switch (request->bRequest) { - case TUSB_REQ_SET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) { - // Switch Alt interface and reset state machine - _dfu_ctx.alt = (uint8_t)request->wValue; - reset_state(); - return tud_control_status(rhport, request); - } - break; - - case TUSB_REQ_GET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) { - return tud_control_xfer(rhport, request, &_dfu_ctx.alt, 1); - } - break; - - // unsupported request - default: - return false; + TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); + + TU_LOG_DRV(" DFU State : %s, Status: %s\r\n", tu_lookup_find(&_dfu_state_table, _dfu_ctx.state), tu_lookup_find(&_dfu_status_table, _dfu_ctx.status)); + + if ( request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD ) + { + // Standard request include GET/SET_INTERFACE + switch ( request->bRequest ) + { + case TUSB_REQ_SET_INTERFACE: + if ( stage == CONTROL_STAGE_SETUP ) + { + // Switch Alt interface and reset state machine + _dfu_ctx.alt = (uint8_t) request->wValue; + reset_state(); + return tud_control_status(rhport, request); } - } else if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { - TU_LOG_DRV(" DFU Request: %s\r\n", tu_lookup_find(&_dfu_request_table, request->bRequest)); - - // Class request - switch (request->bRequest) { - case DFU_REQUEST_DETACH: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_status(rhport, request); - } else if (stage == CONTROL_STAGE_ACK) { - if (tud_dfu_detach_cb) - tud_dfu_detach_cb(); - } - break; - - case DFU_REQUEST_CLRSTATUS: - if (stage == CONTROL_STAGE_SETUP) { - reset_state(); - tud_control_status(rhport, request); - } - break; - - case DFU_REQUEST_GETSTATE: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_xfer(rhport, request, &_dfu_ctx.state, 1); - } - break; - - case DFU_REQUEST_ABORT: - if (stage == CONTROL_STAGE_SETUP) { - reset_state(); - tud_control_status(rhport, request); - } else if (stage == CONTROL_STAGE_ACK) { - if (tud_dfu_abort_cb) - tud_dfu_abort_cb(_dfu_ctx.alt); - } - break; - - case DFU_REQUEST_UPLOAD: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(_dfu_ctx.attrs & DFU_ATTR_CAN_UPLOAD); - TU_VERIFY(tud_dfu_upload_cb); - TU_VERIFY(request->wLength <= CFG_TUD_DFU_XFER_BUFSIZE); - - uint16_t const xfer_len = tud_dfu_upload_cb( - _dfu_ctx.alt, request->wValue, _dfu_ctx.transfer_buf, request->wLength); - - return tud_control_xfer(rhport, request, _dfu_ctx.transfer_buf, xfer_len); - } - break; - - case DFU_REQUEST_DNLOAD: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(_dfu_ctx.attrs & DFU_ATTR_CAN_DOWNLOAD); - TU_VERIFY(_dfu_ctx.state == DFU_IDLE || _dfu_ctx.state == DFU_DNLOAD_IDLE); - TU_VERIFY(request->wLength <= CFG_TUD_DFU_XFER_BUFSIZE); - - // set to true for both download and manifest - _dfu_ctx.flashing_in_progress = true; - - // save block and length for flashing - _dfu_ctx.block = request->wValue; - _dfu_ctx.length = request->wLength; - - if (request->wLength) { - // Download with payload -> transition to DOWNLOAD SYNC - _dfu_ctx.state = DFU_DNLOAD_SYNC; - return tud_control_xfer(rhport, request, _dfu_ctx.transfer_buf, - request->wLength); - } else { - // Download is complete -> transition to MANIFEST SYNC - _dfu_ctx.state = DFU_MANIFEST_SYNC; - return tud_control_status(rhport, request); - } - } - break; - - case DFU_REQUEST_GETSTATUS: - switch (_dfu_ctx.state) { - case DFU_DNLOAD_SYNC: - return process_download_get_status(rhport, stage, request); - break; - - case DFU_MANIFEST_SYNC: - return process_manifest_get_status(rhport, stage, request); - break; - - default: - if (stage == CONTROL_STAGE_SETUP) - return reply_getstatus(rhport, request, _dfu_ctx.state, _dfu_ctx.status, 0); - break; - } - break; - - default: - return false; // stall unsupported request + break; + + case TUSB_REQ_GET_INTERFACE: + if(stage == CONTROL_STAGE_SETUP) + { + return tud_control_xfer(rhport, request, &_dfu_ctx.alt, 1); } - } else { - return false; // unsupported request + break; + + // unsupported request + default: return false; } + } + else if ( request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS ) + { + TU_LOG_DRV(" DFU Request: %s\r\n", tu_lookup_find(&_dfu_request_table, request->bRequest)); + + // Class request + switch ( request->bRequest ) + { + case DFU_REQUEST_DETACH: + if ( stage == CONTROL_STAGE_SETUP ) + { + tud_control_status(rhport, request); + } + else if ( stage == CONTROL_STAGE_ACK ) + { + if ( tud_dfu_detach_cb ) tud_dfu_detach_cb(); + } + break; + + case DFU_REQUEST_CLRSTATUS: + if ( stage == CONTROL_STAGE_SETUP ) + { + reset_state(); + tud_control_status(rhport, request); + } + break; + + case DFU_REQUEST_GETSTATE: + if ( stage == CONTROL_STAGE_SETUP ) + { + tud_control_xfer(rhport, request, &_dfu_ctx.state, 1); + } + break; + + case DFU_REQUEST_ABORT: + if ( stage == CONTROL_STAGE_SETUP ) + { + reset_state(); + tud_control_status(rhport, request); + } + else if ( stage == CONTROL_STAGE_ACK ) + { + if ( tud_dfu_abort_cb ) tud_dfu_abort_cb(_dfu_ctx.alt); + } + break; - return true; + case DFU_REQUEST_UPLOAD: + if ( stage == CONTROL_STAGE_SETUP ) + { + TU_VERIFY(_dfu_ctx.attrs & DFU_ATTR_CAN_UPLOAD); + TU_VERIFY(tud_dfu_upload_cb); + TU_VERIFY(request->wLength <= CFG_TUD_DFU_XFER_BUFSIZE); + + uint16_t const xfer_len = tud_dfu_upload_cb(_dfu_ctx.alt, request->wValue, _dfu_ctx.transfer_buf, request->wLength); + + return tud_control_xfer(rhport, request, _dfu_ctx.transfer_buf, xfer_len); + } + break; + + case DFU_REQUEST_DNLOAD: + if ( stage == CONTROL_STAGE_SETUP ) + { + TU_VERIFY(_dfu_ctx.attrs & DFU_ATTR_CAN_DOWNLOAD); + TU_VERIFY(_dfu_ctx.state == DFU_IDLE || _dfu_ctx.state == DFU_DNLOAD_IDLE); + TU_VERIFY(request->wLength <= CFG_TUD_DFU_XFER_BUFSIZE); + + // set to true for both download and manifest + _dfu_ctx.flashing_in_progress = true; + + // save block and length for flashing + _dfu_ctx.block = request->wValue; + _dfu_ctx.length = request->wLength; + + if ( request->wLength ) + { + // Download with payload -> transition to DOWNLOAD SYNC + _dfu_ctx.state = DFU_DNLOAD_SYNC; + return tud_control_xfer(rhport, request, _dfu_ctx.transfer_buf, request->wLength); + } + else + { + // Download is complete -> transition to MANIFEST SYNC + _dfu_ctx.state = DFU_MANIFEST_SYNC; + return tud_control_status(rhport, request); + } + } + break; + + case DFU_REQUEST_GETSTATUS: + switch ( _dfu_ctx.state ) + { + case DFU_DNLOAD_SYNC: + return process_download_get_status(rhport, stage, request); + break; + + case DFU_MANIFEST_SYNC: + return process_manifest_get_status(rhport, stage, request); + break; + + default: + if ( stage == CONTROL_STAGE_SETUP ) return reply_getstatus(rhport, request, _dfu_ctx.state, _dfu_ctx.status, 0); + break; + } + break; + + default: return false; // stall unsupported request + } + }else + { + return false; // unsupported request + } + + return true; } void tud_dfu_finish_flashing(uint8_t status) { - _dfu_ctx.flashing_in_progress = false; + _dfu_ctx.flashing_in_progress = false; - if (status == DFU_STATUS_OK) { - if (_dfu_ctx.state == DFU_DNBUSY) { - _dfu_ctx.state = DFU_DNLOAD_SYNC; - } else if (_dfu_ctx.state == DFU_MANIFEST) { - _dfu_ctx.state = (_dfu_ctx.attrs & DFU_ATTR_MANIFESTATION_TOLERANT) ? - DFU_MANIFEST_SYNC : - DFU_MANIFEST_WAIT_RESET; - } - } else { - // failed while flashing, move to dfuError - _dfu_ctx.state = DFU_ERROR; - _dfu_ctx.status = (dfu_status_t)status; + if ( status == DFU_STATUS_OK ) + { + if (_dfu_ctx.state == DFU_DNBUSY) + { + _dfu_ctx.state = DFU_DNLOAD_SYNC; + } + else if (_dfu_ctx.state == DFU_MANIFEST) + { + _dfu_ctx.state = (_dfu_ctx.attrs & DFU_ATTR_MANIFESTATION_TOLERANT) + ? DFU_MANIFEST_SYNC : DFU_MANIFEST_WAIT_RESET; } + } + else + { + // failed while flashing, move to dfuError + _dfu_ctx.state = DFU_ERROR; + _dfu_ctx.status = (dfu_status_t)status; + } } -static bool process_download_get_status(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request) +static bool process_download_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - if (stage == CONTROL_STAGE_SETUP) { - // only transition to next state on CONTROL_STAGE_ACK - dfu_state_t next_state; - uint32_t timeout; - - if (_dfu_ctx.flashing_in_progress) { - next_state = DFU_DNBUSY; - timeout = tud_dfu_get_timeout_cb(_dfu_ctx.alt, (uint8_t)next_state); - } else { - next_state = DFU_DNLOAD_IDLE; - timeout = 0; - } + if ( stage == CONTROL_STAGE_SETUP ) + { + // only transition to next state on CONTROL_STAGE_ACK + dfu_state_t next_state; + uint32_t timeout; + + if ( _dfu_ctx.flashing_in_progress ) + { + next_state = DFU_DNBUSY; + timeout = tud_dfu_get_timeout_cb(_dfu_ctx.alt, (uint8_t) next_state); + } + else + { + next_state = DFU_DNLOAD_IDLE; + timeout = 0; + } - return reply_getstatus(rhport, request, next_state, _dfu_ctx.status, timeout); - } else if (stage == CONTROL_STAGE_ACK) { - if (_dfu_ctx.flashing_in_progress) { - _dfu_ctx.state = DFU_DNBUSY; - tud_dfu_download_cb(_dfu_ctx.alt, _dfu_ctx.block, _dfu_ctx.transfer_buf, - _dfu_ctx.length); - } else { - _dfu_ctx.state = DFU_DNLOAD_IDLE; - } + return reply_getstatus(rhport, request, next_state, _dfu_ctx.status, timeout); + } + else if ( stage == CONTROL_STAGE_ACK ) + { + if ( _dfu_ctx.flashing_in_progress ) + { + _dfu_ctx.state = DFU_DNBUSY; + tud_dfu_download_cb(_dfu_ctx.alt, _dfu_ctx.block, _dfu_ctx.transfer_buf, _dfu_ctx.length); + }else + { + _dfu_ctx.state = DFU_DNLOAD_IDLE; } + } - return true; + return true; } -static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request) +static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - if (stage == CONTROL_STAGE_SETUP) { - // only transition to next state on CONTROL_STAGE_ACK - dfu_state_t next_state; - uint32_t timeout; - - if (_dfu_ctx.flashing_in_progress) { - next_state = DFU_MANIFEST; - timeout = tud_dfu_get_timeout_cb(_dfu_ctx.alt, next_state); - } else { - next_state = DFU_IDLE; - timeout = 0; - } + if ( stage == CONTROL_STAGE_SETUP ) + { + // only transition to next state on CONTROL_STAGE_ACK + dfu_state_t next_state; + uint32_t timeout; + + if ( _dfu_ctx.flashing_in_progress ) + { + next_state = DFU_MANIFEST; + timeout = tud_dfu_get_timeout_cb(_dfu_ctx.alt, next_state); + } + else + { + next_state = DFU_IDLE; + timeout = 0; + } - return reply_getstatus(rhport, request, next_state, _dfu_ctx.status, timeout); - } else if (stage == CONTROL_STAGE_ACK) { - if (_dfu_ctx.flashing_in_progress) { - _dfu_ctx.state = DFU_MANIFEST; - tud_dfu_manifest_cb(_dfu_ctx.alt); - } else { - _dfu_ctx.state = DFU_IDLE; - } + return reply_getstatus(rhport, request, next_state, _dfu_ctx.status, timeout); + } + else if ( stage == CONTROL_STAGE_ACK ) + { + if ( _dfu_ctx.flashing_in_progress ) + { + _dfu_ctx.state = DFU_MANIFEST; + tud_dfu_manifest_cb(_dfu_ctx.alt); + } + else + { + _dfu_ctx.state = DFU_IDLE; } + } - return true; + return true; } -static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const *request, - dfu_state_t state, dfu_status_t status, uint32_t timeout) +static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const * request, dfu_state_t state, dfu_status_t status, uint32_t timeout) { - dfu_status_response_t resp; - resp.bStatus = (uint8_t)status; - resp.bwPollTimeout[0] = TU_U32_BYTE0(timeout); - resp.bwPollTimeout[1] = TU_U32_BYTE1(timeout); - resp.bwPollTimeout[2] = TU_U32_BYTE2(timeout); - resp.bState = (uint8_t)state; - resp.iString = 0; - - return tud_control_xfer(rhport, request, &resp, sizeof(dfu_status_response_t)); + dfu_status_response_t resp; + resp.bStatus = (uint8_t) status; + resp.bwPollTimeout[0] = TU_U32_BYTE0(timeout); + resp.bwPollTimeout[1] = TU_U32_BYTE1(timeout); + resp.bwPollTimeout[2] = TU_U32_BYTE2(timeout); + resp.bState = (uint8_t) state; + resp.iString = 0; + + return tud_control_xfer(rhport, request, &resp, sizeof(dfu_status_response_t)); } #endif diff --git a/Libraries/tinyusb/src/class/dfu/dfu_device.h b/Libraries/tinyusb/src/class/dfu/dfu_device.h index 07a8982c45f..00c22ea8bae 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu_device.h +++ b/Libraries/tinyusb/src/class/dfu/dfu_device.h @@ -30,7 +30,7 @@ #include "dfu.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -38,8 +38,7 @@ extern "C" { //--------------------------------------------------------------------+ #if !defined(CFG_TUD_DFU_XFER_BUFSIZE) -#error \ - "CFG_TUD_DFU_XFER_BUFSIZE must be defined, it has to be set to the buffer size used in TUD_DFU_DESCRIPTOR" + #error "CFG_TUD_DFU_XFER_BUFSIZE must be defined, it has to be set to the buffer size used in TUD_DFU_DESCRIPTOR" #endif //--------------------------------------------------------------------+ @@ -65,7 +64,7 @@ uint32_t tud_dfu_get_timeout_cb(uint8_t alt, uint8_t state); // Invoked when received DFU_DNLOAD (wLength>0) following by DFU_GETSTATUS (state=DFU_DNBUSY) requests // This callback could be returned before flashing op is complete (async). // Once finished flashing, application must call tud_dfu_finish_flashing() -void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const *data, uint16_t length); +void tud_dfu_download_cb (uint8_t alt, uint16_t block_num, uint8_t const *data, uint16_t length); // Invoked when download process is complete, received DFU_DNLOAD (wLength=0) following by DFU_GETSTATUS (state=Manifest) // Application can do checksum, or actual flashing if buffered entire image previously. @@ -75,8 +74,7 @@ void tud_dfu_manifest_cb(uint8_t alt); // Invoked when received DFU_UPLOAD request // Application must populate data with up to length bytes and // Return the number of written bytes -TU_ATTR_WEAK uint16_t tud_dfu_upload_cb(uint8_t alt, uint16_t block_num, uint8_t *data, - uint16_t length); +TU_ATTR_WEAK uint16_t tud_dfu_upload_cb(uint8_t alt, uint16_t block_num, uint8_t* data, uint16_t length); // Invoked when a DFU_DETACH request is received TU_ATTR_WEAK void tud_dfu_detach_cb(void); @@ -87,15 +85,15 @@ TU_ATTR_WEAK void tud_dfu_abort_cb(uint8_t alt); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void dfu_moded_init(void); -bool dfu_moded_deinit(void); -void dfu_moded_reset(uint8_t rhport); -uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request); +void dfu_moded_init(void); +bool dfu_moded_deinit(void); +void dfu_moded_reset(uint8_t rhport); +uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); + #ifdef __cplusplus -} + } #endif #endif /* _TUSB_DFU_MODE_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/dfu/dfu_rt_device.c b/Libraries/tinyusb/src/class/dfu/dfu_rt_device.c index dbedce14d4f..3b801b78767 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu_rt_device.c +++ b/Libraries/tinyusb/src/class/dfu/dfu_rt_device.c @@ -39,10 +39,10 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_DFU_RUNTIME_LOG_LEVEL -#define CFG_TUD_DFU_RUNTIME_LOG_LEVEL CFG_TUD_LOG_LEVEL + #define CFG_TUD_DFU_RUNTIME_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_RUNTIME_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_RUNTIME_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION @@ -51,82 +51,88 @@ //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void dfu_rtd_init(void) {} +void dfu_rtd_init(void) { +} -bool dfu_rtd_deinit(void) -{ - return true; +bool dfu_rtd_deinit(void) { + return true; } void dfu_rtd_reset(uint8_t rhport) { - (void)rhport; + (void) rhport; } -uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { - (void)rhport; - (void)max_len; + (void) rhport; + (void) max_len; - // Ensure this is DFU Runtime - TU_VERIFY((itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS) && - (itf_desc->bInterfaceProtocol == DFU_PROTOCOL_RT), - 0); + // Ensure this is DFU Runtime + TU_VERIFY((itf_desc->bInterfaceSubClass == TUD_DFU_APP_SUBCLASS) && + (itf_desc->bInterfaceProtocol == DFU_PROTOCOL_RT), 0); - uint8_t const *p_desc = tu_desc_next(itf_desc); - uint16_t drv_len = sizeof(tusb_desc_interface_t); + uint8_t const * p_desc = tu_desc_next( itf_desc ); + uint16_t drv_len = sizeof(tusb_desc_interface_t); - if (TUSB_DESC_FUNCTIONAL == tu_desc_type(p_desc)) { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + if ( TUSB_DESC_FUNCTIONAL == tu_desc_type(p_desc) ) + { + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - // nothing to do with DATA or ACK stage - if (stage != CONTROL_STAGE_SETUP) - return true; + // nothing to do with DATA or ACK stage + if ( stage != CONTROL_STAGE_SETUP ) return true; - TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); + TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); - // dfu-util will try to claim the interface with SET_INTERFACE request before sending DFU request - if (TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && - TUSB_REQ_SET_INTERFACE == request->bRequest) { - tud_control_status(rhport, request); - return true; + // dfu-util will try to claim the interface with SET_INTERFACE request before sending DFU request + if ( TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && + TUSB_REQ_SET_INTERFACE == request->bRequest ) + { + tud_control_status(rhport, request); + return true; + } + + // Handle class request only from here + TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); + + switch (request->bRequest) + { + case DFU_REQUEST_DETACH: + { + TU_LOG_DRV(" DFU RT Request: DETACH\r\n"); + tud_control_status(rhport, request); + tud_dfu_runtime_reboot_to_dfu_cb(); } - - // Handle class request only from here - TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - - switch (request->bRequest) { - case DFU_REQUEST_DETACH: { - TU_LOG_DRV(" DFU RT Request: DETACH\r\n"); - tud_control_status(rhport, request); - tud_dfu_runtime_reboot_to_dfu_cb(); - } break; - - case DFU_REQUEST_GETSTATUS: { - TU_LOG_DRV(" DFU RT Request: GETSTATUS\r\n"); - dfu_status_response_t resp; - // Status = OK, Poll timeout is ignored during RT, State = APP_IDLE, IString = 0 - TU_VERIFY(tu_memset_s(&resp, sizeof(resp), 0x00, sizeof(resp)) == 0); - tud_control_xfer(rhport, request, &resp, sizeof(dfu_status_response_t)); - } break; - - default: { - TU_LOG_DRV(" DFU RT Unexpected Request: %d\r\n", request->bRequest); - return false; // stall unsupported request + break; + + case DFU_REQUEST_GETSTATUS: + { + TU_LOG_DRV(" DFU RT Request: GETSTATUS\r\n"); + dfu_status_response_t resp; + // Status = OK, Poll timeout is ignored during RT, State = APP_IDLE, IString = 0 + TU_VERIFY(tu_memset_s(&resp, sizeof(resp), 0x00, sizeof(resp))==0); + tud_control_xfer(rhport, request, &resp, sizeof(dfu_status_response_t)); } + break; + + default: + { + TU_LOG_DRV(" DFU RT Unexpected Request: %d\r\n", request->bRequest); + return false; // stall unsupported request } + } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/dfu/dfu_rt_device.h b/Libraries/tinyusb/src/class/dfu/dfu_rt_device.h index c444d3ad4da..67eb26d9574 100644 --- a/Libraries/tinyusb/src/class/dfu/dfu_rt_device.h +++ b/Libraries/tinyusb/src/class/dfu/dfu_rt_device.h @@ -30,7 +30,7 @@ #include "dfu.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -42,14 +42,14 @@ void tud_dfu_runtime_reboot_to_dfu_cb(void); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void dfu_rtd_init(void); -bool dfu_rtd_deinit(void); -void dfu_rtd_reset(uint8_t rhport); -uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +void dfu_rtd_init(void); +bool dfu_rtd_deinit(void); +void dfu_rtd_reset(uint8_t rhport); +uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_DFU_RT_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/hid/hid.h b/Libraries/tinyusb/src/class/hid/hid.h index 4b28b62ccfc..c2b5a8a4823 100644 --- a/Libraries/tinyusb/src/class/hid/hid.h +++ b/Libraries/tinyusb/src/class/hid/hid.h @@ -34,7 +34,7 @@ #include "common/tusb_common.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -44,99 +44,109 @@ extern "C" { * @{ */ /// USB HID Descriptor -typedef struct TU_ATTR_PACKED { - uint8_t bLength; /**< Numeric expression that is the total size of the HID descriptor */ - uint8_t bDescriptorType; /**< Constant name specifying type of HID descriptor. */ +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength; /**< Numeric expression that is the total size of the HID descriptor */ + uint8_t bDescriptorType; /**< Constant name specifying type of HID descriptor. */ - uint16_t bcdHID; /**< Numeric expression identifying the HID Class Specification release */ - uint8_t - bCountryCode; /**< Numeric expression identifying country code of the localized hardware. */ - uint8_t bNumDescriptors; /**< Numeric expression specifying the number of class descriptors */ + uint16_t bcdHID; /**< Numeric expression identifying the HID Class Specification release */ + uint8_t bCountryCode; /**< Numeric expression identifying country code of the localized hardware. */ + uint8_t bNumDescriptors; /**< Numeric expression specifying the number of class descriptors */ - uint8_t bReportType; /**< Type of HID class report. */ - uint16_t wReportLength; /**< the total size of the Report descriptor. */ + uint8_t bReportType; /**< Type of HID class report. */ + uint16_t wReportLength; /**< the total size of the Report descriptor. */ } tusb_hid_descriptor_hid_t; /// HID Subclass -typedef enum { - HID_SUBCLASS_NONE = 0, ///< No Subclass - HID_SUBCLASS_BOOT = 1 ///< Boot Interface Subclass -} hid_subclass_enum_t; +typedef enum +{ + HID_SUBCLASS_NONE = 0, ///< No Subclass + HID_SUBCLASS_BOOT = 1 ///< Boot Interface Subclass +}hid_subclass_enum_t; /// HID Interface Protocol -typedef enum { - HID_ITF_PROTOCOL_NONE = 0, ///< None - HID_ITF_PROTOCOL_KEYBOARD = 1, ///< Keyboard - HID_ITF_PROTOCOL_MOUSE = 2 ///< Mouse -} hid_interface_protocol_enum_t; +typedef enum +{ + HID_ITF_PROTOCOL_NONE = 0, ///< None + HID_ITF_PROTOCOL_KEYBOARD = 1, ///< Keyboard + HID_ITF_PROTOCOL_MOUSE = 2 ///< Mouse +}hid_interface_protocol_enum_t; /// HID Descriptor Type -typedef enum { - HID_DESC_TYPE_HID = 0x21, ///< HID Descriptor - HID_DESC_TYPE_REPORT = 0x22, ///< Report Descriptor - HID_DESC_TYPE_PHYSICAL = 0x23 ///< Physical Descriptor -} hid_descriptor_enum_t; +typedef enum +{ + HID_DESC_TYPE_HID = 0x21, ///< HID Descriptor + HID_DESC_TYPE_REPORT = 0x22, ///< Report Descriptor + HID_DESC_TYPE_PHYSICAL = 0x23 ///< Physical Descriptor +}hid_descriptor_enum_t; /// HID Request Report Type -typedef enum { - HID_REPORT_TYPE_INVALID = 0, - HID_REPORT_TYPE_INPUT, ///< Input - HID_REPORT_TYPE_OUTPUT, ///< Output - HID_REPORT_TYPE_FEATURE ///< Feature -} hid_report_type_t; +typedef enum +{ + HID_REPORT_TYPE_INVALID = 0, + HID_REPORT_TYPE_INPUT, ///< Input + HID_REPORT_TYPE_OUTPUT, ///< Output + HID_REPORT_TYPE_FEATURE ///< Feature +}hid_report_type_t; /// HID Class Specific Control Request -typedef enum { - HID_REQ_CONTROL_GET_REPORT = 0x01, ///< Get Report - HID_REQ_CONTROL_GET_IDLE = 0x02, ///< Get Idle - HID_REQ_CONTROL_GET_PROTOCOL = 0x03, ///< Get Protocol - HID_REQ_CONTROL_SET_REPORT = 0x09, ///< Set Report - HID_REQ_CONTROL_SET_IDLE = 0x0a, ///< Set Idle - HID_REQ_CONTROL_SET_PROTOCOL = 0x0b ///< Set Protocol -} hid_request_enum_t; +typedef enum +{ + HID_REQ_CONTROL_GET_REPORT = 0x01, ///< Get Report + HID_REQ_CONTROL_GET_IDLE = 0x02, ///< Get Idle + HID_REQ_CONTROL_GET_PROTOCOL = 0x03, ///< Get Protocol + HID_REQ_CONTROL_SET_REPORT = 0x09, ///< Set Report + HID_REQ_CONTROL_SET_IDLE = 0x0a, ///< Set Idle + HID_REQ_CONTROL_SET_PROTOCOL = 0x0b ///< Set Protocol +}hid_request_enum_t; /// HID Local Code -typedef enum { - HID_LOCAL_NotSupported = 0, ///< NotSupported - HID_LOCAL_Arabic, ///< Arabic - HID_LOCAL_Belgian, ///< Belgian - HID_LOCAL_Canadian_Bilingual, ///< Canadian_Bilingual - HID_LOCAL_Canadian_French, ///< Canadian_French - HID_LOCAL_Czech_Republic, ///< Czech_Republic - HID_LOCAL_Danish, ///< Danish - HID_LOCAL_Finnish, ///< Finnish - HID_LOCAL_French, ///< French - HID_LOCAL_German, ///< German - HID_LOCAL_Greek, ///< Greek - HID_LOCAL_Hebrew, ///< Hebrew - HID_LOCAL_Hungary, ///< Hungary - HID_LOCAL_International, ///< International - HID_LOCAL_Italian, ///< Italian - HID_LOCAL_Japan_Katakana, ///< Japan_Katakana - HID_LOCAL_Korean, ///< Korean - HID_LOCAL_Latin_American, ///< Latin_American - HID_LOCAL_Netherlands_Dutch, ///< Netherlands/Dutch - HID_LOCAL_Norwegian, ///< Norwegian - HID_LOCAL_Persian_Farsi, ///< Persian (Farsi) - HID_LOCAL_Poland, ///< Poland - HID_LOCAL_Portuguese, ///< Portuguese - HID_LOCAL_Russia, ///< Russia - HID_LOCAL_Slovakia, ///< Slovakia - HID_LOCAL_Spanish, ///< Spanish - HID_LOCAL_Swedish, ///< Swedish - HID_LOCAL_Swiss_French, ///< Swiss/French - HID_LOCAL_Swiss_German, ///< Swiss/German - HID_LOCAL_Switzerland, ///< Switzerland - HID_LOCAL_Taiwan, ///< Taiwan - HID_LOCAL_Turkish_Q, ///< Turkish-Q - HID_LOCAL_UK, ///< UK - HID_LOCAL_US, ///< US - HID_LOCAL_Yugoslavia, ///< Yugoslavia - HID_LOCAL_Turkish_F ///< Turkish-F +typedef enum +{ + HID_LOCAL_NotSupported = 0 , ///< NotSupported + HID_LOCAL_Arabic , ///< Arabic + HID_LOCAL_Belgian , ///< Belgian + HID_LOCAL_Canadian_Bilingual , ///< Canadian_Bilingual + HID_LOCAL_Canadian_French , ///< Canadian_French + HID_LOCAL_Czech_Republic , ///< Czech_Republic + HID_LOCAL_Danish , ///< Danish + HID_LOCAL_Finnish , ///< Finnish + HID_LOCAL_French , ///< French + HID_LOCAL_German , ///< German + HID_LOCAL_Greek , ///< Greek + HID_LOCAL_Hebrew , ///< Hebrew + HID_LOCAL_Hungary , ///< Hungary + HID_LOCAL_International , ///< International + HID_LOCAL_Italian , ///< Italian + HID_LOCAL_Japan_Katakana , ///< Japan_Katakana + HID_LOCAL_Korean , ///< Korean + HID_LOCAL_Latin_American , ///< Latin_American + HID_LOCAL_Netherlands_Dutch , ///< Netherlands/Dutch + HID_LOCAL_Norwegian , ///< Norwegian + HID_LOCAL_Persian_Farsi , ///< Persian (Farsi) + HID_LOCAL_Poland , ///< Poland + HID_LOCAL_Portuguese , ///< Portuguese + HID_LOCAL_Russia , ///< Russia + HID_LOCAL_Slovakia , ///< Slovakia + HID_LOCAL_Spanish , ///< Spanish + HID_LOCAL_Swedish , ///< Swedish + HID_LOCAL_Swiss_French , ///< Swiss/French + HID_LOCAL_Swiss_German , ///< Swiss/German + HID_LOCAL_Switzerland , ///< Switzerland + HID_LOCAL_Taiwan , ///< Taiwan + HID_LOCAL_Turkish_Q , ///< Turkish-Q + HID_LOCAL_UK , ///< UK + HID_LOCAL_US , ///< US + HID_LOCAL_Yugoslavia , ///< Yugoslavia + HID_LOCAL_Turkish_F ///< Turkish-F } hid_local_enum_t; // HID protocol value used by GetProtocol / SetProtocol -typedef enum { HID_PROTOCOL_BOOT = 0, HID_PROTOCOL_REPORT = 1 } hid_protocol_mode_enum_t; +typedef enum +{ + HID_PROTOCOL_BOOT = 0, + HID_PROTOCOL_REPORT = 1 +} hid_protocol_mode_enum_t; /** @} */ @@ -182,92 +192,95 @@ typedef enum { HID_PROTOCOL_BOOT = 0, HID_PROTOCOL_REPORT = 1 } hid_protocol_mod */ /// HID Gamepad Protocol Report. -typedef struct TU_ATTR_PACKED { - int8_t x; ///< Delta x movement of left analog-stick - int8_t y; ///< Delta y movement of left analog-stick - int8_t z; ///< Delta z movement of right analog-joystick - int8_t rz; ///< Delta Rz movement of right analog-joystick - int8_t rx; ///< Delta Rx movement of analog left trigger - int8_t ry; ///< Delta Ry movement of analog right trigger - uint8_t hat; ///< Buttons mask for currently pressed buttons in the DPad/hat - uint32_t buttons; ///< Buttons mask for currently pressed buttons -} hid_gamepad_report_t; +typedef struct TU_ATTR_PACKED +{ + int8_t x; ///< Delta x movement of left analog-stick + int8_t y; ///< Delta y movement of left analog-stick + int8_t z; ///< Delta z movement of right analog-joystick + int8_t rz; ///< Delta Rz movement of right analog-joystick + int8_t rx; ///< Delta Rx movement of analog left trigger + int8_t ry; ///< Delta Ry movement of analog right trigger + uint8_t hat; ///< Buttons mask for currently pressed buttons in the DPad/hat + uint32_t buttons; ///< Buttons mask for currently pressed buttons +}hid_gamepad_report_t; /// Standard Gamepad Buttons Bitmap -typedef enum { - GAMEPAD_BUTTON_0 = TU_BIT(0), - GAMEPAD_BUTTON_1 = TU_BIT(1), - GAMEPAD_BUTTON_2 = TU_BIT(2), - GAMEPAD_BUTTON_3 = TU_BIT(3), - GAMEPAD_BUTTON_4 = TU_BIT(4), - GAMEPAD_BUTTON_5 = TU_BIT(5), - GAMEPAD_BUTTON_6 = TU_BIT(6), - GAMEPAD_BUTTON_7 = TU_BIT(7), - GAMEPAD_BUTTON_8 = TU_BIT(8), - GAMEPAD_BUTTON_9 = TU_BIT(9), - GAMEPAD_BUTTON_10 = TU_BIT(10), - GAMEPAD_BUTTON_11 = TU_BIT(11), - GAMEPAD_BUTTON_12 = TU_BIT(12), - GAMEPAD_BUTTON_13 = TU_BIT(13), - GAMEPAD_BUTTON_14 = TU_BIT(14), - GAMEPAD_BUTTON_15 = TU_BIT(15), - GAMEPAD_BUTTON_16 = TU_BIT(16), - GAMEPAD_BUTTON_17 = TU_BIT(17), - GAMEPAD_BUTTON_18 = TU_BIT(18), - GAMEPAD_BUTTON_19 = TU_BIT(19), - GAMEPAD_BUTTON_20 = TU_BIT(20), - GAMEPAD_BUTTON_21 = TU_BIT(21), - GAMEPAD_BUTTON_22 = TU_BIT(22), - GAMEPAD_BUTTON_23 = TU_BIT(23), - GAMEPAD_BUTTON_24 = TU_BIT(24), - GAMEPAD_BUTTON_25 = TU_BIT(25), - GAMEPAD_BUTTON_26 = TU_BIT(26), - GAMEPAD_BUTTON_27 = TU_BIT(27), - GAMEPAD_BUTTON_28 = TU_BIT(28), - GAMEPAD_BUTTON_29 = TU_BIT(29), - GAMEPAD_BUTTON_30 = TU_BIT(30), - GAMEPAD_BUTTON_31 = TU_BIT(31), -} hid_gamepad_button_bm_t; +typedef enum +{ + GAMEPAD_BUTTON_0 = TU_BIT(0), + GAMEPAD_BUTTON_1 = TU_BIT(1), + GAMEPAD_BUTTON_2 = TU_BIT(2), + GAMEPAD_BUTTON_3 = TU_BIT(3), + GAMEPAD_BUTTON_4 = TU_BIT(4), + GAMEPAD_BUTTON_5 = TU_BIT(5), + GAMEPAD_BUTTON_6 = TU_BIT(6), + GAMEPAD_BUTTON_7 = TU_BIT(7), + GAMEPAD_BUTTON_8 = TU_BIT(8), + GAMEPAD_BUTTON_9 = TU_BIT(9), + GAMEPAD_BUTTON_10 = TU_BIT(10), + GAMEPAD_BUTTON_11 = TU_BIT(11), + GAMEPAD_BUTTON_12 = TU_BIT(12), + GAMEPAD_BUTTON_13 = TU_BIT(13), + GAMEPAD_BUTTON_14 = TU_BIT(14), + GAMEPAD_BUTTON_15 = TU_BIT(15), + GAMEPAD_BUTTON_16 = TU_BIT(16), + GAMEPAD_BUTTON_17 = TU_BIT(17), + GAMEPAD_BUTTON_18 = TU_BIT(18), + GAMEPAD_BUTTON_19 = TU_BIT(19), + GAMEPAD_BUTTON_20 = TU_BIT(20), + GAMEPAD_BUTTON_21 = TU_BIT(21), + GAMEPAD_BUTTON_22 = TU_BIT(22), + GAMEPAD_BUTTON_23 = TU_BIT(23), + GAMEPAD_BUTTON_24 = TU_BIT(24), + GAMEPAD_BUTTON_25 = TU_BIT(25), + GAMEPAD_BUTTON_26 = TU_BIT(26), + GAMEPAD_BUTTON_27 = TU_BIT(27), + GAMEPAD_BUTTON_28 = TU_BIT(28), + GAMEPAD_BUTTON_29 = TU_BIT(29), + GAMEPAD_BUTTON_30 = TU_BIT(30), + GAMEPAD_BUTTON_31 = TU_BIT(31), +}hid_gamepad_button_bm_t; /// Standard Gamepad Buttons Naming from Linux input event codes /// https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h -#define GAMEPAD_BUTTON_A GAMEPAD_BUTTON_0 -#define GAMEPAD_BUTTON_SOUTH GAMEPAD_BUTTON_0 +#define GAMEPAD_BUTTON_A GAMEPAD_BUTTON_0 +#define GAMEPAD_BUTTON_SOUTH GAMEPAD_BUTTON_0 -#define GAMEPAD_BUTTON_B GAMEPAD_BUTTON_1 -#define GAMEPAD_BUTTON_EAST GAMEPAD_BUTTON_1 +#define GAMEPAD_BUTTON_B GAMEPAD_BUTTON_1 +#define GAMEPAD_BUTTON_EAST GAMEPAD_BUTTON_1 -#define GAMEPAD_BUTTON_C GAMEPAD_BUTTON_2 +#define GAMEPAD_BUTTON_C GAMEPAD_BUTTON_2 -#define GAMEPAD_BUTTON_X GAMEPAD_BUTTON_3 -#define GAMEPAD_BUTTON_NORTH GAMEPAD_BUTTON_3 +#define GAMEPAD_BUTTON_X GAMEPAD_BUTTON_3 +#define GAMEPAD_BUTTON_NORTH GAMEPAD_BUTTON_3 -#define GAMEPAD_BUTTON_Y GAMEPAD_BUTTON_4 -#define GAMEPAD_BUTTON_WEST GAMEPAD_BUTTON_4 +#define GAMEPAD_BUTTON_Y GAMEPAD_BUTTON_4 +#define GAMEPAD_BUTTON_WEST GAMEPAD_BUTTON_4 -#define GAMEPAD_BUTTON_Z GAMEPAD_BUTTON_5 -#define GAMEPAD_BUTTON_TL GAMEPAD_BUTTON_6 -#define GAMEPAD_BUTTON_TR GAMEPAD_BUTTON_7 -#define GAMEPAD_BUTTON_TL2 GAMEPAD_BUTTON_8 -#define GAMEPAD_BUTTON_TR2 GAMEPAD_BUTTON_9 -#define GAMEPAD_BUTTON_SELECT GAMEPAD_BUTTON_10 -#define GAMEPAD_BUTTON_START GAMEPAD_BUTTON_11 -#define GAMEPAD_BUTTON_MODE GAMEPAD_BUTTON_12 -#define GAMEPAD_BUTTON_THUMBL GAMEPAD_BUTTON_13 -#define GAMEPAD_BUTTON_THUMBR GAMEPAD_BUTTON_14 +#define GAMEPAD_BUTTON_Z GAMEPAD_BUTTON_5 +#define GAMEPAD_BUTTON_TL GAMEPAD_BUTTON_6 +#define GAMEPAD_BUTTON_TR GAMEPAD_BUTTON_7 +#define GAMEPAD_BUTTON_TL2 GAMEPAD_BUTTON_8 +#define GAMEPAD_BUTTON_TR2 GAMEPAD_BUTTON_9 +#define GAMEPAD_BUTTON_SELECT GAMEPAD_BUTTON_10 +#define GAMEPAD_BUTTON_START GAMEPAD_BUTTON_11 +#define GAMEPAD_BUTTON_MODE GAMEPAD_BUTTON_12 +#define GAMEPAD_BUTTON_THUMBL GAMEPAD_BUTTON_13 +#define GAMEPAD_BUTTON_THUMBR GAMEPAD_BUTTON_14 /// Standard Gamepad HAT/DPAD Buttons (from Linux input event codes) -typedef enum { - GAMEPAD_HAT_CENTERED = 0, ///< DPAD_CENTERED - GAMEPAD_HAT_UP = 1, ///< DPAD_UP - GAMEPAD_HAT_UP_RIGHT = 2, ///< DPAD_UP_RIGHT - GAMEPAD_HAT_RIGHT = 3, ///< DPAD_RIGHT - GAMEPAD_HAT_DOWN_RIGHT = 4, ///< DPAD_DOWN_RIGHT - GAMEPAD_HAT_DOWN = 5, ///< DPAD_DOWN - GAMEPAD_HAT_DOWN_LEFT = 6, ///< DPAD_DOWN_LEFT - GAMEPAD_HAT_LEFT = 7, ///< DPAD_LEFT - GAMEPAD_HAT_UP_LEFT = 8, ///< DPAD_UP_LEFT -} hid_gamepad_hat_t; +typedef enum +{ + GAMEPAD_HAT_CENTERED = 0, ///< DPAD_CENTERED + GAMEPAD_HAT_UP = 1, ///< DPAD_UP + GAMEPAD_HAT_UP_RIGHT = 2, ///< DPAD_UP_RIGHT + GAMEPAD_HAT_RIGHT = 3, ///< DPAD_RIGHT + GAMEPAD_HAT_DOWN_RIGHT = 4, ///< DPAD_DOWN_RIGHT + GAMEPAD_HAT_DOWN = 5, ///< DPAD_DOWN + GAMEPAD_HAT_DOWN_LEFT = 6, ///< DPAD_DOWN_LEFT + GAMEPAD_HAT_LEFT = 7, ///< DPAD_LEFT + GAMEPAD_HAT_UP_LEFT = 8, ///< DPAD_UP_LEFT +}hid_gamepad_hat_t; /// @} @@ -278,32 +291,37 @@ typedef enum { * @{ */ /// Standard HID Boot Protocol Mouse Report. -typedef struct TU_ATTR_PACKED { - uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */ - int8_t x; /**< Current delta x movement of the mouse. */ - int8_t y; /**< Current delta y movement on the mouse. */ - int8_t wheel; /**< Current delta wheel movement on the mouse. */ - int8_t pan; // using AC Pan +typedef struct TU_ATTR_PACKED +{ + uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */ + int8_t x; /**< Current delta x movement of the mouse. */ + int8_t y; /**< Current delta y movement on the mouse. */ + int8_t wheel; /**< Current delta wheel movement on the mouse. */ + int8_t pan; // using AC Pan } hid_mouse_report_t; + // Absolute Mouse: same as the Standard (relative) Mouse Report but // with int16_t instead of int8_t for X and Y coordinates. -typedef struct TU_ATTR_PACKED { +typedef struct TU_ATTR_PACKED +{ uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */ - int16_t x; /**< Current x position of the mouse. */ - int16_t y; /**< Current y position of the mouse. */ - int8_t wheel; /**< Current delta wheel movement on the mouse. */ - int8_t pan; // using AC Pan + int16_t x; /**< Current x position of the mouse. */ + int16_t y; /**< Current y position of the mouse. */ + int8_t wheel; /**< Current delta wheel movement on the mouse. */ + int8_t pan; // using AC Pan } hid_abs_mouse_report_t; + /// Standard Mouse Buttons Bitmap -typedef enum { - MOUSE_BUTTON_LEFT = TU_BIT(0), ///< Left button - MOUSE_BUTTON_RIGHT = TU_BIT(1), ///< Right button - MOUSE_BUTTON_MIDDLE = TU_BIT(2), ///< Middle button - MOUSE_BUTTON_BACKWARD = TU_BIT(3), ///< Backward button, - MOUSE_BUTTON_FORWARD = TU_BIT(4), ///< Forward button, -} hid_mouse_button_bm_t; +typedef enum +{ + MOUSE_BUTTON_LEFT = TU_BIT(0), ///< Left button + MOUSE_BUTTON_RIGHT = TU_BIT(1), ///< Right button + MOUSE_BUTTON_MIDDLE = TU_BIT(2), ///< Middle button + MOUSE_BUTTON_BACKWARD = TU_BIT(3), ///< Backward button, + MOUSE_BUTTON_FORWARD = TU_BIT(4), ///< Forward button, +}hid_mouse_button_bm_t; /// @} @@ -314,255 +332,259 @@ typedef enum { * @{ */ /// Standard HID Boot Protocol Keyboard Report. -typedef struct TU_ATTR_PACKED { - uint8_t modifier; /**< Keyboard modifier (KEYBOARD_MODIFIER_* masks). */ - uint8_t reserved; /**< Reserved for OEM use, always set to 0. */ - uint8_t keycode[6]; /**< Key codes of the currently pressed keys. */ +typedef struct TU_ATTR_PACKED +{ + uint8_t modifier; /**< Keyboard modifier (KEYBOARD_MODIFIER_* masks). */ + uint8_t reserved; /**< Reserved for OEM use, always set to 0. */ + uint8_t keycode[6]; /**< Key codes of the currently pressed keys. */ } hid_keyboard_report_t; /// Keyboard modifier codes bitmap -typedef enum { - KEYBOARD_MODIFIER_LEFTCTRL = TU_BIT(0), ///< Left Control - KEYBOARD_MODIFIER_LEFTSHIFT = TU_BIT(1), ///< Left Shift - KEYBOARD_MODIFIER_LEFTALT = TU_BIT(2), ///< Left Alt - KEYBOARD_MODIFIER_LEFTGUI = TU_BIT(3), ///< Left Window - KEYBOARD_MODIFIER_RIGHTCTRL = TU_BIT(4), ///< Right Control - KEYBOARD_MODIFIER_RIGHTSHIFT = TU_BIT(5), ///< Right Shift - KEYBOARD_MODIFIER_RIGHTALT = TU_BIT(6), ///< Right Alt - KEYBOARD_MODIFIER_RIGHTGUI = TU_BIT(7) ///< Right Window -} hid_keyboard_modifier_bm_t; - -typedef enum { - KEYBOARD_LED_NUMLOCK = TU_BIT(0), ///< Num Lock LED - KEYBOARD_LED_CAPSLOCK = TU_BIT(1), ///< Caps Lock LED - KEYBOARD_LED_SCROLLLOCK = TU_BIT(2), ///< Scroll Lock LED - KEYBOARD_LED_COMPOSE = TU_BIT(3), ///< Composition Mode - KEYBOARD_LED_KANA = TU_BIT(4) ///< Kana mode -} hid_keyboard_led_bm_t; +typedef enum +{ + KEYBOARD_MODIFIER_LEFTCTRL = TU_BIT(0), ///< Left Control + KEYBOARD_MODIFIER_LEFTSHIFT = TU_BIT(1), ///< Left Shift + KEYBOARD_MODIFIER_LEFTALT = TU_BIT(2), ///< Left Alt + KEYBOARD_MODIFIER_LEFTGUI = TU_BIT(3), ///< Left Window + KEYBOARD_MODIFIER_RIGHTCTRL = TU_BIT(4), ///< Right Control + KEYBOARD_MODIFIER_RIGHTSHIFT = TU_BIT(5), ///< Right Shift + KEYBOARD_MODIFIER_RIGHTALT = TU_BIT(6), ///< Right Alt + KEYBOARD_MODIFIER_RIGHTGUI = TU_BIT(7) ///< Right Window +}hid_keyboard_modifier_bm_t; + +typedef enum +{ + KEYBOARD_LED_NUMLOCK = TU_BIT(0), ///< Num Lock LED + KEYBOARD_LED_CAPSLOCK = TU_BIT(1), ///< Caps Lock LED + KEYBOARD_LED_SCROLLLOCK = TU_BIT(2), ///< Scroll Lock LED + KEYBOARD_LED_COMPOSE = TU_BIT(3), ///< Composition Mode + KEYBOARD_LED_KANA = TU_BIT(4) ///< Kana mode +}hid_keyboard_led_bm_t; /// @} //--------------------------------------------------------------------+ // HID KEYCODE //--------------------------------------------------------------------+ -#define HID_KEY_NONE 0x00 -#define HID_KEY_A 0x04 -#define HID_KEY_B 0x05 -#define HID_KEY_C 0x06 -#define HID_KEY_D 0x07 -#define HID_KEY_E 0x08 -#define HID_KEY_F 0x09 -#define HID_KEY_G 0x0A -#define HID_KEY_H 0x0B -#define HID_KEY_I 0x0C -#define HID_KEY_J 0x0D -#define HID_KEY_K 0x0E -#define HID_KEY_L 0x0F -#define HID_KEY_M 0x10 -#define HID_KEY_N 0x11 -#define HID_KEY_O 0x12 -#define HID_KEY_P 0x13 -#define HID_KEY_Q 0x14 -#define HID_KEY_R 0x15 -#define HID_KEY_S 0x16 -#define HID_KEY_T 0x17 -#define HID_KEY_U 0x18 -#define HID_KEY_V 0x19 -#define HID_KEY_W 0x1A -#define HID_KEY_X 0x1B -#define HID_KEY_Y 0x1C -#define HID_KEY_Z 0x1D -#define HID_KEY_1 0x1E -#define HID_KEY_2 0x1F -#define HID_KEY_3 0x20 -#define HID_KEY_4 0x21 -#define HID_KEY_5 0x22 -#define HID_KEY_6 0x23 -#define HID_KEY_7 0x24 -#define HID_KEY_8 0x25 -#define HID_KEY_9 0x26 -#define HID_KEY_0 0x27 -#define HID_KEY_ENTER 0x28 -#define HID_KEY_ESCAPE 0x29 -#define HID_KEY_BACKSPACE 0x2A -#define HID_KEY_TAB 0x2B -#define HID_KEY_SPACE 0x2C -#define HID_KEY_MINUS 0x2D -#define HID_KEY_EQUAL 0x2E -#define HID_KEY_BRACKET_LEFT 0x2F -#define HID_KEY_BRACKET_RIGHT 0x30 -#define HID_KEY_BACKSLASH 0x31 -#define HID_KEY_EUROPE_1 0x32 -#define HID_KEY_SEMICOLON 0x33 -#define HID_KEY_APOSTROPHE 0x34 -#define HID_KEY_GRAVE 0x35 -#define HID_KEY_COMMA 0x36 -#define HID_KEY_PERIOD 0x37 -#define HID_KEY_SLASH 0x38 -#define HID_KEY_CAPS_LOCK 0x39 -#define HID_KEY_F1 0x3A -#define HID_KEY_F2 0x3B -#define HID_KEY_F3 0x3C -#define HID_KEY_F4 0x3D -#define HID_KEY_F5 0x3E -#define HID_KEY_F6 0x3F -#define HID_KEY_F7 0x40 -#define HID_KEY_F8 0x41 -#define HID_KEY_F9 0x42 -#define HID_KEY_F10 0x43 -#define HID_KEY_F11 0x44 -#define HID_KEY_F12 0x45 -#define HID_KEY_PRINT_SCREEN 0x46 -#define HID_KEY_SCROLL_LOCK 0x47 -#define HID_KEY_PAUSE 0x48 -#define HID_KEY_INSERT 0x49 -#define HID_KEY_HOME 0x4A -#define HID_KEY_PAGE_UP 0x4B -#define HID_KEY_DELETE 0x4C -#define HID_KEY_END 0x4D -#define HID_KEY_PAGE_DOWN 0x4E -#define HID_KEY_ARROW_RIGHT 0x4F -#define HID_KEY_ARROW_LEFT 0x50 -#define HID_KEY_ARROW_DOWN 0x51 -#define HID_KEY_ARROW_UP 0x52 -#define HID_KEY_NUM_LOCK 0x53 -#define HID_KEY_KEYPAD_DIVIDE 0x54 -#define HID_KEY_KEYPAD_MULTIPLY 0x55 -#define HID_KEY_KEYPAD_SUBTRACT 0x56 -#define HID_KEY_KEYPAD_ADD 0x57 -#define HID_KEY_KEYPAD_ENTER 0x58 -#define HID_KEY_KEYPAD_1 0x59 -#define HID_KEY_KEYPAD_2 0x5A -#define HID_KEY_KEYPAD_3 0x5B -#define HID_KEY_KEYPAD_4 0x5C -#define HID_KEY_KEYPAD_5 0x5D -#define HID_KEY_KEYPAD_6 0x5E -#define HID_KEY_KEYPAD_7 0x5F -#define HID_KEY_KEYPAD_8 0x60 -#define HID_KEY_KEYPAD_9 0x61 -#define HID_KEY_KEYPAD_0 0x62 -#define HID_KEY_KEYPAD_DECIMAL 0x63 -#define HID_KEY_EUROPE_2 0x64 -#define HID_KEY_APPLICATION 0x65 -#define HID_KEY_POWER 0x66 -#define HID_KEY_KEYPAD_EQUAL 0x67 -#define HID_KEY_F13 0x68 -#define HID_KEY_F14 0x69 -#define HID_KEY_F15 0x6A -#define HID_KEY_F16 0x6B -#define HID_KEY_F17 0x6C -#define HID_KEY_F18 0x6D -#define HID_KEY_F19 0x6E -#define HID_KEY_F20 0x6F -#define HID_KEY_F21 0x70 -#define HID_KEY_F22 0x71 -#define HID_KEY_F23 0x72 -#define HID_KEY_F24 0x73 -#define HID_KEY_EXECUTE 0x74 -#define HID_KEY_HELP 0x75 -#define HID_KEY_MENU 0x76 -#define HID_KEY_SELECT 0x77 -#define HID_KEY_STOP 0x78 -#define HID_KEY_AGAIN 0x79 -#define HID_KEY_UNDO 0x7A -#define HID_KEY_CUT 0x7B -#define HID_KEY_COPY 0x7C -#define HID_KEY_PASTE 0x7D -#define HID_KEY_FIND 0x7E -#define HID_KEY_MUTE 0x7F -#define HID_KEY_VOLUME_UP 0x80 -#define HID_KEY_VOLUME_DOWN 0x81 -#define HID_KEY_LOCKING_CAPS_LOCK 0x82 -#define HID_KEY_LOCKING_NUM_LOCK 0x83 -#define HID_KEY_LOCKING_SCROLL_LOCK 0x84 -#define HID_KEY_KEYPAD_COMMA 0x85 -#define HID_KEY_KEYPAD_EQUAL_SIGN 0x86 -#define HID_KEY_KANJI1 0x87 -#define HID_KEY_KANJI2 0x88 -#define HID_KEY_KANJI3 0x89 -#define HID_KEY_KANJI4 0x8A -#define HID_KEY_KANJI5 0x8B -#define HID_KEY_KANJI6 0x8C -#define HID_KEY_KANJI7 0x8D -#define HID_KEY_KANJI8 0x8E -#define HID_KEY_KANJI9 0x8F -#define HID_KEY_LANG1 0x90 -#define HID_KEY_LANG2 0x91 -#define HID_KEY_LANG3 0x92 -#define HID_KEY_LANG4 0x93 -#define HID_KEY_LANG5 0x94 -#define HID_KEY_LANG6 0x95 -#define HID_KEY_LANG7 0x96 -#define HID_KEY_LANG8 0x97 -#define HID_KEY_LANG9 0x98 -#define HID_KEY_ALTERNATE_ERASE 0x99 -#define HID_KEY_SYSREQ_ATTENTION 0x9A -#define HID_KEY_CANCEL 0x9B -#define HID_KEY_CLEAR 0x9C -#define HID_KEY_PRIOR 0x9D -#define HID_KEY_RETURN 0x9E -#define HID_KEY_SEPARATOR 0x9F -#define HID_KEY_OUT 0xA0 -#define HID_KEY_OPER 0xA1 -#define HID_KEY_CLEAR_AGAIN 0xA2 -#define HID_KEY_CRSEL_PROPS 0xA3 -#define HID_KEY_EXSEL 0xA4 +#define HID_KEY_NONE 0x00 +#define HID_KEY_A 0x04 +#define HID_KEY_B 0x05 +#define HID_KEY_C 0x06 +#define HID_KEY_D 0x07 +#define HID_KEY_E 0x08 +#define HID_KEY_F 0x09 +#define HID_KEY_G 0x0A +#define HID_KEY_H 0x0B +#define HID_KEY_I 0x0C +#define HID_KEY_J 0x0D +#define HID_KEY_K 0x0E +#define HID_KEY_L 0x0F +#define HID_KEY_M 0x10 +#define HID_KEY_N 0x11 +#define HID_KEY_O 0x12 +#define HID_KEY_P 0x13 +#define HID_KEY_Q 0x14 +#define HID_KEY_R 0x15 +#define HID_KEY_S 0x16 +#define HID_KEY_T 0x17 +#define HID_KEY_U 0x18 +#define HID_KEY_V 0x19 +#define HID_KEY_W 0x1A +#define HID_KEY_X 0x1B +#define HID_KEY_Y 0x1C +#define HID_KEY_Z 0x1D +#define HID_KEY_1 0x1E +#define HID_KEY_2 0x1F +#define HID_KEY_3 0x20 +#define HID_KEY_4 0x21 +#define HID_KEY_5 0x22 +#define HID_KEY_6 0x23 +#define HID_KEY_7 0x24 +#define HID_KEY_8 0x25 +#define HID_KEY_9 0x26 +#define HID_KEY_0 0x27 +#define HID_KEY_ENTER 0x28 +#define HID_KEY_ESCAPE 0x29 +#define HID_KEY_BACKSPACE 0x2A +#define HID_KEY_TAB 0x2B +#define HID_KEY_SPACE 0x2C +#define HID_KEY_MINUS 0x2D +#define HID_KEY_EQUAL 0x2E +#define HID_KEY_BRACKET_LEFT 0x2F +#define HID_KEY_BRACKET_RIGHT 0x30 +#define HID_KEY_BACKSLASH 0x31 +#define HID_KEY_EUROPE_1 0x32 +#define HID_KEY_SEMICOLON 0x33 +#define HID_KEY_APOSTROPHE 0x34 +#define HID_KEY_GRAVE 0x35 +#define HID_KEY_COMMA 0x36 +#define HID_KEY_PERIOD 0x37 +#define HID_KEY_SLASH 0x38 +#define HID_KEY_CAPS_LOCK 0x39 +#define HID_KEY_F1 0x3A +#define HID_KEY_F2 0x3B +#define HID_KEY_F3 0x3C +#define HID_KEY_F4 0x3D +#define HID_KEY_F5 0x3E +#define HID_KEY_F6 0x3F +#define HID_KEY_F7 0x40 +#define HID_KEY_F8 0x41 +#define HID_KEY_F9 0x42 +#define HID_KEY_F10 0x43 +#define HID_KEY_F11 0x44 +#define HID_KEY_F12 0x45 +#define HID_KEY_PRINT_SCREEN 0x46 +#define HID_KEY_SCROLL_LOCK 0x47 +#define HID_KEY_PAUSE 0x48 +#define HID_KEY_INSERT 0x49 +#define HID_KEY_HOME 0x4A +#define HID_KEY_PAGE_UP 0x4B +#define HID_KEY_DELETE 0x4C +#define HID_KEY_END 0x4D +#define HID_KEY_PAGE_DOWN 0x4E +#define HID_KEY_ARROW_RIGHT 0x4F +#define HID_KEY_ARROW_LEFT 0x50 +#define HID_KEY_ARROW_DOWN 0x51 +#define HID_KEY_ARROW_UP 0x52 +#define HID_KEY_NUM_LOCK 0x53 +#define HID_KEY_KEYPAD_DIVIDE 0x54 +#define HID_KEY_KEYPAD_MULTIPLY 0x55 +#define HID_KEY_KEYPAD_SUBTRACT 0x56 +#define HID_KEY_KEYPAD_ADD 0x57 +#define HID_KEY_KEYPAD_ENTER 0x58 +#define HID_KEY_KEYPAD_1 0x59 +#define HID_KEY_KEYPAD_2 0x5A +#define HID_KEY_KEYPAD_3 0x5B +#define HID_KEY_KEYPAD_4 0x5C +#define HID_KEY_KEYPAD_5 0x5D +#define HID_KEY_KEYPAD_6 0x5E +#define HID_KEY_KEYPAD_7 0x5F +#define HID_KEY_KEYPAD_8 0x60 +#define HID_KEY_KEYPAD_9 0x61 +#define HID_KEY_KEYPAD_0 0x62 +#define HID_KEY_KEYPAD_DECIMAL 0x63 +#define HID_KEY_EUROPE_2 0x64 +#define HID_KEY_APPLICATION 0x65 +#define HID_KEY_POWER 0x66 +#define HID_KEY_KEYPAD_EQUAL 0x67 +#define HID_KEY_F13 0x68 +#define HID_KEY_F14 0x69 +#define HID_KEY_F15 0x6A +#define HID_KEY_F16 0x6B +#define HID_KEY_F17 0x6C +#define HID_KEY_F18 0x6D +#define HID_KEY_F19 0x6E +#define HID_KEY_F20 0x6F +#define HID_KEY_F21 0x70 +#define HID_KEY_F22 0x71 +#define HID_KEY_F23 0x72 +#define HID_KEY_F24 0x73 +#define HID_KEY_EXECUTE 0x74 +#define HID_KEY_HELP 0x75 +#define HID_KEY_MENU 0x76 +#define HID_KEY_SELECT 0x77 +#define HID_KEY_STOP 0x78 +#define HID_KEY_AGAIN 0x79 +#define HID_KEY_UNDO 0x7A +#define HID_KEY_CUT 0x7B +#define HID_KEY_COPY 0x7C +#define HID_KEY_PASTE 0x7D +#define HID_KEY_FIND 0x7E +#define HID_KEY_MUTE 0x7F +#define HID_KEY_VOLUME_UP 0x80 +#define HID_KEY_VOLUME_DOWN 0x81 +#define HID_KEY_LOCKING_CAPS_LOCK 0x82 +#define HID_KEY_LOCKING_NUM_LOCK 0x83 +#define HID_KEY_LOCKING_SCROLL_LOCK 0x84 +#define HID_KEY_KEYPAD_COMMA 0x85 +#define HID_KEY_KEYPAD_EQUAL_SIGN 0x86 +#define HID_KEY_KANJI1 0x87 +#define HID_KEY_KANJI2 0x88 +#define HID_KEY_KANJI3 0x89 +#define HID_KEY_KANJI4 0x8A +#define HID_KEY_KANJI5 0x8B +#define HID_KEY_KANJI6 0x8C +#define HID_KEY_KANJI7 0x8D +#define HID_KEY_KANJI8 0x8E +#define HID_KEY_KANJI9 0x8F +#define HID_KEY_LANG1 0x90 +#define HID_KEY_LANG2 0x91 +#define HID_KEY_LANG3 0x92 +#define HID_KEY_LANG4 0x93 +#define HID_KEY_LANG5 0x94 +#define HID_KEY_LANG6 0x95 +#define HID_KEY_LANG7 0x96 +#define HID_KEY_LANG8 0x97 +#define HID_KEY_LANG9 0x98 +#define HID_KEY_ALTERNATE_ERASE 0x99 +#define HID_KEY_SYSREQ_ATTENTION 0x9A +#define HID_KEY_CANCEL 0x9B +#define HID_KEY_CLEAR 0x9C +#define HID_KEY_PRIOR 0x9D +#define HID_KEY_RETURN 0x9E +#define HID_KEY_SEPARATOR 0x9F +#define HID_KEY_OUT 0xA0 +#define HID_KEY_OPER 0xA1 +#define HID_KEY_CLEAR_AGAIN 0xA2 +#define HID_KEY_CRSEL_PROPS 0xA3 +#define HID_KEY_EXSEL 0xA4 // RESERVED 0xA5-AF -#define HID_KEY_KEYPAD_00 0xB0 -#define HID_KEY_KEYPAD_000 0xB1 -#define HID_KEY_THOUSANDS_SEPARATOR 0xB2 -#define HID_KEY_DECIMAL_SEPARATOR 0xB3 -#define HID_KEY_CURRENCY_UNIT 0xB4 -#define HID_KEY_CURRENCY_SUBUNIT 0xB5 -#define HID_KEY_KEYPAD_LEFT_PARENTHESIS 0xB6 -#define HID_KEY_KEYPAD_RIGHT_PARENTHESIS 0xB7 -#define HID_KEY_KEYPAD_LEFT_BRACE 0xB8 -#define HID_KEY_KEYPAD_RIGHT_BRACE 0xB9 -#define HID_KEY_KEYPAD_TAB 0xBA -#define HID_KEY_KEYPAD_BACKSPACE 0xBB -#define HID_KEY_KEYPAD_A 0xBC -#define HID_KEY_KEYPAD_B 0xBD -#define HID_KEY_KEYPAD_C 0xBE -#define HID_KEY_KEYPAD_D 0xBF -#define HID_KEY_KEYPAD_E 0xC0 -#define HID_KEY_KEYPAD_F 0xC1 -#define HID_KEY_KEYPAD_XOR 0xC2 -#define HID_KEY_KEYPAD_CARET 0xC3 -#define HID_KEY_KEYPAD_PERCENT 0xC4 -#define HID_KEY_KEYPAD_LESS_THAN 0xC5 -#define HID_KEY_KEYPAD_GREATER_THAN 0xC6 -#define HID_KEY_KEYPAD_AMPERSAND 0xC7 -#define HID_KEY_KEYPAD_DOUBLE_AMPERSAND 0xC8 -#define HID_KEY_KEYPAD_VERTICAL_BAR 0xC9 -#define HID_KEY_KEYPAD_DOUBLE_VERTICAL_BAR 0xCA -#define HID_KEY_KEYPAD_COLON 0xCB -#define HID_KEY_KEYPAD_HASH 0xCC -#define HID_KEY_KEYPAD_SPACE 0xCD -#define HID_KEY_KEYPAD_AT 0xCE -#define HID_KEY_KEYPAD_EXCLAMATION 0xCF -#define HID_KEY_KEYPAD_MEMORY_STORE 0xD0 -#define HID_KEY_KEYPAD_MEMORY_RECALL 0xD1 -#define HID_KEY_KEYPAD_MEMORY_CLEAR 0xD2 -#define HID_KEY_KEYPAD_MEMORY_ADD 0xD3 -#define HID_KEY_KEYPAD_MEMORY_SUBTRACT 0xD4 -#define HID_KEY_KEYPAD_MEMORY_MULTIPLY 0xD5 -#define HID_KEY_KEYPAD_MEMORY_DIVIDE 0xD6 -#define HID_KEY_KEYPAD_PLUS_MINUS 0xD7 -#define HID_KEY_KEYPAD_CLEAR 0xD8 -#define HID_KEY_KEYPAD_CLEAR_ENTRY 0xD9 -#define HID_KEY_KEYPAD_BINARY 0xDA -#define HID_KEY_KEYPAD_OCTAL 0xDB -#define HID_KEY_KEYPAD_DECIMAL_2 0xDC -#define HID_KEY_KEYPAD_HEXADECIMAL 0xDD +#define HID_KEY_KEYPAD_00 0xB0 +#define HID_KEY_KEYPAD_000 0xB1 +#define HID_KEY_THOUSANDS_SEPARATOR 0xB2 +#define HID_KEY_DECIMAL_SEPARATOR 0xB3 +#define HID_KEY_CURRENCY_UNIT 0xB4 +#define HID_KEY_CURRENCY_SUBUNIT 0xB5 +#define HID_KEY_KEYPAD_LEFT_PARENTHESIS 0xB6 +#define HID_KEY_KEYPAD_RIGHT_PARENTHESIS 0xB7 +#define HID_KEY_KEYPAD_LEFT_BRACE 0xB8 +#define HID_KEY_KEYPAD_RIGHT_BRACE 0xB9 +#define HID_KEY_KEYPAD_TAB 0xBA +#define HID_KEY_KEYPAD_BACKSPACE 0xBB +#define HID_KEY_KEYPAD_A 0xBC +#define HID_KEY_KEYPAD_B 0xBD +#define HID_KEY_KEYPAD_C 0xBE +#define HID_KEY_KEYPAD_D 0xBF +#define HID_KEY_KEYPAD_E 0xC0 +#define HID_KEY_KEYPAD_F 0xC1 +#define HID_KEY_KEYPAD_XOR 0xC2 +#define HID_KEY_KEYPAD_CARET 0xC3 +#define HID_KEY_KEYPAD_PERCENT 0xC4 +#define HID_KEY_KEYPAD_LESS_THAN 0xC5 +#define HID_KEY_KEYPAD_GREATER_THAN 0xC6 +#define HID_KEY_KEYPAD_AMPERSAND 0xC7 +#define HID_KEY_KEYPAD_DOUBLE_AMPERSAND 0xC8 +#define HID_KEY_KEYPAD_VERTICAL_BAR 0xC9 +#define HID_KEY_KEYPAD_DOUBLE_VERTICAL_BAR 0xCA +#define HID_KEY_KEYPAD_COLON 0xCB +#define HID_KEY_KEYPAD_HASH 0xCC +#define HID_KEY_KEYPAD_SPACE 0xCD +#define HID_KEY_KEYPAD_AT 0xCE +#define HID_KEY_KEYPAD_EXCLAMATION 0xCF +#define HID_KEY_KEYPAD_MEMORY_STORE 0xD0 +#define HID_KEY_KEYPAD_MEMORY_RECALL 0xD1 +#define HID_KEY_KEYPAD_MEMORY_CLEAR 0xD2 +#define HID_KEY_KEYPAD_MEMORY_ADD 0xD3 +#define HID_KEY_KEYPAD_MEMORY_SUBTRACT 0xD4 +#define HID_KEY_KEYPAD_MEMORY_MULTIPLY 0xD5 +#define HID_KEY_KEYPAD_MEMORY_DIVIDE 0xD6 +#define HID_KEY_KEYPAD_PLUS_MINUS 0xD7 +#define HID_KEY_KEYPAD_CLEAR 0xD8 +#define HID_KEY_KEYPAD_CLEAR_ENTRY 0xD9 +#define HID_KEY_KEYPAD_BINARY 0xDA +#define HID_KEY_KEYPAD_OCTAL 0xDB +#define HID_KEY_KEYPAD_DECIMAL_2 0xDC +#define HID_KEY_KEYPAD_HEXADECIMAL 0xDD // RESERVED 0xDE-DF -#define HID_KEY_CONTROL_LEFT 0xE0 -#define HID_KEY_SHIFT_LEFT 0xE1 -#define HID_KEY_ALT_LEFT 0xE2 -#define HID_KEY_GUI_LEFT 0xE3 -#define HID_KEY_CONTROL_RIGHT 0xE4 -#define HID_KEY_SHIFT_RIGHT 0xE5 -#define HID_KEY_ALT_RIGHT 0xE6 -#define HID_KEY_GUI_RIGHT 0xE7 +#define HID_KEY_CONTROL_LEFT 0xE0 +#define HID_KEY_SHIFT_LEFT 0xE1 +#define HID_KEY_ALT_LEFT 0xE2 +#define HID_KEY_GUI_LEFT 0xE3 +#define HID_KEY_CONTROL_RIGHT 0xE4 +#define HID_KEY_SHIFT_RIGHT 0xE5 +#define HID_KEY_ALT_RIGHT 0xE6 +#define HID_KEY_GUI_RIGHT 0xE7 + //--------------------------------------------------------------------+ // REPORT DESCRIPTOR @@ -575,142 +597,146 @@ typedef enum { #define HID_REPORT_DATA_3(data) , U32_TO_U8S_LE(data) #define HID_REPORT_ITEM(data, tag, type, size) \ - (((tag) << 4) | ((type) << 2) | (size)) HID_REPORT_DATA_##size(data) + (((tag) << 4) | ((type) << 2) | (size)) HID_REPORT_DATA_##size(data) // Report Item Types -enum { RI_TYPE_MAIN = 0, RI_TYPE_GLOBAL = 1, RI_TYPE_LOCAL = 2 }; +enum { + RI_TYPE_MAIN = 0, + RI_TYPE_GLOBAL = 1, + RI_TYPE_LOCAL = 2 +}; //------------- Main Items - HID 1.11 section 6.2.2.4 -------------// // Report Item Main group enum { - RI_MAIN_INPUT = 8, - RI_MAIN_OUTPUT = 9, - RI_MAIN_COLLECTION = 10, - RI_MAIN_FEATURE = 11, - RI_MAIN_COLLECTION_END = 12 + RI_MAIN_INPUT = 8, + RI_MAIN_OUTPUT = 9, + RI_MAIN_COLLECTION = 10, + RI_MAIN_FEATURE = 11, + RI_MAIN_COLLECTION_END = 12 }; -#define HID_INPUT(x) HID_REPORT_ITEM(x, RI_MAIN_INPUT, RI_TYPE_MAIN, 1) -#define HID_OUTPUT(x) HID_REPORT_ITEM(x, RI_MAIN_OUTPUT, RI_TYPE_MAIN, 1) -#define HID_COLLECTION(x) HID_REPORT_ITEM(x, RI_MAIN_COLLECTION, RI_TYPE_MAIN, 1) -#define HID_FEATURE(x) HID_REPORT_ITEM(x, RI_MAIN_FEATURE, RI_TYPE_MAIN, 1) -#define HID_COLLECTION_END HID_REPORT_ITEM(x, RI_MAIN_COLLECTION_END, RI_TYPE_MAIN, 0) +#define HID_INPUT(x) HID_REPORT_ITEM(x, RI_MAIN_INPUT , RI_TYPE_MAIN, 1) +#define HID_OUTPUT(x) HID_REPORT_ITEM(x, RI_MAIN_OUTPUT , RI_TYPE_MAIN, 1) +#define HID_COLLECTION(x) HID_REPORT_ITEM(x, RI_MAIN_COLLECTION , RI_TYPE_MAIN, 1) +#define HID_FEATURE(x) HID_REPORT_ITEM(x, RI_MAIN_FEATURE , RI_TYPE_MAIN, 1) +#define HID_COLLECTION_END HID_REPORT_ITEM(x, RI_MAIN_COLLECTION_END, RI_TYPE_MAIN, 0) //------------- Input, Output, Feature - HID 1.11 section 6.2.2.5 -------------// -#define HID_DATA (0 << 0) -#define HID_CONSTANT (1 << 0) +#define HID_DATA (0<<0) +#define HID_CONSTANT (1<<0) -#define HID_ARRAY (0 << 1) -#define HID_VARIABLE (1 << 1) +#define HID_ARRAY (0<<1) +#define HID_VARIABLE (1<<1) -#define HID_ABSOLUTE (0 << 2) -#define HID_RELATIVE (1 << 2) +#define HID_ABSOLUTE (0<<2) +#define HID_RELATIVE (1<<2) -#define HID_WRAP_NO (0 << 3) -#define HID_WRAP (1 << 3) +#define HID_WRAP_NO (0<<3) +#define HID_WRAP (1<<3) -#define HID_LINEAR (0 << 4) -#define HID_NONLINEAR (1 << 4) +#define HID_LINEAR (0<<4) +#define HID_NONLINEAR (1<<4) -#define HID_PREFERRED_STATE (0 << 5) -#define HID_PREFERRED_NO (1 << 5) +#define HID_PREFERRED_STATE (0<<5) +#define HID_PREFERRED_NO (1<<5) -#define HID_NO_NULL_POSITION (0 << 6) -#define HID_NULL_STATE (1 << 6) +#define HID_NO_NULL_POSITION (0<<6) +#define HID_NULL_STATE (1<<6) -#define HID_NON_VOLATILE (0 << 7) -#define HID_VOLATILE (1 << 7) +#define HID_NON_VOLATILE (0<<7) +#define HID_VOLATILE (1<<7) -#define HID_BITFIELD (0 << 8) -#define HID_BUFFERED_BYTES (1 << 8) +#define HID_BITFIELD (0<<8) +#define HID_BUFFERED_BYTES (1<<8) //------------- Collection Item - HID 1.11 section 6.2.2.6 -------------// enum { - HID_COLLECTION_PHYSICAL = 0, - HID_COLLECTION_APPLICATION, - HID_COLLECTION_LOGICAL, - HID_COLLECTION_REPORT, - HID_COLLECTION_NAMED_ARRAY, - HID_COLLECTION_USAGE_SWITCH, - HID_COLLECTION_USAGE_MODIFIER + HID_COLLECTION_PHYSICAL = 0, + HID_COLLECTION_APPLICATION, + HID_COLLECTION_LOGICAL, + HID_COLLECTION_REPORT, + HID_COLLECTION_NAMED_ARRAY, + HID_COLLECTION_USAGE_SWITCH, + HID_COLLECTION_USAGE_MODIFIER }; //------------- Global Items - HID 1.11 section 6.2.2.7 -------------// // Report Item Global group enum { - RI_GLOBAL_USAGE_PAGE = 0, - RI_GLOBAL_LOGICAL_MIN = 1, - RI_GLOBAL_LOGICAL_MAX = 2, - RI_GLOBAL_PHYSICAL_MIN = 3, - RI_GLOBAL_PHYSICAL_MAX = 4, - RI_GLOBAL_UNIT_EXPONENT = 5, - RI_GLOBAL_UNIT = 6, - RI_GLOBAL_REPORT_SIZE = 7, - RI_GLOBAL_REPORT_ID = 8, - RI_GLOBAL_REPORT_COUNT = 9, - RI_GLOBAL_PUSH = 10, - RI_GLOBAL_POP = 11 + RI_GLOBAL_USAGE_PAGE = 0, + RI_GLOBAL_LOGICAL_MIN = 1, + RI_GLOBAL_LOGICAL_MAX = 2, + RI_GLOBAL_PHYSICAL_MIN = 3, + RI_GLOBAL_PHYSICAL_MAX = 4, + RI_GLOBAL_UNIT_EXPONENT = 5, + RI_GLOBAL_UNIT = 6, + RI_GLOBAL_REPORT_SIZE = 7, + RI_GLOBAL_REPORT_ID = 8, + RI_GLOBAL_REPORT_COUNT = 9, + RI_GLOBAL_PUSH = 10, + RI_GLOBAL_POP = 11 }; -#define HID_USAGE_PAGE(x) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, 1) -#define HID_USAGE_PAGE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, n) +#define HID_USAGE_PAGE(x) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, 1) +#define HID_USAGE_PAGE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_USAGE_PAGE, RI_TYPE_GLOBAL, n) -#define HID_LOGICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, 1) -#define HID_LOGICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, n) +#define HID_LOGICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, 1) +#define HID_LOGICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MIN, RI_TYPE_GLOBAL, n) -#define HID_LOGICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, 1) -#define HID_LOGICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, n) +#define HID_LOGICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, 1) +#define HID_LOGICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_LOGICAL_MAX, RI_TYPE_GLOBAL, n) -#define HID_PHYSICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, 1) -#define HID_PHYSICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, n) +#define HID_PHYSICAL_MIN(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, 1) +#define HID_PHYSICAL_MIN_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MIN, RI_TYPE_GLOBAL, n) -#define HID_PHYSICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, 1) -#define HID_PHYSICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, n) +#define HID_PHYSICAL_MAX(x) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, 1) +#define HID_PHYSICAL_MAX_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_PHYSICAL_MAX, RI_TYPE_GLOBAL, n) -#define HID_UNIT_EXPONENT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT_EXPONENT, RI_TYPE_GLOBAL, 1) +#define HID_UNIT_EXPONENT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT_EXPONENT, RI_TYPE_GLOBAL, 1) #define HID_UNIT_EXPONENT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT_EXPONENT, RI_TYPE_GLOBAL, n) -#define HID_UNIT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, 1) -#define HID_UNIT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, n) +#define HID_UNIT(x) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, 1) +#define HID_UNIT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_UNIT, RI_TYPE_GLOBAL, n) -#define HID_REPORT_SIZE(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, 1) -#define HID_REPORT_SIZE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, n) +#define HID_REPORT_SIZE(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, 1) +#define HID_REPORT_SIZE_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_SIZE, RI_TYPE_GLOBAL, n) -#define HID_REPORT_ID(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, 1), -#define HID_REPORT_ID_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, n), +#define HID_REPORT_ID(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, 1), +#define HID_REPORT_ID_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_ID, RI_TYPE_GLOBAL, n), -#define HID_REPORT_COUNT(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, 1) -#define HID_REPORT_COUNT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, n) +#define HID_REPORT_COUNT(x) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, 1) +#define HID_REPORT_COUNT_N(x, n) HID_REPORT_ITEM(x, RI_GLOBAL_REPORT_COUNT, RI_TYPE_GLOBAL, n) -#define HID_PUSH HID_REPORT_ITEM(x, RI_GLOBAL_PUSH, RI_TYPE_GLOBAL, 0) -#define HID_POP HID_REPORT_ITEM(x, RI_GLOBAL_POP, RI_TYPE_GLOBAL, 0) +#define HID_PUSH HID_REPORT_ITEM(x, RI_GLOBAL_PUSH, RI_TYPE_GLOBAL, 0) +#define HID_POP HID_REPORT_ITEM(x, RI_GLOBAL_POP, RI_TYPE_GLOBAL, 0) //------------- LOCAL ITEMS 6.2.2.8 -------------// enum { - RI_LOCAL_USAGE = 0, - RI_LOCAL_USAGE_MIN = 1, - RI_LOCAL_USAGE_MAX = 2, - RI_LOCAL_DESIGNATOR_INDEX = 3, - RI_LOCAL_DESIGNATOR_MIN = 4, - RI_LOCAL_DESIGNATOR_MAX = 5, - // 6 is reserved - RI_LOCAL_STRING_INDEX = 7, - RI_LOCAL_STRING_MIN = 8, - RI_LOCAL_STRING_MAX = 9, - RI_LOCAL_DELIMITER = 10, + RI_LOCAL_USAGE = 0, + RI_LOCAL_USAGE_MIN = 1, + RI_LOCAL_USAGE_MAX = 2, + RI_LOCAL_DESIGNATOR_INDEX = 3, + RI_LOCAL_DESIGNATOR_MIN = 4, + RI_LOCAL_DESIGNATOR_MAX = 5, + // 6 is reserved + RI_LOCAL_STRING_INDEX = 7, + RI_LOCAL_STRING_MIN = 8, + RI_LOCAL_STRING_MAX = 9, + RI_LOCAL_DELIMITER = 10, }; -#define HID_USAGE(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, 1) -#define HID_USAGE_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, n) +#define HID_USAGE(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, 1) +#define HID_USAGE_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE, RI_TYPE_LOCAL, n) -#define HID_USAGE_MIN(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, 1) -#define HID_USAGE_MIN_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, n) +#define HID_USAGE_MIN(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, 1) +#define HID_USAGE_MIN_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MIN, RI_TYPE_LOCAL, n) -#define HID_USAGE_MAX(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, 1) -#define HID_USAGE_MAX_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, n) +#define HID_USAGE_MAX(x) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, 1) +#define HID_USAGE_MAX_N(x, n) HID_REPORT_ITEM(x, RI_LOCAL_USAGE_MAX, RI_TYPE_LOCAL, n) //--------------------------------------------------------------------+ // Usage Table @@ -718,208 +744,209 @@ enum { /// HID Usage Table - Table 1: Usage Page Summary enum { - HID_USAGE_PAGE_DESKTOP = 0x01, - HID_USAGE_PAGE_SIMULATE = 0x02, - HID_USAGE_PAGE_VIRTUAL_REALITY = 0x03, - HID_USAGE_PAGE_SPORT = 0x04, - HID_USAGE_PAGE_GAME = 0x05, - HID_USAGE_PAGE_GENERIC_DEVICE = 0x06, - HID_USAGE_PAGE_KEYBOARD = 0x07, - HID_USAGE_PAGE_LED = 0x08, - HID_USAGE_PAGE_BUTTON = 0x09, - HID_USAGE_PAGE_ORDINAL = 0x0a, - HID_USAGE_PAGE_TELEPHONY = 0x0b, - HID_USAGE_PAGE_CONSUMER = 0x0c, - HID_USAGE_PAGE_DIGITIZER = 0x0d, - HID_USAGE_PAGE_PID = 0x0f, - HID_USAGE_PAGE_UNICODE = 0x10, - HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14, - HID_USAGE_PAGE_MEDICAL = 0x40, - HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59, - HID_USAGE_PAGE_MONITOR = 0x80, // 0x80 - 0x83 - HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87 - HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c, - HID_USAGE_PAGE_SCALE = 0x8d, - HID_USAGE_PAGE_MSR = 0x8e, - HID_USAGE_PAGE_CAMERA = 0x90, - HID_USAGE_PAGE_ARCADE = 0x91, - HID_USAGE_PAGE_FIDO = 0xF1D0, // FIDO alliance HID usage page - HID_USAGE_PAGE_VENDOR = 0xFF00 // 0xFF00 - 0xFFFF + HID_USAGE_PAGE_DESKTOP = 0x01, + HID_USAGE_PAGE_SIMULATE = 0x02, + HID_USAGE_PAGE_VIRTUAL_REALITY = 0x03, + HID_USAGE_PAGE_SPORT = 0x04, + HID_USAGE_PAGE_GAME = 0x05, + HID_USAGE_PAGE_GENERIC_DEVICE = 0x06, + HID_USAGE_PAGE_KEYBOARD = 0x07, + HID_USAGE_PAGE_LED = 0x08, + HID_USAGE_PAGE_BUTTON = 0x09, + HID_USAGE_PAGE_ORDINAL = 0x0a, + HID_USAGE_PAGE_TELEPHONY = 0x0b, + HID_USAGE_PAGE_CONSUMER = 0x0c, + HID_USAGE_PAGE_DIGITIZER = 0x0d, + HID_USAGE_PAGE_PID = 0x0f, + HID_USAGE_PAGE_UNICODE = 0x10, + HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14, + HID_USAGE_PAGE_MEDICAL = 0x40, + HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59, + HID_USAGE_PAGE_MONITOR = 0x80, // 0x80 - 0x83 + HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87 + HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c, + HID_USAGE_PAGE_SCALE = 0x8d, + HID_USAGE_PAGE_MSR = 0x8e, + HID_USAGE_PAGE_CAMERA = 0x90, + HID_USAGE_PAGE_ARCADE = 0x91, + HID_USAGE_PAGE_FIDO = 0xF1D0, // FIDO alliance HID usage page + HID_USAGE_PAGE_VENDOR = 0xFF00 // 0xFF00 - 0xFFFF }; /// HID Usage Table - Table 6: Generic Desktop Page enum { - HID_USAGE_DESKTOP_POINTER = 0x01, - HID_USAGE_DESKTOP_MOUSE = 0x02, - HID_USAGE_DESKTOP_JOYSTICK = 0x04, - HID_USAGE_DESKTOP_GAMEPAD = 0x05, - HID_USAGE_DESKTOP_KEYBOARD = 0x06, - HID_USAGE_DESKTOP_KEYPAD = 0x07, - HID_USAGE_DESKTOP_MULTI_AXIS_CONTROLLER = 0x08, - HID_USAGE_DESKTOP_TABLET_PC_SYSTEM = 0x09, - HID_USAGE_DESKTOP_X = 0x30, - HID_USAGE_DESKTOP_Y = 0x31, - HID_USAGE_DESKTOP_Z = 0x32, - HID_USAGE_DESKTOP_RX = 0x33, - HID_USAGE_DESKTOP_RY = 0x34, - HID_USAGE_DESKTOP_RZ = 0x35, - HID_USAGE_DESKTOP_SLIDER = 0x36, - HID_USAGE_DESKTOP_DIAL = 0x37, - HID_USAGE_DESKTOP_WHEEL = 0x38, - HID_USAGE_DESKTOP_HAT_SWITCH = 0x39, - HID_USAGE_DESKTOP_COUNTED_BUFFER = 0x3a, - HID_USAGE_DESKTOP_BYTE_COUNT = 0x3b, - HID_USAGE_DESKTOP_MOTION_WAKEUP = 0x3c, - HID_USAGE_DESKTOP_START = 0x3d, - HID_USAGE_DESKTOP_SELECT = 0x3e, - HID_USAGE_DESKTOP_VX = 0x40, - HID_USAGE_DESKTOP_VY = 0x41, - HID_USAGE_DESKTOP_VZ = 0x42, - HID_USAGE_DESKTOP_VBRX = 0x43, - HID_USAGE_DESKTOP_VBRY = 0x44, - HID_USAGE_DESKTOP_VBRZ = 0x45, - HID_USAGE_DESKTOP_VNO = 0x46, - HID_USAGE_DESKTOP_FEATURE_NOTIFICATION = 0x47, - HID_USAGE_DESKTOP_RESOLUTION_MULTIPLIER = 0x48, - HID_USAGE_DESKTOP_SYSTEM_CONTROL = 0x80, - HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN = 0x81, - HID_USAGE_DESKTOP_SYSTEM_SLEEP = 0x82, - HID_USAGE_DESKTOP_SYSTEM_WAKE_UP = 0x83, - HID_USAGE_DESKTOP_SYSTEM_CONTEXT_MENU = 0x84, - HID_USAGE_DESKTOP_SYSTEM_MAIN_MENU = 0x85, - HID_USAGE_DESKTOP_SYSTEM_APP_MENU = 0x86, - HID_USAGE_DESKTOP_SYSTEM_MENU_HELP = 0x87, - HID_USAGE_DESKTOP_SYSTEM_MENU_EXIT = 0x88, - HID_USAGE_DESKTOP_SYSTEM_MENU_SELECT = 0x89, - HID_USAGE_DESKTOP_SYSTEM_MENU_RIGHT = 0x8A, - HID_USAGE_DESKTOP_SYSTEM_MENU_LEFT = 0x8B, - HID_USAGE_DESKTOP_SYSTEM_MENU_UP = 0x8C, - HID_USAGE_DESKTOP_SYSTEM_MENU_DOWN = 0x8D, - HID_USAGE_DESKTOP_SYSTEM_COLD_RESTART = 0x8E, - HID_USAGE_DESKTOP_SYSTEM_WARM_RESTART = 0x8F, - HID_USAGE_DESKTOP_DPAD_UP = 0x90, - HID_USAGE_DESKTOP_DPAD_DOWN = 0x91, - HID_USAGE_DESKTOP_DPAD_RIGHT = 0x92, - HID_USAGE_DESKTOP_DPAD_LEFT = 0x93, - HID_USAGE_DESKTOP_SYSTEM_DOCK = 0xA0, - HID_USAGE_DESKTOP_SYSTEM_UNDOCK = 0xA1, - HID_USAGE_DESKTOP_SYSTEM_SETUP = 0xA2, - HID_USAGE_DESKTOP_SYSTEM_BREAK = 0xA3, - HID_USAGE_DESKTOP_SYSTEM_DEBUGGER_BREAK = 0xA4, - HID_USAGE_DESKTOP_APPLICATION_BREAK = 0xA5, - HID_USAGE_DESKTOP_APPLICATION_DEBUGGER_BREAK = 0xA6, - HID_USAGE_DESKTOP_SYSTEM_SPEAKER_MUTE = 0xA7, - HID_USAGE_DESKTOP_SYSTEM_HIBERNATE = 0xA8, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INVERT = 0xB0, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INTERNAL = 0xB1, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_EXTERNAL = 0xB2, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_BOTH = 0xB3, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_DUAL = 0xB4, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_TOGGLE_INT_EXT = 0xB5, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_SWAP_PRIMARY_SECONDARY = 0xB6, - HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7 + HID_USAGE_DESKTOP_POINTER = 0x01, + HID_USAGE_DESKTOP_MOUSE = 0x02, + HID_USAGE_DESKTOP_JOYSTICK = 0x04, + HID_USAGE_DESKTOP_GAMEPAD = 0x05, + HID_USAGE_DESKTOP_KEYBOARD = 0x06, + HID_USAGE_DESKTOP_KEYPAD = 0x07, + HID_USAGE_DESKTOP_MULTI_AXIS_CONTROLLER = 0x08, + HID_USAGE_DESKTOP_TABLET_PC_SYSTEM = 0x09, + HID_USAGE_DESKTOP_X = 0x30, + HID_USAGE_DESKTOP_Y = 0x31, + HID_USAGE_DESKTOP_Z = 0x32, + HID_USAGE_DESKTOP_RX = 0x33, + HID_USAGE_DESKTOP_RY = 0x34, + HID_USAGE_DESKTOP_RZ = 0x35, + HID_USAGE_DESKTOP_SLIDER = 0x36, + HID_USAGE_DESKTOP_DIAL = 0x37, + HID_USAGE_DESKTOP_WHEEL = 0x38, + HID_USAGE_DESKTOP_HAT_SWITCH = 0x39, + HID_USAGE_DESKTOP_COUNTED_BUFFER = 0x3a, + HID_USAGE_DESKTOP_BYTE_COUNT = 0x3b, + HID_USAGE_DESKTOP_MOTION_WAKEUP = 0x3c, + HID_USAGE_DESKTOP_START = 0x3d, + HID_USAGE_DESKTOP_SELECT = 0x3e, + HID_USAGE_DESKTOP_VX = 0x40, + HID_USAGE_DESKTOP_VY = 0x41, + HID_USAGE_DESKTOP_VZ = 0x42, + HID_USAGE_DESKTOP_VBRX = 0x43, + HID_USAGE_DESKTOP_VBRY = 0x44, + HID_USAGE_DESKTOP_VBRZ = 0x45, + HID_USAGE_DESKTOP_VNO = 0x46, + HID_USAGE_DESKTOP_FEATURE_NOTIFICATION = 0x47, + HID_USAGE_DESKTOP_RESOLUTION_MULTIPLIER = 0x48, + HID_USAGE_DESKTOP_SYSTEM_CONTROL = 0x80, + HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN = 0x81, + HID_USAGE_DESKTOP_SYSTEM_SLEEP = 0x82, + HID_USAGE_DESKTOP_SYSTEM_WAKE_UP = 0x83, + HID_USAGE_DESKTOP_SYSTEM_CONTEXT_MENU = 0x84, + HID_USAGE_DESKTOP_SYSTEM_MAIN_MENU = 0x85, + HID_USAGE_DESKTOP_SYSTEM_APP_MENU = 0x86, + HID_USAGE_DESKTOP_SYSTEM_MENU_HELP = 0x87, + HID_USAGE_DESKTOP_SYSTEM_MENU_EXIT = 0x88, + HID_USAGE_DESKTOP_SYSTEM_MENU_SELECT = 0x89, + HID_USAGE_DESKTOP_SYSTEM_MENU_RIGHT = 0x8A, + HID_USAGE_DESKTOP_SYSTEM_MENU_LEFT = 0x8B, + HID_USAGE_DESKTOP_SYSTEM_MENU_UP = 0x8C, + HID_USAGE_DESKTOP_SYSTEM_MENU_DOWN = 0x8D, + HID_USAGE_DESKTOP_SYSTEM_COLD_RESTART = 0x8E, + HID_USAGE_DESKTOP_SYSTEM_WARM_RESTART = 0x8F, + HID_USAGE_DESKTOP_DPAD_UP = 0x90, + HID_USAGE_DESKTOP_DPAD_DOWN = 0x91, + HID_USAGE_DESKTOP_DPAD_RIGHT = 0x92, + HID_USAGE_DESKTOP_DPAD_LEFT = 0x93, + HID_USAGE_DESKTOP_SYSTEM_DOCK = 0xA0, + HID_USAGE_DESKTOP_SYSTEM_UNDOCK = 0xA1, + HID_USAGE_DESKTOP_SYSTEM_SETUP = 0xA2, + HID_USAGE_DESKTOP_SYSTEM_BREAK = 0xA3, + HID_USAGE_DESKTOP_SYSTEM_DEBUGGER_BREAK = 0xA4, + HID_USAGE_DESKTOP_APPLICATION_BREAK = 0xA5, + HID_USAGE_DESKTOP_APPLICATION_DEBUGGER_BREAK = 0xA6, + HID_USAGE_DESKTOP_SYSTEM_SPEAKER_MUTE = 0xA7, + HID_USAGE_DESKTOP_SYSTEM_HIBERNATE = 0xA8, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INVERT = 0xB0, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INTERNAL = 0xB1, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_EXTERNAL = 0xB2, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_BOTH = 0xB3, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_DUAL = 0xB4, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_TOGGLE_INT_EXT = 0xB5, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_SWAP_PRIMARY_SECONDARY = 0xB6, + HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7 }; + /// HID Usage Table: Consumer Page (0x0C) /// Only contains controls that supported by Windows (whole list is too long) enum { - // Generic Control - HID_USAGE_CONSUMER_CONTROL = 0x0001, - - // Power Control - HID_USAGE_CONSUMER_POWER = 0x0030, - HID_USAGE_CONSUMER_RESET = 0x0031, - HID_USAGE_CONSUMER_SLEEP = 0x0032, - - // Screen Brightness - HID_USAGE_CONSUMER_BRIGHTNESS_INCREMENT = 0x006F, - HID_USAGE_CONSUMER_BRIGHTNESS_DECREMENT = 0x0070, - - // These HID usages operate only on mobile systems (battery powered) and - // require Windows 8 (build 8302 or greater). - HID_USAGE_CONSUMER_WIRELESS_RADIO_CONTROLS = 0x000C, - HID_USAGE_CONSUMER_WIRELESS_RADIO_BUTTONS = 0x00C6, - HID_USAGE_CONSUMER_WIRELESS_RADIO_LED = 0x00C7, - HID_USAGE_CONSUMER_WIRELESS_RADIO_SLIDER_SWITCH = 0x00C8, - - // Media Control - HID_USAGE_CONSUMER_PLAY_PAUSE = 0x00CD, - HID_USAGE_CONSUMER_SCAN_NEXT = 0x00B5, - HID_USAGE_CONSUMER_SCAN_PREVIOUS = 0x00B6, - HID_USAGE_CONSUMER_STOP = 0x00B7, - HID_USAGE_CONSUMER_VOLUME = 0x00E0, - HID_USAGE_CONSUMER_MUTE = 0x00E2, - HID_USAGE_CONSUMER_BASS = 0x00E3, - HID_USAGE_CONSUMER_TREBLE = 0x00E4, - HID_USAGE_CONSUMER_BASS_BOOST = 0x00E5, - HID_USAGE_CONSUMER_VOLUME_INCREMENT = 0x00E9, - HID_USAGE_CONSUMER_VOLUME_DECREMENT = 0x00EA, - HID_USAGE_CONSUMER_BASS_INCREMENT = 0x0152, - HID_USAGE_CONSUMER_BASS_DECREMENT = 0x0153, - HID_USAGE_CONSUMER_TREBLE_INCREMENT = 0x0154, - HID_USAGE_CONSUMER_TREBLE_DECREMENT = 0x0155, - - // Application Launcher - HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION = 0x0183, - HID_USAGE_CONSUMER_AL_EMAIL_READER = 0x018A, - HID_USAGE_CONSUMER_AL_CALCULATOR = 0x0192, - HID_USAGE_CONSUMER_AL_LOCAL_BROWSER = 0x0194, - - // Browser/Explorer Specific - HID_USAGE_CONSUMER_AC_SEARCH = 0x0221, - HID_USAGE_CONSUMER_AC_HOME = 0x0223, - HID_USAGE_CONSUMER_AC_BACK = 0x0224, - HID_USAGE_CONSUMER_AC_FORWARD = 0x0225, - HID_USAGE_CONSUMER_AC_STOP = 0x0226, - HID_USAGE_CONSUMER_AC_REFRESH = 0x0227, - HID_USAGE_CONSUMER_AC_BOOKMARKS = 0x022A, - - // Mouse Horizontal scroll - HID_USAGE_CONSUMER_AC_PAN = 0x0238, + // Generic Control + HID_USAGE_CONSUMER_CONTROL = 0x0001, + + // Power Control + HID_USAGE_CONSUMER_POWER = 0x0030, + HID_USAGE_CONSUMER_RESET = 0x0031, + HID_USAGE_CONSUMER_SLEEP = 0x0032, + + // Screen Brightness + HID_USAGE_CONSUMER_BRIGHTNESS_INCREMENT = 0x006F, + HID_USAGE_CONSUMER_BRIGHTNESS_DECREMENT = 0x0070, + + // These HID usages operate only on mobile systems (battery powered) and + // require Windows 8 (build 8302 or greater). + HID_USAGE_CONSUMER_WIRELESS_RADIO_CONTROLS = 0x000C, + HID_USAGE_CONSUMER_WIRELESS_RADIO_BUTTONS = 0x00C6, + HID_USAGE_CONSUMER_WIRELESS_RADIO_LED = 0x00C7, + HID_USAGE_CONSUMER_WIRELESS_RADIO_SLIDER_SWITCH = 0x00C8, + + // Media Control + HID_USAGE_CONSUMER_PLAY_PAUSE = 0x00CD, + HID_USAGE_CONSUMER_SCAN_NEXT = 0x00B5, + HID_USAGE_CONSUMER_SCAN_PREVIOUS = 0x00B6, + HID_USAGE_CONSUMER_STOP = 0x00B7, + HID_USAGE_CONSUMER_VOLUME = 0x00E0, + HID_USAGE_CONSUMER_MUTE = 0x00E2, + HID_USAGE_CONSUMER_BASS = 0x00E3, + HID_USAGE_CONSUMER_TREBLE = 0x00E4, + HID_USAGE_CONSUMER_BASS_BOOST = 0x00E5, + HID_USAGE_CONSUMER_VOLUME_INCREMENT = 0x00E9, + HID_USAGE_CONSUMER_VOLUME_DECREMENT = 0x00EA, + HID_USAGE_CONSUMER_BASS_INCREMENT = 0x0152, + HID_USAGE_CONSUMER_BASS_DECREMENT = 0x0153, + HID_USAGE_CONSUMER_TREBLE_INCREMENT = 0x0154, + HID_USAGE_CONSUMER_TREBLE_DECREMENT = 0x0155, + + // Application Launcher + HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION = 0x0183, + HID_USAGE_CONSUMER_AL_EMAIL_READER = 0x018A, + HID_USAGE_CONSUMER_AL_CALCULATOR = 0x0192, + HID_USAGE_CONSUMER_AL_LOCAL_BROWSER = 0x0194, + + // Browser/Explorer Specific + HID_USAGE_CONSUMER_AC_SEARCH = 0x0221, + HID_USAGE_CONSUMER_AC_HOME = 0x0223, + HID_USAGE_CONSUMER_AC_BACK = 0x0224, + HID_USAGE_CONSUMER_AC_FORWARD = 0x0225, + HID_USAGE_CONSUMER_AC_STOP = 0x0226, + HID_USAGE_CONSUMER_AC_REFRESH = 0x0227, + HID_USAGE_CONSUMER_AC_BOOKMARKS = 0x022A, + + // Mouse Horizontal scroll + HID_USAGE_CONSUMER_AC_PAN = 0x0238, }; /// HID Usage Table - Lighting And Illumination Page (0x59) enum { - HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01, - HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02, - HID_USAGE_LIGHTING_LAMP_COUNT = 0x03, - HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04, - HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05, - HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06, - HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07, - HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08, - HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20, - HID_USAGE_LIGHTING_LAMP_ID = 0x21, - HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22, - HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23, - HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24, - HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25, - HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26, - HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27, - HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28, - HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29, - HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A, - HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B, - HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C, - HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D, - HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50, - HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51, - HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52, - HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53, - HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54, - HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55, - HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60, - HID_USAGE_LIGHTING_LAMP_ID_START = 0x61, - HID_USAGE_LIGHTING_LAMP_ID_END = 0x62, - HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70, - HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71, + HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01, + HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02, + HID_USAGE_LIGHTING_LAMP_COUNT = 0x03, + HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04, + HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05, + HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06, + HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07, + HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08, + HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20, + HID_USAGE_LIGHTING_LAMP_ID = 0x21, + HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22, + HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23, + HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24, + HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25, + HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26, + HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27, + HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28, + HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29, + HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A, + HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B, + HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C, + HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D, + HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50, + HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51, + HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52, + HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53, + HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54, + HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55, + HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60, + HID_USAGE_LIGHTING_LAMP_ID_START = 0x61, + HID_USAGE_LIGHTING_LAMP_ID_END = 0x62, + HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70, + HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71, }; /// HID Usage Table: FIDO Alliance Page (0xF1D0) enum { - HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection - HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report - HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report + HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection + HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report + HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report }; /*-------------------------------------------------------------------- @@ -938,141 +965,138 @@ enum { * tud_hid_keyboard_report(report_id, modifier, keycode); * *--------------------------------------------------------------------*/ -#define HID_ASCII_TO_KEYCODE \ - { 0, 0 }, /* 0x00 Null */ \ - { 0, 0 }, /* 0x01 */ \ - { 0, 0 }, /* 0x02 */ \ - { 0, 0 }, /* 0x03 */ \ - { 0, 0 }, /* 0x04 */ \ - { 0, 0 }, /* 0x05 */ \ - { 0, 0 }, /* 0x06 */ \ - { 0, 0 }, /* 0x07 */ \ - { 0, HID_KEY_BACKSPACE }, /* 0x08 Backspace */ \ - { 0, HID_KEY_TAB }, /* 0x09 Tab */ \ - { 0, HID_KEY_ENTER }, /* 0x0A Line Feed */ \ - { 0, 0 }, /* 0x0B */ \ - { 0, 0 }, /* 0x0C */ \ - { 0, HID_KEY_ENTER }, /* 0x0D CR */ \ - { 0, 0 }, /* 0x0E */ \ - { 0, 0 }, /* 0x0F */ \ - { 0, 0 }, /* 0x10 */ \ - { 0, 0 }, /* 0x11 */ \ - { 0, 0 }, /* 0x12 */ \ - { 0, 0 }, /* 0x13 */ \ - { 0, 0 }, /* 0x14 */ \ - { 0, 0 }, /* 0x15 */ \ - { 0, 0 }, /* 0x16 */ \ - { 0, 0 }, /* 0x17 */ \ - { 0, 0 }, /* 0x18 */ \ - { 0, 0 }, /* 0x19 */ \ - { 0, 0 }, /* 0x1A */ \ - { 0, HID_KEY_ESCAPE }, /* 0x1B Escape */ \ - { 0, 0 }, /* 0x1C */ \ - { 0, 0 }, /* 0x1D */ \ - { 0, 0 }, /* 0x1E */ \ - { 0, 0 }, /* 0x1F */ \ - \ - { 0, HID_KEY_SPACE }, /* 0x20 */ \ - { 1, HID_KEY_1 }, /* 0x21 ! */ \ - { 1, HID_KEY_APOSTROPHE }, /* 0x22 " */ \ - { 1, HID_KEY_3 }, /* 0x23 # */ \ - { 1, HID_KEY_4 }, /* 0x24 $ */ \ - { 1, HID_KEY_5 }, /* 0x25 % */ \ - { 1, HID_KEY_7 }, /* 0x26 & */ \ - { 0, HID_KEY_APOSTROPHE }, /* 0x27 ' */ \ - { 1, HID_KEY_9 }, /* 0x28 ( */ \ - { 1, HID_KEY_0 }, /* 0x29 ) */ \ - { 1, HID_KEY_8 }, /* 0x2A * */ \ - { 1, HID_KEY_EQUAL }, /* 0x2B + */ \ - { 0, HID_KEY_COMMA }, /* 0x2C , */ \ - { 0, HID_KEY_MINUS }, /* 0x2D - */ \ - { 0, HID_KEY_PERIOD }, /* 0x2E . */ \ - { 0, HID_KEY_SLASH }, /* 0x2F / */ \ - { 0, HID_KEY_0 }, /* 0x30 0 */ \ - { 0, HID_KEY_1 }, /* 0x31 1 */ \ - { 0, HID_KEY_2 }, /* 0x32 2 */ \ - { 0, HID_KEY_3 }, /* 0x33 3 */ \ - { 0, HID_KEY_4 }, /* 0x34 4 */ \ - { 0, HID_KEY_5 }, /* 0x35 5 */ \ - { 0, HID_KEY_6 }, /* 0x36 6 */ \ - { 0, HID_KEY_7 }, /* 0x37 7 */ \ - { 0, HID_KEY_8 }, /* 0x38 8 */ \ - { 0, HID_KEY_9 }, /* 0x39 9 */ \ - { 1, HID_KEY_SEMICOLON }, /* 0x3A : */ \ - { 0, HID_KEY_SEMICOLON }, /* 0x3B{} - */ \ - { 1, HID_KEY_COMMA }, /* 0x3C < */ \ - { 0, HID_KEY_EQUAL }, /* 0x3D = */ \ - { 1, HID_KEY_PERIOD }, /* 0x3E > */ \ - { 1, HID_KEY_SLASH }, /* 0x3F ? */ \ - \ - { 1, HID_KEY_2 }, /* 0x40 @ */ \ - { 1, HID_KEY_A }, /* 0x41 A */ \ - { 1, HID_KEY_B }, /* 0x42 B */ \ - { 1, HID_KEY_C }, /* 0x43 C */ \ - { 1, HID_KEY_D }, /* 0x44 D */ \ - { 1, HID_KEY_E }, /* 0x45 E */ \ - { 1, HID_KEY_F }, /* 0x46 F */ \ - { 1, HID_KEY_G }, /* 0x47 G */ \ - { 1, HID_KEY_H }, /* 0x48 H */ \ - { 1, HID_KEY_I }, /* 0x49 I */ \ - { 1, HID_KEY_J }, /* 0x4A J */ \ - { 1, HID_KEY_K }, /* 0x4B K */ \ - { 1, HID_KEY_L }, /* 0x4C L */ \ - { 1, HID_KEY_M }, /* 0x4D M */ \ - { 1, HID_KEY_N }, /* 0x4E N */ \ - { 1, HID_KEY_O }, /* 0x4F O */ \ - { 1, HID_KEY_P }, /* 0x50 P */ \ - { 1, HID_KEY_Q }, /* 0x51 Q */ \ - { 1, HID_KEY_R }, /* 0x52 R */ \ - { 1, HID_KEY_S }, /* 0x53 S */ \ - { 1, HID_KEY_T }, /* 0x55 T */ \ - { 1, HID_KEY_U }, /* 0x55 U */ \ - { 1, HID_KEY_V }, /* 0x56 V */ \ - { 1, HID_KEY_W }, /* 0x57 W */ \ - { 1, HID_KEY_X }, /* 0x58 X */ \ - { 1, HID_KEY_Y }, /* 0x59 Y */ \ - { 1, HID_KEY_Z }, /* 0x5A Z */ \ - { 0, HID_KEY_BRACKET_LEFT }, /* 0x5B [ */ \ - { 0, HID_KEY_BACKSLASH }, /* 0x5C '\' */ \ - { 0, HID_KEY_BRACKET_RIGHT }, /* 0x5D ] */ \ - { 1, HID_KEY_6 }, /* 0x5E ^ */ \ - { 1, HID_KEY_MINUS }, /* 0x5F _ */ \ - \ - { 0, HID_KEY_GRAVE }, /* 0x60 ` */ \ - { 0, HID_KEY_A }, /* 0x61 a */ \ - { 0, HID_KEY_B }, /* 0x62 b */ \ - { 0, HID_KEY_C }, /* 0x63 c */ \ - { 0, HID_KEY_D }, /* 0x66 d */ \ - { 0, HID_KEY_E }, /* 0x65 e */ \ - { 0, HID_KEY_F }, /* 0x66 f */ \ - { 0, HID_KEY_G }, /* 0x67 g */ \ - { 0, HID_KEY_H }, /* 0x68 h */ \ - { 0, HID_KEY_I }, /* 0x69 i */ \ - { 0, HID_KEY_J }, /* 0x6A j */ \ - { 0, HID_KEY_K }, /* 0x6B k */ \ - { 0, HID_KEY_L }, /* 0x6C l */ \ - { 0, HID_KEY_M }, /* 0x6D m */ \ - { 0, HID_KEY_N }, /* 0x6E n */ \ - { 0, HID_KEY_O }, /* 0x6F o */ \ - { 0, HID_KEY_P }, /* 0x70 p */ \ - { 0, HID_KEY_Q }, /* 0x71 q */ \ - { 0, HID_KEY_R }, /* 0x72 r */ \ - { 0, HID_KEY_S }, /* 0x73 s */ \ - { 0, HID_KEY_T }, /* 0x75 t */ \ - { 0, HID_KEY_U }, /* 0x75 u */ \ - { 0, HID_KEY_V }, /* 0x76 v */ \ - { 0, HID_KEY_W }, /* 0x77 w */ \ - { 0, HID_KEY_X }, /* 0x78 x */ \ - { 0, HID_KEY_Y }, /* 0x79 y */ \ - { 0, HID_KEY_Z }, /* 0x7A z */ \ - { 1, HID_KEY_BRACKET_LEFT }, /* 0x7B { */ \ - { 1, HID_KEY_BACKSLASH }, /* 0x7C | */ \ - { 1, HID_KEY_BRACKET_RIGHT }, /* 0x7D } */ \ - { 1, HID_KEY_GRAVE }, /* 0x7E ~ */ \ - { \ - 0, HID_KEY_DELETE \ - } /* 0x7F Delete */ +#define HID_ASCII_TO_KEYCODE \ + {0, 0 }, /* 0x00 Null */ \ + {0, 0 }, /* 0x01 */ \ + {0, 0 }, /* 0x02 */ \ + {0, 0 }, /* 0x03 */ \ + {0, 0 }, /* 0x04 */ \ + {0, 0 }, /* 0x05 */ \ + {0, 0 }, /* 0x06 */ \ + {0, 0 }, /* 0x07 */ \ + {0, HID_KEY_BACKSPACE }, /* 0x08 Backspace */ \ + {0, HID_KEY_TAB }, /* 0x09 Tab */ \ + {0, HID_KEY_ENTER }, /* 0x0A Line Feed */ \ + {0, 0 }, /* 0x0B */ \ + {0, 0 }, /* 0x0C */ \ + {0, HID_KEY_ENTER }, /* 0x0D CR */ \ + {0, 0 }, /* 0x0E */ \ + {0, 0 }, /* 0x0F */ \ + {0, 0 }, /* 0x10 */ \ + {0, 0 }, /* 0x11 */ \ + {0, 0 }, /* 0x12 */ \ + {0, 0 }, /* 0x13 */ \ + {0, 0 }, /* 0x14 */ \ + {0, 0 }, /* 0x15 */ \ + {0, 0 }, /* 0x16 */ \ + {0, 0 }, /* 0x17 */ \ + {0, 0 }, /* 0x18 */ \ + {0, 0 }, /* 0x19 */ \ + {0, 0 }, /* 0x1A */ \ + {0, HID_KEY_ESCAPE }, /* 0x1B Escape */ \ + {0, 0 }, /* 0x1C */ \ + {0, 0 }, /* 0x1D */ \ + {0, 0 }, /* 0x1E */ \ + {0, 0 }, /* 0x1F */ \ + \ + {0, HID_KEY_SPACE }, /* 0x20 */ \ + {1, HID_KEY_1 }, /* 0x21 ! */ \ + {1, HID_KEY_APOSTROPHE }, /* 0x22 " */ \ + {1, HID_KEY_3 }, /* 0x23 # */ \ + {1, HID_KEY_4 }, /* 0x24 $ */ \ + {1, HID_KEY_5 }, /* 0x25 % */ \ + {1, HID_KEY_7 }, /* 0x26 & */ \ + {0, HID_KEY_APOSTROPHE }, /* 0x27 ' */ \ + {1, HID_KEY_9 }, /* 0x28 ( */ \ + {1, HID_KEY_0 }, /* 0x29 ) */ \ + {1, HID_KEY_8 }, /* 0x2A * */ \ + {1, HID_KEY_EQUAL }, /* 0x2B + */ \ + {0, HID_KEY_COMMA }, /* 0x2C , */ \ + {0, HID_KEY_MINUS }, /* 0x2D - */ \ + {0, HID_KEY_PERIOD }, /* 0x2E . */ \ + {0, HID_KEY_SLASH }, /* 0x2F / */ \ + {0, HID_KEY_0 }, /* 0x30 0 */ \ + {0, HID_KEY_1 }, /* 0x31 1 */ \ + {0, HID_KEY_2 }, /* 0x32 2 */ \ + {0, HID_KEY_3 }, /* 0x33 3 */ \ + {0, HID_KEY_4 }, /* 0x34 4 */ \ + {0, HID_KEY_5 }, /* 0x35 5 */ \ + {0, HID_KEY_6 }, /* 0x36 6 */ \ + {0, HID_KEY_7 }, /* 0x37 7 */ \ + {0, HID_KEY_8 }, /* 0x38 8 */ \ + {0, HID_KEY_9 }, /* 0x39 9 */ \ + {1, HID_KEY_SEMICOLON }, /* 0x3A : */ \ + {0, HID_KEY_SEMICOLON }, /* 0x3B ; */ \ + {1, HID_KEY_COMMA }, /* 0x3C < */ \ + {0, HID_KEY_EQUAL }, /* 0x3D = */ \ + {1, HID_KEY_PERIOD }, /* 0x3E > */ \ + {1, HID_KEY_SLASH }, /* 0x3F ? */ \ + \ + {1, HID_KEY_2 }, /* 0x40 @ */ \ + {1, HID_KEY_A }, /* 0x41 A */ \ + {1, HID_KEY_B }, /* 0x42 B */ \ + {1, HID_KEY_C }, /* 0x43 C */ \ + {1, HID_KEY_D }, /* 0x44 D */ \ + {1, HID_KEY_E }, /* 0x45 E */ \ + {1, HID_KEY_F }, /* 0x46 F */ \ + {1, HID_KEY_G }, /* 0x47 G */ \ + {1, HID_KEY_H }, /* 0x48 H */ \ + {1, HID_KEY_I }, /* 0x49 I */ \ + {1, HID_KEY_J }, /* 0x4A J */ \ + {1, HID_KEY_K }, /* 0x4B K */ \ + {1, HID_KEY_L }, /* 0x4C L */ \ + {1, HID_KEY_M }, /* 0x4D M */ \ + {1, HID_KEY_N }, /* 0x4E N */ \ + {1, HID_KEY_O }, /* 0x4F O */ \ + {1, HID_KEY_P }, /* 0x50 P */ \ + {1, HID_KEY_Q }, /* 0x51 Q */ \ + {1, HID_KEY_R }, /* 0x52 R */ \ + {1, HID_KEY_S }, /* 0x53 S */ \ + {1, HID_KEY_T }, /* 0x55 T */ \ + {1, HID_KEY_U }, /* 0x55 U */ \ + {1, HID_KEY_V }, /* 0x56 V */ \ + {1, HID_KEY_W }, /* 0x57 W */ \ + {1, HID_KEY_X }, /* 0x58 X */ \ + {1, HID_KEY_Y }, /* 0x59 Y */ \ + {1, HID_KEY_Z }, /* 0x5A Z */ \ + {0, HID_KEY_BRACKET_LEFT }, /* 0x5B [ */ \ + {0, HID_KEY_BACKSLASH }, /* 0x5C '\' */ \ + {0, HID_KEY_BRACKET_RIGHT }, /* 0x5D ] */ \ + {1, HID_KEY_6 }, /* 0x5E ^ */ \ + {1, HID_KEY_MINUS }, /* 0x5F _ */ \ + \ + {0, HID_KEY_GRAVE }, /* 0x60 ` */ \ + {0, HID_KEY_A }, /* 0x61 a */ \ + {0, HID_KEY_B }, /* 0x62 b */ \ + {0, HID_KEY_C }, /* 0x63 c */ \ + {0, HID_KEY_D }, /* 0x66 d */ \ + {0, HID_KEY_E }, /* 0x65 e */ \ + {0, HID_KEY_F }, /* 0x66 f */ \ + {0, HID_KEY_G }, /* 0x67 g */ \ + {0, HID_KEY_H }, /* 0x68 h */ \ + {0, HID_KEY_I }, /* 0x69 i */ \ + {0, HID_KEY_J }, /* 0x6A j */ \ + {0, HID_KEY_K }, /* 0x6B k */ \ + {0, HID_KEY_L }, /* 0x6C l */ \ + {0, HID_KEY_M }, /* 0x6D m */ \ + {0, HID_KEY_N }, /* 0x6E n */ \ + {0, HID_KEY_O }, /* 0x6F o */ \ + {0, HID_KEY_P }, /* 0x70 p */ \ + {0, HID_KEY_Q }, /* 0x71 q */ \ + {0, HID_KEY_R }, /* 0x72 r */ \ + {0, HID_KEY_S }, /* 0x73 s */ \ + {0, HID_KEY_T }, /* 0x75 t */ \ + {0, HID_KEY_U }, /* 0x75 u */ \ + {0, HID_KEY_V }, /* 0x76 v */ \ + {0, HID_KEY_W }, /* 0x77 w */ \ + {0, HID_KEY_X }, /* 0x78 x */ \ + {0, HID_KEY_Y }, /* 0x79 y */ \ + {0, HID_KEY_Z }, /* 0x7A z */ \ + {1, HID_KEY_BRACKET_LEFT }, /* 0x7B { */ \ + {1, HID_KEY_BACKSLASH }, /* 0x7C | */ \ + {1, HID_KEY_BRACKET_RIGHT }, /* 0x7D } */ \ + {1, HID_KEY_GRAVE }, /* 0x7E ~ */ \ + {0, HID_KEY_DELETE } /* 0x7F Delete */ \ /*-------------------------------------------------------------------- * KEYCODE to Ascii Conversion @@ -1085,116 +1109,117 @@ enum { * char ch = shift ? conv_table[chr][1] : conv_table[chr][0]; * *--------------------------------------------------------------------*/ -#define HID_KEYCODE_TO_ASCII \ - { 0, 0 }, /* 0x00 */ \ - { 0, 0 }, /* 0x01 */ \ - { 0, 0 }, /* 0x02 */ \ - { 0, 0 }, /* 0x03 */ \ - { 'a', 'A' }, /* 0x04 */ \ - { 'b', 'B' }, /* 0x05 */ \ - { 'c', 'C' }, /* 0x06 */ \ - { 'd', 'D' }, /* 0x07 */ \ - { 'e', 'E' }, /* 0x08 */ \ - { 'f', 'F' }, /* 0x09 */ \ - { 'g', 'G' }, /* 0x0a */ \ - { 'h', 'H' }, /* 0x0b */ \ - { 'i', 'I' }, /* 0x0c */ \ - { 'j', 'J' }, /* 0x0d */ \ - { 'k', 'K' }, /* 0x0e */ \ - { 'l', 'L' }, /* 0x0f */ \ - { 'm', 'M' }, /* 0x10 */ \ - { 'n', 'N' }, /* 0x11 */ \ - { 'o', 'O' }, /* 0x12 */ \ - { 'p', 'P' }, /* 0x13 */ \ - { 'q', 'Q' }, /* 0x14 */ \ - { 'r', 'R' }, /* 0x15 */ \ - { 's', 'S' }, /* 0x16 */ \ - { 't', 'T' }, /* 0x17 */ \ - { 'u', 'U' }, /* 0x18 */ \ - { 'v', 'V' }, /* 0x19 */ \ - { 'w', 'W' }, /* 0x1a */ \ - { 'x', 'X' }, /* 0x1b */ \ - { 'y', 'Y' }, /* 0x1c */ \ - { 'z', 'Z' }, /* 0x1d */ \ - { '1', '!' }, /* 0x1e */ \ - { '2', '@' }, /* 0x1f */ \ - { '3', '#' }, /* 0x20 */ \ - { '4', '$' }, /* 0x21 */ \ - { '5', '%' }, /* 0x22 */ \ - { '6', '^' }, /* 0x23 */ \ - { '7', '&' }, /* 0x24 */ \ - { '8', '*' }, /* 0x25 */ \ - { '9', '(' }, /* 0x26 */ \ - { '0', ')' }, /* 0x27 */ \ - { '\r', '\r' }, /* 0x28 */ \ - { '\x1b', '\x1b' }, /* 0x29 */ \ - { '\b', '\b' }, /* 0x2a */ \ - { '\t', '\t' }, /* 0x2b */ \ - { ' ', ' ' }, /* 0x2c */ \ - { '-', '_' }, /* 0x2d */ \ - { '=', '+' }, /* 0x2e */ \ - { '[', '{' }, /* 0x2f */ \ - { ']', '}' }, /* 0x30 */ \ - { '\\', '|' }, /* 0x31 */ \ - { '#', '~' }, /* 0x32 */ \ - { ';', ':' }, /* 0x33 */ \ - { '\'', '\"' }, /* 0x34 */ \ - { '`', '~' }, /* 0x35 */ \ - { ',', '<' }, /* 0x36 */ \ - { '.', '>' }, /* 0x37 */ \ - { '/', '?' }, /* 0x38 */ \ - \ - { 0, 0 }, /* 0x39 */ \ - { 0, 0 }, /* 0x3a */ \ - { 0, 0 }, /* 0x3b */ \ - { 0, 0 }, /* 0x3c */ \ - { 0, 0 }, /* 0x3d */ \ - { 0, 0 }, /* 0x3e */ \ - { 0, 0 }, /* 0x3f */ \ - { 0, 0 }, /* 0x40 */ \ - { 0, 0 }, /* 0x41 */ \ - { 0, 0 }, /* 0x42 */ \ - { 0, 0 }, /* 0x43 */ \ - { 0, 0 }, /* 0x44 */ \ - { 0, 0 }, /* 0x45 */ \ - { 0, 0 }, /* 0x46 */ \ - { 0, 0 }, /* 0x47 */ \ - { 0, 0 }, /* 0x48 */ \ - { 0, 0 }, /* 0x49 */ \ - { 0, 0 }, /* 0x4a */ \ - { 0, 0 }, /* 0x4b */ \ - { 0, 0 }, /* 0x4c */ \ - { 0, 0 }, /* 0x4d */ \ - { 0, 0 }, /* 0x4e */ \ - { 0, 0 }, /* 0x4f */ \ - { 0, 0 }, /* 0x50 */ \ - { 0, 0 }, /* 0x51 */ \ - { 0, 0 }, /* 0x52 */ \ - { 0, 0 }, /* 0x53 */ \ - \ - { '/', '/' }, /* 0x54 */ \ - { '*', '*' }, /* 0x55 */ \ - { '-', '-' }, /* 0x56 */ \ - { '+', '+' }, /* 0x57 */ \ - { '\r', '\r' }, /* 0x58 */ \ - { '1', 0 }, /* 0x59 */ \ - { '2', 0 }, /* 0x5a */ \ - { '3', 0 }, /* 0x5b */ \ - { '4', 0 }, /* 0x5c */ \ - { '5', '5' }, /* 0x5d */ \ - { '6', 0 }, /* 0x5e */ \ - { '7', 0 }, /* 0x5f */ \ - { '8', 0 }, /* 0x60 */ \ - { '9', 0 }, /* 0x61 */ \ - { '0', 0 }, /* 0x62 */ \ - { '.', 0 }, /* 0x63 */ \ - { 0, 0 }, /* 0x64 */ \ - { 0, 0 }, /* 0x65 */ \ - { 0, 0 }, /* 0x66 */ \ - { '=', '=' }, /* 0x67 */ +#define HID_KEYCODE_TO_ASCII \ + {0 , 0 }, /* 0x00 */ \ + {0 , 0 }, /* 0x01 */ \ + {0 , 0 }, /* 0x02 */ \ + {0 , 0 }, /* 0x03 */ \ + {'a' , 'A' }, /* 0x04 */ \ + {'b' , 'B' }, /* 0x05 */ \ + {'c' , 'C' }, /* 0x06 */ \ + {'d' , 'D' }, /* 0x07 */ \ + {'e' , 'E' }, /* 0x08 */ \ + {'f' , 'F' }, /* 0x09 */ \ + {'g' , 'G' }, /* 0x0a */ \ + {'h' , 'H' }, /* 0x0b */ \ + {'i' , 'I' }, /* 0x0c */ \ + {'j' , 'J' }, /* 0x0d */ \ + {'k' , 'K' }, /* 0x0e */ \ + {'l' , 'L' }, /* 0x0f */ \ + {'m' , 'M' }, /* 0x10 */ \ + {'n' , 'N' }, /* 0x11 */ \ + {'o' , 'O' }, /* 0x12 */ \ + {'p' , 'P' }, /* 0x13 */ \ + {'q' , 'Q' }, /* 0x14 */ \ + {'r' , 'R' }, /* 0x15 */ \ + {'s' , 'S' }, /* 0x16 */ \ + {'t' , 'T' }, /* 0x17 */ \ + {'u' , 'U' }, /* 0x18 */ \ + {'v' , 'V' }, /* 0x19 */ \ + {'w' , 'W' }, /* 0x1a */ \ + {'x' , 'X' }, /* 0x1b */ \ + {'y' , 'Y' }, /* 0x1c */ \ + {'z' , 'Z' }, /* 0x1d */ \ + {'1' , '!' }, /* 0x1e */ \ + {'2' , '@' }, /* 0x1f */ \ + {'3' , '#' }, /* 0x20 */ \ + {'4' , '$' }, /* 0x21 */ \ + {'5' , '%' }, /* 0x22 */ \ + {'6' , '^' }, /* 0x23 */ \ + {'7' , '&' }, /* 0x24 */ \ + {'8' , '*' }, /* 0x25 */ \ + {'9' , '(' }, /* 0x26 */ \ + {'0' , ')' }, /* 0x27 */ \ + {'\r' , '\r' }, /* 0x28 */ \ + {'\x1b', '\x1b' }, /* 0x29 */ \ + {'\b' , '\b' }, /* 0x2a */ \ + {'\t' , '\t' }, /* 0x2b */ \ + {' ' , ' ' }, /* 0x2c */ \ + {'-' , '_' }, /* 0x2d */ \ + {'=' , '+' }, /* 0x2e */ \ + {'[' , '{' }, /* 0x2f */ \ + {']' , '}' }, /* 0x30 */ \ + {'\\' , '|' }, /* 0x31 */ \ + {'#' , '~' }, /* 0x32 */ \ + {';' , ':' }, /* 0x33 */ \ + {'\'' , '\"' }, /* 0x34 */ \ + {'`' , '~' }, /* 0x35 */ \ + {',' , '<' }, /* 0x36 */ \ + {'.' , '>' }, /* 0x37 */ \ + {'/' , '?' }, /* 0x38 */ \ + \ + {0 , 0 }, /* 0x39 */ \ + {0 , 0 }, /* 0x3a */ \ + {0 , 0 }, /* 0x3b */ \ + {0 , 0 }, /* 0x3c */ \ + {0 , 0 }, /* 0x3d */ \ + {0 , 0 }, /* 0x3e */ \ + {0 , 0 }, /* 0x3f */ \ + {0 , 0 }, /* 0x40 */ \ + {0 , 0 }, /* 0x41 */ \ + {0 , 0 }, /* 0x42 */ \ + {0 , 0 }, /* 0x43 */ \ + {0 , 0 }, /* 0x44 */ \ + {0 , 0 }, /* 0x45 */ \ + {0 , 0 }, /* 0x46 */ \ + {0 , 0 }, /* 0x47 */ \ + {0 , 0 }, /* 0x48 */ \ + {0 , 0 }, /* 0x49 */ \ + {0 , 0 }, /* 0x4a */ \ + {0 , 0 }, /* 0x4b */ \ + {0 , 0 }, /* 0x4c */ \ + {0 , 0 }, /* 0x4d */ \ + {0 , 0 }, /* 0x4e */ \ + {0 , 0 }, /* 0x4f */ \ + {0 , 0 }, /* 0x50 */ \ + {0 , 0 }, /* 0x51 */ \ + {0 , 0 }, /* 0x52 */ \ + {0 , 0 }, /* 0x53 */ \ + \ + {'/' , '/' }, /* 0x54 */ \ + {'*' , '*' }, /* 0x55 */ \ + {'-' , '-' }, /* 0x56 */ \ + {'+' , '+' }, /* 0x57 */ \ + {'\r' , '\r' }, /* 0x58 */ \ + {'1' , 0 }, /* 0x59 */ \ + {'2' , 0 }, /* 0x5a */ \ + {'3' , 0 }, /* 0x5b */ \ + {'4' , 0 }, /* 0x5c */ \ + {'5' , '5' }, /* 0x5d */ \ + {'6' , 0 }, /* 0x5e */ \ + {'7' , 0 }, /* 0x5f */ \ + {'8' , 0 }, /* 0x60 */ \ + {'9' , 0 }, /* 0x61 */ \ + {'0' , 0 }, /* 0x62 */ \ + {'.' , 0 }, /* 0x63 */ \ + {0 , 0 }, /* 0x64 */ \ + {0 , 0 }, /* 0x65 */ \ + {0 , 0 }, /* 0x66 */ \ + {'=' , '=' }, /* 0x67 */ \ + #ifdef __cplusplus -} + } #endif #endif /* _TUSB_HID_H__ */ diff --git a/Libraries/tinyusb/src/class/hid/hid_device.c b/Libraries/tinyusb/src/class/hid/hid_device.c index eba1036bad1..ef6c7f3afb4 100644 --- a/Libraries/tinyusb/src/class/hid/hid_device.c +++ b/Libraries/tinyusb/src/class/hid/hid_device.c @@ -40,398 +40,369 @@ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ typedef struct { - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; // optional Out endpoint - uint8_t itf_protocol; // Boot mouse or keyboard - - uint16_t report_desc_len; - uint8_t protocol_mode; // Boot (0) or Report protocol (1) - uint8_t idle_rate; // up to application to handle idle rate - - // TODO save hid descriptor since host can specifically request this after enumeration - // Note: HID descriptor may be not available from application after enumeration - tusb_hid_descriptor_hid_t const *hid_descriptor; - - uint8_t ctrl_buf[CFG_TUD_HID_EP_BUFSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_HID_EP_BUFSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_HID_EP_BUFSIZE]; + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; // optional Out endpoint + uint8_t itf_protocol; // Boot mouse or keyboard + + uint16_t report_desc_len; + uint8_t protocol_mode; // Boot (0) or Report protocol (1) + uint8_t idle_rate; // up to application to handle idle rate + + // TODO save hid descriptor since host can specifically request this after enumeration + // Note: HID descriptor may be not available from application after enumeration + tusb_hid_descriptor_hid_t const *hid_descriptor; + + uint8_t ctrl_buf[CFG_TUD_HID_EP_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_HID_EP_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_HID_EP_BUFSIZE]; } hidd_interface_t; CFG_TUD_MEM_SECTION tu_static hidd_interface_t _hidd_itf[CFG_TUD_HID]; /*------------- Helpers -------------*/ -TU_ATTR_ALWAYS_INLINE static inline uint8_t get_index_by_itfnum(uint8_t itf_num) -{ - for (uint8_t i = 0; i < CFG_TUD_HID; i++) { - if (itf_num == _hidd_itf[i].itf_num) { - return i; - } +TU_ATTR_ALWAYS_INLINE static inline uint8_t get_index_by_itfnum(uint8_t itf_num) { + for (uint8_t i = 0; i < CFG_TUD_HID; i++) { + if (itf_num == _hidd_itf[i].itf_num) { + return i; } - return 0xFF; + } + return 0xFF; } //--------------------------------------------------------------------+ // Weak stubs: invoked if no strong implementation is available //--------------------------------------------------------------------+ -TU_ATTR_WEAK void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol) -{ - (void)instance; - (void)protocol; +TU_ATTR_WEAK void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol) { + (void) instance; + (void) protocol; } -TU_ATTR_WEAK bool tud_hid_set_idle_cb(uint8_t instance, uint8_t idle_rate) -{ - (void)instance; - (void)idle_rate; - return true; +TU_ATTR_WEAK bool tud_hid_set_idle_cb(uint8_t instance, uint8_t idle_rate) { + (void) instance; + (void) idle_rate; + return true; } -TU_ATTR_WEAK void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len) -{ - (void)instance; - (void)report; - (void)len; +TU_ATTR_WEAK void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len) { + (void) instance; + (void) report; + (void) len; } // Invoked when a transfer wasn't successful -TU_ATTR_WEAK void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, - uint8_t const *report, uint16_t xferred_bytes) -{ - (void)instance; - (void)report_type; - (void)report; - (void)xferred_bytes; +TU_ATTR_WEAK void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, uint8_t const* report, uint16_t xferred_bytes) { + (void) instance; + (void) report_type; + (void) report; + (void) xferred_bytes; } //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ -bool tud_hid_n_ready(uint8_t instance) -{ - uint8_t const rhport = 0; - uint8_t const ep_in = _hidd_itf[instance].ep_in; - return tud_ready() && (ep_in != 0) && !usbd_edpt_busy(rhport, ep_in); +bool tud_hid_n_ready(uint8_t instance) { + uint8_t const rhport = 0; + uint8_t const ep_in = _hidd_itf[instance].ep_in; + return tud_ready() && (ep_in != 0) && !usbd_edpt_busy(rhport, ep_in); } -bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const *report, uint16_t len) -{ - uint8_t const rhport = 0; - hidd_interface_t *p_hid = &_hidd_itf[instance]; +bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const *report, uint16_t len) { + uint8_t const rhport = 0; + hidd_interface_t *p_hid = &_hidd_itf[instance]; - // claim endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_hid->ep_in)); + // claim endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_hid->ep_in)); - // prepare data - if (report_id) { - p_hid->epin_buf[0] = report_id; - TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf + 1, CFG_TUD_HID_EP_BUFSIZE - 1, report, len)); - len++; - } else { - TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf, CFG_TUD_HID_EP_BUFSIZE, report, len)); - } + // prepare data + if (report_id) { + p_hid->epin_buf[0] = report_id; + TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf + 1, CFG_TUD_HID_EP_BUFSIZE - 1, report, len)); + len++; + } else { + TU_VERIFY(0 == tu_memcpy_s(p_hid->epin_buf, CFG_TUD_HID_EP_BUFSIZE, report, len)); + } - return usbd_edpt_xfer(rhport, p_hid->ep_in, p_hid->epin_buf, len); + return usbd_edpt_xfer(rhport, p_hid->ep_in, p_hid->epin_buf, len); } -uint8_t tud_hid_n_interface_protocol(uint8_t instance) -{ - return _hidd_itf[instance].itf_protocol; +uint8_t tud_hid_n_interface_protocol(uint8_t instance) { + return _hidd_itf[instance].itf_protocol; } -uint8_t tud_hid_n_get_protocol(uint8_t instance) -{ - return _hidd_itf[instance].protocol_mode; +uint8_t tud_hid_n_get_protocol(uint8_t instance) { + return _hidd_itf[instance].protocol_mode; } -bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, - const uint8_t keycode[6]) -{ - hid_keyboard_report_t report; - report.modifier = modifier; - report.reserved = 0; +bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, const uint8_t keycode[6]) { + hid_keyboard_report_t report; + report.modifier = modifier; + report.reserved = 0; - if (keycode) { - memcpy(report.keycode, keycode, sizeof(report.keycode)); - } else { - tu_memclr(report.keycode, 6); - } + if (keycode) { + memcpy(report.keycode, keycode, sizeof(report.keycode)); + } else { + tu_memclr(report.keycode, 6); + } - return tud_hid_n_report(instance, report_id, &report, sizeof(report)); + return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } -bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, - int8_t y, int8_t vertical, int8_t horizontal) -{ - hid_mouse_report_t report = { - .buttons = buttons, .x = x, .y = y, .wheel = vertical, .pan = horizontal - }; - - return tud_hid_n_report(instance, report_id, &report, sizeof(report)); +bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, + uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal) { + hid_mouse_report_t report = { + .buttons = buttons, + .x = x, + .y = y, + .wheel = vertical, + .pan = horizontal + }; + + return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } -bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, - int16_t y, int8_t vertical, int8_t horizontal) -{ - hid_abs_mouse_report_t report = { - .buttons = buttons, .x = x, .y = y, .wheel = vertical, .pan = horizontal - }; - return tud_hid_n_report(instance, report_id, &report, sizeof(report)); +bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, + uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal) { + hid_abs_mouse_report_t report = { + .buttons = buttons, + .x = x, + .y = y, + .wheel = vertical, + .pan = horizontal + }; + return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } -bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, - int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) -{ - hid_gamepad_report_t report = { - .x = x, - .y = y, - .z = z, - .rz = rz, - .rx = rx, - .ry = ry, - .hat = hat, - .buttons = buttons, - }; - - return tud_hid_n_report(instance, report_id, &report, sizeof(report)); +bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, + int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) { + hid_gamepad_report_t report = { + .x = x, + .y = y, + .z = z, + .rz = rz, + .rx = rx, + .ry = ry, + .hat = hat, + .buttons = buttons, + }; + + return tud_hid_n_report(instance, report_id, &report, sizeof(report)); } //--------------------------------------------------------------------+ // USBD-CLASS API //--------------------------------------------------------------------+ -void hidd_init(void) -{ - hidd_reset(0); +void hidd_init(void) { + hidd_reset(0); } -bool hidd_deinit(void) -{ - return true; +bool hidd_deinit(void) { + return true; } -void hidd_reset(uint8_t rhport) -{ - (void)rhport; - tu_memclr(_hidd_itf, sizeof(_hidd_itf)); +void hidd_reset(uint8_t rhport) { + (void)rhport; + tu_memclr(_hidd_itf, sizeof(_hidd_itf)); } -uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) -{ - TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass, 0); - - // len = interface + hid + n*endpoints - uint16_t const drv_len = - (uint16_t)(sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + - desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); - TU_ASSERT(max_len >= drv_len, 0); - - // Find available interface - hidd_interface_t *p_hid = NULL; - uint8_t hid_id; - for (hid_id = 0; hid_id < CFG_TUD_HID; hid_id++) { - if (_hidd_itf[hid_id].ep_in == 0) { - p_hid = &_hidd_itf[hid_id]; - break; - } +uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) { + TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass, 0); + + // len = interface + hid + n*endpoints + uint16_t const drv_len = (uint16_t) (sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + + desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); + TU_ASSERT(max_len >= drv_len, 0); + + // Find available interface + hidd_interface_t *p_hid = NULL; + uint8_t hid_id; + for (hid_id = 0; hid_id < CFG_TUD_HID; hid_id++) { + if (_hidd_itf[hid_id].ep_in == 0) { + p_hid = &_hidd_itf[hid_id]; + break; } - TU_ASSERT(p_hid, 0); + } + TU_ASSERT(p_hid, 0); - uint8_t const *p_desc = (uint8_t const *)desc_itf; + uint8_t const *p_desc = (uint8_t const *)desc_itf; - //------------- HID descriptor -------------// - p_desc = tu_desc_next(p_desc); - TU_ASSERT(HID_DESC_TYPE_HID == tu_desc_type(p_desc), 0); - p_hid->hid_descriptor = (tusb_hid_descriptor_hid_t const *)p_desc; + //------------- HID descriptor -------------// + p_desc = tu_desc_next(p_desc); + TU_ASSERT(HID_DESC_TYPE_HID == tu_desc_type(p_desc), 0); + p_hid->hid_descriptor = (tusb_hid_descriptor_hid_t const *)p_desc; - //------------- Endpoint Descriptor -------------// - p_desc = tu_desc_next(p_desc); - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_INTERRUPT, - &p_hid->ep_out, &p_hid->ep_in), - 0); + //------------- Endpoint Descriptor -------------// + p_desc = tu_desc_next(p_desc); + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_INTERRUPT, &p_hid->ep_out, &p_hid->ep_in), 0); - if (desc_itf->bInterfaceSubClass == HID_SUBCLASS_BOOT) { - p_hid->itf_protocol = desc_itf->bInterfaceProtocol; - } + if (desc_itf->bInterfaceSubClass == HID_SUBCLASS_BOOT) { + p_hid->itf_protocol = desc_itf->bInterfaceProtocol; + } - p_hid->protocol_mode = HID_PROTOCOL_REPORT; // Per Specs: default is report mode - p_hid->itf_num = desc_itf->bInterfaceNumber; + p_hid->protocol_mode = HID_PROTOCOL_REPORT; // Per Specs: default is report mode + p_hid->itf_num = desc_itf->bInterfaceNumber; - // Use offsetof to avoid pointer to the odd/misaligned address - p_hid->report_desc_len = - tu_unaligned_read16((uint8_t const *)p_hid->hid_descriptor + - offsetof(tusb_hid_descriptor_hid_t, wReportLength)); + // Use offsetof to avoid pointer to the odd/misaligned address + p_hid->report_desc_len = tu_unaligned_read16((uint8_t const *)p_hid->hid_descriptor + offsetof(tusb_hid_descriptor_hid_t, wReportLength)); - // Prepare for output endpoint - if (p_hid->ep_out) { - if (!usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))) { - TU_LOG_FAILED(); - TU_BREAKPOINT(); - } + // Prepare for output endpoint + if (p_hid->ep_out) { + if (!usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))) { + TU_LOG_FAILED(); + TU_BREAKPOINT(); } + } - return drv_len; + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool hidd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) -{ - TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); +bool hidd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { + TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); + + uint8_t const hid_itf = get_index_by_itfnum((uint8_t)request->wIndex); + TU_VERIFY(hid_itf < CFG_TUD_HID); + + hidd_interface_t *p_hid = &_hidd_itf[hid_itf]; + + if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { + //------------- STD Request -------------// + if (stage == CONTROL_STAGE_SETUP) { + uint8_t const desc_type = tu_u16_high(request->wValue); + // uint8_t const desc_index = tu_u16_low (request->wValue); + + if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && desc_type == HID_DESC_TYPE_HID) { + TU_VERIFY(p_hid->hid_descriptor); + TU_VERIFY(tud_control_xfer(rhport, request, (void *)(uintptr_t)p_hid->hid_descriptor, p_hid->hid_descriptor->bLength)); + } else if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && desc_type == HID_DESC_TYPE_REPORT) { + uint8_t const *desc_report = tud_hid_descriptor_report_cb(hid_itf); + tud_control_xfer(rhport, request, (void *)(uintptr_t)desc_report, p_hid->report_desc_len); + } else { + return false; // stall unsupported request + } + } + } else if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { + //------------- Class Specific Request -------------// + switch (request->bRequest) { + case HID_REQ_CONTROL_GET_REPORT: + if (stage == CONTROL_STAGE_SETUP) { + uint8_t const report_type = tu_u16_high(request->wValue); + uint8_t const report_id = tu_u16_low(request->wValue); - uint8_t const hid_itf = get_index_by_itfnum((uint8_t)request->wIndex); - TU_VERIFY(hid_itf < CFG_TUD_HID); + uint8_t* report_buf = p_hid->ctrl_buf; + uint16_t req_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); + uint16_t xferlen = 0; - hidd_interface_t *p_hid = &_hidd_itf[hid_itf]; + // If host request a specific Report ID, add ID to as 1 byte of response + if ((report_id != HID_REPORT_TYPE_INVALID) && (req_len > 1)) { + *report_buf++ = report_id; + req_len--; + xferlen++; + } - if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) { - //------------- STD Request -------------// + xferlen += tud_hid_get_report_cb(hid_itf, report_id, (hid_report_type_t) report_type, report_buf, req_len); + TU_ASSERT(xferlen > 0); + + tud_control_xfer(rhport, request, p_hid->ctrl_buf, xferlen); + } + break; + + case HID_REQ_CONTROL_SET_REPORT: if (stage == CONTROL_STAGE_SETUP) { - uint8_t const desc_type = tu_u16_high(request->wValue); - // uint8_t const desc_index = tu_u16_low (request->wValue); - - if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && desc_type == HID_DESC_TYPE_HID) { - TU_VERIFY(p_hid->hid_descriptor); - TU_VERIFY(tud_control_xfer(rhport, request, - (void *)(uintptr_t)p_hid->hid_descriptor, - p_hid->hid_descriptor->bLength)); - } else if (request->bRequest == TUSB_REQ_GET_DESCRIPTOR && - desc_type == HID_DESC_TYPE_REPORT) { - uint8_t const *desc_report = tud_hid_descriptor_report_cb(hid_itf); - tud_control_xfer(rhport, request, (void *)(uintptr_t)desc_report, - p_hid->report_desc_len); - } else { - return false; // stall unsupported request - } + TU_VERIFY(request->wLength <= sizeof(p_hid->ctrl_buf)); + tud_control_xfer(rhport, request, p_hid->ctrl_buf, request->wLength); + } else if (stage == CONTROL_STAGE_ACK) { + uint8_t const report_type = tu_u16_high(request->wValue); + uint8_t const report_id = tu_u16_low(request->wValue); + + uint8_t const* report_buf = p_hid->ctrl_buf; + uint16_t report_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); + + // If host request a specific Report ID, extract report ID in buffer before invoking callback + if ((report_id != HID_REPORT_TYPE_INVALID) && (report_len > 1) && (report_id == report_buf[0])) { + report_buf++; + report_len--; + } + + tud_hid_set_report_cb(hid_itf, report_id, (hid_report_type_t) report_type, report_buf, report_len); } - } else if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) { - //------------- Class Specific Request -------------// - switch (request->bRequest) { - case HID_REQ_CONTROL_GET_REPORT: - if (stage == CONTROL_STAGE_SETUP) { - uint8_t const report_type = tu_u16_high(request->wValue); - uint8_t const report_id = tu_u16_low(request->wValue); - - uint8_t *report_buf = p_hid->ctrl_buf; - uint16_t req_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); - uint16_t xferlen = 0; - - // If host request a specific Report ID, add ID to as 1 byte of response - if ((report_id != HID_REPORT_TYPE_INVALID) && (req_len > 1)) { - *report_buf++ = report_id; - req_len--; - xferlen++; - } - - xferlen += tud_hid_get_report_cb(hid_itf, report_id, (hid_report_type_t)report_type, - report_buf, req_len); - TU_ASSERT(xferlen > 0); - - tud_control_xfer(rhport, request, p_hid->ctrl_buf, xferlen); - } - break; - - case HID_REQ_CONTROL_SET_REPORT: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(request->wLength <= sizeof(p_hid->ctrl_buf)); - tud_control_xfer(rhport, request, p_hid->ctrl_buf, request->wLength); - } else if (stage == CONTROL_STAGE_ACK) { - uint8_t const report_type = tu_u16_high(request->wValue); - uint8_t const report_id = tu_u16_low(request->wValue); - - uint8_t const *report_buf = p_hid->ctrl_buf; - uint16_t report_len = tu_min16(request->wLength, CFG_TUD_HID_EP_BUFSIZE); - - // If host request a specific Report ID, extract report ID in buffer before invoking callback - if ((report_id != HID_REPORT_TYPE_INVALID) && (report_len > 1) && - (report_id == report_buf[0])) { - report_buf++; - report_len--; - } - - tud_hid_set_report_cb(hid_itf, report_id, (hid_report_type_t)report_type, - report_buf, report_len); - } - break; - - case HID_REQ_CONTROL_SET_IDLE: - if (stage == CONTROL_STAGE_SETUP) { - p_hid->idle_rate = tu_u16_high(request->wValue); - TU_VERIFY(tud_hid_set_idle_cb(hid_itf, p_hid->idle_rate)); // stall if false - tud_control_status(rhport, request); - } - break; - - case HID_REQ_CONTROL_GET_IDLE: - if (stage == CONTROL_STAGE_SETUP) { - // TODO idle rate of report - tud_control_xfer(rhport, request, &p_hid->idle_rate, 1); - } - break; - - case HID_REQ_CONTROL_GET_PROTOCOL: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_xfer(rhport, request, &p_hid->protocol_mode, 1); - } - break; - - case HID_REQ_CONTROL_SET_PROTOCOL: - if (stage == CONTROL_STAGE_SETUP) { - tud_control_status(rhport, request); - } else if (stage == CONTROL_STAGE_ACK) { - p_hid->protocol_mode = (uint8_t)request->wValue; - tud_hid_set_protocol_cb(hid_itf, p_hid->protocol_mode); - } - break; - - default: - return false; // stall unsupported request + break; + + case HID_REQ_CONTROL_SET_IDLE: + if (stage == CONTROL_STAGE_SETUP) { + p_hid->idle_rate = tu_u16_high(request->wValue); + TU_VERIFY(tud_hid_set_idle_cb(hid_itf, p_hid->idle_rate)); // stall if false + tud_control_status(rhport, request); } - } else { + break; + + case HID_REQ_CONTROL_GET_IDLE: + if (stage == CONTROL_STAGE_SETUP) { + // TODO idle rate of report + tud_control_xfer(rhport, request, &p_hid->idle_rate, 1); + } + break; + + case HID_REQ_CONTROL_GET_PROTOCOL: + if (stage == CONTROL_STAGE_SETUP) { + tud_control_xfer(rhport, request, &p_hid->protocol_mode, 1); + } + break; + + case HID_REQ_CONTROL_SET_PROTOCOL: + if (stage == CONTROL_STAGE_SETUP) { + tud_control_status(rhport, request); + } else if (stage == CONTROL_STAGE_ACK) { + p_hid->protocol_mode = (uint8_t) request->wValue; + tud_hid_set_protocol_cb(hid_itf, p_hid->protocol_mode); + } + break; + + default: return false; // stall unsupported request } + } else { + return false; // stall unsupported request + } - return true; + return true; } -bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) -{ - uint8_t instance = 0; - hidd_interface_t *p_hid = _hidd_itf; +bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { + uint8_t instance = 0; + hidd_interface_t *p_hid = _hidd_itf; - // Identify which interface to use - for (instance = 0; instance < CFG_TUD_HID; instance++) { - p_hid = &_hidd_itf[instance]; - if ((ep_addr == p_hid->ep_out) || (ep_addr == p_hid->ep_in)) { - break; - } + // Identify which interface to use + for (instance = 0; instance < CFG_TUD_HID; instance++) { + p_hid = &_hidd_itf[instance]; + if ((ep_addr == p_hid->ep_out) || (ep_addr == p_hid->ep_in)) { + break; } - TU_ASSERT(instance < CFG_TUD_HID); - - if (ep_addr == p_hid->ep_in) { - // Input report - if (XFER_RESULT_SUCCESS == result) { - tud_hid_report_complete_cb(instance, p_hid->epin_buf, (uint16_t)xferred_bytes); - } else { - tud_hid_report_failed_cb(instance, HID_REPORT_TYPE_INPUT, p_hid->epin_buf, - (uint16_t)xferred_bytes); - } - } else { - // Output report - if (XFER_RESULT_SUCCESS == result) { - tud_hid_set_report_cb(instance, 0, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, - (uint16_t)xferred_bytes); - } else { - tud_hid_report_failed_cb(instance, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, - (uint16_t)xferred_bytes); - } + } + TU_ASSERT(instance < CFG_TUD_HID); - // prepare for new transfer - TU_ASSERT( - usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))); + if (ep_addr == p_hid->ep_in) { + // Input report + if (XFER_RESULT_SUCCESS == result) { + tud_hid_report_complete_cb(instance, p_hid->epin_buf, (uint16_t) xferred_bytes); + } else { + tud_hid_report_failed_cb(instance, HID_REPORT_TYPE_INPUT, p_hid->epin_buf, (uint16_t) xferred_bytes); + } + } else { + // Output report + if (XFER_RESULT_SUCCESS == result) { + tud_hid_set_report_cb(instance, 0, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, (uint16_t)xferred_bytes); + } else { + tud_hid_report_failed_cb(instance, HID_REPORT_TYPE_OUTPUT, p_hid->epout_buf, (uint16_t) xferred_bytes); } - return true; + // prepare for new transfer + TU_ASSERT(usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))); + } + + return true; } #endif diff --git a/Libraries/tinyusb/src/class/hid/hid_device.h b/Libraries/tinyusb/src/class/hid/hid_device.h index ea0958f3801..ab2e273736b 100644 --- a/Libraries/tinyusb/src/class/hid/hid_device.h +++ b/Libraries/tinyusb/src/class/hid/hid_device.h @@ -30,7 +30,7 @@ #include "hid.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -38,13 +38,13 @@ extern "C" { //--------------------------------------------------------------------+ #if !defined(CFG_TUD_HID_EP_BUFSIZE) & defined(CFG_TUD_HID_BUFSIZE) -// TODO warn user to use new name later on -// #warning CFG_TUD_HID_BUFSIZE is renamed to CFG_TUD_HID_EP_BUFSIZE, please update to use the new name -#define CFG_TUD_HID_EP_BUFSIZE CFG_TUD_HID_BUFSIZE + // TODO warn user to use new name later on + // #warning CFG_TUD_HID_BUFSIZE is renamed to CFG_TUD_HID_EP_BUFSIZE, please update to use the new name + #define CFG_TUD_HID_EP_BUFSIZE CFG_TUD_HID_BUFSIZE #endif #ifndef CFG_TUD_HID_EP_BUFSIZE -#define CFG_TUD_HID_EP_BUFSIZE 64 + #define CFG_TUD_HID_EP_BUFSIZE 64 #endif //--------------------------------------------------------------------+ @@ -61,79 +61,57 @@ uint8_t tud_hid_n_interface_protocol(uint8_t instance); uint8_t tud_hid_n_get_protocol(uint8_t instance); // Send report to host -bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const *report, uint16_t len); +bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const* report, uint16_t len); // KEYBOARD: convenient helper to send keyboard report if application // use template layout report as defined by hid_keyboard_report_t -bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, - const uint8_t keycode[6]); +bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, const uint8_t keycode[6]); // MOUSE: convenient helper to send mouse report if application // use template layout report as defined by hid_mouse_report_t -bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, - int8_t y, int8_t vertical, int8_t horizontal); +bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal); // ABSOLUTE MOUSE: convenient helper to send absolute mouse report if application // use template layout report as defined by hid_abs_mouse_report_t -bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, - int16_t y, int8_t vertical, int8_t horizontal); +bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal); // Gamepad: convenient helper to send gamepad report if application // use template layout report TUD_HID_REPORT_DESC_GAMEPAD -bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, - int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons); +bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons); //--------------------------------------------------------------------+ // Application API (Single Port) //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_ready(void) -{ - return tud_hid_n_ready(0); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_ready(void) { + return tud_hid_n_ready(0); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_hid_interface_protocol(void) -{ - return tud_hid_n_interface_protocol(0); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_hid_interface_protocol(void) { + return tud_hid_n_interface_protocol(0); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_hid_get_protocol(void) -{ - return tud_hid_n_get_protocol(0); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tud_hid_get_protocol(void) { + return tud_hid_n_get_protocol(0); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_report(uint8_t report_id, void const *report, - uint16_t len) -{ - return tud_hid_n_report(0, report_id, report, len); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_report(uint8_t report_id, void const* report, uint16_t len) { + return tud_hid_n_report(0, report_id, report, len); } -TU_ATTR_ALWAYS_INLINE static inline bool -tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, const uint8_t keycode[6]) -{ - return tud_hid_n_keyboard_report(0, report_id, modifier, keycode); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, const uint8_t keycode[6]) { + return tud_hid_n_keyboard_report(0, report_id, modifier, keycode); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_mouse_report(uint8_t report_id, uint8_t buttons, - int8_t x, int8_t y, int8_t vertical, - int8_t horizontal) -{ - return tud_hid_n_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_mouse_report(uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal) { + return tud_hid_n_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_abs_mouse_report(uint8_t report_id, - uint8_t buttons, int16_t x, - int16_t y, int8_t vertical, - int8_t horizontal) -{ - return tud_hid_n_abs_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_abs_mouse_report(uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal) { + return tud_hid_n_abs_mouse_report(0, report_id, buttons, x, y, vertical, horizontal); } -TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, - int8_t y, int8_t z, int8_t rz, - int8_t rx, int8_t ry, uint8_t hat, - uint32_t buttons) -{ - return tud_hid_n_gamepad_report(0, report_id, x, y, z, rz, rx, ry, hat, buttons); +TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) { + return tud_hid_n_gamepad_report(0, report_id, x, y, z, rz, rx, ry, hat, buttons); } //--------------------------------------------------------------------+ @@ -142,18 +120,16 @@ TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_gamepad_report(uint8_t report_i // Invoked when received GET HID REPORT DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance); +uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance); // Invoked when received GET_REPORT control request // Application must fill buffer report's content and return its length. // Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, - uint8_t *buffer, uint16_t reqlen); +uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen); // Invoked when received SET_REPORT control request or // received data on OUT endpoint (Report ID = 0, Type = OUTPUT) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, - uint8_t const *buffer, uint16_t bufsize); +void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize); // Invoked when received SET_PROTOCOL request // protocol is either HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) @@ -167,11 +143,10 @@ bool tud_hid_set_idle_cb(uint8_t instance, uint8_t idle_rate); // Invoked when sent REPORT successfully to host // Application can use this to send the next report // Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len); +void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_t len); // Invoked when a transfer wasn't successful -void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, - uint8_t const *report, uint16_t xferred_bytes); +void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, uint8_t const* report, uint16_t xferred_bytes); /* --------------------------------------------------------------------+ * HID Report Descriptor Template @@ -192,78 +167,160 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, *--------------------------------------------------------------------*/ // Keyboard Report Descriptor Template -#define TUD_HID_REPORT_DESC_KEYBOARD(...) \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_KEYBOARD), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ - __VA_ARGS__ /* 8 bits Modifier Keys (Shift, Control, Alt) */ \ - HID_USAGE_PAGE(HID_USAGE_PAGE_KEYBOARD), \ - HID_USAGE_MIN(224), HID_USAGE_MAX(231), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), \ - HID_REPORT_COUNT(8), HID_REPORT_SIZE(1), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 8 bit reserved */ \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ - HID_INPUT( \ - HID_CONSTANT), /* Output 5-bit LED Indicator Kana | Compose | ScrollLock | CapsLock | NumLock */ \ - HID_USAGE_PAGE(HID_USAGE_PAGE_LED), HID_USAGE_MIN(1), HID_USAGE_MAX(5), \ - HID_REPORT_COUNT(5), HID_REPORT_SIZE(1), \ - HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* led padding */ \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(3), HID_OUTPUT(HID_CONSTANT), /* 6-byte Keycodes */ \ - HID_USAGE_PAGE(HID_USAGE_PAGE_KEYBOARD), HID_USAGE_MIN(0), HID_USAGE_MAX_N(255, 2), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(255, 2), HID_REPORT_COUNT(6), HID_REPORT_SIZE(8), \ - HID_INPUT(HID_DATA | HID_ARRAY | HID_ABSOLUTE), HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_KEYBOARD(...) \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + /* Report ID if any */\ + __VA_ARGS__ \ + /* 8 bits Modifier Keys (Shift, Control, Alt) */ \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ) ,\ + HID_USAGE_MIN ( 224 ) ,\ + HID_USAGE_MAX ( 231 ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX ( 1 ) ,\ + HID_REPORT_COUNT ( 8 ) ,\ + HID_REPORT_SIZE ( 1 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* 8 bit reserved */ \ + HID_REPORT_COUNT ( 1 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_INPUT ( HID_CONSTANT ) ,\ + /* Output 5-bit LED Indicator Kana | Compose | ScrollLock | CapsLock | NumLock */ \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ) ,\ + HID_USAGE_MIN ( 1 ) ,\ + HID_USAGE_MAX ( 5 ) ,\ + HID_REPORT_COUNT ( 5 ) ,\ + HID_REPORT_SIZE ( 1 ) ,\ + HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* led padding */ \ + HID_REPORT_COUNT ( 1 ) ,\ + HID_REPORT_SIZE ( 3 ) ,\ + HID_OUTPUT ( HID_CONSTANT ) ,\ + /* 6-byte Keycodes */ \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ) ,\ + HID_USAGE_MIN ( 0 ) ,\ + HID_USAGE_MAX_N ( 255, 2 ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX_N( 255, 2 ) ,\ + HID_REPORT_COUNT ( 6 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ + HID_COLLECTION_END \ // Mouse Report Descriptor Template -#define TUD_HID_REPORT_DESC_MOUSE(...) \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_MOUSE), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ - __VA_ARGS__ HID_USAGE(HID_USAGE_DESKTOP_POINTER), HID_COLLECTION(HID_COLLECTION_PHYSICAL), \ - HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), HID_USAGE_MAX(5), \ - HID_LOGICAL_MIN(0), \ - HID_LOGICAL_MAX(1), /* Left, Right, Middle, Backward, Forward buttons */ \ - HID_REPORT_COUNT(5), HID_REPORT_SIZE(1), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 3 bit padding */ \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(3), HID_INPUT(HID_CONSTANT), \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), /* X, Y position [-127, 127] */ \ - HID_USAGE(HID_USAGE_DESKTOP_X), HID_USAGE(HID_USAGE_DESKTOP_Y), HID_LOGICAL_MIN(0x81), \ - HID_LOGICAL_MAX(0x7f), HID_REPORT_COUNT(2), HID_REPORT_SIZE(8), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), /* Verital wheel scroll [-127, 127] */ \ - HID_USAGE(HID_USAGE_DESKTOP_WHEEL), HID_LOGICAL_MIN(0x81), HID_LOGICAL_MAX(0x7f), \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), \ - HID_USAGE_PAGE(HID_USAGE_PAGE_CONSUMER), /* Horizontal wheel scroll [-127, 127] */ \ - HID_USAGE_N(HID_USAGE_CONSUMER_AC_PAN, 2), HID_LOGICAL_MIN(0x81), HID_LOGICAL_MAX(0x7f), \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), HID_COLLECTION_END, HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_MOUSE(...) \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + /* Report ID if any */\ + __VA_ARGS__ \ + HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\ + HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\ + HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ + HID_USAGE_MIN ( 1 ) ,\ + HID_USAGE_MAX ( 5 ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX ( 1 ) ,\ + /* Left, Right, Middle, Backward, Forward buttons */ \ + HID_REPORT_COUNT( 5 ) ,\ + HID_REPORT_SIZE ( 1 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* 3 bit padding */ \ + HID_REPORT_COUNT( 1 ) ,\ + HID_REPORT_SIZE ( 3 ) ,\ + HID_INPUT ( HID_CONSTANT ) ,\ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + /* X, Y position [-127, 127] */ \ + HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ + HID_LOGICAL_MIN ( 0x81 ) ,\ + HID_LOGICAL_MAX ( 0x7f ) ,\ + HID_REPORT_COUNT( 2 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ + /* Verital wheel scroll [-127, 127] */ \ + HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\ + HID_LOGICAL_MIN ( 0x81 ) ,\ + HID_LOGICAL_MAX ( 0x7f ) ,\ + HID_REPORT_COUNT( 1 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ + HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ), \ + /* Horizontal wheel scroll [-127, 127] */ \ + HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ), \ + HID_LOGICAL_MIN ( 0x81 ), \ + HID_LOGICAL_MAX ( 0x7f ), \ + HID_REPORT_COUNT( 1 ), \ + HID_REPORT_SIZE ( 8 ), \ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), \ + HID_COLLECTION_END , \ + HID_COLLECTION_END \ // Absolute Mouse Report Descriptor Template -#define TUD_HID_REPORT_DESC_ABSMOUSE(...) \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_MOUSE), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ - __VA_ARGS__ HID_USAGE(HID_USAGE_DESKTOP_POINTER), HID_COLLECTION(HID_COLLECTION_PHYSICAL), \ - HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), HID_USAGE_MAX(5), \ - HID_LOGICAL_MIN(0), \ - HID_LOGICAL_MAX(1), /* Left, Right, Middle, Backward, Forward buttons */ \ - HID_REPORT_COUNT(5), HID_REPORT_SIZE(1), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 3 bit padding */ \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(3), HID_INPUT(HID_CONSTANT), \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), /* X, Y absolute position [0, 32767] */ \ - HID_USAGE(HID_USAGE_DESKTOP_X), HID_USAGE(HID_USAGE_DESKTOP_Y), HID_LOGICAL_MIN(0x00), \ - HID_LOGICAL_MAX_N(0x7FFF, 2), HID_REPORT_SIZE(16), HID_REPORT_COUNT(2), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* Vertical wheel scroll [-127, 127] */ \ - HID_USAGE(HID_USAGE_DESKTOP_WHEEL), HID_LOGICAL_MIN(0x81), HID_LOGICAL_MAX(0x7f), \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), \ - HID_USAGE_PAGE(HID_USAGE_PAGE_CONSUMER), /* Horizontal wheel scroll [-127, 127] */ \ - HID_USAGE_N(HID_USAGE_CONSUMER_AC_PAN, 2), HID_LOGICAL_MIN(0x81), HID_LOGICAL_MAX(0x7f), \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_RELATIVE), HID_COLLECTION_END, HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_ABSMOUSE(...) \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + /* Report ID if any */\ + __VA_ARGS__ \ + HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\ + HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\ + HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ + HID_USAGE_MIN ( 1 ) ,\ + HID_USAGE_MAX ( 5 ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX ( 1 ) ,\ + /* Left, Right, Middle, Backward, Forward buttons */ \ + HID_REPORT_COUNT( 5 ) ,\ + HID_REPORT_SIZE ( 1 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* 3 bit padding */ \ + HID_REPORT_COUNT( 1 ) ,\ + HID_REPORT_SIZE ( 3 ) ,\ + HID_INPUT ( HID_CONSTANT ) ,\ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + /* X, Y absolute position [0, 32767] */ \ + HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ + HID_LOGICAL_MIN ( 0x00 ) ,\ + HID_LOGICAL_MAX_N( 0x7FFF, 2 ) ,\ + HID_REPORT_SIZE ( 16 ) ,\ + HID_REPORT_COUNT ( 2 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* Vertical wheel scroll [-127, 127] */ \ + HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\ + HID_LOGICAL_MIN ( 0x81 ) ,\ + HID_LOGICAL_MAX ( 0x7f ) ,\ + HID_REPORT_COUNT( 1 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ + HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ), \ + /* Horizontal wheel scroll [-127, 127] */ \ + HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ), \ + HID_LOGICAL_MIN ( 0x81 ), \ + HID_LOGICAL_MAX ( 0x7f ), \ + HID_REPORT_COUNT( 1 ), \ + HID_REPORT_SIZE ( 8 ), \ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), \ + HID_COLLECTION_END , \ + HID_COLLECTION_END \ // Consumer Control Report Descriptor Template -#define TUD_HID_REPORT_DESC_CONSUMER(...) \ - HID_USAGE_PAGE(HID_USAGE_PAGE_CONSUMER), HID_USAGE(HID_USAGE_CONSUMER_CONTROL), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ - __VA_ARGS__ HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0x03FF, 2), HID_USAGE_MIN(0x00), \ - HID_USAGE_MAX_N(0x03FF, 2), HID_REPORT_COUNT(1), HID_REPORT_SIZE(16), \ - HID_INPUT(HID_DATA | HID_ARRAY | HID_ABSOLUTE), HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_CONSUMER(...) \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\ + HID_USAGE ( HID_USAGE_CONSUMER_CONTROL ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + /* Report ID if any */\ + __VA_ARGS__ \ + HID_LOGICAL_MIN ( 0x00 ) ,\ + HID_LOGICAL_MAX_N( 0x03FF, 2 ) ,\ + HID_USAGE_MIN ( 0x00 ) ,\ + HID_USAGE_MAX_N ( 0x03FF, 2 ) ,\ + HID_REPORT_COUNT ( 1 ) ,\ + HID_REPORT_SIZE ( 16 ) ,\ + HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ + HID_COLLECTION_END \ /* System Control Report Descriptor Template * 0x00 - do nothing @@ -271,67 +328,119 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, * 0x02 - Standby * 0x03 - Wake Host */ -#define TUD_HID_REPORT_DESC_SYSTEM_CONTROL(...) \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_SYSTEM_CONTROL), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ - __VA_ARGS__ /* 2 bit system power control */ \ - HID_LOGICAL_MIN(1), \ - HID_LOGICAL_MAX(3), HID_REPORT_COUNT(1), HID_REPORT_SIZE(2), \ - HID_USAGE(HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN), HID_USAGE(HID_USAGE_DESKTOP_SYSTEM_SLEEP), \ - HID_USAGE(HID_USAGE_DESKTOP_SYSTEM_WAKE_UP), \ - HID_INPUT(HID_DATA | HID_ARRAY | HID_ABSOLUTE), /* 6 bit padding */ \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(6), HID_INPUT(HID_CONSTANT), HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_SYSTEM_CONTROL(...) \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_CONTROL ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + /* Report ID if any */\ + __VA_ARGS__ \ + /* 2 bit system power control */ \ + HID_LOGICAL_MIN ( 1 ) ,\ + HID_LOGICAL_MAX ( 3 ) ,\ + HID_REPORT_COUNT ( 1 ) ,\ + HID_REPORT_SIZE ( 2 ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_SLEEP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_WAKE_UP ) ,\ + HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ + /* 6 bit padding */ \ + HID_REPORT_COUNT ( 1 ) ,\ + HID_REPORT_SIZE ( 6 ) ,\ + HID_INPUT ( HID_CONSTANT ) ,\ + HID_COLLECTION_END \ // Gamepad Report Descriptor Template // with 32 buttons, 2 joysticks and 1 hat/dpad with following layout // | X | Y | Z | Rz | Rx | Ry (1 byte each) | hat/DPAD (1 byte) | Button Map (4 bytes) | -#define TUD_HID_REPORT_DESC_GAMEPAD(...) \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_GAMEPAD), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ - __VA_ARGS__ /* 8 bit X, Y, Z, Rz, Rx, Ry (min -127, max 127 ) */ \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \ - HID_USAGE(HID_USAGE_DESKTOP_X), HID_USAGE(HID_USAGE_DESKTOP_Y), \ - HID_USAGE(HID_USAGE_DESKTOP_Z), HID_USAGE(HID_USAGE_DESKTOP_RZ), \ - HID_USAGE(HID_USAGE_DESKTOP_RX), HID_USAGE(HID_USAGE_DESKTOP_RY), HID_LOGICAL_MIN(0x81), \ - HID_LOGICAL_MAX(0x7f), HID_REPORT_COUNT(6), HID_REPORT_SIZE(8), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 8 bit DPad/Hat Button Map */ \ - HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_USAGE(HID_USAGE_DESKTOP_HAT_SWITCH), \ - HID_LOGICAL_MIN(1), HID_LOGICAL_MAX(8), HID_PHYSICAL_MIN(0), HID_PHYSICAL_MAX_N(315, 2), \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(8), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* 32 bit Button Map */ \ - HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), HID_USAGE_MAX(32), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), HID_REPORT_COUNT(32), HID_REPORT_SIZE(1), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_GAMEPAD(...) \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_GAMEPAD ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + /* Report ID if any */\ + __VA_ARGS__ \ + /* 8 bit X, Y, Z, Rz, Rx, Ry (min -127, max 127 ) */ \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_Z ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_RZ ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_RX ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_RY ) ,\ + HID_LOGICAL_MIN ( 0x81 ) ,\ + HID_LOGICAL_MAX ( 0x7f ) ,\ + HID_REPORT_COUNT ( 6 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* 8 bit DPad/Hat Button Map */ \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_HAT_SWITCH ) ,\ + HID_LOGICAL_MIN ( 1 ) ,\ + HID_LOGICAL_MAX ( 8 ) ,\ + HID_PHYSICAL_MIN ( 0 ) ,\ + HID_PHYSICAL_MAX_N ( 315, 2 ) ,\ + HID_REPORT_COUNT ( 1 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* 32 bit Button Map */ \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\ + HID_USAGE_MIN ( 1 ) ,\ + HID_USAGE_MAX ( 32 ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX ( 1 ) ,\ + HID_REPORT_COUNT ( 32 ) ,\ + HID_REPORT_SIZE ( 1 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + HID_COLLECTION_END \ // FIDO U2F Authenticator Descriptor Template // - 1st parameter is report size, which is 64 bytes maximum in U2F // - 2nd parameter is HID_REPORT_ID(n) (optional) -#define TUD_HID_REPORT_DESC_FIDO_U2F(report_size, ...) \ - HID_USAGE_PAGE_N(HID_USAGE_PAGE_FIDO, 2), HID_USAGE(HID_USAGE_FIDO_U2FHID), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ - __VA_ARGS__ /* Usage Data In */ \ - HID_USAGE(HID_USAGE_FIDO_DATA_IN), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(0xff, 2), HID_REPORT_SIZE(8), \ - HID_REPORT_COUNT(report_size), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* Usage Data Out */ \ - HID_USAGE(HID_USAGE_FIDO_DATA_OUT), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(0xff, 2), \ - HID_REPORT_SIZE(8), HID_REPORT_COUNT(report_size), \ - HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_FIDO_U2F(report_size, ...) \ + HID_USAGE_PAGE_N ( HID_USAGE_PAGE_FIDO, 2 ) ,\ + HID_USAGE ( HID_USAGE_FIDO_U2FHID ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + /* Report ID if any */ \ + __VA_ARGS__ \ + /* Usage Data In */ \ + HID_USAGE ( HID_USAGE_FIDO_DATA_IN ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX_N ( 0xff, 2 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_REPORT_COUNT ( report_size ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* Usage Data Out */ \ + HID_USAGE ( HID_USAGE_FIDO_DATA_OUT ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX_N ( 0xff, 2 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_REPORT_COUNT ( report_size ) ,\ + HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + HID_COLLECTION_END \ // HID Generic Input & Output // - 1st parameter is report size (mandatory) // - 2nd parameter is report id HID_REPORT_ID(n) (optional) -#define TUD_HID_REPORT_DESC_GENERIC_INOUT(report_size, ...) \ - HID_USAGE_PAGE_N(HID_USAGE_PAGE_VENDOR, 2), HID_USAGE(0x01), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Report ID if any */ \ - __VA_ARGS__ /* Input */ \ - HID_USAGE(0x02), \ - HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0xff, 2), HID_REPORT_SIZE(8), \ - HID_REPORT_COUNT(report_size), \ - HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), /* Output */ \ - HID_USAGE(0x03), HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0xff, 2), HID_REPORT_SIZE(8), \ - HID_REPORT_COUNT(report_size), HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_GENERIC_INOUT(report_size, ...) \ + HID_USAGE_PAGE_N ( HID_USAGE_PAGE_VENDOR, 2 ),\ + HID_USAGE ( 0x01 ),\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ),\ + /* Report ID if any */\ + __VA_ARGS__ \ + /* Input */ \ + HID_USAGE ( 0x02 ),\ + HID_LOGICAL_MIN ( 0x00 ),\ + HID_LOGICAL_MAX_N ( 0xff, 2 ),\ + HID_REPORT_SIZE ( 8 ),\ + HID_REPORT_COUNT( report_size ),\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + /* Output */ \ + HID_USAGE ( 0x03 ),\ + HID_LOGICAL_MIN ( 0x00 ),\ + HID_LOGICAL_MAX_N ( 0xff, 2 ),\ + HID_REPORT_SIZE ( 8 ),\ + HID_REPORT_COUNT( report_size ),\ + HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_COLLECTION_END \ // HID Lighting and Illumination Report Descriptor Template // - 1st parameter is report id (required) @@ -342,123 +451,181 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, // report_id+3: HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT // report_id+4: HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT // report_id+5: HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT -#define TUD_HID_REPORT_DESC_LIGHTING(report_id) \ - HID_USAGE_PAGE(HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION), \ - HID_USAGE(HID_USAGE_LIGHTING_LAMP_ARRAY), \ - HID_COLLECTION(HID_COLLECTION_APPLICATION), /* Lamp Array Attributes Report */ \ - HID_REPORT_ID(report_id) HID_USAGE(HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT), \ - HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_COUNT), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), HID_REPORT_SIZE(16), HID_REPORT_COUNT(1), \ - HID_FEATURE(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \ - HID_USAGE(HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS), \ - HID_USAGE(HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS), \ - HID_USAGE(HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS), \ - HID_USAGE(HID_USAGE_LIGHTING_LAMP_ARRAY_KIND), \ - HID_USAGE(HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS), HID_LOGICAL_MIN(0), \ - HID_LOGICAL_MAX_N(2147483647, 3), HID_REPORT_SIZE(32), HID_REPORT_COUNT(5), \ - HID_FEATURE(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \ - HID_COLLECTION_END, /* Lamp Attributes Request Report */ \ - HID_REPORT_ID(report_id + 1) HID_USAGE(HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT), \ - HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), HID_REPORT_SIZE(16), HID_REPORT_COUNT(1), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_COLLECTION_END, /* Lamp Attributes Response Report */ \ - HID_REPORT_ID(report_id + 2) \ - HID_USAGE(HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT), \ - HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), HID_REPORT_SIZE(16), HID_REPORT_COUNT(1), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_USAGE(HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS), \ - HID_USAGE(HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS), \ - HID_USAGE(HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS), \ - HID_USAGE(HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS), \ - HID_USAGE(HID_USAGE_LIGHTING_LAMP_PURPOSES), HID_LOGICAL_MIN(0), \ - HID_LOGICAL_MAX_N(2147483647, 3), HID_REPORT_SIZE(32), HID_REPORT_COUNT(5), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_LEVEL_COUNT), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT), \ - HID_USAGE(HID_USAGE_LIGHTING_IS_PROGRAMMABLE), \ - HID_USAGE(HID_USAGE_LIGHTING_INPUT_BINDING), HID_LOGICAL_MIN(0), \ - HID_LOGICAL_MAX_N(255, 2), HID_REPORT_SIZE(8), HID_REPORT_COUNT(6), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_COLLECTION_END, /* Lamp Multi-Update Report */ \ - HID_REPORT_ID(report_id + 3) HID_USAGE(HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT), \ - HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_COUNT), \ - HID_USAGE(HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(8), \ - HID_REPORT_SIZE(8), HID_REPORT_COUNT(2), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), \ - HID_REPORT_SIZE(16), HID_REPORT_COUNT(8), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), HID_LOGICAL_MIN(0), \ - HID_LOGICAL_MAX_N(255, 2), HID_REPORT_SIZE(8), HID_REPORT_COUNT(32), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_COLLECTION_END, /* Lamp Range Update Report */ \ - HID_REPORT_ID(report_id + 4) HID_USAGE(HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT), \ - HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(8), HID_REPORT_SIZE(8), HID_REPORT_COUNT(1), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID_START), HID_USAGE(HID_USAGE_LIGHTING_LAMP_ID_END), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX_N(65535, 3), HID_REPORT_SIZE(16), HID_REPORT_COUNT(2), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_USAGE(HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL), \ - HID_USAGE(HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL), HID_LOGICAL_MIN(0), \ - HID_LOGICAL_MAX_N(255, 2), HID_REPORT_SIZE(8), HID_REPORT_COUNT(4), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_COLLECTION_END, /* Lamp Array Control Report */ \ - HID_REPORT_ID(report_id + 5) HID_USAGE(HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT), \ - HID_COLLECTION(HID_COLLECTION_LOGICAL), HID_USAGE(HID_USAGE_LIGHTING_AUTONOMOUS_MODE), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), HID_REPORT_SIZE(8), HID_REPORT_COUNT(1), \ - HID_FEATURE(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_COLLECTION_END, \ - HID_COLLECTION_END +#define TUD_HID_REPORT_DESC_LIGHTING(report_id) \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY ),\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ),\ + /* Lamp Array Attributes Report */ \ + HID_REPORT_ID (report_id ) \ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT ),\ + HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_COUNT ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 65535, 3 ),\ + HID_REPORT_SIZE ( 16 ),\ + HID_REPORT_COUNT ( 1 ),\ + HID_FEATURE ( HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_KIND ),\ + HID_USAGE ( HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 2147483647, 3 ),\ + HID_REPORT_SIZE ( 32 ),\ + HID_REPORT_COUNT ( 5 ),\ + HID_FEATURE ( HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_COLLECTION_END ,\ + /* Lamp Attributes Request Report */ \ + HID_REPORT_ID ( report_id + 1 ) \ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT ),\ + HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 65535, 3 ),\ + HID_REPORT_SIZE ( 16 ),\ + HID_REPORT_COUNT ( 1 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_COLLECTION_END ,\ + /* Lamp Attributes Response Report */ \ + HID_REPORT_ID ( report_id + 2 ) \ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT ),\ + HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 65535, 3 ),\ + HID_REPORT_SIZE ( 16 ),\ + HID_REPORT_COUNT ( 1 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_USAGE ( HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS ),\ + HID_USAGE ( HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS ),\ + HID_USAGE ( HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS ),\ + HID_USAGE ( HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_PURPOSES ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 2147483647, 3 ),\ + HID_REPORT_SIZE ( 32 ),\ + HID_REPORT_COUNT ( 5 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_LEVEL_COUNT ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT ),\ + HID_USAGE ( HID_USAGE_LIGHTING_IS_PROGRAMMABLE ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INPUT_BINDING ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 255, 2 ),\ + HID_REPORT_SIZE ( 8 ),\ + HID_REPORT_COUNT ( 6 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_COLLECTION_END ,\ + /* Lamp Multi-Update Report */ \ + HID_REPORT_ID ( report_id + 3 ) \ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT ),\ + HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_COUNT ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX ( 8 ),\ + HID_REPORT_SIZE ( 8 ),\ + HID_REPORT_COUNT ( 2 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 65535, 3 ),\ + HID_REPORT_SIZE ( 16 ),\ + HID_REPORT_COUNT ( 8 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 255, 2 ),\ + HID_REPORT_SIZE ( 8 ),\ + HID_REPORT_COUNT ( 32 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_COLLECTION_END ,\ + /* Lamp Range Update Report */ \ + HID_REPORT_ID ( report_id + 4 ) \ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT ),\ + HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX ( 8 ),\ + HID_REPORT_SIZE ( 8 ),\ + HID_REPORT_COUNT ( 1 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID_START ),\ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ID_END ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 65535, 3 ),\ + HID_REPORT_SIZE ( 16 ),\ + HID_REPORT_COUNT ( 2 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_USAGE ( HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX_N ( 255, 2 ),\ + HID_REPORT_SIZE ( 8 ),\ + HID_REPORT_COUNT ( 4 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_COLLECTION_END ,\ + /* Lamp Array Control Report */ \ + HID_REPORT_ID ( report_id + 5 ) \ + HID_USAGE ( HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT ),\ + HID_COLLECTION ( HID_COLLECTION_LOGICAL ),\ + HID_USAGE ( HID_USAGE_LIGHTING_AUTONOMOUS_MODE ),\ + HID_LOGICAL_MIN ( 0 ),\ + HID_LOGICAL_MAX ( 1 ),\ + HID_REPORT_SIZE ( 8 ),\ + HID_REPORT_COUNT ( 1 ),\ + HID_FEATURE ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),\ + HID_COLLECTION_END ,\ + HID_COLLECTION_END \ //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void hidd_init(void); -bool hidd_deinit(void); -void hidd_reset(uint8_t rhport); -uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool hidd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); -bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +void hidd_init (void); +bool hidd_deinit (void); +void hidd_reset (uint8_t rhport); +uint16_t hidd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool hidd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +bool hidd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/class/hid/hid_host.c b/Libraries/tinyusb/src/class/hid/hid_host.c index 91514f16722..7639a8fc6fb 100644 --- a/Libraries/tinyusb/src/class/hid/hid_host.c +++ b/Libraries/tinyusb/src/class/hid/hid_host.c @@ -35,33 +35,33 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUH_HID_LOG_LEVEL -#define CFG_TUH_HID_LOG_LEVEL CFG_TUH_LOG_LEVEL + #define CFG_TUH_HID_LOG_LEVEL CFG_TUH_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_HID_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_HID_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ typedef struct { - uint8_t daddr; + uint8_t daddr; - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; - bool mounted; // Enumeration is complete + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; + bool mounted; // Enumeration is complete - uint8_t itf_protocol; // None, Keyboard, Mouse - uint8_t protocol_mode; // Boot (0) or Report protocol (1) + uint8_t itf_protocol; // None, Keyboard, Mouse + uint8_t protocol_mode; // Boot (0) or Report protocol (1) - uint8_t report_desc_type; - uint16_t report_desc_len; + uint8_t report_desc_type; + uint16_t report_desc_len; - uint16_t epin_size; - uint16_t epout_size; + uint16_t epin_size; + uint16_t epout_size; - CFG_TUH_MEM_ALIGN uint8_t epin_buf[CFG_TUH_HID_EPIN_BUFSIZE]; - CFG_TUH_MEM_ALIGN uint8_t epout_buf[CFG_TUH_HID_EPOUT_BUFSIZE]; + CFG_TUH_MEM_ALIGN uint8_t epin_buf[CFG_TUH_HID_EPIN_BUFSIZE]; + CFG_TUH_MEM_ALIGN uint8_t epout_buf[CFG_TUH_HID_EPOUT_BUFSIZE]; } hidh_interface_t; CFG_TUH_MEM_SECTION @@ -72,277 +72,271 @@ tu_static uint8_t _hidh_default_protocol = HID_PROTOCOL_BOOT; //--------------------------------------------------------------------+ // Helper //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline hidh_interface_t *get_hid_itf(uint8_t daddr, uint8_t idx) -{ - TU_ASSERT(daddr > 0 && idx < CFG_TUH_HID, NULL); - hidh_interface_t *p_hid = &_hidh_itf[idx]; - return (p_hid->daddr == daddr) ? p_hid : NULL; +TU_ATTR_ALWAYS_INLINE static inline hidh_interface_t* get_hid_itf(uint8_t daddr, uint8_t idx) { + TU_ASSERT(daddr > 0 && idx < CFG_TUH_HID, NULL); + hidh_interface_t* p_hid = &_hidh_itf[idx]; + return (p_hid->daddr == daddr) ? p_hid : NULL; } // Get instance ID by endpoint address -static uint8_t get_idx_by_epaddr(uint8_t daddr, uint8_t ep_addr) -{ - for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { - hidh_interface_t const *p_hid = &_hidh_itf[idx]; - if (p_hid->daddr == daddr && (p_hid->ep_in == ep_addr || p_hid->ep_out == ep_addr)) { - return idx; - } +static uint8_t get_idx_by_epaddr(uint8_t daddr, uint8_t ep_addr) { + for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { + hidh_interface_t const* p_hid = &_hidh_itf[idx]; + if (p_hid->daddr == daddr && + (p_hid->ep_in == ep_addr || p_hid->ep_out == ep_addr)) { + return idx; } - return TUSB_INDEX_INVALID_8; + } + return TUSB_INDEX_INVALID_8; } -static hidh_interface_t *find_new_itf(void) -{ - for (uint8_t i = 0; i < CFG_TUH_HID; i++) { - if (_hidh_itf[i].daddr == 0) - return &_hidh_itf[i]; - } - return NULL; +static hidh_interface_t* find_new_itf(void) { + for (uint8_t i = 0; i < CFG_TUH_HID; i++) { + if (_hidh_itf[i].daddr == 0) return &_hidh_itf[i]; + } + return NULL; } //--------------------------------------------------------------------+ // Interface API //--------------------------------------------------------------------+ -uint8_t tuh_hid_itf_get_count(uint8_t daddr) -{ - uint8_t count = 0; - for (uint8_t i = 0; i < CFG_TUH_HID; i++) { - if (_hidh_itf[i].daddr == daddr) - count++; - } - return count; +uint8_t tuh_hid_itf_get_count(uint8_t daddr) { + uint8_t count = 0; + for (uint8_t i = 0; i < CFG_TUH_HID; i++) { + if (_hidh_itf[i].daddr == daddr) count++; + } + return count; } -uint8_t tuh_hid_itf_get_total_count(void) -{ - uint8_t count = 0; - for (uint8_t i = 0; i < CFG_TUH_HID; i++) { - if (_hidh_itf[i].daddr != 0) - count++; - } - return count; +uint8_t tuh_hid_itf_get_total_count(void) { + uint8_t count = 0; + for (uint8_t i = 0; i < CFG_TUH_HID; i++) { + if (_hidh_itf[i].daddr != 0) count++; + } + return count; } -bool tuh_hid_mounted(uint8_t daddr, uint8_t idx) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); - return p_hid->mounted; +bool tuh_hid_mounted(uint8_t daddr, uint8_t idx) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); + return p_hid->mounted; } -bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t *info) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid && info); +bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t* info) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid && info); - info->daddr = daddr; + info->daddr = daddr; - // re-construct descriptor - tusb_desc_interface_t *desc = &info->desc; - desc->bLength = sizeof(tusb_desc_interface_t); - desc->bDescriptorType = TUSB_DESC_INTERFACE; + // re-construct descriptor + tusb_desc_interface_t* desc = &info->desc; + desc->bLength = sizeof(tusb_desc_interface_t); + desc->bDescriptorType = TUSB_DESC_INTERFACE; - desc->bInterfaceNumber = p_hid->itf_num; - desc->bAlternateSetting = 0; - desc->bNumEndpoints = (uint8_t)((p_hid->ep_in ? 1u : 0u) + (p_hid->ep_out ? 1u : 0u)); - desc->bInterfaceClass = TUSB_CLASS_HID; - desc->bInterfaceSubClass = (p_hid->itf_protocol ? HID_SUBCLASS_BOOT : HID_SUBCLASS_NONE); - desc->bInterfaceProtocol = p_hid->itf_protocol; - desc->iInterface = 0; // not used yet + desc->bInterfaceNumber = p_hid->itf_num; + desc->bAlternateSetting = 0; + desc->bNumEndpoints = (uint8_t) ((p_hid->ep_in ? 1u : 0u) + (p_hid->ep_out ? 1u : 0u)); + desc->bInterfaceClass = TUSB_CLASS_HID; + desc->bInterfaceSubClass = (p_hid->itf_protocol ? HID_SUBCLASS_BOOT : HID_SUBCLASS_NONE); + desc->bInterfaceProtocol = p_hid->itf_protocol; + desc->iInterface = 0; // not used yet - return true; + return true; } -uint8_t tuh_hid_itf_get_index(uint8_t daddr, uint8_t itf_num) -{ - for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { - hidh_interface_t const *p_hid = &_hidh_itf[idx]; - if (p_hid->daddr == daddr && p_hid->itf_num == itf_num) - return idx; - } +uint8_t tuh_hid_itf_get_index(uint8_t daddr, uint8_t itf_num) { + for (uint8_t idx = 0; idx < CFG_TUH_HID; idx++) { + hidh_interface_t const* p_hid = &_hidh_itf[idx]; + if (p_hid->daddr == daddr && p_hid->itf_num == itf_num) return idx; + } - return TUSB_INDEX_INVALID_8; + return TUSB_INDEX_INVALID_8; } -uint8_t tuh_hid_interface_protocol(uint8_t daddr, uint8_t idx) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - return p_hid ? p_hid->itf_protocol : 0; +uint8_t tuh_hid_interface_protocol(uint8_t daddr, uint8_t idx) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + return p_hid ? p_hid->itf_protocol : 0; } //--------------------------------------------------------------------+ // Control Endpoint API //--------------------------------------------------------------------+ -uint8_t tuh_hid_get_protocol(uint8_t daddr, uint8_t idx) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - return p_hid ? p_hid->protocol_mode : 0; +uint8_t tuh_hid_get_protocol(uint8_t daddr, uint8_t idx) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + return p_hid ? p_hid->protocol_mode : 0; } -static void set_protocol_complete(tuh_xfer_t *xfer) -{ - uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); - uint8_t const daddr = xfer->daddr; - uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); +static void set_protocol_complete(tuh_xfer_t* xfer) { + uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); + uint8_t const daddr = xfer->daddr; + uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid, ); + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid,); - if (XFER_RESULT_SUCCESS == xfer->result) { - p_hid->protocol_mode = (uint8_t)tu_le16toh(xfer->setup->wValue); - } + if (XFER_RESULT_SUCCESS == xfer->result) { + p_hid->protocol_mode = (uint8_t) tu_le16toh(xfer->setup->wValue); + } - if (tuh_hid_set_protocol_complete_cb) { - tuh_hid_set_protocol_complete_cb(daddr, idx, p_hid->protocol_mode); - } + if (tuh_hid_set_protocol_complete_cb) { + tuh_hid_set_protocol_complete_cb(daddr, idx, p_hid->protocol_mode); + } } -void tuh_hid_set_default_protocol(uint8_t protocol) -{ - _hidh_default_protocol = protocol; +void tuh_hid_set_default_protocol(uint8_t protocol) { + _hidh_default_protocol = protocol; } static bool _hidh_set_protocol(uint8_t daddr, uint8_t itf_num, uint8_t protocol, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - TU_LOG_DRV("HID Set Protocol = %d\r\n", protocol); - - tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = - TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT }, - .bRequest = HID_REQ_CONTROL_SET_PROTOCOL, - .wValue = protocol, - .wIndex = itf_num, - .wLength = 0 }; - - tuh_xfer_t xfer = { .daddr = daddr, - .ep_addr = 0, - .setup = &request, - .buffer = NULL, - .complete_cb = complete_cb, - .user_data = user_data }; - - return tuh_control_xfer(&xfer); -} - -bool tuh_hid_set_protocol(uint8_t daddr, uint8_t idx, uint8_t protocol) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid && p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE); - - return _hidh_set_protocol(daddr, p_hid->itf_num, protocol, set_protocol_complete, 0); -} - -static void get_report_complete(tuh_xfer_t *xfer) -{ - TU_LOG_DRV("HID Get Report complete\r\n"); - - if (tuh_hid_get_report_complete_cb) { - uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); - - uint8_t const report_type = tu_u16_high(xfer->setup->wValue); - uint8_t const report_id = tu_u16_low(xfer->setup->wValue); - - tuh_hid_get_report_complete_cb( - xfer->daddr, idx, report_id, report_type, - (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); - } -} + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + TU_LOG_DRV("HID Set Protocol = %d\r\n", protocol); + + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT + }, + .bRequest = HID_REQ_CONTROL_SET_PROTOCOL, + .wValue = protocol, + .wIndex = itf_num, + .wLength = 0 + }; + + tuh_xfer_t xfer = { + .daddr = daddr, + .ep_addr = 0, + .setup = &request, + .buffer = NULL, + .complete_cb = complete_cb, + .user_data = user_data + }; + + return tuh_control_xfer(&xfer); +} + +bool tuh_hid_set_protocol(uint8_t daddr, uint8_t idx, uint8_t protocol) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid && p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE); + + return _hidh_set_protocol(daddr, p_hid->itf_num, protocol, set_protocol_complete, 0); +} + +static void get_report_complete(tuh_xfer_t* xfer) { + TU_LOG_DRV("HID Get Report complete\r\n"); + + if (tuh_hid_get_report_complete_cb) { + uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); + + uint8_t const report_type = tu_u16_high(xfer->setup->wValue); + uint8_t const report_id = tu_u16_low(xfer->setup->wValue); + + tuh_hid_get_report_complete_cb(xfer->daddr, idx, report_id, report_type, + (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); + } +} + +bool tuh_hid_get_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); + TU_LOG_DRV("HID Get Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); + + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_IN + }, + .bRequest = HID_REQ_CONTROL_GET_REPORT, + .wValue = tu_htole16(tu_u16(report_type, report_id)), + .wIndex = tu_htole16((uint16_t) p_hid->itf_num), + .wLength = len + }; + + tuh_xfer_t xfer = { + .daddr = daddr, + .ep_addr = 0, + .setup = &request, + .buffer = report, + .complete_cb = get_report_complete, + .user_data = 0 + }; + + return tuh_control_xfer(&xfer); +} + +static void set_report_complete(tuh_xfer_t* xfer) { + TU_LOG_DRV("HID Set Report complete\r\n"); + + if (tuh_hid_set_report_complete_cb) { + uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); + uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); + + uint8_t const report_type = tu_u16_high(xfer->setup->wValue); + uint8_t const report_id = tu_u16_low(xfer->setup->wValue); + + tuh_hid_set_report_complete_cb(xfer->daddr, idx, report_id, report_type, + (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); + } +} + +bool tuh_hid_set_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); + TU_LOG_DRV("HID Set Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); + + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT + }, + .bRequest = HID_REQ_CONTROL_SET_REPORT, + .wValue = tu_htole16(tu_u16(report_type, report_id)), + .wIndex = tu_htole16((uint16_t) p_hid->itf_num), + .wLength = len + }; + + tuh_xfer_t xfer = { + .daddr = daddr, + .ep_addr = 0, + .setup = &request, + .buffer = report, + .complete_cb = set_report_complete, + .user_data = 0 + }; -bool tuh_hid_get_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, - void *report, uint16_t len) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); - TU_LOG_DRV("HID Get Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); - - tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = - TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_IN }, - .bRequest = HID_REQ_CONTROL_GET_REPORT, - .wValue = tu_htole16(tu_u16(report_type, report_id)), - .wIndex = tu_htole16((uint16_t)p_hid->itf_num), - .wLength = len }; - - tuh_xfer_t xfer = { .daddr = daddr, - .ep_addr = 0, - .setup = &request, - .buffer = report, - .complete_cb = get_report_complete, - .user_data = 0 }; - - return tuh_control_xfer(&xfer); -} - -static void set_report_complete(tuh_xfer_t *xfer) -{ - TU_LOG_DRV("HID Set Report complete\r\n"); - - if (tuh_hid_set_report_complete_cb) { - uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); - uint8_t const idx = tuh_hid_itf_get_index(xfer->daddr, itf_num); - - uint8_t const report_type = tu_u16_high(xfer->setup->wValue); - uint8_t const report_id = tu_u16_low(xfer->setup->wValue); - - tuh_hid_set_report_complete_cb( - xfer->daddr, idx, report_id, report_type, - (xfer->result == XFER_RESULT_SUCCESS) ? xfer->setup->wLength : 0); - } -} - -bool tuh_hid_set_report(uint8_t daddr, uint8_t idx, uint8_t report_id, uint8_t report_type, - void *report, uint16_t len) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); - TU_LOG_DRV("HID Set Report: id = %u, type = %u, len = %u\r\n", report_id, report_type, len); - - tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = - TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT }, - .bRequest = HID_REQ_CONTROL_SET_REPORT, - .wValue = tu_htole16(tu_u16(report_type, report_id)), - .wIndex = tu_htole16((uint16_t)p_hid->itf_num), - .wLength = len }; - - tuh_xfer_t xfer = { .daddr = daddr, - .ep_addr = 0, - .setup = &request, - .buffer = report, - .complete_cb = set_report_complete, - .user_data = 0 }; - - return tuh_control_xfer(&xfer); + return tuh_control_xfer(&xfer); } static bool _hidh_set_idle(uint8_t daddr, uint8_t itf_num, uint16_t idle_rate, - tuh_xfer_cb_t complete_cb, uintptr_t user_data) -{ - // SET IDLE request, device can stall if not support this request - TU_LOG_DRV("HID Set Idle \r\n"); - - tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = - TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_OUT }, - .bRequest = HID_REQ_CONTROL_SET_IDLE, - .wValue = tu_htole16(idle_rate), - .wIndex = tu_htole16((uint16_t)itf_num), - .wLength = 0 }; - - tuh_xfer_t xfer = { .daddr = daddr, - .ep_addr = 0, - .setup = &request, - .buffer = NULL, - .complete_cb = complete_cb, - .user_data = user_data }; - - return tuh_control_xfer(&xfer); + tuh_xfer_cb_t complete_cb, uintptr_t user_data) { + // SET IDLE request, device can stall if not support this request + TU_LOG_DRV("HID Set Idle \r\n"); + + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_OUT + }, + .bRequest = HID_REQ_CONTROL_SET_IDLE, + .wValue = tu_htole16(idle_rate), + .wIndex = tu_htole16((uint16_t) itf_num), + .wLength = 0 + }; + + tuh_xfer_t xfer = { + .daddr = daddr, + .ep_addr = 0, + .setup = &request, + .buffer = NULL, + .complete_cb = complete_cb, + .user_data = user_data + }; + + return tuh_control_xfer(&xfer); } //--------------------------------------------------------------------+ @@ -350,459 +344,413 @@ static bool _hidh_set_idle(uint8_t daddr, uint8_t itf_num, uint16_t idle_rate, //--------------------------------------------------------------------+ // Check if HID interface is ready to receive report -bool tuh_hid_receive_ready(uint8_t dev_addr, uint8_t idx) -{ - hidh_interface_t *p_hid = get_hid_itf(dev_addr, idx); - TU_VERIFY(p_hid); - return !usbh_edpt_busy(dev_addr, p_hid->ep_in); +bool tuh_hid_receive_ready(uint8_t dev_addr, uint8_t idx) { + hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); + TU_VERIFY(p_hid); + return !usbh_edpt_busy(dev_addr, p_hid->ep_in); } -bool tuh_hid_receive_report(uint8_t daddr, uint8_t idx) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); +bool tuh_hid_receive_report(uint8_t daddr, uint8_t idx) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); - // claim endpoint - TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_in)); + // claim endpoint + TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_in)); - if (!usbh_edpt_xfer(daddr, p_hid->ep_in, p_hid->epin_buf, p_hid->epin_size)) { - usbh_edpt_release(daddr, p_hid->ep_in); - return false; - } + if (!usbh_edpt_xfer(daddr, p_hid->ep_in, p_hid->epin_buf, p_hid->epin_size)) { + usbh_edpt_release(daddr, p_hid->ep_in); + return false; + } - return true; + return true; } -bool tuh_hid_receive_abort(uint8_t dev_addr, uint8_t idx) -{ - hidh_interface_t *p_hid = get_hid_itf(dev_addr, idx); - TU_VERIFY(p_hid); - return tuh_edpt_abort_xfer(dev_addr, p_hid->ep_in); +bool tuh_hid_receive_abort(uint8_t dev_addr, uint8_t idx) { + hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); + TU_VERIFY(p_hid); + return tuh_edpt_abort_xfer(dev_addr, p_hid->ep_in); } -bool tuh_hid_send_ready(uint8_t dev_addr, uint8_t idx) -{ - hidh_interface_t *p_hid = get_hid_itf(dev_addr, idx); - TU_VERIFY(p_hid); - return !usbh_edpt_busy(dev_addr, p_hid->ep_out); +bool tuh_hid_send_ready(uint8_t dev_addr, uint8_t idx) { + hidh_interface_t* p_hid = get_hid_itf(dev_addr, idx); + TU_VERIFY(p_hid); + return !usbh_edpt_busy(dev_addr, p_hid->ep_out); } -bool tuh_hid_send_report(uint8_t daddr, uint8_t idx, uint8_t report_id, const void *report, - uint16_t len) -{ - TU_LOG_DRV("HID Send Report %d\r\n", report_id); +bool tuh_hid_send_report(uint8_t daddr, uint8_t idx, uint8_t report_id, const void* report, uint16_t len) { + TU_LOG_DRV("HID Send Report %d\r\n", report_id); - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); - if (p_hid->ep_out == 0) { - // This HID does not have an out endpoint (other than control) - return false; - } else if (len > CFG_TUH_HID_EPOUT_BUFSIZE || - (report_id != 0 && len > (CFG_TUH_HID_EPOUT_BUFSIZE - 1))) { - // ep_out buffer is not large enough to hold contents - return false; - } + if (p_hid->ep_out == 0) { + // This HID does not have an out endpoint (other than control) + return false; + } else if (len > CFG_TUH_HID_EPOUT_BUFSIZE || + (report_id != 0 && len > (CFG_TUH_HID_EPOUT_BUFSIZE - 1))) { + // ep_out buffer is not large enough to hold contents + return false; + } - // claim endpoint - TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_out)); + // claim endpoint + TU_VERIFY(usbh_edpt_claim(daddr, p_hid->ep_out)); - if (report_id == 0) { - // No report ID in transmission - memcpy(&p_hid->epout_buf[0], report, len); - } else { - p_hid->epout_buf[0] = report_id; - memcpy(&p_hid->epout_buf[1], report, len); - ++len; // 1 more byte for report_id - } + if (report_id == 0) { + // No report ID in transmission + memcpy(&p_hid->epout_buf[0], report, len); + } else { + p_hid->epout_buf[0] = report_id; + memcpy(&p_hid->epout_buf[1], report, len); + ++len; // 1 more byte for report_id + } - TU_LOG3_MEM(p_hid->epout_buf, len, 2); + TU_LOG3_MEM(p_hid->epout_buf, len, 2); - if (!usbh_edpt_xfer(daddr, p_hid->ep_out, p_hid->epout_buf, len)) { - usbh_edpt_release(daddr, p_hid->ep_out); - return false; - } + if (!usbh_edpt_xfer(daddr, p_hid->ep_out, p_hid->epout_buf, len)) { + usbh_edpt_release(daddr, p_hid->ep_out); + return false; + } - return true; + return true; } //--------------------------------------------------------------------+ // USBH API //--------------------------------------------------------------------+ -bool hidh_init(void) -{ - TU_LOG_DRV("sizeof(hidh_interface_t) = %u\r\n", sizeof(hidh_interface_t)); - tu_memclr(_hidh_itf, sizeof(_hidh_itf)); - return true; +bool hidh_init(void) { + TU_LOG_DRV("sizeof(hidh_interface_t) = %u\r\n", sizeof(hidh_interface_t)); + tu_memclr(_hidh_itf, sizeof(_hidh_itf)); + return true; } -bool hidh_deinit(void) -{ - return true; +bool hidh_deinit(void) { + return true; } -bool hidh_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) -{ - (void)result; +bool hidh_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { + (void) result; - uint8_t const dir = tu_edpt_dir(ep_addr); - uint8_t const idx = get_idx_by_epaddr(daddr, ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const idx = get_idx_by_epaddr(daddr, ep_addr); - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid); + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid); - if (dir == TUSB_DIR_IN) { - TU_LOG_DRV(" Get Report callback (%u, %u)\r\n", daddr, idx); - TU_LOG3_MEM(p_hid->epin_buf, xferred_bytes, 2); - tuh_hid_report_received_cb(daddr, idx, p_hid->epin_buf, (uint16_t)xferred_bytes); - } else { - if (tuh_hid_report_sent_cb) { - tuh_hid_report_sent_cb(daddr, idx, p_hid->epout_buf, (uint16_t)xferred_bytes); - } + if (dir == TUSB_DIR_IN) { + TU_LOG_DRV(" Get Report callback (%u, %u)\r\n", daddr, idx); + TU_LOG3_MEM(p_hid->epin_buf, xferred_bytes, 2); + tuh_hid_report_received_cb(daddr, idx, p_hid->epin_buf, (uint16_t) xferred_bytes); + } else { + if (tuh_hid_report_sent_cb) { + tuh_hid_report_sent_cb(daddr, idx, p_hid->epout_buf, (uint16_t) xferred_bytes); } + } - return true; + return true; } -void hidh_close(uint8_t daddr) -{ - for (uint8_t i = 0; i < CFG_TUH_HID; i++) { - hidh_interface_t *p_hid = &_hidh_itf[i]; - if (p_hid->daddr == daddr) { - TU_LOG_DRV(" HIDh close addr = %u index = %u\r\n", daddr, i); - if (tuh_hid_umount_cb) - tuh_hid_umount_cb(daddr, i); - tu_memclr(p_hid, sizeof(hidh_interface_t)); - } +void hidh_close(uint8_t daddr) { + for (uint8_t i = 0; i < CFG_TUH_HID; i++) { + hidh_interface_t* p_hid = &_hidh_itf[i]; + if (p_hid->daddr == daddr) { + TU_LOG_DRV(" HIDh close addr = %u index = %u\r\n", daddr, i); + if (tuh_hid_umount_cb) tuh_hid_umount_cb(daddr, i); + tu_memclr(p_hid, sizeof(hidh_interface_t)); } + } } //--------------------------------------------------------------------+ // Enumeration //--------------------------------------------------------------------+ -bool hidh_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const *desc_itf, - uint16_t max_len) -{ - (void)rhport; - (void)max_len; +bool hidh_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const* desc_itf, uint16_t max_len) { + (void) rhport; + (void) max_len; - TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass); - TU_LOG_DRV("[%u] HID opening Interface %u\r\n", daddr, desc_itf->bInterfaceNumber); + TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass); + TU_LOG_DRV("[%u] HID opening Interface %u\r\n", daddr, desc_itf->bInterfaceNumber); - // len = interface + hid + n*endpoints - uint16_t const drv_len = - (uint16_t)(sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + - desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); - TU_ASSERT(max_len >= drv_len); - uint8_t const *p_desc = (uint8_t const *)desc_itf; + // len = interface + hid + n*endpoints + uint16_t const drv_len = (uint16_t) (sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + + desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); + TU_ASSERT(max_len >= drv_len); + uint8_t const* p_desc = (uint8_t const*) desc_itf; - //------------- HID descriptor -------------// - p_desc = tu_desc_next(p_desc); - tusb_hid_descriptor_hid_t const *desc_hid = (tusb_hid_descriptor_hid_t const *)p_desc; - TU_ASSERT(HID_DESC_TYPE_HID == desc_hid->bDescriptorType); + //------------- HID descriptor -------------// + p_desc = tu_desc_next(p_desc); + tusb_hid_descriptor_hid_t const* desc_hid = (tusb_hid_descriptor_hid_t const*) p_desc; + TU_ASSERT(HID_DESC_TYPE_HID == desc_hid->bDescriptorType); - hidh_interface_t *p_hid = find_new_itf(); - TU_ASSERT(p_hid); // not enough interface, try to increase CFG_TUH_HID - p_hid->daddr = daddr; + hidh_interface_t* p_hid = find_new_itf(); + TU_ASSERT(p_hid); // not enough interface, try to increase CFG_TUH_HID + p_hid->daddr = daddr; - //------------- Endpoint Descriptors -------------// - p_desc = tu_desc_next(p_desc); - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; - - for (int i = 0; i < desc_itf->bNumEndpoints; i++) { - TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType); - TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); - - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { - p_hid->ep_in = desc_ep->bEndpointAddress; - p_hid->epin_size = tu_edpt_packet_size(desc_ep); - } else { - p_hid->ep_out = desc_ep->bEndpointAddress; - p_hid->epout_size = tu_edpt_packet_size(desc_ep); - } + //------------- Endpoint Descriptors -------------// + p_desc = tu_desc_next(p_desc); + tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const*) p_desc; - p_desc = tu_desc_next(p_desc); - desc_ep = (tusb_desc_endpoint_t const *)p_desc; + for (int i = 0; i < desc_itf->bNumEndpoints; i++) { + TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType); + TU_ASSERT(tuh_edpt_open(daddr, desc_ep)); + + if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { + p_hid->ep_in = desc_ep->bEndpointAddress; + p_hid->epin_size = tu_edpt_packet_size(desc_ep); + } else { + p_hid->ep_out = desc_ep->bEndpointAddress; + p_hid->epout_size = tu_edpt_packet_size(desc_ep); } - p_hid->itf_num = desc_itf->bInterfaceNumber; + p_desc = tu_desc_next(p_desc); + desc_ep = (tusb_desc_endpoint_t const*) p_desc; + } - // Assume bNumDescriptors = 1 - p_hid->report_desc_type = desc_hid->bReportType; - p_hid->report_desc_len = tu_unaligned_read16(&desc_hid->wReportLength); + p_hid->itf_num = desc_itf->bInterfaceNumber; - // Per HID Specs: default is Report protocol, though we will force Boot protocol when set_config - p_hid->protocol_mode = _hidh_default_protocol; - if (HID_SUBCLASS_BOOT == desc_itf->bInterfaceSubClass) { - p_hid->itf_protocol = desc_itf->bInterfaceProtocol; - } + // Assume bNumDescriptors = 1 + p_hid->report_desc_type = desc_hid->bReportType; + p_hid->report_desc_len = tu_unaligned_read16(&desc_hid->wReportLength); + + // Per HID Specs: default is Report protocol, though we will force Boot protocol when set_config + p_hid->protocol_mode = _hidh_default_protocol; + if (HID_SUBCLASS_BOOT == desc_itf->bInterfaceSubClass) { + p_hid->itf_protocol = desc_itf->bInterfaceProtocol; + } - return true; + return true; } //--------------------------------------------------------------------+ // Set Configure //--------------------------------------------------------------------+ -enum { CONFG_SET_IDLE, CONFIG_SET_PROTOCOL, CONFIG_GET_REPORT_DESC, CONFIG_COMPLETE }; +enum { + CONFG_SET_IDLE, + CONFIG_SET_PROTOCOL, + CONFIG_GET_REPORT_DESC, + CONFIG_COMPLETE +}; -static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const *desc_report, - uint16_t desc_len); -static void process_set_config(tuh_xfer_t *xfer); +static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const* desc_report, uint16_t desc_len); +static void process_set_config(tuh_xfer_t* xfer); -bool hidh_set_config(uint8_t daddr, uint8_t itf_num) -{ - tusb_control_request_t request; - request.wIndex = tu_htole16((uint16_t)itf_num); +bool hidh_set_config(uint8_t daddr, uint8_t itf_num) { + tusb_control_request_t request; + request.wIndex = tu_htole16((uint16_t) itf_num); - tuh_xfer_t xfer; - xfer.daddr = daddr; - xfer.result = XFER_RESULT_SUCCESS; - xfer.setup = &request; - xfer.user_data = CONFG_SET_IDLE; + tuh_xfer_t xfer; + xfer.daddr = daddr; + xfer.result = XFER_RESULT_SUCCESS; + xfer.setup = &request; + xfer.user_data = CONFG_SET_IDLE; - // fake request to kick-off the set config process - process_set_config(&xfer); + // fake request to kick-off the set config process + process_set_config(&xfer); - return true; + return true; } -static void process_set_config(tuh_xfer_t *xfer) -{ - // Stall is a valid response for SET_IDLE, sometime SET_PROTOCOL as well - // therefore we could ignore its result - if (!(xfer->setup->bRequest == HID_REQ_CONTROL_SET_IDLE || - xfer->setup->bRequest == HID_REQ_CONTROL_SET_PROTOCOL)) { - TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS, ); - } +static void process_set_config(tuh_xfer_t* xfer) { + // Stall is a valid response for SET_IDLE, sometime SET_PROTOCOL as well + // therefore we could ignore its result + if (!(xfer->setup->bRequest == HID_REQ_CONTROL_SET_IDLE || + xfer->setup->bRequest == HID_REQ_CONTROL_SET_PROTOCOL)) { + TU_ASSERT(xfer->result == XFER_RESULT_SUCCESS,); + } - uintptr_t const state = xfer->user_data; - uint8_t const itf_num = (uint8_t)tu_le16toh(xfer->setup->wIndex); - uint8_t const daddr = xfer->daddr; + uintptr_t const state = xfer->user_data; + uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); + uint8_t const daddr = xfer->daddr; - uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid, ); + uint8_t const idx = tuh_hid_itf_get_index(daddr, itf_num); + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid,); - switch (state) { + switch (state) { case CONFG_SET_IDLE: { - // Idle rate = 0 mean only report when there is changes - const uint16_t idle_rate = 0; - const uintptr_t next_state = (p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE) ? - CONFIG_SET_PROTOCOL : - CONFIG_GET_REPORT_DESC; - _hidh_set_idle(daddr, itf_num, idle_rate, process_set_config, next_state); - break; + // Idle rate = 0 mean only report when there is changes + const uint16_t idle_rate = 0; + const uintptr_t next_state = (p_hid->itf_protocol != HID_ITF_PROTOCOL_NONE) + ? CONFIG_SET_PROTOCOL : CONFIG_GET_REPORT_DESC; + _hidh_set_idle(daddr, itf_num, idle_rate, process_set_config, next_state); + break; } case CONFIG_SET_PROTOCOL: - _hidh_set_protocol(daddr, p_hid->itf_num, _hidh_default_protocol, process_set_config, - CONFIG_GET_REPORT_DESC); - break; + _hidh_set_protocol(daddr, p_hid->itf_num, _hidh_default_protocol, process_set_config, CONFIG_GET_REPORT_DESC); + break; case CONFIG_GET_REPORT_DESC: - // Get Report Descriptor if possible - // using usbh enumeration buffer since report descriptor can be very long - if (p_hid->report_desc_len > CFG_TUH_ENUMERATION_BUFSIZE) { - TU_LOG_DRV("HID Skip Report Descriptor since it is too large %u bytes\r\n", - p_hid->report_desc_len); - - // Driver is mounted without report descriptor - config_driver_mount_complete(daddr, idx, NULL, 0); - } else { - tuh_descriptor_get_hid_report(daddr, itf_num, p_hid->report_desc_type, 0, - usbh_get_enum_buf(), p_hid->report_desc_len, - process_set_config, CONFIG_COMPLETE); - } - break; + // Get Report Descriptor if possible + // using usbh enumeration buffer since report descriptor can be very long + if (p_hid->report_desc_len > CFG_TUH_ENUMERATION_BUFSIZE) { + TU_LOG_DRV("HID Skip Report Descriptor since it is too large %u bytes\r\n", p_hid->report_desc_len); + + // Driver is mounted without report descriptor + config_driver_mount_complete(daddr, idx, NULL, 0); + } else { + tuh_descriptor_get_hid_report(daddr, itf_num, p_hid->report_desc_type, 0, + usbh_get_enum_buf(), p_hid->report_desc_len, + process_set_config, CONFIG_COMPLETE); + } + break; case CONFIG_COMPLETE: { - uint8_t const *desc_report = usbh_get_enum_buf(); - uint16_t const desc_len = tu_le16toh(xfer->setup->wLength); + uint8_t const* desc_report = usbh_get_enum_buf(); + uint16_t const desc_len = tu_le16toh(xfer->setup->wLength); - config_driver_mount_complete(daddr, idx, desc_report, desc_len); - break; + config_driver_mount_complete(daddr, idx, desc_report, desc_len); + break; } default: - break; - } + break; + } } -static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const *desc_report, - uint16_t desc_len) -{ - hidh_interface_t *p_hid = get_hid_itf(daddr, idx); - TU_VERIFY(p_hid, ); - p_hid->mounted = true; +static void config_driver_mount_complete(uint8_t daddr, uint8_t idx, uint8_t const* desc_report, uint16_t desc_len) { + hidh_interface_t* p_hid = get_hid_itf(daddr, idx); + TU_VERIFY(p_hid,); + p_hid->mounted = true; - // enumeration is complete - if (tuh_hid_mount_cb) - tuh_hid_mount_cb(daddr, idx, desc_report, desc_len); + // enumeration is complete + if (tuh_hid_mount_cb) tuh_hid_mount_cb(daddr, idx, desc_report, desc_len); - // notify usbh that driver enumeration is complete - usbh_driver_set_config_complete(daddr, p_hid->itf_num); + // notify usbh that driver enumeration is complete + usbh_driver_set_config_complete(daddr, p_hid->itf_num); } //--------------------------------------------------------------------+ // Report Descriptor Parser //--------------------------------------------------------------------+ -uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t *report_info_arr, uint8_t arr_count, - uint8_t const *desc_report, uint16_t desc_len) -{ - // Report Item 6.2.2.2 USB HID 1.11 - union TU_ATTR_PACKED { - uint8_t byte; - struct TU_ATTR_PACKED { - uint8_t size : 2; - uint8_t type : 2; - uint8_t tag : 4; - }; - } header; - - tu_memclr(report_info_arr, arr_count * sizeof(tuh_hid_report_info_t)); - - uint8_t report_num = 0; - tuh_hid_report_info_t *info = report_info_arr; - - // current parsed report count & size from descriptor - // uint8_t ri_report_count = 0; - // uint8_t ri_report_size = 0; - - uint8_t ri_collection_depth = 0; - while (desc_len && report_num < arr_count) { - header.byte = *desc_report++; - desc_len--; - - uint8_t const tag = header.tag; - uint8_t const type = header.type; - uint8_t const size = header.size; - - uint8_t const data8 = desc_report[0]; - - TU_LOG(3, "tag = %d, type = %d, size = %d, data = ", tag, type, size); - for (uint32_t i = 0; i < size; i++) { - TU_LOG(3, "%02X ", desc_report[i]); - } - TU_LOG(3, "\r\n"); - - switch (type) { - case RI_TYPE_MAIN: - switch (tag) { - case RI_MAIN_INPUT: - break; - case RI_MAIN_OUTPUT: - break; - case RI_MAIN_FEATURE: - break; - case RI_MAIN_COLLECTION: - ri_collection_depth++; - break; - - case RI_MAIN_COLLECTION_END: - ri_collection_depth--; - if (ri_collection_depth == 0) { - info++; - report_num++; - } - break; - - default: - break; - } +uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t* report_info_arr, uint8_t arr_count, + uint8_t const* desc_report, uint16_t desc_len) { + // Report Item 6.2.2.2 USB HID 1.11 + union TU_ATTR_PACKED { + uint8_t byte; + struct TU_ATTR_PACKED { + uint8_t size : 2; + uint8_t type : 2; + uint8_t tag : 4; + }; + } header; + + tu_memclr(report_info_arr, arr_count * sizeof(tuh_hid_report_info_t)); + + uint8_t report_num = 0; + tuh_hid_report_info_t* info = report_info_arr; + + // current parsed report count & size from descriptor +// uint8_t ri_report_count = 0; +// uint8_t ri_report_size = 0; + + uint8_t ri_collection_depth = 0; + while (desc_len && report_num < arr_count) { + header.byte = *desc_report++; + desc_len--; + + uint8_t const tag = header.tag; + uint8_t const type = header.type; + uint8_t const size = header.size; + + uint8_t const data8 = desc_report[0]; + + TU_LOG(3, "tag = %d, type = %d, size = %d, data = ", tag, type, size); + for (uint32_t i = 0; i < size; i++) { + TU_LOG(3, "%02X ", desc_report[i]); + } + TU_LOG(3, "\r\n"); + + switch (type) { + case RI_TYPE_MAIN: + switch (tag) { + case RI_MAIN_INPUT: break; + case RI_MAIN_OUTPUT: break; + case RI_MAIN_FEATURE: break; + case RI_MAIN_COLLECTION: + ri_collection_depth++; break; - case RI_TYPE_GLOBAL: - switch (tag) { - case RI_GLOBAL_USAGE_PAGE: - // only take in account the "usage page" before REPORT ID - if (ri_collection_depth == 0) - memcpy(&info->usage_page, desc_report, size); - break; - - case RI_GLOBAL_LOGICAL_MIN: - break; - case RI_GLOBAL_LOGICAL_MAX: - break; - case RI_GLOBAL_PHYSICAL_MIN: - break; - case RI_GLOBAL_PHYSICAL_MAX: - break; - - case RI_GLOBAL_REPORT_ID: - info->report_id = data8; - break; - - case RI_GLOBAL_REPORT_SIZE: - // ri_report_size = data8; - break; - - case RI_GLOBAL_REPORT_COUNT: - // ri_report_count = data8; - break; - - case RI_GLOBAL_UNIT_EXPONENT: - break; - case RI_GLOBAL_UNIT: - break; - case RI_GLOBAL_PUSH: - break; - case RI_GLOBAL_POP: - break; - - default: - break; + case RI_MAIN_COLLECTION_END: + ri_collection_depth--; + if (ri_collection_depth == 0) { + info++; + report_num++; } break; - case RI_TYPE_LOCAL: - switch (tag) { - case RI_LOCAL_USAGE: - // only take in account the "usage" before starting REPORT ID - if (ri_collection_depth == 0) - info->usage = data8; - break; - - case RI_LOCAL_USAGE_MIN: - break; - case RI_LOCAL_USAGE_MAX: - break; - case RI_LOCAL_DESIGNATOR_INDEX: - break; - case RI_LOCAL_DESIGNATOR_MIN: - break; - case RI_LOCAL_DESIGNATOR_MAX: - break; - case RI_LOCAL_STRING_INDEX: - break; - case RI_LOCAL_STRING_MIN: - break; - case RI_LOCAL_STRING_MAX: - break; - case RI_LOCAL_DELIMITER: - break; - default: - break; - } + default:break; + } + break; + + case RI_TYPE_GLOBAL: + switch (tag) { + case RI_GLOBAL_USAGE_PAGE: + // only take in account the "usage page" before REPORT ID + if (ri_collection_depth == 0) memcpy(&info->usage_page, desc_report, size); + break; + + case RI_GLOBAL_LOGICAL_MIN: break; + case RI_GLOBAL_LOGICAL_MAX: break; + case RI_GLOBAL_PHYSICAL_MIN: break; + case RI_GLOBAL_PHYSICAL_MAX: break; + + case RI_GLOBAL_REPORT_ID: + info->report_id = data8; + break; + + case RI_GLOBAL_REPORT_SIZE: +// ri_report_size = data8; break; - // error - default: + case RI_GLOBAL_REPORT_COUNT: +// ri_report_count = data8; break; + + case RI_GLOBAL_UNIT_EXPONENT: break; + case RI_GLOBAL_UNIT: break; + case RI_GLOBAL_PUSH: break; + case RI_GLOBAL_POP: break; + + default: break; } + break; - desc_report += size; - desc_len -= size; - } + case RI_TYPE_LOCAL: + switch (tag) { + case RI_LOCAL_USAGE: + // only take in account the "usage" before starting REPORT ID + if (ri_collection_depth == 0) info->usage = data8; + break; - for (uint8_t i = 0; i < report_num; i++) { - info = report_info_arr + i; - TU_LOG_DRV("%u: id = %u, usage_page = %u, usage = %u\r\n", i, info->report_id, - info->usage_page, info->usage); + case RI_LOCAL_USAGE_MIN: break; + case RI_LOCAL_USAGE_MAX: break; + case RI_LOCAL_DESIGNATOR_INDEX: break; + case RI_LOCAL_DESIGNATOR_MIN: break; + case RI_LOCAL_DESIGNATOR_MAX: break; + case RI_LOCAL_STRING_INDEX: break; + case RI_LOCAL_STRING_MIN: break; + case RI_LOCAL_STRING_MAX: break; + case RI_LOCAL_DELIMITER: break; + default: break; + } + break; + + // error + default: break; } - return report_num; + desc_report += size; + desc_len -= size; + } + + for (uint8_t i = 0; i < report_num; i++) { + info = report_info_arr + i; + TU_LOG_DRV("%u: id = %u, usage_page = %u, usage = %u\r\n", i, info->report_id, info->usage_page, info->usage); + } + + return report_num; } #endif diff --git a/Libraries/tinyusb/src/class/hid/hid_host.h b/Libraries/tinyusb/src/class/hid/hid_host.h index ad5d04abb07..9681c704b30 100644 --- a/Libraries/tinyusb/src/class/hid/hid_host.h +++ b/Libraries/tinyusb/src/class/hid/hid_host.h @@ -46,14 +46,15 @@ extern "C" { #define CFG_TUH_HID_EPOUT_BUFSIZE 64 #endif + typedef struct { - uint8_t report_id; - uint8_t usage; - uint16_t usage_page; + uint8_t report_id; + uint8_t usage; + uint16_t usage_page; - // TODO still use the endpoint size for now - // uint8_t in_len; // length of IN report - // uint8_t out_len; // length of OUT report + // TODO still use the endpoint size for now +// uint8_t in_len; // length of IN report +// uint8_t out_len; // length of OUT report } tuh_hid_report_info_t; //--------------------------------------------------------------------+ @@ -67,10 +68,10 @@ uint8_t tuh_hid_itf_get_count(uint8_t dev_addr); uint8_t tuh_hid_itf_get_total_count(void); // backward compatible rename -#define tuh_hid_instance_count tuh_hid_itf_get_count +#define tuh_hid_instance_count tuh_hid_itf_get_count // Get Interface information -bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t *itf_info); +bool tuh_hid_itf_get_info(uint8_t daddr, uint8_t idx, tuh_itf_info_t* itf_info); // Get Interface index from device address + interface number // return TUSB_INDEX_INVALID_8 (0xFF) if not found @@ -84,10 +85,8 @@ bool tuh_hid_mounted(uint8_t dev_addr, uint8_t idx); // Parse report descriptor into array of report_info struct and return number of reports. // For complicated report, application should write its own parser. -TU_ATTR_UNUSED uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t *reports_info_arr, - uint8_t arr_count, - uint8_t const *desc_report, - uint16_t desc_len); +TU_ATTR_UNUSED uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t* reports_info_arr, uint8_t arr_count, + uint8_t const* desc_report, uint16_t desc_len); //--------------------------------------------------------------------+ // Control Endpoint API @@ -108,13 +107,12 @@ bool tuh_hid_set_protocol(uint8_t dev_addr, uint8_t idx, uint8_t protocol); // Get Report using control endpoint // report_type is either Input, Output or Feature, (value from hid_report_type_t) -bool tuh_hid_get_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, - void *report, uint16_t len); +bool tuh_hid_get_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, void* report, uint16_t len); // Set Report using control endpoint // report_type is either Input, Output or Feature, (value from hid_report_type_t) bool tuh_hid_set_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, - void *report, uint16_t len); + void* report, uint16_t len); //--------------------------------------------------------------------+ // Interrupt Endpoint API @@ -136,8 +134,7 @@ bool tuh_hid_send_ready(uint8_t dev_addr, uint8_t idx); // Send report using interrupt endpoint // If report_id > 0 (composite), it will be sent as 1st byte, then report contents. Otherwise only report content is sent. -bool tuh_hid_send_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, const void *report, - uint16_t len); +bool tuh_hid_send_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, const void* report, uint16_t len); //--------------------------------------------------------------------+ // Callbacks (Weak is optional) @@ -148,29 +145,25 @@ bool tuh_hid_send_report(uint8_t dev_addr, uint8_t idx, uint8_t report_id, const // can be used to parse common/simple enough descriptor. // Note: if report descriptor length > CFG_TUH_ENUMERATION_BUFSIZE, it will be skipped // therefore report_desc = NULL, desc_len = 0 -TU_ATTR_WEAK void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t idx, uint8_t const *report_desc, - uint16_t desc_len); +TU_ATTR_WEAK void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report_desc, uint16_t desc_len); // Invoked when device with hid interface is un-mounted TU_ATTR_WEAK void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t idx); // Invoked when received report from device via interrupt endpoint // Note: if there is report ID (composite), it is 1st byte of report -void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t idx, uint8_t const *report, uint16_t len); +void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report, uint16_t len); // Invoked when sent report to device successfully via interrupt endpoint -TU_ATTR_WEAK void tuh_hid_report_sent_cb(uint8_t dev_addr, uint8_t idx, uint8_t const *report, - uint16_t len); +TU_ATTR_WEAK void tuh_hid_report_sent_cb(uint8_t dev_addr, uint8_t idx, uint8_t const* report, uint16_t len); // Invoked when Get Report to device via either control endpoint // len = 0 indicate there is error in the transfer e.g stalled response -TU_ATTR_WEAK void tuh_hid_get_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, - uint8_t report_type, uint16_t len); +TU_ATTR_WEAK void tuh_hid_get_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, uint16_t len); // Invoked when Sent Report to device via either control endpoint // len = 0 indicate there is error in the transfer e.g stalled response -TU_ATTR_WEAK void tuh_hid_set_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, - uint8_t report_type, uint16_t len); +TU_ATTR_WEAK void tuh_hid_set_report_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t report_id, uint8_t report_type, uint16_t len); // Invoked when Set Protocol request is complete TU_ATTR_WEAK void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t idx, uint8_t protocol); @@ -180,8 +173,7 @@ TU_ATTR_WEAK void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t idx //--------------------------------------------------------------------+ bool hidh_init(void); bool hidh_deinit(void); -bool hidh_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, - uint16_t max_len); +bool hidh_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const* desc_itf, uint16_t max_len); bool hidh_set_config(uint8_t dev_addr, uint8_t itf_num); bool hidh_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); void hidh_close(uint8_t dev_addr); diff --git a/Libraries/tinyusb/src/class/midi/midi.h b/Libraries/tinyusb/src/class/midi/midi.h index 72f5b8ad5dc..8ddcdfda2bb 100644 --- a/Libraries/tinyusb/src/class/midi/midi.h +++ b/Libraries/tinyusb/src/class/midi/midi.h @@ -35,161 +35,176 @@ #include "common/tusb_common.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ // Class Specific Descriptor //--------------------------------------------------------------------+ -typedef enum { - MIDI_CS_INTERFACE_HEADER = 0x01, - MIDI_CS_INTERFACE_IN_JACK = 0x02, - MIDI_CS_INTERFACE_OUT_JACK = 0x03, - MIDI_CS_INTERFACE_ELEMENT = 0x04, +typedef enum +{ + MIDI_CS_INTERFACE_HEADER = 0x01, + MIDI_CS_INTERFACE_IN_JACK = 0x02, + MIDI_CS_INTERFACE_OUT_JACK = 0x03, + MIDI_CS_INTERFACE_ELEMENT = 0x04, } midi_cs_interface_subtype_t; -typedef enum { MIDI_CS_ENDPOINT_GENERAL = 0x01 } midi_cs_endpoint_subtype_t; - -typedef enum { MIDI_JACK_EMBEDDED = 0x01, MIDI_JACK_EXTERNAL = 0x02 } midi_jack_type_t; - -typedef enum { - MIDI_CIN_MISC = 0, - MIDI_CIN_CABLE_EVENT = 1, - MIDI_CIN_SYSCOM_2BYTE = 2, // 2 byte system common message e.g MTC, SongSelect - MIDI_CIN_SYSCOM_3BYTE = 3, // 3 byte system common message e.g SPP - MIDI_CIN_SYSEX_START = 4, // SysEx starts or continue - MIDI_CIN_SYSEX_END_1BYTE = 5, // SysEx ends with 1 data, or 1 byte system common message - MIDI_CIN_SYSEX_END_2BYTE = 6, // SysEx ends with 2 data - MIDI_CIN_SYSEX_END_3BYTE = 7, // SysEx ends with 3 data - MIDI_CIN_NOTE_OFF = 8, - MIDI_CIN_NOTE_ON = 9, - MIDI_CIN_POLY_KEYPRESS = 10, - MIDI_CIN_CONTROL_CHANGE = 11, - MIDI_CIN_PROGRAM_CHANGE = 12, - MIDI_CIN_CHANNEL_PRESSURE = 13, - MIDI_CIN_PITCH_BEND_CHANGE = 14, - MIDI_CIN_1BYTE_DATA = 15 +typedef enum +{ + MIDI_CS_ENDPOINT_GENERAL = 0x01 +} midi_cs_endpoint_subtype_t; + +typedef enum +{ + MIDI_JACK_EMBEDDED = 0x01, + MIDI_JACK_EXTERNAL = 0x02 +} midi_jack_type_t; + +typedef enum +{ + MIDI_CIN_MISC = 0, + MIDI_CIN_CABLE_EVENT = 1, + MIDI_CIN_SYSCOM_2BYTE = 2, // 2 byte system common message e.g MTC, SongSelect + MIDI_CIN_SYSCOM_3BYTE = 3, // 3 byte system common message e.g SPP + MIDI_CIN_SYSEX_START = 4, // SysEx starts or continue + MIDI_CIN_SYSEX_END_1BYTE = 5, // SysEx ends with 1 data, or 1 byte system common message + MIDI_CIN_SYSEX_END_2BYTE = 6, // SysEx ends with 2 data + MIDI_CIN_SYSEX_END_3BYTE = 7, // SysEx ends with 3 data + MIDI_CIN_NOTE_OFF = 8, + MIDI_CIN_NOTE_ON = 9, + MIDI_CIN_POLY_KEYPRESS = 10, + MIDI_CIN_CONTROL_CHANGE = 11, + MIDI_CIN_PROGRAM_CHANGE = 12, + MIDI_CIN_CHANNEL_PRESSURE = 13, + MIDI_CIN_PITCH_BEND_CHANGE = 14, + MIDI_CIN_1BYTE_DATA = 15 } midi_code_index_number_t; // MIDI 1.0 status byte -enum { - //------------- System Exclusive -------------// - MIDI_STATUS_SYSEX_START = 0xF0, - MIDI_STATUS_SYSEX_END = 0xF7, - - //------------- System Common -------------// - MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME = 0xF1, - MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER = 0xF2, - MIDI_STATUS_SYSCOM_SONG_SELECT = 0xF3, - // F4, F5 is undefined - MIDI_STATUS_SYSCOM_TUNE_REQUEST = 0xF6, - - //------------- System RealTime -------------// - MIDI_STATUS_SYSREAL_TIMING_CLOCK = 0xF8, - // 0xF9 is undefined - MIDI_STATUS_SYSREAL_START = 0xFA, - MIDI_STATUS_SYSREAL_CONTINUE = 0xFB, - MIDI_STATUS_SYSREAL_STOP = 0xFC, - // 0xFD is undefined - MIDI_STATUS_SYSREAL_ACTIVE_SENSING = 0xFE, - MIDI_STATUS_SYSREAL_SYSTEM_RESET = 0xFF, +enum +{ + //------------- System Exclusive -------------// + MIDI_STATUS_SYSEX_START = 0xF0, + MIDI_STATUS_SYSEX_END = 0xF7, + + //------------- System Common -------------// + MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME = 0xF1, + MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER = 0xF2, + MIDI_STATUS_SYSCOM_SONG_SELECT = 0xF3, + // F4, F5 is undefined + MIDI_STATUS_SYSCOM_TUNE_REQUEST = 0xF6, + + //------------- System RealTime -------------// + MIDI_STATUS_SYSREAL_TIMING_CLOCK = 0xF8, + // 0xF9 is undefined + MIDI_STATUS_SYSREAL_START = 0xFA, + MIDI_STATUS_SYSREAL_CONTINUE = 0xFB, + MIDI_STATUS_SYSREAL_STOP = 0xFC, + // 0xFD is undefined + MIDI_STATUS_SYSREAL_ACTIVE_SENSING = 0xFE, + MIDI_STATUS_SYSREAL_SYSTEM_RESET = 0xFF, }; /// MIDI Interface Header Descriptor -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType - uint16_t bcdMSC; ///< MidiStreaming SubClass release number in Binary-Coded Decimal - uint16_t wTotalLength; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType + uint16_t bcdMSC ; ///< MidiStreaming SubClass release number in Binary-Coded Decimal + uint16_t wTotalLength ; } midi_desc_header_t; /// MIDI In Jack Descriptor -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType - uint8_t bJackType; ///< Embedded or External - uint8_t bJackID; ///< Unique ID for MIDI IN Jack - uint8_t iJack; ///< string descriptor +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType + uint8_t bJackType ; ///< Embedded or External + uint8_t bJackID ; ///< Unique ID for MIDI IN Jack + uint8_t iJack ; ///< string descriptor } midi_desc_in_jack_t; + /// MIDI Out Jack Descriptor with single pin -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType - uint8_t bJackType; ///< Embedded or External - uint8_t bJackID; ///< Unique ID for MIDI IN Jack - uint8_t bNrInputPins; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType + uint8_t bJackType ; ///< Embedded or External + uint8_t bJackID ; ///< Unique ID for MIDI IN Jack + uint8_t bNrInputPins; - uint8_t baSourceID; - uint8_t baSourcePin; + uint8_t baSourceID; + uint8_t baSourcePin; - uint8_t iJack; ///< string descriptor -} midi_desc_out_jack_t; + uint8_t iJack ; ///< string descriptor +} midi_desc_out_jack_t ; /// MIDI Out Jack Descriptor with multiple pins #define midi_desc_out_jack_n_t(input_num) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bJackType; \ - uint8_t bJackID; \ - uint8_t bNrInputPins; \ - struct TU_ATTR_PACKED { \ - uint8_t baSourceID; \ - uint8_t baSourcePin; \ - } pins[input_num]; \ - uint8_t iJack; \ - } + struct TU_ATTR_PACKED { \ + uint8_t bLength ; \ + uint8_t bDescriptorType ; \ + uint8_t bDescriptorSubType ; \ + uint8_t bJackType ; \ + uint8_t bJackID ; \ + uint8_t bNrInputPins ; \ + struct TU_ATTR_PACKED { \ + uint8_t baSourceID; \ + uint8_t baSourcePin; \ + } pins[input_num]; \ + uint8_t iJack ; \ + } /// MIDI Element Descriptor -typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< Descriptor Type, must be Class-Specific - uint8_t bDescriptorSubType; ///< Descriptor SubType - uint8_t bElementID; - - uint8_t bNrInputPins; - uint8_t baSourceID; - uint8_t baSourcePin; - - uint8_t bNrOutputPins; - uint8_t bInTerminalLink; - uint8_t bOutTerminalLink; - uint8_t bElCapsSize; - - uint16_t bmElementCaps; - uint8_t iElement; +typedef struct TU_ATTR_PACKED +{ + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific + uint8_t bDescriptorSubType ; ///< Descriptor SubType + uint8_t bElementID; + + uint8_t bNrInputPins; + uint8_t baSourceID; + uint8_t baSourcePin; + + uint8_t bNrOutputPins; + uint8_t bInTerminalLink; + uint8_t bOutTerminalLink; + uint8_t bElCapsSize; + + uint16_t bmElementCaps; + uint8_t iElement; } midi_desc_element_t; /// MIDI Element Descriptor with multiple pins #define midi_desc_element_n_t(input_num) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bElementID; \ - uint8_t bNrInputPins; \ - struct TU_ATTR_PACKED { \ - uint8_t baSourceID; \ - uint8_t baSourcePin; \ - } pins[input_num]; \ - uint8_t bNrOutputPins; \ - uint8_t bInTerminalLink; \ - uint8_t bOutTerminalLink; \ - uint8_t bElCapsSize; \ - uint16_t bmElementCaps; \ - uint8_t iElement; \ - } + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bElementID; \ + uint8_t bNrInputPins; \ + struct TU_ATTR_PACKED { \ + uint8_t baSourceID; \ + uint8_t baSourcePin; \ + } pins[input_num]; \ + uint8_t bNrOutputPins; \ + uint8_t bInTerminalLink; \ + uint8_t bOutTerminalLink; \ + uint8_t bElCapsSize; \ + uint16_t bmElementCaps; \ + uint8_t iElement; \ + } /** @} */ #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/class/midi/midi_device.c b/Libraries/tinyusb/src/class/midi/midi_device.c index 85e9d8d0e86..42905ab0d40 100644 --- a/Libraries/tinyusb/src/class/midi/midi_device.c +++ b/Libraries/tinyusb/src/class/midi/midi_device.c @@ -40,77 +40,80 @@ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -typedef struct { - uint8_t buffer[4]; - uint8_t index; - uint8_t total; -} midid_stream_t; - -typedef struct { - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; - - // For Stream read()/write() API - // Messages are always 4 bytes long, queue them for reading and writing so the - // callers can use the Stream interface with single-byte read/write calls. - midid_stream_t stream_write; - midid_stream_t stream_read; - - /*------------- From this point, data is not cleared by bus reset -------------*/ - // FIFO - tu_fifo_t rx_ff; - tu_fifo_t tx_ff; - uint8_t rx_ff_buf[CFG_TUD_MIDI_RX_BUFSIZE]; - uint8_t tx_ff_buf[CFG_TUD_MIDI_TX_BUFSIZE]; - -#if CFG_FIFO_MUTEX - osal_mutex_def_t rx_ff_mutex; - osal_mutex_def_t tx_ff_mutex; -#endif +typedef struct +{ + uint8_t buffer[4]; + uint8_t index; + uint8_t total; +}midid_stream_t; - // Endpoint Transfer buffer - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_MIDI_EP_BUFSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_MIDI_EP_BUFSIZE]; +typedef struct +{ + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; + + // For Stream read()/write() API + // Messages are always 4 bytes long, queue them for reading and writing so the + // callers can use the Stream interface with single-byte read/write calls. + midid_stream_t stream_write; + midid_stream_t stream_read; + + /*------------- From this point, data is not cleared by bus reset -------------*/ + // FIFO + tu_fifo_t rx_ff; + tu_fifo_t tx_ff; + uint8_t rx_ff_buf[CFG_TUD_MIDI_RX_BUFSIZE]; + uint8_t tx_ff_buf[CFG_TUD_MIDI_TX_BUFSIZE]; + + #if CFG_FIFO_MUTEX + osal_mutex_def_t rx_ff_mutex; + osal_mutex_def_t tx_ff_mutex; + #endif + + // Endpoint Transfer buffer + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_MIDI_EP_BUFSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_MIDI_EP_BUFSIZE]; } midid_interface_t; -#define ITF_MEM_RESET_SIZE offsetof(midid_interface_t, rx_ff) +#define ITF_MEM_RESET_SIZE offsetof(midid_interface_t, rx_ff) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ CFG_TUD_MEM_SECTION midid_interface_t _midid_itf[CFG_TUD_MIDI]; -bool tud_midi_n_mounted(uint8_t itf) +bool tud_midi_n_mounted (uint8_t itf) { - midid_interface_t *midi = &_midid_itf[itf]; - return midi->ep_in && midi->ep_out; + midid_interface_t* midi = &_midid_itf[itf]; + return midi->ep_in && midi->ep_out; } -static void _prep_out_transaction(midid_interface_t *p_midi) +static void _prep_out_transaction (midid_interface_t* p_midi) { - uint8_t const rhport = 0; - uint16_t available = tu_fifo_remaining(&p_midi->rx_ff); - - // Prepare for incoming data but only allow what we can store in the ring buffer. - // TODO Actually we can still carry out the transfer, keeping count of received bytes - // and slowly move it to the FIFO when read(). - // This pre-check reduces endpoint claiming - TU_VERIFY(available >= sizeof(p_midi->epout_buf), ); - - // claim endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_midi->ep_out), ); - - // fifo can be changed before endpoint is claimed - available = tu_fifo_remaining(&p_midi->rx_ff); - - if (available >= sizeof(p_midi->epout_buf)) { - usbd_edpt_xfer(rhport, p_midi->ep_out, p_midi->epout_buf, sizeof(p_midi->epout_buf)); - } else { - // Release endpoint since we don't make any transfer - usbd_edpt_release(rhport, p_midi->ep_out); - } + uint8_t const rhport = 0; + uint16_t available = tu_fifo_remaining(&p_midi->rx_ff); + + // Prepare for incoming data but only allow what we can store in the ring buffer. + // TODO Actually we can still carry out the transfer, keeping count of received bytes + // and slowly move it to the FIFO when read(). + // This pre-check reduces endpoint claiming + TU_VERIFY(available >= sizeof(p_midi->epout_buf), ); + + // claim endpoint + TU_VERIFY(usbd_edpt_claim(rhport, p_midi->ep_out), ); + + // fifo can be changed before endpoint is claimed + available = tu_fifo_remaining(&p_midi->rx_ff); + + if ( available >= sizeof(p_midi->epout_buf) ) { + usbd_edpt_xfer(rhport, p_midi->ep_out, p_midi->epout_buf, sizeof(p_midi->epout_buf)); + }else + { + // Release endpoint since we don't make any transfer + usbd_edpt_release(rhport, p_midi->ep_out); + } } //--------------------------------------------------------------------+ @@ -118,420 +121,450 @@ static void _prep_out_transaction(midid_interface_t *p_midi) //--------------------------------------------------------------------+ uint32_t tud_midi_n_available(uint8_t itf, uint8_t cable_num) { - (void)cable_num; + (void) cable_num; - midid_interface_t *midi = &_midid_itf[itf]; - midid_stream_t const *stream = &midi->stream_read; + midid_interface_t* midi = &_midid_itf[itf]; + midid_stream_t const* stream = &midi->stream_read; - // when using with packet API stream total & index are both zero - return tu_fifo_count(&midi->rx_ff) + (uint8_t)(stream->total - stream->index); + // when using with packet API stream total & index are both zero + return tu_fifo_count(&midi->rx_ff) + (uint8_t) (stream->total - stream->index); } -uint32_t tud_midi_n_stream_read(uint8_t itf, uint8_t cable_num, void *buffer, uint32_t bufsize) +uint32_t tud_midi_n_stream_read(uint8_t itf, uint8_t cable_num, void* buffer, uint32_t bufsize) { - (void)cable_num; - TU_VERIFY(bufsize, 0); - - uint8_t *buf8 = (uint8_t *)buffer; - - midid_interface_t *midi = &_midid_itf[itf]; - midid_stream_t *stream = &midi->stream_read; - - uint32_t total_read = 0; - while (bufsize) { - // Get new packet from fifo, then set packet expected bytes - if (stream->total == 0) { - // return if there is no more data from fifo - if (!tud_midi_n_packet_read(itf, stream->buffer)) - return total_read; - - uint8_t const code_index = stream->buffer[0] & 0x0f; - - // MIDI 1.0 Table 4-1: Code Index Number Classifications - switch (code_index) { - case MIDI_CIN_MISC: - case MIDI_CIN_CABLE_EVENT: - // These are reserved and unused, possibly issue somewhere, skip this packet - return 0; - break; - - case MIDI_CIN_SYSEX_END_1BYTE: - case MIDI_CIN_1BYTE_DATA: - stream->total = 1; - break; - - case MIDI_CIN_SYSCOM_2BYTE: - case MIDI_CIN_SYSEX_END_2BYTE: - case MIDI_CIN_PROGRAM_CHANGE: - case MIDI_CIN_CHANNEL_PRESSURE: - stream->total = 2; - break; - - default: - stream->total = 3; - break; - } - } + (void) cable_num; + TU_VERIFY(bufsize, 0); + + uint8_t* buf8 = (uint8_t*) buffer; + + midid_interface_t* midi = &_midid_itf[itf]; + midid_stream_t* stream = &midi->stream_read; + + uint32_t total_read = 0; + while( bufsize ) + { + // Get new packet from fifo, then set packet expected bytes + if ( stream->total == 0 ) + { + // return if there is no more data from fifo + if ( !tud_midi_n_packet_read(itf, stream->buffer) ) return total_read; + + uint8_t const code_index = stream->buffer[0] & 0x0f; + + // MIDI 1.0 Table 4-1: Code Index Number Classifications + switch(code_index) + { + case MIDI_CIN_MISC: + case MIDI_CIN_CABLE_EVENT: + // These are reserved and unused, possibly issue somewhere, skip this packet + return 0; + break; + + case MIDI_CIN_SYSEX_END_1BYTE: + case MIDI_CIN_1BYTE_DATA: + stream->total = 1; + break; + + case MIDI_CIN_SYSCOM_2BYTE : + case MIDI_CIN_SYSEX_END_2BYTE : + case MIDI_CIN_PROGRAM_CHANGE : + case MIDI_CIN_CHANNEL_PRESSURE : + stream->total = 2; + break; + + default: + stream->total = 3; + break; + } + } - // Copy data up to bufsize - uint8_t const count = (uint8_t)tu_min32(stream->total - stream->index, bufsize); + // Copy data up to bufsize + uint8_t const count = (uint8_t) tu_min32(stream->total - stream->index, bufsize); - // Skip the header (1st byte) in the buffer - TU_VERIFY(0 == tu_memcpy_s(buf8, bufsize, stream->buffer + 1 + stream->index, count)); + // Skip the header (1st byte) in the buffer + TU_VERIFY(0 == tu_memcpy_s(buf8, bufsize, stream->buffer + 1 + stream->index, count)); - total_read += count; - stream->index += count; - buf8 += count; - bufsize -= count; + total_read += count; + stream->index += count; + buf8 += count; + bufsize -= count; - // complete current event packet, reset stream - if (stream->total == stream->index) { - stream->index = 0; - stream->total = 0; - } + // complete current event packet, reset stream + if ( stream->total == stream->index ) + { + stream->index = 0; + stream->total = 0; } + } - return total_read; + return total_read; } -bool tud_midi_n_packet_read(uint8_t itf, uint8_t packet[4]) +bool tud_midi_n_packet_read (uint8_t itf, uint8_t packet[4]) { - midid_interface_t *midi = &_midid_itf[itf]; - TU_VERIFY(midi->ep_out); + midid_interface_t* midi = &_midid_itf[itf]; + TU_VERIFY(midi->ep_out); - uint32_t const num_read = tu_fifo_read_n(&midi->rx_ff, packet, 4); - _prep_out_transaction(midi); - return (num_read == 4); + uint32_t const num_read = tu_fifo_read_n(&midi->rx_ff, packet, 4); + _prep_out_transaction(midi); + return (num_read == 4); } //--------------------------------------------------------------------+ // WRITE API //--------------------------------------------------------------------+ -static uint32_t write_flush(midid_interface_t *midi) +static uint32_t write_flush(midid_interface_t* midi) { - // No data to send - if (!tu_fifo_count(&midi->tx_ff)) - return 0; + // No data to send + if ( !tu_fifo_count(&midi->tx_ff) ) return 0; + + uint8_t const rhport = 0; + + // skip if previous transfer not complete + TU_VERIFY( usbd_edpt_claim(rhport, midi->ep_in), 0 ); + + uint16_t count = tu_fifo_read_n(&midi->tx_ff, midi->epin_buf, CFG_TUD_MIDI_EP_BUFSIZE); + + if (count) + { + TU_ASSERT( usbd_edpt_xfer(rhport, midi->ep_in, midi->epin_buf, count), 0 ); + return count; + }else + { + // Release endpoint since we don't make any transfer + usbd_edpt_release(rhport, midi->ep_in); + return 0; + } +} - uint8_t const rhport = 0; +uint32_t tud_midi_n_stream_write(uint8_t itf, uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize) +{ + midid_interface_t* midi = &_midid_itf[itf]; + TU_VERIFY(midi->ep_in, 0); - // skip if previous transfer not complete - TU_VERIFY(usbd_edpt_claim(rhport, midi->ep_in), 0); + midid_stream_t* stream = &midi->stream_write; - uint16_t count = tu_fifo_read_n(&midi->tx_ff, midi->epin_buf, CFG_TUD_MIDI_EP_BUFSIZE); + uint32_t i = 0; + while ( (i < bufsize) && (tu_fifo_remaining(&midi->tx_ff) >= 4) ) + { + uint8_t const data = buffer[i]; + i++; - if (count) { - TU_ASSERT(usbd_edpt_xfer(rhport, midi->ep_in, midi->epin_buf, count), 0); - return count; - } else { - // Release endpoint since we don't make any transfer - usbd_edpt_release(rhport, midi->ep_in); - return 0; - } -} + if ( stream->index == 0 ) + { + //------------- New event packet -------------// -uint32_t tud_midi_n_stream_write(uint8_t itf, uint8_t cable_num, uint8_t const *buffer, - uint32_t bufsize) -{ - midid_interface_t *midi = &_midid_itf[itf]; - TU_VERIFY(midi->ep_in, 0); - - midid_stream_t *stream = &midi->stream_write; - - uint32_t i = 0; - while ((i < bufsize) && (tu_fifo_remaining(&midi->tx_ff) >= 4)) { - uint8_t const data = buffer[i]; - i++; - - if (stream->index == 0) { - //------------- New event packet -------------// - - uint8_t const msg = data >> 4; - - stream->index = 2; - stream->buffer[1] = data; - - // Check to see if we're still in a SysEx transmit. - if (((stream->buffer[0]) & 0xF) == MIDI_CIN_SYSEX_START) { - if (data == MIDI_STATUS_SYSEX_END) { - stream->buffer[0] = (uint8_t)((cable_num << 4) | MIDI_CIN_SYSEX_END_1BYTE); - stream->total = 2; - } else { - stream->total = 4; - } - } else if ((msg >= 0x8 && msg <= 0xB) || msg == 0xE) { - // Channel Voice Messages - stream->buffer[0] = (uint8_t)((cable_num << 4) | msg); - stream->total = 4; - } else if (msg == 0xC || msg == 0xD) { - // Channel Voice Messages, two-byte variants (Program Change and Channel Pressure) - stream->buffer[0] = (uint8_t)((cable_num << 4) | msg); - stream->total = 3; - } else if (msg == 0xf) { - // System message - if (data == MIDI_STATUS_SYSEX_START) { - stream->buffer[0] = MIDI_CIN_SYSEX_START; - stream->total = 4; - } else if (data == MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME || - data == MIDI_STATUS_SYSCOM_SONG_SELECT) { - stream->buffer[0] = MIDI_CIN_SYSCOM_2BYTE; - stream->total = 3; - } else if (data == MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER) { - stream->buffer[0] = MIDI_CIN_SYSCOM_3BYTE; - stream->total = 4; - } else { - stream->buffer[0] = MIDI_CIN_SYSEX_END_1BYTE; - stream->total = 2; - } - stream->buffer[0] |= (uint8_t)(cable_num << 4); - } else { - // Pack individual bytes if we don't support packing them into words. - stream->buffer[0] = (uint8_t)(cable_num << 4 | 0xf); - stream->buffer[2] = 0; - stream->buffer[3] = 0; - stream->index = 2; - stream->total = 2; - } - } else { - //------------- On-going (buffering) packet -------------// - - TU_ASSERT(stream->index < 4, i); - stream->buffer[stream->index] = data; - stream->index++; - - // See if this byte ends a SysEx. - if ((stream->buffer[0] & 0xF) == MIDI_CIN_SYSEX_START && - data == MIDI_STATUS_SYSEX_END) { - stream->buffer[0] = - (uint8_t)((cable_num << 4) | (MIDI_CIN_SYSEX_START + (stream->index - 1))); - stream->total = stream->index; - } + uint8_t const msg = data >> 4; + + stream->index = 2; + stream->buffer[1] = data; + + // Check to see if we're still in a SysEx transmit. + if ( ((stream->buffer[0]) & 0xF) == MIDI_CIN_SYSEX_START ) + { + if ( data == MIDI_STATUS_SYSEX_END ) + { + stream->buffer[0] = (uint8_t) ((cable_num << 4) | MIDI_CIN_SYSEX_END_1BYTE); + stream->total = 2; + } + else + { + stream->total = 4; + } + } + else if ( (msg >= 0x8 && msg <= 0xB) || msg == 0xE ) + { + // Channel Voice Messages + stream->buffer[0] = (uint8_t) ((cable_num << 4) | msg); + stream->total = 4; + } + else if ( msg == 0xC || msg == 0xD) + { + // Channel Voice Messages, two-byte variants (Program Change and Channel Pressure) + stream->buffer[0] = (uint8_t) ((cable_num << 4) | msg); + stream->total = 3; + } + else if ( msg == 0xf ) + { + // System message + if ( data == MIDI_STATUS_SYSEX_START ) + { + stream->buffer[0] = MIDI_CIN_SYSEX_START; + stream->total = 4; + } + else if ( data == MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME || data == MIDI_STATUS_SYSCOM_SONG_SELECT ) + { + stream->buffer[0] = MIDI_CIN_SYSCOM_2BYTE; + stream->total = 3; + } + else if ( data == MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER ) + { + stream->buffer[0] = MIDI_CIN_SYSCOM_3BYTE; + stream->total = 4; } + else + { + stream->buffer[0] = MIDI_CIN_SYSEX_END_1BYTE; + stream->total = 2; + } + stream->buffer[0] |= (uint8_t)(cable_num << 4); + } + else + { + // Pack individual bytes if we don't support packing them into words. + stream->buffer[0] = (uint8_t) (cable_num << 4 | 0xf); + stream->buffer[2] = 0; + stream->buffer[3] = 0; + stream->index = 2; + stream->total = 2; + } + } + else + { + //------------- On-going (buffering) packet -------------// + + TU_ASSERT(stream->index < 4, i); + stream->buffer[stream->index] = data; + stream->index++; + + // See if this byte ends a SysEx. + if ( (stream->buffer[0] & 0xF) == MIDI_CIN_SYSEX_START && data == MIDI_STATUS_SYSEX_END ) + { + stream->buffer[0] = (uint8_t) ((cable_num << 4) | (MIDI_CIN_SYSEX_START + (stream->index - 1))); + stream->total = stream->index; + } + } - // Send out packet - if (stream->index == stream->total) { - // zeroes unused bytes - for (uint8_t idx = stream->total; idx < 4; idx++) stream->buffer[idx] = 0; + // Send out packet + if ( stream->index == stream->total ) + { + // zeroes unused bytes + for(uint8_t idx = stream->total; idx < 4; idx++) stream->buffer[idx] = 0; - uint16_t const count = tu_fifo_write_n(&midi->tx_ff, stream->buffer, 4); + uint16_t const count = tu_fifo_write_n(&midi->tx_ff, stream->buffer, 4); - // complete current event packet, reset stream - stream->index = stream->total = 0; + // complete current event packet, reset stream + stream->index = stream->total = 0; - // FIFO overflown, since we already check fifo remaining. It is probably race condition - TU_ASSERT(count == 4, i); - } + // FIFO overflown, since we already check fifo remaining. It is probably race condition + TU_ASSERT(count == 4, i); } + } - write_flush(midi); + write_flush(midi); - return i; + return i; } -bool tud_midi_n_packet_write(uint8_t itf, uint8_t const packet[4]) +bool tud_midi_n_packet_write (uint8_t itf, uint8_t const packet[4]) { - midid_interface_t *midi = &_midid_itf[itf]; - TU_VERIFY(midi->ep_in); + midid_interface_t* midi = &_midid_itf[itf]; + TU_VERIFY(midi->ep_in); - if (tu_fifo_remaining(&midi->tx_ff) < 4) - return false; + if (tu_fifo_remaining(&midi->tx_ff) < 4) return false; - tu_fifo_write_n(&midi->tx_ff, packet, 4); - write_flush(midi); + tu_fifo_write_n(&midi->tx_ff, packet, 4); + write_flush(midi); - return true; + return true; } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void midid_init(void) -{ - tu_memclr(_midid_itf, sizeof(_midid_itf)); +void midid_init(void) { + tu_memclr(_midid_itf, sizeof(_midid_itf)); - for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { - midid_interface_t *midi = &_midid_itf[i]; + for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { + midid_interface_t* midi = &_midid_itf[i]; - // config fifo - tu_fifo_config(&midi->rx_ff, midi->rx_ff_buf, CFG_TUD_MIDI_RX_BUFSIZE, 1, - false); // true, true - tu_fifo_config(&midi->tx_ff, midi->tx_ff_buf, CFG_TUD_MIDI_TX_BUFSIZE, 1, false); // OBVS. + // config fifo + tu_fifo_config(&midi->rx_ff, midi->rx_ff_buf, CFG_TUD_MIDI_RX_BUFSIZE, 1, false); // true, true + tu_fifo_config(&midi->tx_ff, midi->tx_ff_buf, CFG_TUD_MIDI_TX_BUFSIZE, 1, false); // OBVS. -#if CFG_FIFO_MUTEX - osal_mutex_t mutex_rd = osal_mutex_create(&midi->rx_ff_mutex); - osal_mutex_t mutex_wr = osal_mutex_create(&midi->tx_ff_mutex); - TU_ASSERT(mutex_wr != NULL && mutex_wr != NULL, ); + #if CFG_FIFO_MUTEX + osal_mutex_t mutex_rd = osal_mutex_create(&midi->rx_ff_mutex); + osal_mutex_t mutex_wr = osal_mutex_create(&midi->tx_ff_mutex); + TU_ASSERT(mutex_wr != NULL && mutex_wr != NULL, ); - tu_fifo_config_mutex(&midi->rx_ff, NULL, mutex_rd); - tu_fifo_config_mutex(&midi->tx_ff, mutex_wr, NULL); -#endif - } + tu_fifo_config_mutex(&midi->rx_ff, NULL, mutex_rd); + tu_fifo_config_mutex(&midi->tx_ff, mutex_wr, NULL); + #endif + } } -bool midid_deinit(void) -{ -#if CFG_FIFO_MUTEX - for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { - midid_interface_t *midi = &_midid_itf[i]; - osal_mutex_t mutex_rd = midi->rx_ff.mutex_rd; - osal_mutex_t mutex_wr = midi->tx_ff.mutex_wr; - - if (mutex_rd) { - osal_mutex_delete(mutex_rd); - tu_fifo_config_mutex(&midi->rx_ff, NULL, NULL); - } +bool midid_deinit(void) { + #if CFG_FIFO_MUTEX + for(uint8_t i=0; irx_ff.mutex_rd; + osal_mutex_t mutex_wr = midi->tx_ff.mutex_wr; - if (mutex_wr) { - osal_mutex_delete(mutex_wr); - tu_fifo_config_mutex(&midi->tx_ff, NULL, NULL); - } + if (mutex_rd) { + osal_mutex_delete(mutex_rd); + tu_fifo_config_mutex(&midi->rx_ff, NULL, NULL); } -#endif - return true; + if (mutex_wr) { + osal_mutex_delete(mutex_wr); + tu_fifo_config_mutex(&midi->tx_ff, NULL, NULL); + } + } + #endif + + return true; } void midid_reset(uint8_t rhport) { - (void)rhport; - - for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { - midid_interface_t *midi = &_midid_itf[i]; - tu_memclr(midi, ITF_MEM_RESET_SIZE); - tu_fifo_clear(&midi->rx_ff); - tu_fifo_clear(&midi->tx_ff); - } + (void) rhport; + + for(uint8_t i=0; irx_ff); + tu_fifo_clear(&midi->tx_ff); + } } -uint16_t midid_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) +uint16_t midid_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t max_len) { - // 1st Interface is Audio Control v1 - TU_VERIFY(TUSB_CLASS_AUDIO == desc_itf->bInterfaceClass && - AUDIO_SUBCLASS_CONTROL == desc_itf->bInterfaceSubClass && - AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_itf->bInterfaceProtocol, - 0); - - uint16_t drv_len = tu_desc_len(desc_itf); - uint8_t const *p_desc = tu_desc_next(desc_itf); - - // Skip Class Specific descriptors - while (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len) { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + // 1st Interface is Audio Control v1 + TU_VERIFY(TUSB_CLASS_AUDIO == desc_itf->bInterfaceClass && + AUDIO_SUBCLASS_CONTROL == desc_itf->bInterfaceSubClass && + AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_itf->bInterfaceProtocol, 0); - // 2nd Interface is MIDI Streaming - TU_VERIFY(TUSB_DESC_INTERFACE == tu_desc_type(p_desc), 0); - tusb_desc_interface_t const *desc_midi = (tusb_desc_interface_t const *)p_desc; - - TU_VERIFY(TUSB_CLASS_AUDIO == desc_midi->bInterfaceClass && - AUDIO_SUBCLASS_MIDI_STREAMING == desc_midi->bInterfaceSubClass && - AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_midi->bInterfaceProtocol, - 0); - - // Find available interface - midid_interface_t *p_midi = NULL; - for (uint8_t i = 0; i < CFG_TUD_MIDI; i++) { - if (_midid_itf[i].ep_in == 0 && _midid_itf[i].ep_out == 0) { - p_midi = &_midid_itf[i]; - break; - } - } - TU_ASSERT(p_midi); + uint16_t drv_len = tu_desc_len(desc_itf); + uint8_t const * p_desc = tu_desc_next(desc_itf); - p_midi->itf_num = desc_midi->bInterfaceNumber; - (void)p_midi->itf_num; - - // next descriptor + // Skip Class Specific descriptors + while ( TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len ) + { drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - - // Find and open endpoint descriptors - uint8_t found_endpoints = 0; - while ((found_endpoints < desc_midi->bNumEndpoints) && (drv_len <= max_len)) { - if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { - TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *)p_desc), 0); - uint8_t ep_addr = ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress; - - if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN) { - p_midi->ep_in = ep_addr; - } else { - p_midi->ep_out = ep_addr; - } - - // Class Specific MIDI Stream endpoint descriptor - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - - found_endpoints += 1; - } - - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); + p_desc = tu_desc_next(p_desc); + } + + // 2nd Interface is MIDI Streaming + TU_VERIFY(TUSB_DESC_INTERFACE == tu_desc_type(p_desc), 0); + tusb_desc_interface_t const * desc_midi = (tusb_desc_interface_t const *) p_desc; + + TU_VERIFY(TUSB_CLASS_AUDIO == desc_midi->bInterfaceClass && + AUDIO_SUBCLASS_MIDI_STREAMING == desc_midi->bInterfaceSubClass && + AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_midi->bInterfaceProtocol, 0); + + // Find available interface + midid_interface_t * p_midi = NULL; + for(uint8_t i=0; iitf_num = desc_midi->bInterfaceNumber; + (void) p_midi->itf_num; + + // next descriptor + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + + // Find and open endpoint descriptors + uint8_t found_endpoints = 0; + while ( (found_endpoints < desc_midi->bNumEndpoints) && (drv_len <= max_len) ) + { + if ( TUSB_DESC_ENDPOINT == tu_desc_type(p_desc) ) + { + TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), 0); + uint8_t ep_addr = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress; + + if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN) + { + p_midi->ep_in = ep_addr; + } else { + p_midi->ep_out = ep_addr; + } + + // Class Specific MIDI Stream endpoint descriptor + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + + found_endpoints += 1; } - // Prepare for incoming data - _prep_out_transaction(p_midi); + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - return drv_len; + // Prepare for incoming data + _prep_out_transaction(p_midi); + + return drv_len; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool midid_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +bool midid_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - (void)rhport; - (void)stage; - (void)request; + (void) rhport; + (void) stage; + (void) request; - // driver doesn't support any request yet - return false; + // driver doesn't support any request yet + return false; } bool midid_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void)result; - (void)rhport; - - uint8_t itf; - midid_interface_t *p_midi; - - // Identify which interface to use - for (itf = 0; itf < CFG_TUD_MIDI; itf++) { - p_midi = &_midid_itf[itf]; - if ((ep_addr == p_midi->ep_out) || (ep_addr == p_midi->ep_in)) - break; - } - TU_ASSERT(itf < CFG_TUD_MIDI); - - // receive new data - if (ep_addr == p_midi->ep_out) { - tu_fifo_write_n(&p_midi->rx_ff, p_midi->epout_buf, (uint16_t)xferred_bytes); - - // invoke receive callback if available - if (tud_midi_rx_cb) - tud_midi_rx_cb(itf); - - // prepare for next - // TODO for now ep_out is not used by public API therefore there is no race condition, - // and does not need to claim like ep_in - _prep_out_transaction(p_midi); - } else if (ep_addr == p_midi->ep_in) { - if (0 == write_flush(p_midi)) { - // If there is no data left, a ZLP should be sent if - // xferred_bytes is multiple of EP size and not zero - if (!tu_fifo_count(&p_midi->tx_ff) && xferred_bytes && - (0 == (xferred_bytes % CFG_TUD_MIDI_EP_BUFSIZE))) { - if (usbd_edpt_claim(rhport, p_midi->ep_in)) { - usbd_edpt_xfer(rhport, p_midi->ep_in, NULL, 0); - } - } + (void) result; + (void) rhport; + + uint8_t itf; + midid_interface_t* p_midi; + + // Identify which interface to use + for (itf = 0; itf < CFG_TUD_MIDI; itf++) + { + p_midi = &_midid_itf[itf]; + if ( ( ep_addr == p_midi->ep_out ) || ( ep_addr == p_midi->ep_in ) ) break; + } + TU_ASSERT(itf < CFG_TUD_MIDI); + + // receive new data + if ( ep_addr == p_midi->ep_out ) + { + tu_fifo_write_n(&p_midi->rx_ff, p_midi->epout_buf, (uint16_t) xferred_bytes); + + // invoke receive callback if available + if (tud_midi_rx_cb) tud_midi_rx_cb(itf); + + // prepare for next + // TODO for now ep_out is not used by public API therefore there is no race condition, + // and does not need to claim like ep_in + _prep_out_transaction(p_midi); + } + else if ( ep_addr == p_midi->ep_in ) + { + if (0 == write_flush(p_midi)) + { + // If there is no data left, a ZLP should be sent if + // xferred_bytes is multiple of EP size and not zero + if ( !tu_fifo_count(&p_midi->tx_ff) && xferred_bytes && (0 == (xferred_bytes % CFG_TUD_MIDI_EP_BUFSIZE)) ) + { + if ( usbd_edpt_claim(rhport, p_midi->ep_in) ) + { + usbd_edpt_xfer(rhport, p_midi->ep_in, NULL, 0); } + } } + } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/midi/midi_device.h b/Libraries/tinyusb/src/class/midi/midi_device.h index 4b2ae6d9f3d..3e89cc0a300 100644 --- a/Libraries/tinyusb/src/class/midi/midi_device.h +++ b/Libraries/tinyusb/src/class/midi/midi_device.h @@ -35,16 +35,16 @@ //--------------------------------------------------------------------+ #if !defined(CFG_TUD_MIDI_EP_BUFSIZE) && defined(CFG_TUD_MIDI_EPSIZE) -#warning CFG_TUD_MIDI_EPSIZE is renamed to CFG_TUD_MIDI_EP_BUFSIZE, please update to use the new name -#define CFG_TUD_MIDI_EP_BUFSIZE CFG_TUD_MIDI_EPSIZE + #warning CFG_TUD_MIDI_EPSIZE is renamed to CFG_TUD_MIDI_EP_BUFSIZE, please update to use the new name + #define CFG_TUD_MIDI_EP_BUFSIZE CFG_TUD_MIDI_EPSIZE #endif #ifndef CFG_TUD_MIDI_EP_BUFSIZE -#define CFG_TUD_MIDI_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) + #define CFG_TUD_MIDI_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) #endif #ifdef __cplusplus -extern "C" { + extern "C" { #endif /** \addtogroup MIDI_Serial Serial @@ -58,62 +58,61 @@ extern "C" { //--------------------------------------------------------------------+ // Check if midi interface is mounted -bool tud_midi_n_mounted(uint8_t itf); +bool tud_midi_n_mounted (uint8_t itf); // Get the number of bytes available for reading -uint32_t tud_midi_n_available(uint8_t itf, uint8_t cable_num); +uint32_t tud_midi_n_available (uint8_t itf, uint8_t cable_num); // Read byte stream (legacy) -uint32_t tud_midi_n_stream_read(uint8_t itf, uint8_t cable_num, void *buffer, uint32_t bufsize); +uint32_t tud_midi_n_stream_read (uint8_t itf, uint8_t cable_num, void* buffer, uint32_t bufsize); // Write byte Stream (legacy) -uint32_t tud_midi_n_stream_write(uint8_t itf, uint8_t cable_num, uint8_t const *buffer, - uint32_t bufsize); +uint32_t tud_midi_n_stream_write (uint8_t itf, uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize); // Read event packet (4 bytes) -bool tud_midi_n_packet_read(uint8_t itf, uint8_t packet[4]); +bool tud_midi_n_packet_read (uint8_t itf, uint8_t packet[4]); // Write event packet (4 bytes) -bool tud_midi_n_packet_write(uint8_t itf, uint8_t const packet[4]); +bool tud_midi_n_packet_write (uint8_t itf, uint8_t const packet[4]); //--------------------------------------------------------------------+ // Application API (Single Interface) //--------------------------------------------------------------------+ -static inline bool tud_midi_mounted(void); -static inline uint32_t tud_midi_available(void); +static inline bool tud_midi_mounted (void); +static inline uint32_t tud_midi_available (void); -static inline uint32_t tud_midi_stream_read(void *buffer, uint32_t bufsize); -static inline uint32_t tud_midi_stream_write(uint8_t cable_num, uint8_t const *buffer, - uint32_t bufsize); +static inline uint32_t tud_midi_stream_read (void* buffer, uint32_t bufsize); +static inline uint32_t tud_midi_stream_write (uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize); -static inline bool tud_midi_packet_read(uint8_t packet[4]); -static inline bool tud_midi_packet_write(uint8_t const packet[4]); +static inline bool tud_midi_packet_read (uint8_t packet[4]); +static inline bool tud_midi_packet_write (uint8_t const packet[4]); //------------- Deprecated API name -------------// // TODO remove after 0.10.0 release TU_ATTR_DEPRECATED("tud_midi_read() is renamed to tud_midi_stream_read()") -static inline uint32_t tud_midi_read(void *buffer, uint32_t bufsize) +static inline uint32_t tud_midi_read (void* buffer, uint32_t bufsize) { - return tud_midi_stream_read(buffer, bufsize); + return tud_midi_stream_read(buffer, bufsize); } TU_ATTR_DEPRECATED("tud_midi_write() is renamed to tud_midi_stream_write()") -static inline uint32_t tud_midi_write(uint8_t cable_num, uint8_t const *buffer, uint32_t bufsize) +static inline uint32_t tud_midi_write(uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize) { - return tud_midi_stream_write(cable_num, buffer, bufsize); + return tud_midi_stream_write(cable_num, buffer, bufsize); } + TU_ATTR_DEPRECATED("tud_midi_send() is renamed to tud_midi_packet_write()") static inline bool tud_midi_send(uint8_t packet[4]) { - return tud_midi_packet_write(packet); + return tud_midi_packet_write(packet); } TU_ATTR_DEPRECATED("tud_midi_receive() is renamed to tud_midi_packet_read()") static inline bool tud_midi_receive(uint8_t packet[4]) { - return tud_midi_packet_read(packet); + return tud_midi_packet_read(packet); } //--------------------------------------------------------------------+ @@ -125,49 +124,48 @@ TU_ATTR_WEAK void tud_midi_rx_cb(uint8_t itf); // Inline Functions //--------------------------------------------------------------------+ -static inline bool tud_midi_mounted(void) +static inline bool tud_midi_mounted (void) { - return tud_midi_n_mounted(0); + return tud_midi_n_mounted(0); } -static inline uint32_t tud_midi_available(void) +static inline uint32_t tud_midi_available (void) { - return tud_midi_n_available(0, 0); + return tud_midi_n_available(0, 0); } -static inline uint32_t tud_midi_stream_read(void *buffer, uint32_t bufsize) +static inline uint32_t tud_midi_stream_read (void* buffer, uint32_t bufsize) { - return tud_midi_n_stream_read(0, 0, buffer, bufsize); + return tud_midi_n_stream_read(0, 0, buffer, bufsize); } -static inline uint32_t tud_midi_stream_write(uint8_t cable_num, uint8_t const *buffer, - uint32_t bufsize) +static inline uint32_t tud_midi_stream_write (uint8_t cable_num, uint8_t const* buffer, uint32_t bufsize) { - return tud_midi_n_stream_write(0, cable_num, buffer, bufsize); + return tud_midi_n_stream_write(0, cable_num, buffer, bufsize); } -static inline bool tud_midi_packet_read(uint8_t packet[4]) +static inline bool tud_midi_packet_read (uint8_t packet[4]) { - return tud_midi_n_packet_read(0, packet); + return tud_midi_n_packet_read(0, packet); } -static inline bool tud_midi_packet_write(uint8_t const packet[4]) +static inline bool tud_midi_packet_write (uint8_t const packet[4]) { - return tud_midi_n_packet_write(0, packet); + return tud_midi_n_packet_write(0, packet); } //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void midid_init(void); -bool midid_deinit(void); -void midid_reset(uint8_t rhport); -uint16_t midid_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool midid_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); -bool midid_xfer_cb(uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); +void midid_init (void); +bool midid_deinit (void); +void midid_reset (uint8_t rhport); +uint16_t midid_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool midid_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +bool midid_xfer_cb (uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_MIDI_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/msc/msc.h b/Libraries/tinyusb/src/class/msc/msc.h index 033a19c9046..bbfd35a435d 100644 --- a/Libraries/tinyusb/src/class/msc/msc.h +++ b/Libraries/tinyusb/src/class/msc/msc.h @@ -30,84 +30,76 @@ #include "common/tusb_common.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ // Mass Storage Class Constant //--------------------------------------------------------------------+ /// MassStorage Subclass -typedef enum { - MSC_SUBCLASS_RBC = 1, ///< Reduced Block Commands (RBC) T10 Project 1240-D - MSC_SUBCLASS_SFF_MMC, ///< SFF-8020i, MMC-2 (ATAPI). Typically used by a CD/DVD device - MSC_SUBCLASS_QIC, ///< QIC-157. Typically used by a tape device - MSC_SUBCLASS_UFI, ///< UFI. Typically used by Floppy Disk Drive (FDD) device - MSC_SUBCLASS_SFF, ///< SFF-8070i. Can be used by Floppy Disk Drive (FDD) device - MSC_SUBCLASS_SCSI ///< SCSI transparent command set -} msc_subclass_type_t; +typedef enum +{ + MSC_SUBCLASS_RBC = 1 , ///< Reduced Block Commands (RBC) T10 Project 1240-D + MSC_SUBCLASS_SFF_MMC , ///< SFF-8020i, MMC-2 (ATAPI). Typically used by a CD/DVD device + MSC_SUBCLASS_QIC , ///< QIC-157. Typically used by a tape device + MSC_SUBCLASS_UFI , ///< UFI. Typically used by Floppy Disk Drive (FDD) device + MSC_SUBCLASS_SFF , ///< SFF-8070i. Can be used by Floppy Disk Drive (FDD) device + MSC_SUBCLASS_SCSI ///< SCSI transparent command set +}msc_subclass_type_t; enum { - MSC_CBW_SIGNATURE = 0x43425355, ///< Constant value of 43425355h (little endian) - MSC_CSW_SIGNATURE = 0x53425355 ///< Constant value of 53425355h (little endian) + MSC_CBW_SIGNATURE = 0x43425355, ///< Constant value of 43425355h (little endian) + MSC_CSW_SIGNATURE = 0x53425355 ///< Constant value of 53425355h (little endian) }; /// \brief MassStorage Protocol. /// \details CBI only approved to use with full-speed floppy disk & should not used with highspeed or device other than floppy -typedef enum { - MSC_PROTOCOL_CBI = 0, ///< Control/Bulk/Interrupt protocol (with command completion interrupt) - MSC_PROTOCOL_CBI_NO_INTERRUPT = - 1, ///< Control/Bulk/Interrupt protocol (without command completion interrupt) - MSC_PROTOCOL_BOT = 0x50 ///< Bulk-Only Transport -} msc_protocol_type_t; +typedef enum +{ + MSC_PROTOCOL_CBI = 0 , ///< Control/Bulk/Interrupt protocol (with command completion interrupt) + MSC_PROTOCOL_CBI_NO_INTERRUPT = 1 , ///< Control/Bulk/Interrupt protocol (without command completion interrupt) + MSC_PROTOCOL_BOT = 0x50 ///< Bulk-Only Transport +}msc_protocol_type_t; /// MassStorage Class-Specific Control Request -typedef enum { - MSC_REQ_GET_MAX_LUN = - 254, ///< The Get Max LUN device request is used to determine the number of logical units supported by the device. Logical Unit Numbers on the device shall be numbered contiguously starting from LUN 0 to a maximum LUN of 15 - MSC_REQ_RESET = - 255 ///< This request is used to reset the mass storage device and its associated interface. This class-specific request shall ready the device for the next CBW from the host. -} msc_request_type_t; +typedef enum +{ + MSC_REQ_GET_MAX_LUN = 254, ///< The Get Max LUN device request is used to determine the number of logical units supported by the device. Logical Unit Numbers on the device shall be numbered contiguously starting from LUN 0 to a maximum LUN of 15 + MSC_REQ_RESET = 255 ///< This request is used to reset the mass storage device and its associated interface. This class-specific request shall ready the device for the next CBW from the host. +}msc_request_type_t; /// \brief Command Block Status Values /// \details Indicates the success or failure of the command. The device shall set this byte to zero if the command completed /// successfully. A non-zero value shall indicate a failure during command execution according to the following -typedef enum { - MSC_CSW_STATUS_PASSED = 0, ///< MSC_CSW_STATUS_PASSED - MSC_CSW_STATUS_FAILED, ///< MSC_CSW_STATUS_FAILED - MSC_CSW_STATUS_PHASE_ERROR ///< MSC_CSW_STATUS_PHASE_ERROR -} msc_csw_status_t; +typedef enum +{ + MSC_CSW_STATUS_PASSED = 0 , ///< MSC_CSW_STATUS_PASSED + MSC_CSW_STATUS_FAILED , ///< MSC_CSW_STATUS_FAILED + MSC_CSW_STATUS_PHASE_ERROR ///< MSC_CSW_STATUS_PHASE_ERROR +}msc_csw_status_t; /// Command Block Wrapper -typedef struct TU_ATTR_PACKED { - uint32_t - signature; ///< Signature that helps identify this data packet as a CBW. The signature field shall contain the value 43425355h (little endian), indicating a CBW. - uint32_t - tag; ///< Tag sent by the host. The device shall echo the contents of this field back to the host in the dCSWTagfield of the associated CSW. The dCSWTagpositively associates a CSW with the corresponding CBW. - uint32_t - total_bytes; ///< The number of bytes of data that the host expects to transfer on the Bulk-In or Bulk-Out endpoint (as indicated by the Direction bit) during the execution of this command. If this field is zero, the device and the host shall transfer no data between the CBW and the associated CSW, and the device shall ignore the value of the Direction bit in bmCBWFlags. - uint8_t - dir; ///< Bit 7 of this field define transfer direction \n - 0 : Data-Out from host to the device. \n - 1 : Data-In from the device to the host. - uint8_t - lun; ///< The device Logical Unit Number (LUN) to which the command block is being sent. For devices that support multiple LUNs, the host shall place into this field the LUN to which this command block is addressed. Otherwise, the host shall set this field to zero. - uint8_t - cmd_len; ///< The valid length of the CBWCBin bytes. This defines the valid length of the command block. The only legal values are 1 through 16 - uint8_t command - [16]; ///< The command block to be executed by the device. The device shall interpret the first cmd_len bytes in this field as a command block -} msc_cbw_t; +typedef struct TU_ATTR_PACKED +{ + uint32_t signature; ///< Signature that helps identify this data packet as a CBW. The signature field shall contain the value 43425355h (little endian), indicating a CBW. + uint32_t tag; ///< Tag sent by the host. The device shall echo the contents of this field back to the host in the dCSWTagfield of the associated CSW. The dCSWTagpositively associates a CSW with the corresponding CBW. + uint32_t total_bytes; ///< The number of bytes of data that the host expects to transfer on the Bulk-In or Bulk-Out endpoint (as indicated by the Direction bit) during the execution of this command. If this field is zero, the device and the host shall transfer no data between the CBW and the associated CSW, and the device shall ignore the value of the Direction bit in bmCBWFlags. + uint8_t dir; ///< Bit 7 of this field define transfer direction \n - 0 : Data-Out from host to the device. \n - 1 : Data-In from the device to the host. + uint8_t lun; ///< The device Logical Unit Number (LUN) to which the command block is being sent. For devices that support multiple LUNs, the host shall place into this field the LUN to which this command block is addressed. Otherwise, the host shall set this field to zero. + uint8_t cmd_len; ///< The valid length of the CBWCBin bytes. This defines the valid length of the command block. The only legal values are 1 through 16 + uint8_t command[16]; ///< The command block to be executed by the device. The device shall interpret the first cmd_len bytes in this field as a command block +}msc_cbw_t; TU_VERIFY_STATIC(sizeof(msc_cbw_t) == 31, "size is not correct"); /// Command Status Wrapper -typedef struct TU_ATTR_PACKED { - uint32_t - signature; ///< Signature that helps identify this data packet as a CSW. The signature field shall contain the value 53425355h (little endian), indicating CSW. - uint32_t - tag; ///< The device shall set this field to the value received in the dCBWTag of the associated CBW. - uint32_t - data_residue; ///< For Data-Out the device shall report in the dCSWDataResidue the difference between the amount of data expected as stated in the dCBWDataTransferLength, and the actual amount of data processed by the device. For Data-In the device shall report in the dCSWDataResiduethe difference between the amount of data expected as stated in the dCBWDataTransferLengthand the actual amount of relevant data sent by the device - uint8_t - status; ///< indicates the success or failure of the command. Values from \ref msc_csw_status_t -} msc_csw_t; +typedef struct TU_ATTR_PACKED +{ + uint32_t signature ; ///< Signature that helps identify this data packet as a CSW. The signature field shall contain the value 53425355h (little endian), indicating CSW. + uint32_t tag ; ///< The device shall set this field to the value received in the dCBWTag of the associated CBW. + uint32_t data_residue ; ///< For Data-Out the device shall report in the dCSWDataResidue the difference between the amount of data expected as stated in the dCBWDataTransferLength, and the actual amount of data processed by the device. For Data-In the device shall report in the dCSWDataResiduethe difference between the amount of data expected as stated in the dCBWDataTransferLengthand the actual amount of relevant data sent by the device + uint8_t status ; ///< indicates the success or failure of the command. Values from \ref msc_csw_status_t +}msc_csw_t; TU_VERIFY_STATIC(sizeof(msc_csw_t) == 13, "size is not correct"); @@ -116,242 +108,232 @@ TU_VERIFY_STATIC(sizeof(msc_csw_t) == 13, "size is not correct"); //--------------------------------------------------------------------+ /// SCSI Command Operation Code -typedef enum { - SCSI_CMD_TEST_UNIT_READY = - 0x00, ///< The SCSI Test Unit Ready command is used to determine if a device is ready to transfer data (read/write), i.e. if a disk has spun up, if a tape is loaded and ready etc. The device does not perform a self-test operation. - SCSI_CMD_INQUIRY = - 0x12, ///< The SCSI Inquiry command is used to obtain basic information from a target device. - SCSI_CMD_MODE_SELECT_6 = - 0x15, ///< provides a means for the application client to specify medium, logical unit, or peripheral device parameters to the device server. Device servers that implement the MODE SELECT(6) command shall also implement the MODE SENSE(6) command. Application clients should issue MODE SENSE(6) prior to each MODE SELECT(6) to determine supported mode pages, page lengths, and other parameters. - SCSI_CMD_MODE_SENSE_6 = - 0x1A, ///< provides a means for a device server to report parameters to an application client. It is a complementary command to the MODE SELECT(6) command. Device servers that implement the MODE SENSE(6) command shall also implement the MODE SELECT(6) command. - SCSI_CMD_START_STOP_UNIT = 0x1B, - SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL = 0x1E, - SCSI_CMD_READ_CAPACITY_10 = - 0x25, ///< The SCSI Read Capacity command is used to obtain data capacity information from a target device. - SCSI_CMD_REQUEST_SENSE = - 0x03, ///< The SCSI Request Sense command is part of the SCSI computer protocol standard. This command is used to obtain sense data -- status/error information -- from a target device. - SCSI_CMD_READ_FORMAT_CAPACITY = - 0x23, ///< The command allows the Host to request a list of the possible format capacities for an installed writable media. This command also has the capability to report the writable capacity for a media when it is installed - SCSI_CMD_READ_10 = - 0x28, ///< The READ (10) command requests that the device server read the specified logical block(s) and transfer them to the data-in buffer. - SCSI_CMD_WRITE_10 = - 0x2A, ///< The WRITE (10) command requests that the device server transfer the specified logical block(s) from the data-out buffer and write them. -} scsi_cmd_type_t; +typedef enum +{ + SCSI_CMD_TEST_UNIT_READY = 0x00, ///< The SCSI Test Unit Ready command is used to determine if a device is ready to transfer data (read/write), i.e. if a disk has spun up, if a tape is loaded and ready etc. The device does not perform a self-test operation. + SCSI_CMD_INQUIRY = 0x12, ///< The SCSI Inquiry command is used to obtain basic information from a target device. + SCSI_CMD_MODE_SELECT_6 = 0x15, ///< provides a means for the application client to specify medium, logical unit, or peripheral device parameters to the device server. Device servers that implement the MODE SELECT(6) command shall also implement the MODE SENSE(6) command. Application clients should issue MODE SENSE(6) prior to each MODE SELECT(6) to determine supported mode pages, page lengths, and other parameters. + SCSI_CMD_MODE_SENSE_6 = 0x1A, ///< provides a means for a device server to report parameters to an application client. It is a complementary command to the MODE SELECT(6) command. Device servers that implement the MODE SENSE(6) command shall also implement the MODE SELECT(6) command. + SCSI_CMD_START_STOP_UNIT = 0x1B, + SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL = 0x1E, + SCSI_CMD_READ_CAPACITY_10 = 0x25, ///< The SCSI Read Capacity command is used to obtain data capacity information from a target device. + SCSI_CMD_REQUEST_SENSE = 0x03, ///< The SCSI Request Sense command is part of the SCSI computer protocol standard. This command is used to obtain sense data -- status/error information -- from a target device. + SCSI_CMD_READ_FORMAT_CAPACITY = 0x23, ///< The command allows the Host to request a list of the possible format capacities for an installed writable media. This command also has the capability to report the writable capacity for a media when it is installed + SCSI_CMD_READ_10 = 0x28, ///< The READ (10) command requests that the device server read the specified logical block(s) and transfer them to the data-in buffer. + SCSI_CMD_WRITE_10 = 0x2A, ///< The WRITE (10) command requests that the device server transfer the specified logical block(s) from the data-out buffer and write them. +}scsi_cmd_type_t; /// SCSI Sense Key -typedef enum { - SCSI_SENSE_NONE = - 0x00, ///< no specific Sense Key. This would be the case for a successful command - SCSI_SENSE_RECOVERED_ERROR = - 0x01, ///< Indicates the last command completed successfully with some recovery action performed by the disc drive. - SCSI_SENSE_NOT_READY = 0x02, ///< Indicates the logical unit addressed cannot be accessed. - SCSI_SENSE_MEDIUM_ERROR = - 0x03, ///< Indicates the command terminated with a non-recovered error condition. - SCSI_SENSE_HARDWARE_ERROR = - 0x04, ///< Indicates the disc drive detected a nonrecoverable hardware failure while performing the command or during a self test. - SCSI_SENSE_ILLEGAL_REQUEST = - 0x05, ///< Indicates an illegal parameter in the command descriptor block or in the additional parameters - SCSI_SENSE_UNIT_ATTENTION = 0x06, ///< Indicates the disc drive may have been reset. - SCSI_SENSE_DATA_PROTECT = - 0x07, ///< Indicates that a command that reads or writes the medium was attempted on a block that is protected from this operation. The read or write operation is not performed. - SCSI_SENSE_FIRMWARE_ERROR = 0x08, ///< Vendor specific sense key. - SCSI_SENSE_ABORTED_COMMAND = 0x0b, ///< Indicates the disc drive aborted the command. - SCSI_SENSE_EQUAL = 0x0c, ///< Indicates a SEARCH DATA command has satisfied an equal comparison. - SCSI_SENSE_VOLUME_OVERFLOW = - 0x0d, ///< Indicates a buffered peripheral device has reached the end of medium partition and data remains in the buffer that has not been written to the medium. - SCSI_SENSE_MISCOMPARE = - 0x0e ///< Indicates that the source data did not match the data read from the medium. -} scsi_sense_key_type_t; +typedef enum +{ + SCSI_SENSE_NONE = 0x00, ///< no specific Sense Key. This would be the case for a successful command + SCSI_SENSE_RECOVERED_ERROR = 0x01, ///< Indicates the last command completed successfully with some recovery action performed by the disc drive. + SCSI_SENSE_NOT_READY = 0x02, ///< Indicates the logical unit addressed cannot be accessed. + SCSI_SENSE_MEDIUM_ERROR = 0x03, ///< Indicates the command terminated with a non-recovered error condition. + SCSI_SENSE_HARDWARE_ERROR = 0x04, ///< Indicates the disc drive detected a nonrecoverable hardware failure while performing the command or during a self test. + SCSI_SENSE_ILLEGAL_REQUEST = 0x05, ///< Indicates an illegal parameter in the command descriptor block or in the additional parameters + SCSI_SENSE_UNIT_ATTENTION = 0x06, ///< Indicates the disc drive may have been reset. + SCSI_SENSE_DATA_PROTECT = 0x07, ///< Indicates that a command that reads or writes the medium was attempted on a block that is protected from this operation. The read or write operation is not performed. + SCSI_SENSE_FIRMWARE_ERROR = 0x08, ///< Vendor specific sense key. + SCSI_SENSE_ABORTED_COMMAND = 0x0b, ///< Indicates the disc drive aborted the command. + SCSI_SENSE_EQUAL = 0x0c, ///< Indicates a SEARCH DATA command has satisfied an equal comparison. + SCSI_SENSE_VOLUME_OVERFLOW = 0x0d, ///< Indicates a buffered peripheral device has reached the end of medium partition and data remains in the buffer that has not been written to the medium. + SCSI_SENSE_MISCOMPARE = 0x0e ///< Indicates that the source data did not match the data read from the medium. +}scsi_sense_key_type_t; //--------------------------------------------------------------------+ // SCSI Primary Command (SPC-4) //--------------------------------------------------------------------+ /// SCSI Test Unit Ready Command -typedef struct TU_ATTR_PACKED { - uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_TEST_UNIT_READY - uint8_t lun; ///< Logical Unit - uint8_t reserved[3]; - uint8_t control; +typedef struct TU_ATTR_PACKED +{ + uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_TEST_UNIT_READY + uint8_t lun ; ///< Logical Unit + uint8_t reserved[3] ; + uint8_t control ; } scsi_test_unit_ready_t; TU_VERIFY_STATIC(sizeof(scsi_test_unit_ready_t) == 6, "size is not correct"); /// SCSI Inquiry Command -typedef struct TU_ATTR_PACKED { - uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_INQUIRY - uint8_t reserved1; - uint8_t page_code; - uint8_t reserved2; - uint8_t - alloc_length; ///< specifies the maximum number of bytes that USB host has allocated in the Data-In Buffer. An allocation length of zero specifies that no data shall be transferred. - uint8_t control; +typedef struct TU_ATTR_PACKED +{ + uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_INQUIRY + uint8_t reserved1 ; + uint8_t page_code ; + uint8_t reserved2 ; + uint8_t alloc_length ; ///< specifies the maximum number of bytes that USB host has allocated in the Data-In Buffer. An allocation length of zero specifies that no data shall be transferred. + uint8_t control ; } scsi_inquiry_t, scsi_request_sense_t; TU_VERIFY_STATIC(sizeof(scsi_inquiry_t) == 6, "size is not correct"); /// SCSI Inquiry Response Data -typedef struct TU_ATTR_PACKED { - uint8_t peripheral_device_type : 5; - uint8_t peripheral_qualifier : 3; - - uint8_t : 7; - uint8_t is_removable : 1; - - uint8_t version; - - uint8_t response_data_format : 4; - uint8_t hierarchical_support : 1; - uint8_t normal_aca : 1; - uint8_t : 2; - - uint8_t additional_length; - - uint8_t protect : 1; - uint8_t : 2; - uint8_t third_party_copy : 1; - uint8_t target_port_group_support : 2; - uint8_t access_control_coordinator : 1; - uint8_t scc_support : 1; - - uint8_t addr16 : 1; - uint8_t : 3; - uint8_t multi_port : 1; - uint8_t : 1; // vendor specific - uint8_t enclosure_service : 1; - uint8_t : 1; - - uint8_t : 1; // vendor specific - uint8_t cmd_que : 1; - uint8_t : 2; - uint8_t sync : 1; - uint8_t wbus16 : 1; - uint8_t : 2; - - uint8_t vendor_id[8]; ///< 8 bytes of ASCII data identifying the vendor of the product. - uint8_t product_id[16]; ///< 16 bytes of ASCII data defined by the vendor. - uint8_t product_rev[4]; ///< 4 bytes of ASCII data defined by the vendor. +typedef struct TU_ATTR_PACKED +{ + uint8_t peripheral_device_type : 5; + uint8_t peripheral_qualifier : 3; + + uint8_t : 7; + uint8_t is_removable : 1; + + uint8_t version; + + uint8_t response_data_format : 4; + uint8_t hierarchical_support : 1; + uint8_t normal_aca : 1; + uint8_t : 2; + + uint8_t additional_length; + + uint8_t protect : 1; + uint8_t : 2; + uint8_t third_party_copy : 1; + uint8_t target_port_group_support : 2; + uint8_t access_control_coordinator : 1; + uint8_t scc_support : 1; + + uint8_t addr16 : 1; + uint8_t : 3; + uint8_t multi_port : 1; + uint8_t : 1; // vendor specific + uint8_t enclosure_service : 1; + uint8_t : 1; + + uint8_t : 1; // vendor specific + uint8_t cmd_que : 1; + uint8_t : 2; + uint8_t sync : 1; + uint8_t wbus16 : 1; + uint8_t : 2; + + uint8_t vendor_id[8] ; ///< 8 bytes of ASCII data identifying the vendor of the product. + uint8_t product_id[16]; ///< 16 bytes of ASCII data defined by the vendor. + uint8_t product_rev[4]; ///< 4 bytes of ASCII data defined by the vendor. } scsi_inquiry_resp_t; TU_VERIFY_STATIC(sizeof(scsi_inquiry_resp_t) == 36, "size is not correct"); -typedef struct TU_ATTR_PACKED { - uint8_t - response_code : 7; ///< 70h - current errors, Fixed Format 71h - deferred errors, Fixed Format - uint8_t valid : 1; - uint8_t reserved; +typedef struct TU_ATTR_PACKED +{ + uint8_t response_code : 7; ///< 70h - current errors, Fixed Format 71h - deferred errors, Fixed Format + uint8_t valid : 1; - uint8_t sense_key : 4; - uint8_t : 1; - uint8_t ili : 1; ///< Incorrect length indicator - uint8_t end_of_medium : 1; - uint8_t filemark : 1; + uint8_t reserved; - uint32_t information; - uint8_t add_sense_len; - uint32_t command_specific_info; - uint8_t add_sense_code; - uint8_t add_sense_qualifier; - uint8_t field_replaceable_unit_code; + uint8_t sense_key : 4; + uint8_t : 1; + uint8_t ili : 1; ///< Incorrect length indicator + uint8_t end_of_medium : 1; + uint8_t filemark : 1; - uint8_t sense_key_specific - [3]; ///< sense key specific valid bit is bit 7 of key[0], aka MSB in Big Endian layout + uint32_t information; + uint8_t add_sense_len; + uint32_t command_specific_info; + uint8_t add_sense_code; + uint8_t add_sense_qualifier; + uint8_t field_replaceable_unit_code; + + uint8_t sense_key_specific[3]; ///< sense key specific valid bit is bit 7 of key[0], aka MSB in Big Endian layout } scsi_sense_fixed_resp_t; TU_VERIFY_STATIC(sizeof(scsi_sense_fixed_resp_t) == 18, "size is not correct"); -typedef struct TU_ATTR_PACKED { - uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_MODE_SENSE_6 +typedef struct TU_ATTR_PACKED +{ + uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_MODE_SENSE_6 - uint8_t : 3; - uint8_t disable_block_descriptor : 1; - uint8_t : 4; + uint8_t : 3; + uint8_t disable_block_descriptor : 1; + uint8_t : 4; - uint8_t page_code : 6; - uint8_t page_control : 2; + uint8_t page_code : 6; + uint8_t page_control : 2; - uint8_t subpage_code; - uint8_t alloc_length; - uint8_t control; + uint8_t subpage_code; + uint8_t alloc_length; + uint8_t control; } scsi_mode_sense6_t; -TU_VERIFY_STATIC(sizeof(scsi_mode_sense6_t) == 6, "size is not correct"); +TU_VERIFY_STATIC( sizeof(scsi_mode_sense6_t) == 6, "size is not correct"); // This is only a Mode parameter header(6). -typedef struct TU_ATTR_PACKED { - uint8_t data_len; - uint8_t medium_type; +typedef struct TU_ATTR_PACKED +{ + uint8_t data_len; + uint8_t medium_type; - uint8_t reserved : 7; - bool write_protected : 1; + uint8_t reserved : 7; + bool write_protected : 1; - uint8_t block_descriptor_len; + uint8_t block_descriptor_len; } scsi_mode_sense6_resp_t; -TU_VERIFY_STATIC(sizeof(scsi_mode_sense6_resp_t) == 4, "size is not correct"); +TU_VERIFY_STATIC( sizeof(scsi_mode_sense6_resp_t) == 4, "size is not correct"); -typedef struct TU_ATTR_PACKED { - uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL - uint8_t reserved[3]; - uint8_t prohibit_removal; - uint8_t control; +typedef struct TU_ATTR_PACKED +{ + uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL + uint8_t reserved[3]; + uint8_t prohibit_removal; + uint8_t control; } scsi_prevent_allow_medium_removal_t; -TU_VERIFY_STATIC(sizeof(scsi_prevent_allow_medium_removal_t) == 6, "size is not correct"); +TU_VERIFY_STATIC( sizeof(scsi_prevent_allow_medium_removal_t) == 6, "size is not correct"); -typedef struct TU_ATTR_PACKED { - uint8_t cmd_code; +typedef struct TU_ATTR_PACKED +{ + uint8_t cmd_code; - uint8_t immded : 1; - uint8_t : 7; + uint8_t immded : 1; + uint8_t : 7; - uint8_t TU_RESERVED; + uint8_t TU_RESERVED; - uint8_t power_condition_mod : 4; - uint8_t : 4; + uint8_t power_condition_mod : 4; + uint8_t : 4; - uint8_t start : 1; - uint8_t load_eject : 1; - uint8_t no_flush : 1; - uint8_t : 1; - uint8_t power_condition : 4; + uint8_t start : 1; + uint8_t load_eject : 1; + uint8_t no_flush : 1; + uint8_t : 1; + uint8_t power_condition : 4; - uint8_t control; + uint8_t control; } scsi_start_stop_unit_t; -TU_VERIFY_STATIC(sizeof(scsi_start_stop_unit_t) == 6, "size is not correct"); +TU_VERIFY_STATIC( sizeof(scsi_start_stop_unit_t) == 6, "size is not correct"); //--------------------------------------------------------------------+ // SCSI MMC //--------------------------------------------------------------------+ /// SCSI Read Format Capacity: Write Capacity -typedef struct TU_ATTR_PACKED { - uint8_t cmd_code; - uint8_t reserved[6]; - uint16_t alloc_length; - uint8_t control; +typedef struct TU_ATTR_PACKED +{ + uint8_t cmd_code; + uint8_t reserved[6]; + uint16_t alloc_length; + uint8_t control; } scsi_read_format_capacity_t; -TU_VERIFY_STATIC(sizeof(scsi_read_format_capacity_t) == 10, "size is not correct"); +TU_VERIFY_STATIC( sizeof(scsi_read_format_capacity_t) == 10, "size is not correct"); -typedef struct TU_ATTR_PACKED { - uint8_t reserved[3]; - uint8_t - list_length; /// must be 8*n, length in bytes of formattable capacity descriptor followed it. +typedef struct TU_ATTR_PACKED{ + uint8_t reserved[3]; + uint8_t list_length; /// must be 8*n, length in bytes of formattable capacity descriptor followed it. - uint32_t block_num; /// Number of Logical Blocks - uint8_t - descriptor_type; // 00: reserved, 01 unformatted media , 10 Formatted media, 11 No media present + uint32_t block_num; /// Number of Logical Blocks + uint8_t descriptor_type; // 00: reserved, 01 unformatted media , 10 Formatted media, 11 No media present - uint8_t reserved2; - uint16_t block_size_u16; + uint8_t reserved2; + uint16_t block_size_u16; } scsi_read_format_capacity_data_t; -TU_VERIFY_STATIC(sizeof(scsi_read_format_capacity_data_t) == 12, "size is not correct"); +TU_VERIFY_STATIC( sizeof(scsi_read_format_capacity_data_t) == 12, "size is not correct"); //--------------------------------------------------------------------+ // SCSI Block Command (SBC-3) @@ -359,40 +341,42 @@ TU_VERIFY_STATIC(sizeof(scsi_read_format_capacity_data_t) == 12, "size is not co //--------------------------------------------------------------------+ /// SCSI Read Capacity 10 Command: Read Capacity -typedef struct TU_ATTR_PACKED { - uint8_t cmd_code; ///< SCSI OpCode for \ref SCSI_CMD_READ_CAPACITY_10 - uint8_t reserved1; - uint32_t lba; ///< The first Logical Block Address (LBA) accessed by this command - uint16_t reserved2; - uint8_t partial_medium_indicator; - uint8_t control; +typedef struct TU_ATTR_PACKED +{ + uint8_t cmd_code ; ///< SCSI OpCode for \ref SCSI_CMD_READ_CAPACITY_10 + uint8_t reserved1 ; + uint32_t lba ; ///< The first Logical Block Address (LBA) accessed by this command + uint16_t reserved2 ; + uint8_t partial_medium_indicator ; + uint8_t control ; } scsi_read_capacity10_t; TU_VERIFY_STATIC(sizeof(scsi_read_capacity10_t) == 10, "size is not correct"); /// SCSI Read Capacity 10 Response Data typedef struct { - uint32_t last_lba; ///< The last Logical Block Address of the device - uint32_t block_size; ///< Block size in bytes + uint32_t last_lba ; ///< The last Logical Block Address of the device + uint32_t block_size ; ///< Block size in bytes } scsi_read_capacity10_resp_t; TU_VERIFY_STATIC(sizeof(scsi_read_capacity10_resp_t) == 8, "size is not correct"); /// SCSI Read 10 Command -typedef struct TU_ATTR_PACKED { - uint8_t cmd_code; ///< SCSI OpCode - uint8_t reserved; // has LUN according to wiki - uint32_t lba; ///< The first Logical Block Address (LBA) accessed by this command - uint8_t reserved2; - uint16_t block_count; ///< Number of Blocks used by this command - uint8_t control; +typedef struct TU_ATTR_PACKED +{ + uint8_t cmd_code ; ///< SCSI OpCode + uint8_t reserved ; // has LUN according to wiki + uint32_t lba ; ///< The first Logical Block Address (LBA) accessed by this command + uint8_t reserved2 ; + uint16_t block_count ; ///< Number of Blocks used by this command + uint8_t control ; } scsi_read10_t, scsi_write10_t; TU_VERIFY_STATIC(sizeof(scsi_read10_t) == 10, "size is not correct"); TU_VERIFY_STATIC(sizeof(scsi_write10_t) == 10, "size is not correct"); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_MSC_H_ */ diff --git a/Libraries/tinyusb/src/class/msc/msc_device.c b/Libraries/tinyusb/src/class/msc/msc_device.c index d96b593be7d..447560b4dd2 100644 --- a/Libraries/tinyusb/src/class/msc/msc_device.c +++ b/Libraries/tinyusb/src/class/msc/msc_device.c @@ -28,7 +28,7 @@ #if (CFG_TUD_ENABLED && CFG_TUD_MSC) -#include "device/dcd.h" // for faking dcd_event_xfer_complete +#include "device/dcd.h" // for faking dcd_event_xfer_complete #include "device/usbd.h" #include "device/usbd_pvt.h" @@ -36,41 +36,43 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_MSC_LOG_LEVEL -#define CFG_TUD_MSC_LOG_LEVEL CFG_TUD_LOG_LEVEL + #define CFG_TUD_MSC_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_MSC_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_MSC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -enum { - MSC_STAGE_CMD = 0, - MSC_STAGE_DATA, - MSC_STAGE_STATUS, - MSC_STAGE_STATUS_SENT, - MSC_STAGE_NEED_RESET, +enum +{ + MSC_STAGE_CMD = 0, + MSC_STAGE_DATA, + MSC_STAGE_STATUS, + MSC_STAGE_STATUS_SENT, + MSC_STAGE_NEED_RESET, }; -typedef struct { - // TODO optimize alignment - CFG_TUSB_MEM_ALIGN msc_cbw_t cbw; - CFG_TUSB_MEM_ALIGN msc_csw_t csw; +typedef struct +{ + // TODO optimize alignment + CFG_TUSB_MEM_ALIGN msc_cbw_t cbw; + CFG_TUSB_MEM_ALIGN msc_csw_t csw; - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; - // Bulk Only Transfer (BOT) Protocol - uint8_t stage; - uint32_t total_len; // byte to be transferred, can be smaller than total_bytes in cbw - uint32_t xferred_len; // numbered of bytes transferred so far in the Data Stage + // Bulk Only Transfer (BOT) Protocol + uint8_t stage; + uint32_t total_len; // byte to be transferred, can be smaller than total_bytes in cbw + uint32_t xferred_len; // numbered of bytes transferred so far in the Data Stage - // Sense Response Data - uint8_t sense_key; - uint8_t add_sense_code; - uint8_t add_sense_qualifier; -} mscd_interface_t; + // Sense Response Data + uint8_t sense_key; + uint8_t add_sense_code; + uint8_t add_sense_qualifier; +}mscd_interface_t; CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static mscd_interface_t _mscd_itf; CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t _mscd_buf[CFG_TUD_MSC_EP_BUFSIZE]; @@ -78,114 +80,124 @@ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t _mscd_buf[CFG_TUD_MSC_E //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t *buffer, - uint32_t bufsize); -static void proc_read10_cmd(uint8_t rhport, mscd_interface_t *p_msc); +static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t* buffer, uint32_t bufsize); +static void proc_read10_cmd(uint8_t rhport, mscd_interface_t* p_msc); -static void proc_write10_cmd(uint8_t rhport, mscd_interface_t *p_msc); -static void proc_write10_new_data(uint8_t rhport, mscd_interface_t *p_msc, uint32_t xferred_bytes); +static void proc_write10_cmd(uint8_t rhport, mscd_interface_t* p_msc); +static void proc_write10_new_data(uint8_t rhport, mscd_interface_t* p_msc, uint32_t xferred_bytes); TU_ATTR_ALWAYS_INLINE static inline bool is_data_in(uint8_t dir) { - return tu_bit_test(dir, 7); + return tu_bit_test(dir, 7); } -static inline bool send_csw(uint8_t rhport, mscd_interface_t *p_msc) +static inline bool send_csw(uint8_t rhport, mscd_interface_t* p_msc) { - // Data residue is always = host expect - actual transferred - p_msc->csw.data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; + // Data residue is always = host expect - actual transferred + p_msc->csw.data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; - p_msc->stage = MSC_STAGE_STATUS_SENT; - return usbd_edpt_xfer(rhport, p_msc->ep_in, (uint8_t *)&p_msc->csw, sizeof(msc_csw_t)); + p_msc->stage = MSC_STAGE_STATUS_SENT; + return usbd_edpt_xfer(rhport, p_msc->ep_in , (uint8_t*) &p_msc->csw, sizeof(msc_csw_t)); } -static inline bool prepare_cbw(uint8_t rhport, mscd_interface_t *p_msc) +static inline bool prepare_cbw(uint8_t rhport, mscd_interface_t* p_msc) { - p_msc->stage = MSC_STAGE_CMD; - return usbd_edpt_xfer(rhport, p_msc->ep_out, (uint8_t *)&p_msc->cbw, sizeof(msc_cbw_t)); + p_msc->stage = MSC_STAGE_CMD; + return usbd_edpt_xfer(rhport, p_msc->ep_out, (uint8_t*) &p_msc->cbw, sizeof(msc_cbw_t)); } -static void fail_scsi_op(uint8_t rhport, mscd_interface_t *p_msc, uint8_t status) +static void fail_scsi_op(uint8_t rhport, mscd_interface_t* p_msc, uint8_t status) { - msc_cbw_t const *p_cbw = &p_msc->cbw; - msc_csw_t *p_csw = &p_msc->csw; - - p_csw->status = status; - p_csw->data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; - p_msc->stage = MSC_STAGE_STATUS; - - // failed but sense key is not set: default to Illegal Request - if (p_msc->sense_key == 0) - tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - - // If there is data stage and not yet complete, stall it - if (p_cbw->total_bytes && p_csw->data_residue) { - if (is_data_in(p_cbw->dir)) { - usbd_edpt_stall(rhport, p_msc->ep_in); - } else { - usbd_edpt_stall(rhport, p_msc->ep_out); - } + msc_cbw_t const * p_cbw = &p_msc->cbw; + msc_csw_t * p_csw = &p_msc->csw; + + p_csw->status = status; + p_csw->data_residue = p_msc->cbw.total_bytes - p_msc->xferred_len; + p_msc->stage = MSC_STAGE_STATUS; + + // failed but sense key is not set: default to Illegal Request + if ( p_msc->sense_key == 0 ) tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); + + // If there is data stage and not yet complete, stall it + if ( p_cbw->total_bytes && p_csw->data_residue ) + { + if ( is_data_in(p_cbw->dir) ) + { + usbd_edpt_stall(rhport, p_msc->ep_in); + } + else + { + usbd_edpt_stall(rhport, p_msc->ep_out); } + } } static inline uint32_t rdwr10_get_lba(uint8_t const command[]) { - // use offsetof to avoid pointer to the odd/unaligned address - uint32_t const lba = tu_unaligned_read32(command + offsetof(scsi_write10_t, lba)); + // use offsetof to avoid pointer to the odd/unaligned address + uint32_t const lba = tu_unaligned_read32(command + offsetof(scsi_write10_t, lba)); - // lba is in Big Endian - return tu_ntohl(lba); + // lba is in Big Endian + return tu_ntohl(lba); } -static inline uint16_t rdwr10_get_blockcount(msc_cbw_t const *cbw) +static inline uint16_t rdwr10_get_blockcount(msc_cbw_t const* cbw) { - uint16_t const block_count = - tu_unaligned_read16(cbw->command + offsetof(scsi_write10_t, block_count)); - return tu_ntohs(block_count); + uint16_t const block_count = tu_unaligned_read16(cbw->command + offsetof(scsi_write10_t, block_count)); + return tu_ntohs(block_count); } -static inline uint16_t rdwr10_get_blocksize(msc_cbw_t const *cbw) +static inline uint16_t rdwr10_get_blocksize(msc_cbw_t const* cbw) { - // first extract block count in the command - uint16_t const block_count = rdwr10_get_blockcount(cbw); + // first extract block count in the command + uint16_t const block_count = rdwr10_get_blockcount(cbw); - // invalid block count - if (block_count == 0) - return 0; + // invalid block count + if (block_count == 0) return 0; - return (uint16_t)(cbw->total_bytes / block_count); + return (uint16_t) (cbw->total_bytes / block_count); } -uint8_t rdwr10_validate_cmd(msc_cbw_t const *cbw) +uint8_t rdwr10_validate_cmd(msc_cbw_t const* cbw) { - uint8_t status = MSC_CSW_STATUS_PASSED; - uint16_t const block_count = rdwr10_get_blockcount(cbw); - - if (cbw->total_bytes == 0) { - if (block_count) { - TU_LOG_DRV(" SCSI case 2 (Hn < Di) or case 3 (Hn < Do) \r\n"); - status = MSC_CSW_STATUS_PHASE_ERROR; - } else { - // no data transfer, only exist in complaint test suite - } - } else { - if (SCSI_CMD_READ_10 == cbw->command[0] && !is_data_in(cbw->dir)) { - TU_LOG_DRV(" SCSI case 10 (Ho <> Di)\r\n"); - status = MSC_CSW_STATUS_PHASE_ERROR; - } else if (SCSI_CMD_WRITE_10 == cbw->command[0] && is_data_in(cbw->dir)) { - TU_LOG_DRV(" SCSI case 8 (Hi <> Do)\r\n"); - status = MSC_CSW_STATUS_PHASE_ERROR; - } else if (0 == block_count) { - TU_LOG_DRV(" SCSI case 4 Hi > Dn (READ10) or case 9 Ho > Dn (WRITE10) \r\n"); - status = MSC_CSW_STATUS_FAILED; - } else if (cbw->total_bytes / block_count == 0) { - TU_LOG_DRV( - " Computed block size = 0. SCSI case 7 Hi < Di (READ10) or case 13 Ho < Do (WRIT10)\r\n"); - status = MSC_CSW_STATUS_PHASE_ERROR; - } + uint8_t status = MSC_CSW_STATUS_PASSED; + uint16_t const block_count = rdwr10_get_blockcount(cbw); + + if ( cbw->total_bytes == 0 ) + { + if ( block_count ) + { + TU_LOG_DRV(" SCSI case 2 (Hn < Di) or case 3 (Hn < Do) \r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; + }else + { + // no data transfer, only exist in complaint test suite + } + }else + { + if ( SCSI_CMD_READ_10 == cbw->command[0] && !is_data_in(cbw->dir) ) + { + TU_LOG_DRV(" SCSI case 10 (Ho <> Di)\r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; } + else if ( SCSI_CMD_WRITE_10 == cbw->command[0] && is_data_in(cbw->dir) ) + { + TU_LOG_DRV(" SCSI case 8 (Hi <> Do)\r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; + } + else if ( 0 == block_count ) + { + TU_LOG_DRV(" SCSI case 4 Hi > Dn (READ10) or case 9 Ho > Dn (WRITE10) \r\n"); + status = MSC_CSW_STATUS_FAILED; + } + else if ( cbw->total_bytes / block_count == 0 ) + { + TU_LOG_DRV(" Computed block size = 0. SCSI case 7 Hi < Di (READ10) or case 13 Ho < Do (WRIT10)\r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; + } + } - return status; + return status; } //--------------------------------------------------------------------+ @@ -193,23 +205,25 @@ uint8_t rdwr10_validate_cmd(msc_cbw_t const *cbw) //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_MSC_LOG_LEVEL -TU_ATTR_UNUSED tu_static tu_lookup_entry_t const _msc_scsi_cmd_lookup[] = { - { .key = SCSI_CMD_TEST_UNIT_READY, .data = "Test Unit Ready" }, - { .key = SCSI_CMD_INQUIRY, .data = "Inquiry" }, - { .key = SCSI_CMD_MODE_SELECT_6, .data = "Mode_Select 6" }, - { .key = SCSI_CMD_MODE_SENSE_6, .data = "Mode_Sense 6" }, - { .key = SCSI_CMD_START_STOP_UNIT, .data = "Start Stop Unit" }, - { .key = SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL, .data = "Prevent/Allow Medium Removal" }, - { .key = SCSI_CMD_READ_CAPACITY_10, .data = "Read Capacity10" }, - { .key = SCSI_CMD_REQUEST_SENSE, .data = "Request Sense" }, - { .key = SCSI_CMD_READ_FORMAT_CAPACITY, .data = "Read Format Capacity" }, - { .key = SCSI_CMD_READ_10, .data = "Read10" }, - { .key = SCSI_CMD_WRITE_10, .data = "Write10" } +TU_ATTR_UNUSED tu_static tu_lookup_entry_t const _msc_scsi_cmd_lookup[] = +{ + { .key = SCSI_CMD_TEST_UNIT_READY , .data = "Test Unit Ready" }, + { .key = SCSI_CMD_INQUIRY , .data = "Inquiry" }, + { .key = SCSI_CMD_MODE_SELECT_6 , .data = "Mode_Select 6" }, + { .key = SCSI_CMD_MODE_SENSE_6 , .data = "Mode_Sense 6" }, + { .key = SCSI_CMD_START_STOP_UNIT , .data = "Start Stop Unit" }, + { .key = SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL , .data = "Prevent/Allow Medium Removal" }, + { .key = SCSI_CMD_READ_CAPACITY_10 , .data = "Read Capacity10" }, + { .key = SCSI_CMD_REQUEST_SENSE , .data = "Request Sense" }, + { .key = SCSI_CMD_READ_FORMAT_CAPACITY , .data = "Read Format Capacity" }, + { .key = SCSI_CMD_READ_10 , .data = "Read10" }, + { .key = SCSI_CMD_WRITE_10 , .data = "Write10" } }; -TU_ATTR_UNUSED tu_static tu_lookup_table_t const _msc_scsi_cmd_table = { - .count = TU_ARRAY_SIZE(_msc_scsi_cmd_lookup), - .items = _msc_scsi_cmd_lookup +TU_ATTR_UNUSED tu_static tu_lookup_table_t const _msc_scsi_cmd_table = +{ + .count = TU_ARRAY_SIZE(_msc_scsi_cmd_lookup), + .items = _msc_scsi_cmd_lookup }; #endif @@ -217,380 +231,418 @@ TU_ATTR_UNUSED tu_static tu_lookup_table_t const _msc_scsi_cmd_table = { //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ -bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, - uint8_t add_sense_qualifier) +bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, uint8_t add_sense_qualifier) { - (void)lun; + (void) lun; - _mscd_itf.sense_key = sense_key; - _mscd_itf.add_sense_code = add_sense_code; - _mscd_itf.add_sense_qualifier = add_sense_qualifier; + _mscd_itf.sense_key = sense_key; + _mscd_itf.add_sense_code = add_sense_code; + _mscd_itf.add_sense_qualifier = add_sense_qualifier; - return true; + return true; } static inline void set_sense_medium_not_present(uint8_t lun) { - // default sense is NOT READY, MEDIUM NOT PRESENT - tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3A, 0x00); + // default sense is NOT READY, MEDIUM NOT PRESENT + tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3A, 0x00); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void mscd_init(void) -{ - tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); +void mscd_init(void) { + tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); } -bool mscd_deinit(void) -{ - // nothing to do - return true; +bool mscd_deinit(void) { + // nothing to do + return true; } void mscd_reset(uint8_t rhport) { - (void)rhport; - tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); + (void) rhport; + tu_memclr(&_mscd_itf, sizeof(mscd_interface_t)); } -uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { - // only support SCSI's BOT protocol - TU_VERIFY(TUSB_CLASS_MSC == itf_desc->bInterfaceClass && - MSC_SUBCLASS_SCSI == itf_desc->bInterfaceSubClass && - MSC_PROTOCOL_BOT == itf_desc->bInterfaceProtocol, - 0); + // only support SCSI's BOT protocol + TU_VERIFY(TUSB_CLASS_MSC == itf_desc->bInterfaceClass && + MSC_SUBCLASS_SCSI == itf_desc->bInterfaceSubClass && + MSC_PROTOCOL_BOT == itf_desc->bInterfaceProtocol, 0); - // msc driver length is fixed - uint16_t const drv_len = sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t); + // msc driver length is fixed + uint16_t const drv_len = sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t); - // Max length must be at least 1 interface + 2 endpoints - TU_ASSERT(max_len >= drv_len, 0); + // Max length must be at least 1 interface + 2 endpoints + TU_ASSERT(max_len >= drv_len, 0); - mscd_interface_t *p_msc = &_mscd_itf; - p_msc->itf_num = itf_desc->bInterfaceNumber; + mscd_interface_t * p_msc = &_mscd_itf; + p_msc->itf_num = itf_desc->bInterfaceNumber; - // Open endpoint pair - TU_ASSERT(usbd_open_edpt_pair(rhport, tu_desc_next(itf_desc), 2, TUSB_XFER_BULK, &p_msc->ep_out, - &p_msc->ep_in), - 0); + // Open endpoint pair + TU_ASSERT( usbd_open_edpt_pair(rhport, tu_desc_next(itf_desc), 2, TUSB_XFER_BULK, &p_msc->ep_out, &p_msc->ep_in), 0 ); - // Prepare for Command Block Wrapper - TU_ASSERT(prepare_cbw(rhport, p_msc), drv_len); + // Prepare for Command Block Wrapper + TU_ASSERT( prepare_cbw(rhport, p_msc), drv_len); - return drv_len; + return drv_len; } -static void proc_bot_reset(mscd_interface_t *p_msc) +static void proc_bot_reset(mscd_interface_t* p_msc) { - p_msc->stage = MSC_STAGE_CMD; - p_msc->total_len = 0; - p_msc->xferred_len = 0; + p_msc->stage = MSC_STAGE_CMD; + p_msc->total_len = 0; + p_msc->xferred_len = 0; - p_msc->sense_key = 0; - p_msc->add_sense_code = 0; - p_msc->add_sense_qualifier = 0; + p_msc->sense_key = 0; + p_msc->add_sense_code = 0; + p_msc->add_sense_qualifier = 0; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - // nothing to do with DATA & ACK stage - if (stage != CONTROL_STAGE_SETUP) - return true; - - mscd_interface_t *p_msc = &_mscd_itf; - - // Clear Endpoint Feature (stall) for recovery - if (TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && - TUSB_REQ_RCPT_ENDPOINT == request->bmRequestType_bit.recipient && - TUSB_REQ_CLEAR_FEATURE == request->bRequest && - TUSB_REQ_FEATURE_EDPT_HALT == request->wValue) { - uint8_t const ep_addr = tu_u16_low(request->wIndex); - - if (p_msc->stage == MSC_STAGE_NEED_RESET) { - // reset recovery is required to recover from this stage - // Clear Stall request cannot resolve this -> continue to stall endpoint - usbd_edpt_stall(rhport, ep_addr); - } else { - if (ep_addr == p_msc->ep_in) { - if (p_msc->stage == MSC_STAGE_STATUS) { - // resume sending SCSI status if we are in this stage previously before stalled - TU_ASSERT(send_csw(rhport, p_msc)); - } - } else if (ep_addr == p_msc->ep_out) { - if (p_msc->stage == MSC_STAGE_CMD) { - // part of reset recovery (probably due to invalid CBW) -> prepare for new command - // Note: skip if already queued previously - if (usbd_edpt_ready(rhport, p_msc->ep_out)) { - TU_ASSERT(prepare_cbw(rhport, p_msc)); - } - } - } + // nothing to do with DATA & ACK stage + if (stage != CONTROL_STAGE_SETUP) return true; + + mscd_interface_t* p_msc = &_mscd_itf; + + // Clear Endpoint Feature (stall) for recovery + if ( TUSB_REQ_TYPE_STANDARD == request->bmRequestType_bit.type && + TUSB_REQ_RCPT_ENDPOINT == request->bmRequestType_bit.recipient && + TUSB_REQ_CLEAR_FEATURE == request->bRequest && + TUSB_REQ_FEATURE_EDPT_HALT == request->wValue ) + { + uint8_t const ep_addr = tu_u16_low(request->wIndex); + + if ( p_msc->stage == MSC_STAGE_NEED_RESET ) + { + // reset recovery is required to recover from this stage + // Clear Stall request cannot resolve this -> continue to stall endpoint + usbd_edpt_stall(rhport, ep_addr); + } + else + { + if ( ep_addr == p_msc->ep_in ) + { + if ( p_msc->stage == MSC_STAGE_STATUS ) + { + // resume sending SCSI status if we are in this stage previously before stalled + TU_ASSERT( send_csw(rhport, p_msc) ); } - - return true; + } + else if ( ep_addr == p_msc->ep_out ) + { + if ( p_msc->stage == MSC_STAGE_CMD ) + { + // part of reset recovery (probably due to invalid CBW) -> prepare for new command + // Note: skip if already queued previously + if ( usbd_edpt_ready(rhport, p_msc->ep_out) ) + { + TU_ASSERT( prepare_cbw(rhport, p_msc) ); + } + } + } } - // From this point only handle class request only - TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); + return true; + } - switch (request->bRequest) { - case MSC_REQ_RESET: - TU_LOG_DRV(" MSC BOT Reset\r\n"); - TU_VERIFY(request->wValue == 0 && request->wLength == 0); + // From this point only handle class request only + TU_VERIFY(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS); - // driver state reset - proc_bot_reset(p_msc); + switch ( request->bRequest ) + { + case MSC_REQ_RESET: + TU_LOG_DRV(" MSC BOT Reset\r\n"); + TU_VERIFY(request->wValue == 0 && request->wLength == 0); - tud_control_status(rhport, request); - break; + // driver state reset + proc_bot_reset(p_msc); - case MSC_REQ_GET_MAX_LUN: { - TU_LOG_DRV(" MSC Get Max Lun\r\n"); - TU_VERIFY(request->wValue == 0 && request->wLength == 1); + tud_control_status(rhport, request); + break; - uint8_t maxlun = 1; - if (tud_msc_get_maxlun_cb) - maxlun = tud_msc_get_maxlun_cb(); - TU_VERIFY(maxlun); + case MSC_REQ_GET_MAX_LUN: + { + TU_LOG_DRV(" MSC Get Max Lun\r\n"); + TU_VERIFY(request->wValue == 0 && request->wLength == 1); - // MAX LUN is minus 1 by specs - maxlun--; + uint8_t maxlun = 1; + if (tud_msc_get_maxlun_cb) maxlun = tud_msc_get_maxlun_cb(); + TU_VERIFY(maxlun); - tud_control_xfer(rhport, request, &maxlun, 1); - } break; + // MAX LUN is minus 1 by specs + maxlun--; - default: - return false; // stall unsupported request + tud_control_xfer(rhport, request, &maxlun, 1); } + break; - return true; + default: return false; // stall unsupported request + } + + return true; } bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) { - (void)event; + (void) event; - mscd_interface_t *p_msc = &_mscd_itf; - msc_cbw_t const *p_cbw = &p_msc->cbw; - msc_csw_t *p_csw = &p_msc->csw; + mscd_interface_t* p_msc = &_mscd_itf; + msc_cbw_t const * p_cbw = &p_msc->cbw; + msc_csw_t * p_csw = &p_msc->csw; - switch (p_msc->stage) { + switch (p_msc->stage) + { case MSC_STAGE_CMD: - //------------- new CBW received -------------// - // Complete IN while waiting for CMD is usually Status of previous SCSI op, ignore it - if (ep_addr != p_msc->ep_out) - return true; - - if (!(xferred_bytes == sizeof(msc_cbw_t) && p_cbw->signature == MSC_CBW_SIGNATURE)) { - TU_LOG_DRV(" SCSI CBW is not valid\r\n"); - - // BOT 6.6.1 If CBW is not valid stall both endpoints until reset recovery - p_msc->stage = MSC_STAGE_NEED_RESET; - - // invalid CBW stall both endpoints - usbd_edpt_stall(rhport, p_msc->ep_in); - usbd_edpt_stall(rhport, p_msc->ep_out); - - return false; + //------------- new CBW received -------------// + // Complete IN while waiting for CMD is usually Status of previous SCSI op, ignore it + if(ep_addr != p_msc->ep_out) return true; + + if ( !(xferred_bytes == sizeof(msc_cbw_t) && p_cbw->signature == MSC_CBW_SIGNATURE) ) + { + TU_LOG_DRV(" SCSI CBW is not valid\r\n"); + + // BOT 6.6.1 If CBW is not valid stall both endpoints until reset recovery + p_msc->stage = MSC_STAGE_NEED_RESET; + + // invalid CBW stall both endpoints + usbd_edpt_stall(rhport, p_msc->ep_in); + usbd_edpt_stall(rhport, p_msc->ep_out); + + return false; + } + + TU_LOG_DRV(" SCSI Command [Lun%u]: %s\r\n", p_cbw->lun, tu_lookup_find(&_msc_scsi_cmd_table, p_cbw->command[0])); + //TU_LOG_MEM(MSC_DEBUG, p_cbw, xferred_bytes, 2); + + p_csw->signature = MSC_CSW_SIGNATURE; + p_csw->tag = p_cbw->tag; + p_csw->data_residue = 0; + p_csw->status = MSC_CSW_STATUS_PASSED; + + /*------------- Parse command and prepare DATA -------------*/ + p_msc->stage = MSC_STAGE_DATA; + p_msc->total_len = p_cbw->total_bytes; + p_msc->xferred_len = 0; + + // Read10 or Write10 + if ( (SCSI_CMD_READ_10 == p_cbw->command[0]) || (SCSI_CMD_WRITE_10 == p_cbw->command[0]) ) + { + uint8_t const status = rdwr10_validate_cmd(p_cbw); + + if ( status != MSC_CSW_STATUS_PASSED) + { + fail_scsi_op(rhport, p_msc, status); + }else if ( p_cbw->total_bytes ) + { + if (SCSI_CMD_READ_10 == p_cbw->command[0]) + { + proc_read10_cmd(rhport, p_msc); + }else + { + proc_write10_cmd(rhport, p_msc); + } + }else + { + // no data transfer, only exist in complaint test suite + p_msc->stage = MSC_STAGE_STATUS; } - - TU_LOG_DRV(" SCSI Command [Lun%u]: %s\r\n", p_cbw->lun, - tu_lookup_find(&_msc_scsi_cmd_table, p_cbw->command[0])); - //TU_LOG_MEM(MSC_DEBUG, p_cbw, xferred_bytes, 2); - - p_csw->signature = MSC_CSW_SIGNATURE; - p_csw->tag = p_cbw->tag; - p_csw->data_residue = 0; - p_csw->status = MSC_CSW_STATUS_PASSED; - - /*------------- Parse command and prepare DATA -------------*/ - p_msc->stage = MSC_STAGE_DATA; - p_msc->total_len = p_cbw->total_bytes; - p_msc->xferred_len = 0; - - // Read10 or Write10 - if ((SCSI_CMD_READ_10 == p_cbw->command[0]) || (SCSI_CMD_WRITE_10 == p_cbw->command[0])) { - uint8_t const status = rdwr10_validate_cmd(p_cbw); - - if (status != MSC_CSW_STATUS_PASSED) { - fail_scsi_op(rhport, p_msc, status); - } else if (p_cbw->total_bytes) { - if (SCSI_CMD_READ_10 == p_cbw->command[0]) { - proc_read10_cmd(rhport, p_msc); - } else { - proc_write10_cmd(rhport, p_msc); - } - } else { - // no data transfer, only exist in complaint test suite - p_msc->stage = MSC_STAGE_STATUS; + } + else + { + // For other SCSI commands + // 1. OUT : queue transfer (invoke app callback after done) + // 2. IN & Zero: Process if is built-in, else Invoke app callback. Skip DATA if zero length + if ( (p_cbw->total_bytes > 0 ) && !is_data_in(p_cbw->dir) ) + { + if (p_cbw->total_bytes > sizeof(_mscd_buf)) + { + TU_LOG_DRV(" SCSI reject non READ10/WRITE10 with large data\r\n"); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + }else + { + // Didn't check for case 9 (Ho > Dn), which requires examining scsi command first + // but it is OK to just receive data then responded with failed status + TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, (uint16_t) p_msc->total_len) ); + } + }else + { + // First process if it is a built-in commands + int32_t resplen = proc_builtin_scsi(p_cbw->lun, p_cbw->command, _mscd_buf, sizeof(_mscd_buf)); + + // Invoke user callback if not built-in + if ( (resplen < 0) && (p_msc->sense_key == 0) ) + { + resplen = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, (uint16_t) p_msc->total_len); + } + + if ( resplen < 0 ) + { + // unsupported command + TU_LOG_DRV(" SCSI unsupported or failed command\r\n"); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } + else if (resplen == 0) + { + if (p_cbw->total_bytes) + { + // 6.7 The 13 Cases: case 4 (Hi > Dn) + // TU_LOG(MSC_DEBUG, " SCSI case 4 (Hi > Dn): %lu\r\n", p_cbw->total_bytes); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + }else + { + // case 1 Hn = Dn: all good + p_msc->stage = MSC_STAGE_STATUS; } - } else { - // For other SCSI commands - // 1. OUT : queue transfer (invoke app callback after done) - // 2. IN & Zero: Process if is built-in, else Invoke app callback. Skip DATA if zero length - if ((p_cbw->total_bytes > 0) && !is_data_in(p_cbw->dir)) { - if (p_cbw->total_bytes > sizeof(_mscd_buf)) { - TU_LOG_DRV(" SCSI reject non READ10/WRITE10 with large data\r\n"); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } else { - // Didn't check for case 9 (Ho > Dn), which requires examining scsi command first - // but it is OK to just receive data then responded with failed status - TU_ASSERT(usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, - (uint16_t)p_msc->total_len)); - } - } else { - // First process if it is a built-in commands - int32_t resplen = - proc_builtin_scsi(p_cbw->lun, p_cbw->command, _mscd_buf, sizeof(_mscd_buf)); - - // Invoke user callback if not built-in - if ((resplen < 0) && (p_msc->sense_key == 0)) { - resplen = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, - (uint16_t)p_msc->total_len); - } - - if (resplen < 0) { - // unsupported command - TU_LOG_DRV(" SCSI unsupported or failed command\r\n"); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } else if (resplen == 0) { - if (p_cbw->total_bytes) { - // 6.7 The 13 Cases: case 4 (Hi > Dn) - // TU_LOG(MSC_DEBUG, " SCSI case 4 (Hi > Dn): %lu\r\n", p_cbw->total_bytes); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } else { - // case 1 Hn = Dn: all good - p_msc->stage = MSC_STAGE_STATUS; - } - } else { - if (p_cbw->total_bytes == 0) { - // 6.7 The 13 Cases: case 2 (Hn < Di) - // TU_LOG(MSC_DEBUG, " SCSI case 2 (Hn < Di): %lu\r\n", p_cbw->total_bytes); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } else { - // cannot return more than host expect - p_msc->total_len = tu_min32((uint32_t)resplen, p_cbw->total_bytes); - TU_ASSERT(usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, - (uint16_t)p_msc->total_len)); - } - } + } + else + { + if ( p_cbw->total_bytes == 0 ) + { + // 6.7 The 13 Cases: case 2 (Hn < Di) + // TU_LOG(MSC_DEBUG, " SCSI case 2 (Hn < Di): %lu\r\n", p_cbw->total_bytes); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + }else + { + // cannot return more than host expect + p_msc->total_len = tu_min32((uint32_t) resplen, p_cbw->total_bytes); + TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, (uint16_t) p_msc->total_len) ); } + } } - break; + } + break; case MSC_STAGE_DATA: - TU_LOG_DRV(" SCSI Data [Lun%u]\r\n", p_cbw->lun); - //TU_LOG_MEM(MSC_DEBUG, _mscd_buf, xferred_bytes, 2); + TU_LOG_DRV(" SCSI Data [Lun%u]\r\n", p_cbw->lun); + //TU_LOG_MEM(MSC_DEBUG, _mscd_buf, xferred_bytes, 2); - if (SCSI_CMD_READ_10 == p_cbw->command[0]) { - p_msc->xferred_len += xferred_bytes; + if (SCSI_CMD_READ_10 == p_cbw->command[0]) + { + p_msc->xferred_len += xferred_bytes; - if (p_msc->xferred_len >= p_msc->total_len) { - // Data Stage is complete - p_msc->stage = MSC_STAGE_STATUS; - } else { - proc_read10_cmd(rhport, p_msc); - } - } else if (SCSI_CMD_WRITE_10 == p_cbw->command[0]) { - proc_write10_new_data(rhport, p_msc, xferred_bytes); - } else { - p_msc->xferred_len += xferred_bytes; - - // OUT transfer, invoke callback if needed - if (!is_data_in(p_cbw->dir)) { - int32_t cb_result = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, - (uint16_t)p_msc->total_len); - - if (cb_result < 0) { - // unsupported command - TU_LOG_DRV(" SCSI unsupported command\r\n"); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } else { - // TODO haven't implement this scenario any further yet - } - } + if ( p_msc->xferred_len >= p_msc->total_len ) + { + // Data Stage is complete + p_msc->stage = MSC_STAGE_STATUS; + }else + { + proc_read10_cmd(rhport, p_msc); + } + } + else if (SCSI_CMD_WRITE_10 == p_cbw->command[0]) + { + proc_write10_new_data(rhport, p_msc, xferred_bytes); + } + else + { + p_msc->xferred_len += xferred_bytes; - if (p_msc->xferred_len >= p_msc->total_len) { - // Data Stage is complete - p_msc->stage = MSC_STAGE_STATUS; - } else { - // This scenario with command that take more than one transfer is already rejected at Command stage - TU_BREAKPOINT(); - } + // OUT transfer, invoke callback if needed + if ( !is_data_in(p_cbw->dir) ) + { + int32_t cb_result = tud_msc_scsi_cb(p_cbw->lun, p_cbw->command, _mscd_buf, (uint16_t) p_msc->total_len); + + if ( cb_result < 0 ) + { + // unsupported command + TU_LOG_DRV(" SCSI unsupported command\r\n"); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + }else + { + // TODO haven't implement this scenario any further yet + } } - break; + + if ( p_msc->xferred_len >= p_msc->total_len ) + { + // Data Stage is complete + p_msc->stage = MSC_STAGE_STATUS; + } + else + { + // This scenario with command that take more than one transfer is already rejected at Command stage + TU_BREAKPOINT(); + } + } + break; case MSC_STAGE_STATUS: - // processed immediately after this switch, supposedly to be empty - break; + // processed immediately after this switch, supposedly to be empty + break; case MSC_STAGE_STATUS_SENT: - // Wait for the Status phase to complete - if ((ep_addr == p_msc->ep_in) && (xferred_bytes == sizeof(msc_csw_t))) { - TU_LOG_DRV(" SCSI Status [Lun%u] = %u\r\n", p_cbw->lun, p_csw->status); - // TU_LOG_MEM(MSC_DEBUG, p_csw, xferred_bytes, 2); - - // Invoke complete callback if defined - // Note: There is racing issue with samd51 + qspi flash testing with arduino - // if complete_cb() is invoked after queuing the status. - switch (p_cbw->command[0]) { - case SCSI_CMD_READ_10: - if (tud_msc_read10_complete_cb) - tud_msc_read10_complete_cb(p_cbw->lun); - break; - - case SCSI_CMD_WRITE_10: - if (tud_msc_write10_complete_cb) - tud_msc_write10_complete_cb(p_cbw->lun); - break; - - default: - if (tud_msc_scsi_complete_cb) - tud_msc_scsi_complete_cb(p_cbw->lun, p_cbw->command); - break; - } - - TU_ASSERT(prepare_cbw(rhport, p_msc)); - } else { - // Any xfer ended here is consider unknown error, ignore it - TU_LOG1(" Warning expect SCSI Status but received unknown data\r\n"); + // Wait for the Status phase to complete + if( (ep_addr == p_msc->ep_in) && (xferred_bytes == sizeof(msc_csw_t)) ) + { + TU_LOG_DRV(" SCSI Status [Lun%u] = %u\r\n", p_cbw->lun, p_csw->status); + // TU_LOG_MEM(MSC_DEBUG, p_csw, xferred_bytes, 2); + + // Invoke complete callback if defined + // Note: There is racing issue with samd51 + qspi flash testing with arduino + // if complete_cb() is invoked after queuing the status. + switch(p_cbw->command[0]) + { + case SCSI_CMD_READ_10: + if ( tud_msc_read10_complete_cb ) tud_msc_read10_complete_cb(p_cbw->lun); + break; + + case SCSI_CMD_WRITE_10: + if ( tud_msc_write10_complete_cb ) tud_msc_write10_complete_cb(p_cbw->lun); + break; + + default: + if ( tud_msc_scsi_complete_cb ) tud_msc_scsi_complete_cb(p_cbw->lun, p_cbw->command); + break; } - break; - default: - break; + TU_ASSERT( prepare_cbw(rhport, p_msc) ); + }else + { + // Any xfer ended here is consider unknown error, ignore it + TU_LOG1(" Warning expect SCSI Status but received unknown data\r\n"); + } + break; + + default : break; + } + + if ( p_msc->stage == MSC_STAGE_STATUS ) + { + // skip status if epin is currently stalled, will do it when received Clear Stall request + if ( !usbd_edpt_stalled(rhport, p_msc->ep_in) ) + { + if ( (p_cbw->total_bytes > p_msc->xferred_len) && is_data_in(p_cbw->dir) ) + { + // 6.7 The 13 Cases: case 5 (Hi > Di): STALL before status + // TU_LOG(MSC_DEBUG, " SCSI case 5 (Hi > Di): %lu > %lu\r\n", p_cbw->total_bytes, p_msc->xferred_len); + usbd_edpt_stall(rhport, p_msc->ep_in); + }else + { + TU_ASSERT( send_csw(rhport, p_msc) ); + } } - if (p_msc->stage == MSC_STAGE_STATUS) { - // skip status if epin is currently stalled, will do it when received Clear Stall request - if (!usbd_edpt_stalled(rhport, p_msc->ep_in)) { - if ((p_cbw->total_bytes > p_msc->xferred_len) && is_data_in(p_cbw->dir)) { - // 6.7 The 13 Cases: case 5 (Hi > Di): STALL before status - // TU_LOG(MSC_DEBUG, " SCSI case 5 (Hi > Di): %lu > %lu\r\n", p_cbw->total_bytes, p_msc->xferred_len); - usbd_edpt_stall(rhport, p_msc->ep_in); - } else { - TU_ASSERT(send_csw(rhport, p_msc)); - } - } - -#if TU_CHECK_MCU(OPT_MCU_CXD56) - // WORKAROUND: cxd56 has its own nuttx usb stack which does not forward Set/ClearFeature(Endpoint) to DCD. - // There is no way for us to know when EP is un-stall, therefore we will unconditionally un-stall here and - // hope everything will work - if (usbd_edpt_stalled(rhport, p_msc->ep_in)) { - usbd_edpt_clear_stall(rhport, p_msc->ep_in); - send_csw(rhport, p_msc); - } -#endif + #if TU_CHECK_MCU(OPT_MCU_CXD56) + // WORKAROUND: cxd56 has its own nuttx usb stack which does not forward Set/ClearFeature(Endpoint) to DCD. + // There is no way for us to know when EP is un-stall, therefore we will unconditionally un-stall here and + // hope everything will work + if ( usbd_edpt_stalled(rhport, p_msc->ep_in) ) + { + usbd_edpt_clear_stall(rhport, p_msc->ep_in); + send_csw(rhport, p_msc); } + #endif + } - return true; + return true; } /*------------------------------------------------------------------*/ @@ -599,294 +651,327 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t // return response's length (copied to buffer). Negative if it is not an built-in command or indicate Failed status (CSW) // In case of a failed status, sense key must be set for reason of failure -static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t *buffer, - uint32_t bufsize) +static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t* buffer, uint32_t bufsize) { - (void)bufsize; // TODO refractor later - int32_t resplen; + (void) bufsize; // TODO refractor later + int32_t resplen; - mscd_interface_t *p_msc = &_mscd_itf; + mscd_interface_t* p_msc = &_mscd_itf; - switch (scsi_cmd[0]) { + switch ( scsi_cmd[0] ) + { case SCSI_CMD_TEST_UNIT_READY: - resplen = 0; - if (!tud_msc_test_unit_ready_cb(lun)) { - // Failed status response - resplen = -1; - - // set default sense if not set by callback - if (p_msc->sense_key == 0) - set_sense_medium_not_present(lun); - } - break; + resplen = 0; + if ( !tud_msc_test_unit_ready_cb(lun) ) + { + // Failed status response + resplen = - 1; + + // set default sense if not set by callback + if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); + } + break; case SCSI_CMD_START_STOP_UNIT: - resplen = 0; - - if (tud_msc_start_stop_cb) { - scsi_start_stop_unit_t const *start_stop = (scsi_start_stop_unit_t const *)scsi_cmd; - if (!tud_msc_start_stop_cb(lun, start_stop->power_condition, start_stop->start, - start_stop->load_eject)) { - // Failed status response - resplen = -1; - - // set default sense if not set by callback - if (p_msc->sense_key == 0) - set_sense_medium_not_present(lun); - } + resplen = 0; + + if (tud_msc_start_stop_cb) + { + scsi_start_stop_unit_t const * start_stop = (scsi_start_stop_unit_t const *) scsi_cmd; + if ( !tud_msc_start_stop_cb(lun, start_stop->power_condition, start_stop->start, start_stop->load_eject) ) + { + // Failed status response + resplen = - 1; + + // set default sense if not set by callback + if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); } - break; + } + break; case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: - resplen = 0; - - if (tud_msc_prevent_allow_medium_removal_cb) { - scsi_prevent_allow_medium_removal_t const *prevent_allow = - (scsi_prevent_allow_medium_removal_t const *)scsi_cmd; - if (!tud_msc_prevent_allow_medium_removal_cb(lun, prevent_allow->prohibit_removal, - prevent_allow->control)) { - // Failed status response - resplen = -1; - - // set default sense if not set by callback - if (p_msc->sense_key == 0) - set_sense_medium_not_present(lun); - } + resplen = 0; + + if (tud_msc_prevent_allow_medium_removal_cb) + { + scsi_prevent_allow_medium_removal_t const * prevent_allow = (scsi_prevent_allow_medium_removal_t const *) scsi_cmd; + if ( !tud_msc_prevent_allow_medium_removal_cb(lun, prevent_allow->prohibit_removal, prevent_allow->control) ) + { + // Failed status response + resplen = - 1; + + // set default sense if not set by callback + if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); } - break; - - case SCSI_CMD_READ_CAPACITY_10: { - uint32_t block_count; - uint32_t block_size; - uint16_t block_size_u16; - - tud_msc_capacity_cb(lun, &block_count, &block_size_u16); - block_size = (uint32_t)block_size_u16; - - // Invalid block size/count from callback, possibly unit is not ready - // stall this request, set sense key to NOT READY - if (block_count == 0 || block_size == 0) { - resplen = -1; + } + break; - // set default sense if not set by callback - if (p_msc->sense_key == 0) - set_sense_medium_not_present(lun); - } else { - scsi_read_capacity10_resp_t read_capa10; - - read_capa10.last_lba = tu_htonl(block_count - 1); - read_capa10.block_size = tu_htonl(block_size); - - resplen = sizeof(read_capa10); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_capa10, (size_t)resplen)); - } - } break; - case SCSI_CMD_READ_FORMAT_CAPACITY: { - scsi_read_format_capacity_data_t read_fmt_capa = { .list_length = 8, - .block_num = 0, - .descriptor_type = 2, // formatted media - .block_size_u16 = 0 }; + case SCSI_CMD_READ_CAPACITY_10: + { + uint32_t block_count; + uint32_t block_size; + uint16_t block_size_u16; - uint32_t block_count; - uint16_t block_size; - - tud_msc_capacity_cb(lun, &block_count, &block_size); - - // Invalid block size/count from callback, possibly unit is not ready - // stall this request, set sense key to NOT READY - if (block_count == 0 || block_size == 0) { - resplen = -1; - - // set default sense if not set by callback - if (p_msc->sense_key == 0) - set_sense_medium_not_present(lun); - } else { - read_fmt_capa.block_num = tu_htonl(block_count); - read_fmt_capa.block_size_u16 = tu_htons(block_size); - - resplen = sizeof(read_fmt_capa); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_fmt_capa, (size_t)resplen)); - } - } break; - - case SCSI_CMD_INQUIRY: { - scsi_inquiry_resp_t inquiry_rsp = { - .is_removable = 1, - .version = 2, - .response_data_format = 2, - .additional_length = sizeof(scsi_inquiry_resp_t) - 5, - }; - - // vendor_id, product_id, product_rev is space padded string - memset(inquiry_rsp.vendor_id, ' ', sizeof(inquiry_rsp.vendor_id)); - memset(inquiry_rsp.product_id, ' ', sizeof(inquiry_rsp.product_id)); - memset(inquiry_rsp.product_rev, ' ', sizeof(inquiry_rsp.product_rev)); - - tud_msc_inquiry_cb(lun, inquiry_rsp.vendor_id, inquiry_rsp.product_id, - inquiry_rsp.product_rev); - - resplen = sizeof(inquiry_rsp); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &inquiry_rsp, (size_t)resplen)); - } break; - - case SCSI_CMD_MODE_SENSE_6: { - scsi_mode_sense6_resp_t mode_resp = { - .data_len = 3, - .medium_type = 0, - .write_protected = false, - .reserved = 0, - .block_descriptor_len = 0 // no block descriptor are included - }; - - bool writable = true; - if (tud_msc_is_writable_cb) { - writable = tud_msc_is_writable_cb(lun); - } + tud_msc_capacity_cb(lun, &block_count, &block_size_u16); + block_size = (uint32_t) block_size_u16; - mode_resp.write_protected = !writable; - - resplen = sizeof(mode_resp); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &mode_resp, (size_t)resplen)); - } break; - - case SCSI_CMD_REQUEST_SENSE: { - scsi_sense_fixed_resp_t sense_rsp = { .response_code = 0x70, // current, fixed format - .valid = 1 }; + // Invalid block size/count from callback, possibly unit is not ready + // stall this request, set sense key to NOT READY + if (block_count == 0 || block_size == 0) + { + resplen = -1; - sense_rsp.add_sense_len = sizeof(scsi_sense_fixed_resp_t) - 8; - sense_rsp.sense_key = (uint8_t)(p_msc->sense_key & 0x0F); - sense_rsp.add_sense_code = p_msc->add_sense_code; - sense_rsp.add_sense_qualifier = p_msc->add_sense_qualifier; + // set default sense if not set by callback + if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); + }else + { + scsi_read_capacity10_resp_t read_capa10; - resplen = sizeof(sense_rsp); - TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &sense_rsp, (size_t)resplen)); + read_capa10.last_lba = tu_htonl(block_count-1); + read_capa10.block_size = tu_htonl(block_size); - // request sense callback could overwrite the sense data - if (tud_msc_request_sense_cb) { - resplen = tud_msc_request_sense_cb(lun, buffer, (uint16_t)bufsize); - } + resplen = sizeof(read_capa10); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_capa10, (size_t) resplen)); + } + } + break; + + case SCSI_CMD_READ_FORMAT_CAPACITY: + { + scsi_read_format_capacity_data_t read_fmt_capa = + { + .list_length = 8, + .block_num = 0, + .descriptor_type = 2, // formatted media + .block_size_u16 = 0 + }; + + uint32_t block_count; + uint16_t block_size; + + tud_msc_capacity_cb(lun, &block_count, &block_size); + + // Invalid block size/count from callback, possibly unit is not ready + // stall this request, set sense key to NOT READY + if (block_count == 0 || block_size == 0) + { + resplen = -1; - // Clear sense data after copy - tud_msc_set_sense(lun, 0, 0, 0); - } break; + // set default sense if not set by callback + if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); + }else + { + read_fmt_capa.block_num = tu_htonl(block_count); + read_fmt_capa.block_size_u16 = tu_htons(block_size); - default: - resplen = -1; - break; + resplen = sizeof(read_fmt_capa); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &read_fmt_capa, (size_t) resplen)); + } + } + break; + + case SCSI_CMD_INQUIRY: + { + scsi_inquiry_resp_t inquiry_rsp = + { + .is_removable = 1, + .version = 2, + .response_data_format = 2, + .additional_length = sizeof(scsi_inquiry_resp_t) - 5, + }; + + // vendor_id, product_id, product_rev is space padded string + memset(inquiry_rsp.vendor_id , ' ', sizeof(inquiry_rsp.vendor_id)); + memset(inquiry_rsp.product_id , ' ', sizeof(inquiry_rsp.product_id)); + memset(inquiry_rsp.product_rev, ' ', sizeof(inquiry_rsp.product_rev)); + + tud_msc_inquiry_cb(lun, inquiry_rsp.vendor_id, inquiry_rsp.product_id, inquiry_rsp.product_rev); + + resplen = sizeof(inquiry_rsp); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &inquiry_rsp, (size_t) resplen)); + } + break; + + case SCSI_CMD_MODE_SENSE_6: + { + scsi_mode_sense6_resp_t mode_resp = + { + .data_len = 3, + .medium_type = 0, + .write_protected = false, + .reserved = 0, + .block_descriptor_len = 0 // no block descriptor are included + }; + + bool writable = true; + if ( tud_msc_is_writable_cb ) + { + writable = tud_msc_is_writable_cb(lun); + } + + mode_resp.write_protected = !writable; + + resplen = sizeof(mode_resp); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &mode_resp, (size_t) resplen)); } + break; + + case SCSI_CMD_REQUEST_SENSE: + { + scsi_sense_fixed_resp_t sense_rsp = + { + .response_code = 0x70, // current, fixed format + .valid = 1 + }; + + sense_rsp.add_sense_len = sizeof(scsi_sense_fixed_resp_t) - 8; + sense_rsp.sense_key = (uint8_t) (p_msc->sense_key & 0x0F); + sense_rsp.add_sense_code = p_msc->add_sense_code; + sense_rsp.add_sense_qualifier = p_msc->add_sense_qualifier; + + resplen = sizeof(sense_rsp); + TU_VERIFY(0 == tu_memcpy_s(buffer, bufsize, &sense_rsp, (size_t) resplen)); + + // request sense callback could overwrite the sense data + if (tud_msc_request_sense_cb) + { + resplen = tud_msc_request_sense_cb(lun, buffer, (uint16_t) bufsize); + } + + // Clear sense data after copy + tud_msc_set_sense(lun, 0, 0, 0); + } + break; + + default: resplen = -1; break; + } - return resplen; + return resplen; } -static void proc_read10_cmd(uint8_t rhport, mscd_interface_t *p_msc) +static void proc_read10_cmd(uint8_t rhport, mscd_interface_t* p_msc) { - msc_cbw_t const *p_cbw = &p_msc->cbw; - - // block size already verified not zero - uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); - - // Adjust lba with transferred bytes - uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); - - // remaining bytes capped at class buffer - int32_t nbytes = (int32_t)tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes - p_msc->xferred_len); - - // Application can consume smaller bytes - uint32_t const offset = p_msc->xferred_len % block_sz; - nbytes = tud_msc_read10_cb(p_cbw->lun, lba, offset, _mscd_buf, (uint32_t)nbytes); - - if (nbytes < 0) { - // negative means error -> endpoint is stalled & status in CSW set to failed - TU_LOG_DRV(" tud_msc_read10_cb() return -1\r\n"); - - // set sense - set_sense_medium_not_present(p_cbw->lun); - - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } else if (nbytes == 0) { - // zero means not ready -> simulate an transfer complete so that this driver callback will fired again - dcd_event_xfer_complete(rhport, p_msc->ep_in, 0, XFER_RESULT_SUCCESS, false); - } else { - TU_ASSERT(usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, (uint16_t)nbytes), ); - } + msc_cbw_t const * p_cbw = &p_msc->cbw; + + // block size already verified not zero + uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); + + // Adjust lba with transferred bytes + uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); + + // remaining bytes capped at class buffer + int32_t nbytes = (int32_t) tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes-p_msc->xferred_len); + + // Application can consume smaller bytes + uint32_t const offset = p_msc->xferred_len % block_sz; + nbytes = tud_msc_read10_cb(p_cbw->lun, lba, offset, _mscd_buf, (uint32_t) nbytes); + + if ( nbytes < 0 ) + { + // negative means error -> endpoint is stalled & status in CSW set to failed + TU_LOG_DRV(" tud_msc_read10_cb() return -1\r\n"); + + // set sense + set_sense_medium_not_present(p_cbw->lun); + + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + } + else if ( nbytes == 0 ) + { + // zero means not ready -> simulate an transfer complete so that this driver callback will fired again + dcd_event_xfer_complete(rhport, p_msc->ep_in, 0, XFER_RESULT_SUCCESS, false); + } + else + { + TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_in, _mscd_buf, (uint16_t) nbytes), ); + } } -static void proc_write10_cmd(uint8_t rhport, mscd_interface_t *p_msc) +static void proc_write10_cmd(uint8_t rhport, mscd_interface_t* p_msc) { - msc_cbw_t const *p_cbw = &p_msc->cbw; - bool writable = true; - - if (tud_msc_is_writable_cb) { - writable = tud_msc_is_writable_cb(p_cbw->lun); - } - - if (!writable) { - // Not writable, complete this SCSI op with error - // Sense = Write protected - tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_DATA_PROTECT, 0x27, 0x00); - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - return; - } - - // remaining bytes capped at class buffer - uint16_t nbytes = - (uint16_t)tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes - p_msc->xferred_len); - - // Write10 callback will be called later when usb transfer complete - TU_ASSERT(usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, nbytes), ); + msc_cbw_t const * p_cbw = &p_msc->cbw; + bool writable = true; + + if ( tud_msc_is_writable_cb ) + { + writable = tud_msc_is_writable_cb(p_cbw->lun); + } + + if ( !writable ) + { + // Not writable, complete this SCSI op with error + // Sense = Write protected + tud_msc_set_sense(p_cbw->lun, SCSI_SENSE_DATA_PROTECT, 0x27, 0x00); + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + return; + } + + // remaining bytes capped at class buffer + uint16_t nbytes = (uint16_t) tu_min32(sizeof(_mscd_buf), p_cbw->total_bytes-p_msc->xferred_len); + + // Write10 callback will be called later when usb transfer complete + TU_ASSERT( usbd_edpt_xfer(rhport, p_msc->ep_out, _mscd_buf, nbytes), ); } // process new data arrived from WRITE10 -static void proc_write10_new_data(uint8_t rhport, mscd_interface_t *p_msc, uint32_t xferred_bytes) +static void proc_write10_new_data(uint8_t rhport, mscd_interface_t* p_msc, uint32_t xferred_bytes) { - msc_cbw_t const *p_cbw = &p_msc->cbw; - - // block size already verified not zero - uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); - - // Adjust lba with transferred bytes - uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); - - // Invoke callback to consume new data - uint32_t const offset = p_msc->xferred_len % block_sz; - int32_t nbytes = tud_msc_write10_cb(p_cbw->lun, lba, offset, _mscd_buf, xferred_bytes); - - if (nbytes < 0) { - // negative means error -> failed this scsi op - TU_LOG_DRV(" tud_msc_write10_cb() return -1\r\n"); - - // update actual byte before failed - p_msc->xferred_len += xferred_bytes; - - // Set sense - set_sense_medium_not_present(p_cbw->lun); - - fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); - } else { - // Application consume less than what we got (including zero) - if ((uint32_t)nbytes < xferred_bytes) { - uint32_t const left_over = xferred_bytes - (uint32_t)nbytes; - if (nbytes > 0) { - p_msc->xferred_len += (uint16_t)nbytes; - memmove(_mscd_buf, _mscd_buf + nbytes, left_over); - } - - // simulate an transfer complete with adjusted parameters --> callback will be invoked with adjusted parameter - dcd_event_xfer_complete(rhport, p_msc->ep_out, left_over, XFER_RESULT_SUCCESS, false); - } else { - // Application consume all bytes in our buffer - p_msc->xferred_len += xferred_bytes; - - if (p_msc->xferred_len >= p_msc->total_len) { - // Data Stage is complete - p_msc->stage = MSC_STAGE_STATUS; - } else { - // prepare to receive more data from host - proc_write10_cmd(rhport, p_msc); - } - } + msc_cbw_t const * p_cbw = &p_msc->cbw; + + // block size already verified not zero + uint16_t const block_sz = rdwr10_get_blocksize(p_cbw); + + // Adjust lba with transferred bytes + uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz); + + // Invoke callback to consume new data + uint32_t const offset = p_msc->xferred_len % block_sz; + int32_t nbytes = tud_msc_write10_cb(p_cbw->lun, lba, offset, _mscd_buf, xferred_bytes); + + if ( nbytes < 0 ) + { + // negative means error -> failed this scsi op + TU_LOG_DRV(" tud_msc_write10_cb() return -1\r\n"); + + // update actual byte before failed + p_msc->xferred_len += xferred_bytes; + + // Set sense + set_sense_medium_not_present(p_cbw->lun); + + fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED); + }else + { + // Application consume less than what we got (including zero) + if ( (uint32_t) nbytes < xferred_bytes ) + { + uint32_t const left_over = xferred_bytes - (uint32_t) nbytes; + if ( nbytes > 0 ) + { + p_msc->xferred_len += (uint16_t) nbytes; + memmove(_mscd_buf, _mscd_buf+nbytes, left_over); + } + + // simulate an transfer complete with adjusted parameters --> callback will be invoked with adjusted parameter + dcd_event_xfer_complete(rhport, p_msc->ep_out, left_over, XFER_RESULT_SUCCESS, false); + } + else + { + // Application consume all bytes in our buffer + p_msc->xferred_len += xferred_bytes; + + if ( p_msc->xferred_len >= p_msc->total_len ) + { + // Data Stage is complete + p_msc->stage = MSC_STAGE_STATUS; + }else + { + // prepare to receive more data from host + proc_write10_cmd(rhport, p_msc); + } } + } } #endif diff --git a/Libraries/tinyusb/src/class/msc/msc_device.h b/Libraries/tinyusb/src/class/msc/msc_device.h index a5015652ea2..29acd280ab5 100644 --- a/Libraries/tinyusb/src/class/msc/msc_device.h +++ b/Libraries/tinyusb/src/class/msc/msc_device.h @@ -31,7 +31,7 @@ #include "msc.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -39,13 +39,13 @@ extern "C" { //--------------------------------------------------------------------+ #if !defined(CFG_TUD_MSC_EP_BUFSIZE) & defined(CFG_TUD_MSC_BUFSIZE) -// TODO warn user to use new name later on -// #warning CFG_TUD_MSC_BUFSIZE is renamed to CFG_TUD_MSC_EP_BUFSIZE, please update to use the new name -#define CFG_TUD_MSC_EP_BUFSIZE CFG_TUD_MSC_BUFSIZE + // TODO warn user to use new name later on + // #warning CFG_TUD_MSC_BUFSIZE is renamed to CFG_TUD_MSC_EP_BUFSIZE, please update to use the new name + #define CFG_TUD_MSC_EP_BUFSIZE CFG_TUD_MSC_BUFSIZE #endif #ifndef CFG_TUD_MSC_EP_BUFSIZE -#error CFG_TUD_MSC_EP_BUFSIZE must be defined, value of a block size should work well, the more the better + #error CFG_TUD_MSC_EP_BUFSIZE must be defined, value of a block size should work well, the more the better #endif TU_VERIFY_STATIC(CFG_TUD_MSC_EP_BUFSIZE < UINT16_MAX, "Size is not correct"); @@ -55,8 +55,7 @@ TU_VERIFY_STATIC(CFG_TUD_MSC_EP_BUFSIZE < UINT16_MAX, "Size is not correct"); //--------------------------------------------------------------------+ // Set SCSI sense response -bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, - uint8_t add_sense_qualifier); +bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, uint8_t add_sense_qualifier); //--------------------------------------------------------------------+ // Application Callbacks (WEAK is optional) @@ -74,8 +73,7 @@ bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, // // - read < 0 : Indicate application error e.g invalid address. This request will be STALLed // and return failed status in command status wrapper phase. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, - uint32_t bufsize); +int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize); // Invoked when received SCSI WRITE10 command // - Address = lba * BLOCK_SIZE + offset @@ -91,13 +89,11 @@ int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buff // and return failed status in command status wrapper phase. // // TODO change buffer to const uint8_t* -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, - uint32_t bufsize); +int32_t tud_msc_write10_cb (uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize); // Invoked when received SCSI_CMD_INQUIRY // Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], - uint8_t product_rev[4]); +void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]); // Invoked when received Test Unit Ready command. // return true allowing host to read/write this LUN e.g SD card inserted @@ -105,7 +101,7 @@ bool tud_msc_test_unit_ready_cb(uint8_t lun); // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size // Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size); +void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size); /** * Invoked when received an SCSI command not in built-in list below. @@ -123,7 +119,7 @@ void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_siz * \retval negative Indicate error e.g unsupported command, tinyusb will \b STALL the corresponding * endpoint and return failed status in command status wrapper phase. */ -int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize); +int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize); /*------------- Optional callbacks -------------*/ @@ -133,15 +129,13 @@ TU_ATTR_WEAK uint8_t tud_msc_get_maxlun_cb(void); // Invoked when received Start Stop Unit command // - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage // - Start = 1 : active mode, if load_eject = 1 : load disk storage -TU_ATTR_WEAK bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, - bool load_eject); +TU_ATTR_WEAK bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject); //Invoked when we receive the Prevent / Allow Medium Removal command -TU_ATTR_WEAK bool tud_msc_prevent_allow_medium_removal_cb(uint8_t lun, uint8_t prohibit_removal, - uint8_t control); +TU_ATTR_WEAK bool tud_msc_prevent_allow_medium_removal_cb(uint8_t lun, uint8_t prohibit_removal, uint8_t control); // Invoked when received REQUEST_SENSE -TU_ATTR_WEAK int32_t tud_msc_request_sense_cb(uint8_t lun, void *buffer, uint16_t bufsize); +TU_ATTR_WEAK int32_t tud_msc_request_sense_cb(uint8_t lun, void* buffer, uint16_t bufsize); // Invoked when Read10 command is complete TU_ATTR_WEAK void tud_msc_read10_complete_cb(uint8_t lun); @@ -158,15 +152,15 @@ TU_ATTR_WEAK bool tud_msc_is_writable_cb(uint8_t lun); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void mscd_init(void); -bool mscd_deinit(void); -void mscd_reset(uint8_t rhport); -uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *p_request); -bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +void mscd_init (void); +bool mscd_deinit (void); +void mscd_reset (uint8_t rhport); +uint16_t mscd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool mscd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * p_request); +bool mscd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_MSC_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/msc/msc_host.c b/Libraries/tinyusb/src/class/msc/msc_host.c index de128a912aa..ce6e7fb2d88 100644 --- a/Libraries/tinyusb/src/class/msc/msc_host.c +++ b/Libraries/tinyusb/src/class/msc/msc_host.c @@ -35,239 +35,232 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUH_MSC_LOG_LEVEL -#define CFG_TUH_MSC_LOG_LEVEL CFG_TUH_LOG_LEVEL + #define CFG_TUH_MSC_LOG_LEVEL CFG_TUH_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_MSC_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUH_MSC_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ enum { - MSC_STAGE_IDLE = 0, - MSC_STAGE_CMD, - MSC_STAGE_DATA, - MSC_STAGE_STATUS, + MSC_STAGE_IDLE = 0, + MSC_STAGE_CMD, + MSC_STAGE_DATA, + MSC_STAGE_STATUS, }; typedef struct { - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; - uint8_t max_lun; + uint8_t max_lun; - volatile bool configured; // Receive SET_CONFIGURE - volatile bool mounted; // Enumeration is complete + volatile bool configured; // Receive SET_CONFIGURE + volatile bool mounted; // Enumeration is complete - struct { - uint32_t block_size; - uint32_t block_count; - } capacity[CFG_TUH_MSC_MAXLUN]; + struct { + uint32_t block_size; + uint32_t block_count; + } capacity[CFG_TUH_MSC_MAXLUN]; - //------------- SCSI -------------// - uint8_t stage; - void *buffer; - tuh_msc_complete_cb_t complete_cb; - uintptr_t complete_arg; + //------------- SCSI -------------// + uint8_t stage; + void* buffer; + tuh_msc_complete_cb_t complete_cb; + uintptr_t complete_arg; - CFG_TUH_MEM_ALIGN msc_cbw_t cbw; - CFG_TUH_MEM_ALIGN msc_csw_t csw; + CFG_TUH_MEM_ALIGN msc_cbw_t cbw; + CFG_TUH_MEM_ALIGN msc_csw_t csw; } msch_interface_t; CFG_TUH_MEM_SECTION static msch_interface_t _msch_itf[CFG_TUH_DEVICE_MAX]; // buffer used to read scsi information when mounted // largest response data currently is inquiry TODO Inquiry is not part of enum anymore -CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN static uint8_t _msch_buffer[sizeof(scsi_inquiry_resp_t)]; +CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN +static uint8_t _msch_buffer[sizeof(scsi_inquiry_resp_t)]; // FIXME potential nul reference TU_ATTR_ALWAYS_INLINE -static inline msch_interface_t *get_itf(uint8_t dev_addr) -{ - return &_msch_itf[dev_addr - 1]; +static inline msch_interface_t* get_itf(uint8_t dev_addr) { + return &_msch_itf[dev_addr - 1]; } //--------------------------------------------------------------------+ // PUBLIC API //--------------------------------------------------------------------+ -uint8_t tuh_msc_get_maxlun(uint8_t dev_addr) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - return p_msc->max_lun; +uint8_t tuh_msc_get_maxlun(uint8_t dev_addr) { + msch_interface_t* p_msc = get_itf(dev_addr); + return p_msc->max_lun; } -uint32_t tuh_msc_get_block_count(uint8_t dev_addr, uint8_t lun) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - return p_msc->capacity[lun].block_count; +uint32_t tuh_msc_get_block_count(uint8_t dev_addr, uint8_t lun) { + msch_interface_t* p_msc = get_itf(dev_addr); + return p_msc->capacity[lun].block_count; } -uint32_t tuh_msc_get_block_size(uint8_t dev_addr, uint8_t lun) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - return p_msc->capacity[lun].block_size; +uint32_t tuh_msc_get_block_size(uint8_t dev_addr, uint8_t lun) { + msch_interface_t* p_msc = get_itf(dev_addr); + return p_msc->capacity[lun].block_size; } -bool tuh_msc_mounted(uint8_t dev_addr) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - return p_msc->mounted; +bool tuh_msc_mounted(uint8_t dev_addr) { + msch_interface_t* p_msc = get_itf(dev_addr); + return p_msc->mounted; } -bool tuh_msc_ready(uint8_t dev_addr) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - return p_msc->mounted && !usbh_edpt_busy(dev_addr, p_msc->ep_in) && - !usbh_edpt_busy(dev_addr, p_msc->ep_out); +bool tuh_msc_ready(uint8_t dev_addr) { + msch_interface_t* p_msc = get_itf(dev_addr); + return p_msc->mounted && !usbh_edpt_busy(dev_addr, p_msc->ep_in) && !usbh_edpt_busy(dev_addr, p_msc->ep_out); } //--------------------------------------------------------------------+ // PUBLIC API: SCSI COMMAND //--------------------------------------------------------------------+ -static inline void cbw_init(msc_cbw_t *cbw, uint8_t lun) -{ - tu_memclr(cbw, sizeof(msc_cbw_t)); - cbw->signature = MSC_CBW_SIGNATURE; - cbw->tag = 0x54555342; // TUSB - cbw->lun = lun; +static inline void cbw_init(msc_cbw_t* cbw, uint8_t lun) { + tu_memclr(cbw, sizeof(msc_cbw_t)); + cbw->signature = MSC_CBW_SIGNATURE; + cbw->tag = 0x54555342; // TUSB + cbw->lun = lun; } -bool tuh_msc_scsi_command(uint8_t daddr, msc_cbw_t const *cbw, void *data, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) -{ - msch_interface_t *p_msc = get_itf(daddr); - TU_VERIFY(p_msc->configured); +bool tuh_msc_scsi_command(uint8_t daddr, msc_cbw_t const* cbw, void* data, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { + msch_interface_t* p_msc = get_itf(daddr); + TU_VERIFY(p_msc->configured); - // claim endpoint - TU_VERIFY(usbh_edpt_claim(daddr, p_msc->ep_out)); + // claim endpoint + TU_VERIFY(usbh_edpt_claim(daddr, p_msc->ep_out)); - p_msc->cbw = *cbw; - p_msc->stage = MSC_STAGE_CMD; - p_msc->buffer = data; - p_msc->complete_cb = complete_cb; - p_msc->complete_arg = arg; + p_msc->cbw = *cbw; + p_msc->stage = MSC_STAGE_CMD; + p_msc->buffer = data; + p_msc->complete_cb = complete_cb; + p_msc->complete_arg = arg; - if (!usbh_edpt_xfer(daddr, p_msc->ep_out, (uint8_t *)&p_msc->cbw, sizeof(msc_cbw_t))) { - usbh_edpt_release(daddr, p_msc->ep_out); - return false; - } + if (!usbh_edpt_xfer(daddr, p_msc->ep_out, (uint8_t*) &p_msc->cbw, sizeof(msc_cbw_t))) { + usbh_edpt_release(daddr, p_msc->ep_out); + return false; + } - return true; + return true; } -bool tuh_msc_read_capacity(uint8_t dev_addr, uint8_t lun, scsi_read_capacity10_resp_t *response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->configured); +bool tuh_msc_read_capacity(uint8_t dev_addr, uint8_t lun, scsi_read_capacity10_resp_t* response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { + msch_interface_t* p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->configured); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = sizeof(scsi_read_capacity10_resp_t); - cbw.dir = TUSB_DIR_IN_MASK; - cbw.cmd_len = sizeof(scsi_read_capacity10_t); - cbw.command[0] = SCSI_CMD_READ_CAPACITY_10; + cbw.total_bytes = sizeof(scsi_read_capacity10_resp_t); + cbw.dir = TUSB_DIR_IN_MASK; + cbw.cmd_len = sizeof(scsi_read_capacity10_t); + cbw.command[0] = SCSI_CMD_READ_CAPACITY_10; - return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); } -bool tuh_msc_inquiry(uint8_t dev_addr, uint8_t lun, scsi_inquiry_resp_t *response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->mounted); +bool tuh_msc_inquiry(uint8_t dev_addr, uint8_t lun, scsi_inquiry_resp_t* response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { + msch_interface_t* p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->mounted); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = sizeof(scsi_inquiry_resp_t); - cbw.dir = TUSB_DIR_IN_MASK; - cbw.cmd_len = sizeof(scsi_inquiry_t); + cbw.total_bytes = sizeof(scsi_inquiry_resp_t); + cbw.dir = TUSB_DIR_IN_MASK; + cbw.cmd_len = sizeof(scsi_inquiry_t); - scsi_inquiry_t const cmd_inquiry = { .cmd_code = SCSI_CMD_INQUIRY, - .alloc_length = sizeof(scsi_inquiry_resp_t) }; - memcpy(cbw.command, &cmd_inquiry, cbw.cmd_len); + scsi_inquiry_t const cmd_inquiry = { + .cmd_code = SCSI_CMD_INQUIRY, + .alloc_length = sizeof(scsi_inquiry_resp_t) + }; + memcpy(cbw.command, &cmd_inquiry, cbw.cmd_len); - return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); } -bool tuh_msc_test_unit_ready(uint8_t dev_addr, uint8_t lun, tuh_msc_complete_cb_t complete_cb, - uintptr_t arg) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->configured); +bool tuh_msc_test_unit_ready(uint8_t dev_addr, uint8_t lun, tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { + msch_interface_t* p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->configured); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = 0; - cbw.dir = TUSB_DIR_OUT; - cbw.cmd_len = sizeof(scsi_test_unit_ready_t); - cbw.command[0] = SCSI_CMD_TEST_UNIT_READY; - cbw.command[1] = lun; // according to wiki TODO need verification + cbw.total_bytes = 0; + cbw.dir = TUSB_DIR_OUT; + cbw.cmd_len = sizeof(scsi_test_unit_ready_t); + cbw.command[0] = SCSI_CMD_TEST_UNIT_READY; + cbw.command[1] = lun; // according to wiki TODO need verification - return tuh_msc_scsi_command(dev_addr, &cbw, NULL, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, NULL, complete_cb, arg); } -bool tuh_msc_request_sense(uint8_t dev_addr, uint8_t lun, void *response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) -{ - msc_cbw_t cbw; - cbw_init(&cbw, lun); +bool tuh_msc_request_sense(uint8_t dev_addr, uint8_t lun, void* response, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = 18; // TODO sense response - cbw.dir = TUSB_DIR_IN_MASK; - cbw.cmd_len = sizeof(scsi_request_sense_t); + cbw.total_bytes = 18; // TODO sense response + cbw.dir = TUSB_DIR_IN_MASK; + cbw.cmd_len = sizeof(scsi_request_sense_t); - scsi_request_sense_t const cmd_request_sense = { .cmd_code = SCSI_CMD_REQUEST_SENSE, - .alloc_length = 18 }; - memcpy(cbw.command, &cmd_request_sense, cbw.cmd_len); + scsi_request_sense_t const cmd_request_sense = { + .cmd_code = SCSI_CMD_REQUEST_SENSE, + .alloc_length = 18 + }; + memcpy(cbw.command, &cmd_request_sense, cbw.cmd_len); - return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, response, complete_cb, arg); } -bool tuh_msc_read10(uint8_t dev_addr, uint8_t lun, void *buffer, uint32_t lba, uint16_t block_count, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->mounted); +bool tuh_msc_read10(uint8_t dev_addr, uint8_t lun, void* buffer, uint32_t lba, uint16_t block_count, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { + msch_interface_t* p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->mounted); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = block_count * p_msc->capacity[lun].block_size; - cbw.dir = TUSB_DIR_IN_MASK; - cbw.cmd_len = sizeof(scsi_read10_t); + cbw.total_bytes = block_count * p_msc->capacity[lun].block_size; + cbw.dir = TUSB_DIR_IN_MASK; + cbw.cmd_len = sizeof(scsi_read10_t); - scsi_read10_t const cmd_read10 = { .cmd_code = SCSI_CMD_READ_10, - .lba = tu_htonl(lba), - .block_count = tu_htons(block_count) }; - memcpy(cbw.command, &cmd_read10, cbw.cmd_len); + scsi_read10_t const cmd_read10 = { + .cmd_code = SCSI_CMD_READ_10, + .lba = tu_htonl(lba), + .block_count = tu_htons(block_count) + }; + memcpy(cbw.command, &cmd_read10, cbw.cmd_len); - return tuh_msc_scsi_command(dev_addr, &cbw, buffer, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, buffer, complete_cb, arg); } -bool tuh_msc_write10(uint8_t dev_addr, uint8_t lun, void const *buffer, uint32_t lba, - uint16_t block_count, tuh_msc_complete_cb_t complete_cb, uintptr_t arg) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->mounted); +bool tuh_msc_write10(uint8_t dev_addr, uint8_t lun, void const* buffer, uint32_t lba, uint16_t block_count, + tuh_msc_complete_cb_t complete_cb, uintptr_t arg) { + msch_interface_t* p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->mounted); - msc_cbw_t cbw; - cbw_init(&cbw, lun); + msc_cbw_t cbw; + cbw_init(&cbw, lun); - cbw.total_bytes = block_count * p_msc->capacity[lun].block_size; - cbw.dir = TUSB_DIR_OUT; - cbw.cmd_len = sizeof(scsi_write10_t); + cbw.total_bytes = block_count * p_msc->capacity[lun].block_size; + cbw.dir = TUSB_DIR_OUT; + cbw.cmd_len = sizeof(scsi_write10_t); - scsi_write10_t const cmd_write10 = { .cmd_code = SCSI_CMD_WRITE_10, - .lba = tu_htonl(lba), - .block_count = tu_htons(block_count) }; - memcpy(cbw.command, &cmd_write10, cbw.cmd_len); + scsi_write10_t const cmd_write10 = { + .cmd_code = SCSI_CMD_WRITE_10, + .lba = tu_htonl(lba), + .block_count = tu_htons(block_count) + }; + memcpy(cbw.command, &cmd_write10, cbw.cmd_len); - return tuh_msc_scsi_command(dev_addr, &cbw, (void *)(uintptr_t)buffer, complete_cb, arg); + return tuh_msc_scsi_command(dev_addr, &cbw, (void*) (uintptr_t) buffer, complete_cb, arg); } #if 0 @@ -291,233 +284,220 @@ bool tuh_msc_reset(uint8_t dev_addr) { //--------------------------------------------------------------------+ // CLASS-USBH API //--------------------------------------------------------------------+ -bool msch_init(void) -{ - TU_LOG_DRV("sizeof(msch_interface_t) = %u\r\n", sizeof(msch_interface_t)); - tu_memclr(_msch_itf, sizeof(_msch_itf)); - return true; +bool msch_init(void) { + TU_LOG_DRV("sizeof(msch_interface_t) = %u\r\n", sizeof(msch_interface_t)); + tu_memclr(_msch_itf, sizeof(_msch_itf)); + return true; } -bool msch_deinit(void) -{ - return true; +bool msch_deinit(void) { + return true; } -void msch_close(uint8_t dev_addr) -{ - TU_VERIFY(dev_addr <= CFG_TUH_DEVICE_MAX, ); - msch_interface_t *p_msc = get_itf(dev_addr); - TU_VERIFY(p_msc->configured, ); +void msch_close(uint8_t dev_addr) { + TU_VERIFY(dev_addr <= CFG_TUH_DEVICE_MAX,); + msch_interface_t* p_msc = get_itf(dev_addr); + TU_VERIFY(p_msc->configured,); - TU_LOG_DRV(" MSCh close addr = %d\r\n", dev_addr); + TU_LOG_DRV(" MSCh close addr = %d\r\n", dev_addr); - // invoke Application Callback - if (p_msc->mounted) { - if (tuh_msc_umount_cb) - tuh_msc_umount_cb(dev_addr); - } + // invoke Application Callback + if (p_msc->mounted) { + if (tuh_msc_umount_cb) tuh_msc_umount_cb(dev_addr); + } - tu_memclr(p_msc, sizeof(msch_interface_t)); + tu_memclr(p_msc, sizeof(msch_interface_t)); } -bool msch_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - msc_cbw_t const *cbw = &p_msc->cbw; - msc_csw_t *csw = &p_msc->csw; +bool msch_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) { + msch_interface_t* p_msc = get_itf(dev_addr); + msc_cbw_t const * cbw = &p_msc->cbw; + msc_csw_t * csw = &p_msc->csw; - switch (p_msc->stage) { + switch (p_msc->stage) { case MSC_STAGE_CMD: - // Must be Command Block - TU_ASSERT(ep_addr == p_msc->ep_out && event == XFER_RESULT_SUCCESS && - xferred_bytes == sizeof(msc_cbw_t)); - - if (cbw->total_bytes && p_msc->buffer) { - // Data stage if any - p_msc->stage = MSC_STAGE_DATA; - uint8_t const ep_data = (cbw->dir & TUSB_DIR_IN_MASK) ? p_msc->ep_in : p_msc->ep_out; - TU_ASSERT(usbh_edpt_xfer(dev_addr, ep_data, p_msc->buffer, (uint16_t)cbw->total_bytes)); - } else { - // Status stage - p_msc->stage = MSC_STAGE_STATUS; - TU_ASSERT(usbh_edpt_xfer(dev_addr, p_msc->ep_in, (uint8_t *)&p_msc->csw, - (uint16_t)sizeof(msc_csw_t))); - } - break; - - case MSC_STAGE_DATA: + // Must be Command Block + TU_ASSERT(ep_addr == p_msc->ep_out && event == XFER_RESULT_SUCCESS && xferred_bytes == sizeof(msc_cbw_t)); + + if (cbw->total_bytes && p_msc->buffer) { + // Data stage if any + p_msc->stage = MSC_STAGE_DATA; + uint8_t const ep_data = (cbw->dir & TUSB_DIR_IN_MASK) ? p_msc->ep_in : p_msc->ep_out; + TU_ASSERT(usbh_edpt_xfer(dev_addr, ep_data, p_msc->buffer, (uint16_t) cbw->total_bytes)); + } else { // Status stage p_msc->stage = MSC_STAGE_STATUS; - TU_ASSERT(usbh_edpt_xfer(dev_addr, p_msc->ep_in, (uint8_t *)&p_msc->csw, - (uint16_t)sizeof(msc_csw_t))); - break; + TU_ASSERT(usbh_edpt_xfer(dev_addr, p_msc->ep_in, (uint8_t*) &p_msc->csw, (uint16_t) sizeof(msc_csw_t))); + } + break; + + case MSC_STAGE_DATA: + // Status stage + p_msc->stage = MSC_STAGE_STATUS; + TU_ASSERT(usbh_edpt_xfer(dev_addr, p_msc->ep_in, (uint8_t*) &p_msc->csw, (uint16_t) sizeof(msc_csw_t))); + break; case MSC_STAGE_STATUS: - // SCSI op is complete - p_msc->stage = MSC_STAGE_IDLE; - - if (p_msc->complete_cb) { - tuh_msc_complete_data_t const cb_data = { - .cbw = cbw, .csw = csw, .scsi_data = p_msc->buffer, .user_arg = p_msc->complete_arg - }; - p_msc->complete_cb(dev_addr, &cb_data); - } - break; - - // unknown state + // SCSI op is complete + p_msc->stage = MSC_STAGE_IDLE; + + if (p_msc->complete_cb) { + tuh_msc_complete_data_t const cb_data = { + .cbw = cbw, + .csw = csw, + .scsi_data = p_msc->buffer, + .user_arg = p_msc->complete_arg + }; + p_msc->complete_cb(dev_addr, &cb_data); + } + break; + + // unknown state default: - break; - } + break; + } - return true; + return true; } //--------------------------------------------------------------------+ // MSC Enumeration //--------------------------------------------------------------------+ -static void config_get_maxlun_complete(tuh_xfer_t *xfer); -static bool config_test_unit_ready_complete(uint8_t dev_addr, - tuh_msc_complete_data_t const *cb_data); -static bool config_request_sense_complete(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data); -static bool config_read_capacity_complete(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data); - -bool msch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, - uint16_t max_len) -{ - (void)rhport; - TU_VERIFY(MSC_SUBCLASS_SCSI == desc_itf->bInterfaceSubClass && - MSC_PROTOCOL_BOT == desc_itf->bInterfaceProtocol); - - // msc driver length is fixed - uint16_t const drv_len = (uint16_t)(sizeof(tusb_desc_interface_t) + - desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); - TU_ASSERT(drv_len <= max_len); - - msch_interface_t *p_msc = get_itf(dev_addr); - tusb_desc_endpoint_t const *ep_desc = (tusb_desc_endpoint_t const *)tu_desc_next(desc_itf); - - for (uint32_t i = 0; i < 2; i++) { - TU_ASSERT(TUSB_DESC_ENDPOINT == ep_desc->bDescriptorType && - TUSB_XFER_BULK == ep_desc->bmAttributes.xfer); - TU_ASSERT(tuh_edpt_open(dev_addr, ep_desc)); - - if (TUSB_DIR_IN == tu_edpt_dir(ep_desc->bEndpointAddress)) { - p_msc->ep_in = ep_desc->bEndpointAddress; - } else { - p_msc->ep_out = ep_desc->bEndpointAddress; - } - - ep_desc = (tusb_desc_endpoint_t const *)tu_desc_next(ep_desc); +static void config_get_maxlun_complete(tuh_xfer_t* xfer); +static bool config_test_unit_ready_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data); +static bool config_request_sense_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data); +static bool config_read_capacity_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data); + +bool msch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const* desc_itf, uint16_t max_len) { + (void) rhport; + TU_VERIFY (MSC_SUBCLASS_SCSI == desc_itf->bInterfaceSubClass && + MSC_PROTOCOL_BOT == desc_itf->bInterfaceProtocol); + + // msc driver length is fixed + uint16_t const drv_len = (uint16_t) (sizeof(tusb_desc_interface_t) + + desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t)); + TU_ASSERT(drv_len <= max_len); + + msch_interface_t* p_msc = get_itf(dev_addr); + tusb_desc_endpoint_t const* ep_desc = (tusb_desc_endpoint_t const*) tu_desc_next(desc_itf); + + for (uint32_t i = 0; i < 2; i++) { + TU_ASSERT(TUSB_DESC_ENDPOINT == ep_desc->bDescriptorType && TUSB_XFER_BULK == ep_desc->bmAttributes.xfer); + TU_ASSERT(tuh_edpt_open(dev_addr, ep_desc)); + + if (TUSB_DIR_IN == tu_edpt_dir(ep_desc->bEndpointAddress)) { + p_msc->ep_in = ep_desc->bEndpointAddress; + } else { + p_msc->ep_out = ep_desc->bEndpointAddress; } - p_msc->itf_num = desc_itf->bInterfaceNumber; + ep_desc = (tusb_desc_endpoint_t const*) tu_desc_next(ep_desc); + } + + p_msc->itf_num = desc_itf->bInterfaceNumber; - return true; + return true; } -bool msch_set_config(uint8_t dev_addr, uint8_t itf_num) -{ - msch_interface_t *p_msc = get_itf(dev_addr); - TU_ASSERT(p_msc->itf_num == itf_num); - - p_msc->configured = true; - - //------------- Get Max Lun -------------// - TU_LOG_DRV("MSC Get Max Lun\r\n"); - tusb_control_request_t const request = { .bmRequestType_bit = { .recipient = - TUSB_REQ_RCPT_INTERFACE, - .type = TUSB_REQ_TYPE_CLASS, - .direction = TUSB_DIR_IN }, - .bRequest = MSC_REQ_GET_MAX_LUN, - .wValue = 0, - .wIndex = itf_num, - .wLength = 1 }; - - tuh_xfer_t xfer = { .daddr = dev_addr, - .ep_addr = 0, - .setup = &request, - .buffer = _msch_buffer, - .complete_cb = config_get_maxlun_complete, - .user_data = 0 }; - TU_ASSERT(tuh_control_xfer(&xfer)); - - return true; +bool msch_set_config(uint8_t dev_addr, uint8_t itf_num) { + msch_interface_t* p_msc = get_itf(dev_addr); + TU_ASSERT(p_msc->itf_num == itf_num); + + p_msc->configured = true; + + //------------- Get Max Lun -------------// + TU_LOG_DRV("MSC Get Max Lun\r\n"); + tusb_control_request_t const request = { + .bmRequestType_bit = { + .recipient = TUSB_REQ_RCPT_INTERFACE, + .type = TUSB_REQ_TYPE_CLASS, + .direction = TUSB_DIR_IN + }, + .bRequest = MSC_REQ_GET_MAX_LUN, + .wValue = 0, + .wIndex = itf_num, + .wLength = 1 + }; + + tuh_xfer_t xfer = { + .daddr = dev_addr, + .ep_addr = 0, + .setup = &request, + .buffer = _msch_buffer, + .complete_cb = config_get_maxlun_complete, + .user_data = 0 + }; + TU_ASSERT(tuh_control_xfer(&xfer)); + + return true; } -static void config_get_maxlun_complete(tuh_xfer_t *xfer) -{ - uint8_t const daddr = xfer->daddr; - msch_interface_t *p_msc = get_itf(daddr); +static void config_get_maxlun_complete(tuh_xfer_t* xfer) { + uint8_t const daddr = xfer->daddr; + msch_interface_t* p_msc = get_itf(daddr); - // STALL means zero - p_msc->max_lun = (XFER_RESULT_SUCCESS == xfer->result) ? _msch_buffer[0] : 0; - p_msc->max_lun++; // MAX LUN is minus 1 by specs + // STALL means zero + p_msc->max_lun = (XFER_RESULT_SUCCESS == xfer->result) ? _msch_buffer[0] : 0; + p_msc->max_lun++; // MAX LUN is minus 1 by specs - TU_LOG_DRV(" Max LUN = %u\r\n", p_msc->max_lun); + TU_LOG_DRV(" Max LUN = %u\r\n", p_msc->max_lun); - // TODO multiple LUN support - TU_LOG_DRV("SCSI Test Unit Ready\r\n"); - uint8_t const lun = 0; - tuh_msc_test_unit_ready(daddr, lun, config_test_unit_ready_complete, 0); + // TODO multiple LUN support + TU_LOG_DRV("SCSI Test Unit Ready\r\n"); + uint8_t const lun = 0; + tuh_msc_test_unit_ready(daddr, lun, config_test_unit_ready_complete, 0); } -static bool config_test_unit_ready_complete(uint8_t dev_addr, - tuh_msc_complete_data_t const *cb_data) -{ - msc_cbw_t const *cbw = cb_data->cbw; - msc_csw_t const *csw = cb_data->csw; - - if (csw->status == 0) { - // Unit is ready, read its capacity - TU_LOG_DRV("SCSI Read Capacity\r\n"); - tuh_msc_read_capacity(dev_addr, cbw->lun, - (scsi_read_capacity10_resp_t *)((void *)_msch_buffer), - config_read_capacity_complete, 0); - } else { - // Note: During enumeration, some device fails Test Unit Ready and require a few retries - // with Request Sense to start working !! - // TODO limit number of retries - TU_LOG_DRV("SCSI Request Sense\r\n"); - TU_ASSERT(tuh_msc_request_sense(dev_addr, cbw->lun, _msch_buffer, - config_request_sense_complete, 0)); - } - - return true; +static bool config_test_unit_ready_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data) { + msc_cbw_t const* cbw = cb_data->cbw; + msc_csw_t const* csw = cb_data->csw; + + if (csw->status == 0) { + // Unit is ready, read its capacity + TU_LOG_DRV("SCSI Read Capacity\r\n"); + tuh_msc_read_capacity(dev_addr, cbw->lun, (scsi_read_capacity10_resp_t*) ((void*) _msch_buffer), + config_read_capacity_complete, 0); + } else { + // Note: During enumeration, some device fails Test Unit Ready and require a few retries + // with Request Sense to start working !! + // TODO limit number of retries + TU_LOG_DRV("SCSI Request Sense\r\n"); + TU_ASSERT(tuh_msc_request_sense(dev_addr, cbw->lun, _msch_buffer, config_request_sense_complete, 0)); + } + + return true; } -static bool config_request_sense_complete(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data) -{ - msc_cbw_t const *cbw = cb_data->cbw; - msc_csw_t const *csw = cb_data->csw; +static bool config_request_sense_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data) { + msc_cbw_t const* cbw = cb_data->cbw; + msc_csw_t const* csw = cb_data->csw; - TU_ASSERT(csw->status == 0); - TU_ASSERT(tuh_msc_test_unit_ready(dev_addr, cbw->lun, config_test_unit_ready_complete, 0)); - return true; + TU_ASSERT(csw->status == 0); + TU_ASSERT(tuh_msc_test_unit_ready(dev_addr, cbw->lun, config_test_unit_ready_complete, 0)); + return true; } -static bool config_read_capacity_complete(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data) -{ - msc_cbw_t const *cbw = cb_data->cbw; - msc_csw_t const *csw = cb_data->csw; +static bool config_read_capacity_complete(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data) { + msc_cbw_t const* cbw = cb_data->cbw; + msc_csw_t const* csw = cb_data->csw; - TU_ASSERT(csw->status == 0); + TU_ASSERT(csw->status == 0); - msch_interface_t *p_msc = get_itf(dev_addr); + msch_interface_t* p_msc = get_itf(dev_addr); - // Capacity response field: Block size and Last LBA are both Big-Endian - scsi_read_capacity10_resp_t *resp = (scsi_read_capacity10_resp_t *)((void *)_msch_buffer); - p_msc->capacity[cbw->lun].block_count = tu_ntohl(resp->last_lba) + 1; - p_msc->capacity[cbw->lun].block_size = tu_ntohl(resp->block_size); + // Capacity response field: Block size and Last LBA are both Big-Endian + scsi_read_capacity10_resp_t* resp = (scsi_read_capacity10_resp_t*) ((void*) _msch_buffer); + p_msc->capacity[cbw->lun].block_count = tu_ntohl(resp->last_lba) + 1; + p_msc->capacity[cbw->lun].block_size = tu_ntohl(resp->block_size); - // Mark enumeration is complete - p_msc->mounted = true; - if (tuh_msc_mount_cb) - tuh_msc_mount_cb(dev_addr); + // Mark enumeration is complete + p_msc->mounted = true; + if (tuh_msc_mount_cb) tuh_msc_mount_cb(dev_addr); - // notify usbh that driver enumeration is complete - usbh_driver_set_config_complete(dev_addr, p_msc->itf_num); + // notify usbh that driver enumeration is complete + usbh_driver_set_config_complete(dev_addr, p_msc->itf_num); - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/msc/msc_host.h b/Libraries/tinyusb/src/class/msc/msc_host.h index e09d53a4208..9fda566d83e 100644 --- a/Libraries/tinyusb/src/class/msc/msc_host.h +++ b/Libraries/tinyusb/src/class/msc/msc_host.h @@ -30,7 +30,7 @@ #include "msc.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -38,17 +38,17 @@ extern "C" { //--------------------------------------------------------------------+ #ifndef CFG_TUH_MSC_MAXLUN -#define CFG_TUH_MSC_MAXLUN 4 +#define CFG_TUH_MSC_MAXLUN 4 #endif typedef struct { - msc_cbw_t const *cbw; // SCSI command - msc_csw_t const *csw; // SCSI status - void *scsi_data; // SCSI Data - uintptr_t user_arg; // user argument -} tuh_msc_complete_data_t; + msc_cbw_t const* cbw; // SCSI command + msc_csw_t const* csw; // SCSI status + void* scsi_data; // SCSI Data + uintptr_t user_arg; // user argument +}tuh_msc_complete_data_t; -typedef bool (*tuh_msc_complete_cb_t)(uint8_t dev_addr, tuh_msc_complete_data_t const *cb_data); +typedef bool (*tuh_msc_complete_cb_t)(uint8_t dev_addr, tuh_msc_complete_data_t const* cb_data); //--------------------------------------------------------------------+ // Application API @@ -73,40 +73,33 @@ uint32_t tuh_msc_get_block_size(uint8_t dev_addr, uint8_t lun); // Perform a full SCSI command (cbw, data, csw) in non-blocking manner. // Complete callback is invoked when SCSI op is complete. // return true if success, false if there is already pending operation. -bool tuh_msc_scsi_command(uint8_t daddr, msc_cbw_t const *cbw, void *data, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_scsi_command(uint8_t daddr, msc_cbw_t const* cbw, void* data, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Inquiry command // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_inquiry(uint8_t dev_addr, uint8_t lun, scsi_inquiry_resp_t *response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_inquiry(uint8_t dev_addr, uint8_t lun, scsi_inquiry_resp_t* response, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Test Unit Ready command // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_test_unit_ready(uint8_t dev_addr, uint8_t lun, tuh_msc_complete_cb_t complete_cb, - uintptr_t arg); +bool tuh_msc_test_unit_ready(uint8_t dev_addr, uint8_t lun, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Request Sense 10 command // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_request_sense(uint8_t dev_addr, uint8_t lun, void *response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_request_sense(uint8_t dev_addr, uint8_t lun, void *response, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Read 10 command. Read n blocks starting from LBA to buffer // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_read10(uint8_t dev_addr, uint8_t lun, void *buffer, uint32_t lba, uint16_t block_count, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_read10(uint8_t dev_addr, uint8_t lun, void * buffer, uint32_t lba, uint16_t block_count, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Write 10 command. Write n blocks starting from LBA to device // Complete callback is invoked when SCSI op is complete. -bool tuh_msc_write10(uint8_t dev_addr, uint8_t lun, void const *buffer, uint32_t lba, - uint16_t block_count, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_write10(uint8_t dev_addr, uint8_t lun, void const * buffer, uint32_t lba, uint16_t block_count, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); // Perform SCSI Read Capacity 10 command // Complete callback is invoked when SCSI op is complete. // Note: during enumeration, host stack already carried out this request. Application can retrieve capacity by // simply call tuh_msc_get_block_count() and tuh_msc_get_block_size() -bool tuh_msc_read_capacity(uint8_t dev_addr, uint8_t lun, scsi_read_capacity10_resp_t *response, - tuh_msc_complete_cb_t complete_cb, uintptr_t arg); +bool tuh_msc_read_capacity(uint8_t dev_addr, uint8_t lun, scsi_read_capacity10_resp_t* response, tuh_msc_complete_cb_t complete_cb, uintptr_t arg); //------------- Application Callback -------------// @@ -120,16 +113,15 @@ TU_ATTR_WEAK void tuh_msc_umount_cb(uint8_t dev_addr); // Internal Class Driver API //--------------------------------------------------------------------+ -bool msch_init(void); -bool msch_deinit(void); -bool msch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, - uint16_t max_len); -bool msch_set_config(uint8_t dev_addr, uint8_t itf_num); -void msch_close(uint8_t dev_addr); -bool msch_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +bool msch_init (void); +bool msch_deinit (void); +bool msch_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, uint16_t max_len); +bool msch_set_config (uint8_t dev_addr, uint8_t itf_num); +void msch_close (uint8_t dev_addr); +bool msch_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/class/net/ecm_rndis_device.c b/Libraries/tinyusb/src/class/net/ecm_rndis_device.c index b757dede063..f7a5fd22520 100644 --- a/Libraries/tinyusb/src/class/net/ecm_rndis_device.c +++ b/Libraries/tinyusb/src/class/net/ecm_rndis_device.c @@ -27,7 +27,7 @@ #include "tusb_option.h" -#if (CFG_TUD_ENABLED && CFG_TUD_ECM_RNDIS) +#if ( CFG_TUD_ENABLED && CFG_TUD_ECM_RNDIS ) #include "device/usbd.h" #include "device/usbd_pvt.h" @@ -35,41 +35,42 @@ #include "net_device.h" #include "rndis_protocol.h" -void rndis_class_set_handler(uint8_t *data, - int size); /* found in ./misc/networking/rndis_reports.c */ +void rndis_class_set_handler(uint8_t *data, int size); /* found in ./misc/networking/rndis_reports.c */ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -typedef struct { - uint8_t itf_num; // Index number of Management Interface, +1 for Data Interface - uint8_t itf_data_alt; // Alternate setting of Data Interface. 0 : inactive, 1 : active +typedef struct +{ + uint8_t itf_num; // Index number of Management Interface, +1 for Data Interface + uint8_t itf_data_alt; // Alternate setting of Data Interface. 0 : inactive, 1 : active - uint8_t ep_notif; - uint8_t ep_in; - uint8_t ep_out; + uint8_t ep_notif; + uint8_t ep_in; + uint8_t ep_out; - bool ecm_mode; + bool ecm_mode; - // Endpoint descriptor use to open/close when receiving SetInterface - // TODO since configuration descriptor may not be long-lived memory, we should - // keep a copy of endpoint attribute instead - uint8_t const *ecm_desc_epdata; + // Endpoint descriptor use to open/close when receiving SetInterface + // TODO since configuration descriptor may not be long-lived memory, we should + // keep a copy of endpoint attribute instead + uint8_t const * ecm_desc_epdata; } netd_interface_t; #define CFG_TUD_NET_PACKET_PREFIX_LEN sizeof(rndis_data_packet_t) #define CFG_TUD_NET_PACKET_SUFFIX_LEN 0 -CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t - received[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN]; +CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static +uint8_t received[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN]; -CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t - transmitted[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN]; +CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static +uint8_t transmitted[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN]; -struct ecm_notify_struct { - tusb_control_request_t header; - uint32_t downlink, uplink; +struct ecm_notify_struct +{ + tusb_control_request_t header; + uint32_t downlink, uplink; }; tu_static const struct ecm_notify_struct ecm_notify_nc = @@ -94,9 +95,10 @@ tu_static const struct ecm_notify_struct ecm_notify_csc = }; // TODO remove CFG_TUD_MEM_SECTION, control internal buffer is already in this special section -CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static union { - uint8_t rndis_buf[120]; - struct ecm_notify_struct ecm_buf; +CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static union +{ + uint8_t rndis_buf[120]; + struct ecm_notify_struct ecm_buf; } notify; //--------------------------------------------------------------------+ @@ -109,320 +111,343 @@ tu_static bool can_xmit; void tud_network_recv_renew(void) { - usbd_edpt_xfer(0, _netd_itf.ep_out, received, sizeof(received)); + usbd_edpt_xfer(0, _netd_itf.ep_out, received, sizeof(received)); } static void do_in_xfer(uint8_t *buf, uint16_t len) { - can_xmit = false; - usbd_edpt_xfer(0, _netd_itf.ep_in, buf, len); + can_xmit = false; + usbd_edpt_xfer(0, _netd_itf.ep_in, buf, len); } void netd_report(uint8_t *buf, uint16_t len) { - uint8_t const rhport = 0; + uint8_t const rhport = 0; - // skip if previous report not yet acknowledged by host - if (usbd_edpt_busy(rhport, _netd_itf.ep_notif)) - return; - usbd_edpt_xfer(rhport, _netd_itf.ep_notif, buf, len); + // skip if previous report not yet acknowledged by host + if ( usbd_edpt_busy(rhport, _netd_itf.ep_notif) ) return; + usbd_edpt_xfer(rhport, _netd_itf.ep_notif, buf, len); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void netd_init(void) -{ - tu_memclr(&_netd_itf, sizeof(_netd_itf)); +void netd_init(void) { + tu_memclr(&_netd_itf, sizeof(_netd_itf)); } -bool netd_deinit(void) -{ - return true; +bool netd_deinit(void) { + return true; } void netd_reset(uint8_t rhport) { - (void)rhport; + (void) rhport; - netd_init(); + netd_init(); } -uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { - bool const is_rndis = (TUD_RNDIS_ITF_CLASS == itf_desc->bInterfaceClass && - TUD_RNDIS_ITF_SUBCLASS == itf_desc->bInterfaceSubClass && - TUD_RNDIS_ITF_PROTOCOL == itf_desc->bInterfaceProtocol); + bool const is_rndis = (TUD_RNDIS_ITF_CLASS == itf_desc->bInterfaceClass && + TUD_RNDIS_ITF_SUBCLASS == itf_desc->bInterfaceSubClass && + TUD_RNDIS_ITF_PROTOCOL == itf_desc->bInterfaceProtocol); - bool const is_ecm = (TUSB_CLASS_CDC == itf_desc->bInterfaceClass && - CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL == itf_desc->bInterfaceSubClass && - 0x00 == itf_desc->bInterfaceProtocol); + bool const is_ecm = (TUSB_CLASS_CDC == itf_desc->bInterfaceClass && + CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL == itf_desc->bInterfaceSubClass && + 0x00 == itf_desc->bInterfaceProtocol); - TU_VERIFY(is_rndis || is_ecm, 0); + TU_VERIFY(is_rndis || is_ecm, 0); - // confirm interface hasn't already been allocated - TU_ASSERT(0 == _netd_itf.ep_notif, 0); + // confirm interface hasn't already been allocated + TU_ASSERT(0 == _netd_itf.ep_notif, 0); - // sanity check the descriptor - _netd_itf.ecm_mode = is_ecm; + // sanity check the descriptor + _netd_itf.ecm_mode = is_ecm; - //------------- Management Interface -------------// - _netd_itf.itf_num = itf_desc->bInterfaceNumber; + //------------- Management Interface -------------// + _netd_itf.itf_num = itf_desc->bInterfaceNumber; - uint16_t drv_len = sizeof(tusb_desc_interface_t); - uint8_t const *p_desc = tu_desc_next(itf_desc); + uint16_t drv_len = sizeof(tusb_desc_interface_t); + uint8_t const * p_desc = tu_desc_next( itf_desc ); - // Communication Functional Descriptors - while (TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len) { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + // Communication Functional Descriptors + while ( TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len ) + { + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - // notification endpoint (if any) - if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { - TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *)p_desc), 0); + // notification endpoint (if any) + if ( TUSB_DESC_ENDPOINT == tu_desc_type(p_desc) ) + { + TU_ASSERT( usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), 0 ); - _netd_itf.ep_notif = ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress; + _netd_itf.ep_notif = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress; - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - //------------- Data Interface -------------// - // - RNDIS Data followed immediately by a pair of endpoints - // - CDC-ECM data interface has 2 alternate settings - // - 0 : zero endpoints for inactive (default) - // - 1 : IN & OUT endpoints for active networking - TU_ASSERT(TUSB_DESC_INTERFACE == tu_desc_type(p_desc), 0); - - do { - tusb_desc_interface_t const *data_itf_desc = (tusb_desc_interface_t const *)p_desc; - TU_ASSERT(TUSB_CLASS_CDC_DATA == data_itf_desc->bInterfaceClass, 0); - - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } while (_netd_itf.ecm_mode && (TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && - (drv_len <= max_len)); - - // Pair of endpoints - TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(p_desc), 0); - - if (_netd_itf.ecm_mode) { - // ECM by default is in-active, save the endpoint attribute - // to open later when received setInterface - _netd_itf.ecm_desc_epdata = p_desc; - } else { - // Open endpoint pair for RNDIS - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &_netd_itf.ep_out, - &_netd_itf.ep_in), - 0); - - tud_network_init_cb(); - - // we are ready to transmit a packet - can_xmit = true; - - // prepare for incoming packets - tud_network_recv_renew(); - } + //------------- Data Interface -------------// + // - RNDIS Data followed immediately by a pair of endpoints + // - CDC-ECM data interface has 2 alternate settings + // - 0 : zero endpoints for inactive (default) + // - 1 : IN & OUT endpoints for active networking + TU_ASSERT(TUSB_DESC_INTERFACE == tu_desc_type(p_desc), 0); + + do + { + tusb_desc_interface_t const * data_itf_desc = (tusb_desc_interface_t const *) p_desc; + TU_ASSERT(TUSB_CLASS_CDC_DATA == data_itf_desc->bInterfaceClass, 0); + + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + }while( _netd_itf.ecm_mode && (TUSB_DESC_INTERFACE == tu_desc_type(p_desc)) && (drv_len <= max_len) ); + + // Pair of endpoints + TU_ASSERT(TUSB_DESC_ENDPOINT == tu_desc_type(p_desc), 0); + + if ( _netd_itf.ecm_mode ) + { + // ECM by default is in-active, save the endpoint attribute + // to open later when received setInterface + _netd_itf.ecm_desc_epdata = p_desc; + }else + { + // Open endpoint pair for RNDIS + TU_ASSERT( usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &_netd_itf.ep_out, &_netd_itf.ep_in), 0 ); + + tud_network_init_cb(); + + // we are ready to transmit a packet + can_xmit = true; + + // prepare for incoming packets + tud_network_recv_renew(); + } - drv_len += 2 * sizeof(tusb_desc_endpoint_t); + drv_len += 2*sizeof(tusb_desc_endpoint_t); - return drv_len; + return drv_len; } static void ecm_report(bool nc) { - notify.ecm_buf = (nc) ? ecm_notify_nc : ecm_notify_csc; - notify.ecm_buf.header.wIndex = _netd_itf.itf_num; - netd_report((uint8_t *)¬ify.ecm_buf, - (nc) ? sizeof(notify.ecm_buf.header) : sizeof(notify.ecm_buf)); + notify.ecm_buf = (nc) ? ecm_notify_nc : ecm_notify_csc; + notify.ecm_buf.header.wIndex = _netd_itf.itf_num; + netd_report((uint8_t *)¬ify.ecm_buf, (nc) ? sizeof(notify.ecm_buf.header) : sizeof(notify.ecm_buf)); } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +bool netd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - if (stage == CONTROL_STAGE_SETUP) { - switch (request->bmRequestType_bit.type) { - case TUSB_REQ_TYPE_STANDARD: - switch (request->bRequest) { - case TUSB_REQ_GET_INTERFACE: { - uint8_t const req_itfnum = (uint8_t)request->wIndex; - TU_VERIFY(_netd_itf.itf_num + 1 == req_itfnum); - - tud_control_xfer(rhport, request, &_netd_itf.itf_data_alt, 1); - } break; - - case TUSB_REQ_SET_INTERFACE: { - uint8_t const req_itfnum = (uint8_t)request->wIndex; - uint8_t const req_alt = (uint8_t)request->wValue; - - // Only valid for Data Interface with Alternate is either 0 or 1 - TU_VERIFY(_netd_itf.itf_num + 1 == req_itfnum && req_alt < 2); - - // ACM-ECM only: qequest to enable/disable network activities - TU_VERIFY(_netd_itf.ecm_mode); - - _netd_itf.itf_data_alt = req_alt; - - if (_netd_itf.itf_data_alt) { - // TODO since we don't actually close endpoint - // hack here to not re-open it - if (_netd_itf.ep_in == 0 && _netd_itf.ep_out == 0) { - TU_ASSERT(_netd_itf.ecm_desc_epdata); - TU_ASSERT(usbd_open_edpt_pair(rhport, _netd_itf.ecm_desc_epdata, 2, - TUSB_XFER_BULK, &_netd_itf.ep_out, - &_netd_itf.ep_in)); - - // TODO should be merge with RNDIS's after endpoint opened - // Also should have opposite callback for application to disable network !! - tud_network_init_cb(); - can_xmit = true; // we are ready to transmit a packet - tud_network_recv_renew(); // prepare for incoming packets - } - } else { - // TODO close the endpoint pair - // For now pretend that we did, this should have no harm since host won't try to - // communicate with the endpoints again - // _netd_itf.ep_in = _netd_itf.ep_out = 0 - } - - tud_control_status(rhport, request); - } break; - - // unsupported request - default: - return false; + if ( stage == CONTROL_STAGE_SETUP ) + { + switch ( request->bmRequestType_bit.type ) + { + case TUSB_REQ_TYPE_STANDARD: + switch ( request->bRequest ) + { + case TUSB_REQ_GET_INTERFACE: + { + uint8_t const req_itfnum = (uint8_t) request->wIndex; + TU_VERIFY(_netd_itf.itf_num+1 == req_itfnum); + + tud_control_xfer(rhport, request, &_netd_itf.itf_data_alt, 1); + } + break; + + case TUSB_REQ_SET_INTERFACE: + { + uint8_t const req_itfnum = (uint8_t) request->wIndex; + uint8_t const req_alt = (uint8_t) request->wValue; + + // Only valid for Data Interface with Alternate is either 0 or 1 + TU_VERIFY(_netd_itf.itf_num+1 == req_itfnum && req_alt < 2); + + // ACM-ECM only: qequest to enable/disable network activities + TU_VERIFY(_netd_itf.ecm_mode); + + _netd_itf.itf_data_alt = req_alt; + + if ( _netd_itf.itf_data_alt ) + { + // TODO since we don't actually close endpoint + // hack here to not re-open it + if ( _netd_itf.ep_in == 0 && _netd_itf.ep_out == 0 ) + { + TU_ASSERT(_netd_itf.ecm_desc_epdata); + TU_ASSERT( usbd_open_edpt_pair(rhport, _netd_itf.ecm_desc_epdata, 2, TUSB_XFER_BULK, &_netd_itf.ep_out, &_netd_itf.ep_in) ); + + // TODO should be merge with RNDIS's after endpoint opened + // Also should have opposite callback for application to disable network !! + tud_network_init_cb(); + can_xmit = true; // we are ready to transmit a packet + tud_network_recv_renew(); // prepare for incoming packets + } + }else + { + // TODO close the endpoint pair + // For now pretend that we did, this should have no harm since host won't try to + // communicate with the endpoints again + // _netd_itf.ep_in = _netd_itf.ep_out = 0 } - break; - - case TUSB_REQ_TYPE_CLASS: - TU_VERIFY(_netd_itf.itf_num == request->wIndex); - - if (_netd_itf.ecm_mode) { - /* the only required CDC-ECM Management Element Request is SetEthernetPacketFilter */ - if (0x43 /* SET_ETHERNET_PACKET_FILTER */ == request->bRequest) { - tud_control_xfer(rhport, request, NULL, 0); - ecm_report(true); - } - } else { - if (request->bmRequestType_bit.direction == TUSB_DIR_IN) { - rndis_generic_msg_t *rndis_msg = - (rndis_generic_msg_t *)((void *)notify.rndis_buf); - uint32_t msglen = tu_le32toh(rndis_msg->MessageLength); - TU_ASSERT(msglen <= sizeof(notify.rndis_buf)); - tud_control_xfer(rhport, request, notify.rndis_buf, (uint16_t)msglen); - } else { - tud_control_xfer(rhport, request, notify.rndis_buf, - (uint16_t)sizeof(notify.rndis_buf)); - } - } - break; - // unsupported request - default: - return false; + tud_control_status(rhport, request); + } + break; + + // unsupported request + default: return false; } - } else if (stage == CONTROL_STAGE_DATA) { - // Handle RNDIS class control OUT only - if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && - request->bmRequestType_bit.direction == TUSB_DIR_OUT && - _netd_itf.itf_num == request->wIndex) { - if (!_netd_itf.ecm_mode) { - rndis_class_set_handler(notify.rndis_buf, request->wLength); - } + break; + + case TUSB_REQ_TYPE_CLASS: + TU_VERIFY (_netd_itf.itf_num == request->wIndex); + + if (_netd_itf.ecm_mode) + { + /* the only required CDC-ECM Management Element Request is SetEthernetPacketFilter */ + if (0x43 /* SET_ETHERNET_PACKET_FILTER */ == request->bRequest) + { + tud_control_xfer(rhport, request, NULL, 0); + ecm_report(true); + } + } + else + { + if (request->bmRequestType_bit.direction == TUSB_DIR_IN) + { + rndis_generic_msg_t *rndis_msg = (rndis_generic_msg_t *) ((void*) notify.rndis_buf); + uint32_t msglen = tu_le32toh(rndis_msg->MessageLength); + TU_ASSERT(msglen <= sizeof(notify.rndis_buf)); + tud_control_xfer(rhport, request, notify.rndis_buf, (uint16_t) msglen); + } + else + { + tud_control_xfer(rhport, request, notify.rndis_buf, (uint16_t) sizeof(notify.rndis_buf)); + } } + break; + + // unsupported request + default: return false; + } + } + else if ( stage == CONTROL_STAGE_DATA ) + { + // Handle RNDIS class control OUT only + if (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && + request->bmRequestType_bit.direction == TUSB_DIR_OUT && + _netd_itf.itf_num == request->wIndex) + { + if ( !_netd_itf.ecm_mode ) + { + rndis_class_set_handler(notify.rndis_buf, request->wLength); + } } + } - return true; + return true; } static void handle_incoming_packet(uint32_t len) { - uint8_t *pnt = received; - uint32_t size = 0; - - if (_netd_itf.ecm_mode) { - size = len; - } else { - rndis_data_packet_t *r = (rndis_data_packet_t *)((void *)pnt); - if (len >= sizeof(rndis_data_packet_t)) - if ((r->MessageType == REMOTE_NDIS_PACKET_MSG) && (r->MessageLength <= len)) - if ((r->DataOffset + offsetof(rndis_data_packet_t, DataOffset) + r->DataLength) <= - len) { - pnt = &received[r->DataOffset + offsetof(rndis_data_packet_t, DataOffset)]; - size = r->DataLength; - } - } + uint8_t *pnt = received; + uint32_t size = 0; + + if (_netd_itf.ecm_mode) + { + size = len; + } + else + { + rndis_data_packet_t *r = (rndis_data_packet_t *) ((void*) pnt); + if (len >= sizeof(rndis_data_packet_t)) + if ( (r->MessageType == REMOTE_NDIS_PACKET_MSG) && (r->MessageLength <= len)) + if ( (r->DataOffset + offsetof(rndis_data_packet_t, DataOffset) + r->DataLength) <= len) + { + pnt = &received[r->DataOffset + offsetof(rndis_data_packet_t, DataOffset)]; + size = r->DataLength; + } + } - if (!tud_network_recv_cb(pnt, (uint16_t)size)) { - /* if a buffer was never handled by user code, we must renew on the user's behalf */ - tud_network_recv_renew(); - } + if (!tud_network_recv_cb(pnt, (uint16_t) size)) + { + /* if a buffer was never handled by user code, we must renew on the user's behalf */ + tud_network_recv_renew(); + } } bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void)rhport; - (void)result; - - /* new packet received */ - if (ep_addr == _netd_itf.ep_out) { - handle_incoming_packet(xferred_bytes); + (void) rhport; + (void) result; + + /* new packet received */ + if ( ep_addr == _netd_itf.ep_out ) + { + handle_incoming_packet(xferred_bytes); + } + + /* data transmission finished */ + if ( ep_addr == _netd_itf.ep_in ) + { + /* TinyUSB requires the class driver to implement ZLP (since ZLP usage is class-specific) */ + + if ( xferred_bytes && (0 == (xferred_bytes % CFG_TUD_NET_ENDPOINT_SIZE)) ) + { + do_in_xfer(NULL, 0); /* a ZLP is needed */ } - - /* data transmission finished */ - if (ep_addr == _netd_itf.ep_in) { - /* TinyUSB requires the class driver to implement ZLP (since ZLP usage is class-specific) */ - - if (xferred_bytes && (0 == (xferred_bytes % CFG_TUD_NET_ENDPOINT_SIZE))) { - do_in_xfer(NULL, 0); /* a ZLP is needed */ - } else { - /* we're finally finished */ - can_xmit = true; - } + else + { + /* we're finally finished */ + can_xmit = true; } + } - if (_netd_itf.ecm_mode && (ep_addr == _netd_itf.ep_notif)) { - if (sizeof(notify.ecm_buf.header) == xferred_bytes) - ecm_report(false); - } + if ( _netd_itf.ecm_mode && (ep_addr == _netd_itf.ep_notif) ) + { + if (sizeof(notify.ecm_buf.header) == xferred_bytes) ecm_report(false); + } - return true; + return true; } bool tud_network_can_xmit(uint16_t size) { - (void)size; + (void)size; - return can_xmit; + return can_xmit; } void tud_network_xmit(void *ref, uint16_t arg) { - uint8_t *data; - uint16_t len; + uint8_t *data; + uint16_t len; - if (!can_xmit) - return; + if (!can_xmit) + return; - len = (_netd_itf.ecm_mode) ? 0 : CFG_TUD_NET_PACKET_PREFIX_LEN; - data = transmitted + len; + len = (_netd_itf.ecm_mode) ? 0 : CFG_TUD_NET_PACKET_PREFIX_LEN; + data = transmitted + len; - len += tud_network_xmit_cb(data, ref, arg); + len += tud_network_xmit_cb(data, ref, arg); - if (!_netd_itf.ecm_mode) { - rndis_data_packet_t *hdr = (rndis_data_packet_t *)((void *)transmitted); - memset(hdr, 0, sizeof(rndis_data_packet_t)); - hdr->MessageType = REMOTE_NDIS_PACKET_MSG; - hdr->MessageLength = len; - hdr->DataOffset = sizeof(rndis_data_packet_t) - offsetof(rndis_data_packet_t, DataOffset); - hdr->DataLength = len - sizeof(rndis_data_packet_t); - } + if (!_netd_itf.ecm_mode) + { + rndis_data_packet_t *hdr = (rndis_data_packet_t *) ((void*) transmitted); + memset(hdr, 0, sizeof(rndis_data_packet_t)); + hdr->MessageType = REMOTE_NDIS_PACKET_MSG; + hdr->MessageLength = len; + hdr->DataOffset = sizeof(rndis_data_packet_t) - offsetof(rndis_data_packet_t, DataOffset); + hdr->DataLength = len - sizeof(rndis_data_packet_t); + } - do_in_xfer(transmitted, len); + do_in_xfer(transmitted, len); } #endif diff --git a/Libraries/tinyusb/src/class/net/ncm.h b/Libraries/tinyusb/src/class/net/ncm.h index ba0326bcdd8..1b987fca043 100644 --- a/Libraries/tinyusb/src/class/net/ncm.h +++ b/Libraries/tinyusb/src/class/net/ncm.h @@ -33,13 +33,13 @@ // NTB buffers size for reception side, must be >> MTU to avoid TCP retransmission (driver issue ?) // Linux use 2048 as minimal size #ifndef CFG_TUD_NCM_OUT_NTB_MAX_SIZE -#define CFG_TUD_NCM_OUT_NTB_MAX_SIZE 3200 + #define CFG_TUD_NCM_OUT_NTB_MAX_SIZE 3200 #endif // NTB buffers size for reception side, must be > MTU // Linux use 2048 as minimal size #ifndef CFG_TUD_NCM_IN_NTB_MAX_SIZE -#define CFG_TUD_NCM_IN_NTB_MAX_SIZE 3200 + #define CFG_TUD_NCM_IN_NTB_MAX_SIZE 3200 #endif // Number of NTB buffers for reception side @@ -51,7 +51,7 @@ // On High-Speed (STM32F7) : // No performance gain #ifndef CFG_TUD_NCM_OUT_NTB_N -#define CFG_TUD_NCM_OUT_NTB_N 1 + #define CFG_TUD_NCM_OUT_NTB_N 1 #endif // Number of NTB buffers for transmission side @@ -65,37 +65,38 @@ // On High-Speed (STM32F7) : // No performance gain #ifndef CFG_TUD_NCM_IN_NTB_N -#define CFG_TUD_NCM_IN_NTB_N 1 + #define CFG_TUD_NCM_IN_NTB_N 1 #endif // How many datagrams it is allowed to put into an NTB for transmission side #ifndef CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB -#define CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB 8 + #define CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB 8 #endif // This tells the host how many datagrams it is allowed to put into an NTB #ifndef CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB -#define CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB 6 + #define CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB 6 #endif // Table 6.2 Class-Specific Request Codes for Network Control Model subclass -typedef enum { - NCM_SET_ETHERNET_MULTICAST_FILTERS = 0x40, - NCM_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, - NCM_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, - NCM_SET_ETHERNET_PACKET_FILTER = 0x43, - NCM_GET_ETHERNET_STATISTIC = 0x44, - NCM_GET_NTB_PARAMETERS = 0x80, - NCM_GET_NET_ADDRESS = 0x81, - NCM_SET_NET_ADDRESS = 0x82, - NCM_GET_NTB_FORMAT = 0x83, - NCM_SET_NTB_FORMAT = 0x84, - NCM_GET_NTB_INPUT_SIZE = 0x85, - NCM_SET_NTB_INPUT_SIZE = 0x86, - NCM_GET_MAX_DATAGRAM_SIZE = 0x87, - NCM_SET_MAX_DATAGRAM_SIZE = 0x88, - NCM_GET_CRC_MODE = 0x89, - NCM_SET_CRC_MODE = 0x8A, +typedef enum +{ + NCM_SET_ETHERNET_MULTICAST_FILTERS = 0x40, + NCM_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41, + NCM_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42, + NCM_SET_ETHERNET_PACKET_FILTER = 0x43, + NCM_GET_ETHERNET_STATISTIC = 0x44, + NCM_GET_NTB_PARAMETERS = 0x80, + NCM_GET_NET_ADDRESS = 0x81, + NCM_SET_NET_ADDRESS = 0x82, + NCM_GET_NTB_FORMAT = 0x83, + NCM_SET_NTB_FORMAT = 0x84, + NCM_GET_NTB_INPUT_SIZE = 0x85, + NCM_SET_NTB_INPUT_SIZE = 0x86, + NCM_GET_MAX_DATAGRAM_SIZE = 0x87, + NCM_SET_MAX_DATAGRAM_SIZE = 0x88, + NCM_GET_CRC_MODE = 0x89, + NCM_SET_CRC_MODE = 0x8A, } ncm_request_code_t; #define NTH16_SIGNATURE 0x484D434E @@ -103,60 +104,60 @@ typedef enum { #define NDP16_SIGNATURE_NCM1 0x314D434E typedef struct TU_ATTR_PACKED { - uint16_t wLength; - uint16_t bmNtbFormatsSupported; - uint32_t dwNtbInMaxSize; - uint16_t wNdbInDivisor; - uint16_t wNdbInPayloadRemainder; - uint16_t wNdbInAlignment; - uint16_t wReserved; - uint32_t dwNtbOutMaxSize; - uint16_t wNdbOutDivisor; - uint16_t wNdbOutPayloadRemainder; - uint16_t wNdbOutAlignment; - uint16_t wNtbOutMaxDatagrams; + uint16_t wLength; + uint16_t bmNtbFormatsSupported; + uint32_t dwNtbInMaxSize; + uint16_t wNdbInDivisor; + uint16_t wNdbInPayloadRemainder; + uint16_t wNdbInAlignment; + uint16_t wReserved; + uint32_t dwNtbOutMaxSize; + uint16_t wNdbOutDivisor; + uint16_t wNdbOutPayloadRemainder; + uint16_t wNdbOutAlignment; + uint16_t wNtbOutMaxDatagrams; } ntb_parameters_t; typedef struct TU_ATTR_PACKED { - uint32_t dwSignature; - uint16_t wHeaderLength; - uint16_t wSequence; - uint16_t wBlockLength; - uint16_t wNdpIndex; + uint32_t dwSignature; + uint16_t wHeaderLength; + uint16_t wSequence; + uint16_t wBlockLength; + uint16_t wNdpIndex; } nth16_t; typedef struct TU_ATTR_PACKED { - uint16_t wDatagramIndex; - uint16_t wDatagramLength; + uint16_t wDatagramIndex; + uint16_t wDatagramLength; } ndp16_datagram_t; typedef struct TU_ATTR_PACKED { - uint32_t dwSignature; - uint16_t wLength; - uint16_t wNextNdpIndex; - //ndp16_datagram_t datagram[]; + uint32_t dwSignature; + uint16_t wLength; + uint16_t wNextNdpIndex; + //ndp16_datagram_t datagram[]; } ndp16_t; typedef union TU_ATTR_PACKED { - struct { - nth16_t nth; - ndp16_t ndp; - ndp16_datagram_t ndp_datagram[CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB + 1]; - }; - uint8_t data[CFG_TUD_NCM_IN_NTB_MAX_SIZE]; + struct { + nth16_t nth; + ndp16_t ndp; + ndp16_datagram_t ndp_datagram[CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB + 1]; + }; + uint8_t data[CFG_TUD_NCM_IN_NTB_MAX_SIZE]; } xmit_ntb_t; typedef union TU_ATTR_PACKED { - struct { - nth16_t nth; - // only the header is at a guaranteed position - }; - uint8_t data[CFG_TUD_NCM_OUT_NTB_MAX_SIZE]; + struct { + nth16_t nth; + // only the header is at a guaranteed position + }; + uint8_t data[CFG_TUD_NCM_OUT_NTB_MAX_SIZE]; } recv_ntb_t; struct ncm_notify_t { - tusb_control_request_t header; - uint32_t downlink, uplink; + tusb_control_request_t header; + uint32_t downlink, uplink; }; #endif diff --git a/Libraries/tinyusb/src/class/net/ncm_device.c b/Libraries/tinyusb/src/class/net/ncm_device.c index 37be96301b5..90d74718500 100644 --- a/Libraries/tinyusb/src/class/net/ncm_device.c +++ b/Libraries/tinyusb/src/class/net/ncm_device.c @@ -62,16 +62,15 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_NCM_LOG_LEVEL -#define CFG_TUD_NCM_LOG_LEVEL CFG_TUD_LOG_LEVEL + #define CFG_TUD_NCM_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_NCM_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_NCM_LOG_LEVEL, __VA_ARGS__) // Alignment must be 4 -#define TUD_NCM_ALIGNMENT 4 +#define TUD_NCM_ALIGNMENT 4 // calculate alignment of xmit datagrams within an NTB -#define XMIT_ALIGN_OFFSET(x) \ - ((TUD_NCM_ALIGNMENT - ((x) & (TUD_NCM_ALIGNMENT - 1))) & (TUD_NCM_ALIGNMENT - 1)) +#define XMIT_ALIGN_OFFSET(x) ((TUD_NCM_ALIGNMENT - ((x) & (TUD_NCM_ALIGNMENT - 1))) & (TUD_NCM_ALIGNMENT - 1)) //----------------------------------------------------------------------------- // @@ -81,39 +80,38 @@ #define RECV_NTB_N CFG_TUD_NCM_OUT_NTB_N typedef struct { - // general - uint8_t ep_in; // endpoint for outgoing datagrams (naming is a little bit confusing) - uint8_t ep_out; // endpoint for incoming datagrams (naming is a little bit confusing) - uint8_t ep_notif; // endpoint for notifications - uint8_t itf_num; // interface number - uint8_t - itf_data_alt; // ==0 -> no endpoints, i.e. no network traffic, ==1 -> normal operation with two endpoints (spec, chapter 5.3) - uint8_t rhport; // storage of \a rhport because some callbacks are done without it - - // recv handling - CFG_TUSB_MEM_ALIGN recv_ntb_t recv_ntb[RECV_NTB_N]; // actual recv NTBs - recv_ntb_t *recv_free_ntb[RECV_NTB_N]; // free list of recv NTBs - recv_ntb_t *recv_ready_ntb[RECV_NTB_N]; // NTBs waiting for transmission to glue logic - recv_ntb_t *recv_tinyusb_ntb; // buffer for the running transfer TinyUSB -> driver - recv_ntb_t *recv_glue_ntb; // buffer for the running transfer driver -> glue logic - uint16_t recv_glue_ntb_datagram_ndx; // index into \a recv_glue_ntb_datagram - - // xmit handling - CFG_TUSB_MEM_ALIGN xmit_ntb_t xmit_ntb[XMIT_NTB_N]; // actual xmit NTBs - xmit_ntb_t *xmit_free_ntb[XMIT_NTB_N]; // free list of xmit NTBs - xmit_ntb_t *xmit_ready_ntb[XMIT_NTB_N]; // NTBs waiting for transmission to TinyUSB - xmit_ntb_t *xmit_tinyusb_ntb; // buffer for the running transfer driver -> TinyUSB - xmit_ntb_t *xmit_glue_ntb; // buffer for the running transfer glue logic -> driver - uint16_t xmit_sequence; // NTB sequence counter - uint16_t xmit_glue_ntb_datagram_ndx; // index into \a xmit_glue_ntb_datagram - - // notification handling - enum { - NOTIFICATION_SPEED, - NOTIFICATION_CONNECTED, - NOTIFICATION_DONE - } notification_xmit_state; // state of notification transmission - bool notification_xmit_is_running; // notification is currently transmitted + // general + uint8_t ep_in; // endpoint for outgoing datagrams (naming is a little bit confusing) + uint8_t ep_out; // endpoint for incoming datagrams (naming is a little bit confusing) + uint8_t ep_notif; // endpoint for notifications + uint8_t itf_num; // interface number + uint8_t itf_data_alt; // ==0 -> no endpoints, i.e. no network traffic, ==1 -> normal operation with two endpoints (spec, chapter 5.3) + uint8_t rhport; // storage of \a rhport because some callbacks are done without it + + // recv handling + CFG_TUSB_MEM_ALIGN recv_ntb_t recv_ntb[RECV_NTB_N]; // actual recv NTBs + recv_ntb_t *recv_free_ntb[RECV_NTB_N]; // free list of recv NTBs + recv_ntb_t *recv_ready_ntb[RECV_NTB_N]; // NTBs waiting for transmission to glue logic + recv_ntb_t *recv_tinyusb_ntb; // buffer for the running transfer TinyUSB -> driver + recv_ntb_t *recv_glue_ntb; // buffer for the running transfer driver -> glue logic + uint16_t recv_glue_ntb_datagram_ndx; // index into \a recv_glue_ntb_datagram + + // xmit handling + CFG_TUSB_MEM_ALIGN xmit_ntb_t xmit_ntb[XMIT_NTB_N]; // actual xmit NTBs + xmit_ntb_t *xmit_free_ntb[XMIT_NTB_N]; // free list of xmit NTBs + xmit_ntb_t *xmit_ready_ntb[XMIT_NTB_N]; // NTBs waiting for transmission to TinyUSB + xmit_ntb_t *xmit_tinyusb_ntb; // buffer for the running transfer driver -> TinyUSB + xmit_ntb_t *xmit_glue_ntb; // buffer for the running transfer glue logic -> driver + uint16_t xmit_sequence; // NTB sequence counter + uint16_t xmit_glue_ntb_datagram_ndx; // index into \a xmit_glue_ntb_datagram + + // notification handling + enum { + NOTIFICATION_SPEED, + NOTIFICATION_CONNECTED, + NOTIFICATION_DONE + } notification_xmit_state; // state of notification transmission + bool notification_xmit_is_running; // notification is currently transmitted } ncm_interface_t; CFG_TUD_MEM_SECTION CFG_TUD_MEM_ALIGN tu_static ncm_interface_t ncm_interface; @@ -125,18 +123,18 @@ CFG_TUD_MEM_SECTION CFG_TUD_MEM_ALIGN tu_static ncm_interface_t ncm_interface; * We are lucky, that byte order is correct */ CFG_TUD_MEM_SECTION CFG_TUD_MEM_ALIGN tu_static const ntb_parameters_t ntb_parameters = { - .wLength = sizeof(ntb_parameters_t), - .bmNtbFormatsSupported = 0x01, // 16-bit NTB supported - .dwNtbInMaxSize = CFG_TUD_NCM_IN_NTB_MAX_SIZE, - .wNdbInDivisor = 1, - .wNdbInPayloadRemainder = 0, - .wNdbInAlignment = TUD_NCM_ALIGNMENT, - .wReserved = 0, - .dwNtbOutMaxSize = CFG_TUD_NCM_OUT_NTB_MAX_SIZE, - .wNdbOutDivisor = 1, - .wNdbOutPayloadRemainder = 0, - .wNdbOutAlignment = TUD_NCM_ALIGNMENT, - .wNtbOutMaxDatagrams = CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB, + .wLength = sizeof(ntb_parameters_t), + .bmNtbFormatsSupported = 0x01,// 16-bit NTB supported + .dwNtbInMaxSize = CFG_TUD_NCM_IN_NTB_MAX_SIZE, + .wNdbInDivisor = 1, + .wNdbInPayloadRemainder = 0, + .wNdbInAlignment = TUD_NCM_ALIGNMENT, + .wReserved = 0, + .dwNtbOutMaxSize = CFG_TUD_NCM_OUT_NTB_MAX_SIZE, + .wNdbOutDivisor = 1, + .wNdbOutPayloadRemainder = 0, + .wNdbOutAlignment = TUD_NCM_ALIGNMENT, + .wNtbOutMaxDatagrams = CFG_TUD_NCM_OUT_MAX_DATAGRAMS_PER_NTB, }; // Some confusing remarks about wNtbOutMaxDatagrams... @@ -183,32 +181,28 @@ tu_static struct ncm_notify_t ncm_notify_speed_change = { * Transmit next notification to the host (if appropriate). * Notifications are transferred to the host once during connection setup. */ -static void notification_xmit(uint8_t rhport, bool force_next) -{ - TU_LOG_DRV("notification_xmit(%d, %d) - %d %d\n", force_next, rhport, - ncm_interface.notification_xmit_state, ncm_interface.notification_xmit_is_running); - - if (!force_next && ncm_interface.notification_xmit_is_running) { - return; - } - - if (ncm_interface.notification_xmit_state == NOTIFICATION_SPEED) { - TU_LOG_DRV(" NOTIFICATION_SPEED\n"); - ncm_notify_speed_change.header.wIndex = ncm_interface.itf_num; - usbd_edpt_xfer(rhport, ncm_interface.ep_notif, (uint8_t *)&ncm_notify_speed_change, - sizeof(ncm_notify_speed_change)); - ncm_interface.notification_xmit_state = NOTIFICATION_CONNECTED; - ncm_interface.notification_xmit_is_running = true; - } else if (ncm_interface.notification_xmit_state == NOTIFICATION_CONNECTED) { - TU_LOG_DRV(" NOTIFICATION_CONNECTED\n"); - ncm_notify_connected.header.wIndex = ncm_interface.itf_num; - usbd_edpt_xfer(rhport, ncm_interface.ep_notif, (uint8_t *)&ncm_notify_connected, - sizeof(ncm_notify_connected)); - ncm_interface.notification_xmit_state = NOTIFICATION_DONE; - ncm_interface.notification_xmit_is_running = true; - } else { - TU_LOG_DRV(" NOTIFICATION_FINISHED\n"); - } +static void notification_xmit(uint8_t rhport, bool force_next) { + TU_LOG_DRV("notification_xmit(%d, %d) - %d %d\n", force_next, rhport, ncm_interface.notification_xmit_state, ncm_interface.notification_xmit_is_running); + + if (!force_next && ncm_interface.notification_xmit_is_running) { + return; + } + + if (ncm_interface.notification_xmit_state == NOTIFICATION_SPEED) { + TU_LOG_DRV(" NOTIFICATION_SPEED\n"); + ncm_notify_speed_change.header.wIndex = ncm_interface.itf_num; + usbd_edpt_xfer(rhport, ncm_interface.ep_notif, (uint8_t *) &ncm_notify_speed_change, sizeof(ncm_notify_speed_change)); + ncm_interface.notification_xmit_state = NOTIFICATION_CONNECTED; + ncm_interface.notification_xmit_is_running = true; + } else if (ncm_interface.notification_xmit_state == NOTIFICATION_CONNECTED) { + TU_LOG_DRV(" NOTIFICATION_CONNECTED\n"); + ncm_notify_connected.header.wIndex = ncm_interface.itf_num; + usbd_edpt_xfer(rhport, ncm_interface.ep_notif, (uint8_t *) &ncm_notify_connected, sizeof(ncm_notify_connected)); + ncm_interface.notification_xmit_state = NOTIFICATION_DONE; + ncm_interface.notification_xmit_is_running = true; + } else { + TU_LOG_DRV(" NOTIFICATION_FINISHED\n"); + } } // notification_xmit //----------------------------------------------------------------------------- @@ -219,72 +213,66 @@ static void notification_xmit(uint8_t rhport, bool force_next) /** * Put NTB into the transmitter free list. */ -static void xmit_put_ntb_into_free_list(xmit_ntb_t *free_ntb) -{ - TU_LOG_DRV("xmit_put_ntb_into_free_list() - %p\n", ncm_interface.xmit_tinyusb_ntb); +static void xmit_put_ntb_into_free_list(xmit_ntb_t *free_ntb) { + TU_LOG_DRV("xmit_put_ntb_into_free_list() - %p\n", ncm_interface.xmit_tinyusb_ntb); - if (free_ntb == NULL) { // can happen due to ZLPs - return; - } + if (free_ntb == NULL) { // can happen due to ZLPs + return; + } - for (int i = 0; i < XMIT_NTB_N; ++i) { - if (ncm_interface.xmit_free_ntb[i] == NULL) { - ncm_interface.xmit_free_ntb[i] = free_ntb; - return; - } + for (int i = 0; i < XMIT_NTB_N; ++i) { + if (ncm_interface.xmit_free_ntb[i] == NULL) { + ncm_interface.xmit_free_ntb[i] = free_ntb; + return; } - TU_LOG_DRV( - "(EE) xmit_put_ntb_into_free_list - no entry in free list\n"); // this should not happen + } + TU_LOG_DRV("(EE) xmit_put_ntb_into_free_list - no entry in free list\n");// this should not happen } // xmit_put_ntb_into_free_list /** * Get an NTB from the free list */ -static xmit_ntb_t *xmit_get_free_ntb(void) -{ - TU_LOG_DRV("xmit_get_free_ntb()\n"); - - for (int i = 0; i < XMIT_NTB_N; ++i) { - if (ncm_interface.xmit_free_ntb[i] != NULL) { - xmit_ntb_t *free = ncm_interface.xmit_free_ntb[i]; - ncm_interface.xmit_free_ntb[i] = NULL; - return free; - } +static xmit_ntb_t *xmit_get_free_ntb(void) { + TU_LOG_DRV("xmit_get_free_ntb()\n"); + + for (int i = 0; i < XMIT_NTB_N; ++i) { + if (ncm_interface.xmit_free_ntb[i] != NULL) { + xmit_ntb_t *free = ncm_interface.xmit_free_ntb[i]; + ncm_interface.xmit_free_ntb[i] = NULL; + return free; } - return NULL; + } + return NULL; } // xmit_get_free_ntb /** * Put a filled NTB into the ready list */ -static void xmit_put_ntb_into_ready_list(xmit_ntb_t *ready_ntb) -{ - TU_LOG_DRV("xmit_put_ntb_into_ready_list(%p) %d\n", ready_ntb, ready_ntb->nth.wBlockLength); - - for (int i = 0; i < XMIT_NTB_N; ++i) { - if (ncm_interface.xmit_ready_ntb[i] == NULL) { - ncm_interface.xmit_ready_ntb[i] = ready_ntb; - return; - } +static void xmit_put_ntb_into_ready_list(xmit_ntb_t *ready_ntb) { + TU_LOG_DRV("xmit_put_ntb_into_ready_list(%p) %d\n", ready_ntb, ready_ntb->nth.wBlockLength); + + for (int i = 0; i < XMIT_NTB_N; ++i) { + if (ncm_interface.xmit_ready_ntb[i] == NULL) { + ncm_interface.xmit_ready_ntb[i] = ready_ntb; + return; } - TU_LOG_DRV("(EE) xmit_put_ntb_into_ready_list: ready list full\n"); // this should not happen + } + TU_LOG_DRV("(EE) xmit_put_ntb_into_ready_list: ready list full\n");// this should not happen } // xmit_put_ntb_into_ready_list /** * Get the next NTB from the ready list (and remove it from the list). * If the ready list is empty, return NULL. */ -static xmit_ntb_t *xmit_get_next_ready_ntb(void) -{ - xmit_ntb_t *r = NULL; +static xmit_ntb_t *xmit_get_next_ready_ntb(void) { + xmit_ntb_t *r = NULL; - r = ncm_interface.xmit_ready_ntb[0]; - memmove(ncm_interface.xmit_ready_ntb + 0, ncm_interface.xmit_ready_ntb + 1, - sizeof(ncm_interface.xmit_ready_ntb) - sizeof(ncm_interface.xmit_ready_ntb[0])); - ncm_interface.xmit_ready_ntb[XMIT_NTB_N - 1] = NULL; + r = ncm_interface.xmit_ready_ntb[0]; + memmove(ncm_interface.xmit_ready_ntb + 0, ncm_interface.xmit_ready_ntb + 1, sizeof(ncm_interface.xmit_ready_ntb) - sizeof(ncm_interface.xmit_ready_ntb[0])); + ncm_interface.xmit_ready_ntb[XMIT_NTB_N - 1] = NULL; - TU_LOG_DRV("recv_get_next_ready_ntb: %p\n", r); - return r; + TU_LOG_DRV("recv_get_next_ready_ntb: %p\n", r); + return r; } // xmit_get_next_ready_ntb /** @@ -298,130 +286,121 @@ static xmit_ntb_t *xmit_get_next_ready_ntb(void) * \pre * This must be called from netd_xfer_cb() so that ep_in is ready */ -static bool xmit_insert_required_zlp(uint8_t rhport, uint32_t xferred_bytes) -{ - TU_LOG_DRV("xmit_insert_required_zlp(%d,%ld)\n", rhport, xferred_bytes); +static bool xmit_insert_required_zlp(uint8_t rhport, uint32_t xferred_bytes) { + TU_LOG_DRV("xmit_insert_required_zlp(%d,%ld)\n", rhport, xferred_bytes); - if (xferred_bytes == 0 || xferred_bytes % CFG_TUD_NET_ENDPOINT_SIZE != 0) { - return false; - } + if (xferred_bytes == 0 || xferred_bytes % CFG_TUD_NET_ENDPOINT_SIZE != 0) { + return false; + } - TU_ASSERT(ncm_interface.itf_data_alt == 1, false); - TU_ASSERT(!usbd_edpt_busy(rhport, ncm_interface.ep_in), false); + TU_ASSERT(ncm_interface.itf_data_alt == 1, false); + TU_ASSERT(!usbd_edpt_busy(rhport, ncm_interface.ep_in), false); - TU_LOG_DRV("xmit_insert_required_zlp! (%u)\n", (unsigned)xferred_bytes); + TU_LOG_DRV("xmit_insert_required_zlp! (%u)\n", (unsigned) xferred_bytes); - // start transmission of the ZLP - usbd_edpt_xfer(rhport, ncm_interface.ep_in, NULL, 0); + // start transmission of the ZLP + usbd_edpt_xfer(rhport, ncm_interface.ep_in, NULL, 0); - return true; + return true; } // xmit_insert_required_zlp /** * Start transmission if it there is a waiting packet and if can be done from interface side. */ -static void xmit_start_if_possible(uint8_t rhport) -{ - TU_LOG_DRV("xmit_start_if_possible()\n"); - - if (ncm_interface.xmit_tinyusb_ntb != NULL) { - TU_LOG_DRV(" !xmit_start_if_possible 1\n"); - return; - } - if (ncm_interface.itf_data_alt != 1) { - TU_LOG_DRV("(EE) !xmit_start_if_possible 2\n"); - return; - } - if (usbd_edpt_busy(rhport, ncm_interface.ep_in)) { - TU_LOG_DRV(" !xmit_start_if_possible 3\n"); - return; - } - - ncm_interface.xmit_tinyusb_ntb = xmit_get_next_ready_ntb(); - if (ncm_interface.xmit_tinyusb_ntb == NULL) { - if (ncm_interface.xmit_glue_ntb == NULL || ncm_interface.xmit_glue_ntb_datagram_ndx == 0) { - // -> really nothing is waiting - return; - } - ncm_interface.xmit_tinyusb_ntb = ncm_interface.xmit_glue_ntb; - ncm_interface.xmit_glue_ntb = NULL; - } - -#if CFG_TUD_NCM_LOG_LEVEL >= 3 - { - uint16_t len = ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength; - TU_LOG_BUF(3, ncm_interface.xmit_tinyusb_ntb->data[i], len); - } -#endif - - if (ncm_interface.xmit_glue_ntb_datagram_ndx != 1) { - TU_LOG_DRV(">> %d %d\n", ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength, - ncm_interface.xmit_glue_ntb_datagram_ndx); - } - - // Kick off an endpoint transfer - usbd_edpt_xfer(0, ncm_interface.ep_in, ncm_interface.xmit_tinyusb_ntb->data, - ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength); +static void xmit_start_if_possible(uint8_t rhport) { + TU_LOG_DRV("xmit_start_if_possible()\n"); + + if (ncm_interface.xmit_tinyusb_ntb != NULL) { + TU_LOG_DRV(" !xmit_start_if_possible 1\n"); + return; + } + if (ncm_interface.itf_data_alt != 1) { + TU_LOG_DRV("(EE) !xmit_start_if_possible 2\n"); + return; + } + if (usbd_edpt_busy(rhport, ncm_interface.ep_in)) { + TU_LOG_DRV(" !xmit_start_if_possible 3\n"); + return; + } + + ncm_interface.xmit_tinyusb_ntb = xmit_get_next_ready_ntb(); + if (ncm_interface.xmit_tinyusb_ntb == NULL) { + if (ncm_interface.xmit_glue_ntb == NULL || ncm_interface.xmit_glue_ntb_datagram_ndx == 0) { + // -> really nothing is waiting + return; + } + ncm_interface.xmit_tinyusb_ntb = ncm_interface.xmit_glue_ntb; + ncm_interface.xmit_glue_ntb = NULL; + } + + #if CFG_TUD_NCM_LOG_LEVEL >= 3 + { + uint16_t len = ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength; + TU_LOG_BUF(3, ncm_interface.xmit_tinyusb_ntb->data[i], len); + } + #endif + + if (ncm_interface.xmit_glue_ntb_datagram_ndx != 1) { + TU_LOG_DRV(">> %d %d\n", ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength, ncm_interface.xmit_glue_ntb_datagram_ndx); + } + + // Kick off an endpoint transfer + usbd_edpt_xfer(0, ncm_interface.ep_in, ncm_interface.xmit_tinyusb_ntb->data, ncm_interface.xmit_tinyusb_ntb->nth.wBlockLength); } // xmit_start_if_possible /** * check if a new datagram fits into the current NTB */ -static bool xmit_requested_datagram_fits_into_current_ntb(uint16_t datagram_size) -{ - TU_LOG_DRV("xmit_requested_datagram_fits_into_current_ntb(%d) - %p %p\n", datagram_size, - ncm_interface.xmit_tinyusb_ntb, ncm_interface.xmit_glue_ntb); +static bool xmit_requested_datagram_fits_into_current_ntb(uint16_t datagram_size) { + TU_LOG_DRV("xmit_requested_datagram_fits_into_current_ntb(%d) - %p %p\n", datagram_size, ncm_interface.xmit_tinyusb_ntb, ncm_interface.xmit_glue_ntb); - if (ncm_interface.xmit_glue_ntb == NULL) { - return false; - } - if (ncm_interface.xmit_glue_ntb_datagram_ndx >= CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB) { - return false; - } - if (ncm_interface.xmit_glue_ntb->nth.wBlockLength + datagram_size + - XMIT_ALIGN_OFFSET(datagram_size) > - CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { - return false; - } - return true; + if (ncm_interface.xmit_glue_ntb == NULL) { + return false; + } + if (ncm_interface.xmit_glue_ntb_datagram_ndx >= CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB) { + return false; + } + if (ncm_interface.xmit_glue_ntb->nth.wBlockLength + datagram_size + XMIT_ALIGN_OFFSET(datagram_size) > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { + return false; + } + return true; } // xmit_requested_datagram_fits_into_current_ntb /** * Setup an NTB for the glue logic */ -static bool xmit_setup_next_glue_ntb(void) -{ - TU_LOG_DRV("xmit_setup_next_glue_ntb - %p\n", ncm_interface.xmit_glue_ntb); +static bool xmit_setup_next_glue_ntb(void) { + TU_LOG_DRV("xmit_setup_next_glue_ntb - %p\n", ncm_interface.xmit_glue_ntb); - if (ncm_interface.xmit_glue_ntb != NULL) { - // put NTB into waiting list (the new datagram did not fit in) - xmit_put_ntb_into_ready_list(ncm_interface.xmit_glue_ntb); - } + if (ncm_interface.xmit_glue_ntb != NULL) { + // put NTB into waiting list (the new datagram did not fit in) + xmit_put_ntb_into_ready_list(ncm_interface.xmit_glue_ntb); + } - ncm_interface.xmit_glue_ntb = xmit_get_free_ntb(); // get next buffer (if any) - if (ncm_interface.xmit_glue_ntb == NULL) { - TU_LOG_DRV(" xmit_setup_next_glue_ntb - nothing free\n"); // should happen rarely - return false; - } + ncm_interface.xmit_glue_ntb = xmit_get_free_ntb();// get next buffer (if any) + if (ncm_interface.xmit_glue_ntb == NULL) { + TU_LOG_DRV(" xmit_setup_next_glue_ntb - nothing free\n");// should happen rarely + return false; + } - ncm_interface.xmit_glue_ntb_datagram_ndx = 0; + ncm_interface.xmit_glue_ntb_datagram_ndx = 0; - xmit_ntb_t *ntb = ncm_interface.xmit_glue_ntb; + xmit_ntb_t *ntb = ncm_interface.xmit_glue_ntb; - // Fill in NTB header - ntb->nth.dwSignature = NTH16_SIGNATURE; - ntb->nth.wHeaderLength = sizeof(ntb->nth); - ntb->nth.wSequence = ncm_interface.xmit_sequence++; - ntb->nth.wBlockLength = sizeof(ntb->nth) + sizeof(ntb->ndp) + sizeof(ntb->ndp_datagram); - ntb->nth.wNdpIndex = sizeof(ntb->nth); + // Fill in NTB header + ntb->nth.dwSignature = NTH16_SIGNATURE; + ntb->nth.wHeaderLength = sizeof(ntb->nth); + ntb->nth.wSequence = ncm_interface.xmit_sequence++; + ntb->nth.wBlockLength = sizeof(ntb->nth) + sizeof(ntb->ndp) + sizeof(ntb->ndp_datagram); + ntb->nth.wNdpIndex = sizeof(ntb->nth); - // Fill in NDP16 header and terminator - ntb->ndp.dwSignature = NDP16_SIGNATURE_NCM0; - ntb->ndp.wLength = sizeof(ntb->ndp) + sizeof(ntb->ndp_datagram); - ntb->ndp.wNextNdpIndex = 0; + // Fill in NDP16 header and terminator + ntb->ndp.dwSignature = NDP16_SIGNATURE_NCM0; + ntb->ndp.wLength = sizeof(ntb->ndp) + sizeof(ntb->ndp_datagram); + ntb->ndp.wNextNdpIndex = 0; - memset(ntb->ndp_datagram, 0, sizeof(ntb->ndp_datagram)); - return true; + memset(ntb->ndp_datagram, 0, sizeof(ntb->ndp_datagram)); + return true; } // xmit_setup_next_glue_ntb //----------------------------------------------------------------------------- @@ -433,101 +412,93 @@ static bool xmit_setup_next_glue_ntb(void) * Return pointer to an available receive buffer or NULL. * Returned buffer (if any) has the size \a CFG_TUD_NCM_OUT_NTB_MAX_SIZE. */ -static recv_ntb_t *recv_get_free_ntb(void) -{ - TU_LOG_DRV("recv_get_free_ntb()\n"); - - for (int i = 0; i < RECV_NTB_N; ++i) { - if (ncm_interface.recv_free_ntb[i] != NULL) { - recv_ntb_t *free = ncm_interface.recv_free_ntb[i]; - ncm_interface.recv_free_ntb[i] = NULL; - return free; - } +static recv_ntb_t *recv_get_free_ntb(void) { + TU_LOG_DRV("recv_get_free_ntb()\n"); + + for (int i = 0; i < RECV_NTB_N; ++i) { + if (ncm_interface.recv_free_ntb[i] != NULL) { + recv_ntb_t *free = ncm_interface.recv_free_ntb[i]; + ncm_interface.recv_free_ntb[i] = NULL; + return free; } - return NULL; + } + return NULL; } // recv_get_free_ntb /** * Get the next NTB from the ready list (and remove it from the list). * If the ready list is empty, return NULL. */ -static recv_ntb_t *recv_get_next_ready_ntb(void) -{ - recv_ntb_t *r = NULL; +static recv_ntb_t *recv_get_next_ready_ntb(void) { + recv_ntb_t *r = NULL; - r = ncm_interface.recv_ready_ntb[0]; - memmove(ncm_interface.recv_ready_ntb + 0, ncm_interface.recv_ready_ntb + 1, - sizeof(ncm_interface.recv_ready_ntb) - sizeof(ncm_interface.recv_ready_ntb[0])); - ncm_interface.recv_ready_ntb[RECV_NTB_N - 1] = NULL; + r = ncm_interface.recv_ready_ntb[0]; + memmove(ncm_interface.recv_ready_ntb + 0, ncm_interface.recv_ready_ntb + 1, sizeof(ncm_interface.recv_ready_ntb) - sizeof(ncm_interface.recv_ready_ntb[0])); + ncm_interface.recv_ready_ntb[RECV_NTB_N - 1] = NULL; - TU_LOG_DRV("recv_get_next_ready_ntb: %p\n", r); - return r; + TU_LOG_DRV("recv_get_next_ready_ntb: %p\n", r); + return r; } // recv_get_next_ready_ntb /** * Put NTB into the receiver free list. */ -static void recv_put_ntb_into_free_list(recv_ntb_t *free_ntb) -{ - TU_LOG_DRV("recv_put_ntb_into_free_list(%p)\n", free_ntb); - - for (int i = 0; i < RECV_NTB_N; ++i) { - if (ncm_interface.recv_free_ntb[i] == NULL) { - ncm_interface.recv_free_ntb[i] = free_ntb; - return; - } +static void recv_put_ntb_into_free_list(recv_ntb_t *free_ntb) { + TU_LOG_DRV("recv_put_ntb_into_free_list(%p)\n", free_ntb); + + for (int i = 0; i < RECV_NTB_N; ++i) { + if (ncm_interface.recv_free_ntb[i] == NULL) { + ncm_interface.recv_free_ntb[i] = free_ntb; + return; } - TU_LOG_DRV( - "(EE) recv_put_ntb_into_free_list - no entry in free list\n"); // this should not happen + } + TU_LOG_DRV("(EE) recv_put_ntb_into_free_list - no entry in free list\n");// this should not happen } // recv_put_ntb_into_free_list /** * \a ready_ntb holds a validated NTB, * put this buffer into the waiting list. */ -static void recv_put_ntb_into_ready_list(recv_ntb_t *ready_ntb) -{ - TU_LOG_DRV("recv_put_ntb_into_ready_list(%p) %d\n", ready_ntb, ready_ntb->nth.wBlockLength); - - for (int i = 0; i < RECV_NTB_N; ++i) { - if (ncm_interface.recv_ready_ntb[i] == NULL) { - ncm_interface.recv_ready_ntb[i] = ready_ntb; - return; - } +static void recv_put_ntb_into_ready_list(recv_ntb_t *ready_ntb) { + TU_LOG_DRV("recv_put_ntb_into_ready_list(%p) %d\n", ready_ntb, ready_ntb->nth.wBlockLength); + + for (int i = 0; i < RECV_NTB_N; ++i) { + if (ncm_interface.recv_ready_ntb[i] == NULL) { + ncm_interface.recv_ready_ntb[i] = ready_ntb; + return; } - TU_LOG_DRV("(EE) recv_put_ntb_into_ready_list: ready list full\n"); // this should not happen + } + TU_LOG_DRV("(EE) recv_put_ntb_into_ready_list: ready list full\n");// this should not happen } // recv_put_ntb_into_ready_list /** * If possible, start a new reception TinyUSB -> driver. */ -static void recv_try_to_start_new_reception(uint8_t rhport) -{ - TU_LOG_DRV("recv_try_to_start_new_reception(%d)\n", rhport); - - if (ncm_interface.itf_data_alt != 1) { - return; - } - if (ncm_interface.recv_tinyusb_ntb != NULL) { - return; - } - if (usbd_edpt_busy(rhport, ncm_interface.ep_out)) { - return; - } - - ncm_interface.recv_tinyusb_ntb = recv_get_free_ntb(); - if (ncm_interface.recv_tinyusb_ntb == NULL) { - return; - } - - // initiate transfer - TU_LOG_DRV(" start reception\n"); - bool r = usbd_edpt_xfer(rhport, ncm_interface.ep_out, ncm_interface.recv_tinyusb_ntb->data, - CFG_TUD_NCM_OUT_NTB_MAX_SIZE); - if (!r) { - recv_put_ntb_into_free_list(ncm_interface.recv_tinyusb_ntb); - ncm_interface.recv_tinyusb_ntb = NULL; - } +static void recv_try_to_start_new_reception(uint8_t rhport) { + TU_LOG_DRV("recv_try_to_start_new_reception(%d)\n", rhport); + + if (ncm_interface.itf_data_alt != 1) { + return; + } + if (ncm_interface.recv_tinyusb_ntb != NULL) { + return; + } + if (usbd_edpt_busy(rhport, ncm_interface.ep_out)) { + return; + } + + ncm_interface.recv_tinyusb_ntb = recv_get_free_ntb(); + if (ncm_interface.recv_tinyusb_ntb == NULL) { + return; + } + + // initiate transfer + TU_LOG_DRV(" start reception\n"); + bool r = usbd_edpt_xfer(rhport, ncm_interface.ep_out, ncm_interface.recv_tinyusb_ntb->data, CFG_TUD_NCM_OUT_NTB_MAX_SIZE); + if (!r) { + recv_put_ntb_into_free_list(ncm_interface.recv_tinyusb_ntb); + ncm_interface.recv_tinyusb_ntb = NULL; + } } // recv_try_to_start_new_reception /** @@ -537,145 +508,127 @@ static void recv_try_to_start_new_reception(uint8_t rhport) * \note * \a ndp16->wNextNdpIndex != 0 is not supported */ -static bool recv_validate_datagram(const recv_ntb_t *ntb, uint32_t len) -{ - const nth16_t *nth16 = &(ntb->nth); - - TU_LOG_DRV("recv_validate_datagram(%p, %d)\n", ntb, (int)len); - - // check header - if (nth16->wHeaderLength != sizeof(nth16_t)) { - TU_LOG_DRV("(EE) ill nth16 length: %d\n", nth16->wHeaderLength); - return false; - } - if (nth16->dwSignature != NTH16_SIGNATURE) { - TU_LOG_DRV("(EE) ill signature: 0x%08x\n", (unsigned)nth16->dwSignature); - return false; - } - if (len < sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)) { - TU_LOG_DRV("(EE) ill min len: %lu\n", len); - return false; - } - if (nth16->wBlockLength > len) { - TU_LOG_DRV("(EE) ill block length: %d > %lu\n", nth16->wBlockLength, len); - return false; - } - if (nth16->wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { - TU_LOG_DRV("(EE) ill block length2: %d > %d\n", nth16->wBlockLength, - CFG_TUD_NCM_OUT_NTB_MAX_SIZE); - return false; - } - if (nth16->wNdpIndex < sizeof(nth16) || - nth16->wNdpIndex > len - (sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t))) { - TU_LOG_DRV("(EE) ill position of first ndp: %d (%lu)\n", nth16->wNdpIndex, len); - return false; - } +static bool recv_validate_datagram(const recv_ntb_t *ntb, uint32_t len) { + const nth16_t *nth16 = &(ntb->nth); - // check (first) NDP(16) - const ndp16_t *ndp16 = (const ndp16_t *)(ntb->data + nth16->wNdpIndex); + TU_LOG_DRV("recv_validate_datagram(%p, %d)\n", ntb, (int) len); - if (ndp16->wLength < sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)) { - TU_LOG_DRV("(EE) ill ndp16 length: %d\n", ndp16->wLength); - return false; - } - if (ndp16->dwSignature != NDP16_SIGNATURE_NCM0 && ndp16->dwSignature != NDP16_SIGNATURE_NCM1) { - TU_LOG_DRV("(EE) ill signature: 0x%08x\n", (unsigned)ndp16->dwSignature); - return false; - } - if (ndp16->wNextNdpIndex != 0) { - TU_LOG_DRV("(EE) cannot handle wNextNdpIndex!=0 (%d)\n", ndp16->wNextNdpIndex); - return false; - } + // check header + if (nth16->wHeaderLength != sizeof(nth16_t)) { + TU_LOG_DRV("(EE) ill nth16 length: %d\n", nth16->wHeaderLength); + return false; + } + if (nth16->dwSignature != NTH16_SIGNATURE) { + TU_LOG_DRV("(EE) ill signature: 0x%08x\n", (unsigned) nth16->dwSignature); + return false; + } + if (len < sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)) { + TU_LOG_DRV("(EE) ill min len: %lu\n", len); + return false; + } + if (nth16->wBlockLength > len) { + TU_LOG_DRV("(EE) ill block length: %d > %lu\n", nth16->wBlockLength, len); + return false; + } + if (nth16->wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { + TU_LOG_DRV("(EE) ill block length2: %d > %d\n", nth16->wBlockLength, CFG_TUD_NCM_OUT_NTB_MAX_SIZE); + return false; + } + if (nth16->wNdpIndex < sizeof(nth16) || nth16->wNdpIndex > len - (sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t))) { + TU_LOG_DRV("(EE) ill position of first ndp: %d (%lu)\n", nth16->wNdpIndex, len); + return false; + } - const ndp16_datagram_t *ndp16_datagram = - (const ndp16_datagram_t *)(ntb->data + nth16->wNdpIndex + sizeof(ndp16_t)); - int ndx = 0; - uint16_t max_ndx = (uint16_t)((ndp16->wLength - sizeof(ndp16_t)) / sizeof(ndp16_datagram_t)); + // check (first) NDP(16) + const ndp16_t *ndp16 = (const ndp16_t *) (ntb->data + nth16->wNdpIndex); - if (max_ndx > 2) { // number of datagrams in NTB > 1 - TU_LOG_DRV("<< %d (%d)\n", max_ndx - 1, ntb->nth.wBlockLength); - } - if (ndp16_datagram[max_ndx - 1].wDatagramIndex != 0 || - ndp16_datagram[max_ndx - 1].wDatagramLength != 0) { - TU_LOG_DRV(" max_ndx != 0\n"); - return false; - } - while (ndp16_datagram[ndx].wDatagramIndex != 0 && ndp16_datagram[ndx].wDatagramLength != 0) { - TU_LOG_DRV(" << %d %d\n", ndp16_datagram[ndx].wDatagramIndex, - ndp16_datagram[ndx].wDatagramLength); - if (ndp16_datagram[ndx].wDatagramIndex > len) { - TU_LOG_DRV("(EE) ill start of datagram[%d]: %d (%lu)\n", ndx, - ndp16_datagram[ndx].wDatagramIndex, len); - return false; - } - if (ndp16_datagram[ndx].wDatagramIndex + ndp16_datagram[ndx].wDatagramLength > len) { - TU_LOG_DRV("(EE) ill end of datagram[%d]: %d (%lu)\n", ndx, - ndp16_datagram[ndx].wDatagramIndex + ndp16_datagram[ndx].wDatagramLength, - len); - return false; - } - ++ndx; - } + if (ndp16->wLength < sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)) { + TU_LOG_DRV("(EE) ill ndp16 length: %d\n", ndp16->wLength); + return false; + } + if (ndp16->dwSignature != NDP16_SIGNATURE_NCM0 && ndp16->dwSignature != NDP16_SIGNATURE_NCM1) { + TU_LOG_DRV("(EE) ill signature: 0x%08x\n", (unsigned) ndp16->dwSignature); + return false; + } + if (ndp16->wNextNdpIndex != 0) { + TU_LOG_DRV("(EE) cannot handle wNextNdpIndex!=0 (%d)\n", ndp16->wNextNdpIndex); + return false; + } -#if CFG_TUD_NCM_LOG_LEVEL >= 3 - TU_LOG_BUF(3, ntb->data[i], len); -#endif + const ndp16_datagram_t *ndp16_datagram = (const ndp16_datagram_t *) (ntb->data + nth16->wNdpIndex + sizeof(ndp16_t)); + int ndx = 0; + uint16_t max_ndx = (uint16_t) ((ndp16->wLength - sizeof(ndp16_t)) / sizeof(ndp16_datagram_t)); - // -> ntb contains a valid packet structure - // ok... I did not check for garbage within the datagram indices... - return true; + if (max_ndx > 2) { // number of datagrams in NTB > 1 + TU_LOG_DRV("<< %d (%d)\n", max_ndx - 1, ntb->nth.wBlockLength); + } + if (ndp16_datagram[max_ndx - 1].wDatagramIndex != 0 || ndp16_datagram[max_ndx - 1].wDatagramLength != 0) { + TU_LOG_DRV(" max_ndx != 0\n"); + return false; + } + while (ndp16_datagram[ndx].wDatagramIndex != 0 && ndp16_datagram[ndx].wDatagramLength != 0) { + TU_LOG_DRV(" << %d %d\n", ndp16_datagram[ndx].wDatagramIndex, ndp16_datagram[ndx].wDatagramLength); + if (ndp16_datagram[ndx].wDatagramIndex > len) { + TU_LOG_DRV("(EE) ill start of datagram[%d]: %d (%lu)\n", ndx, ndp16_datagram[ndx].wDatagramIndex, len); + return false; + } + if (ndp16_datagram[ndx].wDatagramIndex + ndp16_datagram[ndx].wDatagramLength > len) { + TU_LOG_DRV("(EE) ill end of datagram[%d]: %d (%lu)\n", ndx, ndp16_datagram[ndx].wDatagramIndex + ndp16_datagram[ndx].wDatagramLength, len); + return false; + } + ++ndx; + } + + #if CFG_TUD_NCM_LOG_LEVEL >= 3 + TU_LOG_BUF(3, ntb->data[i], len); + #endif + + // -> ntb contains a valid packet structure + // ok... I did not check for garbage within the datagram indices... + return true; } // recv_validate_datagram /** * Transfer the next (pending) datagram to the glue logic and return receive buffer if empty. */ -static void recv_transfer_datagram_to_glue_logic(void) -{ - TU_LOG_DRV("recv_transfer_datagram_to_glue_logic()\n"); - - if (ncm_interface.recv_glue_ntb == NULL) { - ncm_interface.recv_glue_ntb = recv_get_next_ready_ntb(); - TU_LOG_DRV(" new buffer for glue logic: %p\n", ncm_interface.recv_glue_ntb); - ncm_interface.recv_glue_ntb_datagram_ndx = 0; - } - - if (ncm_interface.recv_glue_ntb != NULL) { - const ndp16_datagram_t *ndp16_datagram = - (ndp16_datagram_t *)(ncm_interface.recv_glue_ntb->data + - ncm_interface.recv_glue_ntb->nth.wNdpIndex + sizeof(ndp16_t)); - - if (ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramIndex == 0) { - TU_LOG_DRV("(EE) SOMETHING WENT WRONG 1\n"); - } else if (ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramLength == 0) { - TU_LOG_DRV("(EE) SOMETHING WENT WRONG 2\n"); +static void recv_transfer_datagram_to_glue_logic(void) { + TU_LOG_DRV("recv_transfer_datagram_to_glue_logic()\n"); + + if (ncm_interface.recv_glue_ntb == NULL) { + ncm_interface.recv_glue_ntb = recv_get_next_ready_ntb(); + TU_LOG_DRV(" new buffer for glue logic: %p\n", ncm_interface.recv_glue_ntb); + ncm_interface.recv_glue_ntb_datagram_ndx = 0; + } + + if (ncm_interface.recv_glue_ntb != NULL) { + const ndp16_datagram_t *ndp16_datagram = (ndp16_datagram_t *) (ncm_interface.recv_glue_ntb->data + ncm_interface.recv_glue_ntb->nth.wNdpIndex + sizeof(ndp16_t)); + + if (ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramIndex == 0) { + TU_LOG_DRV("(EE) SOMETHING WENT WRONG 1\n"); + } else if (ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramLength == 0) { + TU_LOG_DRV("(EE) SOMETHING WENT WRONG 2\n"); + } else { + uint16_t datagramIndex = ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramIndex; + uint16_t datagramLength = ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramLength; + + TU_LOG_DRV(" recv[%d] - %d %d\n", ncm_interface.recv_glue_ntb_datagram_ndx, datagramIndex, datagramLength); + if (tud_network_recv_cb(ncm_interface.recv_glue_ntb->data + datagramIndex, datagramLength)) { + // send datagram successfully to glue logic + TU_LOG_DRV(" OK\n"); + datagramIndex = ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx + 1].wDatagramIndex; + datagramLength = ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx + 1].wDatagramLength; + + if (datagramIndex != 0 && datagramLength != 0) { + // -> next datagram + ++ncm_interface.recv_glue_ntb_datagram_ndx; } else { - uint16_t datagramIndex = - ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramIndex; - uint16_t datagramLength = - ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx].wDatagramLength; - - TU_LOG_DRV(" recv[%d] - %d %d\n", ncm_interface.recv_glue_ntb_datagram_ndx, - datagramIndex, datagramLength); - if (tud_network_recv_cb(ncm_interface.recv_glue_ntb->data + datagramIndex, - datagramLength)) { - // send datagram successfully to glue logic - TU_LOG_DRV(" OK\n"); - datagramIndex = - ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx + 1].wDatagramIndex; - datagramLength = - ndp16_datagram[ncm_interface.recv_glue_ntb_datagram_ndx + 1].wDatagramLength; - - if (datagramIndex != 0 && datagramLength != 0) { - // -> next datagram - ++ncm_interface.recv_glue_ntb_datagram_ndx; - } else { - // end of datagrams reached - recv_put_ntb_into_free_list(ncm_interface.recv_glue_ntb); - ncm_interface.recv_glue_ntb = NULL; - } - } + // end of datagrams reached + recv_put_ntb_into_free_list(ncm_interface.recv_glue_ntb); + ncm_interface.recv_glue_ntb = NULL; } + } } + } } // recv_transfer_datagram_to_glue_logic //----------------------------------------------------------------------------- @@ -688,78 +641,70 @@ static void recv_transfer_datagram_to_glue_logic(void) * This function also fetches a next buffer if required, so that tud_network_xmit() is ready for copy * and transmission operation. */ -bool tud_network_can_xmit(uint16_t size) -{ - TU_LOG_DRV("tud_network_can_xmit(%d)\n", size); +bool tud_network_can_xmit(uint16_t size) { + TU_LOG_DRV("tud_network_can_xmit(%d)\n", size); - TU_ASSERT(size <= CFG_TUD_NCM_OUT_NTB_MAX_SIZE - - (sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)), - false); + TU_ASSERT(size <= CFG_TUD_NCM_OUT_NTB_MAX_SIZE - (sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)), false); - if (xmit_requested_datagram_fits_into_current_ntb(size) || xmit_setup_next_glue_ntb()) { - // -> everything is fine - return true; - } - xmit_start_if_possible(ncm_interface.rhport); - TU_LOG_DRV( - "(II) tud_network_can_xmit: request blocked\n"); // could happen if all xmit buffers are full (but should happen rarely) - return false; + if (xmit_requested_datagram_fits_into_current_ntb(size) || xmit_setup_next_glue_ntb()) { + // -> everything is fine + return true; + } + xmit_start_if_possible(ncm_interface.rhport); + TU_LOG_DRV("(II) tud_network_can_xmit: request blocked\n");// could happen if all xmit buffers are full (but should happen rarely) + return false; } // tud_network_can_xmit /** * Put a datagram into a waiting NTB. * If currently no transmission is started, then initiate transmission. */ -void tud_network_xmit(void *ref, uint16_t arg) -{ - TU_LOG_DRV("tud_network_xmit(%p, %d)\n", ref, arg); +void tud_network_xmit(void *ref, uint16_t arg) { + TU_LOG_DRV("tud_network_xmit(%p, %d)\n", ref, arg); - if (ncm_interface.xmit_glue_ntb == NULL) { - TU_LOG_DRV("(EE) tud_network_xmit: no buffer\n"); // must not happen (really) - return; - } + if (ncm_interface.xmit_glue_ntb == NULL) { + TU_LOG_DRV("(EE) tud_network_xmit: no buffer\n");// must not happen (really) + return; + } - xmit_ntb_t *ntb = ncm_interface.xmit_glue_ntb; + xmit_ntb_t *ntb = ncm_interface.xmit_glue_ntb; - // copy new datagram to the end of the current NTB - uint16_t size = tud_network_xmit_cb(ntb->data + ntb->nth.wBlockLength, ref, arg); + // copy new datagram to the end of the current NTB + uint16_t size = tud_network_xmit_cb(ntb->data + ntb->nth.wBlockLength, ref, arg); - // correct NTB internals - ntb->ndp_datagram[ncm_interface.xmit_glue_ntb_datagram_ndx].wDatagramIndex = - ntb->nth.wBlockLength; - ntb->ndp_datagram[ncm_interface.xmit_glue_ntb_datagram_ndx].wDatagramLength = size; - ncm_interface.xmit_glue_ntb_datagram_ndx += 1; + // correct NTB internals + ntb->ndp_datagram[ncm_interface.xmit_glue_ntb_datagram_ndx].wDatagramIndex = ntb->nth.wBlockLength; + ntb->ndp_datagram[ncm_interface.xmit_glue_ntb_datagram_ndx].wDatagramLength = size; + ncm_interface.xmit_glue_ntb_datagram_ndx += 1; - ntb->nth.wBlockLength += (uint16_t)(size + XMIT_ALIGN_OFFSET(size)); + ntb->nth.wBlockLength += (uint16_t) (size + XMIT_ALIGN_OFFSET(size)); - if (ntb->nth.wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { - TU_LOG_DRV("(EE) tud_network_xmit: buffer overflow\n"); // must not happen (really) - return; - } + if (ntb->nth.wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) { + TU_LOG_DRV("(EE) tud_network_xmit: buffer overflow\n"); // must not happen (really) + return; + } - xmit_start_if_possible(ncm_interface.rhport); + xmit_start_if_possible(ncm_interface.rhport); } // tud_network_xmit /** * Keep the receive logic busy and transfer pending packets to the glue logic. */ -void tud_network_recv_renew(void) -{ - TU_LOG_DRV("tud_network_recv_renew()\n"); +void tud_network_recv_renew(void) { + TU_LOG_DRV("tud_network_recv_renew()\n"); - recv_transfer_datagram_to_glue_logic(); - recv_try_to_start_new_reception(ncm_interface.rhport); + recv_transfer_datagram_to_glue_logic(); + recv_try_to_start_new_reception(ncm_interface.rhport); } // tud_network_recv_renew /** * Same as tud_network_recv_renew() but knows \a rhport */ -void tud_network_recv_renew_r(uint8_t rhport) -{ - TU_LOG_DRV("tud_network_recv_renew_r(%d)\n", rhport); +void tud_network_recv_renew_r(uint8_t rhport) { + TU_LOG_DRV("tud_network_recv_renew_r(%d)\n", rhport); - ncm_interface.rhport = rhport; - tud_network_recv_renew(); + ncm_interface.rhport = rhport; + tud_network_recv_renew(); } // tud_network_recv_renew //----------------------------------------------------------------------------- @@ -770,37 +715,34 @@ void tud_network_recv_renew_r(uint8_t rhport) * Initialize the driver data structures. * Might be called several times. */ -void netd_init(void) -{ - TU_LOG_DRV("netd_init()\n"); +void netd_init(void) { + TU_LOG_DRV("netd_init()\n"); - memset(&ncm_interface, 0, sizeof(ncm_interface)); + memset(&ncm_interface, 0, sizeof(ncm_interface)); - for (int i = 0; i < XMIT_NTB_N; ++i) { - ncm_interface.xmit_free_ntb[i] = ncm_interface.xmit_ntb + i; - } - for (int i = 0; i < RECV_NTB_N; ++i) { - ncm_interface.recv_free_ntb[i] = ncm_interface.recv_ntb + i; - } + for (int i = 0; i < XMIT_NTB_N; ++i) { + ncm_interface.xmit_free_ntb[i] = ncm_interface.xmit_ntb + i; + } + for (int i = 0; i < RECV_NTB_N; ++i) { + ncm_interface.recv_free_ntb[i] = ncm_interface.recv_ntb + i; + } } // netd_init /** * Deinit driver */ -bool netd_deinit(void) -{ - return true; +bool netd_deinit(void) { + return true; } /** * Resets the port. * In this driver this is the same as netd_init() */ -void netd_reset(uint8_t rhport) -{ - (void)rhport; +void netd_reset(uint8_t rhport) { + (void) rhport; - netd_init(); + netd_init(); } // netd_reset /** @@ -817,142 +759,137 @@ void netd_reset(uint8_t rhport) * - \a ep_notif, \a ep_in and \a ep_out are set * - USB interface is open */ -uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) -{ - TU_ASSERT(ncm_interface.ep_notif == 0, 0); // assure that the interface is only opened once - - ncm_interface.itf_num = itf_desc->bInterfaceNumber; // management interface - - // skip the two first entries and the following TUSB_DESC_CS_INTERFACE entries - uint16_t drv_len = sizeof(tusb_desc_interface_t); - uint8_t const *p_desc = tu_desc_next(itf_desc); - while (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && drv_len <= max_len) { - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } +uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) { + TU_ASSERT(ncm_interface.ep_notif == 0, 0);// assure that the interface is only opened once - // get notification endpoint - TU_ASSERT(tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT, 0); - TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *)p_desc), 0); - ncm_interface.ep_notif = ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress; + ncm_interface.itf_num = itf_desc->bInterfaceNumber;// management interface + + // skip the two first entries and the following TUSB_DESC_CS_INTERFACE entries + uint16_t drv_len = sizeof(tusb_desc_interface_t); + uint8_t const *p_desc = tu_desc_next(itf_desc); + while (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && drv_len <= max_len) { drv_len += tu_desc_len(p_desc); p_desc = tu_desc_next(p_desc); + } - // skip the following TUSB_DESC_INTERFACE entries (which must be TUSB_CLASS_CDC_DATA) - while (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && drv_len <= max_len) { - tusb_desc_interface_t const *data_itf_desc = (tusb_desc_interface_t const *)p_desc; - TU_ASSERT(data_itf_desc->bInterfaceClass == TUSB_CLASS_CDC_DATA, 0); + // get notification endpoint + TU_ASSERT(tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT, 0); + TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), 0); + ncm_interface.ep_notif = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress; + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } + // skip the following TUSB_DESC_INTERFACE entries (which must be TUSB_CLASS_CDC_DATA) + while (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && drv_len <= max_len) { + tusb_desc_interface_t const *data_itf_desc = (tusb_desc_interface_t const *) p_desc; + TU_ASSERT(data_itf_desc->bInterfaceClass == TUSB_CLASS_CDC_DATA, 0); + + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } - // a TUSB_DESC_ENDPOINT (actually two) must follow, open these endpoints - TU_ASSERT(tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT, 0); - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &ncm_interface.ep_out, - &ncm_interface.ep_in)); - drv_len += 2 * sizeof(tusb_desc_endpoint_t); + // a TUSB_DESC_ENDPOINT (actually two) must follow, open these endpoints + TU_ASSERT(tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT, 0); + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &ncm_interface.ep_out, &ncm_interface.ep_in)); + drv_len += 2 * sizeof(tusb_desc_endpoint_t); - return drv_len; + return drv_len; } // netd_open /** * Handle TinyUSB requests to process transfer events. */ -bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) -{ - (void)result; - - if (ep_addr == ncm_interface.ep_out) { - // new NTB received - // - make the NTB valid - // - if ready transfer datagrams to the glue logic for further processing - // - if there is a free receive buffer, initiate reception - if (!recv_validate_datagram(ncm_interface.recv_tinyusb_ntb, xferred_bytes)) { - // verification failed: ignore NTB and return it to free - TU_LOG_DRV("(EE) VALIDATION FAILED. WHAT CAN WE DO IN THIS CASE?\n"); - } else { - // packet ok -> put it into ready list - recv_put_ntb_into_ready_list(ncm_interface.recv_tinyusb_ntb); - } - ncm_interface.recv_tinyusb_ntb = NULL; - tud_network_recv_renew_r(rhport); - } else if (ep_addr == ncm_interface.ep_in) { - // transmission of an NTB finished - // - free the transmitted NTB buffer - // - insert ZLPs when necessary - // - if there is another transmit NTB waiting, try to start transmission - xmit_put_ntb_into_free_list(ncm_interface.xmit_tinyusb_ntb); - ncm_interface.xmit_tinyusb_ntb = NULL; - if (!xmit_insert_required_zlp(rhport, xferred_bytes)) { - xmit_start_if_possible(rhport); - } - } else if (ep_addr == ncm_interface.ep_notif) { - // next transfer on notification channel - notification_xmit(rhport, true); - } - - return true; +bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { + (void) result; + + if (ep_addr == ncm_interface.ep_out) { + // new NTB received + // - make the NTB valid + // - if ready transfer datagrams to the glue logic for further processing + // - if there is a free receive buffer, initiate reception + if (!recv_validate_datagram(ncm_interface.recv_tinyusb_ntb, xferred_bytes)) { + // verification failed: ignore NTB and return it to free + TU_LOG_DRV("(EE) VALIDATION FAILED. WHAT CAN WE DO IN THIS CASE?\n"); + } else { + // packet ok -> put it into ready list + recv_put_ntb_into_ready_list(ncm_interface.recv_tinyusb_ntb); + } + ncm_interface.recv_tinyusb_ntb = NULL; + tud_network_recv_renew_r(rhport); + } else if (ep_addr == ncm_interface.ep_in) { + // transmission of an NTB finished + // - free the transmitted NTB buffer + // - insert ZLPs when necessary + // - if there is another transmit NTB waiting, try to start transmission + xmit_put_ntb_into_free_list(ncm_interface.xmit_tinyusb_ntb); + ncm_interface.xmit_tinyusb_ntb = NULL; + if (!xmit_insert_required_zlp(rhport, xferred_bytes)) { + xmit_start_if_possible(rhport); + } + } else if (ep_addr == ncm_interface.ep_notif) { + // next transfer on notification channel + notification_xmit(rhport, true); + } + + return true; } // netd_xfer_cb /** * Respond to TinyUSB control requests. * At startup transmission of notification packets are done here. */ -bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) -{ - if (stage != CONTROL_STAGE_SETUP) { - return true; - } +bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) { + if (stage != CONTROL_STAGE_SETUP) { + return true; + } - switch (request->bmRequestType_bit.type) { + switch (request->bmRequestType_bit.type) { case TUSB_REQ_TYPE_STANDARD: - switch (request->bRequest) { + switch (request->bRequest) { case TUSB_REQ_GET_INTERFACE: { - TU_VERIFY(ncm_interface.itf_num + 1 == request->wIndex, false); + TU_VERIFY(ncm_interface.itf_num + 1 == request->wIndex, false); - tud_control_xfer(rhport, request, &ncm_interface.itf_data_alt, 1); + tud_control_xfer(rhport, request, &ncm_interface.itf_data_alt, 1); } break; case TUSB_REQ_SET_INTERFACE: { - TU_VERIFY(ncm_interface.itf_num + 1 == request->wIndex && request->wValue < 2, false); + TU_VERIFY(ncm_interface.itf_num + 1 == request->wIndex && request->wValue < 2, false); - ncm_interface.itf_data_alt = (uint8_t)request->wValue; + ncm_interface.itf_data_alt = (uint8_t) request->wValue; - if (ncm_interface.itf_data_alt == 1) { - tud_network_recv_renew_r(rhport); - notification_xmit(rhport, false); - } - tud_control_status(rhport, request); + if (ncm_interface.itf_data_alt == 1) { + tud_network_recv_renew_r(rhport); + notification_xmit(rhport, false); + } + tud_control_status(rhport, request); } break; // unsupported request default: - return false; - } - break; + return false; + } + break; case TUSB_REQ_TYPE_CLASS: - TU_VERIFY(ncm_interface.itf_num == request->wIndex, false); - switch (request->bRequest) { + TU_VERIFY(ncm_interface.itf_num == request->wIndex, false); + switch (request->bRequest) { case NCM_GET_NTB_PARAMETERS: { - // transfer NTB parameters to host. - tud_control_xfer(rhport, request, (void *)(uintptr_t)&ntb_parameters, - sizeof(ntb_parameters)); + // transfer NTB parameters to host. + tud_control_xfer(rhport, request, (void *) (uintptr_t) &ntb_parameters, sizeof(ntb_parameters)); } break; - // unsupported request + // unsupported request default: - return false; - } - break; - // unsupported request + return false; + } + break; + // unsupported request default: - return false; - } + return false; + } - return true; + return true; } // netd_control_xfer_cb #endif // ( CFG_TUD_ENABLED && CFG_TUD_NCM ) diff --git a/Libraries/tinyusb/src/class/net/net_device.h b/Libraries/tinyusb/src/class/net/net_device.h index 330c063e3e9..4c9a92f2d04 100644 --- a/Libraries/tinyusb/src/class/net/net_device.h +++ b/Libraries/tinyusb/src/class/net/net_device.h @@ -40,14 +40,19 @@ /* Maximum Transmission Unit (in bytes) of the network, including Ethernet header */ #ifndef CFG_TUD_NET_MTU -#define CFG_TUD_NET_MTU 1514 +#define CFG_TUD_NET_MTU 1514 #endif + // Table 4.3 Data Class Interface Protocol Codes -typedef enum { NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK = 0x01 } ncm_data_interface_protocol_code_t; +typedef enum +{ + NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK = 0x01 +} ncm_data_interface_protocol_code_t; + #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -85,16 +90,16 @@ extern uint8_t tud_network_mac_address[6]; //--------------------------------------------------------------------+ // INTERNAL USBD-CLASS DRIVER API //--------------------------------------------------------------------+ -void netd_init(void); -bool netd_deinit(void); -void netd_reset(uint8_t rhport); -uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); -bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); -void netd_report(uint8_t *buf, uint16_t len); +void netd_init (void); +bool netd_deinit (void); +void netd_reset (uint8_t rhport); +uint16_t netd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool netd_control_xfer_cb (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +bool netd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); +void netd_report (uint8_t *buf, uint16_t len); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_NET_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/usbtmc/usbtmc.h b/Libraries/tinyusb/src/class/usbtmc/usbtmc.h index 828b6ef448f..327de087c79 100644 --- a/Libraries/tinyusb/src/class/usbtmc/usbtmc.h +++ b/Libraries/tinyusb/src/class/usbtmc/usbtmc.h @@ -30,6 +30,7 @@ #include "common/tusb_common.h" + /* Implements USBTMC Revision 1.0, April 14, 2003 String descriptors must have a "LANGID=0x409"/US English string. @@ -45,82 +46,90 @@ #define USBTMC_488_VERSION 0x0100 typedef enum { - USBTMC_MSGID_DEV_DEP_MSG_OUT = 1u, - USBTMC_MSGID_DEV_DEP_MSG_IN = 2u, - USBTMC_MSGID_VENDOR_SPECIFIC_MSG_OUT = 126u, - USBTMC_MSGID_VENDOR_SPECIFIC_IN = 127u, - USBTMC_MSGID_USB488_TRIGGER = 128u, + USBTMC_MSGID_DEV_DEP_MSG_OUT = 1u, + USBTMC_MSGID_DEV_DEP_MSG_IN = 2u, + USBTMC_MSGID_VENDOR_SPECIFIC_MSG_OUT = 126u, + USBTMC_MSGID_VENDOR_SPECIFIC_IN = 127u, + USBTMC_MSGID_USB488_TRIGGER = 128u, } usbtmc_msgid_enum; /// \brief Message header (For BULK OUT and BULK IN); 4 bytes -typedef struct TU_ATTR_PACKED { - uint8_t MsgID; ///< Message type ID (usbtmc_msgid_enum) - uint8_t bTag; ///< Transfer ID 1<=bTag<=255 - uint8_t bTagInverse; ///< Complement of the tag - uint8_t _reserved; ///< Must be 0x00 +typedef struct TU_ATTR_PACKED +{ + uint8_t MsgID ; ///< Message type ID (usbtmc_msgid_enum) + uint8_t bTag ; ///< Transfer ID 1<=bTag<=255 + uint8_t bTagInverse ; ///< Complement of the tag + uint8_t _reserved ; ///< Must be 0x00 } usbtmc_msg_header_t; -typedef struct TU_ATTR_PACKED { - usbtmc_msg_header_t header; - uint8_t data[8]; +typedef struct TU_ATTR_PACKED +{ + usbtmc_msg_header_t header; + uint8_t data[8]; } usbtmc_msg_generic_t; /* Uses on the bulk-out endpoint: */ // Next 8 bytes are message-specific typedef struct TU_ATTR_PACKED { - usbtmc_msg_header_t header; ///< Header - uint32_t TransferSize; ///< Transfer size; LSB first - struct TU_ATTR_PACKED { - unsigned int EOM : 1; ///< EOM set on last byte - } bmTransferAttributes; - uint8_t _reserved[3]; + usbtmc_msg_header_t header ; ///< Header + uint32_t TransferSize ; ///< Transfer size; LSB first + struct TU_ATTR_PACKED + { + unsigned int EOM : 1 ; ///< EOM set on last byte + } bmTransferAttributes; + uint8_t _reserved[3]; } usbtmc_msg_request_dev_dep_out; TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_dev_dep_out) == 12u, "struct wrong length"); // Next 8 bytes are message-specific -typedef struct TU_ATTR_PACKED { - usbtmc_msg_header_t header; ///< Header - uint32_t TransferSize; ///< Transfer size; LSB first - struct TU_ATTR_PACKED { - unsigned int - TermCharEnabled : 1; ///< "The Bulk-IN transfer must terminate on the specified TermChar."; CAPABILITIES must list TermChar - } bmTransferAttributes; - uint8_t TermChar; - uint8_t _reserved[2]; +typedef struct TU_ATTR_PACKED +{ + usbtmc_msg_header_t header ; ///< Header + uint32_t TransferSize ; ///< Transfer size; LSB first + struct TU_ATTR_PACKED + { + unsigned int TermCharEnabled : 1 ; ///< "The Bulk-IN transfer must terminate on the specified TermChar."; CAPABILITIES must list TermChar + } bmTransferAttributes; + uint8_t TermChar; + uint8_t _reserved[2]; } usbtmc_msg_request_dev_dep_in; TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_dev_dep_in) == 12u, "struct wrong length"); /* Bulk-in headers */ -typedef struct TU_ATTR_PACKED { - usbtmc_msg_header_t header; - uint32_t TransferSize; - struct TU_ATTR_PACKED { - uint8_t EOM : 1; ///< Last byte of transfer is the end of the message - uint8_t - UsingTermChar : 1; ///< Support TermChar && Request.TermCharEnabled && last char in transfer is TermChar - } bmTransferAttributes; - uint8_t _reserved[3]; +typedef struct TU_ATTR_PACKED +{ + usbtmc_msg_header_t header; + uint32_t TransferSize; + struct TU_ATTR_PACKED + { + uint8_t EOM: 1; ///< Last byte of transfer is the end of the message + uint8_t UsingTermChar: 1; ///< Support TermChar && Request.TermCharEnabled && last char in transfer is TermChar + } bmTransferAttributes; + uint8_t _reserved[3]; } usbtmc_msg_dev_dep_msg_in_header_t; TU_VERIFY_STATIC(sizeof(usbtmc_msg_dev_dep_msg_in_header_t) == 12u, "struct wrong length"); /* Unsupported vendor things.... Are these ever used?*/ -typedef struct TU_ATTR_PACKED { - usbtmc_msg_header_t header; ///< Header - uint32_t TransferSize; ///< Transfer size; LSB first - uint8_t _reserved[4]; +typedef struct TU_ATTR_PACKED +{ + usbtmc_msg_header_t header ; ///< Header + uint32_t TransferSize ; ///< Transfer size; LSB first + uint8_t _reserved[4]; } usbtmc_msg_request_vendor_specific_out; + TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_vendor_specific_out) == 12u, "struct wrong length"); -typedef struct TU_ATTR_PACKED { - usbtmc_msg_header_t header; ///< Header - uint32_t TransferSize; ///< Transfer size; LSB first - uint8_t _reserved[4]; +typedef struct TU_ATTR_PACKED +{ + usbtmc_msg_header_t header ; ///< Header + uint32_t TransferSize ; ///< Transfer size; LSB first + uint8_t _reserved[4]; } usbtmc_msg_request_vendor_specific_in; TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_vendor_specific_in) == 12u, "struct wrong length"); @@ -130,82 +139,77 @@ TU_VERIFY_STATIC(sizeof(usbtmc_msg_request_vendor_specific_in) == 12u, "struct w /* typedef struct TU_ATTR_PACKED { struct { - unsigned int Recipient : 5{} -///< EOM set on last byte - unsigned int Type : 2{} -///< EOM set on last byte - unsigned int DirectionToHost : 1{} -///< 0 is OUT, 1 is IN + unsigned int Recipient : 5 ; ///< EOM set on last byte + unsigned int Type : 2 ; ///< EOM set on last byte + unsigned int DirectionToHost : 1 ; ///< 0 is OUT, 1 is IN } bmRequestType; - uint8_t bRequest{} -///< If bmRequestType.Type = Class, see usmtmc_request_type_enum - uint16_t wValue{} - uint16_t wIndex{} - uint16_t wLength{} -// Number of bytes in data stage + uint8_t bRequest ; ///< If bmRequestType.Type = Class, see usmtmc_request_type_enum + uint16_t wValue ; + uint16_t wIndex ; + uint16_t wLength ; // Number of bytes in data stage } usbtmc_class_specific_control_req; */ // bulk-in protocol errors enum { - USBTMC_BULK_IN_ERR_INCOMPLETE_HEADER = 1u, - USBTMC_BULK_IN_ERR_UNSUPPORTED = 2u, - USBTMC_BULK_IN_ERR_BAD_PARAMETER = 3u, - USBTMC_BULK_IN_ERR_DATA_TOO_SHORT = 4u, - USBTMC_BULK_IN_ERR_DATA_TOO_LONG = 5u, + USBTMC_BULK_IN_ERR_INCOMPLETE_HEADER = 1u, + USBTMC_BULK_IN_ERR_UNSUPPORTED = 2u, + USBTMC_BULK_IN_ERR_BAD_PARAMETER = 3u, + USBTMC_BULK_IN_ERR_DATA_TOO_SHORT = 4u, + USBTMC_BULK_IN_ERR_DATA_TOO_LONG = 5u, }; // built-in halt errors enum { - USBTMC_BULK_IN_ERR = 1u, ///< receives a USBTMC command message that expects a response while a - /// Bulk-IN transfer is in progress + USBTMC_BULK_IN_ERR = 1u, ///< receives a USBTMC command message that expects a response while a + /// Bulk-IN transfer is in progress }; typedef enum { - USBTMC_bREQUEST_INITIATE_ABORT_BULK_OUT = 1u, - USBTMC_bREQUEST_CHECK_ABORT_BULK_OUT_STATUS = 2u, - USBTMC_bREQUEST_INITIATE_ABORT_BULK_IN = 3u, - USBTMC_bREQUEST_CHECK_ABORT_BULK_IN_STATUS = 4u, - USBTMC_bREQUEST_INITIATE_CLEAR = 5u, - USBTMC_bREQUEST_CHECK_CLEAR_STATUS = 6u, - USBTMC_bREQUEST_GET_CAPABILITIES = 7u, - - USBTMC_bREQUEST_INDICATOR_PULSE = 64u, // Optional - - /****** USBTMC 488 *************/ - USB488_bREQUEST_READ_STATUS_BYTE = 128u, - USB488_bREQUEST_REN_CONTROL = 160u, - USB488_bREQUEST_GO_TO_LOCAL = 161u, - USB488_bREQUEST_LOCAL_LOCKOUT = 162u, + USBTMC_bREQUEST_INITIATE_ABORT_BULK_OUT = 1u, + USBTMC_bREQUEST_CHECK_ABORT_BULK_OUT_STATUS = 2u, + USBTMC_bREQUEST_INITIATE_ABORT_BULK_IN = 3u, + USBTMC_bREQUEST_CHECK_ABORT_BULK_IN_STATUS = 4u, + USBTMC_bREQUEST_INITIATE_CLEAR = 5u, + USBTMC_bREQUEST_CHECK_CLEAR_STATUS = 6u, + USBTMC_bREQUEST_GET_CAPABILITIES = 7u, + + USBTMC_bREQUEST_INDICATOR_PULSE = 64u, // Optional + + /****** USBTMC 488 *************/ + USB488_bREQUEST_READ_STATUS_BYTE = 128u, + USB488_bREQUEST_REN_CONTROL = 160u, + USB488_bREQUEST_GO_TO_LOCAL = 161u, + USB488_bREQUEST_LOCAL_LOCKOUT = 162u, } usmtmc_request_type_enum; typedef enum { - // The last and first valid bNotify1 for use by the USBTMC class specification. - USBTMC_bNOTIFY1_USBTMC_FIRST = 0x00, - USBTMC_bNOTIFY1_USBTMC_LAST = 0x3F, + // The last and first valid bNotify1 for use by the USBTMC class specification. + USBTMC_bNOTIFY1_USBTMC_FIRST = 0x00, + USBTMC_bNOTIFY1_USBTMC_LAST = 0x3F, - // The last and first valid bNotify1 for use by vendors. - USBTMC_bNOTIFY1_VENDOR_SPECIFIC_FIRST = 0x40, - USBTMC_bNOTIFY1_VENDOR_SPECIFIC_LAST = 0x7F, + // The last and first valid bNotify1 for use by vendors. + USBTMC_bNOTIFY1_VENDOR_SPECIFIC_FIRST = 0x40, + USBTMC_bNOTIFY1_VENDOR_SPECIFIC_LAST = 0x7F, - // The last and first valid bNotify1 for use by USBTMC subclass specifications. - USBTMC_bNOTIFY1_SUBCLASS_FIRST = 0x80, - USBTMC_bNOTIFY1_SUBCLASS_LAST = 0xFF, + // The last and first valid bNotify1 for use by USBTMC subclass specifications. + USBTMC_bNOTIFY1_SUBCLASS_FIRST = 0x80, + USBTMC_bNOTIFY1_SUBCLASS_LAST = 0xFF, - // From the USB488 Subclass Specification, Section 3.4. - USB488_bNOTIFY1_SRQ = 0x81, + // From the USB488 Subclass Specification, Section 3.4. + USB488_bNOTIFY1_SRQ = 0x81, } usbtmc_int_in_payload_format; typedef enum { - USBTMC_STATUS_SUCCESS = 0x01, - USBTMC_STATUS_PENDING = 0x02, - USBTMC_STATUS_FAILED = 0x80, - USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS = 0x81, - USBTMC_STATUS_SPLIT_NOT_IN_PROGRESS = 0x82, - USBTMC_STATUS_SPLIT_IN_PROGRESS = 0x83, - - /****** USBTMC 488 *************/ - USB488_STATUS_INTERRUPT_IN_BUSY = 0x20 + USBTMC_STATUS_SUCCESS = 0x01, + USBTMC_STATUS_PENDING = 0x02, + USBTMC_STATUS_FAILED = 0x80, + USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS = 0x81, + USBTMC_STATUS_SPLIT_NOT_IN_PROGRESS = 0x82, + USBTMC_STATUS_SPLIT_IN_PROGRESS = 0x83, + + /****** USBTMC 488 *************/ + USB488_STATUS_INTERRUPT_IN_BUSY = 0x20 } usbtmc_status_enum; /************************************************************ @@ -213,109 +217,125 @@ typedef enum { */ typedef struct TU_ATTR_PACKED { - uint8_t USBTMC_status; ///< usbtmc_status_enum - uint8_t _reserved; - uint16_t bcdUSBTMC; ///< USBTMC_VERSION - - struct TU_ATTR_PACKED { - unsigned int listenOnly : 1; - unsigned int talkOnly : 1; - unsigned int supportsIndicatorPulse : 1; - } bmIntfcCapabilities; - struct TU_ATTR_PACKED { - unsigned int canEndBulkInOnTermChar : 1; - } bmDevCapabilities; - uint8_t _reserved2[6]; - uint8_t _reserved3[12]; + uint8_t USBTMC_status; ///< usbtmc_status_enum + uint8_t _reserved; + uint16_t bcdUSBTMC; ///< USBTMC_VERSION + + struct TU_ATTR_PACKED + { + unsigned int listenOnly :1; + unsigned int talkOnly :1; + unsigned int supportsIndicatorPulse :1; + } bmIntfcCapabilities; + struct TU_ATTR_PACKED + { + unsigned int canEndBulkInOnTermChar :1; + } bmDevCapabilities; + uint8_t _reserved2[6]; + uint8_t _reserved3[12]; } usbtmc_response_capabilities_t; TU_VERIFY_STATIC(sizeof(usbtmc_response_capabilities_t) == 0x18, "struct wrong length"); -typedef struct TU_ATTR_PACKED { - uint8_t USBTMC_status; - struct TU_ATTR_PACKED { - unsigned int BulkInFifoBytes : 1; - } bmClear; +typedef struct TU_ATTR_PACKED +{ + uint8_t USBTMC_status; + struct TU_ATTR_PACKED + { + unsigned int BulkInFifoBytes :1; + } bmClear; } usbtmc_get_clear_status_rsp_t; TU_VERIFY_STATIC(sizeof(usbtmc_get_clear_status_rsp_t) == 2u, "struct wrong length"); // Used for both abort bulk IN and bulk OUT -typedef struct TU_ATTR_PACKED { - uint8_t USBTMC_status; - uint8_t bTag; +typedef struct TU_ATTR_PACKED +{ + uint8_t USBTMC_status; + uint8_t bTag; } usbtmc_initiate_abort_rsp_t; TU_VERIFY_STATIC(sizeof(usbtmc_get_clear_status_rsp_t) == 2u, "struct wrong length"); // Used for both check_abort_bulk_in_status and check_abort_bulk_out_status -typedef struct TU_ATTR_PACKED { - uint8_t USBTMC_status; - struct TU_ATTR_PACKED { - unsigned int BulkInFifoBytes : 1; ///< Has queued data or a short packet that is queued - } bmAbortBulkIn; - uint8_t _reserved[2]; ///< Must be zero - uint32_t NBYTES_RXD_TXD; +typedef struct TU_ATTR_PACKED +{ + uint8_t USBTMC_status; + struct TU_ATTR_PACKED + { + unsigned int BulkInFifoBytes : 1; ///< Has queued data or a short packet that is queued + } bmAbortBulkIn; + uint8_t _reserved[2]; ///< Must be zero + uint32_t NBYTES_RXD_TXD; } usbtmc_check_abort_bulk_rsp_t; TU_VERIFY_STATIC(sizeof(usbtmc_check_abort_bulk_rsp_t) == 8u, "struct wrong length"); -typedef struct TU_ATTR_PACKED { - uint8_t USBTMC_status; ///< usbtmc_status_enum - uint8_t _reserved; - uint16_t bcdUSBTMC; ///< USBTMC_VERSION - - struct TU_ATTR_PACKED { - uint8_t listenOnly : 1; - uint8_t talkOnly : 1; - uint8_t supportsIndicatorPulse : 1; - } bmIntfcCapabilities; - - struct TU_ATTR_PACKED { - uint8_t canEndBulkInOnTermChar : 1; - } bmDevCapabilities; - - uint8_t _reserved2[6]; - uint16_t bcdUSB488; - - struct TU_ATTR_PACKED { - uint8_t supportsTrigger : 1; - uint8_t supportsREN_GTL_LLO : 1; - uint8_t is488_2 : 1; - } bmIntfcCapabilities488; - - struct TU_ATTR_PACKED { - uint8_t DT1 : 1; - uint8_t RL1 : 1; - uint8_t SR1 : 1; - uint8_t SCPI : 1; - } bmDevCapabilities488; - uint8_t _reserved3[8]; +typedef struct TU_ATTR_PACKED +{ + uint8_t USBTMC_status; ///< usbtmc_status_enum + uint8_t _reserved; + uint16_t bcdUSBTMC; ///< USBTMC_VERSION + + struct TU_ATTR_PACKED + { + uint8_t listenOnly :1; + uint8_t talkOnly :1; + uint8_t supportsIndicatorPulse :1; + } bmIntfcCapabilities; + + struct TU_ATTR_PACKED + { + uint8_t canEndBulkInOnTermChar :1; + } bmDevCapabilities; + + uint8_t _reserved2[6]; + uint16_t bcdUSB488; + + struct TU_ATTR_PACKED + { + uint8_t supportsTrigger :1; + uint8_t supportsREN_GTL_LLO :1; + uint8_t is488_2 :1; + } bmIntfcCapabilities488; + + struct TU_ATTR_PACKED + { + uint8_t DT1 :1; + uint8_t RL1 :1; + uint8_t SR1 :1; + uint8_t SCPI :1; + } bmDevCapabilities488; + uint8_t _reserved3[8]; } usbtmc_response_capabilities_488_t; TU_VERIFY_STATIC(sizeof(usbtmc_response_capabilities_488_t) == 0x18, "struct wrong length"); -typedef struct TU_ATTR_PACKED { - uint8_t USBTMC_status; - uint8_t bTag; - uint8_t statusByte; +typedef struct TU_ATTR_PACKED +{ + uint8_t USBTMC_status; + uint8_t bTag; + uint8_t statusByte; } usbtmc_read_stb_rsp_488_t; TU_VERIFY_STATIC(sizeof(usbtmc_read_stb_rsp_488_t) == 3u, "struct wrong length"); -typedef struct TU_ATTR_PACKED { - uint8_t bNotify1; // Must be USB488_bNOTIFY1_SRQ - uint8_t StatusByte; +typedef struct TU_ATTR_PACKED +{ + uint8_t bNotify1; // Must be USB488_bNOTIFY1_SRQ + uint8_t StatusByte; } usbtmc_srq_interrupt_488_t; TU_VERIFY_STATIC(sizeof(usbtmc_srq_interrupt_488_t) == 2u, "struct wrong length"); -typedef struct TU_ATTR_PACKED { - struct TU_ATTR_PACKED { - unsigned int bTag : 7; - unsigned int one : 1; - } bNotify1; - uint8_t StatusByte; +typedef struct TU_ATTR_PACKED +{ + struct TU_ATTR_PACKED + { + unsigned int bTag : 7; + unsigned int one : 1; + } bNotify1; + uint8_t StatusByte; } usbtmc_read_stb_interrupt_488_t; TU_VERIFY_STATIC(sizeof(usbtmc_read_stb_interrupt_488_t) == 2u, "struct wrong length"); diff --git a/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.c b/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.c index 7cfc4becfff..129ff465de9 100644 --- a/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.c +++ b/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.c @@ -35,6 +35,7 @@ * host. */ + /* * In the case of single-CPU "no OS", this task is never preempted other than by * interrupts, and the USBTMC code isn't called by interrupts, so all is OK. For "no OS", @@ -58,6 +59,7 @@ * */ + // TODO: // USBTMC 3.2.2 error conditions not strictly followed // No local lock-out, REN, or GTL. @@ -94,64 +96,67 @@ tu_static char logMsg[150]; * consistent with USBTMC. */ -typedef enum { - STATE_CLOSED, // Endpoints have not yet been opened since USB reset - STATE_NAK, // Bulk-out endpoint is in NAK state. - STATE_IDLE, // Bulk-out endpoint is waiting for CMD. - STATE_RCV, // Bulk-out is receiving DEV_DEP message - STATE_TX_REQUESTED, - STATE_TX_INITIATED, - STATE_TX_SHORTED, - STATE_CLEARING, - STATE_ABORTING_BULK_IN, - STATE_ABORTING_BULK_IN_SHORTED, // aborting, and short packet has been queued for transmission - STATE_ABORTING_BULK_IN_ABORTED, // aborting, and short packet has been transmitted - STATE_ABORTING_BULK_OUT, - STATE_NUM_STATES +typedef enum +{ + STATE_CLOSED, // Endpoints have not yet been opened since USB reset + STATE_NAK, // Bulk-out endpoint is in NAK state. + STATE_IDLE, // Bulk-out endpoint is waiting for CMD. + STATE_RCV, // Bulk-out is receiving DEV_DEP message + STATE_TX_REQUESTED, + STATE_TX_INITIATED, + STATE_TX_SHORTED, + STATE_CLEARING, + STATE_ABORTING_BULK_IN, + STATE_ABORTING_BULK_IN_SHORTED, // aborting, and short packet has been queued for transmission + STATE_ABORTING_BULK_IN_ABORTED, // aborting, and short packet has been transmitted + STATE_ABORTING_BULK_OUT, + STATE_NUM_STATES } usbtmcd_state_enum; #if (CFG_TUD_USBTMC_ENABLE_488) -typedef usbtmc_response_capabilities_488_t usbtmc_capabilities_specific_t; + typedef usbtmc_response_capabilities_488_t usbtmc_capabilities_specific_t; #else -typedef usbtmc_response_capabilities_t usbtmc_capabilities_specific_t; + typedef usbtmc_response_capabilities_t usbtmc_capabilities_specific_t; #endif -typedef struct { - volatile usbtmcd_state_enum state; - - uint8_t itf_id; - uint8_t rhport; - uint8_t ep_bulk_in; - uint8_t ep_bulk_out; - uint8_t ep_int_in; - uint32_t ep_bulk_in_wMaxPacketSize; - uint32_t ep_bulk_out_wMaxPacketSize; - // IN buffer is only used for first packet, not the remainder - // in order to deal with prepending header - CFG_TUSB_MEM_ALIGN uint8_t ep_bulk_in_buf[USBTMCD_BUFFER_SIZE]; - // OUT buffer receives one packet at a time - CFG_TUSB_MEM_ALIGN uint8_t ep_bulk_out_buf[USBTMCD_BUFFER_SIZE]; - // Buffer int msg to ensure alignment and placement correctness - CFG_TUSB_MEM_ALIGN uint8_t ep_int_in_buf[CFG_TUD_USBTMC_INT_EP_SIZE]; - - uint32_t transfer_size_remaining; // also used for requested length for bulk IN. - uint32_t - transfer_size_sent; // To keep track of data bytes that have been queued in FIFO (not header bytes) - - uint8_t lastBulkOutTag; // used for aborts (mostly) - uint8_t lastBulkInTag; // used for aborts (mostly) - - uint8_t const *devInBuffer; // pointer to application-layer used for transmissions - - usbtmc_capabilities_specific_t const *capabilities; + +typedef struct +{ + volatile usbtmcd_state_enum state; + + uint8_t itf_id; + uint8_t rhport; + uint8_t ep_bulk_in; + uint8_t ep_bulk_out; + uint8_t ep_int_in; + uint32_t ep_bulk_in_wMaxPacketSize; + uint32_t ep_bulk_out_wMaxPacketSize; + // IN buffer is only used for first packet, not the remainder + // in order to deal with prepending header + CFG_TUSB_MEM_ALIGN uint8_t ep_bulk_in_buf[USBTMCD_BUFFER_SIZE]; + // OUT buffer receives one packet at a time + CFG_TUSB_MEM_ALIGN uint8_t ep_bulk_out_buf[USBTMCD_BUFFER_SIZE]; + // Buffer int msg to ensure alignment and placement correctness + CFG_TUSB_MEM_ALIGN uint8_t ep_int_in_buf[CFG_TUD_USBTMC_INT_EP_SIZE]; + + uint32_t transfer_size_remaining; // also used for requested length for bulk IN. + uint32_t transfer_size_sent; // To keep track of data bytes that have been queued in FIFO (not header bytes) + + uint8_t lastBulkOutTag; // used for aborts (mostly) + uint8_t lastBulkInTag; // used for aborts (mostly) + + uint8_t const * devInBuffer; // pointer to application-layer used for transmissions + + usbtmc_capabilities_specific_t const * capabilities; } usbtmc_interface_state_t; -CFG_TUD_MEM_SECTION tu_static usbtmc_interface_state_t usbtmc_state = { +CFG_TUD_MEM_SECTION tu_static usbtmc_interface_state_t usbtmc_state = +{ .itf_id = 0xFF, }; // We need all headers to fit in a single packet in this implementation, 32 bytes will fit all standard USBTMC headers -TU_VERIFY_STATIC(USBTMCD_BUFFER_SIZE >= 32u, "USBTMC dev buffer size too small"); +TU_VERIFY_STATIC(USBTMCD_BUFFER_SIZE >= 32u,"USBTMC dev buffer size too small"); static bool handle_devMsgOutStart(uint8_t rhport, void *data, size_t len); static bool handle_devMsgOut(uint8_t rhport, void *data, size_t len, size_t packetLen); @@ -168,27 +173,24 @@ static OSAL_MUTEX_DEF(usbtmcLockBuffer); osal_mutex_t usbtmcLock; // Our own private lock, mostly for the state variable. -#define criticalEnter() \ - do { \ - (void)osal_mutex_lock(usbtmcLock, OSAL_TIMEOUT_WAIT_FOREVER); \ - } while (0) -#define criticalLeave() \ - do { \ - (void)osal_mutex_unlock(usbtmcLock); \ - } while (0) +#define criticalEnter() do { (void) osal_mutex_lock(usbtmcLock,OSAL_TIMEOUT_WAIT_FOREVER); } while (0) +#define criticalLeave() do { (void) osal_mutex_unlock(usbtmcLock); } while (0) bool atomicChangeState(usbtmcd_state_enum expectedState, usbtmcd_state_enum newState) { - bool ret = true; - criticalEnter(); - usbtmcd_state_enum oldState = usbtmc_state.state; - if (oldState == expectedState) { - usbtmc_state.state = newState; - } else { - ret = false; - } - criticalLeave(); - return ret; + bool ret = true; + criticalEnter(); + usbtmcd_state_enum oldState = usbtmc_state.state; + if (oldState == expectedState) + { + usbtmc_state.state = newState; + } + else + { + ret = false; + } + criticalLeave(); + return ret; } // called from app @@ -198,174 +200,179 @@ bool atomicChangeState(usbtmcd_state_enum expectedState, usbtmcd_state_enum newS // We can't just send the whole thing at once because we need to concatanate the // header with the data. -bool tud_usbtmc_transmit_dev_msg_data(const void *data, size_t len, bool endOfMessage, - bool usingTermChar) +bool tud_usbtmc_transmit_dev_msg_data( + const void * data, size_t len, + bool endOfMessage, + bool usingTermChar) { - const unsigned int txBufLen = sizeof(usbtmc_state.ep_bulk_in_buf); + const unsigned int txBufLen = sizeof(usbtmc_state.ep_bulk_in_buf); #ifndef NDEBUG - TU_ASSERT(len > 0u); - TU_ASSERT(len <= usbtmc_state.transfer_size_remaining); - TU_ASSERT(usbtmc_state.transfer_size_sent == 0u); - if (usingTermChar) { - TU_ASSERT(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar); - TU_ASSERT(termCharRequested); - TU_ASSERT(((uint8_t const *)data)[len - 1u] == termChar); - } + TU_ASSERT(len > 0u); + TU_ASSERT(len <= usbtmc_state.transfer_size_remaining); + TU_ASSERT(usbtmc_state.transfer_size_sent == 0u); + if(usingTermChar) + { + TU_ASSERT(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar); + TU_ASSERT(termCharRequested); + TU_ASSERT(((uint8_t const*)data)[len-1u] == termChar); + } #endif - TU_VERIFY(usbtmc_state.state == STATE_TX_REQUESTED); - usbtmc_msg_dev_dep_msg_in_header_t *hdr = - (usbtmc_msg_dev_dep_msg_in_header_t *)usbtmc_state.ep_bulk_in_buf; - tu_varclr(hdr); - hdr->header.MsgID = USBTMC_MSGID_DEV_DEP_MSG_IN; - hdr->header.bTag = usbtmc_state.lastBulkInTag; - hdr->header.bTagInverse = (uint8_t) ~(usbtmc_state.lastBulkInTag); - hdr->TransferSize = len; - hdr->bmTransferAttributes.EOM = endOfMessage; - hdr->bmTransferAttributes.UsingTermChar = usingTermChar; - - // Copy in the header - const size_t headerLen = sizeof(*hdr); - const size_t dataLen = ((headerLen + hdr->TransferSize) <= txBufLen) ? len : - (txBufLen - headerLen); - const size_t packetLen = headerLen + dataLen; - - memcpy((uint8_t *)(usbtmc_state.ep_bulk_in_buf) + headerLen, data, dataLen); - usbtmc_state.transfer_size_remaining = len - dataLen; - usbtmc_state.transfer_size_sent = dataLen; - usbtmc_state.devInBuffer = (uint8_t const *)data + (dataLen); - - bool stateChanged = atomicChangeState( - STATE_TX_REQUESTED, (packetLen >= txBufLen) ? STATE_TX_INITIATED : STATE_TX_SHORTED); - TU_VERIFY(stateChanged); - TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_bulk_in, - usbtmc_state.ep_bulk_in_buf, (uint16_t)packetLen)); - return true; + TU_VERIFY(usbtmc_state.state == STATE_TX_REQUESTED); + usbtmc_msg_dev_dep_msg_in_header_t *hdr = (usbtmc_msg_dev_dep_msg_in_header_t*)usbtmc_state.ep_bulk_in_buf; + tu_varclr(hdr); + hdr->header.MsgID = USBTMC_MSGID_DEV_DEP_MSG_IN; + hdr->header.bTag = usbtmc_state.lastBulkInTag; + hdr->header.bTagInverse = (uint8_t)~(usbtmc_state.lastBulkInTag); + hdr->TransferSize = len; + hdr->bmTransferAttributes.EOM = endOfMessage; + hdr->bmTransferAttributes.UsingTermChar = usingTermChar; + + // Copy in the header + const size_t headerLen = sizeof(*hdr); + const size_t dataLen = ((headerLen + hdr->TransferSize) <= txBufLen) ? + len : (txBufLen - headerLen); + const size_t packetLen = headerLen + dataLen; + + memcpy((uint8_t*)(usbtmc_state.ep_bulk_in_buf) + headerLen, data, dataLen); + usbtmc_state.transfer_size_remaining = len - dataLen; + usbtmc_state.transfer_size_sent = dataLen; + usbtmc_state.devInBuffer = (uint8_t const*) data + (dataLen); + + bool stateChanged = + atomicChangeState(STATE_TX_REQUESTED, (packetLen >= txBufLen) ? STATE_TX_INITIATED : STATE_TX_SHORTED); + TU_VERIFY(stateChanged); + TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf, (uint16_t)packetLen)); + return true; } -bool tud_usbtmc_transmit_notification_data(const void *data, size_t len) +bool tud_usbtmc_transmit_notification_data(const void * data, size_t len) { #ifndef NDEBUG - TU_ASSERT(len > 0); - TU_ASSERT(usbtmc_state.ep_int_in != 0); + TU_ASSERT(len > 0); + TU_ASSERT(usbtmc_state.ep_int_in != 0); #endif - TU_VERIFY(usbd_edpt_busy(usbtmc_state.rhport, usbtmc_state.ep_int_in)); + TU_VERIFY(usbd_edpt_busy(usbtmc_state.rhport, usbtmc_state.ep_int_in)); - TU_VERIFY(tu_memcpy_s(usbtmc_state.ep_int_in_buf, sizeof(usbtmc_state.ep_int_in_buf), data, - len) == 0); - TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_int_in, - usbtmc_state.ep_int_in_buf, (uint16_t)len)); - return true; + TU_VERIFY(tu_memcpy_s(usbtmc_state.ep_int_in_buf, sizeof(usbtmc_state.ep_int_in_buf), data, len) == 0); + TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_int_in, usbtmc_state.ep_int_in_buf, (uint16_t)len)); + return true; } void usbtmcd_init_cb(void) { - usbtmc_state.capabilities = tud_usbtmc_get_capabilities_cb(); + usbtmc_state.capabilities = tud_usbtmc_get_capabilities_cb(); #ifndef NDEBUG -#if CFG_TUD_USBTMC_ENABLE_488 - if (usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger) { - TU_ASSERT(&tud_usbtmc_msg_trigger_cb != NULL, ); - } - // Per USB488 spec: table 8 - TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.listenOnly, ); - TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.talkOnly, ); -#endif - if (usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse) { - TU_ASSERT(&tud_usbtmc_indicator_pulse_cb != NULL, ); - } +# if CFG_TUD_USBTMC_ENABLE_488 + if (usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger) { + TU_ASSERT(&tud_usbtmc_msg_trigger_cb != NULL,); + } + // Per USB488 spec: table 8 + TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.listenOnly,); + TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.talkOnly,); +# endif + if (usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse) { + TU_ASSERT(&tud_usbtmc_indicator_pulse_cb != NULL,); + } #endif - usbtmcLock = osal_mutex_create(&usbtmcLockBuffer); + usbtmcLock = osal_mutex_create(&usbtmcLockBuffer); } -bool usbtmcd_deinit(void) -{ -#if OSAL_MUTEX_REQUIRED - osal_mutex_delete(usbtmcLock); -#endif - return true; +bool usbtmcd_deinit(void) { + #if OSAL_MUTEX_REQUIRED + osal_mutex_delete(usbtmcLock); + #endif + return true; } -uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) +uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { - (void)rhport; + (void)rhport; - uint16_t drv_len; - uint8_t const *p_desc; - uint8_t found_endpoints = 0; + uint16_t drv_len; + uint8_t const * p_desc; + uint8_t found_endpoints = 0; - TU_VERIFY(itf_desc->bInterfaceClass == TUD_USBTMC_APP_CLASS, 0); - TU_VERIFY(itf_desc->bInterfaceSubClass == TUD_USBTMC_APP_SUBCLASS, 0); + TU_VERIFY(itf_desc->bInterfaceClass == TUD_USBTMC_APP_CLASS , 0); + TU_VERIFY(itf_desc->bInterfaceSubClass == TUD_USBTMC_APP_SUBCLASS, 0); #ifndef NDEBUG - // Only 2 or 3 endpoints are allowed for USBTMC. - TU_ASSERT((itf_desc->bNumEndpoints == 2) || (itf_desc->bNumEndpoints == 3), 0); + // Only 2 or 3 endpoints are allowed for USBTMC. + TU_ASSERT((itf_desc->bNumEndpoints == 2) || (itf_desc->bNumEndpoints ==3), 0); #endif - TU_ASSERT(usbtmc_state.state == STATE_CLOSED, 0); - - // Interface - drv_len = 0u; - p_desc = (uint8_t const *)itf_desc; - - usbtmc_state.itf_id = itf_desc->bInterfaceNumber; - usbtmc_state.rhport = rhport; - - while (found_endpoints < itf_desc->bNumEndpoints && drv_len <= max_len) { - if (TUSB_DESC_ENDPOINT == p_desc[DESC_OFFSET_TYPE]) { - tusb_desc_endpoint_t const *ep_desc = (tusb_desc_endpoint_t const *)p_desc; - switch (ep_desc->bmAttributes.xfer) { - case TUSB_XFER_BULK: - // Ensure buffer is an exact multiple of the maxPacketSize - TU_ASSERT((USBTMCD_BUFFER_SIZE % tu_edpt_packet_size(ep_desc)) == 0, 0); - if (tu_edpt_dir(ep_desc->bEndpointAddress) == TUSB_DIR_IN) { - usbtmc_state.ep_bulk_in = ep_desc->bEndpointAddress; - usbtmc_state.ep_bulk_in_wMaxPacketSize = tu_edpt_packet_size(ep_desc); - } else { - usbtmc_state.ep_bulk_out = ep_desc->bEndpointAddress; - usbtmc_state.ep_bulk_out_wMaxPacketSize = tu_edpt_packet_size(ep_desc); - } - - break; - case TUSB_XFER_INTERRUPT: + TU_ASSERT(usbtmc_state.state == STATE_CLOSED, 0); + + // Interface + drv_len = 0u; + p_desc = (uint8_t const *) itf_desc; + + usbtmc_state.itf_id = itf_desc->bInterfaceNumber; + usbtmc_state.rhport = rhport; + + while (found_endpoints < itf_desc->bNumEndpoints && drv_len <= max_len) + { + if ( TUSB_DESC_ENDPOINT == p_desc[DESC_OFFSET_TYPE]) + { + tusb_desc_endpoint_t const *ep_desc = (tusb_desc_endpoint_t const *)p_desc; + switch(ep_desc->bmAttributes.xfer) { + case TUSB_XFER_BULK: + // Ensure buffer is an exact multiple of the maxPacketSize + TU_ASSERT((USBTMCD_BUFFER_SIZE % tu_edpt_packet_size(ep_desc)) == 0, 0); + if (tu_edpt_dir(ep_desc->bEndpointAddress) == TUSB_DIR_IN) + { + usbtmc_state.ep_bulk_in = ep_desc->bEndpointAddress; + usbtmc_state.ep_bulk_in_wMaxPacketSize = tu_edpt_packet_size(ep_desc); + } else { + usbtmc_state.ep_bulk_out = ep_desc->bEndpointAddress; + usbtmc_state.ep_bulk_out_wMaxPacketSize = tu_edpt_packet_size(ep_desc); + } + + break; + case TUSB_XFER_INTERRUPT: #ifndef NDEBUG - TU_ASSERT(tu_edpt_dir(ep_desc->bEndpointAddress) == TUSB_DIR_IN, 0); - TU_ASSERT(usbtmc_state.ep_int_in == 0, 0); + TU_ASSERT(tu_edpt_dir(ep_desc->bEndpointAddress) == TUSB_DIR_IN, 0); + TU_ASSERT(usbtmc_state.ep_int_in == 0, 0); #endif - usbtmc_state.ep_int_in = ep_desc->bEndpointAddress; - break; - default: - TU_ASSERT(false, 0); - } - TU_ASSERT(usbd_edpt_open(rhport, ep_desc), 0); - found_endpoints++; - } - - drv_len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); + usbtmc_state.ep_int_in = ep_desc->bEndpointAddress; + break; + default: + TU_ASSERT(false, 0); + } + TU_ASSERT( usbd_edpt_open(rhport, ep_desc), 0); + found_endpoints++; } - // bulk endpoints are required, but interrupt IN is optional + drv_len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); + } + + // bulk endpoints are required, but interrupt IN is optional #ifndef NDEBUG - TU_ASSERT(usbtmc_state.ep_bulk_in != 0, 0); - TU_ASSERT(usbtmc_state.ep_bulk_out != 0, 0); - if (itf_desc->bNumEndpoints == 2) { - TU_ASSERT(usbtmc_state.ep_int_in == 0, 0); - } else if (itf_desc->bNumEndpoints == 3) { - TU_ASSERT(usbtmc_state.ep_int_in != 0, 0); - } + TU_ASSERT(usbtmc_state.ep_bulk_in != 0, 0); + TU_ASSERT(usbtmc_state.ep_bulk_out != 0, 0); + if (itf_desc->bNumEndpoints == 2) + { + TU_ASSERT(usbtmc_state.ep_int_in == 0, 0); + } + else if (itf_desc->bNumEndpoints == 3) + { + TU_ASSERT(usbtmc_state.ep_int_in != 0, 0); + } #if (CFG_TUD_USBTMC_ENABLE_488) - if (usbtmc_state.capabilities->bmIntfcCapabilities488.is488_2 || - usbtmc_state.capabilities->bmDevCapabilities488.SR1) { - TU_ASSERT(usbtmc_state.ep_int_in != 0, 0); - } + if(usbtmc_state.capabilities->bmIntfcCapabilities488.is488_2 || + usbtmc_state.capabilities->bmDevCapabilities488.SR1) + { + TU_ASSERT(usbtmc_state.ep_int_in != 0, 0); + } #endif #endif - atomicChangeState(STATE_CLOSED, STATE_NAK); - tud_usbtmc_open_cb(itf_desc->iInterface); + atomicChangeState(STATE_CLOSED, STATE_NAK); + tud_usbtmc_open_cb(itf_desc->iInterface); - return drv_len; + return drv_len; } // Tell USBTMC class to set its bulk-in EP to ACK so that it can // receive USBTMC commands. @@ -375,470 +382,508 @@ uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const *itf_desc, // state. bool tud_usbtmc_start_bus_read(void) { - usbtmcd_state_enum oldState = usbtmc_state.state; - switch (oldState) { - // These may transition to IDLE - case STATE_NAK: - case STATE_ABORTING_BULK_IN_ABORTED: - TU_VERIFY(atomicChangeState(oldState, STATE_IDLE)); - break; - // When receiving, let it remain receiving - case STATE_RCV: - break; - default: - return false; - } - TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_bulk_out, - usbtmc_state.ep_bulk_out_buf, - (uint16_t)usbtmc_state.ep_bulk_out_wMaxPacketSize)); - return true; + usbtmcd_state_enum oldState = usbtmc_state.state; + switch(oldState) + { + // These may transition to IDLE + case STATE_NAK: + case STATE_ABORTING_BULK_IN_ABORTED: + TU_VERIFY(atomicChangeState(oldState, STATE_IDLE)); + break; + // When receiving, let it remain receiving + case STATE_RCV: + break; + default: + return false; + } + TU_VERIFY(usbd_edpt_xfer(usbtmc_state.rhport, usbtmc_state.ep_bulk_out, usbtmc_state.ep_bulk_out_buf, (uint16_t)usbtmc_state.ep_bulk_out_wMaxPacketSize)); + return true; } void usbtmcd_reset_cb(uint8_t rhport) { - (void)rhport; - usbtmc_capabilities_specific_t const *capabilities = tud_usbtmc_get_capabilities_cb(); - - criticalEnter(); - tu_varclr(&usbtmc_state); - usbtmc_state.capabilities = capabilities; - usbtmc_state.itf_id = 0xFFu; - criticalLeave(); + (void)rhport; + usbtmc_capabilities_specific_t const * capabilities = tud_usbtmc_get_capabilities_cb(); + + criticalEnter(); + tu_varclr(&usbtmc_state); + usbtmc_state.capabilities = capabilities; + usbtmc_state.itf_id = 0xFFu; + criticalLeave(); } static bool handle_devMsgOutStart(uint8_t rhport, void *data, size_t len) { - (void)rhport; - // return true upon failure, as we can assume error is being handled elsewhere. - TU_VERIFY(atomicChangeState(STATE_IDLE, STATE_RCV), true); - usbtmc_state.transfer_size_sent = 0u; - - // must be a header, should have been confirmed before calling here. - usbtmc_msg_request_dev_dep_out *msg = (usbtmc_msg_request_dev_dep_out *)data; - usbtmc_state.transfer_size_remaining = msg->TransferSize; - TU_VERIFY(tud_usbtmc_msgBulkOut_start_cb(msg)); - - TU_VERIFY(handle_devMsgOut(rhport, (uint8_t *)data + sizeof(*msg), len - sizeof(*msg), len)); - usbtmc_state.lastBulkOutTag = msg->header.bTag; - return true; + (void)rhport; + // return true upon failure, as we can assume error is being handled elsewhere. + TU_VERIFY(atomicChangeState(STATE_IDLE, STATE_RCV), true); + usbtmc_state.transfer_size_sent = 0u; + + // must be a header, should have been confirmed before calling here. + usbtmc_msg_request_dev_dep_out *msg = (usbtmc_msg_request_dev_dep_out*)data; + usbtmc_state.transfer_size_remaining = msg->TransferSize; + TU_VERIFY(tud_usbtmc_msgBulkOut_start_cb(msg)); + + TU_VERIFY(handle_devMsgOut(rhport, (uint8_t*)data + sizeof(*msg), len - sizeof(*msg), len)); + usbtmc_state.lastBulkOutTag = msg->header.bTag; + return true; } static bool handle_devMsgOut(uint8_t rhport, void *data, size_t len, size_t packetLen) { - (void)rhport; - // return true upon failure, as we can assume error is being handled elsewhere. - TU_VERIFY(usbtmc_state.state == STATE_RCV, true); + (void)rhport; + // return true upon failure, as we can assume error is being handled elsewhere. + TU_VERIFY(usbtmc_state.state == STATE_RCV,true); - bool shortPacket = (packetLen < usbtmc_state.ep_bulk_out_wMaxPacketSize); + bool shortPacket = (packetLen < usbtmc_state.ep_bulk_out_wMaxPacketSize); - // Packet is to be considered complete when we get enough data or at a short packet. - bool atEnd = false; - if (len >= usbtmc_state.transfer_size_remaining || shortPacket) { - atEnd = true; - TU_VERIFY(atomicChangeState(STATE_RCV, STATE_NAK)); - } + // Packet is to be considered complete when we get enough data or at a short packet. + bool atEnd = false; + if(len >= usbtmc_state.transfer_size_remaining || shortPacket) + { + atEnd = true; + TU_VERIFY(atomicChangeState(STATE_RCV, STATE_NAK)); + } - len = tu_min32(len, usbtmc_state.transfer_size_remaining); + len = tu_min32(len, usbtmc_state.transfer_size_remaining); - usbtmc_state.transfer_size_remaining -= len; - usbtmc_state.transfer_size_sent += len; + usbtmc_state.transfer_size_remaining -= len; + usbtmc_state.transfer_size_sent += len; - // App may (should?) call the wait_for_bus() command at this point - if (!tud_usbtmc_msg_data_cb(data, len, atEnd)) { - // TODO: Go to an error state upon failure other than just stalling the EP? - return false; - } + // App may (should?) call the wait_for_bus() command at this point + if(!tud_usbtmc_msg_data_cb(data, len, atEnd)) + { + // TODO: Go to an error state upon failure other than just stalling the EP? + return false; + } - return true; + + return true; } static bool handle_devMsgIn(void *data, size_t len) { - TU_VERIFY(len == sizeof(usbtmc_msg_request_dev_dep_in)); - usbtmc_msg_request_dev_dep_in *msg = (usbtmc_msg_request_dev_dep_in *)data; - bool stateChanged = atomicChangeState(STATE_IDLE, STATE_TX_REQUESTED); - TU_VERIFY(stateChanged); - usbtmc_state.lastBulkInTag = msg->header.bTag; - usbtmc_state.transfer_size_remaining = msg->TransferSize; - usbtmc_state.transfer_size_sent = 0u; + TU_VERIFY(len == sizeof(usbtmc_msg_request_dev_dep_in)); + usbtmc_msg_request_dev_dep_in *msg = (usbtmc_msg_request_dev_dep_in*)data; + bool stateChanged = atomicChangeState(STATE_IDLE, STATE_TX_REQUESTED); + TU_VERIFY(stateChanged); + usbtmc_state.lastBulkInTag = msg->header.bTag; + usbtmc_state.transfer_size_remaining = msg->TransferSize; + usbtmc_state.transfer_size_sent = 0u; - termCharRequested = msg->bmTransferAttributes.TermCharEnabled; + termCharRequested = msg->bmTransferAttributes.TermCharEnabled; #ifndef NDEBUG - termChar = msg->TermChar; + termChar = msg->TermChar; #endif - if (termCharRequested) - TU_VERIFY(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar); + if(termCharRequested) + TU_VERIFY(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar); - TU_VERIFY(tud_usbtmc_msgBulkIn_request_cb(msg)); - return true; + TU_VERIFY(tud_usbtmc_msgBulkIn_request_cb(msg)); + return true; } bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - TU_VERIFY(result == XFER_RESULT_SUCCESS); - //uart_tx_str_sync("TMC XFER CB\r\n"); - if (usbtmc_state.state == STATE_CLEARING) { - return true; /* I think we can ignore everything here */ - } + TU_VERIFY(result == XFER_RESULT_SUCCESS); + //uart_tx_str_sync("TMC XFER CB\r\n"); + if(usbtmc_state.state == STATE_CLEARING) { + return true; /* I think we can ignore everything here */ + } + + if(ep_addr == usbtmc_state.ep_bulk_out) + { + usbtmc_msg_generic_t *msg = NULL; + + switch(usbtmc_state.state) + { + case STATE_IDLE: + { + TU_VERIFY(xferred_bytes >= sizeof(usbtmc_msg_generic_t)); + msg = (usbtmc_msg_generic_t*)(usbtmc_state.ep_bulk_out_buf); + uint8_t invInvTag = (uint8_t)~(msg->header.bTagInverse); + TU_VERIFY(msg->header.bTag == invInvTag); + TU_VERIFY(msg->header.bTag != 0x00); + + switch(msg->header.MsgID) { + case USBTMC_MSGID_DEV_DEP_MSG_OUT: + if(!handle_devMsgOutStart(rhport, msg, xferred_bytes)) + { + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + return false; + } + break; - if (ep_addr == usbtmc_state.ep_bulk_out) { - usbtmc_msg_generic_t *msg = NULL; - - switch (usbtmc_state.state) { - case STATE_IDLE: { - TU_VERIFY(xferred_bytes >= sizeof(usbtmc_msg_generic_t)); - msg = (usbtmc_msg_generic_t *)(usbtmc_state.ep_bulk_out_buf); - uint8_t invInvTag = (uint8_t) ~(msg->header.bTagInverse); - TU_VERIFY(msg->header.bTag == invInvTag); - TU_VERIFY(msg->header.bTag != 0x00); - - switch (msg->header.MsgID) { - case USBTMC_MSGID_DEV_DEP_MSG_OUT: - if (!handle_devMsgOutStart(rhport, msg, xferred_bytes)) { - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - return false; - } - break; - - case USBTMC_MSGID_DEV_DEP_MSG_IN: - TU_VERIFY(handle_devMsgIn(msg, xferred_bytes)); - break; + case USBTMC_MSGID_DEV_DEP_MSG_IN: + TU_VERIFY(handle_devMsgIn(msg, xferred_bytes)); + break; #if (CFG_TUD_USBTMC_ENABLE_488) - case USBTMC_MSGID_USB488_TRIGGER: - // Spec says we halt the EP if we didn't declare we support it. - TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger); - TU_VERIFY(tud_usbtmc_msg_trigger_cb(msg)); + case USBTMC_MSGID_USB488_TRIGGER: + // Spec says we halt the EP if we didn't declare we support it. + TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger); + TU_VERIFY(tud_usbtmc_msg_trigger_cb(msg)); - break; + break; #endif - case USBTMC_MSGID_VENDOR_SPECIFIC_MSG_OUT: - case USBTMC_MSGID_VENDOR_SPECIFIC_IN: - default: - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - return false; - } - return true; - } - case STATE_RCV: - if (!handle_devMsgOut(rhport, usbtmc_state.ep_bulk_out_buf, xferred_bytes, - xferred_bytes)) { - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - return false; - } - return true; - - case STATE_ABORTING_BULK_OUT: - // Should be stalled by now, shouldn't have received a packet. - return false; - - case STATE_TX_REQUESTED: - case STATE_TX_INITIATED: - case STATE_ABORTING_BULK_IN: - case STATE_ABORTING_BULK_IN_SHORTED: - case STATE_ABORTING_BULK_IN_ABORTED: + case USBTMC_MSGID_VENDOR_SPECIFIC_MSG_OUT: + case USBTMC_MSGID_VENDOR_SPECIFIC_IN: default: - return false; + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + return false; } - } else if (ep_addr == usbtmc_state.ep_bulk_in) { - switch (usbtmc_state.state) { - case STATE_TX_SHORTED: - TU_VERIFY(atomicChangeState(STATE_TX_SHORTED, STATE_NAK)); - TU_VERIFY(tud_usbtmc_msgBulkIn_complete_cb()); - break; - - case STATE_TX_INITIATED: - if (usbtmc_state.transfer_size_remaining >= sizeof(usbtmc_state.ep_bulk_in_buf)) { - // Copy buffer to ensure alignment correctness - memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, - sizeof(usbtmc_state.ep_bulk_in_buf)); - TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, - usbtmc_state.ep_bulk_in_buf, - sizeof(usbtmc_state.ep_bulk_in_buf))); - usbtmc_state.devInBuffer += sizeof(usbtmc_state.ep_bulk_in_buf); - usbtmc_state.transfer_size_remaining -= sizeof(usbtmc_state.ep_bulk_in_buf); - usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.ep_bulk_in_buf); - } else // last packet - { - size_t packetLen = usbtmc_state.transfer_size_remaining; - memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, - usbtmc_state.transfer_size_remaining); - usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.transfer_size_remaining); - usbtmc_state.transfer_size_remaining = 0; - usbtmc_state.devInBuffer = NULL; - TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, - usbtmc_state.ep_bulk_in_buf, (uint16_t)packetLen)); - if (((packetLen % usbtmc_state.ep_bulk_in_wMaxPacketSize) != 0) || - (packetLen == 0)) { - usbtmc_state.state = STATE_TX_SHORTED; - } - } - return true; - - case STATE_ABORTING_BULK_IN: - // need to send short packet (ZLP?) - TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf, - (uint16_t)0u)); - usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED; - return true; - - case STATE_ABORTING_BULK_IN_SHORTED: - /* Done. :)*/ - usbtmc_state.state = STATE_ABORTING_BULK_IN_ABORTED; - return true; + return true; + } + case STATE_RCV: + if(!handle_devMsgOut(rhport, usbtmc_state.ep_bulk_out_buf, xferred_bytes, xferred_bytes)) + { + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + return false; + } + return true; - default: - TU_ASSERT(false); - } - } else if (ep_addr == usbtmc_state.ep_int_in) { - if (tud_usbtmc_notification_complete_cb) { - TU_VERIFY(tud_usbtmc_notification_complete_cb()); + case STATE_ABORTING_BULK_OUT: + // Should be stalled by now, shouldn't have received a packet. + return false; + + case STATE_TX_REQUESTED: + case STATE_TX_INITIATED: + case STATE_ABORTING_BULK_IN: + case STATE_ABORTING_BULK_IN_SHORTED: + case STATE_ABORTING_BULK_IN_ABORTED: + default: + return false; + } + } + else if(ep_addr == usbtmc_state.ep_bulk_in) + { + switch(usbtmc_state.state) { + case STATE_TX_SHORTED: + TU_VERIFY(atomicChangeState(STATE_TX_SHORTED, STATE_NAK)); + TU_VERIFY(tud_usbtmc_msgBulkIn_complete_cb()); + break; + + case STATE_TX_INITIATED: + if(usbtmc_state.transfer_size_remaining >= sizeof(usbtmc_state.ep_bulk_in_buf)) + { + // Copy buffer to ensure alignment correctness + memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, sizeof(usbtmc_state.ep_bulk_in_buf)); + TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, + usbtmc_state.ep_bulk_in_buf, sizeof(usbtmc_state.ep_bulk_in_buf))); + usbtmc_state.devInBuffer += sizeof(usbtmc_state.ep_bulk_in_buf); + usbtmc_state.transfer_size_remaining -= sizeof(usbtmc_state.ep_bulk_in_buf); + usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.ep_bulk_in_buf); + } + else // last packet + { + size_t packetLen = usbtmc_state.transfer_size_remaining; + memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, usbtmc_state.transfer_size_remaining); + usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.transfer_size_remaining); + usbtmc_state.transfer_size_remaining = 0; + usbtmc_state.devInBuffer = NULL; + TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf, (uint16_t)packetLen) ); + if(((packetLen % usbtmc_state.ep_bulk_in_wMaxPacketSize) != 0) || (packetLen == 0 )) + { + usbtmc_state.state = STATE_TX_SHORTED; } - return true; + } + return true; + + case STATE_ABORTING_BULK_IN: + // need to send short packet (ZLP?) + TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,(uint16_t)0u)); + usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED; + return true; + + case STATE_ABORTING_BULK_IN_SHORTED: + /* Done. :)*/ + usbtmc_state.state = STATE_ABORTING_BULK_IN_ABORTED; + return true; + + default: + TU_ASSERT(false); } - return false; + } + else if (ep_addr == usbtmc_state.ep_int_in) { + if (tud_usbtmc_notification_complete_cb) { + TU_VERIFY(tud_usbtmc_notification_complete_cb()); + } + return true; + } + return false; } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) +bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { - // nothing to do with DATA and ACK stage - if (stage != CONTROL_STAGE_SETUP) - return true; + // nothing to do with DATA and ACK stage + if ( stage != CONTROL_STAGE_SETUP ) return true; - uint8_t tmcStatusCode = USBTMC_STATUS_FAILED; + uint8_t tmcStatusCode = USBTMC_STATUS_FAILED; #if (CFG_TUD_USBTMC_ENABLE_488) - uint8_t bTag; + uint8_t bTag; #endif - if ((request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) && - (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_ENDPOINT) && - (request->bRequest == TUSB_REQ_CLEAR_FEATURE) && - (request->wValue == TUSB_REQ_FEATURE_EDPT_HALT)) { - uint32_t ep_addr = (request->wIndex); - - // At this point, a transfer MAY be in progress. Based on USB spec, when clearing bulk EP HALT, - // the EP transfer buffer needs to be cleared and DTOG needs to be reset, even if - // the EP is not halted. The only USBD API interface to do this is to stall and then un-stall the EP. - if (ep_addr == usbtmc_state.ep_bulk_out) { - criticalEnter(); - usbd_edpt_stall(rhport, (uint8_t)ep_addr); - usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); - usbtmc_state.state = STATE_NAK; // USBD core has placed EP in NAK state for us - criticalLeave(); - tud_usbtmc_bulkOut_clearFeature_cb(); - } else if (ep_addr == usbtmc_state.ep_bulk_in) { - usbd_edpt_stall(rhport, (uint8_t)ep_addr); - usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); - tud_usbtmc_bulkIn_clearFeature_cb(); - } else if ((usbtmc_state.ep_int_in != 0) && (ep_addr == usbtmc_state.ep_int_in)) { - // Clearing interrupt in EP - usbd_edpt_stall(rhport, (uint8_t)ep_addr); - usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); - } else { - return false; - } - return true; + if((request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) && + (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_ENDPOINT) && + (request->bRequest == TUSB_REQ_CLEAR_FEATURE) && + (request->wValue == TUSB_REQ_FEATURE_EDPT_HALT)) + { + uint32_t ep_addr = (request->wIndex); + + // At this point, a transfer MAY be in progress. Based on USB spec, when clearing bulk EP HALT, + // the EP transfer buffer needs to be cleared and DTOG needs to be reset, even if + // the EP is not halted. The only USBD API interface to do this is to stall and then un-stall the EP. + if(ep_addr == usbtmc_state.ep_bulk_out) + { + criticalEnter(); + usbd_edpt_stall(rhport, (uint8_t)ep_addr); + usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); + usbtmc_state.state = STATE_NAK; // USBD core has placed EP in NAK state for us + criticalLeave(); + tud_usbtmc_bulkOut_clearFeature_cb(); } - - // Otherwise, we only handle class requests. - if (request->bmRequestType_bit.type != TUSB_REQ_TYPE_CLASS) { - return false; + else if (ep_addr == usbtmc_state.ep_bulk_in) + { + usbd_edpt_stall(rhport, (uint8_t)ep_addr); + usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); + tud_usbtmc_bulkIn_clearFeature_cb(); } - - // Verification that we own the interface is unneeded since it's been routed to us specifically. - - switch (request->bRequest) { - // USBTMC required requests - case USBTMC_bREQUEST_INITIATE_ABORT_BULK_OUT: { - usbtmc_initiate_abort_rsp_t rsp = { - .bTag = usbtmc_state.lastBulkOutTag, - }; - TU_VERIFY(request->bmRequestType == 0xA2); // in,class,interface - TU_VERIFY(request->wLength == sizeof(rsp)); - TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_out); - - // wValue is the requested bTag to abort - if (usbtmc_state.state != STATE_RCV) { - rsp.USBTMC_status = USBTMC_STATUS_FAILED; - } else if (usbtmc_state.lastBulkOutTag == (request->wValue & 0x7Fu)) { - rsp.USBTMC_status = USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS; - } else { - rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; - // Check if we've queued a short packet - criticalEnter(); - usbtmc_state.state = STATE_ABORTING_BULK_OUT; - criticalLeave(); - TU_VERIFY(tud_usbtmc_initiate_abort_bulk_out_cb(&(rsp.USBTMC_status))); - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - } - TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); - return true; + else if ((usbtmc_state.ep_int_in != 0) && (ep_addr == usbtmc_state.ep_int_in)) + { + // Clearing interrupt in EP + usbd_edpt_stall(rhport, (uint8_t)ep_addr); + usbd_edpt_clear_stall(rhport, (uint8_t)ep_addr); } + else + { + return false; + } + return true; + } - case USBTMC_bREQUEST_CHECK_ABORT_BULK_OUT_STATUS: { - usbtmc_check_abort_bulk_rsp_t rsp = { .USBTMC_status = USBTMC_STATUS_SUCCESS, - .NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent }; - TU_VERIFY(request->bmRequestType == 0xA2); // in,class,EP - TU_VERIFY(request->wLength == sizeof(rsp)); - TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_out); - TU_VERIFY(tud_usbtmc_check_abort_bulk_out_cb(&rsp)); - TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); - return true; + // Otherwise, we only handle class requests. + if(request->bmRequestType_bit.type != TUSB_REQ_TYPE_CLASS) + { + return false; + } + + // Verification that we own the interface is unneeded since it's been routed to us specifically. + + switch(request->bRequest) + { + // USBTMC required requests + case USBTMC_bREQUEST_INITIATE_ABORT_BULK_OUT: + { + usbtmc_initiate_abort_rsp_t rsp = { + .bTag = usbtmc_state.lastBulkOutTag, + }; + TU_VERIFY(request->bmRequestType == 0xA2); // in,class,interface + TU_VERIFY(request->wLength == sizeof(rsp)); + TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_out); + + // wValue is the requested bTag to abort + if(usbtmc_state.state != STATE_RCV) + { + rsp.USBTMC_status = USBTMC_STATUS_FAILED; + } + else if(usbtmc_state.lastBulkOutTag == (request->wValue & 0x7Fu)) + { + rsp.USBTMC_status = USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS; + } + else + { + rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; + // Check if we've queued a short packet + criticalEnter(); + usbtmc_state.state = STATE_ABORTING_BULK_OUT; + criticalLeave(); + TU_VERIFY(tud_usbtmc_initiate_abort_bulk_out_cb(&(rsp.USBTMC_status))); + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); } + TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp,sizeof(rsp))); + return true; + } + + case USBTMC_bREQUEST_CHECK_ABORT_BULK_OUT_STATUS: + { + usbtmc_check_abort_bulk_rsp_t rsp = { + .USBTMC_status = USBTMC_STATUS_SUCCESS, + .NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent + }; + TU_VERIFY(request->bmRequestType == 0xA2); // in,class,EP + TU_VERIFY(request->wLength == sizeof(rsp)); + TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_out); + TU_VERIFY(tud_usbtmc_check_abort_bulk_out_cb(&rsp)); + TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp,sizeof(rsp))); + return true; + } + + case USBTMC_bREQUEST_INITIATE_ABORT_BULK_IN: + { + usbtmc_initiate_abort_rsp_t rsp = { + .bTag = usbtmc_state.lastBulkInTag, + }; + TU_VERIFY(request->bmRequestType == 0xA2); // in,class,interface + TU_VERIFY(request->wLength == sizeof(rsp)); + TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_in); + // wValue is the requested bTag to abort + if((usbtmc_state.state == STATE_TX_REQUESTED || usbtmc_state.state == STATE_TX_INITIATED) && + usbtmc_state.lastBulkInTag == (request->wValue & 0x7Fu)) + { + rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; + usbtmc_state.transfer_size_remaining = 0u; + // Check if we've queued a short packet + criticalEnter(); + usbtmc_state.state = ((usbtmc_state.transfer_size_sent % usbtmc_state.ep_bulk_in_wMaxPacketSize) == 0) ? + STATE_ABORTING_BULK_IN : STATE_ABORTING_BULK_IN_SHORTED; + criticalLeave(); + if(usbtmc_state.transfer_size_sent == 0) + { + // Send short packet, nothing is in the buffer yet + TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,(uint16_t)0u)); + usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED; + } + TU_VERIFY(tud_usbtmc_initiate_abort_bulk_in_cb(&(rsp.USBTMC_status))); + } + else if((usbtmc_state.state == STATE_TX_REQUESTED || usbtmc_state.state == STATE_TX_INITIATED)) + { // FIXME: Unsure how to check if the OUT endpoint fifo is non-empty.... + rsp.USBTMC_status = USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS; + } + else + { + rsp.USBTMC_status = USBTMC_STATUS_FAILED; + } + TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp,sizeof(rsp))); + return true; + } - case USBTMC_bREQUEST_INITIATE_ABORT_BULK_IN: { - usbtmc_initiate_abort_rsp_t rsp = { - .bTag = usbtmc_state.lastBulkInTag, - }; - TU_VERIFY(request->bmRequestType == 0xA2); // in,class,interface - TU_VERIFY(request->wLength == sizeof(rsp)); - TU_VERIFY(request->wIndex == usbtmc_state.ep_bulk_in); - // wValue is the requested bTag to abort - if ((usbtmc_state.state == STATE_TX_REQUESTED || - usbtmc_state.state == STATE_TX_INITIATED) && - usbtmc_state.lastBulkInTag == (request->wValue & 0x7Fu)) { - rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; - usbtmc_state.transfer_size_remaining = 0u; - // Check if we've queued a short packet - criticalEnter(); - usbtmc_state.state = - ((usbtmc_state.transfer_size_sent % usbtmc_state.ep_bulk_in_wMaxPacketSize) == 0) ? - STATE_ABORTING_BULK_IN : - STATE_ABORTING_BULK_IN_SHORTED; - criticalLeave(); - if (usbtmc_state.transfer_size_sent == 0) { - // Send short packet, nothing is in the buffer yet - TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, - usbtmc_state.ep_bulk_in_buf, (uint16_t)0u)); - usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED; - } - TU_VERIFY(tud_usbtmc_initiate_abort_bulk_in_cb(&(rsp.USBTMC_status))); - } else if ((usbtmc_state.state == STATE_TX_REQUESTED || - usbtmc_state.state == - STATE_TX_INITIATED)) { // FIXME: Unsure how to check if the OUT endpoint fifo is non-empty.... - rsp.USBTMC_status = USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS; - } else { - rsp.USBTMC_status = USBTMC_STATUS_FAILED; - } - TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); - return true; + case USBTMC_bREQUEST_CHECK_ABORT_BULK_IN_STATUS: + { + TU_VERIFY(request->bmRequestType == 0xA2); // in,class,EP + TU_VERIFY(request->wLength == 8u); + + usbtmc_check_abort_bulk_rsp_t rsp = + { + .USBTMC_status = USBTMC_STATUS_FAILED, + .bmAbortBulkIn = + { + .BulkInFifoBytes = (usbtmc_state.state != STATE_ABORTING_BULK_IN_ABORTED) + }, + .NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent, + }; + TU_VERIFY(tud_usbtmc_check_abort_bulk_in_cb(&rsp)); + criticalEnter(); + switch(usbtmc_state.state) + { + case STATE_ABORTING_BULK_IN_ABORTED: + rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; + usbtmc_state.state = STATE_IDLE; + break; + case STATE_ABORTING_BULK_IN: + case STATE_ABORTING_BULK_OUT: + rsp.USBTMC_status = USBTMC_STATUS_PENDING; + break; + default: + break; } + criticalLeave(); + TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp,sizeof(rsp))); - case USBTMC_bREQUEST_CHECK_ABORT_BULK_IN_STATUS: { - TU_VERIFY(request->bmRequestType == 0xA2); // in,class,EP - TU_VERIFY(request->wLength == 8u); - - usbtmc_check_abort_bulk_rsp_t rsp = { - .USBTMC_status = USBTMC_STATUS_FAILED, - .bmAbortBulkIn = { .BulkInFifoBytes = - (usbtmc_state.state != STATE_ABORTING_BULK_IN_ABORTED) }, - .NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent, - }; - TU_VERIFY(tud_usbtmc_check_abort_bulk_in_cb(&rsp)); - criticalEnter(); - switch (usbtmc_state.state) { - case STATE_ABORTING_BULK_IN_ABORTED: - rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; - usbtmc_state.state = STATE_IDLE; - break; - case STATE_ABORTING_BULK_IN: - case STATE_ABORTING_BULK_OUT: - rsp.USBTMC_status = USBTMC_STATUS_PENDING; - break; - default: - break; - } - criticalLeave(); - TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); + return true; + } - return true; + case USBTMC_bREQUEST_INITIATE_CLEAR: + { + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + TU_VERIFY(request->wLength == sizeof(tmcStatusCode)); + // After receiving an INITIATE_CLEAR request, the device must Halt the Bulk-OUT endpoint, queue the + // control endpoint response shown in Table 31, and clear all input buffers and output buffers. + usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); + usbtmc_state.transfer_size_remaining = 0; + criticalEnter(); + usbtmc_state.state = STATE_CLEARING; + criticalLeave(); + TU_VERIFY(tud_usbtmc_initiate_clear_cb(&tmcStatusCode)); + TU_VERIFY(tud_control_xfer(rhport, request, (void*)&tmcStatusCode,sizeof(tmcStatusCode))); + return true; } - case USBTMC_bREQUEST_INITIATE_CLEAR: { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - TU_VERIFY(request->wLength == sizeof(tmcStatusCode)); - // After receiving an INITIATE_CLEAR request, the device must Halt the Bulk-OUT endpoint, queue the - // control endpoint response shown in Table 31, and clear all input buffers and output buffers. - usbd_edpt_stall(rhport, usbtmc_state.ep_bulk_out); - usbtmc_state.transfer_size_remaining = 0; + case USBTMC_bREQUEST_CHECK_CLEAR_STATUS: + { + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + usbtmc_get_clear_status_rsp_t clearStatusRsp = {0}; + TU_VERIFY(request->wLength == sizeof(clearStatusRsp)); + + if(usbd_edpt_busy(rhport, usbtmc_state.ep_bulk_in)) + { + // Stuff stuck in TX buffer? + clearStatusRsp.bmClear.BulkInFifoBytes = 1; + clearStatusRsp.USBTMC_status = USBTMC_STATUS_PENDING; + } + else + { + // Let app check if it's clear + TU_VERIFY(tud_usbtmc_check_clear_cb(&clearStatusRsp)); + } + if(clearStatusRsp.USBTMC_status == USBTMC_STATUS_SUCCESS) + { criticalEnter(); - usbtmc_state.state = STATE_CLEARING; + usbtmc_state.state = STATE_IDLE; criticalLeave(); - TU_VERIFY(tud_usbtmc_initiate_clear_cb(&tmcStatusCode)); - TU_VERIFY(tud_control_xfer(rhport, request, (void *)&tmcStatusCode, sizeof(tmcStatusCode))); - return true; + } + TU_VERIFY(tud_control_xfer(rhport, request, (void*)&clearStatusRsp,sizeof(clearStatusRsp))); + return true; } - case USBTMC_bREQUEST_CHECK_CLEAR_STATUS: { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - usbtmc_get_clear_status_rsp_t clearStatusRsp = { 0 }; - TU_VERIFY(request->wLength == sizeof(clearStatusRsp)); - - if (usbd_edpt_busy(rhport, usbtmc_state.ep_bulk_in)) { - // Stuff stuck in TX buffer? - clearStatusRsp.bmClear.BulkInFifoBytes = 1; - clearStatusRsp.USBTMC_status = USBTMC_STATUS_PENDING; - } else { - // Let app check if it's clear - TU_VERIFY(tud_usbtmc_check_clear_cb(&clearStatusRsp)); - } - if (clearStatusRsp.USBTMC_status == USBTMC_STATUS_SUCCESS) { - criticalEnter(); - usbtmc_state.state = STATE_IDLE; - criticalLeave(); - } - TU_VERIFY( - tud_control_xfer(rhport, request, (void *)&clearStatusRsp, sizeof(clearStatusRsp))); - return true; - } - - case USBTMC_bREQUEST_GET_CAPABILITIES: { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - TU_VERIFY(request->wLength == sizeof(*(usbtmc_state.capabilities))); - TU_VERIFY(tud_control_xfer(rhport, request, (void *)(uintptr_t)usbtmc_state.capabilities, - sizeof(*usbtmc_state.capabilities))); - return true; + case USBTMC_bREQUEST_GET_CAPABILITIES: + { + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + TU_VERIFY(request->wLength == sizeof(*(usbtmc_state.capabilities))); + TU_VERIFY(tud_control_xfer(rhport, request, (void*)(uintptr_t) usbtmc_state.capabilities, sizeof(*usbtmc_state.capabilities))); + return true; } - // USBTMC Optional Requests + // USBTMC Optional Requests - case USBTMC_bREQUEST_INDICATOR_PULSE: // Optional + case USBTMC_bREQUEST_INDICATOR_PULSE: // Optional { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - TU_VERIFY(request->wLength == sizeof(tmcStatusCode)); - TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse); - TU_VERIFY(tud_usbtmc_indicator_pulse_cb(request, &tmcStatusCode)); - TU_VERIFY(tud_control_xfer(rhport, request, (void *)&tmcStatusCode, sizeof(tmcStatusCode))); - return true; + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + TU_VERIFY(request->wLength == sizeof(tmcStatusCode)); + TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse); + TU_VERIFY(tud_usbtmc_indicator_pulse_cb(request, &tmcStatusCode)); + TU_VERIFY(tud_control_xfer(rhport, request, (void*)&tmcStatusCode, sizeof(tmcStatusCode))); + return true; } #if (CFG_TUD_USBTMC_ENABLE_488) - // USB488 required requests - case USB488_bREQUEST_READ_STATUS_BYTE: { - usbtmc_read_stb_rsp_488_t rsp; - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - TU_VERIFY(request->wLength == sizeof(rsp)); // in,class,interface - - bTag = request->wValue & 0x7F; - TU_VERIFY(request->bmRequestType == 0xA1); - TU_VERIFY((request->wValue & (~0x7F)) == - 0u); // Other bits are required to be zero (USB488v1.0 Table 11) - TU_VERIFY(bTag >= 0x02 && bTag <= 127); - TU_VERIFY(request->wIndex == usbtmc_state.itf_id); - TU_VERIFY(request->wLength == 0x0003); - rsp.bTag = (uint8_t)bTag; - if (usbtmc_state.ep_int_in != 0) { - rsp.statusByte = - 0x00; // Use interrupt endpoint, instead. Must be 0x00 (USB488v1.0 4.3.1.2) - if (usbd_edpt_busy(rhport, usbtmc_state.ep_int_in)) { - rsp.USBTMC_status = USB488_STATUS_INTERRUPT_IN_BUSY; - } else { - rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; - usbtmc_read_stb_interrupt_488_t intMsg = + // USB488 required requests + case USB488_bREQUEST_READ_STATUS_BYTE: + { + usbtmc_read_stb_rsp_488_t rsp; + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + TU_VERIFY(request->wLength == sizeof(rsp)); // in,class,interface + + bTag = request->wValue & 0x7F; + TU_VERIFY(request->bmRequestType == 0xA1); + TU_VERIFY((request->wValue & (~0x7F)) == 0u); // Other bits are required to be zero (USB488v1.0 Table 11) + TU_VERIFY(bTag >= 0x02 && bTag <= 127); + TU_VERIFY(request->wIndex == usbtmc_state.itf_id); + TU_VERIFY(request->wLength == 0x0003); + rsp.bTag = (uint8_t)bTag; + if(usbtmc_state.ep_int_in != 0) + { + rsp.statusByte = 0x00; // Use interrupt endpoint, instead. Must be 0x00 (USB488v1.0 4.3.1.2) + if(usbd_edpt_busy(rhport, usbtmc_state.ep_int_in)) + { + rsp.USBTMC_status = USB488_STATUS_INTERRUPT_IN_BUSY; + } + else + { + rsp.USBTMC_status = USBTMC_STATUS_SUCCESS; + usbtmc_read_stb_interrupt_488_t intMsg = { .bNotify1 = { .one = 1, @@ -846,27 +891,30 @@ bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request }, .StatusByte = tud_usbtmc_get_stb_cb(&(rsp.USBTMC_status)) }; - // Must be queued before control request response sent (USB488v1.0 4.3.1.2) - usbd_edpt_xfer(rhport, usbtmc_state.ep_int_in, (void *)&intMsg, sizeof(intMsg)); - } - } else { - rsp.statusByte = tud_usbtmc_get_stb_cb(&(rsp.USBTMC_status)); + // Must be queued before control request response sent (USB488v1.0 4.3.1.2) + usbd_edpt_xfer(rhport, usbtmc_state.ep_int_in, (void*)&intMsg, sizeof(intMsg)); } - TU_VERIFY(tud_control_xfer(rhport, request, (void *)&rsp, sizeof(rsp))); - return true; + } + else + { + rsp.statusByte = tud_usbtmc_get_stb_cb(&(rsp.USBTMC_status)); + } + TU_VERIFY(tud_control_xfer(rhport, request, (void*)&rsp, sizeof(rsp))); + return true; } - // USB488 optional requests - case USB488_bREQUEST_REN_CONTROL: - case USB488_bREQUEST_GO_TO_LOCAL: - case USB488_bREQUEST_LOCAL_LOCKOUT: { - TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface - return false; + // USB488 optional requests + case USB488_bREQUEST_REN_CONTROL: + case USB488_bREQUEST_GO_TO_LOCAL: + case USB488_bREQUEST_LOCAL_LOCKOUT: + { + TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface + return false; } #endif - default: - return false; - } + default: + return false; + } } #endif /* CFG_TUD_TSMC */ diff --git a/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.h b/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.h index f2d0524d5c3..b85ef12b59f 100644 --- a/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.h +++ b/Libraries/tinyusb/src/class/usbtmc/usbtmc_device.h @@ -24,6 +24,7 @@ * This file is part of the TinyUSB stack. */ + #ifndef CLASS_USBTMC_USBTMC_DEVICE_H_ #define CLASS_USBTMC_USBTMC_DEVICE_H_ @@ -48,23 +49,21 @@ // * (successful) tud_usmtmc_bulkOut_clearFeature_cb #if (CFG_TUD_USBTMC_ENABLE_488) -usbtmc_response_capabilities_488_t const *tud_usbtmc_get_capabilities_cb(void); +usbtmc_response_capabilities_488_t const * tud_usbtmc_get_capabilities_cb(void); #else -usbtmc_response_capabilities_t const *tud_usbtmc_get_capabilities_cb(void); +usbtmc_response_capabilities_t const * tud_usbtmc_get_capabilities_cb(void); #endif void tud_usbtmc_open_cb(uint8_t interface_id); -bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const *msgHeader); +bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const * msgHeader); // transfer_complete does not imply that a message is complete. -bool tud_usbtmc_msg_data_cb(void *data, size_t len, bool transfer_complete); -void tud_usbtmc_bulkOut_clearFeature_cb( - void); // Notice to clear and abort the pending BULK out transfer +bool tud_usbtmc_msg_data_cb( void *data, size_t len, bool transfer_complete); +void tud_usbtmc_bulkOut_clearFeature_cb(void); // Notice to clear and abort the pending BULK out transfer -bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const *request); +bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const * request); bool tud_usbtmc_msgBulkIn_complete_cb(void); -void tud_usbtmc_bulkIn_clearFeature_cb( - void); // Notice to clear and abort the pending BULK out transfer +void tud_usbtmc_bulkIn_clearFeature_cb(void); // Notice to clear and abort the pending BULK out transfer bool tud_usbtmc_initiate_abort_bulk_in_cb(uint8_t *tmcResult); bool tud_usbtmc_initiate_abort_bulk_out_cb(uint8_t *tmcResult); @@ -79,12 +78,11 @@ bool tud_usbtmc_check_clear_cb(usbtmc_get_clear_status_rsp_t *rsp); TU_ATTR_WEAK bool tud_usbtmc_notification_complete_cb(void); // Indicator pulse should be 0.5 to 1.0 seconds long -TU_ATTR_WEAK bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const *msg, - uint8_t *tmcResult); +TU_ATTR_WEAK bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const * msg, uint8_t *tmcResult); #if (CFG_TUD_USBTMC_ENABLE_488) uint8_t tud_usbtmc_get_stb_cb(uint8_t *tmcResult); -TU_ATTR_WEAK bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t *msg); +TU_ATTR_WEAK bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t* msg); //TU_ATTR_WEAK bool tud_usbtmc_app_go_to_local_cb(); #endif @@ -92,8 +90,9 @@ TU_ATTR_WEAK bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t *msg); // // We keep a reference to the buffer, so it MUST not change until the app is // notified that the transfer is complete. -bool tud_usbtmc_transmit_dev_msg_data(const void *data, size_t len, bool endOfMessage, - bool usingTermChar); +bool tud_usbtmc_transmit_dev_msg_data( + const void * data, size_t len, + bool endOfMessage, bool usingTermChar); // Buffers a notification to be sent to the host. The data starts // with the bNotify1 field, see the USBTMC Specification, Table 13. @@ -102,17 +101,18 @@ bool tud_usbtmc_transmit_dev_msg_data(const void *data, size_t len, bool endOfMe // returns false. // // Requires an interrupt endpoint in the interface. -bool tud_usbtmc_transmit_notification_data(const void *data, size_t len); +bool tud_usbtmc_transmit_notification_data(const void * data, size_t len); bool tud_usbtmc_start_bus_read(void); + /* "callbacks" from USB device core */ -void usbtmcd_init_cb(void); -bool usbtmcd_deinit(void); -uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -void usbtmcd_reset_cb(uint8_t rhport); -bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); -bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); +void usbtmcd_init_cb(void); +bool usbtmcd_deinit(void); +uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +void usbtmcd_reset_cb(uint8_t rhport); +bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); +bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); #endif /* CLASS_USBTMC_USBTMC_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/vendor/vendor_device.c b/Libraries/tinyusb/src/class/vendor/vendor_device.c index a81f8041060..56ef098c7a1 100644 --- a/Libraries/tinyusb/src/class/vendor/vendor_device.c +++ b/Libraries/tinyusb/src/class/vendor/vendor_device.c @@ -38,275 +38,284 @@ //--------------------------------------------------------------------+ #define BULK_PACKET_SIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -typedef struct { - uint8_t itf_num; - uint8_t ep_in; - uint8_t ep_out; +typedef struct +{ + uint8_t itf_num; + uint8_t ep_in; + uint8_t ep_out; - /*------------- From this point, data is not cleared by bus reset -------------*/ - tu_fifo_t rx_ff; - tu_fifo_t tx_ff; + /*------------- From this point, data is not cleared by bus reset -------------*/ + tu_fifo_t rx_ff; + tu_fifo_t tx_ff; - uint8_t rx_ff_buf[CFG_TUD_VENDOR_RX_BUFSIZE]; - uint8_t tx_ff_buf[CFG_TUD_VENDOR_TX_BUFSIZE]; + uint8_t rx_ff_buf[CFG_TUD_VENDOR_RX_BUFSIZE]; + uint8_t tx_ff_buf[CFG_TUD_VENDOR_TX_BUFSIZE]; - OSAL_MUTEX_DEF(rx_ff_mutex); - OSAL_MUTEX_DEF(tx_ff_mutex); + OSAL_MUTEX_DEF(rx_ff_mutex); + OSAL_MUTEX_DEF(tx_ff_mutex); - // Endpoint Transfer buffer - CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_VENDOR_EPSIZE]; - CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_VENDOR_EPSIZE]; + // Endpoint Transfer buffer + CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_VENDOR_EPSIZE]; + CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_VENDOR_EPSIZE]; } vendord_interface_t; CFG_TUD_MEM_SECTION tu_static vendord_interface_t _vendord_itf[CFG_TUD_VENDOR]; -#define ITF_MEM_RESET_SIZE offsetof(vendord_interface_t, rx_ff) +#define ITF_MEM_RESET_SIZE offsetof(vendord_interface_t, rx_ff) + -bool tud_vendor_n_mounted(uint8_t itf) +bool tud_vendor_n_mounted (uint8_t itf) { - return _vendord_itf[itf].ep_in && _vendord_itf[itf].ep_out; + return _vendord_itf[itf].ep_in && _vendord_itf[itf].ep_out; } -uint32_t tud_vendor_n_available(uint8_t itf) +uint32_t tud_vendor_n_available (uint8_t itf) { - return tu_fifo_count(&_vendord_itf[itf].rx_ff); + return tu_fifo_count(&_vendord_itf[itf].rx_ff); } -bool tud_vendor_n_peek(uint8_t itf, uint8_t *u8) +bool tud_vendor_n_peek(uint8_t itf, uint8_t* u8) { - return tu_fifo_peek(&_vendord_itf[itf].rx_ff, u8); + return tu_fifo_peek(&_vendord_itf[itf].rx_ff, u8); } //--------------------------------------------------------------------+ // Read API //--------------------------------------------------------------------+ -static void _prep_out_transaction(vendord_interface_t *p_itf) +static void _prep_out_transaction (vendord_interface_t* p_itf) { - uint8_t const rhport = 0; + uint8_t const rhport = 0; // claim endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_itf->ep_out), ); - - // Prepare for incoming data but only allow what we can store in the ring buffer. - uint16_t max_read = tu_fifo_remaining(&p_itf->rx_ff); - if (max_read >= CFG_TUD_VENDOR_EPSIZE) { - usbd_edpt_xfer(rhport, p_itf->ep_out, p_itf->epout_buf, CFG_TUD_VENDOR_EPSIZE); - } else { - // Release endpoint since we don't make any transfer - usbd_edpt_release(rhport, p_itf->ep_out); - } + TU_VERIFY(usbd_edpt_claim(rhport, p_itf->ep_out), ); + + // Prepare for incoming data but only allow what we can store in the ring buffer. + uint16_t max_read = tu_fifo_remaining(&p_itf->rx_ff); + if ( max_read >= CFG_TUD_VENDOR_EPSIZE ) + { + usbd_edpt_xfer(rhport, p_itf->ep_out, p_itf->epout_buf, CFG_TUD_VENDOR_EPSIZE); + } + else + { + // Release endpoint since we don't make any transfer + usbd_edpt_release(rhport, p_itf->ep_out); + } } -uint32_t tud_vendor_n_read(uint8_t itf, void *buffer, uint32_t bufsize) +uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize) { - vendord_interface_t *p_itf = &_vendord_itf[itf]; - uint32_t num_read = tu_fifo_read_n(&p_itf->rx_ff, buffer, (uint16_t)bufsize); - _prep_out_transaction(p_itf); - return num_read; + vendord_interface_t* p_itf = &_vendord_itf[itf]; + uint32_t num_read = tu_fifo_read_n(&p_itf->rx_ff, buffer, (uint16_t) bufsize); + _prep_out_transaction(p_itf); + return num_read; } -void tud_vendor_n_read_flush(uint8_t itf) +void tud_vendor_n_read_flush (uint8_t itf) { - vendord_interface_t *p_itf = &_vendord_itf[itf]; - tu_fifo_clear(&p_itf->rx_ff); - _prep_out_transaction(p_itf); + vendord_interface_t* p_itf = &_vendord_itf[itf]; + tu_fifo_clear(&p_itf->rx_ff); + _prep_out_transaction(p_itf); } //--------------------------------------------------------------------+ // Write API //--------------------------------------------------------------------+ -uint32_t tud_vendor_n_write(uint8_t itf, void const *buffer, uint32_t bufsize) +uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize) { - vendord_interface_t *p_itf = &_vendord_itf[itf]; - uint16_t ret = tu_fifo_write_n(&p_itf->tx_ff, buffer, (uint16_t)bufsize); - - // flush if queue more than packet size - if (tu_fifo_count(&p_itf->tx_ff) >= CFG_TUD_VENDOR_EPSIZE) { - tud_vendor_n_write_flush(itf); - } - return ret; + vendord_interface_t* p_itf = &_vendord_itf[itf]; + uint16_t ret = tu_fifo_write_n(&p_itf->tx_ff, buffer, (uint16_t) bufsize); + + // flush if queue more than packet size + if (tu_fifo_count(&p_itf->tx_ff) >= CFG_TUD_VENDOR_EPSIZE) { + tud_vendor_n_write_flush(itf); + } + return ret; } -uint32_t tud_vendor_n_write_flush(uint8_t itf) +uint32_t tud_vendor_n_write_flush (uint8_t itf) { - vendord_interface_t *p_itf = &_vendord_itf[itf]; + vendord_interface_t* p_itf = &_vendord_itf[itf]; - // Skip if usb is not ready yet - TU_VERIFY(tud_ready(), 0); + // Skip if usb is not ready yet + TU_VERIFY( tud_ready(), 0 ); - // No data to send - if (!tu_fifo_count(&p_itf->tx_ff)) - return 0; + // No data to send + if ( !tu_fifo_count(&p_itf->tx_ff) ) return 0; - uint8_t const rhport = 0; + uint8_t const rhport = 0; - // Claim the endpoint - TU_VERIFY(usbd_edpt_claim(rhport, p_itf->ep_in), 0); + // Claim the endpoint + TU_VERIFY( usbd_edpt_claim(rhport, p_itf->ep_in), 0 ); - // Pull data from FIFO - uint16_t const count = tu_fifo_read_n(&p_itf->tx_ff, p_itf->epin_buf, sizeof(p_itf->epin_buf)); + // Pull data from FIFO + uint16_t const count = tu_fifo_read_n(&p_itf->tx_ff, p_itf->epin_buf, sizeof(p_itf->epin_buf)); - if (count) { - TU_ASSERT(usbd_edpt_xfer(rhport, p_itf->ep_in, p_itf->epin_buf, count), 0); - return count; - } else { - // Release endpoint since we don't make any transfer - // Note: data is dropped if terminal is not connected - usbd_edpt_release(rhport, p_itf->ep_in); - return 0; - } + if ( count ) + { + TU_ASSERT( usbd_edpt_xfer(rhport, p_itf->ep_in, p_itf->epin_buf, count), 0 ); + return count; + }else + { + // Release endpoint since we don't make any transfer + // Note: data is dropped if terminal is not connected + usbd_edpt_release(rhport, p_itf->ep_in); + return 0; + } } -uint32_t tud_vendor_n_write_available(uint8_t itf) +uint32_t tud_vendor_n_write_available (uint8_t itf) { - return tu_fifo_remaining(&_vendord_itf[itf].tx_ff); + return tu_fifo_remaining(&_vendord_itf[itf].tx_ff); } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void vendord_init(void) -{ - tu_memclr(_vendord_itf, sizeof(_vendord_itf)); +void vendord_init(void) { + tu_memclr(_vendord_itf, sizeof(_vendord_itf)); - for (uint8_t i = 0; i < CFG_TUD_VENDOR; i++) { - vendord_interface_t *p_itf = &_vendord_itf[i]; + for(uint8_t i=0; irx_ff, p_itf->rx_ff_buf, CFG_TUD_VENDOR_RX_BUFSIZE, 1, false); - tu_fifo_config(&p_itf->tx_ff, p_itf->tx_ff_buf, CFG_TUD_VENDOR_TX_BUFSIZE, 1, false); + // config fifo + tu_fifo_config(&p_itf->rx_ff, p_itf->rx_ff_buf, CFG_TUD_VENDOR_RX_BUFSIZE, 1, false); + tu_fifo_config(&p_itf->tx_ff, p_itf->tx_ff_buf, CFG_TUD_VENDOR_TX_BUFSIZE, 1, false); -#if OSAL_MUTEX_REQUIRED - osal_mutex_t mutex_rd = osal_mutex_create(&p_itf->rx_ff_mutex); - osal_mutex_t mutex_wr = osal_mutex_create(&p_itf->tx_ff_mutex); - TU_ASSERT(mutex_rd && mutex_wr, ); + #if OSAL_MUTEX_REQUIRED + osal_mutex_t mutex_rd = osal_mutex_create(&p_itf->rx_ff_mutex); + osal_mutex_t mutex_wr = osal_mutex_create(&p_itf->tx_ff_mutex); + TU_ASSERT(mutex_rd && mutex_wr,); - tu_fifo_config_mutex(&p_itf->rx_ff, NULL, mutex_rd); - tu_fifo_config_mutex(&p_itf->tx_ff, mutex_wr, NULL); -#endif - } + tu_fifo_config_mutex(&p_itf->rx_ff, NULL, mutex_rd); + tu_fifo_config_mutex(&p_itf->tx_ff, mutex_wr, NULL); + #endif + } } -bool vendord_deinit(void) -{ -#if OSAL_MUTEX_REQUIRED - for (uint8_t i = 0; i < CFG_TUD_VENDOR; i++) { - vendord_interface_t *p_itf = &_vendord_itf[i]; - osal_mutex_t mutex_rd = p_itf->rx_ff.mutex_rd; - osal_mutex_t mutex_wr = p_itf->tx_ff.mutex_wr; - - if (mutex_rd) { - osal_mutex_delete(mutex_rd); - tu_fifo_config_mutex(&p_itf->rx_ff, NULL, NULL); - } +bool vendord_deinit(void) { + #if OSAL_MUTEX_REQUIRED + for(uint8_t i=0; irx_ff.mutex_rd; + osal_mutex_t mutex_wr = p_itf->tx_ff.mutex_wr; - if (mutex_wr) { - osal_mutex_delete(mutex_wr); - tu_fifo_config_mutex(&p_itf->tx_ff, NULL, NULL); - } + if (mutex_rd) { + osal_mutex_delete(mutex_rd); + tu_fifo_config_mutex(&p_itf->rx_ff, NULL, NULL); } -#endif - return true; + if (mutex_wr) { + osal_mutex_delete(mutex_wr); + tu_fifo_config_mutex(&p_itf->tx_ff, NULL, NULL); + } + } + #endif + + return true; } void vendord_reset(uint8_t rhport) { - (void)rhport; + (void) rhport; - for (uint8_t i = 0; i < CFG_TUD_VENDOR; i++) { - vendord_interface_t *p_itf = &_vendord_itf[i]; + for(uint8_t i=0; irx_ff); - tu_fifo_clear(&p_itf->tx_ff); - } + tu_memclr(p_itf, ITF_MEM_RESET_SIZE); + tu_fifo_clear(&p_itf->rx_ff); + tu_fifo_clear(&p_itf->tx_ff); + } } -uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len) +uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t max_len) { - TU_VERIFY(TUSB_CLASS_VENDOR_SPECIFIC == desc_itf->bInterfaceClass, 0); - - uint8_t const *p_desc = tu_desc_next(desc_itf); - uint8_t const *desc_end = p_desc + max_len; - - // Find available interface - vendord_interface_t *p_vendor = NULL; - for (uint8_t i = 0; i < CFG_TUD_VENDOR; i++) { - if (_vendord_itf[i].ep_in == 0 && _vendord_itf[i].ep_out == 0) { - p_vendor = &_vendord_itf[i]; - break; - } + TU_VERIFY(TUSB_CLASS_VENDOR_SPECIFIC == desc_itf->bInterfaceClass, 0); + + uint8_t const * p_desc = tu_desc_next(desc_itf); + uint8_t const * desc_end = p_desc + max_len; + + // Find available interface + vendord_interface_t* p_vendor = NULL; + for(uint8_t i=0; iitf_num = desc_itf->bInterfaceNumber; + if (desc_itf->bNumEndpoints) + { + // skip non-endpoint descriptors + while ( (TUSB_DESC_ENDPOINT != tu_desc_type(p_desc)) && (p_desc < desc_end) ) + { + p_desc = tu_desc_next(p_desc); } - TU_VERIFY(p_vendor, 0); - - p_vendor->itf_num = desc_itf->bInterfaceNumber; - if (desc_itf->bNumEndpoints) { - // skip non-endpoint descriptors - while ((TUSB_DESC_ENDPOINT != tu_desc_type(p_desc)) && (p_desc < desc_end)) { - p_desc = tu_desc_next(p_desc); - } - - // Open endpoint pair with usbd helper - TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_BULK, - &p_vendor->ep_out, &p_vendor->ep_in), - 0); - p_desc += desc_itf->bNumEndpoints * sizeof(tusb_desc_endpoint_t); + // Open endpoint pair with usbd helper + TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_BULK, &p_vendor->ep_out, &p_vendor->ep_in), 0); - // Prepare for incoming data - if (p_vendor->ep_out) { - _prep_out_transaction(p_vendor); - } + p_desc += desc_itf->bNumEndpoints*sizeof(tusb_desc_endpoint_t); - if (p_vendor->ep_in) - tud_vendor_n_write_flush((uint8_t)(p_vendor - _vendord_itf)); + // Prepare for incoming data + if ( p_vendor->ep_out ) + { + _prep_out_transaction(p_vendor); } - return (uint16_t)((uintptr_t)p_desc - (uintptr_t)desc_itf); + if ( p_vendor->ep_in ) tud_vendor_n_write_flush((uint8_t)(p_vendor - _vendord_itf)); + } + + return (uint16_t) ((uintptr_t) p_desc - (uintptr_t) desc_itf); } bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void)result; + (void) result; - uint8_t itf = 0; - vendord_interface_t *p_itf = _vendord_itf; + uint8_t itf = 0; + vendord_interface_t* p_itf = _vendord_itf; - for (;; itf++, p_itf++) { - if (itf >= TU_ARRAY_SIZE(_vendord_itf)) - return false; + for ( ; ; itf++, p_itf++) + { + if (itf >= TU_ARRAY_SIZE(_vendord_itf)) return false; - if ((ep_addr == p_itf->ep_out) || (ep_addr == p_itf->ep_in)) - break; - } + if ( ( ep_addr == p_itf->ep_out ) || ( ep_addr == p_itf->ep_in ) ) break; + } + + if ( ep_addr == p_itf->ep_out ) + { + // Receive new data + tu_fifo_write_n(&p_itf->rx_ff, p_itf->epout_buf, (uint16_t) xferred_bytes); - if (ep_addr == p_itf->ep_out) { - // Receive new data - tu_fifo_write_n(&p_itf->rx_ff, p_itf->epout_buf, (uint16_t)xferred_bytes); - - // Invoked callback if any - if (tud_vendor_rx_cb) - tud_vendor_rx_cb(itf); - - _prep_out_transaction(p_itf); - } else if (ep_addr == p_itf->ep_in) { - if (tud_vendor_tx_cb) - tud_vendor_tx_cb(itf, (uint16_t)xferred_bytes); - // Send complete, try to send more if possible - if (0 == tud_vendor_n_write_flush(itf)) { - // If there is no data left, a ZLP should be sent if - // xferred_bytes is multiple of EP Packet size and not zero - if (!tu_fifo_count(&p_itf->tx_ff) && xferred_bytes && - (0 == (xferred_bytes & (BULK_PACKET_SIZE - 1)))) { - if (usbd_edpt_claim(rhport, p_itf->ep_in)) { - usbd_edpt_xfer(rhport, p_itf->ep_in, NULL, 0); - } - } + // Invoked callback if any + if (tud_vendor_rx_cb) tud_vendor_rx_cb(itf); + + _prep_out_transaction(p_itf); + } + else if ( ep_addr == p_itf->ep_in ) + { + if (tud_vendor_tx_cb) tud_vendor_tx_cb(itf, (uint16_t) xferred_bytes); + // Send complete, try to send more if possible + if ( 0 == tud_vendor_n_write_flush(itf) ) + { + // If there is no data left, a ZLP should be sent if + // xferred_bytes is multiple of EP Packet size and not zero + if ( !tu_fifo_count(&p_itf->tx_ff) && xferred_bytes && (0 == (xferred_bytes & (BULK_PACKET_SIZE-1))) ) + { + if ( usbd_edpt_claim(rhport, p_itf->ep_in) ) + { + usbd_edpt_xfer(rhport, p_itf->ep_in, NULL, 0); } + } } + } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/class/vendor/vendor_device.h b/Libraries/tinyusb/src/class/vendor/vendor_device.h index d6d38189fbd..cd69ec7c65e 100644 --- a/Libraries/tinyusb/src/class/vendor/vendor_device.h +++ b/Libraries/tinyusb/src/class/vendor/vendor_device.h @@ -30,28 +30,28 @@ #include "common/tusb_common.h" #ifndef CFG_TUD_VENDOR_EPSIZE -#define CFG_TUD_VENDOR_EPSIZE 64 +#define CFG_TUD_VENDOR_EPSIZE 64 #endif #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ // Application API (Multiple Interfaces) //--------------------------------------------------------------------+ -bool tud_vendor_n_mounted(uint8_t itf); +bool tud_vendor_n_mounted (uint8_t itf); -uint32_t tud_vendor_n_available(uint8_t itf); -uint32_t tud_vendor_n_read(uint8_t itf, void *buffer, uint32_t bufsize); -bool tud_vendor_n_peek(uint8_t itf, uint8_t *ui8); -void tud_vendor_n_read_flush(uint8_t itf); +uint32_t tud_vendor_n_available (uint8_t itf); +uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize); +bool tud_vendor_n_peek (uint8_t itf, uint8_t* ui8); +void tud_vendor_n_read_flush (uint8_t itf); -uint32_t tud_vendor_n_write(uint8_t itf, void const *buffer, uint32_t bufsize); -uint32_t tud_vendor_n_write_flush(uint8_t itf); -uint32_t tud_vendor_n_write_available(uint8_t itf); +uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize); +uint32_t tud_vendor_n_write_flush (uint8_t itf); +uint32_t tud_vendor_n_write_available (uint8_t itf); -static inline uint32_t tud_vendor_n_write_str(uint8_t itf, char const *str); +static inline uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str); // backward compatible #define tud_vendor_n_flush(itf) tud_vendor_n_write_flush(itf) @@ -59,15 +59,15 @@ static inline uint32_t tud_vendor_n_write_str(uint8_t itf, char const *str); //--------------------------------------------------------------------+ // Application API (Single Port) //--------------------------------------------------------------------+ -static inline bool tud_vendor_mounted(void); -static inline uint32_t tud_vendor_available(void); -static inline uint32_t tud_vendor_read(void *buffer, uint32_t bufsize); -static inline bool tud_vendor_peek(uint8_t *ui8); -static inline void tud_vendor_read_flush(void); -static inline uint32_t tud_vendor_write(void const *buffer, uint32_t bufsize); -static inline uint32_t tud_vendor_write_str(char const *str); -static inline uint32_t tud_vendor_write_available(void); -static inline uint32_t tud_vendor_write_flush(void); +static inline bool tud_vendor_mounted (void); +static inline uint32_t tud_vendor_available (void); +static inline uint32_t tud_vendor_read (void* buffer, uint32_t bufsize); +static inline bool tud_vendor_peek (uint8_t* ui8); +static inline void tud_vendor_read_flush (void); +static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize); +static inline uint32_t tud_vendor_write_str (char const* str); +static inline uint32_t tud_vendor_write_available (void); +static inline uint32_t tud_vendor_write_flush (void); // backward compatible #define tud_vendor_flush() tud_vendor_write_flush() @@ -85,29 +85,29 @@ TU_ATTR_WEAK void tud_vendor_tx_cb(uint8_t itf, uint32_t sent_bytes); // Inline Functions //--------------------------------------------------------------------+ -static inline uint32_t tud_vendor_n_write_str(uint8_t itf, char const *str) +static inline uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str) { - return tud_vendor_n_write(itf, str, strlen(str)); + return tud_vendor_n_write(itf, str, strlen(str)); } -static inline bool tud_vendor_mounted(void) +static inline bool tud_vendor_mounted (void) { - return tud_vendor_n_mounted(0); + return tud_vendor_n_mounted(0); } -static inline uint32_t tud_vendor_available(void) +static inline uint32_t tud_vendor_available (void) { - return tud_vendor_n_available(0); + return tud_vendor_n_available(0); } -static inline uint32_t tud_vendor_read(void *buffer, uint32_t bufsize) +static inline uint32_t tud_vendor_read (void* buffer, uint32_t bufsize) { - return tud_vendor_n_read(0, buffer, bufsize); + return tud_vendor_n_read(0, buffer, bufsize); } -static inline bool tud_vendor_peek(uint8_t *ui8) +static inline bool tud_vendor_peek (uint8_t* ui8) { - return tud_vendor_n_peek(0, ui8); + return tud_vendor_n_peek(0, ui8); } static inline void tud_vendor_read_flush(void) @@ -115,37 +115,37 @@ static inline void tud_vendor_read_flush(void) tud_vendor_n_read_flush(0); } -static inline uint32_t tud_vendor_write(void const *buffer, uint32_t bufsize) +static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize) { - return tud_vendor_n_write(0, buffer, bufsize); + return tud_vendor_n_write(0, buffer, bufsize); } -static inline uint32_t tud_vendor_write_flush(void) +static inline uint32_t tud_vendor_write_flush (void) { - return tud_vendor_n_write_flush(0); + return tud_vendor_n_write_flush(0); } -static inline uint32_t tud_vendor_write_str(char const *str) +static inline uint32_t tud_vendor_write_str (char const* str) { - return tud_vendor_n_write_str(0, str); + return tud_vendor_n_write_str(0, str); } -static inline uint32_t tud_vendor_write_available(void) +static inline uint32_t tud_vendor_write_available (void) { - return tud_vendor_n_write_available(0); + return tud_vendor_n_write_available(0); } //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ -void vendord_init(void); -bool vendord_deinit(void); -void vendord_reset(uint8_t rhport); -uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); +void vendord_init(void); +bool vendord_deinit(void); +void vendord_reset(uint8_t rhport); +uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_VENDOR_DEVICE_H_ */ diff --git a/Libraries/tinyusb/src/class/vendor/vendor_host.c b/Libraries/tinyusb/src/class/vendor/vendor_host.c index eee65d22ccd..e66c5007fae 100644 --- a/Libraries/tinyusb/src/class/vendor/vendor_host.c +++ b/Libraries/tinyusb/src/class/vendor/vendor_host.c @@ -43,46 +43,46 @@ //--------------------------------------------------------------------+ custom_interface_info_t custom_interface[CFG_TUH_DEVICE_MAX]; -static tusb_error_t cush_validate_paras(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, - void *p_buffer, uint16_t length) +static tusb_error_t cush_validate_paras(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length) { - if (!tusbh_custom_is_mounted(dev_addr, vendor_id, product_id)) { - return TUSB_ERROR_DEVICE_NOT_READY; - } + if ( !tusbh_custom_is_mounted(dev_addr, vendor_id, product_id) ) + { + return TUSB_ERROR_DEVICE_NOT_READY; + } - TU_ASSERT(p_buffer != NULL && length != 0, TUSB_ERROR_INVALID_PARA); + TU_ASSERT( p_buffer != NULL && length != 0, TUSB_ERROR_INVALID_PARA); - return TUSB_ERROR_NONE; + return TUSB_ERROR_NONE; } //--------------------------------------------------------------------+ // APPLICATION API (need to check parameters) //--------------------------------------------------------------------+ -tusb_error_t tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, - void *p_buffer, uint16_t length) +tusb_error_t tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length) { - TU_ASSERT_ERR(cush_validate_paras(dev_addr, vendor_id, product_id, p_buffer, length)); + TU_ASSERT_ERR( cush_validate_paras(dev_addr, vendor_id, product_id, p_buffer, length) ); - if (!hcd_pipe_is_idle(custom_interface[dev_addr - 1].pipe_in)) { - return TUSB_ERROR_INTERFACE_IS_BUSY; - } + if ( !hcd_pipe_is_idle(custom_interface[dev_addr-1].pipe_in) ) + { + return TUSB_ERROR_INTERFACE_IS_BUSY; + } - (void)usbh_edpt_xfer(custom_interface[dev_addr - 1].pipe_in, p_buffer, length); + (void) usbh_edpt_xfer( custom_interface[dev_addr-1].pipe_in, p_buffer, length); - return TUSB_ERROR_NONE; + return TUSB_ERROR_NONE; } -tusb_error_t tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, - void const *p_data, uint16_t length) +tusb_error_t tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void const * p_data, uint16_t length) { - TU_ASSERT_ERR(cush_validate_paras(dev_addr, vendor_id, product_id, p_data, length)); + TU_ASSERT_ERR( cush_validate_paras(dev_addr, vendor_id, product_id, p_data, length) ); - if (!hcd_pipe_is_idle(custom_interface[dev_addr - 1].pipe_out)) { - return TUSB_ERROR_INTERFACE_IS_BUSY; - } + if ( !hcd_pipe_is_idle(custom_interface[dev_addr-1].pipe_out) ) + { + return TUSB_ERROR_INTERFACE_IS_BUSY; + } - (void)usbh_edpt_xfer(custom_interface[dev_addr - 1].pipe_out, p_data, length); + (void) usbh_edpt_xfer( custom_interface[dev_addr-1].pipe_out, p_data, length); - return TUSB_ERROR_NONE; + return TUSB_ERROR_NONE; } //--------------------------------------------------------------------+ @@ -90,53 +90,57 @@ tusb_error_t tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t p //--------------------------------------------------------------------+ void cush_init(void) { - tu_memclr(&custom_interface, sizeof(custom_interface_info_t) * CFG_TUH_DEVICE_MAX); + tu_memclr(&custom_interface, sizeof(custom_interface_info_t) * CFG_TUH_DEVICE_MAX); } -tusb_error_t cush_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, - uint16_t *p_length) +tusb_error_t cush_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length) { - // FIXME quick hack to test lpc1k custom class with 2 bulk endpoints - uint8_t const *p_desc = (uint8_t const *)p_interface_desc; - p_desc = tu_desc_next(p_desc); + // FIXME quick hack to test lpc1k custom class with 2 bulk endpoints + uint8_t const *p_desc = (uint8_t const *) p_interface_desc; + p_desc = tu_desc_next(p_desc); - //------------- Bulk Endpoints Descriptor -------------// - for (uint32_t i = 0; i < 2; i++) { - tusb_desc_endpoint_t const *p_endpoint = (tusb_desc_endpoint_t const *)p_desc; - TU_ASSERT(TUSB_DESC_ENDPOINT == p_endpoint->bDescriptorType, TUSB_ERROR_INVALID_PARA); + //------------- Bulk Endpoints Descriptor -------------// + for(uint32_t i=0; i<2; i++) + { + tusb_desc_endpoint_t const *p_endpoint = (tusb_desc_endpoint_t const *) p_desc; + TU_ASSERT(TUSB_DESC_ENDPOINT == p_endpoint->bDescriptorType, TUSB_ERROR_INVALID_PARA); - pipe_handle_t *p_pipe_hdl = (p_endpoint->bEndpointAddress & TUSB_DIR_IN_MASK) ? - &custom_interface[dev_addr - 1].pipe_in : - &custom_interface[dev_addr - 1].pipe_out; - *p_pipe_hdl = usbh_edpt_open(dev_addr, p_endpoint, TUSB_CLASS_VENDOR_SPECIFIC); - TU_ASSERT(pipehandle_is_valid(*p_pipe_hdl), TUSB_ERROR_HCD_OPEN_PIPE_FAILED); + pipe_handle_t * p_pipe_hdl = ( p_endpoint->bEndpointAddress & TUSB_DIR_IN_MASK ) ? + &custom_interface[dev_addr-1].pipe_in : &custom_interface[dev_addr-1].pipe_out; + *p_pipe_hdl = usbh_edpt_open(dev_addr, p_endpoint, TUSB_CLASS_VENDOR_SPECIFIC); + TU_ASSERT ( pipehandle_is_valid(*p_pipe_hdl), TUSB_ERROR_HCD_OPEN_PIPE_FAILED ); - p_desc = tu_desc_next(p_desc); - } + p_desc = tu_desc_next(p_desc); + } - (*p_length) = sizeof(tusb_desc_interface_t) + 2 * sizeof(tusb_desc_endpoint_t); - return TUSB_ERROR_NONE; + (*p_length) = sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t); + return TUSB_ERROR_NONE; } -void cush_isr(pipe_handle_t pipe_hdl, xfer_result_t event) {} +void cush_isr(pipe_handle_t pipe_hdl, xfer_result_t event) +{ + +} void cush_close(uint8_t dev_addr) { - tusb_error_t err1, err2; - custom_interface_info_t *p_interface = &custom_interface[dev_addr - 1]; + tusb_error_t err1, err2; + custom_interface_info_t * p_interface = &custom_interface[dev_addr-1]; - // TODO re-consider to check pipe valid before calling pipe_close - if (pipehandle_is_valid(p_interface->pipe_in)) { - err1 = hcd_pipe_close(p_interface->pipe_in); - } + // TODO re-consider to check pipe valid before calling pipe_close + if( pipehandle_is_valid( p_interface->pipe_in ) ) + { + err1 = hcd_pipe_close( p_interface->pipe_in ); + } - if (pipehandle_is_valid(p_interface->pipe_out)) { - err2 = hcd_pipe_close(p_interface->pipe_out); - } + if ( pipehandle_is_valid( p_interface->pipe_out ) ) + { + err2 = hcd_pipe_close( p_interface->pipe_out ); + } - tu_memclr(p_interface, sizeof(custom_interface_info_t)); + tu_memclr(p_interface, sizeof(custom_interface_info_t)); - TU_ASSERT(err1 == TUSB_ERROR_NONE && err2 == TUSB_ERROR_NONE, (void)0); + TU_ASSERT(err1 == TUSB_ERROR_NONE && err2 == TUSB_ERROR_NONE, (void) 0 ); } #endif diff --git a/Libraries/tinyusb/src/class/vendor/vendor_host.h b/Libraries/tinyusb/src/class/vendor/vendor_host.h index 38698c2bfdc..acfebe7a4d8 100644 --- a/Libraries/tinyusb/src/class/vendor/vendor_host.h +++ b/Libraries/tinyusb/src/class/vendor/vendor_host.h @@ -30,42 +30,38 @@ #include "common/tusb_common.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif typedef struct { - pipe_handle_t pipe_in; - pipe_handle_t pipe_out; -} custom_interface_info_t; + pipe_handle_t pipe_in; + pipe_handle_t pipe_out; +}custom_interface_info_t; //--------------------------------------------------------------------+ // USBH-CLASS DRIVER API //--------------------------------------------------------------------+ -static inline bool tusbh_custom_is_mounted(uint8_t dev_addr, uint16_t vendor_id, - uint16_t product_id) +static inline bool tusbh_custom_is_mounted(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id) { - (void)vendor_id; // TODO check this later - (void)product_id; - // return (tusbh_device_get_mounted_class_flag(dev_addr) & TU_BIT(TUSB_CLASS_MAPPED_INDEX_END-1) ) != 0; - return false; + (void) vendor_id; // TODO check this later + (void) product_id; +// return (tusbh_device_get_mounted_class_flag(dev_addr) & TU_BIT(TUSB_CLASS_MAPPED_INDEX_END-1) ) != 0; + return false; } -bool tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void *p_buffer, - uint16_t length); -bool tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, - void const *p_data, uint16_t length); +bool tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length); +bool tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void const * p_data, uint16_t length); //--------------------------------------------------------------------+ // Internal Class Driver API //--------------------------------------------------------------------+ void cush_init(void); -bool cush_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, - uint16_t *p_length); +bool cush_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length); void cush_isr(pipe_handle_t pipe_hdl, xfer_result_t event); void cush_close(uint8_t dev_addr); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_VENDOR_HOST_H_ */ diff --git a/Libraries/tinyusb/src/class/video/video.h b/Libraries/tinyusb/src/class/video/video.h index 68a0ad533a4..b8a9b6369ed 100644 --- a/Libraries/tinyusb/src/class/video/video.h +++ b/Libraries/tinyusb/src/class/video/video.h @@ -30,176 +30,176 @@ #include "common/tusb_common.h" enum { - VIDEO_BCD_1_50 = 0x0150, + VIDEO_BCD_1_50 = 0x0150, }; // Table 3-19 Color Matching Descriptor typedef enum { - VIDEO_COLOR_PRIMARIES_UNDEFINED = 0x00, - VIDEO_COLOR_PRIMARIES_BT709, // sRGB (default) - VIDEO_COLOR_PRIMARIES_BT470_2M, - VIDEO_COLOR_PRIMARIES_BT470_2BG, - VIDEO_COLOR_PRIMARIES_SMPTE170M, - VIDEO_COLOR_PRIMARIES_SMPTE240M, + VIDEO_COLOR_PRIMARIES_UNDEFINED = 0x00, + VIDEO_COLOR_PRIMARIES_BT709, // sRGB (default) + VIDEO_COLOR_PRIMARIES_BT470_2M, + VIDEO_COLOR_PRIMARIES_BT470_2BG, + VIDEO_COLOR_PRIMARIES_SMPTE170M, + VIDEO_COLOR_PRIMARIES_SMPTE240M, } video_color_primaries_t; // Table 3-19 Color Matching Descriptor typedef enum { - VIDEO_COLOR_XFER_CH_UNDEFINED = 0x00, - VIDEO_COLOR_XFER_CH_BT709, // default - VIDEO_COLOR_XFER_CH_BT470_2M, - VIDEO_COLOR_XFER_CH_BT470_2BG, - VIDEO_COLOR_XFER_CH_SMPTE170M, - VIDEO_COLOR_XFER_CH_SMPTE240M, - VIDEO_COLOR_XFER_CH_LINEAR, - VIDEO_COLOR_XFER_CH_SRGB, + VIDEO_COLOR_XFER_CH_UNDEFINED = 0x00, + VIDEO_COLOR_XFER_CH_BT709, // default + VIDEO_COLOR_XFER_CH_BT470_2M, + VIDEO_COLOR_XFER_CH_BT470_2BG, + VIDEO_COLOR_XFER_CH_SMPTE170M, + VIDEO_COLOR_XFER_CH_SMPTE240M, + VIDEO_COLOR_XFER_CH_LINEAR, + VIDEO_COLOR_XFER_CH_SRGB, } video_color_transfer_characteristics_t; // Table 3-19 Color Matching Descriptor typedef enum { - VIDEO_COLOR_COEF_UNDEFINED = 0x00, - VIDEO_COLOR_COEF_BT709, - VIDEO_COLOR_COEF_FCC, - VIDEO_COLOR_COEF_BT470_2BG, - VIDEO_COLOR_COEF_SMPTE170M, // BT.601 default - VIDEO_COLOR_COEF_SMPTE240M, + VIDEO_COLOR_COEF_UNDEFINED = 0x00, + VIDEO_COLOR_COEF_BT709, + VIDEO_COLOR_COEF_FCC, + VIDEO_COLOR_COEF_BT470_2BG, + VIDEO_COLOR_COEF_SMPTE170M, // BT.601 default + VIDEO_COLOR_COEF_SMPTE240M, } video_color_matrix_coefficients_t; /* 4.2.1.2 Request Error Code Control */ typedef enum { - VIDEO_ERROR_NONE = 0, /* The request succeeded. */ - VIDEO_ERROR_NOT_READY, - VIDEO_ERROR_WRONG_STATE, - VIDEO_ERROR_POWER, - VIDEO_ERROR_OUT_OF_RANGE, - VIDEO_ERROR_INVALID_UNIT, - VIDEO_ERROR_INVALID_CONTROL, - VIDEO_ERROR_INVALID_REQUEST, - VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE, - VIDEO_ERROR_UNKNOWN = 0xFF, + VIDEO_ERROR_NONE = 0, /* The request succeeded. */ + VIDEO_ERROR_NOT_READY, + VIDEO_ERROR_WRONG_STATE, + VIDEO_ERROR_POWER, + VIDEO_ERROR_OUT_OF_RANGE, + VIDEO_ERROR_INVALID_UNIT, + VIDEO_ERROR_INVALID_CONTROL, + VIDEO_ERROR_INVALID_REQUEST, + VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE, + VIDEO_ERROR_UNKNOWN = 0xFF, } video_error_code_t; /* A.2 Interface Subclass */ typedef enum { - VIDEO_SUBCLASS_UNDEFINED = 0x00, - VIDEO_SUBCLASS_CONTROL, - VIDEO_SUBCLASS_STREAMING, - VIDEO_SUBCLASS_INTERFACE_COLLECTION, + VIDEO_SUBCLASS_UNDEFINED = 0x00, + VIDEO_SUBCLASS_CONTROL, + VIDEO_SUBCLASS_STREAMING, + VIDEO_SUBCLASS_INTERFACE_COLLECTION, } video_subclass_type_t; /* A.3 Interface Protocol */ typedef enum { - VIDEO_ITF_PROTOCOL_UNDEFINED = 0x00, - VIDEO_ITF_PROTOCOL_15, + VIDEO_ITF_PROTOCOL_UNDEFINED = 0x00, + VIDEO_ITF_PROTOCOL_15, } video_interface_protocol_code_t; /* A.5 Class-Specific VideoControl Interface Descriptor Subtypes */ typedef enum { - VIDEO_CS_ITF_VC_UNDEFINED = 0x00, - VIDEO_CS_ITF_VC_HEADER, - VIDEO_CS_ITF_VC_INPUT_TERMINAL, - VIDEO_CS_ITF_VC_OUTPUT_TERMINAL, - VIDEO_CS_ITF_VC_SELECTOR_UNIT, - VIDEO_CS_ITF_VC_PROCESSING_UNIT, - VIDEO_CS_ITF_VC_EXTENSION_UNIT, - VIDEO_CS_ITF_VC_ENCODING_UNIT, - VIDEO_CS_ITF_VC_MAX, + VIDEO_CS_ITF_VC_UNDEFINED = 0x00, + VIDEO_CS_ITF_VC_HEADER, + VIDEO_CS_ITF_VC_INPUT_TERMINAL, + VIDEO_CS_ITF_VC_OUTPUT_TERMINAL, + VIDEO_CS_ITF_VC_SELECTOR_UNIT, + VIDEO_CS_ITF_VC_PROCESSING_UNIT, + VIDEO_CS_ITF_VC_EXTENSION_UNIT, + VIDEO_CS_ITF_VC_ENCODING_UNIT, + VIDEO_CS_ITF_VC_MAX, } video_cs_vc_interface_subtype_t; /* A.6 Class-Specific VideoStreaming Interface Descriptor Subtypes */ typedef enum { - VIDEO_CS_ITF_VS_UNDEFINED = 0x00, - VIDEO_CS_ITF_VS_INPUT_HEADER = 0x01, - VIDEO_CS_ITF_VS_OUTPUT_HEADER = 0x02, - VIDEO_CS_ITF_VS_STILL_IMAGE_FRAME = 0x03, - VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED = 0x04, - VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED = 0x05, - VIDEO_CS_ITF_VS_FORMAT_MJPEG = 0x06, - VIDEO_CS_ITF_VS_FRAME_MJPEG = 0x07, - VIDEO_CS_ITF_VS_FORMAT_MPEG2TS = 0x0A, - VIDEO_CS_ITF_VS_FORMAT_DV = 0x0C, - VIDEO_CS_ITF_VS_COLORFORMAT = 0x0D, - VIDEO_CS_ITF_VS_FORMAT_FRAME_BASED = 0x10, - VIDEO_CS_ITF_VS_FRAME_FRAME_BASED = 0x11, - VIDEO_CS_ITF_VS_FORMAT_STREAM_BASED = 0x12, - VIDEO_CS_ITF_VS_FORMAT_H264 = 0x13, - VIDEO_CS_ITF_VS_FRAME_H264 = 0x14, - VIDEO_CS_ITF_VS_FORMAT_H264_SIMULCAST = 0x15, - VIDEO_CS_ITF_VS_FORMAT_VP8 = 0x16, - VIDEO_CS_ITF_VS_FRAME_VP8 = 0x17, - VIDEO_CS_ITF_VS_FORMAT_VP8_SIMULCAST = 0x18, + VIDEO_CS_ITF_VS_UNDEFINED = 0x00, + VIDEO_CS_ITF_VS_INPUT_HEADER = 0x01, + VIDEO_CS_ITF_VS_OUTPUT_HEADER = 0x02, + VIDEO_CS_ITF_VS_STILL_IMAGE_FRAME = 0x03, + VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED = 0x04, + VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED = 0x05, + VIDEO_CS_ITF_VS_FORMAT_MJPEG = 0x06, + VIDEO_CS_ITF_VS_FRAME_MJPEG = 0x07, + VIDEO_CS_ITF_VS_FORMAT_MPEG2TS = 0x0A, + VIDEO_CS_ITF_VS_FORMAT_DV = 0x0C, + VIDEO_CS_ITF_VS_COLORFORMAT = 0x0D, + VIDEO_CS_ITF_VS_FORMAT_FRAME_BASED = 0x10, + VIDEO_CS_ITF_VS_FRAME_FRAME_BASED = 0x11, + VIDEO_CS_ITF_VS_FORMAT_STREAM_BASED = 0x12, + VIDEO_CS_ITF_VS_FORMAT_H264 = 0x13, + VIDEO_CS_ITF_VS_FRAME_H264 = 0x14, + VIDEO_CS_ITF_VS_FORMAT_H264_SIMULCAST = 0x15, + VIDEO_CS_ITF_VS_FORMAT_VP8 = 0x16, + VIDEO_CS_ITF_VS_FRAME_VP8 = 0x17, + VIDEO_CS_ITF_VS_FORMAT_VP8_SIMULCAST = 0x18, } video_cs_vs_interface_subtype_t; /* A.7. Class-Specific Endpoint Descriptor Subtypes */ typedef enum { - VIDEO_CS_EP_UNDEFINED = 0x00, - VIDEO_CS_EP_GENERAL, - VIDEO_CS_EP_ENDPOINT, - VIDEO_CS_EP_INTERRUPT + VIDEO_CS_EP_UNDEFINED = 0x00, + VIDEO_CS_EP_GENERAL, + VIDEO_CS_EP_ENDPOINT, + VIDEO_CS_EP_INTERRUPT } video_cs_ep_subtype_t; /* A.8 Class-Specific Request Codes */ typedef enum { - VIDEO_REQUEST_UNDEFINED = 0x00, - VIDEO_REQUEST_SET_CUR = 0x01, - VIDEO_REQUEST_SET_CUR_ALL = 0x11, - VIDEO_REQUEST_GET_CUR = 0x81, - VIDEO_REQUEST_GET_MIN = 0x82, - VIDEO_REQUEST_GET_MAX = 0x83, - VIDEO_REQUEST_GET_RES = 0x84, - VIDEO_REQUEST_GET_LEN = 0x85, - VIDEO_REQUEST_GET_INFO = 0x86, - VIDEO_REQUEST_GET_DEF = 0x87, - VIDEO_REQUEST_GET_CUR_ALL = 0x91, - VIDEO_REQUEST_GET_MIN_ALL = 0x92, - VIDEO_REQUEST_GET_MAX_ALL = 0x93, - VIDEO_REQUEST_GET_RES_ALL = 0x94, - VIDEO_REQUEST_GET_DEF_ALL = 0x97 + VIDEO_REQUEST_UNDEFINED = 0x00, + VIDEO_REQUEST_SET_CUR = 0x01, + VIDEO_REQUEST_SET_CUR_ALL = 0x11, + VIDEO_REQUEST_GET_CUR = 0x81, + VIDEO_REQUEST_GET_MIN = 0x82, + VIDEO_REQUEST_GET_MAX = 0x83, + VIDEO_REQUEST_GET_RES = 0x84, + VIDEO_REQUEST_GET_LEN = 0x85, + VIDEO_REQUEST_GET_INFO = 0x86, + VIDEO_REQUEST_GET_DEF = 0x87, + VIDEO_REQUEST_GET_CUR_ALL = 0x91, + VIDEO_REQUEST_GET_MIN_ALL = 0x92, + VIDEO_REQUEST_GET_MAX_ALL = 0x93, + VIDEO_REQUEST_GET_RES_ALL = 0x94, + VIDEO_REQUEST_GET_DEF_ALL = 0x97 } video_control_request_t; /* A.9.1 VideoControl Interface Control Selectors */ typedef enum { - VIDEO_VC_CTL_UNDEFINED = 0x00, - VIDEO_VC_CTL_VIDEO_POWER_MODE, // 0x01 - VIDEO_VC_CTL_REQUEST_ERROR_CODE, // 0x02 + VIDEO_VC_CTL_UNDEFINED = 0x00, + VIDEO_VC_CTL_VIDEO_POWER_MODE, // 0x01 + VIDEO_VC_CTL_REQUEST_ERROR_CODE, // 0x02 } video_interface_control_selector_t; /* A.9.8 VideoStreaming Interface Control Selectors */ typedef enum { - VIDEO_VS_CTL_UNDEFINED = 0x00, - VIDEO_VS_CTL_PROBE, // 0x01 - VIDEO_VS_CTL_COMMIT, // 0x02 - VIDEO_VS_CTL_STILL_PROBE, // 0x03 - VIDEO_VS_CTL_STILL_COMMIT, // 0x04 - VIDEO_VS_CTL_STILL_IMAGE_TRIGGER, // 0x05 - VIDEO_VS_CTL_STREAM_ERROR_CODE, // 0x06 - VIDEO_VS_CTL_GENERATE_KEY_FRAME, // 0x07 - VIDEO_VS_CTL_UPDATE_FRAME_SEGMENT, // 0x08 - VIDEO_VS_CTL_SYNCH_DELAY_CONTROL, // 0x09 + VIDEO_VS_CTL_UNDEFINED = 0x00, + VIDEO_VS_CTL_PROBE, // 0x01 + VIDEO_VS_CTL_COMMIT, // 0x02 + VIDEO_VS_CTL_STILL_PROBE, // 0x03 + VIDEO_VS_CTL_STILL_COMMIT, // 0x04 + VIDEO_VS_CTL_STILL_IMAGE_TRIGGER, // 0x05 + VIDEO_VS_CTL_STREAM_ERROR_CODE, // 0x06 + VIDEO_VS_CTL_GENERATE_KEY_FRAME, // 0x07 + VIDEO_VS_CTL_UPDATE_FRAME_SEGMENT, // 0x08 + VIDEO_VS_CTL_SYNCH_DELAY_CONTROL, // 0x09 } video_interface_streaming_selector_t; /* B. Terminal Types */ typedef enum { - // Terminal - VIDEO_TT_VENDOR_SPECIFIC = 0x0100, - VIDEO_TT_STREAMING = 0x0101, - - // Input - VIDEO_ITT_VENDOR_SPECIFIC = 0x0200, - VIDEO_ITT_CAMERA = 0x0201, - VIDEO_ITT_MEDIA_TRANSPORT_INPUT = 0x0202, - - // Output - VIDEO_OTT_VENDOR_SPECIFIC = 0x0300, - VIDEO_OTT_DISPLAY = 0x0301, - VIDEO_OTT_MEDIA_TRANSPORT_OUTPUT = 0x0302, - - // External - VIDEO_ETT_VENDOR_SPEIFIC = 0x0400, - VIDEO_ETT_COMPOSITE_CONNECTOR = 0x0401, - VIDEO_ETT_SVIDEO_CONNECTOR = 0x0402, - VIDEO_ETT_COMPONENT_CONNECTOR = 0x0403, + // Terminal + VIDEO_TT_VENDOR_SPECIFIC = 0x0100, + VIDEO_TT_STREAMING = 0x0101, + + // Input + VIDEO_ITT_VENDOR_SPECIFIC = 0x0200, + VIDEO_ITT_CAMERA = 0x0201, + VIDEO_ITT_MEDIA_TRANSPORT_INPUT = 0x0202, + + // Output + VIDEO_OTT_VENDOR_SPECIFIC = 0x0300, + VIDEO_OTT_DISPLAY = 0x0301, + VIDEO_OTT_MEDIA_TRANSPORT_OUTPUT = 0x0302, + + // External + VIDEO_ETT_VENDOR_SPEIFIC = 0x0400, + VIDEO_ETT_COMPOSITE_CONNECTOR = 0x0401, + VIDEO_ETT_SVIDEO_CONNECTOR = 0x0402, + VIDEO_ETT_COMPONENT_CONNECTOR = 0x0403, } video_terminal_type_t; //--------------------------------------------------------------------+ @@ -208,62 +208,62 @@ typedef enum { /* 2.3.4.2 */ #define tusb_desc_video_control_header_nitf_t(_nitf) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint16_t bcdUVC; \ - uint16_t wTotalLength; \ - uint32_t dwClockFrequency; /* deprecated */ \ - uint8_t bInCollection; \ - uint8_t baInterfaceNr[_nitf]; \ - } - -typedef tusb_desc_video_control_header_nitf_t() tusb_desc_video_control_header_t; + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint16_t bcdUVC; \ + uint16_t wTotalLength; \ + uint32_t dwClockFrequency; /* deprecated */ \ + uint8_t bInCollection; \ + uint8_t baInterfaceNr[_nitf]; \ + } + +typedef tusb_desc_video_control_header_nitf_t() tusb_desc_video_control_header_t; typedef tusb_desc_video_control_header_nitf_t(1) tusb_desc_video_control_header_1itf_t; typedef tusb_desc_video_control_header_nitf_t(2) tusb_desc_video_control_header_2itf_t; typedef tusb_desc_video_control_header_nitf_t(3) tusb_desc_video_control_header_3itf_t; typedef tusb_desc_video_control_header_nitf_t(4) tusb_desc_video_control_header_4itf_t; typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bTerminalID; - uint16_t wTerminalType; - uint8_t bAssocTerminal; - uint8_t iTerminal; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t iTerminal; } tusb_desc_video_control_input_terminal_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_control_input_terminal_t) == 8, "size is not correct"); typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bTerminalID; - uint16_t wTerminalType; - uint8_t bAssocTerminal; - uint8_t bSourceID; - uint8_t iTerminal; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t bSourceID; + uint8_t iTerminal; } tusb_desc_video_control_output_terminal_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_control_output_terminal_t) == 9, "size is not correct"); typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bTerminalID; - uint16_t wTerminalType; - uint8_t bAssocTerminal; - uint8_t iTerminal; - - uint16_t wObjectiveFocalLengthMin; - uint16_t wObjectiveFocalLengthMax; - uint16_t wOcularFocalLength; - uint8_t bControlSize; - uint8_t bmControls[3]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t iTerminal; + + uint16_t wObjectiveFocalLengthMin; + uint16_t wObjectiveFocalLengthMax; + uint16_t wOcularFocalLength; + uint8_t bControlSize; + uint8_t bmControls[3]; } tusb_desc_video_control_camera_terminal_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_control_camera_terminal_t) == 18, "size is not correct"); @@ -273,80 +273,76 @@ TU_VERIFY_STATIC(sizeof(tusb_desc_video_control_camera_terminal_t) == 18, "size //--------------------------------------------------------------------+ /* 3.9.2.1 */ -#define tusb_desc_video_streaming_input_header_nbyte_t(_nb) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bNumFormats; /* Number of video payload Format descriptors for this interface */ \ - uint16_t wTotalLength; \ - uint8_t bEndpointAddress; \ - uint8_t bmInfo; /* Bit 0: dynamic format change supported */ \ - uint8_t bTerminalLink; \ - uint8_t bStillCaptureMethod; \ - uint8_t bTriggerSupport; /* Hardware trigger supported */ \ - uint8_t bTriggerUsage; \ - uint8_t bControlSize; /* sizeof of each control item */ \ - uint8_t bmaControls[_nb]; \ - } +#define tusb_desc_video_streaming_input_header_nbyte_t(_nb) \ + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bNumFormats; /* Number of video payload Format descriptors for this interface */ \ + uint16_t wTotalLength; \ + uint8_t bEndpointAddress; \ + uint8_t bmInfo; /* Bit 0: dynamic format change supported */ \ + uint8_t bTerminalLink; \ + uint8_t bStillCaptureMethod; \ + uint8_t bTriggerSupport; /* Hardware trigger supported */ \ + uint8_t bTriggerUsage; \ + uint8_t bControlSize; /* sizeof of each control item */ \ + uint8_t bmaControls[_nb]; \ + } typedef tusb_desc_video_streaming_input_header_nbyte_t() tusb_desc_video_streaming_input_header_t; -typedef tusb_desc_video_streaming_input_header_nbyte_t(1) - tusb_desc_video_streaming_input_header_1byte_t; -typedef tusb_desc_video_streaming_input_header_nbyte_t(2) - tusb_desc_video_streaming_input_header_2byte_t; -typedef tusb_desc_video_streaming_input_header_nbyte_t(3) - tusb_desc_video_streaming_input_header_3byte_t; -typedef tusb_desc_video_streaming_input_header_nbyte_t(4) - tusb_desc_video_streaming_input_header_4byte_t; +typedef tusb_desc_video_streaming_input_header_nbyte_t(1) tusb_desc_video_streaming_input_header_1byte_t; +typedef tusb_desc_video_streaming_input_header_nbyte_t(2) tusb_desc_video_streaming_input_header_2byte_t; +typedef tusb_desc_video_streaming_input_header_nbyte_t(3) tusb_desc_video_streaming_input_header_3byte_t; +typedef tusb_desc_video_streaming_input_header_nbyte_t(4) tusb_desc_video_streaming_input_header_4byte_t; /* 3.9.2.2 */ typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bNumFormats; - uint16_t wTotalLength; - uint8_t bEndpointAddress; - uint8_t bTerminalLink; - uint8_t bControlSize; - uint8_t bmaControls[]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bNumFormats; + uint16_t wTotalLength; + uint8_t bEndpointAddress; + uint8_t bTerminalLink; + uint8_t bControlSize; + uint8_t bmaControls[]; } tusb_desc_video_streaming_output_header_t; typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bNumFormats; - uint16_t wTotalLength; - uint8_t bEndpointAddress; - union { - struct { - uint8_t bmInfo; - uint8_t bTerminalLink; - uint8_t bStillCaptureMethod; - uint8_t bTriggerSupport; - uint8_t bTriggerUsage; - uint8_t bControlSize; - uint8_t bmaControls[]; - } input; - struct { - uint8_t bEndpointAddress; - uint8_t bTerminalLink; - uint8_t bControlSize; - uint8_t bmaControls[]; - } output; - }; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bNumFormats; + uint16_t wTotalLength; + uint8_t bEndpointAddress; + union { + struct { + uint8_t bmInfo; + uint8_t bTerminalLink; + uint8_t bStillCaptureMethod; + uint8_t bTriggerSupport; + uint8_t bTriggerUsage; + uint8_t bControlSize; + uint8_t bmaControls[]; + } input; + struct { + uint8_t bEndpointAddress; + uint8_t bTerminalLink; + uint8_t bControlSize; + uint8_t bmaControls[]; + } output; + }; } tusb_desc_video_streaming_inout_header_t; // 3.9.2.6 Color Matching Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bColorPrimaries; - uint8_t bTransferCharacteristics; - uint8_t bMatrixCoefficients; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bColorPrimaries; + uint8_t bTransferCharacteristics; + uint8_t bMatrixCoefficients; } tusb_desc_video_streaming_color_matching_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_streaming_color_matching_t) == 6, "size is not correct"); @@ -359,39 +355,39 @@ TU_VERIFY_STATIC(sizeof(tusb_desc_video_streaming_color_matching_t) == 6, "size //------------- Uncompressed -------------// // Uncompressed payload specs: 3.1.1 format descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint8_t bNumFrameDescriptors; // Number of frame descriptors for this format - uint8_t guidFormat[16]; - uint8_t bBitsPerPixel; - uint8_t bDefaultFrameIndex; - uint8_t bAspectRatioX; - uint8_t bAspectRatioY; - uint8_t bmInterlaceFlags; - uint8_t bCopyProtect; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; // Number of frame descriptors for this format + uint8_t guidFormat[16]; + uint8_t bBitsPerPixel; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; } tusb_desc_video_format_uncompressed_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_format_uncompressed_t) == 27, "size is not correct"); // Uncompressed payload specs: 3.1.2 frame descriptor -#define tusb_desc_video_frame_uncompressed_nint_t(_nint) \ - struct TU_ATTR_PACKED { \ - uint8_t bLength; \ - uint8_t bDescriptorType; \ - uint8_t bDescriptorSubType; \ - uint8_t bFrameIndex; \ - uint8_t bmCapabilities; \ - uint16_t wWidth; \ - uint16_t wHeight; \ - uint32_t dwMinBitRate; \ - uint32_t dwMaxBitRate; \ - uint32_t dwMaxVideoFrameBufferSize; /* deprecated in 1.5 */ \ - uint32_t dwDefaultFrameInterval; /* 100ns unit */ \ - uint8_t bFrameIntervalType; \ - uint32_t dwFrameInterval[_nint]; \ - } +#define tusb_desc_video_frame_uncompressed_nint_t(_nint) \ + struct TU_ATTR_PACKED { \ + uint8_t bLength; \ + uint8_t bDescriptorType; \ + uint8_t bDescriptorSubType; \ + uint8_t bFrameIndex; \ + uint8_t bmCapabilities; \ + uint16_t wWidth; \ + uint16_t wHeight; \ + uint32_t dwMinBitRate; \ + uint32_t dwMaxBitRate; \ + uint32_t dwMaxVideoFrameBufferSize; /* deprecated in 1.5 */ \ + uint32_t dwDefaultFrameInterval; /* 100ns unit */\ + uint8_t bFrameIntervalType; \ + uint32_t dwFrameInterval[_nint]; \ + } typedef tusb_desc_video_frame_uncompressed_nint_t() tusb_desc_video_frame_uncompressed_t; typedef tusb_desc_video_frame_uncompressed_nint_t(1) tusb_desc_video_frame_uncompressed_1int_t; @@ -402,23 +398,22 @@ typedef tusb_desc_video_frame_uncompressed_nint_t(4) tusb_desc_video_frame_uncom // continuous = 3 intervals: min, max, step typedef tusb_desc_video_frame_uncompressed_3int_t tusb_desc_video_frame_uncompressed_continuous_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_video_frame_uncompressed_continuous_t) == 38, - "size is not correct"); +TU_VERIFY_STATIC(sizeof(tusb_desc_video_frame_uncompressed_continuous_t) == 38, "size is not correct"); //------------- MJPEG -------------// // MJPEG payload specs: 3.1.1 format descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint8_t bNumFrameDescriptors; - uint8_t bmFlags; // Bit 0: fixed size samples (1 = yes) - uint8_t bDefaultFrameIndex; - uint8_t bAspectRatioX; - uint8_t bAspectRatioY; - uint8_t bmInterlaceFlags; - uint8_t bCopyProtect; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t bmFlags; // Bit 0: fixed size samples (1 = yes) + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; } tusb_desc_video_format_mjpeg_t; TU_VERIFY_STATIC(sizeof(tusb_desc_video_format_mjpeg_t) == 11, "size is not correct"); @@ -436,45 +431,45 @@ typedef tusb_desc_video_frame_mjpeg_3int_t tusb_desc_video_frame_mjpeg_continuou //------------- DV -------------// // DV payload specs: 3.1.1 typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint32_t dwMaxVideoFrameBufferSize; /* deprecated */ - uint8_t bFormatType; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint32_t dwMaxVideoFrameBufferSize; /* deprecated */ + uint8_t bFormatType; } tusb_desc_video_format_dv_t; // Frame Based payload specs: 3.1.1 typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint8_t bNumFrameDescriptors; - uint8_t guidFormat[16]; - uint8_t bBitsPerPixel; - uint8_t bDefaultFrameIndex; - uint8_t bAspectRatioX; - uint8_t bAspectRatioY; - uint8_t bmInterlaceFlags; - uint8_t bCopyProtect; - uint8_t bVaribaleSize; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t guidFormat[16]; + uint8_t bBitsPerPixel; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; + uint8_t bVaribaleSize; } tusb_desc_video_format_framebased_t; typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFrameIndex; - uint8_t bmCapabilities; - uint16_t wWidth; - uint16_t wHeight; - uint32_t dwMinBitRate; - uint32_t dwMaxBitRate; - uint32_t dwDefaultFrameInterval; - uint8_t bFrameIntervalType; - uint32_t dwBytesPerLine; - uint32_t dwFrameInterval[]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwBytesPerLine; + uint32_t dwFrameInterval[]; } tusb_desc_video_frame_framebased_t; //--------------------------------------------------------------------+ @@ -483,218 +478,197 @@ typedef struct TU_ATTR_PACKED { /* 2.4.3.3 */ typedef struct TU_ATTR_PACKED { - uint8_t bHeaderLength; - union { - uint8_t bmHeaderInfo; - struct { - uint8_t FrameID : 1; - uint8_t EndOfFrame : 1; - uint8_t PresentationTime : 1; - uint8_t SourceClockReference : 1; - uint8_t PayloadSpecific : 1; - uint8_t StillImage : 1; - uint8_t Error : 1; - uint8_t EndOfHeader : 1; - }; + uint8_t bHeaderLength; + union { + uint8_t bmHeaderInfo; + struct { + uint8_t FrameID: 1; + uint8_t EndOfFrame: 1; + uint8_t PresentationTime: 1; + uint8_t SourceClockReference: 1; + uint8_t PayloadSpecific: 1; + uint8_t StillImage: 1; + uint8_t Error: 1; + uint8_t EndOfHeader: 1; }; + }; } tusb_video_payload_header_t; /* 4.3.1.1 */ typedef struct TU_ATTR_PACKED { - union { - uint8_t bmHint; - struct TU_ATTR_PACKED { - uint16_t dwFrameInterval : 1; - uint16_t wKeyFrameRatel : 1; - uint16_t wPFrameRate : 1; - uint16_t wCompQuality : 1; - uint16_t wCompWindowSize : 1; - uint16_t : 0; - } Hint; - }; - uint8_t bFormatIndex; - uint8_t bFrameIndex; - uint32_t dwFrameInterval; - uint16_t wKeyFrameRate; - uint16_t wPFrameRate; - uint16_t wCompQuality; - uint16_t wCompWindowSize; - uint16_t wDelay; - uint32_t dwMaxVideoFrameSize; - uint32_t dwMaxPayloadTransferSize; - uint32_t dwClockFrequency; - union { - uint8_t bmFramingInfo; - struct TU_ATTR_PACKED { - uint8_t FrameID : 1; - uint8_t EndOfFrame : 1; - uint8_t EndOfSlice : 1; - uint8_t : 0; - } FramingInfo; - }; - uint8_t bPreferedVersion; - uint8_t bMinVersion; - uint8_t bMaxVersion; - uint8_t bUsage; - uint8_t bBitDepthLuma; - uint8_t bmSettings; - uint8_t bMaxNumberOfRefFramesPlus1; - uint16_t bmRateControlModes; - uint64_t bmLayoutPerStream; + union { + uint8_t bmHint; + struct TU_ATTR_PACKED { + uint16_t dwFrameInterval: 1; + uint16_t wKeyFrameRatel : 1; + uint16_t wPFrameRate : 1; + uint16_t wCompQuality : 1; + uint16_t wCompWindowSize: 1; + uint16_t : 0; + } Hint; + }; + uint8_t bFormatIndex; + uint8_t bFrameIndex; + uint32_t dwFrameInterval; + uint16_t wKeyFrameRate; + uint16_t wPFrameRate; + uint16_t wCompQuality; + uint16_t wCompWindowSize; + uint16_t wDelay; + uint32_t dwMaxVideoFrameSize; + uint32_t dwMaxPayloadTransferSize; + uint32_t dwClockFrequency; + union { + uint8_t bmFramingInfo; + struct TU_ATTR_PACKED { + uint8_t FrameID : 1; + uint8_t EndOfFrame: 1; + uint8_t EndOfSlice: 1; + uint8_t : 0; + } FramingInfo; + }; + uint8_t bPreferedVersion; + uint8_t bMinVersion; + uint8_t bMaxVersion; + uint8_t bUsage; + uint8_t bBitDepthLuma; + uint8_t bmSettings; + uint8_t bMaxNumberOfRefFramesPlus1; + uint16_t bmRateControlModes; + uint64_t bmLayoutPerStream; } video_probe_and_commit_control_t; -TU_VERIFY_STATIC(sizeof(video_probe_and_commit_control_t) == 48, "size is not correct"); - -#define TUD_VIDEO_DESC_IAD_LEN 8 -#define TUD_VIDEO_DESC_STD_VC_LEN 9 -#define TUD_VIDEO_DESC_CS_VC_LEN 12 -#define TUD_VIDEO_DESC_INPUT_TERM_LEN 8 -#define TUD_VIDEO_DESC_OUTPUT_TERM_LEN 9 -#define TUD_VIDEO_DESC_CAMERA_TERM_LEN 18 -#define TUD_VIDEO_DESC_STD_VS_LEN 9 -#define TUD_VIDEO_DESC_CS_VS_IN_LEN 13 -#define TUD_VIDEO_DESC_CS_VS_OUT_LEN 9 -#define TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN 27 -#define TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN 11 +TU_VERIFY_STATIC( sizeof(video_probe_and_commit_control_t) == 48, "size is not correct"); + +#define TUD_VIDEO_DESC_IAD_LEN 8 +#define TUD_VIDEO_DESC_STD_VC_LEN 9 +#define TUD_VIDEO_DESC_CS_VC_LEN 12 +#define TUD_VIDEO_DESC_INPUT_TERM_LEN 8 +#define TUD_VIDEO_DESC_OUTPUT_TERM_LEN 9 +#define TUD_VIDEO_DESC_CAMERA_TERM_LEN 18 +#define TUD_VIDEO_DESC_STD_VS_LEN 9 +#define TUD_VIDEO_DESC_CS_VS_IN_LEN 13 +#define TUD_VIDEO_DESC_CS_VS_OUT_LEN 9 +#define TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN 27 +#define TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN 11 #define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN 38 #define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC_LEN 26 -#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN 38 -#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC_LEN 26 -#define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN 6 +#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN 38 +#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC_LEN 26 +#define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN 6 /* 2.2 compression formats */ -#define TUD_VIDEO_GUID_YUY2 \ - 0x59, 0x55, 0x59, 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 -#define TUD_VIDEO_GUID_NV12 \ - 0x4E, 0x56, 0x31, 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 -#define TUD_VIDEO_GUID_M420 \ - 0x4D, 0x34, 0x32, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 -#define TUD_VIDEO_GUID_I420 \ - 0x49, 0x34, 0x32, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 - -#define TUD_VIDEO_DESC_IAD(_firstitf, _nitfs, _stridx) \ - TUD_VIDEO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, _firstitf, _nitfs, TUSB_CLASS_VIDEO, \ - VIDEO_SUBCLASS_INTERFACE_COLLECTION, VIDEO_ITF_PROTOCOL_UNDEFINED, _stridx - -#define TUD_VIDEO_DESC_STD_VC(_itfnum, _nEPs, _stridx) \ - TUD_VIDEO_DESC_STD_VC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, _nEPs, \ - TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_CONTROL, VIDEO_ITF_PROTOCOL_15, _stridx +#define TUD_VIDEO_GUID_YUY2 0x59,0x55,0x59,0x32,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 +#define TUD_VIDEO_GUID_NV12 0x4E,0x56,0x31,0x32,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 +#define TUD_VIDEO_GUID_M420 0x4D,0x34,0x32,0x30,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 +#define TUD_VIDEO_GUID_I420 0x49,0x34,0x32,0x30,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 + +#define TUD_VIDEO_DESC_IAD(_firstitf, _nitfs, _stridx) \ + TUD_VIDEO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, \ + _firstitf, _nitfs, TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_INTERFACE_COLLECTION, \ + VIDEO_ITF_PROTOCOL_UNDEFINED, _stridx + +#define TUD_VIDEO_DESC_STD_VC(_itfnum, _nEPs, _stridx) \ + TUD_VIDEO_DESC_STD_VC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, \ + _nEPs, TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_CONTROL, VIDEO_ITF_PROTOCOL_15, _stridx /* 3.7.2 */ -#define TUD_VIDEO_DESC_CS_VC(_bcdUVC, _totallen, _clkfreq, ...) \ - TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ - VIDEO_CS_ITF_VC_HEADER, U16_TO_U8S_LE(_bcdUVC), \ - U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__))), \ - U32_TO_U8S_LE(_clkfreq), TU_ARGS_NUM(__VA_ARGS__), __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VC(_bcdUVC, _totallen, _clkfreq, ...) \ + TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_HEADER, \ + U16_TO_U8S_LE(_bcdUVC), U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VC_LEN + (TU_ARGS_NUM(__VA_ARGS__))), \ + U32_TO_U8S_LE(_clkfreq), TU_ARGS_NUM(__VA_ARGS__), __VA_ARGS__ /* 3.7.2.1 */ -#define TUD_VIDEO_DESC_INPUT_TERM(_tid, _tt, _at, _stridx) \ - TUD_VIDEO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_INPUT_TERMINAL, _tid, \ - U16_TO_U8S_LE(_tt), _at, _stridx +#define TUD_VIDEO_DESC_INPUT_TERM(_tid, _tt, _at, _stridx) \ + TUD_VIDEO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_INPUT_TERMINAL, \ + _tid, U16_TO_U8S_LE(_tt), _at, _stridx /* 3.7.2.2 */ -#define TUD_VIDEO_DESC_OUTPUT_TERM(_tid, _tt, _at, _srcid, _stridx) \ - TUD_VIDEO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_OUTPUT_TERMINAL, _tid, \ - U16_TO_U8S_LE(_tt), _at, _srcid, _stridx +#define TUD_VIDEO_DESC_OUTPUT_TERM(_tid, _tt, _at, _srcid, _stridx) \ + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_OUTPUT_TERMINAL, \ + _tid, U16_TO_U8S_LE(_tt), _at, _srcid, _stridx /* 3.7.2.3 */ -#define TUD_VIDEO_DESC_CAMERA_TERM(_tid, _at, _stridx, _focal_min, _focal_max, _focal, _ctls) \ - TUD_VIDEO_DESC_CAMERA_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_INPUT_TERMINAL, _tid, \ - U16_TO_U8S_LE(VIDEO_ITT_CAMERA), _at, _stridx, U16_TO_U8S_LE(_focal_min), \ - U16_TO_U8S_LE(_focal_max), U16_TO_U8S_LE(_focal), 3, TU_U32_BYTE0(_ctls), \ - TU_U32_BYTE1(_ctls), TU_U32_BYTE2(_ctls) +#define TUD_VIDEO_DESC_CAMERA_TERM(_tid, _at, _stridx, _focal_min, _focal_max, _focal, _ctls) \ + TUD_VIDEO_DESC_CAMERA_TERM_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VC_INPUT_TERMINAL, \ + _tid, U16_TO_U8S_LE(VIDEO_ITT_CAMERA), _at, _stridx, \ + U16_TO_U8S_LE(_focal_min), U16_TO_U8S_LE(_focal_max), U16_TO_U8S_LE(_focal), 3, \ + TU_U32_BYTE0(_ctls), TU_U32_BYTE1(_ctls), TU_U32_BYTE2(_ctls) /* 3.9.1 */ -#define TUD_VIDEO_DESC_STD_VS(_itfnum, _alt, _epn, _stridx) \ - TUD_VIDEO_DESC_STD_VS_LEN, TUSB_DESC_INTERFACE, _itfnum, _alt, _epn, TUSB_CLASS_VIDEO, \ - VIDEO_SUBCLASS_STREAMING, VIDEO_ITF_PROTOCOL_15, _stridx +#define TUD_VIDEO_DESC_STD_VS(_itfnum, _alt, _epn, _stridx) \ + TUD_VIDEO_DESC_STD_VS_LEN, TUSB_DESC_INTERFACE, _itfnum, _alt, \ + _epn, TUSB_CLASS_VIDEO, VIDEO_SUBCLASS_STREAMING, VIDEO_ITF_PROTOCOL_15, _stridx /* 3.9.2.1 */ -#define TUD_VIDEO_DESC_CS_VS_INPUT(_numfmt, _totallen, _ep, _inf, _termlnk, _sticaptmeth, _trgspt, \ - _trgusg, ...) \ - TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ - VIDEO_CS_ITF_VS_INPUT_HEADER, _numfmt, \ - U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_IN_LEN + \ - (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ - _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, (TU_ARGS_NUM(__VA_ARGS__)), \ - __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VS_INPUT(_numfmt, _totallen, _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, ...) \ + TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ + VIDEO_CS_ITF_VS_INPUT_HEADER, _numfmt, \ + U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_IN_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ + _ep, _inf, _termlnk, _sticaptmeth, _trgspt, _trgusg, (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ /* 3.9.2.2 */ -#define TUD_VIDEO_DESC_CS_VS_OUTPUT(_numfmt, _totallen, _ep, _inf, _termlnk, ...) \ - TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ - VIDEO_CS_ITF_VS_OUTPUT_HEADER, _numfmt, \ - U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_OUT_LEN + \ - (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ - _ep, _inf, _termlnk, (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VS_OUTPUT(_numfmt, _totallen, _ep, _inf, _termlnk, ...) \ + TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__)), TUSB_DESC_CS_INTERFACE, \ + VIDEO_CS_ITF_VS_OUTPUT_HEADER, _numfmt, \ + U16_TO_U8S_LE((_totallen) + TUD_VIDEO_DESC_CS_VS_OUT_LEN + (_numfmt) * (TU_ARGS_NUM(__VA_ARGS__))), \ + _ep, _inf, _termlnk, (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ /* Uncompressed 3.1.1 */ -#define TUD_VIDEO_GUID(_g0, _g1, _g2, _g3, _g4, _g5, _g6, _g7, _g8, _g9, _g10, _g11, _g12, _g13, \ - _g14, _g15) \ - _g0, _g1, _g2, _g3, _g4, _g5, _g6, _g7, _g8, _g9, _g10, _g11, _g12, _g13, _g14, _g15 +#define TUD_VIDEO_GUID(_g0,_g1,_g2,_g3,_g4,_g5,_g6,_g7,_g8,_g9,_g10,_g11,_g12,_g13,_g14,_g15) _g0,_g1,_g2,_g3,_g4,_g5,_g6,_g7,_g8,_g9,_g10,_g11,_g12,_g13,_g14,_g15 -#define TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfrmdesc, _guid, _bitsperpix, _frmidx, _asrx, \ - _asry, _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN, TUSB_DESC_CS_INTERFACE, \ - VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED, _fmtidx, _numfrmdesc, TUD_VIDEO_GUID(_guid), \ - _bitsperpix, _frmidx, _asrx, _asry, _interlace, _cp +#define TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR(_fmtidx, _numfrmdesc, \ + _guid, _bitsperpix, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED, \ + _fmtidx, _numfrmdesc, TUD_VIDEO_GUID(_guid), \ + _bitsperpix, _frmidx, _asrx, _asry, _interlace, _cp /* Uncompressed 3.1.2 Table 3-3 */ -#define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(_frmidx, _cap, _width, _height, _minbr, _maxbr, \ - _maxfrmbufsz, _frminterval, _minfrminterval, \ - _maxfrminterval, _frmintervalstep) \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN, TUSB_DESC_CS_INTERFACE, \ - VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED, _frmidx, _cap, U16_TO_U8S_LE(_width), \ - U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ - U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), 0, \ - U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), \ - U32_TO_U8S_LE(_frmintervalstep) +#define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, _minfrminterval, _maxfrminterval, _frmintervalstep) \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED, \ + _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ + U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), 0, \ + U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), U32_TO_U8S_LE(_frmintervalstep) /* Uncompressed 3.1.2 Table 3-4 */ -#define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, \ - _maxfrmbufsz, _frminterval, ...) \ - TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ - TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED, _frmidx, _cap, \ - U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), \ - U32_TO_U8S_LE(_maxbr), U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), \ - (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, ...) \ + TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ + TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED, \ + _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ + U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ /* Motion-JPEG 3.1.1 Table 3-1 */ -#define TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(_fmtidx, _numfrmdesc, _fixed_sz, _frmidx, _asrx, _asry, \ - _interlace, _cp) \ - TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FORMAT_MJPEG, \ - _fmtidx, _numfrmdesc, _fixed_sz, _frmidx, _asrx, _asry, _interlace, _cp +#define TUD_VIDEO_DESC_CS_VS_FMT_MJPEG(_fmtidx, _numfrmdesc, _fixed_sz, _frmidx, _asrx, _asry, _interlace, _cp) \ + TUD_VIDEO_DESC_CS_VS_FMT_MJPEG_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FORMAT_MJPEG, \ + _fmtidx, _numfrmdesc, _fixed_sz, _frmidx, _asrx, _asry, _interlace, _cp /* Motion-JPEG 3.1.1 Table 3-2 and 3-3 */ -#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(_frmidx, _cap, _width, _height, _minbr, _maxbr, \ - _maxfrmbufsz, _frminterval, _minfrminterval, \ - _maxfrminterval, _frmintervalstep) \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_MJPEG, \ - _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), \ - U32_TO_U8S_LE(_maxbr), U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), 0, \ - U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), \ - U32_TO_U8S_LE(_frmintervalstep) +#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, _minfrminterval, _maxfrminterval, _frmintervalstep) \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_CONT_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_MJPEG, \ + _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ + U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), 0, \ + U32_TO_U8S_LE(_minfrminterval), U32_TO_U8S_LE(_maxfrminterval), U32_TO_U8S_LE(_frmintervalstep) /* Motion-JPEG 3.1.1 Table 3-2 and 3-4 */ -#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, \ - _maxfrmbufsz, _frminterval, ...) \ - TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ - TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_MJPEG, _frmidx, _cap, U16_TO_U8S_LE(_width), \ - U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ - U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), (TU_ARGS_NUM(__VA_ARGS__)), \ - __VA_ARGS__ +#define TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC(_frmidx, _cap, _width, _height, _minbr, _maxbr, _maxfrmbufsz, _frminterval, ...) \ + TUD_VIDEO_DESC_CS_VS_FRM_MJPEG_DISC_LEN + (TU_ARGS_NUM(__VA_ARGS__)) * 4, \ + TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_FRAME_MJPEG, \ + _frmidx, _cap, U16_TO_U8S_LE(_width), U16_TO_U8S_LE(_height), U32_TO_U8S_LE(_minbr), U32_TO_U8S_LE(_maxbr), \ + U32_TO_U8S_LE(_maxfrmbufsz), U32_TO_U8S_LE(_frminterval), (TU_ARGS_NUM(__VA_ARGS__)), __VA_ARGS__ /* 3.9.2.6 */ -#define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(_color, _trns, _mat) \ - TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_COLORFORMAT, \ - _color, _trns, _mat +#define TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(_color, _trns, _mat) \ + TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN, \ + TUSB_DESC_CS_INTERFACE, VIDEO_CS_ITF_VS_COLORFORMAT, \ + _color, _trns, _mat /* 3.10.1.1 */ -#define TUD_VIDEO_DESC_EP_ISO(_ep, _epsize, _ep_interval) \ - 7, TUSB_DESC_ENDPOINT, _ep, (uint8_t)(TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS), \ - U16_TO_U8S_LE(_epsize), _ep_interval +#define TUD_VIDEO_DESC_EP_ISO(_ep, _epsize, _ep_interval) \ + 7, TUSB_DESC_ENDPOINT, _ep, (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS),\ + U16_TO_U8S_LE(_epsize), _ep_interval /* 3.10.1.2 */ #define TUD_VIDEO_DESC_EP_BULK(_ep, _epsize, _ep_interval) \ - 7, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), _ep_interval + 7, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), _ep_interval #endif diff --git a/Libraries/tinyusb/src/class/video/video_device.c b/Libraries/tinyusb/src/class/video/video_device.c index a4d6d68bfbc..4218835aab9 100644 --- a/Libraries/tinyusb/src/class/video/video_device.c +++ b/Libraries/tinyusb/src/class/video/video_device.c @@ -36,115 +36,113 @@ // Level where CFG_TUSB_DEBUG must be at least for this driver is logged #ifndef CFG_TUD_VIDEO_LOG_LEVEL -#define CFG_TUD_VIDEO_LOG_LEVEL CFG_TUD_LOG_LEVEL + #define CFG_TUD_VIDEO_LOG_LEVEL CFG_TUD_LOG_LEVEL #endif -#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_VIDEO_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_VIDEO_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ -#define VS_STATE_PROBING 0 /* Configuration in progress */ -#define VS_STATE_COMMITTED 1 /* Ready for streaming or Streaming via bulk endpoint */ -#define VS_STATE_STREAMING 2 /* Streaming via isochronous endpoint */ +#define VS_STATE_PROBING 0 /* Configuration in progress */ +#define VS_STATE_COMMITTED 1 /* Ready for streaming or Streaming via bulk endpoint */ +#define VS_STATE_STREAMING 2 /* Streaming via isochronous endpoint */ typedef struct { - tusb_desc_interface_t std; - tusb_desc_video_control_header_t ctl; + tusb_desc_interface_t std; + tusb_desc_video_control_header_t ctl; } tusb_desc_vc_itf_t; typedef struct { - tusb_desc_interface_t std; - tusb_desc_video_streaming_inout_header_t stm; + tusb_desc_interface_t std; + tusb_desc_video_streaming_inout_header_t stm; } tusb_desc_vs_itf_t; typedef union { - tusb_desc_video_control_header_t ctl; - tusb_desc_video_streaming_inout_header_t stm; + tusb_desc_video_control_header_t ctl; + tusb_desc_video_streaming_inout_header_t stm; } tusb_desc_video_itf_hdr_t; typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubtype; - uint8_t bEntityId; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubtype; + uint8_t bEntityId; } tusb_desc_cs_video_entity_itf_t; typedef union { - struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFormatIndex; - uint8_t bNumFrameDescriptors; - }; - tusb_desc_video_format_uncompressed_t uncompressed; - tusb_desc_video_format_mjpeg_t mjpeg; - tusb_desc_video_format_framebased_t frame_based; + struct TU_ATTR_PACKED { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + }; + tusb_desc_video_format_uncompressed_t uncompressed; + tusb_desc_video_format_mjpeg_t mjpeg; + tusb_desc_video_format_framebased_t frame_based; } tusb_desc_cs_video_fmt_t; typedef union { - struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDescriptorSubType; - uint8_t bFrameIndex; - uint8_t bmCapabilities; - uint16_t wWidth; - uint16_t wHeight; - }; - tusb_desc_video_frame_uncompressed_t uncompressed; - tusb_desc_video_frame_mjpeg_t mjpeg; - tusb_desc_video_frame_framebased_t frame_based; + struct TU_ATTR_PACKED { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + }; + tusb_desc_video_frame_uncompressed_t uncompressed; + tusb_desc_video_frame_mjpeg_t mjpeg; + tusb_desc_video_frame_framebased_t frame_based; } tusb_desc_cs_video_frm_t; /* video streaming interface */ typedef struct TU_ATTR_PACKED { - uint8_t index_vc; /* index of bound video control interface */ - uint8_t index_vs; /* index from the video control interface */ - struct { - uint16_t beg; /* Offset of the begging of video streaming interface descriptor */ - uint16_t end; /* Offset of the end of video streaming interface descriptor */ - uint16_t cur; /* Offset of the current settings */ - uint16_t ep[2]; /* Offset of endpoint descriptors. 0: streaming, 1: still capture */ - } desc; - uint8_t *buffer; /* frame buffer. assume linear buffer. no support for stride access */ - uint32_t bufsize; /* frame buffer size */ - uint32_t offset; /* offset for the next payload transfer */ - uint32_t max_payload_transfer_size; - uint8_t error_code; /* error code */ - uint8_t state; /* 0:probing 1:committed 2:streaming */ - - video_probe_and_commit_control_t probe_commit_payload; /* Probe and Commit control */ - /*------------- From this point, data is not cleared by bus reset -------------*/ - CFG_TUSB_MEM_ALIGN uint8_t - ep_buf[CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE]; /* EP transfer buffer for streaming */ + uint8_t index_vc; /* index of bound video control interface */ + uint8_t index_vs; /* index from the video control interface */ + struct { + uint16_t beg; /* Offset of the begging of video streaming interface descriptor */ + uint16_t end; /* Offset of the end of video streaming interface descriptor */ + uint16_t cur; /* Offset of the current settings */ + uint16_t ep[2]; /* Offset of endpoint descriptors. 0: streaming, 1: still capture */ + } desc; + uint8_t *buffer; /* frame buffer. assume linear buffer. no support for stride access */ + uint32_t bufsize; /* frame buffer size */ + uint32_t offset; /* offset for the next payload transfer */ + uint32_t max_payload_transfer_size; + uint8_t error_code;/* error code */ + uint8_t state; /* 0:probing 1:committed 2:streaming */ + + video_probe_and_commit_control_t probe_commit_payload; /* Probe and Commit control */ + /*------------- From this point, data is not cleared by bus reset -------------*/ + CFG_TUSB_MEM_ALIGN uint8_t ep_buf[CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE]; /* EP transfer buffer for streaming */ } videod_streaming_interface_t; /* video control interface */ typedef struct TU_ATTR_PACKED { - uint8_t const *beg; /* The head of the first video control interface descriptor */ - uint16_t len; /* Byte length of the descriptors */ - uint16_t cur; /* offset for current video control interface */ - uint8_t stm[CFG_TUD_VIDEO_STREAMING]; /* Indices of streaming interface */ - uint8_t error_code; /* error code */ - uint8_t power_mode; + uint8_t const *beg; /* The head of the first video control interface descriptor */ + uint16_t len; /* Byte length of the descriptors */ + uint16_t cur; /* offset for current video control interface */ + uint8_t stm[CFG_TUD_VIDEO_STREAMING]; /* Indices of streaming interface */ + uint8_t error_code; /* error code */ + uint8_t power_mode; - /*------------- From this point, data is not cleared by bus reset -------------*/ - // CFG_TUSB_MEM_ALIGN uint8_t ctl_buf[64]; /* EP transfer buffer for interrupt transfer */ + /*------------- From this point, data is not cleared by bus reset -------------*/ + // CFG_TUSB_MEM_ALIGN uint8_t ctl_buf[64]; /* EP transfer buffer for interrupt transfer */ } videod_interface_t; -#define ITF_STM_MEM_RESET_SIZE offsetof(videod_streaming_interface_t, ep_buf) +#define ITF_STM_MEM_RESET_SIZE offsetof(videod_streaming_interface_t, ep_buf) //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ CFG_TUD_MEM_SECTION tu_static videod_interface_t _videod_itf[CFG_TUD_VIDEO]; -CFG_TUD_MEM_SECTION tu_static videod_streaming_interface_t - _videod_streaming_itf[CFG_TUD_VIDEO_STREAMING]; +CFG_TUD_MEM_SECTION tu_static videod_streaming_interface_t _videod_streaming_itf[CFG_TUD_VIDEO_STREAMING]; -tu_static uint8_t const _cap_get = 0x1u; /* support for GET */ +tu_static uint8_t const _cap_get = 0x1u; /* support for GET */ tu_static uint8_t const _cap_get_set = 0x3u; /* support for GET and SET */ //--------------------------------------------------------------------+ @@ -153,34 +151,35 @@ tu_static uint8_t const _cap_get_set = 0x3u; /* support for GET and SET */ #if CFG_TUSB_DEBUG >= CFG_TUD_VIDEO_LOG_LEVEL static tu_lookup_entry_t const tu_lookup_video_request[] = { - { .key = VIDEO_REQUEST_UNDEFINED, .data = "Undefined" }, - { .key = VIDEO_REQUEST_SET_CUR, .data = "SetCur" }, - { .key = VIDEO_REQUEST_SET_CUR_ALL, .data = "SetCurAll" }, - { .key = VIDEO_REQUEST_GET_CUR, .data = "GetCur" }, - { .key = VIDEO_REQUEST_GET_MIN, .data = "GetMin" }, - { .key = VIDEO_REQUEST_GET_MAX, .data = "GetMax" }, - { .key = VIDEO_REQUEST_GET_RES, .data = "GetRes" }, - { .key = VIDEO_REQUEST_GET_LEN, .data = "GetLen" }, - { .key = VIDEO_REQUEST_GET_INFO, .data = "GetInfo" }, - { .key = VIDEO_REQUEST_GET_DEF, .data = "GetDef" }, - { .key = VIDEO_REQUEST_GET_CUR_ALL, .data = "GetCurAll" }, - { .key = VIDEO_REQUEST_GET_MIN_ALL, .data = "GetMinAll" }, - { .key = VIDEO_REQUEST_GET_MAX_ALL, .data = "GetMaxAll" }, - { .key = VIDEO_REQUEST_GET_RES_ALL, .data = "GetResAll" }, - { .key = VIDEO_REQUEST_GET_DEF_ALL, .data = "GetDefAll" }, + {.key = VIDEO_REQUEST_UNDEFINED, .data = "Undefined"}, + {.key = VIDEO_REQUEST_SET_CUR, .data = "SetCur"}, + {.key = VIDEO_REQUEST_SET_CUR_ALL, .data = "SetCurAll"}, + {.key = VIDEO_REQUEST_GET_CUR, .data = "GetCur"}, + {.key = VIDEO_REQUEST_GET_MIN, .data = "GetMin"}, + {.key = VIDEO_REQUEST_GET_MAX, .data = "GetMax"}, + {.key = VIDEO_REQUEST_GET_RES, .data = "GetRes"}, + {.key = VIDEO_REQUEST_GET_LEN, .data = "GetLen"}, + {.key = VIDEO_REQUEST_GET_INFO, .data = "GetInfo"}, + {.key = VIDEO_REQUEST_GET_DEF, .data = "GetDef"}, + {.key = VIDEO_REQUEST_GET_CUR_ALL, .data = "GetCurAll"}, + {.key = VIDEO_REQUEST_GET_MIN_ALL, .data = "GetMinAll"}, + {.key = VIDEO_REQUEST_GET_MAX_ALL, .data = "GetMaxAll"}, + {.key = VIDEO_REQUEST_GET_RES_ALL, .data = "GetResAll"}, + {.key = VIDEO_REQUEST_GET_DEF_ALL, .data = "GetDefAll"}, }; -static tu_lookup_table_t const tu_table_video_request = { .count = TU_ARRAY_SIZE( - tu_lookup_video_request), - .items = tu_lookup_video_request }; +static tu_lookup_table_t const tu_table_video_request = { + .count = TU_ARRAY_SIZE(tu_lookup_video_request), + .items = tu_lookup_video_request +}; -static char const *const tu_str_video_vc_control_selector[] = { +static char const* const tu_str_video_vc_control_selector[] = { "Undefined", "Video Power Mode", "Request Error Code", }; -static char const *const tu_str_video_vs_control_selector[] = { +static char const* const tu_str_video_vs_control_selector[] = { "Undefined", "Probe", "Commit", @@ -204,9 +203,8 @@ static char const *const tu_str_video_vs_control_selector[] = { * @param[in] desc interface descriptor * * @return bInterfaceNumber */ -static inline uint8_t _desc_itfnum(void const *desc) -{ - return ((uint8_t const *)desc)[2]; +static inline uint8_t _desc_itfnum(void const *desc) { + return ((uint8_t const*)desc)[2]; } /** Get endpoint address from the endpoint descriptor @@ -214,9 +212,8 @@ static inline uint8_t _desc_itfnum(void const *desc) * @param[in] desc endpoint descriptor * * @return bEndpointAddress */ -static inline uint8_t _desc_ep_addr(void const *desc) -{ - return ((uint8_t const *)desc)[2]; +static inline uint8_t _desc_ep_addr(void const *desc) { + return ((uint8_t const*)desc)[2]; } /** Get instance of streaming interface @@ -225,29 +222,22 @@ static inline uint8_t _desc_ep_addr(void const *desc) * @param[in] stm_idx index number of streaming interface * * @return instance */ -static videod_streaming_interface_t *_get_instance_streaming(uint_fast8_t ctl_idx, - uint_fast8_t stm_idx) -{ - videod_interface_t *ctl = &_videod_itf[ctl_idx]; - if (!ctl->beg) - return NULL; - videod_streaming_interface_t *stm = &_videod_streaming_itf[ctl->stm[stm_idx]]; - if (!stm->desc.beg) - return NULL; - return stm; +static videod_streaming_interface_t* _get_instance_streaming(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { + videod_interface_t *ctl = &_videod_itf[ctl_idx]; + if (!ctl->beg) return NULL; + videod_streaming_interface_t *stm = &_videod_streaming_itf[ctl->stm[stm_idx]]; + if (!stm->desc.beg) return NULL; + return stm; } -static tusb_desc_vc_itf_t const *_get_desc_vc(videod_interface_t const *self) -{ - return (tusb_desc_vc_itf_t const *)(self->beg + self->cur); +static tusb_desc_vc_itf_t const* _get_desc_vc(videod_interface_t const *self) { + return (tusb_desc_vc_itf_t const *)(self->beg + self->cur); } -static tusb_desc_vs_itf_t const *_get_desc_vs(videod_streaming_interface_t const *self) -{ - if (!self->desc.cur) - return NULL; - uint8_t const *desc = _videod_itf[self->index_vc].beg; - return (tusb_desc_vs_itf_t const *)(desc + self->desc.cur); +static tusb_desc_vs_itf_t const* _get_desc_vs(videod_streaming_interface_t const *self) { + if (!self->desc.cur) return NULL; + uint8_t const *desc = _videod_itf[self->index_vc].beg; + return (tusb_desc_vs_itf_t const*)(desc + self->desc.cur); } /** Find the first descriptor of a given type @@ -258,13 +248,12 @@ static tusb_desc_vs_itf_t const *_get_desc_vs(videod_streaming_interface_t const * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const *_find_desc(void const *beg, void const *end, uint_fast8_t desc_type) -{ - void const *cur = beg; - while ((cur < end) && (desc_type != tu_desc_type(cur))) { - cur = tu_desc_next(cur); - } - return cur; +static void const* _find_desc(void const *beg, void const *end, uint_fast8_t desc_type) { + void const *cur = beg; + while ((cur < end) && (desc_type != tu_desc_type(cur))) { + cur = tu_desc_next(cur); + } + return cur; } /** Find the first descriptor of two given types @@ -276,15 +265,13 @@ static void const *_find_desc(void const *beg, void const *end, uint_fast8_t des * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const *_find_desc_2_type(void const *beg, void const *end, uint_fast8_t desc_type_0, - uint_fast8_t desc_type_1) +static void const* _find_desc_2_type(void const *beg, void const *end, uint_fast8_t desc_type_0, uint_fast8_t desc_type_1) { - void const *cur = beg; - while ((cur < end) && (desc_type_0 != tu_desc_type(cur)) && - (desc_type_1 != tu_desc_type(cur))) { - cur = tu_desc_next(cur); - } - return cur; + void const *cur = beg; + while ((cur < end) && (desc_type_0 != tu_desc_type(cur)) && (desc_type_1 != tu_desc_type(cur))) { + cur = tu_desc_next(cur); + } + return cur; } /** Find the first descriptor specified by the arguments @@ -297,17 +284,18 @@ static void const *_find_desc_2_type(void const *beg, void const *end, uint_fast * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const *_find_desc_3(void const *beg, void const *end, uint_fast8_t desc_type, - uint_fast8_t element_0, uint_fast8_t element_1) -{ - for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, desc_type)) { - uint8_t const *p = (uint8_t const *)cur; - if ((p[2] == element_0) && (p[3] == element_1)) { - return cur; - } - cur = tu_desc_next(cur); +static void const* _find_desc_3(void const *beg, void const *end, + uint_fast8_t desc_type, + uint_fast8_t element_0, + uint_fast8_t element_1) { + for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, desc_type)) { + uint8_t const *p = (uint8_t const *)cur; + if ((p[2] == element_0) && (p[3] == element_1)) { + return cur; } - return end; + cur = tu_desc_next(cur); + } + return end; } /** Return the next interface descriptor which has another interface number. @@ -321,15 +309,14 @@ static void const *_find_desc_3(void const *beg, void const *end, uint_fast8_t d * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const *_next_desc_itf(void const *beg, void const *end) -{ - void const *cur = beg; - uint_fast8_t itfnum = ((tusb_desc_interface_t const *)cur)->bInterfaceNumber; - while ((cur < end) && (itfnum == ((tusb_desc_interface_t const *)cur)->bInterfaceNumber)) { - cur = _find_desc_2_type(tu_desc_next(cur), end, TUSB_DESC_INTERFACE, - TUSB_DESC_INTERFACE_ASSOCIATION); - } - return cur; +static void const* _next_desc_itf(void const *beg, void const *end) { + void const *cur = beg; + uint_fast8_t itfnum = ((tusb_desc_interface_t const*)cur)->bInterfaceNumber; + while ((cur < end) && + (itfnum == ((tusb_desc_interface_t const*)cur)->bInterfaceNumber)) { + cur = _find_desc_2_type(tu_desc_next(cur), end, TUSB_DESC_INTERFACE, TUSB_DESC_INTERFACE_ASSOCIATION); + } + return cur; } /** Find the first interface descriptor with the specified interface number and alternate setting number. @@ -341,10 +328,9 @@ static void const *_next_desc_itf(void const *beg, void const *end) * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static inline uint8_t const *_find_desc_itf(void const *beg, void const *end, uint_fast8_t itfnum, - uint_fast8_t altnum) +static inline uint8_t const* _find_desc_itf(void const *beg, void const *end, uint_fast8_t itfnum, uint_fast8_t altnum) { - return (uint8_t const *)_find_desc_3(beg, end, TUSB_DESC_INTERFACE, itfnum, altnum); + return (uint8_t const*) _find_desc_3(beg, end, TUSB_DESC_INTERFACE, itfnum, altnum); } /** Find the first endpoint descriptor belonging to the current interface descriptor. @@ -356,23 +342,21 @@ static inline uint8_t const *_find_desc_itf(void const *beg, void const *end, ui * * @return The pointer for endpoint descriptor. * @retval end did not found endpoint descriptor */ -static void const *_find_desc_ep(void const *beg, void const *end) +static void const* _find_desc_ep(void const *beg, void const *end) { - for (void const *cur = beg; cur < end; cur = tu_desc_next(cur)) { - uint_fast8_t desc_type = tu_desc_type(cur); - if (TUSB_DESC_ENDPOINT == desc_type) - return cur; - if (TUSB_DESC_INTERFACE == desc_type) - break; - } - return end; + for (void const *cur = beg; cur < end; cur = tu_desc_next(cur)) { + uint_fast8_t desc_type = tu_desc_type(cur); + if (TUSB_DESC_ENDPOINT == desc_type) return cur; + if (TUSB_DESC_INTERFACE == desc_type) break; + } + return end; } /** Return the end of the video control descriptor. */ -static inline void const *_end_of_control_descriptor(void const *desc) +static inline void const* _end_of_control_descriptor(void const *desc) { - tusb_desc_vc_itf_t const *vc = (tusb_desc_vc_itf_t const *)desc; - return ((uint8_t const *)desc) + vc->std.bLength + tu_le16toh(vc->ctl.wTotalLength); + tusb_desc_vc_itf_t const *vc = (tusb_desc_vc_itf_t const *)desc; + return ((uint8_t const*) desc) + vc->std.bLength + tu_le16toh(vc->ctl.wTotalLength); } /** Find the first entity descriptor with the entity ID @@ -383,58 +367,61 @@ static inline void const *_end_of_control_descriptor(void const *desc) * * @return The pointer for interface descriptor. * @retval end did not found interface descriptor */ -static void const *_find_desc_entity(void const *desc, uint_fast8_t entityid) +static void const* _find_desc_entity(void const *desc, uint_fast8_t entityid) { - void const *end = _end_of_control_descriptor(desc); - for (void const *cur = desc; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { - tusb_desc_cs_video_entity_itf_t const *itf = (tusb_desc_cs_video_entity_itf_t const *)cur; - if ((VIDEO_CS_ITF_VC_INPUT_TERMINAL <= itf->bDescriptorSubtype && - itf->bDescriptorSubtype < VIDEO_CS_ITF_VC_MAX) && - itf->bEntityId == entityid) { - return itf; - } - cur = tu_desc_next(cur); + void const *end = _end_of_control_descriptor(desc); + for (void const *cur = desc; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { + tusb_desc_cs_video_entity_itf_t const *itf = (tusb_desc_cs_video_entity_itf_t const *)cur; + if ((VIDEO_CS_ITF_VC_INPUT_TERMINAL <= itf->bDescriptorSubtype + && itf->bDescriptorSubtype < VIDEO_CS_ITF_VC_MAX) + && itf->bEntityId == entityid) { + return itf; } - return end; + cur = tu_desc_next(cur); + } + return end; } /** Return the end of the video streaming descriptor. */ -static inline void const *_end_of_streaming_descriptor(void const *desc) +static inline void const* _end_of_streaming_descriptor(void const *desc) { - tusb_desc_vs_itf_t const *vs = (tusb_desc_vs_itf_t const *)desc; - return ((uint8_t const *)desc) + vs->std.bLength + tu_le16toh(vs->stm.wTotalLength); + tusb_desc_vs_itf_t const *vs = (tusb_desc_vs_itf_t const *)desc; + return ((uint8_t const*) desc) + vs->std.bLength + tu_le16toh(vs->stm.wTotalLength); } /** Find the first format descriptor with the specified format number. */ static inline void const *_find_desc_format(void const *beg, void const *end, uint_fast8_t fmtnum) { - for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { - uint8_t const *p = (uint8_t const *)cur; - uint_fast8_t fmt = p[2]; - if ((fmt == VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED || fmt == VIDEO_CS_ITF_VS_FORMAT_MJPEG || - fmt == VIDEO_CS_ITF_VS_FORMAT_DV || fmt == VIDEO_CS_ITF_VS_FRAME_FRAME_BASED) && - fmtnum == p[3]) { - return cur; - } - cur = tu_desc_next(cur); + for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { + uint8_t const *p = (uint8_t const *)cur; + uint_fast8_t fmt = p[2]; + if ((fmt == VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED || + fmt == VIDEO_CS_ITF_VS_FORMAT_MJPEG || + fmt == VIDEO_CS_ITF_VS_FORMAT_DV || + fmt == VIDEO_CS_ITF_VS_FRAME_FRAME_BASED) && + fmtnum == p[3]) { + return cur; } - return end; + cur = tu_desc_next(cur); + } + return end; } /** Find the first frame descriptor with the specified format number. */ static inline void const *_find_desc_frame(void const *beg, void const *end, uint_fast8_t frmnum) { - for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { - uint8_t const *p = (uint8_t const *)cur; - uint_fast8_t frm = p[2]; - if ((frm == VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED || frm == VIDEO_CS_ITF_VS_FRAME_MJPEG || - frm == VIDEO_CS_ITF_VS_FRAME_FRAME_BASED) && - frmnum == p[3]) { - return cur; - } - cur = tu_desc_next(cur); + for (void const *cur = beg; cur < end; cur = _find_desc(cur, end, TUSB_DESC_CS_INTERFACE)) { + uint8_t const *p = (uint8_t const *)cur; + uint_fast8_t frm = p[2]; + if ((frm == VIDEO_CS_ITF_VS_FRAME_UNCOMPRESSED || + frm == VIDEO_CS_ITF_VS_FRAME_MJPEG || + frm == VIDEO_CS_ITF_VS_FRAME_FRAME_BASED) && + frmnum == p[3]) { + return cur; } - return end; + cur = tu_desc_next(cur); + } + return end; } /** Set uniquely determined values to variables that have not been set @@ -443,93 +430,88 @@ static inline void const *_find_desc_frame(void const *beg, void const *end, uin static bool _update_streaming_parameters(videod_streaming_interface_t const *stm, video_probe_and_commit_control_t *param) { - tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); - uint_fast8_t fmtnum = param->bFormatIndex; - TU_ASSERT(vs && fmtnum <= vs->stm.bNumFormats); - if (!fmtnum) { - if (1 < vs->stm.bNumFormats) - return true; /* Need to negotiate all variables. */ - fmtnum = 1; - param->bFormatIndex = 1; - } - - /* Set the parameters determined by the format */ - param->wKeyFrameRate = 1; - param->wPFrameRate = 0; - param->wCompWindowSize = 1; /* GOP size? */ - param->wDelay = 0; /* milliseconds */ - param->dwClockFrequency = 27000000; /* same as MPEG-2 system time clock */ - param->bmFramingInfo = 0x3; /* enables FrameID and EndOfFrame */ - param->bPreferedVersion = 1; - param->bMinVersion = 1; - param->bMaxVersion = 1; - param->bUsage = 0; - param->bBitDepthLuma = 8; - - void const *end = _end_of_streaming_descriptor(vs); - tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); - TU_ASSERT(fmt != end); - - switch (fmt->bDescriptorSubType) { + tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); + uint_fast8_t fmtnum = param->bFormatIndex; + TU_ASSERT(vs && fmtnum <= vs->stm.bNumFormats); + if (!fmtnum) { + if (1 < vs->stm.bNumFormats) return true; /* Need to negotiate all variables. */ + fmtnum = 1; + param->bFormatIndex = 1; + } + + /* Set the parameters determined by the format */ + param->wKeyFrameRate = 1; + param->wPFrameRate = 0; + param->wCompWindowSize = 1; /* GOP size? */ + param->wDelay = 0; /* milliseconds */ + param->dwClockFrequency = 27000000; /* same as MPEG-2 system time clock */ + param->bmFramingInfo = 0x3; /* enables FrameID and EndOfFrame */ + param->bPreferedVersion = 1; + param->bMinVersion = 1; + param->bMaxVersion = 1; + param->bUsage = 0; + param->bBitDepthLuma = 8; + + void const *end = _end_of_streaming_descriptor(vs); + tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); + TU_ASSERT(fmt != end); + + switch (fmt->bDescriptorSubType) { case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: - param->wCompQuality = 1; /* 1 to 10000 */ - break; + param->wCompQuality = 1; /* 1 to 10000 */ + break; case VIDEO_CS_ITF_VS_FORMAT_MJPEG: + break; + + default: return false; + } + + uint_fast8_t frmnum = param->bFrameIndex; + TU_ASSERT(frmnum <= fmt->bNumFrameDescriptors); + if (!frmnum) { + if (1 < fmt->bNumFrameDescriptors) return true; + frmnum = 1; + param->bFrameIndex = 1; + } + tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); + TU_ASSERT(frm != end); + + /* Set the parameters determined by the frame */ + uint_fast32_t frame_size = param->dwMaxVideoFrameSize; + if (!frame_size) { + switch (fmt->bDescriptorSubType) { + case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: + frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * fmt->uncompressed.bBitsPerPixel / 8; break; - default: - return false; - } - - uint_fast8_t frmnum = param->bFrameIndex; - TU_ASSERT(frmnum <= fmt->bNumFrameDescriptors); - if (!frmnum) { - if (1 < fmt->bNumFrameDescriptors) - return true; - frmnum = 1; - param->bFrameIndex = 1; - } - tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); - TU_ASSERT(frm != end); - - /* Set the parameters determined by the frame */ - uint_fast32_t frame_size = param->dwMaxVideoFrameSize; - if (!frame_size) { - switch (fmt->bDescriptorSubType) { - case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: - frame_size = - (uint_fast32_t)frm->wWidth * frm->wHeight * fmt->uncompressed.bBitsPerPixel / 8; - break; - - case VIDEO_CS_ITF_VS_FORMAT_MJPEG: - frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * 16 / 8; /* YUV422 */ - break; - - default: - break; - } - param->dwMaxVideoFrameSize = frame_size; - } + case VIDEO_CS_ITF_VS_FORMAT_MJPEG: + frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * 16 / 8; /* YUV422 */ + break; - uint_fast32_t interval = param->dwFrameInterval; - if (!interval) { - if ((1 < frm->uncompressed.bFrameIntervalType) || - ((0 == frm->uncompressed.bFrameIntervalType) && - (frm->uncompressed.dwFrameInterval[1] != frm->uncompressed.dwFrameInterval[0]))) { - return true; - } - interval = frm->uncompressed.dwFrameInterval[0]; - param->dwFrameInterval = interval; + default: break; } - uint_fast32_t interval_ms = interval / 10000; - TU_ASSERT(interval_ms); - uint_fast32_t payload_size = (frame_size + interval_ms - 1) / interval_ms + 2; - if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size) { - payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE; + param->dwMaxVideoFrameSize = frame_size; + } + + uint_fast32_t interval = param->dwFrameInterval; + if (!interval) { + if ((1 < frm->uncompressed.bFrameIntervalType) || + ((0 == frm->uncompressed.bFrameIntervalType) && + (frm->uncompressed.dwFrameInterval[1] != frm->uncompressed.dwFrameInterval[0]))) { + return true; } - param->dwMaxPayloadTransferSize = payload_size; - return true; + interval = frm->uncompressed.dwFrameInterval[0]; + param->dwFrameInterval = interval; + } + uint_fast32_t interval_ms = interval / 10000; + TU_ASSERT(interval_ms); + uint_fast32_t payload_size = (frame_size + interval_ms - 1) / interval_ms + 2; + if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size) { + payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE; + } + param->dwMaxPayloadTransferSize = payload_size; + return true; } /** Set the minimum, maximum, default values or resolutions to variables which need to negotiate with the host @@ -537,165 +519,156 @@ static bool _update_streaming_parameters(videod_streaming_interface_t const *stm * @param[in] request GET_MAX, GET_MIN, GET_RES or GET_DEF * @param[in,out] param Target */ -static bool _negotiate_streaming_parameters(videod_streaming_interface_t const *stm, - uint_fast8_t request, +static bool _negotiate_streaming_parameters(videod_streaming_interface_t const *stm, uint_fast8_t request, video_probe_and_commit_control_t *param) { - uint_fast8_t const fmtnum = param->bFormatIndex; - if (!fmtnum) { - switch (request) { - case VIDEO_REQUEST_GET_MAX: - if (_get_desc_vs(stm)) - param->bFormatIndex = _get_desc_vs(stm)->stm.bNumFormats; - break; + uint_fast8_t const fmtnum = param->bFormatIndex; + if (!fmtnum) { + switch (request) { + case VIDEO_REQUEST_GET_MAX: + if (_get_desc_vs(stm)) + param->bFormatIndex = _get_desc_vs(stm)->stm.bNumFormats; + break; - case VIDEO_REQUEST_GET_MIN: - case VIDEO_REQUEST_GET_DEF: - param->bFormatIndex = 1; - break; + case VIDEO_REQUEST_GET_MIN: + case VIDEO_REQUEST_GET_DEF: + param->bFormatIndex = 1; + break; - default: - return false; - } - /* Set the parameters determined by the format */ - param->wKeyFrameRate = 1; - param->wPFrameRate = 0; - param->wCompQuality = 1; /* 1 to 10000 */ - param->wCompWindowSize = 1; /* GOP size? */ - param->wDelay = 0; /* milliseconds */ - param->dwClockFrequency = 27000000; /* same as MPEG-2 system time clock */ - param->bmFramingInfo = 0x3; /* enables FrameID and EndOfFrame */ - param->bPreferedVersion = 1; - param->bMinVersion = 1; - param->bMaxVersion = 1; - param->bUsage = 0; - param->bBitDepthLuma = 8; - return true; + default: return false; } + /* Set the parameters determined by the format */ + param->wKeyFrameRate = 1; + param->wPFrameRate = 0; + param->wCompQuality = 1; /* 1 to 10000 */ + param->wCompWindowSize = 1; /* GOP size? */ + param->wDelay = 0; /* milliseconds */ + param->dwClockFrequency = 27000000; /* same as MPEG-2 system time clock */ + param->bmFramingInfo = 0x3; /* enables FrameID and EndOfFrame */ + param->bPreferedVersion = 1; + param->bMinVersion = 1; + param->bMaxVersion = 1; + param->bUsage = 0; + param->bBitDepthLuma = 8; + return true; + } - uint_fast8_t frmnum = param->bFrameIndex; - if (!frmnum) { - tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); - TU_ASSERT(vs); - void const *end = _end_of_streaming_descriptor(vs); - tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); - switch (request) { - case VIDEO_REQUEST_GET_MAX: - frmnum = fmt->bNumFrameDescriptors; - break; - - case VIDEO_REQUEST_GET_MIN: - frmnum = 1; - break; - - case VIDEO_REQUEST_GET_DEF: - switch (fmt->bDescriptorSubType) { - case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: - frmnum = fmt->uncompressed.bDefaultFrameIndex; - break; + uint_fast8_t frmnum = param->bFrameIndex; + if (!frmnum) { + tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); + TU_ASSERT(vs); + void const *end = _end_of_streaming_descriptor(vs); + tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); + switch (request) { + case VIDEO_REQUEST_GET_MAX: + frmnum = fmt->bNumFrameDescriptors; + break; - case VIDEO_CS_ITF_VS_FORMAT_MJPEG: - frmnum = fmt->mjpeg.bDefaultFrameIndex; - break; + case VIDEO_REQUEST_GET_MIN: + frmnum = 1; + break; - default: - return false; - } - break; - default: - return false; - } - param->bFrameIndex = (uint8_t)frmnum; - /* Set the parameters determined by the frame */ - tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); - uint_fast32_t frame_size; + case VIDEO_REQUEST_GET_DEF: switch (fmt->bDescriptorSubType) { - case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: - frame_size = - (uint_fast32_t)frm->wWidth * frm->wHeight * fmt->uncompressed.bBitsPerPixel / 8; + case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: + frmnum = fmt->uncompressed.bDefaultFrameIndex; break; - case VIDEO_CS_ITF_VS_FORMAT_MJPEG: - frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * 16 / 8; /* YUV422 */ + case VIDEO_CS_ITF_VS_FORMAT_MJPEG: + frmnum = fmt->mjpeg.bDefaultFrameIndex; break; - default: - return false; + default: return false; } - param->dwMaxVideoFrameSize = frame_size; - return true; + break; + default: return false; } + param->bFrameIndex = (uint8_t)frmnum; + /* Set the parameters determined by the frame */ + tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); + uint_fast32_t frame_size; + switch (fmt->bDescriptorSubType) { + case VIDEO_CS_ITF_VS_FORMAT_UNCOMPRESSED: + frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * fmt->uncompressed.bBitsPerPixel / 8; + break; - if (!param->dwFrameInterval) { - tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); - TU_ASSERT(vs); - void const *end = _end_of_streaming_descriptor(vs); - tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); - tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); - - uint_fast32_t interval, interval_ms; - switch (request) { - case VIDEO_REQUEST_GET_MAX: { - uint_fast32_t min_interval, max_interval; - uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; - max_interval = num_intervals ? frm->uncompressed.dwFrameInterval[num_intervals - 1] : - frm->uncompressed.dwFrameInterval[1]; - min_interval = frm->uncompressed.dwFrameInterval[0]; - interval = max_interval; - interval_ms = min_interval / 10000; - break; - } + case VIDEO_CS_ITF_VS_FORMAT_MJPEG: + frame_size = (uint_fast32_t)frm->wWidth * frm->wHeight * 16 / 8; /* YUV422 */ + break; - case VIDEO_REQUEST_GET_MIN: { - uint_fast32_t min_interval, max_interval; - uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; - max_interval = num_intervals ? frm->uncompressed.dwFrameInterval[num_intervals - 1] : - frm->uncompressed.dwFrameInterval[1]; - min_interval = frm->uncompressed.dwFrameInterval[0]; - interval = min_interval; - interval_ms = max_interval / 10000; - break; - } + default: return false; + } + param->dwMaxVideoFrameSize = frame_size; + return true; + } - case VIDEO_REQUEST_GET_DEF: - interval = frm->uncompressed.dwDefaultFrameInterval; - interval_ms = interval / 10000; - break; + if (!param->dwFrameInterval) { + tusb_desc_vs_itf_t const *vs = _get_desc_vs(stm); + TU_ASSERT(vs); + void const *end = _end_of_streaming_descriptor(vs); + tusb_desc_cs_video_fmt_t const *fmt = _find_desc_format(tu_desc_next(vs), end, fmtnum); + tusb_desc_cs_video_frm_t const *frm = _find_desc_frame(tu_desc_next(fmt), end, frmnum); - case VIDEO_REQUEST_GET_RES: { - uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; - if (num_intervals) { - interval = 0; - interval_ms = 0; - } else { - interval = frm->uncompressed.dwFrameInterval[2]; - interval_ms = interval / 10000; - } - break; - } + uint_fast32_t interval, interval_ms; + switch (request) { + case VIDEO_REQUEST_GET_MAX: { + uint_fast32_t min_interval, max_interval; + uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; + max_interval = num_intervals ? frm->uncompressed.dwFrameInterval[num_intervals - 1]: frm->uncompressed.dwFrameInterval[1]; + min_interval = frm->uncompressed.dwFrameInterval[0]; + interval = max_interval; + interval_ms = min_interval / 10000; + break; + } + + case VIDEO_REQUEST_GET_MIN: { + uint_fast32_t min_interval, max_interval; + uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; + max_interval = num_intervals ? frm->uncompressed.dwFrameInterval[num_intervals - 1]: frm->uncompressed.dwFrameInterval[1]; + min_interval = frm->uncompressed.dwFrameInterval[0]; + interval = min_interval; + interval_ms = max_interval / 10000; + break; + } - default: - return false; - } - param->dwFrameInterval = interval; - if (!interval) { - param->dwMaxPayloadTransferSize = 0; + case VIDEO_REQUEST_GET_DEF: + interval = frm->uncompressed.dwDefaultFrameInterval; + interval_ms = interval / 10000; + break; + + case VIDEO_REQUEST_GET_RES: { + uint_fast8_t num_intervals = frm->uncompressed.bFrameIntervalType; + if (num_intervals) { + interval = 0; + interval_ms = 0; } else { - uint_fast32_t frame_size = param->dwMaxVideoFrameSize; - uint_fast32_t payload_size; - if (!interval_ms) { - payload_size = frame_size + 2; - } else { - payload_size = (frame_size + interval_ms - 1) / interval_ms + 2; - } - if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size) { - payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE; - } - param->dwMaxPayloadTransferSize = payload_size; + interval = frm->uncompressed.dwFrameInterval[2]; + interval_ms = interval / 10000; } - return true; + break; + } + + default: return false; + } + param->dwFrameInterval = interval; + if (!interval) { + param->dwMaxPayloadTransferSize = 0; + } else { + uint_fast32_t frame_size = param->dwMaxVideoFrameSize; + uint_fast32_t payload_size; + if (!interval_ms) { + payload_size = frame_size + 2; + } else { + payload_size = (frame_size + interval_ms - 1) / interval_ms + 2; + } + if (CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE < payload_size) { + payload_size = CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE; + } + param->dwMaxPayloadTransferSize = payload_size; } return true; + } + return true; } /** Close current video control interface. @@ -704,22 +677,22 @@ static bool _negotiate_streaming_parameters(videod_streaming_interface_t const * * @param[in] altnum The target alternate setting number. */ static bool _close_vc_itf(uint8_t rhport, videod_interface_t *self) { - tusb_desc_vc_itf_t const *vc = _get_desc_vc(self); - - /* The next descriptor after the class-specific VC interface header descriptor. */ - void const *cur = (uint8_t const *)vc + vc->std.bLength + vc->ctl.bLength; - - /* The end of the video control interface descriptor. */ - void const *end = _end_of_control_descriptor(vc); - if (vc->std.bNumEndpoints) { - /* Find the notification endpoint descriptor. */ - cur = _find_desc(cur, end, TUSB_DESC_ENDPOINT); - TU_ASSERT(cur < end); - tusb_desc_endpoint_t const *notif = (tusb_desc_endpoint_t const *)cur; - usbd_edpt_close(rhport, notif->bEndpointAddress); - } - self->cur = 0; - return true; + tusb_desc_vc_itf_t const *vc = _get_desc_vc(self); + + /* The next descriptor after the class-specific VC interface header descriptor. */ + void const *cur = (uint8_t const*)vc + vc->std.bLength + vc->ctl.bLength; + + /* The end of the video control interface descriptor. */ + void const *end = _end_of_control_descriptor(vc); + if (vc->std.bNumEndpoints) { + /* Find the notification endpoint descriptor. */ + cur = _find_desc(cur, end, TUSB_DESC_ENDPOINT); + TU_ASSERT(cur < end); + tusb_desc_endpoint_t const *notif = (tusb_desc_endpoint_t const *)cur; + usbd_edpt_close(rhport, notif->bEndpointAddress); + } + self->cur = 0; + return true; } /** Set the alternate setting to own video control interface. @@ -728,49 +701,48 @@ static bool _close_vc_itf(uint8_t rhport, videod_interface_t *self) * @param[in] altnum The target alternate setting number. */ static bool _open_vc_itf(uint8_t rhport, videod_interface_t *self, uint_fast8_t altnum) { - TU_LOG_DRV(" open VC %d\r\n", altnum); - uint8_t const *beg = self->beg; - uint8_t const *end = beg + self->len; - - /* The first descriptor is a video control interface descriptor. */ - uint8_t const *cur = _find_desc_itf(beg, end, _desc_itfnum(beg), altnum); - TU_LOG_DRV(" cur %d\r\n", cur - beg); + TU_LOG_DRV(" open VC %d\r\n", altnum); + uint8_t const *beg = self->beg; + uint8_t const *end = beg + self->len; + + /* The first descriptor is a video control interface descriptor. */ + uint8_t const *cur = _find_desc_itf(beg, end, _desc_itfnum(beg), altnum); + TU_LOG_DRV(" cur %d\r\n", cur - beg); + TU_VERIFY(cur < end); + + tusb_desc_vc_itf_t const *vc = (tusb_desc_vc_itf_t const *)cur; + TU_LOG_DRV(" bInCollection %d\r\n", vc->ctl.bInCollection); + /* Support for up to 2 streaming interfaces only. */ + TU_ASSERT(vc->ctl.bInCollection <= CFG_TUD_VIDEO_STREAMING); + + /* Update to point the end of the video control interface descriptor. */ + end = _end_of_control_descriptor(cur); + + /* Advance to the next descriptor after the class-specific VC interface header descriptor. */ + cur += vc->std.bLength + vc->ctl.bLength; + TU_LOG_DRV(" bNumEndpoints %d\r\n", vc->std.bNumEndpoints); + /* Open the notification endpoint if it exist. */ + if (vc->std.bNumEndpoints) { + /* Support for 1 endpoint only. */ + TU_VERIFY(1 == vc->std.bNumEndpoints); + /* Find the notification endpoint descriptor. */ + cur = _find_desc(cur, end, TUSB_DESC_ENDPOINT); TU_VERIFY(cur < end); - - tusb_desc_vc_itf_t const *vc = (tusb_desc_vc_itf_t const *)cur; - TU_LOG_DRV(" bInCollection %d\r\n", vc->ctl.bInCollection); - /* Support for up to 2 streaming interfaces only. */ - TU_ASSERT(vc->ctl.bInCollection <= CFG_TUD_VIDEO_STREAMING); - - /* Update to point the end of the video control interface descriptor. */ - end = _end_of_control_descriptor(cur); - - /* Advance to the next descriptor after the class-specific VC interface header descriptor. */ - cur += vc->std.bLength + vc->ctl.bLength; - TU_LOG_DRV(" bNumEndpoints %d\r\n", vc->std.bNumEndpoints); - /* Open the notification endpoint if it exist. */ - if (vc->std.bNumEndpoints) { - /* Support for 1 endpoint only. */ - TU_VERIFY(1 == vc->std.bNumEndpoints); - /* Find the notification endpoint descriptor. */ - cur = _find_desc(cur, end, TUSB_DESC_ENDPOINT); - TU_VERIFY(cur < end); - tusb_desc_endpoint_t const *notif = (tusb_desc_endpoint_t const *)cur; - /* Open the notification endpoint */ - TU_ASSERT(usbd_edpt_open(rhport, notif)); - } - self->cur = (uint16_t)((uint8_t const *)vc - beg); - return true; + tusb_desc_endpoint_t const *notif = (tusb_desc_endpoint_t const *)cur; + /* Open the notification endpoint */ + TU_ASSERT(usbd_edpt_open(rhport, notif)); + } + self->cur = (uint16_t) ((uint8_t const*)vc - beg); + return true; } -static bool _init_vs_configuration(videod_streaming_interface_t *stm) -{ - /* initialize streaming settings */ - stm->state = VS_STATE_PROBING; - stm->max_payload_transfer_size = 0; - video_probe_and_commit_control_t *param = &stm->probe_commit_payload; - tu_memclr(param, sizeof(*param)); - return _update_streaming_parameters(stm, param); +static bool _init_vs_configuration(videod_streaming_interface_t *stm) { + /* initialize streaming settings */ + stm->state = VS_STATE_PROBING; + stm->max_payload_transfer_size = 0; + video_probe_and_commit_control_t *param = &stm->probe_commit_payload; + tu_memclr(param, sizeof(*param)); + return _update_streaming_parameters(stm, param); } /** Set the alternate setting to own video streaming interface. @@ -779,419 +751,388 @@ static bool _init_vs_configuration(videod_streaming_interface_t *stm) * @param[in] altnum The target alternate setting number. */ static bool _open_vs_itf(uint8_t rhport, videod_streaming_interface_t *stm, uint_fast8_t altnum) { - uint_fast8_t i; - TU_LOG_DRV(" reopen VS %d\r\n", altnum); - uint8_t const *desc = _videod_itf[stm->index_vc].beg; + uint_fast8_t i; + TU_LOG_DRV(" reopen VS %d\r\n", altnum); + uint8_t const *desc = _videod_itf[stm->index_vc].beg; #ifndef TUP_DCD_EDPT_ISO_ALLOC - /* Close endpoints of previous settings. */ - for (i = 0; i < TU_ARRAY_SIZE(stm->desc.ep); ++i) { - uint_fast16_t ofs_ep = stm->desc.ep[i]; - if (!ofs_ep) - break; - tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const *)(desc + ofs_ep); - /* Only ISO endpoints needs to be closed */ - if (ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - stm->desc.ep[i] = 0; - usbd_edpt_close(rhport, ep->bEndpointAddress); - TU_LOG_DRV(" close EP%02x\r\n", ep->bEndpointAddress); - } + /* Close endpoints of previous settings. */ + for (i = 0; i < TU_ARRAY_SIZE(stm->desc.ep); ++i) { + uint_fast16_t ofs_ep = stm->desc.ep[i]; + if (!ofs_ep) break; + tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const*)(desc + ofs_ep); + /* Only ISO endpoints needs to be closed */ + if(ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { + stm->desc.ep[i] = 0; + usbd_edpt_close(rhport, ep->bEndpointAddress); + TU_LOG_DRV(" close EP%02x\r\n", ep->bEndpointAddress); } + } #endif - /* clear transfer management information */ - stm->buffer = NULL; - stm->bufsize = 0; - stm->offset = 0; - - /* Find a alternate interface */ - uint8_t const *beg = desc + stm->desc.beg; - uint8_t const *end = desc + stm->desc.end; - uint8_t const *cur = _find_desc_itf(beg, end, _desc_itfnum(beg), altnum); - TU_VERIFY(cur < end); - - uint_fast8_t numeps = ((tusb_desc_interface_t const *)cur)->bNumEndpoints; - TU_ASSERT(numeps <= TU_ARRAY_SIZE(stm->desc.ep)); - stm->desc.cur = (uint16_t)(cur - desc); /* Save the offset of the new settings */ - if (!altnum && (VS_STATE_COMMITTED != stm->state)) { - TU_VERIFY(_init_vs_configuration(stm)); - } - /* Open bulk or isochronous endpoints of the new settings. */ - for (i = 0, cur = tu_desc_next(cur); i < numeps; ++i, cur = tu_desc_next(cur)) { - cur = _find_desc_ep(cur, end); - TU_ASSERT(cur < end); - tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const *)cur; - uint_fast32_t max_size = stm->max_payload_transfer_size; - if (altnum && (TUSB_XFER_ISOCHRONOUS == ep->bmAttributes.xfer)) { - /* FS must be less than or equal to max packet size */ - TU_VERIFY(tu_edpt_packet_size(ep) >= max_size); + /* clear transfer management information */ + stm->buffer = NULL; + stm->bufsize = 0; + stm->offset = 0; + + /* Find a alternate interface */ + uint8_t const *beg = desc + stm->desc.beg; + uint8_t const *end = desc + stm->desc.end; + uint8_t const *cur = _find_desc_itf(beg, end, _desc_itfnum(beg), altnum); + TU_VERIFY(cur < end); + + uint_fast8_t numeps = ((tusb_desc_interface_t const *)cur)->bNumEndpoints; + TU_ASSERT(numeps <= TU_ARRAY_SIZE(stm->desc.ep)); + stm->desc.cur = (uint16_t)(cur - desc); /* Save the offset of the new settings */ + if (!altnum && (VS_STATE_COMMITTED != stm->state)) { + TU_VERIFY(_init_vs_configuration(stm)); + } + /* Open bulk or isochronous endpoints of the new settings. */ + for (i = 0, cur = tu_desc_next(cur); i < numeps; ++i, cur = tu_desc_next(cur)) { + cur = _find_desc_ep(cur, end); + TU_ASSERT(cur < end); + tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const*)cur; + uint_fast32_t max_size = stm->max_payload_transfer_size; + if (altnum && (TUSB_XFER_ISOCHRONOUS == ep->bmAttributes.xfer)) { + /* FS must be less than or equal to max packet size */ + TU_VERIFY (tu_edpt_packet_size(ep) >= max_size); #ifdef TUP_DCD_EDPT_ISO_ALLOC - usbd_edpt_iso_activate(rhport, ep); + usbd_edpt_iso_activate(rhport, ep); #else - TU_ASSERT(usbd_edpt_open(rhport, ep)); + TU_ASSERT(usbd_edpt_open(rhport, ep)); #endif - } else { - TU_VERIFY(TUSB_XFER_BULK == ep->bmAttributes.xfer); - TU_ASSERT(usbd_edpt_open(rhport, ep)); - } - stm->desc.ep[i] = (uint16_t)(cur - desc); - TU_LOG_DRV(" open EP%02x\r\n", _desc_ep_addr(cur)); - } - if (altnum) { - stm->state = VS_STATE_STREAMING; + } else { + TU_VERIFY(TUSB_XFER_BULK == ep->bmAttributes.xfer); + TU_ASSERT(usbd_edpt_open(rhport, ep)); } - TU_LOG_DRV(" done\r\n"); - return true; + stm->desc.ep[i] = (uint16_t) (cur - desc); + TU_LOG_DRV(" open EP%02x\r\n", _desc_ep_addr(cur)); + } + if (altnum) { + stm->state = VS_STATE_STREAMING; + } + TU_LOG_DRV(" done\r\n"); + return true; } /** Prepare the next packet payload. */ static uint_fast16_t _prepare_in_payload(videod_streaming_interface_t *stm) { - uint_fast16_t remaining = stm->bufsize - stm->offset; - uint_fast16_t hdr_len = stm->ep_buf[0]; - uint_fast16_t pkt_len = stm->max_payload_transfer_size; - if (hdr_len + remaining < pkt_len) { - pkt_len = hdr_len + remaining; - } - TU_ASSERT(pkt_len >= hdr_len); - uint_fast16_t data_len = pkt_len - hdr_len; - memcpy(&stm->ep_buf[hdr_len], stm->buffer + stm->offset, data_len); - stm->offset += data_len; - remaining -= data_len; - if (!remaining) { - tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t *)stm->ep_buf; - hdr->EndOfFrame = 1; - } - return hdr_len + data_len; + uint_fast16_t remaining = stm->bufsize - stm->offset; + uint_fast16_t hdr_len = stm->ep_buf[0]; + uint_fast16_t pkt_len = stm->max_payload_transfer_size; + if (hdr_len + remaining < pkt_len) { + pkt_len = hdr_len + remaining; + } + TU_ASSERT(pkt_len >= hdr_len); + uint_fast16_t data_len = pkt_len - hdr_len; + memcpy(&stm->ep_buf[hdr_len], stm->buffer + stm->offset, data_len); + stm->offset += data_len; + remaining -= data_len; + if (!remaining) { + tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t*)stm->ep_buf; + hdr->EndOfFrame = 1; + } + return hdr_len + data_len; } /** Handle a standard request to the video control interface. */ static int handle_video_ctl_std_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, uint_fast8_t ctl_idx) + tusb_control_request_t const *request, + uint_fast8_t ctl_idx) { - TU_LOG_DRV("\r\n"); - switch (request->bRequest) { + TU_LOG_DRV("\r\n"); + switch (request->bRequest) { case TUSB_REQ_GET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - tusb_desc_vc_itf_t const *vc = _get_desc_vc(&_videod_itf[ctl_idx]); - TU_VERIFY(vc, VIDEO_ERROR_UNKNOWN); + if (stage == CONTROL_STAGE_SETUP) + { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + tusb_desc_vc_itf_t const *vc = _get_desc_vc(&_videod_itf[ctl_idx]); + TU_VERIFY(vc, VIDEO_ERROR_UNKNOWN); - uint8_t alt_num = vc->std.bAlternateSetting; + uint8_t alt_num = vc->std.bAlternateSetting; - TU_VERIFY(tud_control_xfer(rhport, request, &alt_num, sizeof(alt_num)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + TU_VERIFY(tud_control_xfer(rhport, request, &alt_num, sizeof(alt_num)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case TUSB_REQ_SET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(0 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(_close_vc_itf(rhport, &_videod_itf[ctl_idx]), VIDEO_ERROR_UNKNOWN); - TU_VERIFY(_open_vc_itf(rhport, &_videod_itf[ctl_idx], request->wValue), - VIDEO_ERROR_UNKNOWN); - tud_control_status(rhport, request); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) + { + TU_VERIFY(0 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(_close_vc_itf(rhport, &_videod_itf[ctl_idx]), VIDEO_ERROR_UNKNOWN); + TU_VERIFY(_open_vc_itf(rhport, &_videod_itf[ctl_idx], request->wValue), VIDEO_ERROR_UNKNOWN); + tud_control_status(rhport, request); + } + return VIDEO_ERROR_NONE; default: /* Unknown/Unsupported request */ - TU_BREAKPOINT(); - return VIDEO_ERROR_INVALID_REQUEST; - } + TU_BREAKPOINT(); + return VIDEO_ERROR_INVALID_REQUEST; + } } static int handle_video_ctl_cs_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, uint_fast8_t ctl_idx) + tusb_control_request_t const *request, + uint_fast8_t ctl_idx) { - videod_interface_t *self = &_videod_itf[ctl_idx]; + videod_interface_t *self = &_videod_itf[ctl_idx]; - /* 4.2.1 Interface Control Request */ - uint8_t const ctrl_sel = TU_U16_HIGH(request->wValue); - TU_LOG_DRV("%s_Control(%s)\r\n", tu_str_video_vc_control_selector[ctrl_sel], - tu_lookup_find(&tu_table_video_request, request->bRequest)); + /* 4.2.1 Interface Control Request */ + uint8_t const ctrl_sel = TU_U16_HIGH(request->wValue); + TU_LOG_DRV("%s_Control(%s)\r\n", tu_str_video_vc_control_selector[ctrl_sel], tu_lookup_find(&tu_table_video_request, request->bRequest)); - switch (ctrl_sel) { + switch (ctrl_sel) { case VIDEO_VC_CTL_VIDEO_POWER_MODE: - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_SET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, &self->power_mode, - sizeof(self->power_mode)), - VIDEO_ERROR_UNKNOWN); - } else if (stage == CONTROL_STAGE_DATA) { - if (tud_video_power_mode_cb) - return tud_video_power_mode_cb(ctl_idx, self->power_mode); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, &self->power_mode, sizeof(self->power_mode)), VIDEO_ERROR_UNKNOWN); + } else if (stage == CONTROL_STAGE_DATA) { + if (tud_video_power_mode_cb) return tud_video_power_mode_cb(ctl_idx, self->power_mode); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, &self->power_mode, - sizeof(self->power_mode)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) + { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, &self->power_mode, sizeof(self->power_mode)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get_set, - sizeof(_cap_get_set)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) + { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t) &_cap_get_set, sizeof(_cap_get_set)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; - default: - break; - } - break; + default: break; + } + break; case VIDEO_VC_CTL_REQUEST_ERROR_CODE: - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(tud_control_xfer(rhport, request, &self->error_code, sizeof(uint8_t)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) + { + TU_VERIFY(tud_control_xfer(rhport, request, &self->error_code, sizeof(uint8_t)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get, - sizeof(_cap_get)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; - - default: - break; - } - break; - - default: - break; - } - - /* Unknown/Unsupported request */ - TU_BREAKPOINT(); - return VIDEO_ERROR_INVALID_REQUEST; + if (stage == CONTROL_STAGE_SETUP) + { + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t) &_cap_get, sizeof(_cap_get)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; + + default: break; + } + break; + + default: break; + } + + /* Unknown/Unsupported request */ + TU_BREAKPOINT(); + return VIDEO_ERROR_INVALID_REQUEST; } static int handle_video_ctl_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, uint_fast8_t ctl_idx) + tusb_control_request_t const *request, + uint_fast8_t ctl_idx) { - switch (request->bmRequestType_bit.type) { + switch (request->bmRequestType_bit.type) { case TUSB_REQ_TYPE_STANDARD: - return handle_video_ctl_std_req(rhport, stage, request, ctl_idx); + return handle_video_ctl_std_req(rhport, stage, request, ctl_idx); case TUSB_REQ_TYPE_CLASS: { - uint_fast8_t entity_id = TU_U16_HIGH(request->wIndex); - if (!entity_id) { - return handle_video_ctl_cs_req(rhport, stage, request, ctl_idx); - } else { - TU_VERIFY(_find_desc_entity(_get_desc_vc(&_videod_itf[ctl_idx]), entity_id), - VIDEO_ERROR_INVALID_REQUEST); - return VIDEO_ERROR_NONE; - } + uint_fast8_t entity_id = TU_U16_HIGH(request->wIndex); + if (!entity_id) { + return handle_video_ctl_cs_req(rhport, stage, request, ctl_idx); + } else { + TU_VERIFY(_find_desc_entity(_get_desc_vc(&_videod_itf[ctl_idx]), entity_id), VIDEO_ERROR_INVALID_REQUEST); + return VIDEO_ERROR_NONE; + } } default: - return VIDEO_ERROR_INVALID_REQUEST; - } + return VIDEO_ERROR_INVALID_REQUEST; + } } static int handle_video_stm_std_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, uint_fast8_t stm_idx) + tusb_control_request_t const *request, + uint_fast8_t stm_idx) { - TU_LOG_DRV("\r\n"); - videod_streaming_interface_t *self = &_videod_streaming_itf[stm_idx]; - switch (request->bRequest) { + TU_LOG_DRV("\r\n"); + videod_streaming_interface_t *self = &_videod_streaming_itf[stm_idx]; + switch (request->bRequest) { case TUSB_REQ_GET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - tusb_desc_vs_itf_t const *vs = _get_desc_vs(self); - TU_VERIFY(vs, VIDEO_ERROR_UNKNOWN); - uint8_t alt_num = vs->std.bAlternateSetting; + if (stage == CONTROL_STAGE_SETUP) + { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + tusb_desc_vs_itf_t const *vs = _get_desc_vs(self); + TU_VERIFY(vs, VIDEO_ERROR_UNKNOWN); + uint8_t alt_num = vs->std.bAlternateSetting; - TU_VERIFY(tud_control_xfer(rhport, request, &alt_num, sizeof(alt_num)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + TU_VERIFY(tud_control_xfer(rhport, request, &alt_num, sizeof(alt_num)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case TUSB_REQ_SET_INTERFACE: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(_open_vs_itf(rhport, self, request->wValue), VIDEO_ERROR_UNKNOWN); - tud_control_status(rhport, request); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(_open_vs_itf(rhport, self, request->wValue), VIDEO_ERROR_UNKNOWN); + tud_control_status(rhport, request); + } + return VIDEO_ERROR_NONE; default: /* Unknown/Unsupported request */ - TU_BREAKPOINT(); - return VIDEO_ERROR_INVALID_REQUEST; - } + TU_BREAKPOINT(); + return VIDEO_ERROR_INVALID_REQUEST; + } } static int handle_video_stm_cs_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, uint_fast8_t stm_idx) -{ - (void)rhport; - videod_streaming_interface_t *self = &_videod_streaming_itf[stm_idx]; + tusb_control_request_t const *request, + uint_fast8_t stm_idx) { + (void)rhport; + videod_streaming_interface_t *self = &_videod_streaming_itf[stm_idx]; - uint8_t const ctrl_sel = TU_U16_HIGH(request->wValue); - TU_LOG_DRV("%s_Control(%s)\r\n", tu_str_video_vs_control_selector[ctrl_sel], - tu_lookup_find(&tu_table_video_request, request->bRequest)); + uint8_t const ctrl_sel = TU_U16_HIGH(request->wValue); + TU_LOG_DRV("%s_Control(%s)\r\n", tu_str_video_vs_control_selector[ctrl_sel], tu_lookup_find(&tu_table_video_request, request->bRequest)); - /* 4.2.1 Interface Control Request */ - switch (ctrl_sel) { + /* 4.2.1 Interface Control Request */ + switch (ctrl_sel) { case VIDEO_VS_CTL_STREAM_ERROR_CODE: - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - /* TODO */ - TU_VERIFY(tud_control_xfer(rhport, request, &self->error_code, sizeof(uint8_t)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + /* TODO */ + TU_VERIFY(tud_control_xfer(rhport, request, &self->error_code, sizeof(uint8_t)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get, - sizeof(_cap_get)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t) &_cap_get, sizeof(_cap_get)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; - default: - break; - } - break; + default: break; + } + break; case VIDEO_VS_CTL_PROBE: - if (self->state != VS_STATE_PROBING) { - self->state = VS_STATE_PROBING; - } + if (self->state != VS_STATE_PROBING) { + self->state = VS_STATE_PROBING; + } - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_SET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, - sizeof(video_probe_and_commit_control_t)), - VIDEO_ERROR_UNKNOWN); - } else if (stage == CONTROL_STAGE_DATA) { - TU_VERIFY(_update_streaming_parameters(self, &self->probe_commit_payload), - VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, sizeof(video_probe_and_commit_control_t)), + VIDEO_ERROR_UNKNOWN); + } else if (stage == CONTROL_STAGE_DATA) { + TU_VERIFY(_update_streaming_parameters(self, &self->probe_commit_payload), + VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, - sizeof(video_probe_and_commit_control_t)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, sizeof(video_probe_and_commit_control_t)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_MIN: case VIDEO_REQUEST_GET_MAX: case VIDEO_REQUEST_GET_RES: case VIDEO_REQUEST_GET_DEF: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); - video_probe_and_commit_control_t tmp = self->probe_commit_payload; - TU_VERIFY(_negotiate_streaming_parameters(self, request->bRequest, &tmp), - VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); - TU_VERIFY(tud_control_xfer(rhport, request, &tmp, sizeof(tmp)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); + video_probe_and_commit_control_t tmp = self->probe_commit_payload; + TU_VERIFY(_negotiate_streaming_parameters(self, request->bRequest, &tmp), VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); + TU_VERIFY(tud_control_xfer(rhport, request, &tmp, sizeof(tmp)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_LEN: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(2 == request->wLength, VIDEO_ERROR_UNKNOWN); - uint16_t len = sizeof(video_probe_and_commit_control_t); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)&len, sizeof(len)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(2 == request->wLength, VIDEO_ERROR_UNKNOWN); + uint16_t len = sizeof(video_probe_and_commit_control_t); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)&len, sizeof(len)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get_set, - sizeof(_cap_get_set)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t)&_cap_get_set, sizeof(_cap_get_set)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; - default: - break; - } - break; + default: break; + } + break; case VIDEO_VS_CTL_COMMIT: - switch (request->bRequest) { + switch (request->bRequest) { case VIDEO_REQUEST_SET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, - sizeof(video_probe_and_commit_control_t)), - VIDEO_ERROR_UNKNOWN); - } else if (stage == CONTROL_STAGE_DATA) { - video_probe_and_commit_control_t *param = &self->probe_commit_payload; - TU_VERIFY(_update_streaming_parameters(self, param), - VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); - /* Set the negotiated value */ - self->max_payload_transfer_size = param->dwMaxPayloadTransferSize; - int ret = VIDEO_ERROR_NONE; - if (tud_video_commit_cb) { - ret = tud_video_commit_cb(self->index_vc, self->index_vs, param); - } - if (VIDEO_ERROR_NONE == ret) { - self->state = VS_STATE_COMMITTED; - self->buffer = NULL; - self->bufsize = 0; - self->offset = 0; - /* initialize payload header */ - tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t *)self->ep_buf; - hdr->bHeaderLength = sizeof(*hdr); - hdr->bmHeaderInfo = 0; - } + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, sizeof(video_probe_and_commit_control_t)), VIDEO_ERROR_UNKNOWN); + } else if (stage == CONTROL_STAGE_DATA) { + video_probe_and_commit_control_t *param = &self->probe_commit_payload; + TU_VERIFY(_update_streaming_parameters(self, param), VIDEO_ERROR_INVALID_VALUE_WITHIN_RANGE); + /* Set the negotiated value */ + self->max_payload_transfer_size = param->dwMaxPayloadTransferSize; + int ret = VIDEO_ERROR_NONE; + if (tud_video_commit_cb) { + ret = tud_video_commit_cb(self->index_vc, self->index_vs, param); } - return VIDEO_ERROR_NONE; + if (VIDEO_ERROR_NONE == ret) { + self->state = VS_STATE_COMMITTED; + self->buffer = NULL; + self->bufsize = 0; + self->offset = 0; + /* initialize payload header */ + tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t*)self->ep_buf; + hdr->bHeaderLength = sizeof(*hdr); + hdr->bmHeaderInfo = 0; + } + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_CUR: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, - sizeof(video_probe_and_commit_control_t)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, &self->probe_commit_payload, sizeof(video_probe_and_commit_control_t)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_LEN: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(2 == request->wLength, VIDEO_ERROR_UNKNOWN); - uint16_t len = sizeof(video_probe_and_commit_control_t); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)&len, sizeof(len)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(2 == request->wLength, VIDEO_ERROR_UNKNOWN); + uint16_t len = sizeof(video_probe_and_commit_control_t); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)&len, sizeof(len)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; case VIDEO_REQUEST_GET_INFO: - if (stage == CONTROL_STAGE_SETUP) { - TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); - TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t *)(uintptr_t)&_cap_get_set, - sizeof(_cap_get_set)), - VIDEO_ERROR_UNKNOWN); - } - return VIDEO_ERROR_NONE; + if (stage == CONTROL_STAGE_SETUP) { + TU_VERIFY(1 == request->wLength, VIDEO_ERROR_UNKNOWN); + TU_VERIFY(tud_control_xfer(rhport, request, (uint8_t*)(uintptr_t) &_cap_get_set, sizeof(_cap_get_set)), VIDEO_ERROR_UNKNOWN); + } + return VIDEO_ERROR_NONE; - default: - break; - } - break; + default: break; + } + break; case VIDEO_VS_CTL_STILL_PROBE: case VIDEO_VS_CTL_STILL_COMMIT: @@ -1199,33 +1140,31 @@ static int handle_video_stm_cs_req(uint8_t rhport, uint8_t stage, case VIDEO_VS_CTL_GENERATE_KEY_FRAME: case VIDEO_VS_CTL_UPDATE_FRAME_SEGMENT: case VIDEO_VS_CTL_SYNCH_DELAY_CONTROL: - /* TODO */ - break; + /* TODO */ + break; - default: - break; - } + default: break; + } - /* Unknown/Unsupported request */ - TU_BREAKPOINT(); - return VIDEO_ERROR_INVALID_REQUEST; + /* Unknown/Unsupported request */ + TU_BREAKPOINT(); + return VIDEO_ERROR_INVALID_REQUEST; } static int handle_video_stm_req(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request, uint_fast8_t stm_idx) + tusb_control_request_t const *request, + uint_fast8_t stm_idx) { - switch (request->bmRequestType_bit.type) { + switch (request->bmRequestType_bit.type) { case TUSB_REQ_TYPE_STANDARD: - return handle_video_stm_std_req(rhport, stage, request, stm_idx); + return handle_video_stm_std_req(rhport, stage, request, stm_idx); case TUSB_REQ_TYPE_CLASS: - if (TU_U16_HIGH(request->wIndex)) - return VIDEO_ERROR_INVALID_REQUEST; - return handle_video_stm_cs_req(rhport, stage, request, stm_idx); + if (TU_U16_HIGH(request->wIndex)) return VIDEO_ERROR_INVALID_REQUEST; + return handle_video_stm_cs_req(rhport, stage, request, stm_idx); - default: - return VIDEO_ERROR_INVALID_REQUEST; - } + default: return VIDEO_ERROR_INVALID_REQUEST; + } } //--------------------------------------------------------------------+ @@ -1234,270 +1173,241 @@ static int handle_video_stm_req(uint8_t rhport, uint8_t stage, bool tud_video_n_connected(uint_fast8_t ctl_idx) { - TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); - videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, 0); - if (stm) - return true; - return false; + TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); + videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, 0); + if (stm) return true; + return false; } bool tud_video_n_streaming(uint_fast8_t ctl_idx, uint_fast8_t stm_idx) { - TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); - TU_ASSERT(stm_idx < CFG_TUD_VIDEO_STREAMING); - videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, stm_idx); - if (!stm || !stm->desc.ep[0]) - return false; - if (stm->state == VS_STATE_PROBING) - return false; + TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); + TU_ASSERT(stm_idx < CFG_TUD_VIDEO_STREAMING); + videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, stm_idx); + if (!stm || !stm->desc.ep[0]) return false; + if (stm->state == VS_STATE_PROBING) return false; #ifdef TUP_DCD_EDPT_ISO_ALLOC - uint8_t const *desc = _videod_itf[stm->index_vc].beg; - uint_fast16_t ofs_ep = stm->desc.ep[0]; - tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const *)(desc + ofs_ep); - if (ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - if (stm->state == VS_STATE_COMMITTED) - return false; - } + uint8_t const *desc = _videod_itf[stm->index_vc].beg; + uint_fast16_t ofs_ep = stm->desc.ep[0]; + tusb_desc_endpoint_t const *ep = (tusb_desc_endpoint_t const*)(desc + ofs_ep); + if (ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { + if (stm->state == VS_STATE_COMMITTED) return false; + } #endif - return true; + return true; } -bool tud_video_n_frame_xfer(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void *buffer, - size_t bufsize) +bool tud_video_n_frame_xfer(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void *buffer, size_t bufsize) { - TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); - TU_ASSERT(stm_idx < CFG_TUD_VIDEO_STREAMING); - if (!buffer || !bufsize) - return false; - videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, stm_idx); - if (!stm || !stm->desc.ep[0] || stm->buffer) - return false; - if (stm->state == VS_STATE_PROBING) - return false; - - /* Find EP address */ - uint8_t const *desc = _videod_itf[stm->index_vc].beg; - uint8_t ep_addr = 0; - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { - uint_fast16_t ofs_ep = stm->desc.ep[i]; - if (!ofs_ep) - continue; - ep_addr = _desc_ep_addr(desc + ofs_ep); - break; - } - if (!ep_addr) - return false; - - TU_VERIFY(usbd_edpt_claim(0, ep_addr)); - /* update the packet header */ - tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t *)stm->ep_buf; - hdr->FrameID ^= 1; - hdr->EndOfFrame = 0; - /* update the packet data */ - stm->buffer = (uint8_t *)buffer; - stm->bufsize = bufsize; - uint_fast16_t pkt_len = _prepare_in_payload(stm); - TU_ASSERT(usbd_edpt_xfer(0, ep_addr, stm->ep_buf, (uint16_t)pkt_len), 0); - return true; + TU_ASSERT(ctl_idx < CFG_TUD_VIDEO); + TU_ASSERT(stm_idx < CFG_TUD_VIDEO_STREAMING); + if (!buffer || !bufsize) return false; + videod_streaming_interface_t *stm = _get_instance_streaming(ctl_idx, stm_idx); + if (!stm || !stm->desc.ep[0] || stm->buffer) return false; + if (stm->state == VS_STATE_PROBING) return false; + + /* Find EP address */ + uint8_t const *desc = _videod_itf[stm->index_vc].beg; + uint8_t ep_addr = 0; + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { + uint_fast16_t ofs_ep = stm->desc.ep[i]; + if (!ofs_ep) continue; + ep_addr = _desc_ep_addr(desc + ofs_ep); + break; + } + if (!ep_addr) return false; + + TU_VERIFY( usbd_edpt_claim(0, ep_addr) ); + /* update the packet header */ + tusb_video_payload_header_t *hdr = (tusb_video_payload_header_t*)stm->ep_buf; + hdr->FrameID ^= 1; + hdr->EndOfFrame = 0; + /* update the packet data */ + stm->buffer = (uint8_t*)buffer; + stm->bufsize = bufsize; + uint_fast16_t pkt_len = _prepare_in_payload(stm); + TU_ASSERT( usbd_edpt_xfer(0, ep_addr, stm->ep_buf, (uint16_t) pkt_len), 0); + return true; } //--------------------------------------------------------------------+ // USBD Driver API //--------------------------------------------------------------------+ -void videod_init(void) -{ - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO; ++i) { - videod_interface_t *ctl = &_videod_itf[i]; - tu_memclr(ctl, sizeof(*ctl)); - } - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { - videod_streaming_interface_t *stm = &_videod_streaming_itf[i]; - tu_memclr(stm, ITF_STM_MEM_RESET_SIZE); - } +void videod_init(void) { + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO; ++i) { + videod_interface_t* ctl = &_videod_itf[i]; + tu_memclr(ctl, sizeof(*ctl)); + } + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { + videod_streaming_interface_t *stm = &_videod_streaming_itf[i]; + tu_memclr(stm, ITF_STM_MEM_RESET_SIZE); + } } -bool videod_deinit(void) -{ - return true; +bool videod_deinit(void) { + return true; } -void videod_reset(uint8_t rhport) -{ - (void)rhport; - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO; ++i) { - videod_interface_t *ctl = &_videod_itf[i]; - tu_memclr(ctl, sizeof(*ctl)); - } - for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { - videod_streaming_interface_t *stm = &_videod_streaming_itf[i]; - tu_memclr(stm, ITF_STM_MEM_RESET_SIZE); - } +void videod_reset(uint8_t rhport) { + (void) rhport; + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO; ++i) { + videod_interface_t* ctl = &_videod_itf[i]; + tu_memclr(ctl, sizeof(*ctl)); + } + for (uint_fast8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { + videod_streaming_interface_t *stm = &_videod_streaming_itf[i]; + tu_memclr(stm, ITF_STM_MEM_RESET_SIZE); + } } -uint16_t videod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) -{ - TU_VERIFY((TUSB_CLASS_VIDEO == itf_desc->bInterfaceClass) && - (VIDEO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass) && - (VIDEO_ITF_PROTOCOL_15 == itf_desc->bInterfaceProtocol), - 0); - - /* Find available interface */ - videod_interface_t *self = NULL; - uint8_t ctl_idx; - for (ctl_idx = 0; ctl_idx < CFG_TUD_VIDEO; ++ctl_idx) { - if (_videod_itf[ctl_idx].beg) - continue; - self = &_videod_itf[ctl_idx]; - break; +uint16_t videod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len) { + TU_VERIFY((TUSB_CLASS_VIDEO == itf_desc->bInterfaceClass) && + (VIDEO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass) && + (VIDEO_ITF_PROTOCOL_15 == itf_desc->bInterfaceProtocol), 0); + + /* Find available interface */ + videod_interface_t *self = NULL; + uint8_t ctl_idx; + for (ctl_idx = 0; ctl_idx < CFG_TUD_VIDEO; ++ctl_idx) { + if (_videod_itf[ctl_idx].beg) continue; + self = &_videod_itf[ctl_idx]; + break; + } + TU_ASSERT(ctl_idx < CFG_TUD_VIDEO, 0); + + uint8_t const *end = (uint8_t const*)itf_desc + max_len; + self->beg = (uint8_t const*) itf_desc; + self->len = max_len; + + /*------------- Video Control Interface -------------*/ + TU_VERIFY(_open_vc_itf(rhport, self, 0), 0); + tusb_desc_vc_itf_t const *vc = _get_desc_vc(self); + uint_fast8_t bInCollection = vc->ctl.bInCollection; + + /* Find the end of the video interface descriptor */ + void const *cur = _next_desc_itf(itf_desc, end); + for (uint8_t stm_idx = 0; stm_idx < bInCollection; ++stm_idx) { + videod_streaming_interface_t *stm = NULL; + /* find free streaming interface handle */ + for (uint8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { + if (_videod_streaming_itf[i].desc.beg) continue; + stm = &_videod_streaming_itf[i]; + self->stm[stm_idx] = i; + break; } - TU_ASSERT(ctl_idx < CFG_TUD_VIDEO, 0); - - uint8_t const *end = (uint8_t const *)itf_desc + max_len; - self->beg = (uint8_t const *)itf_desc; - self->len = max_len; - - /*------------- Video Control Interface -------------*/ - TU_VERIFY(_open_vc_itf(rhport, self, 0), 0); - tusb_desc_vc_itf_t const *vc = _get_desc_vc(self); - uint_fast8_t bInCollection = vc->ctl.bInCollection; - - /* Find the end of the video interface descriptor */ - void const *cur = _next_desc_itf(itf_desc, end); - for (uint8_t stm_idx = 0; stm_idx < bInCollection; ++stm_idx) { - videod_streaming_interface_t *stm = NULL; - /* find free streaming interface handle */ - for (uint8_t i = 0; i < CFG_TUD_VIDEO_STREAMING; ++i) { - if (_videod_streaming_itf[i].desc.beg) - continue; - stm = &_videod_streaming_itf[i]; - self->stm[stm_idx] = i; - break; - } - TU_ASSERT(stm, 0); - stm->index_vc = ctl_idx; - stm->index_vs = stm_idx; - stm->desc.beg = (uint16_t)((uintptr_t)cur - (uintptr_t)itf_desc); - cur = _next_desc_itf(cur, end); - stm->desc.end = (uint16_t)((uintptr_t)cur - (uintptr_t)itf_desc); - stm->state = VS_STATE_PROBING; + TU_ASSERT(stm, 0); + stm->index_vc = ctl_idx; + stm->index_vs = stm_idx; + stm->desc.beg = (uint16_t) ((uintptr_t)cur - (uintptr_t)itf_desc); + cur = _next_desc_itf(cur, end); + stm->desc.end = (uint16_t) ((uintptr_t)cur - (uintptr_t)itf_desc); + stm->state = VS_STATE_PROBING; #ifdef TUP_DCD_EDPT_ISO_ALLOC - /* Allocate ISO endpoints */ - uint16_t ep_size = 0; - uint16_t ep_addr = 0; - uint8_t const *p_desc = (uint8_t const *)itf_desc + stm->desc.beg; - uint8_t const *p_desc_end = (uint8_t const *)itf_desc + stm->desc.end; - while (p_desc < p_desc_end) { - if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; - if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { - ep_addr = desc_ep->bEndpointAddress; - ep_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_size); - } - } - p_desc = tu_desc_next(p_desc); + /* Allocate ISO endpoints */ + uint16_t ep_size = 0; + uint16_t ep_addr = 0; + uint8_t const *p_desc = (uint8_t const*)itf_desc + stm->desc.beg; + uint8_t const *p_desc_end = (uint8_t const*)itf_desc + stm->desc.end; + while (p_desc < p_desc_end) { + if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc; + if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) { + ep_addr = desc_ep->bEndpointAddress; + ep_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_size); } - if (ep_addr > 0 && ep_size > 0) - usbd_edpt_iso_alloc(rhport, ep_addr, ep_size); + } + p_desc = tu_desc_next(p_desc); + } + if(ep_addr > 0 && ep_size > 0) usbd_edpt_iso_alloc(rhport, ep_addr, ep_size); #endif - if (0 == stm_idx && 1 == bInCollection) { - /* If there is only one streaming interface and no alternate settings, + if (0 == stm_idx && 1 == bInCollection) { + /* If there is only one streaming interface and no alternate settings, * host may not issue set_interface so open the streaming interface here. */ - uint8_t const *sbeg = (uint8_t const *)itf_desc + stm->desc.beg; - uint8_t const *send = (uint8_t const *)itf_desc + stm->desc.end; - if (send == _find_desc_itf(sbeg, send, _desc_itfnum(sbeg), 1)) { - TU_VERIFY(_open_vs_itf(rhport, stm, 0), 0); - } - } + uint8_t const *sbeg = (uint8_t const*)itf_desc + stm->desc.beg; + uint8_t const *send = (uint8_t const*)itf_desc + stm->desc.end; + if (send == _find_desc_itf(sbeg, send, _desc_itfnum(sbeg), 1)) { + TU_VERIFY(_open_vs_itf(rhport, stm, 0), 0); + } } - self->len = (uint16_t)((uintptr_t)cur - (uintptr_t)itf_desc); - return (uint16_t)((uintptr_t)cur - (uintptr_t)itf_desc); + } + self->len = (uint16_t) ((uintptr_t)cur - (uintptr_t)itf_desc); + return (uint16_t) ((uintptr_t)cur - (uintptr_t)itf_desc); } // Invoked when a control transfer occurred on an interface of this class // Driver response accordingly to the request and the transfer stage (setup/data/ack) // return false to stall control endpoint (e.g unsupported request) -bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) -{ - int err; - TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); - uint_fast8_t itfnum = tu_u16_low(request->wIndex); - /* Identify which control interface to use */ - uint_fast8_t itf; - for (itf = 0; itf < CFG_TUD_VIDEO; ++itf) { - void const *desc = _videod_itf[itf].beg; - if (!desc) - continue; - if (itfnum == _desc_itfnum(desc)) - break; - } - - if (itf < CFG_TUD_VIDEO) { - TU_LOG_DRV(" VC[%d]: ", itf); - err = handle_video_ctl_req(rhport, stage, request, itf); - _videod_itf[itf].error_code = (uint8_t)err; - if (err) - return false; - return true; - } - - /* Identify which streaming interface to use */ - for (itf = 0; itf < CFG_TUD_VIDEO_STREAMING; ++itf) { - videod_streaming_interface_t *stm = &_videod_streaming_itf[itf]; - if (!stm->desc.beg) - continue; - uint8_t const *desc = _videod_itf[stm->index_vc].beg; - if (itfnum == _desc_itfnum(desc + stm->desc.beg)) - break; - } +bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { + int err; + TU_VERIFY(request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE); + uint_fast8_t itfnum = tu_u16_low(request->wIndex); + /* Identify which control interface to use */ + uint_fast8_t itf; + for (itf = 0; itf < CFG_TUD_VIDEO; ++itf) { + void const *desc = _videod_itf[itf].beg; + if (!desc) continue; + if (itfnum == _desc_itfnum(desc)) break; + } + + if (itf < CFG_TUD_VIDEO) { + TU_LOG_DRV(" VC[%d]: ", itf); + err = handle_video_ctl_req(rhport, stage, request, itf); + _videod_itf[itf].error_code = (uint8_t)err; + if (err) return false; + return true; + } - if (itf < CFG_TUD_VIDEO_STREAMING) { - TU_LOG_DRV(" VS[%d]: ", itf); - err = handle_video_stm_req(rhport, stage, request, itf); - _videod_streaming_itf[itf].error_code = (uint8_t)err; - if (err) - return false; - return true; - } - return false; + /* Identify which streaming interface to use */ + for (itf = 0; itf < CFG_TUD_VIDEO_STREAMING; ++itf) { + videod_streaming_interface_t *stm = &_videod_streaming_itf[itf]; + if (!stm->desc.beg) continue; + uint8_t const *desc = _videod_itf[stm->index_vc].beg; + if (itfnum == _desc_itfnum(desc + stm->desc.beg)) break; + } + + if (itf < CFG_TUD_VIDEO_STREAMING) { + TU_LOG_DRV(" VS[%d]: ", itf); + err = handle_video_stm_req(rhport, stage, request, itf); + _videod_streaming_itf[itf].error_code = (uint8_t)err; + if (err) return false; + return true; + } + return false; } -bool videod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) -{ - (void)result; - (void)xferred_bytes; - - /* find streaming handle */ - uint_fast8_t itf; - videod_interface_t *ctl; - videod_streaming_interface_t *stm; - for (itf = 0; itf < CFG_TUD_VIDEO_STREAMING; ++itf) { - stm = &_videod_streaming_itf[itf]; - uint_fast16_t const ep_ofs = stm->desc.ep[0]; - if (!ep_ofs) - continue; - ctl = &_videod_itf[stm->index_vc]; - uint8_t const *desc = ctl->beg; - if (ep_addr == _desc_ep_addr(desc + ep_ofs)) - break; - } - - TU_ASSERT(itf < CFG_TUD_VIDEO_STREAMING); - if (stm->offset < stm->bufsize) { - /* Claim the endpoint */ - TU_VERIFY(usbd_edpt_claim(rhport, ep_addr), 0); - uint_fast16_t pkt_len = _prepare_in_payload(stm); - TU_ASSERT(usbd_edpt_xfer(rhport, ep_addr, stm->ep_buf, (uint16_t)pkt_len), 0); - } else { - stm->buffer = NULL; - stm->bufsize = 0; - stm->offset = 0; - if (tud_video_frame_xfer_complete_cb) { - tud_video_frame_xfer_complete_cb(stm->index_vc, stm->index_vs); - } +bool videod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { + (void)result; (void)xferred_bytes; + + /* find streaming handle */ + uint_fast8_t itf; + videod_interface_t *ctl; + videod_streaming_interface_t *stm; + for (itf = 0; itf < CFG_TUD_VIDEO_STREAMING; ++itf) { + stm = &_videod_streaming_itf[itf]; + uint_fast16_t const ep_ofs = stm->desc.ep[0]; + if (!ep_ofs) continue; + ctl = &_videod_itf[stm->index_vc]; + uint8_t const *desc = ctl->beg; + if (ep_addr == _desc_ep_addr(desc + ep_ofs)) break; + } + + TU_ASSERT(itf < CFG_TUD_VIDEO_STREAMING); + if (stm->offset < stm->bufsize) { + /* Claim the endpoint */ + TU_VERIFY( usbd_edpt_claim(rhport, ep_addr), 0); + uint_fast16_t pkt_len = _prepare_in_payload(stm); + TU_ASSERT( usbd_edpt_xfer(rhport, ep_addr, stm->ep_buf, (uint16_t) pkt_len), 0); + } else { + stm->buffer = NULL; + stm->bufsize = 0; + stm->offset = 0; + if (tud_video_frame_xfer_complete_cb) { + tud_video_frame_xfer_complete_cb(stm->index_vc, stm->index_vs); } - return true; + } + return true; } #endif diff --git a/Libraries/tinyusb/src/class/video/video_device.h b/Libraries/tinyusb/src/class/video/video_device.h index 79d4ff2af39..92930c0132a 100644 --- a/Libraries/tinyusb/src/class/video/video_device.h +++ b/Libraries/tinyusb/src/class/video/video_device.h @@ -52,8 +52,7 @@ bool tud_video_n_streaming(uint_fast8_t ctl_idx, uint_fast8_t stm_idx); * @param[in] stm_idx Destination streaming interface index * @param[in] buffer Frame buffer. The caller must not use this buffer until the operation is completed. * @param[in] bufsize Byte size of the frame buffer */ -bool tud_video_n_frame_xfer(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void *buffer, - size_t bufsize); +bool tud_video_n_frame_xfer(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, void *buffer, size_t bufsize); /*------------- Optional callbacks -------------*/ /** Invoked when compeletion of a frame transfer @@ -85,15 +84,15 @@ TU_ATTR_WEAK int tud_video_commit_cb(uint_fast8_t ctl_idx, uint_fast8_t stm_idx, //--------------------------------------------------------------------+ // INTERNAL USBD-CLASS DRIVER API //--------------------------------------------------------------------+ -void videod_init(void); -bool videod_deinit(void); -void videod_reset(uint8_t rhport); -uint16_t videod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len); -bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); -bool videod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); +void videod_init (void); +bool videod_deinit (void); +void videod_reset (uint8_t rhport); +uint16_t videod_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); +bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); +bool videod_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/common/tusb_common.h b/Libraries/tinyusb/src/common/tusb_common.h index 9b070120eb1..0d4082c031f 100644 --- a/Libraries/tinyusb/src/common/tusb_common.h +++ b/Libraries/tinyusb/src/common/tusb_common.h @@ -28,37 +28,35 @@ #define _TUSB_COMMON_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ // Macros Helper //--------------------------------------------------------------------+ -#define TU_ARRAY_SIZE(_arr) (sizeof(_arr) / sizeof(_arr[0])) -#define TU_MIN(_x, _y) (((_x) < (_y)) ? (_x) : (_y)) -#define TU_MAX(_x, _y) (((_x) > (_y)) ? (_x) : (_y)) -#define TU_DIV_CEIL(n, d) (((n) + (d)-1) / (d)) +#define TU_ARRAY_SIZE(_arr) ( sizeof(_arr) / sizeof(_arr[0]) ) +#define TU_MIN(_x, _y) ( ( (_x) < (_y) ) ? (_x) : (_y) ) +#define TU_MAX(_x, _y) ( ( (_x) > (_y) ) ? (_x) : (_y) ) +#define TU_DIV_CEIL(n, d) (((n) + (d) - 1) / (d)) -#define TU_U16(_high, _low) ((uint16_t)(((_high) << 8) | (_low))) -#define TU_U16_HIGH(_u16) ((uint8_t)(((_u16) >> 8) & 0x00ff)) -#define TU_U16_LOW(_u16) ((uint8_t)((_u16)&0x00ff)) -#define U16_TO_U8S_BE(_u16) TU_U16_HIGH(_u16), TU_U16_LOW(_u16) -#define U16_TO_U8S_LE(_u16) TU_U16_LOW(_u16), TU_U16_HIGH(_u16) +#define TU_U16(_high, _low) ((uint16_t) (((_high) << 8) | (_low))) +#define TU_U16_HIGH(_u16) ((uint8_t) (((_u16) >> 8) & 0x00ff)) +#define TU_U16_LOW(_u16) ((uint8_t) ((_u16) & 0x00ff)) +#define U16_TO_U8S_BE(_u16) TU_U16_HIGH(_u16), TU_U16_LOW(_u16) +#define U16_TO_U8S_LE(_u16) TU_U16_LOW(_u16), TU_U16_HIGH(_u16) -#define TU_U32_BYTE3(_u32) ((uint8_t)((((uint32_t)_u32) >> 24) & 0x000000ff)) // MSB -#define TU_U32_BYTE2(_u32) ((uint8_t)((((uint32_t)_u32) >> 16) & 0x000000ff)) -#define TU_U32_BYTE1(_u32) ((uint8_t)((((uint32_t)_u32) >> 8) & 0x000000ff)) -#define TU_U32_BYTE0(_u32) ((uint8_t)(((uint32_t)_u32) & 0x000000ff)) // LSB +#define TU_U32_BYTE3(_u32) ((uint8_t) ((((uint32_t) _u32) >> 24) & 0x000000ff)) // MSB +#define TU_U32_BYTE2(_u32) ((uint8_t) ((((uint32_t) _u32) >> 16) & 0x000000ff)) +#define TU_U32_BYTE1(_u32) ((uint8_t) ((((uint32_t) _u32) >> 8) & 0x000000ff)) +#define TU_U32_BYTE0(_u32) ((uint8_t) (((uint32_t) _u32) & 0x000000ff)) // LSB -#define U32_TO_U8S_BE(_u32) \ - TU_U32_BYTE3(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE0(_u32) -#define U32_TO_U8S_LE(_u32) \ - TU_U32_BYTE0(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE3(_u32) +#define U32_TO_U8S_BE(_u32) TU_U32_BYTE3(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE0(_u32) +#define U32_TO_U8S_LE(_u32) TU_U32_BYTE0(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE3(_u32) -#define TU_BIT(n) (1UL << (n)) +#define TU_BIT(n) (1UL << (n)) // Generate a mask with bit from high (31) to low (0) set, e.g TU_GENMASK(3, 0) = 0b1111 -#define TU_GENMASK(h, l) ((UINT32_MAX << (l)) & (UINT32_MAX >> (31 - (h)))) +#define TU_GENMASK(h, l) ( (UINT32_MAX << (l)) & (UINT32_MAX >> (31 - (h))) ) //--------------------------------------------------------------------+ // Includes @@ -91,183 +89,98 @@ TU_ATTR_WEAK extern void tusb_app_dcache_flush(uintptr_t addr, uint32_t data_siz TU_ATTR_WEAK extern void tusb_app_dcache_invalidate(uintptr_t addr, uint32_t data_size); // Optional physical <-> virtual address translation -TU_ATTR_WEAK extern void *tusb_app_virt_to_phys(void *virt_addr); -TU_ATTR_WEAK extern void *tusb_app_phys_to_virt(void *phys_addr); +TU_ATTR_WEAK extern void* tusb_app_virt_to_phys(void *virt_addr); +TU_ATTR_WEAK extern void* tusb_app_phys_to_virt(void *phys_addr); //--------------------------------------------------------------------+ // Internal Inline Functions //--------------------------------------------------------------------+ //------------- Mem -------------// -#define tu_memclr(buffer, size) memset((buffer), 0, (size)) -#define tu_varclr(_var) tu_memclr(_var, sizeof(*(_var))) +#define tu_memclr(buffer, size) memset((buffer), 0, (size)) +#define tu_varclr(_var) tu_memclr(_var, sizeof(*(_var))) // This is a backport of memset_s from c11 -TU_ATTR_ALWAYS_INLINE static inline int tu_memset_s(void *dest, size_t destsz, int ch, size_t count) -{ - // TODO may check if desst and src is not NULL - if (count > destsz) { - return -1; - } - memset(dest, ch, count); - return 0; +TU_ATTR_ALWAYS_INLINE static inline int tu_memset_s(void *dest, size_t destsz, int ch, size_t count) { + // TODO may check if desst and src is not NULL + if ( count > destsz ) { + return -1; + } + memset(dest, ch, count); + return 0; } // This is a backport of memcpy_s from c11 -TU_ATTR_ALWAYS_INLINE static inline int tu_memcpy_s(void *dest, size_t destsz, const void *src, - size_t count) -{ - // TODO may check if desst and src is not NULL - if (count > destsz) { - return -1; - } - memcpy(dest, src, count); - return 0; +TU_ATTR_ALWAYS_INLINE static inline int tu_memcpy_s(void *dest, size_t destsz, const void *src, size_t count) { + // TODO may check if desst and src is not NULL + if ( count > destsz ) { + return -1; + } + memcpy(dest, src, count); + return 0; } + //------------- Bytes -------------// -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_u32(uint8_t b3, uint8_t b2, uint8_t b1, uint8_t b0) -{ - return (((uint32_t)b3) << 24) | (((uint32_t)b2) << 16) | (((uint32_t)b1) << 8) | b0; +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_u32(uint8_t b3, uint8_t b2, uint8_t b1, uint8_t b0) { + return ( ((uint32_t) b3) << 24) | ( ((uint32_t) b2) << 16) | ( ((uint32_t) b1) << 8) | b0; } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u16(uint8_t high, uint8_t low) -{ - return (uint16_t)((((uint16_t)high) << 8) | low); +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u16(uint8_t high, uint8_t low) { + return (uint16_t) ((((uint16_t) high) << 8) | low); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte3(uint32_t ui32) -{ - return TU_U32_BYTE3(ui32); -} -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte2(uint32_t ui32) -{ - return TU_U32_BYTE2(ui32); -} -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte1(uint32_t ui32) -{ - return TU_U32_BYTE1(ui32); -} -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte0(uint32_t ui32) -{ - return TU_U32_BYTE0(ui32); -} +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte3(uint32_t ui32) { return TU_U32_BYTE3(ui32); } +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte2(uint32_t ui32) { return TU_U32_BYTE2(ui32); } +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte1(uint32_t ui32) { return TU_U32_BYTE1(ui32); } +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u32_byte0(uint32_t ui32) { return TU_U32_BYTE0(ui32); } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_high16(uint32_t ui32) -{ - return (uint16_t)(ui32 >> 16); -} -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_low16(uint32_t ui32) -{ - return (uint16_t)(ui32 & 0x0000ffffu); -} +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_high16(uint32_t ui32) { return (uint16_t) (ui32 >> 16); } +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_u32_low16 (uint32_t ui32) { return (uint16_t) (ui32 & 0x0000ffffu); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_high(uint16_t ui16) -{ - return TU_U16_HIGH(ui16); -} -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_low(uint16_t ui16) -{ - return TU_U16_LOW(ui16); -} +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_high(uint16_t ui16) { return TU_U16_HIGH(ui16); } +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_u16_low (uint16_t ui16) { return TU_U16_LOW(ui16); } //------------- Bits -------------// -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_set(uint32_t value, uint8_t pos) -{ - return value | TU_BIT(pos); -} -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_clear(uint32_t value, uint8_t pos) -{ - return value & (~TU_BIT(pos)); -} -TU_ATTR_ALWAYS_INLINE static inline bool tu_bit_test(uint32_t value, uint8_t pos) -{ - return (value & TU_BIT(pos)) ? true : false; -} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_set (uint32_t value, uint8_t pos) { return value | TU_BIT(pos); } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_bit_clear(uint32_t value, uint8_t pos) { return value & (~TU_BIT(pos)); } +TU_ATTR_ALWAYS_INLINE static inline bool tu_bit_test (uint32_t value, uint8_t pos) { return (value & TU_BIT(pos)) ? true : false; } //------------- Min -------------// -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_min8(uint8_t x, uint8_t y) -{ - return (x < y) ? x : y; -} -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_min16(uint16_t x, uint16_t y) -{ - return (x < y) ? x : y; -} -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_min32(uint32_t x, uint32_t y) -{ - return (x < y) ? x : y; -} +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_min8 (uint8_t x, uint8_t y ) { return (x < y) ? x : y; } +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_min16 (uint16_t x, uint16_t y) { return (x < y) ? x : y; } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_min32 (uint32_t x, uint32_t y) { return (x < y) ? x : y; } //------------- Max -------------// -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_max8(uint8_t x, uint8_t y) -{ - return (x > y) ? x : y; -} -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_max16(uint16_t x, uint16_t y) -{ - return (x > y) ? x : y; -} -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_max32(uint32_t x, uint32_t y) -{ - return (x > y) ? x : y; -} +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_max8 (uint8_t x, uint8_t y ) { return (x > y) ? x : y; } +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_max16 (uint16_t x, uint16_t y) { return (x > y) ? x : y; } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_max32 (uint32_t x, uint32_t y) { return (x > y) ? x : y; } //------------- Align -------------// -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align(uint32_t value, uint32_t alignment) -{ - return value & ((uint32_t) ~(alignment - 1)); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align(uint32_t value, uint32_t alignment) { + return value & ((uint32_t) ~(alignment-1)); } -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4(uint32_t value) -{ - return (value & 0xFFFFFFFCUL); -} -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align8(uint32_t value) -{ - return (value & 0xFFFFFFF8UL); -} -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align16(uint32_t value) -{ - return (value & 0xFFFFFFF0UL); -} -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align32(uint32_t value) -{ - return (value & 0xFFFFFFE0UL); -} -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4k(uint32_t value) -{ - return (value & 0xFFFFF000UL); -} -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_offset4k(uint32_t value) -{ - return (value & 0xFFFUL); -} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4 (uint32_t value) { return (value & 0xFFFFFFFCUL); } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align8 (uint32_t value) { return (value & 0xFFFFFFF8UL); } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align16 (uint32_t value) { return (value & 0xFFFFFFF0UL); } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align32 (uint32_t value) { return (value & 0xFFFFFFE0UL); } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_align4k (uint32_t value) { return (value & 0xFFFFF000UL); } +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_offset4k(uint32_t value) { return (value & 0xFFFUL); } -TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned32(uint32_t value) -{ - return (value & 0x1FUL) == 0; -} -TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned64(uint64_t value) -{ - return (value & 0x3FUL) == 0; -} +TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned32(uint32_t value) { return (value & 0x1FUL) == 0; } +TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned64(uint64_t value) { return (value & 0x3FUL) == 0; } //------------- Mathematics -------------// -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_div_ceil(uint32_t v, uint32_t d) -{ - return (v + d - 1) / d; -} +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_div_ceil(uint32_t v, uint32_t d) { return (v + d -1)/d; } // log2 of a value is its MSB's position // TODO use clz TODO remove static inline uint8_t tu_log2(uint32_t value) { - uint8_t result = 0; - while (value >>= 1) { - result++; - } - return result; + uint8_t result = 0; + while (value >>= 1) { result++; } + return result; } //static inline uint8_t tu_log2(uint32_t value) @@ -277,42 +190,38 @@ static inline uint8_t tu_log2(uint32_t value) static inline bool tu_is_power_of_two(uint32_t value) { - return (value != 0) && ((value & (value - 1)) == 0); + return (value != 0) && ((value & (value - 1)) == 0); } //------------- Unaligned Access -------------// #if TUP_ARCH_STRICT_ALIGN // Rely on compiler to generate correct code for unaligned access -typedef struct { - uint16_t val; -} TU_ATTR_PACKED tu_unaligned_uint16_t; -typedef struct { - uint32_t val; -} TU_ATTR_PACKED tu_unaligned_uint32_t; - -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) +typedef struct { uint16_t val; } TU_ATTR_PACKED tu_unaligned_uint16_t; +typedef struct { uint32_t val; } TU_ATTR_PACKED tu_unaligned_uint32_t; + +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void* mem) { - tu_unaligned_uint32_t const *ua32 = (tu_unaligned_uint32_t const *)mem; - return ua32->val; + tu_unaligned_uint32_t const* ua32 = (tu_unaligned_uint32_t const*) mem; + return ua32->val; } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void* mem, uint32_t value) { - tu_unaligned_uint32_t *ua32 = (tu_unaligned_uint32_t *)mem; - ua32->val = value; + tu_unaligned_uint32_t* ua32 = (tu_unaligned_uint32_t*) mem; + ua32->val = value; } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void* mem) { - tu_unaligned_uint16_t const *ua16 = (tu_unaligned_uint16_t const *)mem; - return ua16->val; + tu_unaligned_uint16_t const* ua16 = (tu_unaligned_uint16_t const*) mem; + return ua16->val; } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void* mem, uint16_t value) { - tu_unaligned_uint16_t *ua16 = (tu_unaligned_uint16_t *)mem; - ua16->val = value; + tu_unaligned_uint16_t* ua16 = (tu_unaligned_uint16_t*) mem; + ua16->val = value; } #elif TUP_MCU_STRICT_ALIGN @@ -321,55 +230,52 @@ TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_ // We have to manually pick up bytes since tu_unaligned_uint32_t will still generate unaligned code // NOTE: volatile cast to memory to prevent compiler to optimize and generate unaligned code // TODO Big Endian may need minor changes -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void* mem) { - volatile uint8_t const *buf8 = (uint8_t const *)mem; - return tu_u32(buf8[3], buf8[2], buf8[1], buf8[0]); + volatile uint8_t const* buf8 = (uint8_t const*) mem; + return tu_u32(buf8[3], buf8[2], buf8[1], buf8[0]); } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void* mem, uint32_t value) { - volatile uint8_t *buf8 = (uint8_t *)mem; - buf8[0] = tu_u32_byte0(value); - buf8[1] = tu_u32_byte1(value); - buf8[2] = tu_u32_byte2(value); - buf8[3] = tu_u32_byte3(value); + volatile uint8_t* buf8 = (uint8_t*) mem; + buf8[0] = tu_u32_byte0(value); + buf8[1] = tu_u32_byte1(value); + buf8[2] = tu_u32_byte2(value); + buf8[3] = tu_u32_byte3(value); } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void* mem) { - volatile uint8_t const *buf8 = (uint8_t const *)mem; - return tu_u16(buf8[1], buf8[0]); + volatile uint8_t const* buf8 = (uint8_t const*) mem; + return tu_u16(buf8[1], buf8[0]); } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void* mem, uint16_t value) { - volatile uint8_t *buf8 = (uint8_t *)mem; - buf8[0] = tu_u16_low(value); - buf8[1] = tu_u16_high(value); + volatile uint8_t* buf8 = (uint8_t*) mem; + buf8[0] = tu_u16_low(value); + buf8[1] = tu_u16_high(value); } + #else // MCU that could access unaligned memory natively -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) -{ - return *((uint32_t const *)mem); +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_unaligned_read32(const void *mem) { + return *((uint32_t const *) mem); } -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) -{ - return *((uint16_t const *)mem); +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_unaligned_read16(const void *mem) { + return *((uint16_t const *) mem); } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) -{ - *((uint32_t *)mem) = value; +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write32(void *mem, uint32_t value) { + *((uint32_t *) mem) = value; } -TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) -{ - *((uint16_t *)mem) = value; +TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_t value) { + *((uint16_t *) mem) = value; } #endif @@ -378,28 +284,33 @@ TU_ATTR_ALWAYS_INLINE static inline void tu_unaligned_write16(void *mem, uint16_ //------------- Binary constant -------------// #if defined(__GNUC__) && !defined(__CC_ARM) -#define TU_BIN8(x) ((uint8_t)(0b##x)) -#define TU_BIN16(b1, b2) ((uint16_t)(0b##b1##b2)) -#define TU_BIN32(b1, b2, b3, b4) ((uint32_t)(0b##b1##b2##b3##b4)) +#define TU_BIN8(x) ((uint8_t) (0b##x)) +#define TU_BIN16(b1, b2) ((uint16_t) (0b##b1##b2)) +#define TU_BIN32(b1, b2, b3, b4) ((uint32_t) (0b##b1##b2##b3##b4)) #else // internal macro of B8, B16, B32 -#define _B8__(x) \ - (((x & 0x0000000FUL) ? 1 : 0) + ((x & 0x000000F0UL) ? 2 : 0) + ((x & 0x00000F00UL) ? 4 : 0) + \ - ((x & 0x0000F000UL) ? 8 : 0) + ((x & 0x000F0000UL) ? 16 : 0) + \ - ((x & 0x00F00000UL) ? 32 : 0) + ((x & 0x0F000000UL) ? 64 : 0) + \ - ((x & 0xF0000000UL) ? 128 : 0)) - -#define TU_BIN8(d) ((uint8_t)_B8__(0x##d##UL)) -#define TU_BIN16(dmsb, dlsb) (((uint16_t)TU_BIN8(dmsb) << 8) + TU_BIN8(dlsb)) -#define TU_BIN32(dmsb, db2, db3, dlsb) \ - (((uint32_t)TU_BIN8(dmsb) << 24) + ((uint32_t)TU_BIN8(db2) << 16) + \ - ((uint32_t)TU_BIN8(db3) << 8) + TU_BIN8(dlsb)) +#define _B8__(x) (((x&0x0000000FUL)?1:0) \ + +((x&0x000000F0UL)?2:0) \ + +((x&0x00000F00UL)?4:0) \ + +((x&0x0000F000UL)?8:0) \ + +((x&0x000F0000UL)?16:0) \ + +((x&0x00F00000UL)?32:0) \ + +((x&0x0F000000UL)?64:0) \ + +((x&0xF0000000UL)?128:0)) + +#define TU_BIN8(d) ((uint8_t) _B8__(0x##d##UL)) +#define TU_BIN16(dmsb,dlsb) (((uint16_t)TU_BIN8(dmsb)<<8) + TU_BIN8(dlsb)) +#define TU_BIN32(dmsb,db2,db3,dlsb) \ + (((uint32_t)TU_BIN8(dmsb)<<24) \ + + ((uint32_t)TU_BIN8(db2)<<16) \ + + ((uint32_t)TU_BIN8(db3)<<8) \ + + TU_BIN8(dlsb)) #endif #ifdef __cplusplus -} + } #endif #endif /* _TUSB_COMMON_H_ */ diff --git a/Libraries/tinyusb/src/common/tusb_compiler.h b/Libraries/tinyusb/src/common/tusb_compiler.h index 7f6829f006a..ce5566ffe3d 100644 --- a/Libraries/tinyusb/src/common/tusb_compiler.h +++ b/Libraries/tinyusb/src/common/tusb_compiler.h @@ -32,46 +32,44 @@ #ifndef _TUSB_COMPILER_H_ #define _TUSB_COMPILER_H_ -#define TU_TOKEN(x) x -#define TU_STRING(x) #x ///< stringify without expand -#define TU_XSTRING(x) TU_STRING(x) ///< expand then stringify +#define TU_TOKEN(x) x +#define TU_STRING(x) #x ///< stringify without expand +#define TU_XSTRING(x) TU_STRING(x) ///< expand then stringify -#define TU_STRCAT(a, b) a##b ///< concat without expand -#define TU_STRCAT3(a, b, c) a##b##c ///< concat without expand +#define TU_STRCAT(a, b) a##b ///< concat without expand +#define TU_STRCAT3(a, b, c) a##b##c ///< concat without expand -#define TU_XSTRCAT(a, b) TU_STRCAT(a, b) ///< expand then concat -#define TU_XSTRCAT3(a, b, c) TU_STRCAT3(a, b, c) ///< expand then concat 3 tokens +#define TU_XSTRCAT(a, b) TU_STRCAT(a, b) ///< expand then concat +#define TU_XSTRCAT3(a, b, c) TU_STRCAT3(a, b, c) ///< expand then concat 3 tokens -#define TU_INCLUDE_PATH(_dir, _file) TU_XSTRING(TU_TOKEN(_dir) TU_TOKEN(_file)) +#define TU_INCLUDE_PATH(_dir,_file) TU_XSTRING( TU_TOKEN(_dir)TU_TOKEN(_file) ) #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ -#define _TU_COUNTER_ __COUNTER__ + #define _TU_COUNTER_ __COUNTER__ #else -#define _TU_COUNTER_ __LINE__ + #define _TU_COUNTER_ __LINE__ #endif // Compile-time Assert -#if defined(__cplusplus) && __cplusplus >= 201103L -#define TU_VERIFY_STATIC static_assert -#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L -#define TU_VERIFY_STATIC _Static_assert +#if defined (__cplusplus) && __cplusplus >= 201103L + #define TU_VERIFY_STATIC static_assert +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define TU_VERIFY_STATIC _Static_assert #elif defined(__CCRX__) -#define TU_VERIFY_STATIC(const_expr, _mess) \ - typedef char TU_XSTRCAT(_verify_static_, _TU_COUNTER_)[(const_expr) ? 1 : 0]; + #define TU_VERIFY_STATIC(const_expr, _mess) typedef char TU_XSTRCAT(_verify_static_, _TU_COUNTER_)[(const_expr) ? 1 : 0]; #else -#define TU_VERIFY_STATIC(const_expr, _mess) \ - enum { TU_XSTRCAT(_verify_static_, _TU_COUNTER_) = 1 / (!!(const_expr)) } + #define TU_VERIFY_STATIC(const_expr, _mess) enum { TU_XSTRCAT(_verify_static_, _TU_COUNTER_) = 1/(!!(const_expr)) } #endif /* --------------------- Fuzzing types -------------------------------------- */ #ifdef _FUZZ -#define tu_static static __thread + #define tu_static static __thread #else -#define tu_static static + #define tu_static static #endif // for declaration of reserved field, make use of _TU_COUNTER_ -#define TU_RESERVED TU_XSTRCAT(reserved, _TU_COUNTER_) +#define TU_RESERVED TU_XSTRCAT(reserved, _TU_COUNTER_) #define TU_LITTLE_ENDIAN (0x12u) #define TU_BIG_ENDIAN (0x21u) @@ -85,40 +83,40 @@ * - ##__VA_ARGS__ is used to deal with 0 paramerter (swallows comma) *------------------------------------------------------------------*/ #if !defined(__CCRX__) -#define TU_ARGS_NUM(...) _TU_NARG(_0, ##__VA_ARGS__, _RSEQ_N()) +#define TU_ARGS_NUM(...) _TU_NARG(_0, ##__VA_ARGS__, _RSEQ_N()) #else -#define TU_ARGS_NUM(...) _TU_NARG(_0, __VA_ARGS__, _RSEQ_N()) +#define TU_ARGS_NUM(...) _TU_NARG(_0, __VA_ARGS__, _RSEQ_N()) #endif -#define _TU_NARG(...) _GET_NTH_ARG(__VA_ARGS__) -#define _GET_NTH_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, \ - _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, \ - _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \ - _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, \ - _63, N, ...) \ - N -#define _RSEQ_N() \ - 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \ - 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, \ - 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 +#define _TU_NARG(...) _GET_NTH_ARG(__VA_ARGS__) +#define _GET_NTH_ARG( \ + _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ + _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ + _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ + _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ + _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ + _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ + _61,_62,_63,N,...) N +#define _RSEQ_N() \ + 62,61,60, \ + 59,58,57,56,55,54,53,52,51,50, \ + 49,48,47,46,45,44,43,42,41,40, \ + 39,38,37,36,35,34,33,32,31,30, \ + 29,28,27,26,25,24,23,22,21,20, \ + 19,18,17,16,15,14,13,12,11,10, \ + 9,8,7,6,5,4,3,2,1,0 // Apply an macro X to each of the arguments with an separated of choice -#define TU_ARGS_APPLY(_X, _s, ...) \ - TU_XSTRCAT(_TU_ARGS_APPLY_, TU_ARGS_NUM(__VA_ARGS__))(_X, _s, __VA_ARGS__) - -#define _TU_ARGS_APPLY_1(_X, _s, _a1) _X(_a1) -#define _TU_ARGS_APPLY_2(_X, _s, _a1, _a2) _X(_a1) _s _X(_a2) -#define _TU_ARGS_APPLY_3(_X, _s, _a1, _a2, _a3) _X(_a1) _s _TU_ARGS_APPLY_2(_X, _s, _a2, _a3) -#define _TU_ARGS_APPLY_4(_X, _s, _a1, _a2, _a3, _a4) \ - _X(_a1) _s _TU_ARGS_APPLY_3(_X, _s, _a2, _a3, _a4) -#define _TU_ARGS_APPLY_5(_X, _s, _a1, _a2, _a3, _a4, _a5) \ - _X(_a1) _s _TU_ARGS_APPLY_4(_X, _s, _a2, _a3, _a4, _a5) -#define _TU_ARGS_APPLY_6(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6) \ - _X(_a1) _s _TU_ARGS_APPLY_5(_X, _s, _a2, _a3, _a4, _a5, _a6) -#define _TU_ARGS_APPLY_7(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7) \ - _X(_a1) _s _TU_ARGS_APPLY_6(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7) -#define _TU_ARGS_APPLY_8(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8) \ - _X(_a1) _s _TU_ARGS_APPLY_7(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7, _a8) +#define TU_ARGS_APPLY(_X, _s, ...) TU_XSTRCAT(_TU_ARGS_APPLY_, TU_ARGS_NUM(__VA_ARGS__))(_X, _s, __VA_ARGS__) + +#define _TU_ARGS_APPLY_1(_X, _s, _a1) _X(_a1) +#define _TU_ARGS_APPLY_2(_X, _s, _a1, _a2) _X(_a1) _s _X(_a2) +#define _TU_ARGS_APPLY_3(_X, _s, _a1, _a2, _a3) _X(_a1) _s _TU_ARGS_APPLY_2(_X, _s, _a2, _a3) +#define _TU_ARGS_APPLY_4(_X, _s, _a1, _a2, _a3, _a4) _X(_a1) _s _TU_ARGS_APPLY_3(_X, _s, _a2, _a3, _a4) +#define _TU_ARGS_APPLY_5(_X, _s, _a1, _a2, _a3, _a4, _a5) _X(_a1) _s _TU_ARGS_APPLY_4(_X, _s, _a2, _a3, _a4, _a5) +#define _TU_ARGS_APPLY_6(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6) _X(_a1) _s _TU_ARGS_APPLY_5(_X, _s, _a2, _a3, _a4, _a5, _a6) +#define _TU_ARGS_APPLY_7(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7) _X(_a1) _s _TU_ARGS_APPLY_6(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7) +#define _TU_ARGS_APPLY_8(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8) _X(_a1) _s _TU_ARGS_APPLY_7(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7, _a8) //--------------------------------------------------------------------+ // Compiler porting with Attribute and Endian @@ -126,183 +124,174 @@ // TODO refactor since __attribute__ is supported across many compiler #if defined(__GNUC__) -#define TU_ATTR_ALIGNED(Bytes) __attribute__((aligned(Bytes))) -#define TU_ATTR_SECTION(sec_name) __attribute__((section(#sec_name))) -#define TU_ATTR_PACKED __attribute__((packed)) -#define TU_ATTR_WEAK __attribute__((weak)) -// #define TU_ATTR_WEAK_ALIAS(f) __attribute__ ((weak, alias(#f)) -#ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug -#define TU_ATTR_ALWAYS_INLINE __attribute__((always_inline)) -#endif -#define TU_ATTR_DEPRECATED(mess) \ - __attribute__((deprecated(mess))) // warn if function with this attribute is used -#define TU_ATTR_UNUSED __attribute__((unused)) // Function/Variable is meant to be possibly unused -#define TU_ATTR_USED __attribute__((used)) // Function/Variable is meant to be used - -#define TU_ATTR_PACKED_BEGIN -#define TU_ATTR_PACKED_END -#define TU_ATTR_BIT_FIELD_ORDER_BEGIN -#define TU_ATTR_BIT_FIELD_ORDER_END - -#if __GNUC__ < 5 -#define TU_ATTR_FALLTHROUGH \ - do { \ - } while (0) /* fallthrough */ -#else -#if __has_attribute(__fallthrough__) -#define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) -#else -#define TU_ATTR_FALLTHROUGH \ - do { \ - } while (0) /* fallthrough */ -#endif -#endif - -// Endian conversion use well-known host to network (big endian) naming -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -#define TU_BYTE_ORDER TU_LITTLE_ENDIAN -#else -#define TU_BYTE_ORDER TU_BIG_ENDIAN -#endif - -// Unfortunately XC16 doesn't provide builtins for 32bit endian conversion -#if defined(__XC16) -#define TU_BSWAP16(u16) (__builtin_swap(u16)) -#define TU_BSWAP32(u32) \ - ((((u32)&0xff000000) >> 24) | (((u32)&0x00ff0000) >> 8) | (((u32)&0x0000ff00) << 8) | \ - (((u32)&0x000000ff) << 24)) -#else -#define TU_BSWAP16(u16) (__builtin_bswap16(u16)) -#define TU_BSWAP32(u32) (__builtin_bswap32(u32)) -#endif - -#ifndef __ARMCC_VERSION -// List of obsolete callback function that is renamed and should not be defined. -// Put it here since only gcc support this pragma -#pragma GCC poison tud_vendor_control_request_cb -#endif + #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) + #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) + #define TU_ATTR_PACKED __attribute__ ((packed)) + #define TU_ATTR_WEAK __attribute__ ((weak)) + // #define TU_ATTR_WEAK_ALIAS(f) __attribute__ ((weak, alias(#f)) + #ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug + #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) + #endif + #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used + #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused + #define TU_ATTR_USED __attribute__ ((used)) // Function/Variable is meant to be used + + #define TU_ATTR_PACKED_BEGIN + #define TU_ATTR_PACKED_END + #define TU_ATTR_BIT_FIELD_ORDER_BEGIN + #define TU_ATTR_BIT_FIELD_ORDER_END + + #if __GNUC__ < 5 + #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ + #else + #if __has_attribute(__fallthrough__) + #define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) + #else + #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ + #endif + #endif + + // Endian conversion use well-known host to network (big endian) naming + #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + #define TU_BYTE_ORDER TU_LITTLE_ENDIAN + #else + #define TU_BYTE_ORDER TU_BIG_ENDIAN + #endif + + // Unfortunately XC16 doesn't provide builtins for 32bit endian conversion + #if defined(__XC16) + #define TU_BSWAP16(u16) (__builtin_swap(u16)) + #define TU_BSWAP32(u32) ((((u32) & 0xff000000) >> 24) | \ + (((u32) & 0x00ff0000) >> 8) | \ + (((u32) & 0x0000ff00) << 8) | \ + (((u32) & 0x000000ff) << 24)) + #else + #define TU_BSWAP16(u16) (__builtin_bswap16(u16)) + #define TU_BSWAP32(u32) (__builtin_bswap32(u32)) + #endif + + #ifndef __ARMCC_VERSION + // List of obsolete callback function that is renamed and should not be defined. + // Put it here since only gcc support this pragma + #pragma GCC poison tud_vendor_control_request_cb + #endif #elif defined(__TI_COMPILER_VERSION__) -#define TU_ATTR_ALIGNED(Bytes) __attribute__((aligned(Bytes))) -#define TU_ATTR_SECTION(sec_name) __attribute__((section(#sec_name))) -#define TU_ATTR_PACKED __attribute__((packed)) -#define TU_ATTR_WEAK __attribute__((weak)) -#define TU_ATTR_ALWAYS_INLINE __attribute__((always_inline)) -#define TU_ATTR_DEPRECATED(mess) \ - __attribute__((deprecated(mess))) // warn if function with this attribute is used -#define TU_ATTR_UNUSED __attribute__((unused)) // Function/Variable is meant to be possibly unused -#define TU_ATTR_USED __attribute__((used)) -#define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) - -#define TU_ATTR_PACKED_BEGIN -#define TU_ATTR_PACKED_END -#define TU_ATTR_BIT_FIELD_ORDER_BEGIN -#define TU_ATTR_BIT_FIELD_ORDER_END - -// __BYTE_ORDER is defined in the TI ARM compiler, but not MSP430 (which is little endian) -#if ((__BYTE_ORDER__) == (__ORDER_LITTLE_ENDIAN__)) || defined(__MSP430__) -#define TU_BYTE_ORDER TU_LITTLE_ENDIAN -#else -#define TU_BYTE_ORDER TU_BIG_ENDIAN -#endif - -#define TU_BSWAP16(u16) (__builtin_bswap16(u16)) -#define TU_BSWAP32(u32) (__builtin_bswap32(u32)) + #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) + #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) + #define TU_ATTR_PACKED __attribute__ ((packed)) + #define TU_ATTR_WEAK __attribute__ ((weak)) + #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) + #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used + #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused + #define TU_ATTR_USED __attribute__ ((used)) + #define TU_ATTR_FALLTHROUGH __attribute__((fallthrough)) + + #define TU_ATTR_PACKED_BEGIN + #define TU_ATTR_PACKED_END + #define TU_ATTR_BIT_FIELD_ORDER_BEGIN + #define TU_ATTR_BIT_FIELD_ORDER_END + + // __BYTE_ORDER is defined in the TI ARM compiler, but not MSP430 (which is little endian) + #if ((__BYTE_ORDER__) == (__ORDER_LITTLE_ENDIAN__)) || defined(__MSP430__) + #define TU_BYTE_ORDER TU_LITTLE_ENDIAN + #else + #define TU_BYTE_ORDER TU_BIG_ENDIAN + #endif + + #define TU_BSWAP16(u16) (__builtin_bswap16(u16)) + #define TU_BSWAP32(u32) (__builtin_bswap32(u32)) #elif defined(__ICCARM__) -#include -#define TU_ATTR_ALIGNED(Bytes) __attribute__((aligned(Bytes))) -#define TU_ATTR_SECTION(sec_name) __attribute__((section(#sec_name))) -#define TU_ATTR_PACKED __attribute__((packed)) -#define TU_ATTR_WEAK __attribute__((weak)) -#ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug -#define TU_ATTR_ALWAYS_INLINE __attribute__((always_inline)) -#endif -#define TU_ATTR_DEPRECATED(mess) \ - __attribute__((deprecated(mess))) // warn if function with this attribute is used -#define TU_ATTR_UNUSED __attribute__((unused)) // Function/Variable is meant to be possibly unused -#define TU_ATTR_USED __attribute__((used)) // Function/Variable is meant to be used -#define TU_ATTR_FALLTHROUGH \ - do { \ - } while (0) /* fallthrough */ - -#define TU_ATTR_PACKED_BEGIN -#define TU_ATTR_PACKED_END -#define TU_ATTR_BIT_FIELD_ORDER_BEGIN -#define TU_ATTR_BIT_FIELD_ORDER_END - -// Endian conversion use well-known host to network (big endian) naming -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -#define TU_BYTE_ORDER TU_LITTLE_ENDIAN -#else -#define TU_BYTE_ORDER TU_BIG_ENDIAN -#endif - -#define TU_BSWAP16(u16) (__iar_builtin_REV16(u16)) -#define TU_BSWAP32(u32) (__iar_builtin_REV(u32)) + #include + #define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes))) + #define TU_ATTR_SECTION(sec_name) __attribute__ ((section(#sec_name))) + #define TU_ATTR_PACKED __attribute__ ((packed)) + #define TU_ATTR_WEAK __attribute__ ((weak)) + #ifndef TU_ATTR_ALWAYS_INLINE // allow to override for debug + #define TU_ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) + #endif + #define TU_ATTR_DEPRECATED(mess) __attribute__ ((deprecated(mess))) // warn if function with this attribute is used + #define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused + #define TU_ATTR_USED __attribute__ ((used)) // Function/Variable is meant to be used + #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ + + #define TU_ATTR_PACKED_BEGIN + #define TU_ATTR_PACKED_END + #define TU_ATTR_BIT_FIELD_ORDER_BEGIN + #define TU_ATTR_BIT_FIELD_ORDER_END + + // Endian conversion use well-known host to network (big endian) naming + #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + #define TU_BYTE_ORDER TU_LITTLE_ENDIAN + #else + #define TU_BYTE_ORDER TU_BIG_ENDIAN + #endif + + #define TU_BSWAP16(u16) (__iar_builtin_REV16(u16)) + #define TU_BSWAP32(u32) (__iar_builtin_REV(u32)) #elif defined(__CCRX__) -#define TU_ATTR_ALIGNED(Bytes) -#define TU_ATTR_SECTION(sec_name) -#define TU_ATTR_PACKED -#define TU_ATTR_WEAK -#define TU_ATTR_ALWAYS_INLINE -#define TU_ATTR_DEPRECATED(mess) -#define TU_ATTR_UNUSED -#define TU_ATTR_USED -#define TU_ATTR_FALLTHROUGH \ - do { \ - } while (0) /* fallthrough */ - -#define TU_ATTR_PACKED_BEGIN _Pragma("pack") -#define TU_ATTR_PACKED_END _Pragma("packoption") -#define TU_ATTR_BIT_FIELD_ORDER_BEGIN _Pragma("bit_order right") -#define TU_ATTR_BIT_FIELD_ORDER_END _Pragma("bit_order") - -// Endian conversion use well-known host to network (big endian) naming -#if defined(__LIT) -#define TU_BYTE_ORDER TU_LITTLE_ENDIAN -#else -#define TU_BYTE_ORDER TU_BIG_ENDIAN -#endif - -#define TU_BSWAP16(u16) ((unsigned short)_builtin_revw((unsigned long)u16)) -#define TU_BSWAP32(u32) (_builtin_revl(u32)) + #define TU_ATTR_ALIGNED(Bytes) + #define TU_ATTR_SECTION(sec_name) + #define TU_ATTR_PACKED + #define TU_ATTR_WEAK + #define TU_ATTR_ALWAYS_INLINE + #define TU_ATTR_DEPRECATED(mess) + #define TU_ATTR_UNUSED + #define TU_ATTR_USED + #define TU_ATTR_FALLTHROUGH do {} while (0) /* fallthrough */ + + #define TU_ATTR_PACKED_BEGIN _Pragma("pack") + #define TU_ATTR_PACKED_END _Pragma("packoption") + #define TU_ATTR_BIT_FIELD_ORDER_BEGIN _Pragma("bit_order right") + #define TU_ATTR_BIT_FIELD_ORDER_END _Pragma("bit_order") + + // Endian conversion use well-known host to network (big endian) naming + #if defined(__LIT) + #define TU_BYTE_ORDER TU_LITTLE_ENDIAN + #else + #define TU_BYTE_ORDER TU_BIG_ENDIAN + #endif + + #define TU_BSWAP16(u16) ((unsigned short)_builtin_revw((unsigned long)u16)) + #define TU_BSWAP32(u32) (_builtin_revl(u32)) #else -#error "Compiler attribute porting is required" + #error "Compiler attribute porting is required" #endif + #if (TU_BYTE_ORDER == TU_LITTLE_ENDIAN) -#define tu_htons(u16) (TU_BSWAP16(u16)) -#define tu_ntohs(u16) (TU_BSWAP16(u16)) + #define tu_htons(u16) (TU_BSWAP16(u16)) + #define tu_ntohs(u16) (TU_BSWAP16(u16)) -#define tu_htonl(u32) (TU_BSWAP32(u32)) -#define tu_ntohl(u32) (TU_BSWAP32(u32)) + #define tu_htonl(u32) (TU_BSWAP32(u32)) + #define tu_ntohl(u32) (TU_BSWAP32(u32)) -#define tu_htole16(u16) (u16) -#define tu_le16toh(u16) (u16) + #define tu_htole16(u16) (u16) + #define tu_le16toh(u16) (u16) -#define tu_htole32(u32) (u32) -#define tu_le32toh(u32) (u32) + #define tu_htole32(u32) (u32) + #define tu_le32toh(u32) (u32) #elif (TU_BYTE_ORDER == TU_BIG_ENDIAN) -#define tu_htons(u16) (u16) -#define tu_ntohs(u16) (u16) + #define tu_htons(u16) (u16) + #define tu_ntohs(u16) (u16) -#define tu_htonl(u32) (u32) -#define tu_ntohl(u32) (u32) + #define tu_htonl(u32) (u32) + #define tu_ntohl(u32) (u32) -#define tu_htole16(u16) (TU_BSWAP16(u16)) -#define tu_le16toh(u16) (TU_BSWAP16(u16)) + #define tu_htole16(u16) (TU_BSWAP16(u16)) + #define tu_le16toh(u16) (TU_BSWAP16(u16)) -#define tu_htole32(u32) (TU_BSWAP32(u32)) -#define tu_le32toh(u32) (TU_BSWAP32(u32)) + #define tu_htole32(u32) (TU_BSWAP32(u32)) + #define tu_le32toh(u32) (TU_BSWAP32(u32)) #else -#error Byte order is undefined + #error Byte order is undefined #endif #endif /* _TUSB_COMPILER_H_ */ diff --git a/Libraries/tinyusb/src/common/tusb_debug.h b/Libraries/tinyusb/src/common/tusb_debug.h index a93a6da288b..2e9f1d9cdcd 100644 --- a/Libraries/tinyusb/src/common/tusb_debug.h +++ b/Libraries/tinyusb/src/common/tusb_debug.h @@ -28,7 +28,7 @@ #define _TUSB_DEBUG_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -44,95 +44,92 @@ extern "C" { // Enum to String for debugging purposes #if CFG_TUSB_DEBUG >= CFG_TUH_LOG_LEVEL || CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL -extern char const *const tu_str_speed[]; -extern char const *const tu_str_std_request[]; -extern char const *const tu_str_xfer_result[]; +extern char const* const tu_str_speed[]; +extern char const* const tu_str_std_request[]; +extern char const* const tu_str_xfer_result[]; #endif void tu_print_mem(void const *buf, uint32_t count, uint8_t indent); #ifdef CFG_TUSB_DEBUG_PRINTF -extern int CFG_TUSB_DEBUG_PRINTF(const char *format, ...); -#define tu_printf CFG_TUSB_DEBUG_PRINTF + extern int CFG_TUSB_DEBUG_PRINTF(const char *format, ...); + #define tu_printf CFG_TUSB_DEBUG_PRINTF #else -#define tu_printf printf + #define tu_printf printf #endif -static inline void tu_print_buf(uint8_t const *buf, uint32_t bufsize) -{ - for (uint32_t i = 0; i < bufsize; i++) tu_printf("%02X ", buf[i]); - tu_printf("\r\n"); +static inline void tu_print_buf(uint8_t const* buf, uint32_t bufsize) { + for(uint32_t i=0; i= 2 -#define TU_LOG2 TU_LOG1 -#define TU_LOG2_MEM TU_LOG1_MEM -#define TU_LOG2_BUF TU_LOG1_BUF -#define TU_LOG2_INT TU_LOG1_INT -#define TU_LOG2_HEX TU_LOG1_HEX + #define TU_LOG2 TU_LOG1 + #define TU_LOG2_MEM TU_LOG1_MEM + #define TU_LOG2_BUF TU_LOG1_BUF + #define TU_LOG2_INT TU_LOG1_INT + #define TU_LOG2_HEX TU_LOG1_HEX #endif // Log Level 3: Info #if CFG_TUSB_DEBUG >= 3 -#define TU_LOG3 TU_LOG1 -#define TU_LOG3_MEM TU_LOG1_MEM -#define TU_LOG3_BUF TU_LOG1_BUF -#define TU_LOG3_INT TU_LOG1_INT -#define TU_LOG3_HEX TU_LOG1_HEX + #define TU_LOG3 TU_LOG1 + #define TU_LOG3_MEM TU_LOG1_MEM + #define TU_LOG3_BUF TU_LOG1_BUF + #define TU_LOG3_INT TU_LOG1_INT + #define TU_LOG3_HEX TU_LOG1_HEX #endif typedef struct { - uint32_t key; - const char *data; + uint32_t key; + const char* data; } tu_lookup_entry_t; typedef struct { - uint16_t count; - tu_lookup_entry_t const *items; + uint16_t count; + tu_lookup_entry_t const* items; } tu_lookup_table_t; -static inline const char *tu_lookup_find(tu_lookup_table_t const *p_table, uint32_t key) -{ - tu_static char not_found[11]; +static inline const char* tu_lookup_find(tu_lookup_table_t const* p_table, uint32_t key) { + tu_static char not_found[11]; - for (uint16_t i = 0; i < p_table->count; i++) { - if (p_table->items[i].key == key) - return p_table->items[i].data; - } + for(uint16_t i=0; icount; i++) { + if (p_table->items[i].key == key) return p_table->items[i].data; + } - // not found return the key value in hex - snprintf(not_found, sizeof(not_found), "0x%08lX", (unsigned long)key); + // not found return the key value in hex + snprintf(not_found, sizeof(not_found), "0x%08lX", (unsigned long) key); - return not_found; + return not_found; } #endif // CFG_TUSB_DEBUG #ifndef TU_LOG -#define TU_LOG(n, ...) -#define TU_LOG_MEM(n, ...) -#define TU_LOG_BUF(n, ...) -#define TU_LOG_INT(n, ...) -#define TU_LOG_HEX(n, ...) -#define TU_LOG_LOCATION() -#define TU_LOG_FAILED() + #define TU_LOG(n, ...) + #define TU_LOG_MEM(n, ...) + #define TU_LOG_BUF(n, ...) + #define TU_LOG_INT(n, ...) + #define TU_LOG_HEX(n, ...) + #define TU_LOG_LOCATION() + #define TU_LOG_FAILED() #endif // TODO replace all TU_LOGn with TU_LOG(n) @@ -144,31 +141,31 @@ static inline const char *tu_lookup_find(tu_lookup_table_t const *p_table, uint3 #define TU_LOG0_HEX(...) #ifndef TU_LOG1 -#define TU_LOG1(...) -#define TU_LOG1_MEM(...) -#define TU_LOG1_BUF(...) -#define TU_LOG1_INT(...) -#define TU_LOG1_HEX(...) + #define TU_LOG1(...) + #define TU_LOG1_MEM(...) + #define TU_LOG1_BUF(...) + #define TU_LOG1_INT(...) + #define TU_LOG1_HEX(...) #endif #ifndef TU_LOG2 -#define TU_LOG2(...) -#define TU_LOG2_MEM(...) -#define TU_LOG2_BUF(...) -#define TU_LOG2_INT(...) -#define TU_LOG2_HEX(...) + #define TU_LOG2(...) + #define TU_LOG2_MEM(...) + #define TU_LOG2_BUF(...) + #define TU_LOG2_INT(...) + #define TU_LOG2_HEX(...) #endif #ifndef TU_LOG3 -#define TU_LOG3(...) -#define TU_LOG3_MEM(...) -#define TU_LOG3_BUF(...) -#define TU_LOG3_INT(...) -#define TU_LOG3_HEX(...) + #define TU_LOG3(...) + #define TU_LOG3_MEM(...) + #define TU_LOG3_BUF(...) + #define TU_LOG3_INT(...) + #define TU_LOG3_HEX(...) #endif #ifdef __cplusplus -} + } #endif #endif /* _TUSB_DEBUG_H_ */ diff --git a/Libraries/tinyusb/src/common/tusb_fifo.c b/Libraries/tinyusb/src/common/tusb_fifo.c index d233dfcb354..8a0fd441761 100644 --- a/Libraries/tinyusb/src/common/tusb_fifo.c +++ b/Libraries/tinyusb/src/common/tusb_fifo.c @@ -28,7 +28,7 @@ #include "osal/osal.h" #include "tusb_fifo.h" -#define TU_FIFO_DBG 0 +#define TU_FIFO_DBG 0 // Suppress IAR warning // Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement @@ -40,14 +40,12 @@ TU_ATTR_ALWAYS_INLINE static inline void _ff_lock(osal_mutex_t mutex) { - if (mutex) - osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); + if (mutex) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); } TU_ATTR_ALWAYS_INLINE static inline void _ff_unlock(osal_mutex_t mutex) { - if (mutex) - osal_mutex_unlock(mutex); + if (mutex) osal_mutex_unlock(mutex); } #else @@ -61,36 +59,35 @@ TU_ATTR_ALWAYS_INLINE static inline void _ff_unlock(osal_mutex_t mutex) * \brief Write modes intended to allow special read and write functions to be able to * copy data to and from USB hardware FIFOs as needed for e.g. STM32s and others */ -typedef enum { - TU_FIFO_COPY_INC, ///< Copy from/to an increasing source/destination address - default mode +typedef enum +{ + TU_FIFO_COPY_INC, ///< Copy from/to an increasing source/destination address - default mode #ifdef TUP_MEM_CONST_ADDR - TU_FIFO_COPY_CST_FULL_WORDS, ///< Copy from/to a constant source/destination address - required for e.g. STM32 to write into USB hardware FIFO + TU_FIFO_COPY_CST_FULL_WORDS, ///< Copy from/to a constant source/destination address - required for e.g. STM32 to write into USB hardware FIFO #endif } tu_fifo_copy_mode_t; -bool tu_fifo_config(tu_fifo_t *f, void *buffer, uint16_t depth, uint16_t item_size, - bool overwritable) +bool tu_fifo_config(tu_fifo_t *f, void* buffer, uint16_t depth, uint16_t item_size, bool overwritable) { - // Limit index space to 2*depth - this allows for a fast "modulo" calculation - // but limits the maximum depth to 2^16/2 = 2^15 and buffer overflows are detectable - // only if overflow happens once (important for unsupervised DMA applications) - if (depth > 0x8000) - return false; + // Limit index space to 2*depth - this allows for a fast "modulo" calculation + // but limits the maximum depth to 2^16/2 = 2^15 and buffer overflows are detectable + // only if overflow happens once (important for unsupervised DMA applications) + if (depth > 0x8000) return false; - _ff_lock(f->mutex_wr); - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_wr); + _ff_lock(f->mutex_rd); - f->buffer = (uint8_t *)buffer; - f->depth = depth; - f->item_size = (uint16_t)(item_size & 0x7FFF); - f->overwritable = overwritable; - f->rd_idx = 0; - f->wr_idx = 0; + f->buffer = (uint8_t*) buffer; + f->depth = depth; + f->item_size = (uint16_t) (item_size & 0x7FFF); + f->overwritable = overwritable; + f->rd_idx = 0; + f->wr_idx = 0; - _ff_unlock(f->mutex_wr); - _ff_unlock(f->mutex_rd); + _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_rd); - return true; + return true; } //--------------------------------------------------------------------+ @@ -101,210 +98,228 @@ bool tu_fifo_config(tu_fifo_t *f, void *buffer, uint16_t depth, uint16_t item_si // Intended to be used to read from hardware USB FIFO in e.g. STM32 where all data is read from a constant address // Code adapted from dcd_synopsys.c // TODO generalize with configurable 1 byte or 4 byte each read -static void _ff_push_const_addr(uint8_t *ff_buf, const void *app_buf, uint16_t len) +static void _ff_push_const_addr(uint8_t * ff_buf, const void * app_buf, uint16_t len) { - volatile const uint32_t *reg_rx = (volatile const uint32_t *)app_buf; + volatile const uint32_t * reg_rx = (volatile const uint32_t *) app_buf; - // Reading full available 32 bit words from const app address - uint16_t full_words = len >> 2; - while (full_words--) { - tu_unaligned_write32(ff_buf, *reg_rx); - ff_buf += 4; - } + // Reading full available 32 bit words from const app address + uint16_t full_words = len >> 2; + while(full_words--) + { + tu_unaligned_write32(ff_buf, *reg_rx); + ff_buf += 4; + } - // Read the remaining 1-3 bytes from const app address - uint8_t const bytes_rem = len & 0x03; - if (bytes_rem) { - uint32_t tmp32 = *reg_rx; - memcpy(ff_buf, &tmp32, bytes_rem); - } + // Read the remaining 1-3 bytes from const app address + uint8_t const bytes_rem = len & 0x03; + if ( bytes_rem ) + { + uint32_t tmp32 = *reg_rx; + memcpy(ff_buf, &tmp32, bytes_rem); + } } // Intended to be used to write to hardware USB FIFO in e.g. STM32 // where all data is written to a constant address in full word copies -static void _ff_pull_const_addr(void *app_buf, const uint8_t *ff_buf, uint16_t len) +static void _ff_pull_const_addr(void * app_buf, const uint8_t * ff_buf, uint16_t len) { - volatile uint32_t *reg_tx = (volatile uint32_t *)app_buf; + volatile uint32_t * reg_tx = (volatile uint32_t *) app_buf; - // Write full available 32 bit words to const address - uint16_t full_words = len >> 2; - while (full_words--) { - *reg_tx = tu_unaligned_read32(ff_buf); - ff_buf += 4; - } + // Write full available 32 bit words to const address + uint16_t full_words = len >> 2; + while(full_words--) + { + *reg_tx = tu_unaligned_read32(ff_buf); + ff_buf += 4; + } - // Write the remaining 1-3 bytes into const address - uint8_t const bytes_rem = len & 0x03; - if (bytes_rem) { - uint32_t tmp32 = 0; - memcpy(&tmp32, ff_buf, bytes_rem); + // Write the remaining 1-3 bytes into const address + uint8_t const bytes_rem = len & 0x03; + if ( bytes_rem ) + { + uint32_t tmp32 = 0; + memcpy(&tmp32, ff_buf, bytes_rem); - *reg_tx = tmp32; - } + *reg_tx = tmp32; + } } #endif // send one item to fifo WITHOUT updating write pointer -static inline void _ff_push(tu_fifo_t *f, void const *app_buf, uint16_t rel) +static inline void _ff_push(tu_fifo_t* f, void const * app_buf, uint16_t rel) { - memcpy(f->buffer + (rel * f->item_size), app_buf, f->item_size); + memcpy(f->buffer + (rel * f->item_size), app_buf, f->item_size); } // send n items to fifo WITHOUT updating write pointer -static void _ff_push_n(tu_fifo_t *f, void const *app_buf, uint16_t n, uint16_t wr_ptr, - tu_fifo_copy_mode_t copy_mode) +static void _ff_push_n(tu_fifo_t* f, void const * app_buf, uint16_t n, uint16_t wr_ptr, tu_fifo_copy_mode_t copy_mode) { - uint16_t const lin_count = f->depth - wr_ptr; - uint16_t const wrap_count = n - lin_count; + uint16_t const lin_count = f->depth - wr_ptr; + uint16_t const wrap_count = n - lin_count; - uint16_t lin_bytes = lin_count * f->item_size; - uint16_t wrap_bytes = wrap_count * f->item_size; + uint16_t lin_bytes = lin_count * f->item_size; + uint16_t wrap_bytes = wrap_count * f->item_size; - // current buffer of fifo - uint8_t *ff_buf = f->buffer + (wr_ptr * f->item_size); + // current buffer of fifo + uint8_t* ff_buf = f->buffer + (wr_ptr * f->item_size); - switch (copy_mode) { + switch (copy_mode) + { case TU_FIFO_COPY_INC: - if (n <= lin_count) { - // Linear only - memcpy(ff_buf, app_buf, n * f->item_size); - } else { - // Wrap around - - // Write data to linear part of buffer - memcpy(ff_buf, app_buf, lin_bytes); - - // Write data wrapped around - // TU_ASSERT(nWrap_bytes <= f->depth, ); - memcpy(f->buffer, ((uint8_t const *)app_buf) + lin_bytes, wrap_bytes); - } - break; + if(n <= lin_count) + { + // Linear only + memcpy(ff_buf, app_buf, n*f->item_size); + } + else + { + // Wrap around + + // Write data to linear part of buffer + memcpy(ff_buf, app_buf, lin_bytes); + + // Write data wrapped around + // TU_ASSERT(nWrap_bytes <= f->depth, ); + memcpy(f->buffer, ((uint8_t const*) app_buf) + lin_bytes, wrap_bytes); + } + break; #ifdef TUP_MEM_CONST_ADDR case TU_FIFO_COPY_CST_FULL_WORDS: - // Intended for hardware buffers from which it can be read word by word only - if (n <= lin_count) { - // Linear only - _ff_push_const_addr(ff_buf, app_buf, n * f->item_size); - } else { - // Wrap around case - - // Write full words to linear part of buffer - uint16_t nLin_4n_bytes = lin_bytes & 0xFFFC; - _ff_push_const_addr(ff_buf, app_buf, nLin_4n_bytes); - ff_buf += nLin_4n_bytes; - - // There could be odd 1-3 bytes before the wrap-around boundary - uint8_t rem = lin_bytes & 0x03; - if (rem > 0) { - volatile const uint32_t *rx_fifo = (volatile const uint32_t *)app_buf; - - uint8_t remrem = (uint8_t)tu_min16(wrap_bytes, 4 - rem); - wrap_bytes -= remrem; - - uint32_t tmp32 = *rx_fifo; - uint8_t *src_u8 = ((uint8_t *)&tmp32); - - // Write 1-3 bytes before wrapped boundary - while (rem--) *ff_buf++ = *src_u8++; - - // Read more bytes to beginning to complete a word - ff_buf = f->buffer; - while (remrem--) *ff_buf++ = *src_u8++; - } else { - ff_buf = f->buffer; // wrap around to beginning - } - - // Write data wrapped part - if (wrap_bytes > 0) - _ff_push_const_addr(ff_buf, app_buf, wrap_bytes); + // Intended for hardware buffers from which it can be read word by word only + if(n <= lin_count) + { + // Linear only + _ff_push_const_addr(ff_buf, app_buf, n*f->item_size); + } + else + { + // Wrap around case + + // Write full words to linear part of buffer + uint16_t nLin_4n_bytes = lin_bytes & 0xFFFC; + _ff_push_const_addr(ff_buf, app_buf, nLin_4n_bytes); + ff_buf += nLin_4n_bytes; + + // There could be odd 1-3 bytes before the wrap-around boundary + uint8_t rem = lin_bytes & 0x03; + if (rem > 0) + { + volatile const uint32_t * rx_fifo = (volatile const uint32_t *) app_buf; + + uint8_t remrem = (uint8_t) tu_min16(wrap_bytes, 4-rem); + wrap_bytes -= remrem; + + uint32_t tmp32 = *rx_fifo; + uint8_t * src_u8 = ((uint8_t *) &tmp32); + + // Write 1-3 bytes before wrapped boundary + while(rem--) *ff_buf++ = *src_u8++; + + // Read more bytes to beginning to complete a word + ff_buf = f->buffer; + while(remrem--) *ff_buf++ = *src_u8++; } - break; + else + { + ff_buf = f->buffer; // wrap around to beginning + } + + // Write data wrapped part + if (wrap_bytes > 0) _ff_push_const_addr(ff_buf, app_buf, wrap_bytes); + } + break; #endif - default: - break; - } + default: break; + } } // get one item from fifo WITHOUT updating read pointer -static inline void _ff_pull(tu_fifo_t *f, void *app_buf, uint16_t rel) +static inline void _ff_pull(tu_fifo_t* f, void * app_buf, uint16_t rel) { - memcpy(app_buf, f->buffer + (rel * f->item_size), f->item_size); + memcpy(app_buf, f->buffer + (rel * f->item_size), f->item_size); } // get n items from fifo WITHOUT updating read pointer -static void _ff_pull_n(tu_fifo_t *f, void *app_buf, uint16_t n, uint16_t rd_ptr, - tu_fifo_copy_mode_t copy_mode) +static void _ff_pull_n(tu_fifo_t* f, void* app_buf, uint16_t n, uint16_t rd_ptr, tu_fifo_copy_mode_t copy_mode) { - uint16_t const lin_count = f->depth - rd_ptr; - uint16_t const wrap_count = n - lin_count; // only used if wrapped + uint16_t const lin_count = f->depth - rd_ptr; + uint16_t const wrap_count = n - lin_count; // only used if wrapped - uint16_t lin_bytes = lin_count * f->item_size; - uint16_t wrap_bytes = wrap_count * f->item_size; + uint16_t lin_bytes = lin_count * f->item_size; + uint16_t wrap_bytes = wrap_count * f->item_size; - // current buffer of fifo - uint8_t *ff_buf = f->buffer + (rd_ptr * f->item_size); + // current buffer of fifo + uint8_t* ff_buf = f->buffer + (rd_ptr * f->item_size); - switch (copy_mode) { + switch (copy_mode) + { case TU_FIFO_COPY_INC: - if (n <= lin_count) { - // Linear only - memcpy(app_buf, ff_buf, n * f->item_size); - } else { - // Wrap around - - // Read data from linear part of buffer - memcpy(app_buf, ff_buf, lin_bytes); - - // Read data wrapped part - memcpy((uint8_t *)app_buf + lin_bytes, f->buffer, wrap_bytes); - } - break; + if ( n <= lin_count ) + { + // Linear only + memcpy(app_buf, ff_buf, n*f->item_size); + } + else + { + // Wrap around + + // Read data from linear part of buffer + memcpy(app_buf, ff_buf, lin_bytes); + + // Read data wrapped part + memcpy((uint8_t*) app_buf + lin_bytes, f->buffer, wrap_bytes); + } + break; #ifdef TUP_MEM_CONST_ADDR case TU_FIFO_COPY_CST_FULL_WORDS: - if (n <= lin_count) { - // Linear only - _ff_pull_const_addr(app_buf, ff_buf, n * f->item_size); - } else { - // Wrap around case - - // Read full words from linear part of buffer - uint16_t lin_4n_bytes = lin_bytes & 0xFFFC; - _ff_pull_const_addr(app_buf, ff_buf, lin_4n_bytes); - ff_buf += lin_4n_bytes; - - // There could be odd 1-3 bytes before the wrap-around boundary - uint8_t rem = lin_bytes & 0x03; - if (rem > 0) { - volatile uint32_t *reg_tx = (volatile uint32_t *)app_buf; - - uint8_t remrem = (uint8_t)tu_min16(wrap_bytes, 4 - rem); - wrap_bytes -= remrem; - - uint32_t tmp32 = 0; - uint8_t *dst_u8 = (uint8_t *)&tmp32; - - // Read 1-3 bytes before wrapped boundary - while (rem--) *dst_u8++ = *ff_buf++; - - // Read more bytes from beginning to complete a word - ff_buf = f->buffer; - while (remrem--) *dst_u8++ = *ff_buf++; - - *reg_tx = tmp32; - } else { - ff_buf = f->buffer; // wrap around to beginning - } - - // Read data wrapped part - if (wrap_bytes > 0) - _ff_pull_const_addr(app_buf, ff_buf, wrap_bytes); + if ( n <= lin_count ) + { + // Linear only + _ff_pull_const_addr(app_buf, ff_buf, n*f->item_size); + } + else + { + // Wrap around case + + // Read full words from linear part of buffer + uint16_t lin_4n_bytes = lin_bytes & 0xFFFC; + _ff_pull_const_addr(app_buf, ff_buf, lin_4n_bytes); + ff_buf += lin_4n_bytes; + + // There could be odd 1-3 bytes before the wrap-around boundary + uint8_t rem = lin_bytes & 0x03; + if (rem > 0) + { + volatile uint32_t * reg_tx = (volatile uint32_t *) app_buf; + + uint8_t remrem = (uint8_t) tu_min16(wrap_bytes, 4-rem); + wrap_bytes -= remrem; + + uint32_t tmp32=0; + uint8_t * dst_u8 = (uint8_t *)&tmp32; + + // Read 1-3 bytes before wrapped boundary + while(rem--) *dst_u8++ = *ff_buf++; + + // Read more bytes from beginning to complete a word + ff_buf = f->buffer; + while(remrem--) *dst_u8++ = *ff_buf++; + + *reg_tx = tmp32; + } + else + { + ff_buf = f->buffer; // wrap around to beginning } + + // Read data wrapped part + if (wrap_bytes > 0) _ff_pull_const_addr(app_buf, ff_buf, wrap_bytes); + } #endif - break; + break; - default: - break; - } + default: break; + } } //--------------------------------------------------------------------+ @@ -312,23 +327,25 @@ static void _ff_pull_n(tu_fifo_t *f, void *app_buf, uint16_t n, uint16_t rd_ptr, //--------------------------------------------------------------------+ // return only the index difference and as such can be used to determine an overflow i.e overflowable count -TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_count(uint16_t depth, uint16_t wr_idx, - uint16_t rd_idx) +TU_ATTR_ALWAYS_INLINE static inline +uint16_t _ff_count(uint16_t depth, uint16_t wr_idx, uint16_t rd_idx) { - // In case we have non-power of two depth we need a further modification - if (wr_idx >= rd_idx) { - return (uint16_t)(wr_idx - rd_idx); - } else { - return (uint16_t)(2 * depth - (rd_idx - wr_idx)); - } + // In case we have non-power of two depth we need a further modification + if (wr_idx >= rd_idx) + { + return (uint16_t) (wr_idx - rd_idx); + } else + { + return (uint16_t) (2*depth - (rd_idx - wr_idx)); + } } // return remaining slot in fifo -TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_remaining(uint16_t depth, uint16_t wr_idx, - uint16_t rd_idx) +TU_ATTR_ALWAYS_INLINE static inline +uint16_t _ff_remaining(uint16_t depth, uint16_t wr_idx, uint16_t rd_idx) { - uint16_t const count = _ff_count(depth, wr_idx, rd_idx); - return (depth > count) ? (depth - count) : 0; + uint16_t const count = _ff_count(depth, wr_idx, rd_idx); + return (depth > count) ? (depth - count) : 0; } //--------------------------------------------------------------------+ @@ -339,16 +356,17 @@ TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_remaining(uint16_t depth, uint1 // "absolute" index is only in the range of [0..2*depth) static uint16_t advance_index(uint16_t depth, uint16_t idx, uint16_t offset) { - // We limit the index space of p such that a correct wrap around happens - // Check for a wrap around or if we are in unused index space - This has to be checked first!! - // We are exploiting the wrap around to the correct index - uint16_t new_idx = (uint16_t)(idx + offset); - if ((idx > new_idx) || (new_idx >= 2 * depth)) { - uint16_t const non_used_index_space = (uint16_t)(UINT16_MAX - (2 * depth - 1)); - new_idx = (uint16_t)(new_idx + non_used_index_space); - } + // We limit the index space of p such that a correct wrap around happens + // Check for a wrap around or if we are in unused index space - This has to be checked first!! + // We are exploiting the wrap around to the correct index + uint16_t new_idx = (uint16_t) (idx + offset); + if ( (idx > new_idx) || (new_idx >= 2*depth) ) + { + uint16_t const non_used_index_space = (uint16_t) (UINT16_MAX - (2*depth-1)); + new_idx = (uint16_t) (new_idx + non_used_index_space); + } - return new_idx; + return new_idx; } #if 0 // not used but @@ -370,175 +388,185 @@ static uint16_t backward_index(uint16_t depth, uint16_t idx, uint16_t offset) #endif // index to pointer, simply an modulo with minus. -TU_ATTR_ALWAYS_INLINE static inline uint16_t idx2ptr(uint16_t depth, uint16_t idx) +TU_ATTR_ALWAYS_INLINE static inline +uint16_t idx2ptr(uint16_t depth, uint16_t idx) { - // Only run at most 3 times since index is limit in the range of [0..2*depth) - while (idx >= depth) idx -= depth; - return idx; + // Only run at most 3 times since index is limit in the range of [0..2*depth) + while ( idx >= depth ) idx -= depth; + return idx; } // Works on local copies of w // When an overwritable fifo is overflowed, rd_idx will be re-index so that it forms // an full fifo i.e _ff_count() = depth -TU_ATTR_ALWAYS_INLINE static inline uint16_t _ff_correct_read_index(tu_fifo_t *f, uint16_t wr_idx) +TU_ATTR_ALWAYS_INLINE static inline +uint16_t _ff_correct_read_index(tu_fifo_t* f, uint16_t wr_idx) { - uint16_t rd_idx; - if (wr_idx >= f->depth) { - rd_idx = wr_idx - f->depth; - } else { - rd_idx = wr_idx + f->depth; - } + uint16_t rd_idx; + if ( wr_idx >= f->depth ) + { + rd_idx = wr_idx - f->depth; + }else + { + rd_idx = wr_idx + f->depth; + } - f->rd_idx = rd_idx; + f->rd_idx = rd_idx; - return rd_idx; + return rd_idx; } // Works on local copies of w and r // Must be protected by mutexes since in case of an overflow read pointer gets modified -static bool _tu_fifo_peek(tu_fifo_t *f, void *p_buffer, uint16_t wr_idx, uint16_t rd_idx) +static bool _tu_fifo_peek(tu_fifo_t* f, void * p_buffer, uint16_t wr_idx, uint16_t rd_idx) { - uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); + uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); - // nothing to peek - if (cnt == 0) - return false; + // nothing to peek + if ( cnt == 0 ) return false; - // Check overflow and correct if required - if (cnt > f->depth) { - rd_idx = _ff_correct_read_index(f, wr_idx); - cnt = f->depth; - } + // Check overflow and correct if required + if ( cnt > f->depth ) + { + rd_idx = _ff_correct_read_index(f, wr_idx); + cnt = f->depth; + } - uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); + uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); - // Peek data - _ff_pull(f, p_buffer, rd_ptr); + // Peek data + _ff_pull(f, p_buffer, rd_ptr); - return true; + return true; } // Works on local copies of w and r // Must be protected by mutexes since in case of an overflow read pointer gets modified -static uint16_t _tu_fifo_peek_n(tu_fifo_t *f, void *p_buffer, uint16_t n, uint16_t wr_idx, - uint16_t rd_idx, tu_fifo_copy_mode_t copy_mode) +static uint16_t _tu_fifo_peek_n(tu_fifo_t* f, void * p_buffer, uint16_t n, uint16_t wr_idx, uint16_t rd_idx, tu_fifo_copy_mode_t copy_mode) { - uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); + uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); - // nothing to peek - if (cnt == 0) - return 0; + // nothing to peek + if ( cnt == 0 ) return 0; - // Check overflow and correct if required - if (cnt > f->depth) { - rd_idx = _ff_correct_read_index(f, wr_idx); - cnt = f->depth; - } + // Check overflow and correct if required + if ( cnt > f->depth ) + { + rd_idx = _ff_correct_read_index(f, wr_idx); + cnt = f->depth; + } - // Check if we can read something at and after offset - if too less is available we read what remains - if (cnt < n) - n = cnt; + // Check if we can read something at and after offset - if too less is available we read what remains + if ( cnt < n ) n = cnt; - uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); + uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); - // Peek data - _ff_pull_n(f, p_buffer, n, rd_ptr, copy_mode); + // Peek data + _ff_pull_n(f, p_buffer, n, rd_ptr, copy_mode); - return n; + return n; } -static uint16_t _tu_fifo_write_n(tu_fifo_t *f, const void *data, uint16_t n, - tu_fifo_copy_mode_t copy_mode) +static uint16_t _tu_fifo_write_n(tu_fifo_t* f, const void * data, uint16_t n, tu_fifo_copy_mode_t copy_mode) { - if (n == 0) - return 0; - - _ff_lock(f->mutex_wr); - - uint16_t wr_idx = f->wr_idx; - uint16_t rd_idx = f->rd_idx; - - uint8_t const *buf8 = (uint8_t const *)data; - - TU_LOG(TU_FIFO_DBG, "rd = %3u, wr = %3u, count = %3u, remain = %3u, n = %3u: ", rd_idx, wr_idx, - _ff_count(f->depth, wr_idx, rd_idx), _ff_remaining(f->depth, wr_idx, rd_idx), n); - - if (!f->overwritable) { - // limit up to full - uint16_t const remain = _ff_remaining(f->depth, wr_idx, rd_idx); - n = tu_min16(n, remain); - } else { - // In over-writable mode, fifo_write() is allowed even when fifo is full. In such case, - // oldest data in fifo i.e at read pointer data will be overwritten - // Note: we can modify read buffer contents but we must not modify the read index itself within a write function! - // Since it would end up in a race condition with read functions! - if (n >= f->depth) { - // Only copy last part - if (copy_mode == TU_FIFO_COPY_INC) { - buf8 += (n - f->depth) * f->item_size; - } else { - // TODO should read from hw fifo to discard data, however reading an odd number could - // accidentally discard data. - } - - n = f->depth; - - // We start writing at the read pointer's position since we fill the whole buffer - wr_idx = rd_idx; - } else { - uint16_t const overflowable_count = _ff_count(f->depth, wr_idx, rd_idx); - if (overflowable_count + n >= 2 * f->depth) { - // Double overflowed - // Index is bigger than the allowed range [0,2*depth) - // re-position write index to have a full fifo after pushed - wr_idx = advance_index(f->depth, rd_idx, f->depth - n); - - // TODO we should also shift out n bytes from read index since we avoid changing rd index !! - // However memmove() is expensive due to actual copying + wrapping consideration. - // Also race condition could happen anyway if read() is invoke while moving result in corrupted memory - // currently deliberately not implemented --> result in incorrect data read back - } else { - // normal + single overflowed: - // Index is in the range of [0,2*depth) and thus detect and recoverable. Recovering is handled in read() - // Therefore we just increase write index - // we will correct (re-position) read index later on in fifo_read() function - } - } - } + if ( n == 0 ) return 0; - if (n) { - uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + _ff_lock(f->mutex_wr); - TU_LOG(TU_FIFO_DBG, "actual_n = %u, wr_ptr = %u", n, wr_ptr); + uint16_t wr_idx = f->wr_idx; + uint16_t rd_idx = f->rd_idx; - // Write data - _ff_push_n(f, buf8, n, wr_ptr, copy_mode); + uint8_t const* buf8 = (uint8_t const*) data; - // Advance index - f->wr_idx = advance_index(f->depth, wr_idx, n); + TU_LOG(TU_FIFO_DBG, "rd = %3u, wr = %3u, count = %3u, remain = %3u, n = %3u: ", + rd_idx, wr_idx, _ff_count(f->depth, wr_idx, rd_idx), _ff_remaining(f->depth, wr_idx, rd_idx), n); - TU_LOG(TU_FIFO_DBG, "\tnew_wr = %u\r\n", f->wr_idx); + if ( !f->overwritable ) + { + // limit up to full + uint16_t const remain = _ff_remaining(f->depth, wr_idx, rd_idx); + n = tu_min16(n, remain); + } + else + { + // In over-writable mode, fifo_write() is allowed even when fifo is full. In such case, + // oldest data in fifo i.e at read pointer data will be overwritten + // Note: we can modify read buffer contents but we must not modify the read index itself within a write function! + // Since it would end up in a race condition with read functions! + if ( n >= f->depth ) + { + // Only copy last part + if ( copy_mode == TU_FIFO_COPY_INC ) + { + buf8 += (n - f->depth) * f->item_size; + }else + { + // TODO should read from hw fifo to discard data, however reading an odd number could + // accidentally discard data. + } + + n = f->depth; + + // We start writing at the read pointer's position since we fill the whole buffer + wr_idx = rd_idx; + } + else + { + uint16_t const overflowable_count = _ff_count(f->depth, wr_idx, rd_idx); + if (overflowable_count + n >= 2*f->depth) + { + // Double overflowed + // Index is bigger than the allowed range [0,2*depth) + // re-position write index to have a full fifo after pushed + wr_idx = advance_index(f->depth, rd_idx, f->depth - n); + + // TODO we should also shift out n bytes from read index since we avoid changing rd index !! + // However memmove() is expensive due to actual copying + wrapping consideration. + // Also race condition could happen anyway if read() is invoke while moving result in corrupted memory + // currently deliberately not implemented --> result in incorrect data read back + }else + { + // normal + single overflowed: + // Index is in the range of [0,2*depth) and thus detect and recoverable. Recovering is handled in read() + // Therefore we just increase write index + // we will correct (re-position) read index later on in fifo_read() function + } } + } + + if (n) + { + uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + + TU_LOG(TU_FIFO_DBG, "actual_n = %u, wr_ptr = %u", n, wr_ptr); + + // Write data + _ff_push_n(f, buf8, n, wr_ptr, copy_mode); + + // Advance index + f->wr_idx = advance_index(f->depth, wr_idx, n); - _ff_unlock(f->mutex_wr); + TU_LOG(TU_FIFO_DBG, "\tnew_wr = %u\r\n", f->wr_idx); + } + + _ff_unlock(f->mutex_wr); - return n; + return n; } -static uint16_t _tu_fifo_read_n(tu_fifo_t *f, void *buffer, uint16_t n, - tu_fifo_copy_mode_t copy_mode) +static uint16_t _tu_fifo_read_n(tu_fifo_t* f, void * buffer, uint16_t n, tu_fifo_copy_mode_t copy_mode) { - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_rd); - // Peek the data - // f->rd_idx might get modified in case of an overflow so we can not use a local variable - n = _tu_fifo_peek_n(f, buffer, n, f->wr_idx, f->rd_idx, copy_mode); + // Peek the data + // f->rd_idx might get modified in case of an overflow so we can not use a local variable + n = _tu_fifo_peek_n(f, buffer, n, f->wr_idx, f->rd_idx, copy_mode); - // Advance read pointer - f->rd_idx = advance_index(f->depth, f->rd_idx, n); + // Advance read pointer + f->rd_idx = advance_index(f->depth, f->rd_idx, n); - _ff_unlock(f->mutex_rd); - return n; + _ff_unlock(f->mutex_rd); + return n; } //--------------------------------------------------------------------+ @@ -560,9 +588,9 @@ static uint16_t _tu_fifo_read_n(tu_fifo_t *f, void *buffer, uint16_t n, @returns Number of items in FIFO */ /******************************************************************************/ -uint16_t tu_fifo_count(tu_fifo_t *f) +uint16_t tu_fifo_count(tu_fifo_t* f) { - return tu_min16(_ff_count(f->depth, f->wr_idx, f->rd_idx), f->depth); + return tu_min16(_ff_count(f->depth, f->wr_idx, f->rd_idx), f->depth); } /******************************************************************************/ @@ -578,9 +606,9 @@ uint16_t tu_fifo_count(tu_fifo_t *f) @returns Number of items in FIFO */ /******************************************************************************/ -bool tu_fifo_empty(tu_fifo_t *f) +bool tu_fifo_empty(tu_fifo_t* f) { - return f->wr_idx == f->rd_idx; + return f->wr_idx == f->rd_idx; } /******************************************************************************/ @@ -596,9 +624,9 @@ bool tu_fifo_empty(tu_fifo_t *f) @returns Number of items in FIFO */ /******************************************************************************/ -bool tu_fifo_full(tu_fifo_t *f) +bool tu_fifo_full(tu_fifo_t* f) { - return _ff_count(f->depth, f->wr_idx, f->rd_idx) >= f->depth; + return _ff_count(f->depth, f->wr_idx, f->rd_idx) >= f->depth; } /******************************************************************************/ @@ -614,9 +642,9 @@ bool tu_fifo_full(tu_fifo_t *f) @returns Number of items in FIFO */ /******************************************************************************/ -uint16_t tu_fifo_remaining(tu_fifo_t *f) +uint16_t tu_fifo_remaining(tu_fifo_t* f) { - return _ff_remaining(f->depth, f->wr_idx, f->rd_idx); + return _ff_remaining(f->depth, f->wr_idx, f->rd_idx); } /******************************************************************************/ @@ -640,17 +668,17 @@ uint16_t tu_fifo_remaining(tu_fifo_t *f) @returns True if overflow happened */ /******************************************************************************/ -bool tu_fifo_overflowed(tu_fifo_t *f) +bool tu_fifo_overflowed(tu_fifo_t* f) { - return _ff_count(f->depth, f->wr_idx, f->rd_idx) > f->depth; + return _ff_count(f->depth, f->wr_idx, f->rd_idx) > f->depth; } // Only use in case tu_fifo_overflow() returned true! -void tu_fifo_correct_read_pointer(tu_fifo_t *f) +void tu_fifo_correct_read_pointer(tu_fifo_t* f) { - _ff_lock(f->mutex_rd); - _ff_correct_read_index(f, f->wr_idx); - _ff_unlock(f->mutex_rd); + _ff_lock(f->mutex_rd); + _ff_correct_read_index(f, f->wr_idx); + _ff_unlock(f->mutex_rd); } /******************************************************************************/ @@ -669,19 +697,19 @@ void tu_fifo_correct_read_pointer(tu_fifo_t *f) @returns TRUE if the queue is not empty */ /******************************************************************************/ -bool tu_fifo_read(tu_fifo_t *f, void *buffer) +bool tu_fifo_read(tu_fifo_t* f, void * buffer) { - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_rd); - // Peek the data - // f->rd_idx might get modified in case of an overflow so we can not use a local variable - bool ret = _tu_fifo_peek(f, buffer, f->wr_idx, f->rd_idx); + // Peek the data + // f->rd_idx might get modified in case of an overflow so we can not use a local variable + bool ret = _tu_fifo_peek(f, buffer, f->wr_idx, f->rd_idx); - // Advance pointer - f->rd_idx = advance_index(f->depth, f->rd_idx, ret); + // Advance pointer + f->rd_idx = advance_index(f->depth, f->rd_idx, ret); - _ff_unlock(f->mutex_rd); - return ret; + _ff_unlock(f->mutex_rd); + return ret; } /******************************************************************************/ @@ -700,9 +728,9 @@ bool tu_fifo_read(tu_fifo_t *f, void *buffer) @returns number of items read from the FIFO */ /******************************************************************************/ -uint16_t tu_fifo_read_n(tu_fifo_t *f, void *buffer, uint16_t n) +uint16_t tu_fifo_read_n(tu_fifo_t* f, void * buffer, uint16_t n) { - return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_INC); + return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_INC); } #ifdef TUP_MEM_CONST_ADDR @@ -723,9 +751,9 @@ uint16_t tu_fifo_read_n(tu_fifo_t *f, void *buffer, uint16_t n) @returns number of items read from the FIFO */ /******************************************************************************/ -uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t *f, void *buffer, uint16_t n) +uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t* f, void * buffer, uint16_t n) { - return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_CST_FULL_WORDS); + return _tu_fifo_read_n(f, buffer, n, TU_FIFO_COPY_CST_FULL_WORDS); } #endif @@ -742,12 +770,12 @@ uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t *f, void *buffer, uint16 @returns TRUE if the queue is not empty */ /******************************************************************************/ -bool tu_fifo_peek(tu_fifo_t *f, void *p_buffer) +bool tu_fifo_peek(tu_fifo_t* f, void * p_buffer) { - _ff_lock(f->mutex_rd); - bool ret = _tu_fifo_peek(f, p_buffer, f->wr_idx, f->rd_idx); - _ff_unlock(f->mutex_rd); - return ret; + _ff_lock(f->mutex_rd); + bool ret = _tu_fifo_peek(f, p_buffer, f->wr_idx, f->rd_idx); + _ff_unlock(f->mutex_rd); + return ret; } /******************************************************************************/ @@ -765,12 +793,12 @@ bool tu_fifo_peek(tu_fifo_t *f, void *p_buffer) @returns Number of bytes written to p_buffer */ /******************************************************************************/ -uint16_t tu_fifo_peek_n(tu_fifo_t *f, void *p_buffer, uint16_t n) +uint16_t tu_fifo_peek_n(tu_fifo_t* f, void * p_buffer, uint16_t n) { - _ff_lock(f->mutex_rd); - uint16_t ret = _tu_fifo_peek_n(f, p_buffer, n, f->wr_idx, f->rd_idx, TU_FIFO_COPY_INC); - _ff_unlock(f->mutex_rd); - return ret; + _ff_lock(f->mutex_rd); + uint16_t ret = _tu_fifo_peek_n(f, p_buffer, n, f->wr_idx, f->rd_idx, TU_FIFO_COPY_INC); + _ff_unlock(f->mutex_rd); + return ret; } /******************************************************************************/ @@ -789,30 +817,32 @@ uint16_t tu_fifo_peek_n(tu_fifo_t *f, void *p_buffer, uint16_t n) FIFO will always return TRUE) */ /******************************************************************************/ -bool tu_fifo_write(tu_fifo_t *f, const void *data) +bool tu_fifo_write(tu_fifo_t* f, const void * data) { - _ff_lock(f->mutex_wr); + _ff_lock(f->mutex_wr); - bool ret; - uint16_t const wr_idx = f->wr_idx; + bool ret; + uint16_t const wr_idx = f->wr_idx; - if (tu_fifo_full(f) && !f->overwritable) { - ret = false; - } else { - uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + if ( tu_fifo_full(f) && !f->overwritable ) + { + ret = false; + }else + { + uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); - // Write data - _ff_push(f, data, wr_ptr); + // Write data + _ff_push(f, data, wr_ptr); - // Advance pointer - f->wr_idx = advance_index(f->depth, wr_idx, 1); + // Advance pointer + f->wr_idx = advance_index(f->depth, wr_idx, 1); - ret = true; - } + ret = true; + } - _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_wr); - return ret; + return ret; } /******************************************************************************/ @@ -829,9 +859,9 @@ bool tu_fifo_write(tu_fifo_t *f, const void *data) @return Number of written elements */ /******************************************************************************/ -uint16_t tu_fifo_write_n(tu_fifo_t *f, const void *data, uint16_t n) +uint16_t tu_fifo_write_n(tu_fifo_t* f, const void * data, uint16_t n) { - return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_INC); + return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_INC); } #ifdef TUP_MEM_CONST_ADDR @@ -850,9 +880,9 @@ uint16_t tu_fifo_write_n(tu_fifo_t *f, const void *data, uint16_t n) @return Number of written elements */ /******************************************************************************/ -uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t *f, const void *data, uint16_t n) +uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t* f, const void * data, uint16_t n) { - return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_CST_FULL_WORDS); + return _tu_fifo_write_n(f, data, n, TU_FIFO_COPY_CST_FULL_WORDS); } #endif @@ -866,15 +896,15 @@ uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t *f, const void *data, u /******************************************************************************/ bool tu_fifo_clear(tu_fifo_t *f) { - _ff_lock(f->mutex_wr); - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_wr); + _ff_lock(f->mutex_rd); - f->rd_idx = 0; - f->wr_idx = 0; + f->rd_idx = 0; + f->wr_idx = 0; - _ff_unlock(f->mutex_wr); - _ff_unlock(f->mutex_rd); - return true; + _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_rd); + return true; } /******************************************************************************/ @@ -889,15 +919,15 @@ bool tu_fifo_clear(tu_fifo_t *f) /******************************************************************************/ bool tu_fifo_set_overwritable(tu_fifo_t *f, bool overwritable) { - _ff_lock(f->mutex_wr); - _ff_lock(f->mutex_rd); + _ff_lock(f->mutex_wr); + _ff_lock(f->mutex_rd); - f->overwritable = overwritable; + f->overwritable = overwritable; - _ff_unlock(f->mutex_wr); - _ff_unlock(f->mutex_rd); + _ff_unlock(f->mutex_wr); + _ff_unlock(f->mutex_rd); - return true; + return true; } /******************************************************************************/ @@ -918,7 +948,7 @@ bool tu_fifo_set_overwritable(tu_fifo_t *f, bool overwritable) /******************************************************************************/ void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n) { - f->wr_idx = advance_index(f->depth, f->wr_idx, n); + f->wr_idx = advance_index(f->depth, f->wr_idx, n); } /******************************************************************************/ @@ -939,7 +969,7 @@ void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n) /******************************************************************************/ void tu_fifo_advance_read_pointer(tu_fifo_t *f, uint16_t n) { - f->rd_idx = advance_index(f->depth, f->rd_idx, n); + f->rd_idx = advance_index(f->depth, f->rd_idx, n); } /******************************************************************************/ @@ -959,50 +989,55 @@ void tu_fifo_advance_read_pointer(tu_fifo_t *f, uint16_t n) /******************************************************************************/ void tu_fifo_get_read_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info) { - // Operate on temporary values in case they change in between - uint16_t wr_idx = f->wr_idx; - uint16_t rd_idx = f->rd_idx; + // Operate on temporary values in case they change in between + uint16_t wr_idx = f->wr_idx; + uint16_t rd_idx = f->rd_idx; - uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); + uint16_t cnt = _ff_count(f->depth, wr_idx, rd_idx); - // Check overflow and correct if required - may happen in case a DMA wrote too fast - if (cnt > f->depth) { - _ff_lock(f->mutex_rd); - rd_idx = _ff_correct_read_index(f, wr_idx); - _ff_unlock(f->mutex_rd); + // Check overflow and correct if required - may happen in case a DMA wrote too fast + if (cnt > f->depth) + { + _ff_lock(f->mutex_rd); + rd_idx = _ff_correct_read_index(f, wr_idx); + _ff_unlock(f->mutex_rd); - cnt = f->depth; - } + cnt = f->depth; + } - // Check if fifo is empty - if (cnt == 0) { - info->len_lin = 0; - info->len_wrap = 0; - info->ptr_lin = NULL; - info->ptr_wrap = NULL; - return; - } + // Check if fifo is empty + if (cnt == 0) + { + info->len_lin = 0; + info->len_wrap = 0; + info->ptr_lin = NULL; + info->ptr_wrap = NULL; + return; + } - // Get relative pointers - uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); - uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); + // Get relative pointers + uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); - // Copy pointer to buffer to start reading from - info->ptr_lin = &f->buffer[rd_ptr]; + // Copy pointer to buffer to start reading from + info->ptr_lin = &f->buffer[rd_ptr]; - // Check if there is a wrap around necessary - if (wr_ptr > rd_ptr) { - // Non wrapping case - info->len_lin = cnt; + // Check if there is a wrap around necessary + if (wr_ptr > rd_ptr) + { + // Non wrapping case + info->len_lin = cnt; - info->len_wrap = 0; - info->ptr_wrap = NULL; - } else { - info->len_lin = f->depth - rd_ptr; // Also the case if FIFO was full + info->len_wrap = 0; + info->ptr_wrap = NULL; + } + else + { + info->len_lin = f->depth - rd_ptr; // Also the case if FIFO was full - info->len_wrap = cnt - info->len_lin; - info->ptr_wrap = f->buffer; - } + info->len_wrap = cnt - info->len_lin; + info->ptr_wrap = f->buffer; + } } /******************************************************************************/ @@ -1022,35 +1057,37 @@ void tu_fifo_get_read_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info) /******************************************************************************/ void tu_fifo_get_write_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info) { - uint16_t wr_idx = f->wr_idx; - uint16_t rd_idx = f->rd_idx; - uint16_t remain = _ff_remaining(f->depth, wr_idx, rd_idx); - - if (remain == 0) { - info->len_lin = 0; - info->len_wrap = 0; - info->ptr_lin = NULL; - info->ptr_wrap = NULL; - return; - } + uint16_t wr_idx = f->wr_idx; + uint16_t rd_idx = f->rd_idx; + uint16_t remain = _ff_remaining(f->depth, wr_idx, rd_idx); - // Get relative pointers - uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); - uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); - - // Copy pointer to buffer to start writing to - info->ptr_lin = &f->buffer[wr_ptr]; - - if (wr_ptr < rd_ptr) { - // Non wrapping case - info->len_lin = rd_ptr - wr_ptr; - info->len_wrap = 0; - info->ptr_wrap = NULL; - } else { - info->len_lin = f->depth - wr_ptr; - info->len_wrap = - remain - - info->len_lin; // Remaining length - n already was limited to remain or FIFO depth - info->ptr_wrap = f->buffer; // Always start of buffer - } + if (remain == 0) + { + info->len_lin = 0; + info->len_wrap = 0; + info->ptr_lin = NULL; + info->ptr_wrap = NULL; + return; + } + + // Get relative pointers + uint16_t wr_ptr = idx2ptr(f->depth, wr_idx); + uint16_t rd_ptr = idx2ptr(f->depth, rd_idx); + + // Copy pointer to buffer to start writing to + info->ptr_lin = &f->buffer[wr_ptr]; + + if (wr_ptr < rd_ptr) + { + // Non wrapping case + info->len_lin = rd_ptr-wr_ptr; + info->len_wrap = 0; + info->ptr_wrap = NULL; + } + else + { + info->len_lin = f->depth - wr_ptr; + info->len_wrap = remain - info->len_lin; // Remaining length - n already was limited to remain or FIFO depth + info->ptr_wrap = f->buffer; // Always start of buffer + } } diff --git a/Libraries/tinyusb/src/common/tusb_fifo.h b/Libraries/tinyusb/src/common/tusb_fifo.h index 9f955cd410e..6c0efb50907 100644 --- a/Libraries/tinyusb/src/common/tusb_fifo.h +++ b/Libraries/tinyusb/src/common/tusb_fifo.h @@ -46,7 +46,7 @@ extern "C" { // mutex is only needed for RTOS // for OS None, we don't get preempted -#define CFG_FIFO_MUTEX OSAL_MUTEX_REQUIRED +#define CFG_FIFO_MUTEX OSAL_MUTEX_REQUIRED /* Write/Read index is always in the range of: * 0 .. 2*depth-1 @@ -104,93 +104,92 @@ extern "C" { * | R | 1 | 2 | W | 4 | 5 | */ typedef struct { - uint8_t *buffer; // buffer pointer - uint16_t depth; // max items + uint8_t* buffer ; // buffer pointer + uint16_t depth ; // max items - struct TU_ATTR_PACKED { - uint16_t item_size : 15; // size of each item - bool overwritable : 1; // ovwerwritable when full - }; + struct TU_ATTR_PACKED { + uint16_t item_size : 15; // size of each item + bool overwritable : 1 ; // ovwerwritable when full + }; - volatile uint16_t wr_idx; // write index - volatile uint16_t rd_idx; // read index + volatile uint16_t wr_idx ; // write index + volatile uint16_t rd_idx ; // read index #if OSAL_MUTEX_REQUIRED - osal_mutex_t mutex_wr; - osal_mutex_t mutex_rd; + osal_mutex_t mutex_wr; + osal_mutex_t mutex_rd; #endif } tu_fifo_t; typedef struct { - uint16_t len_lin; ///< linear length in item size - uint16_t len_wrap; ///< wrapped length in item size - void *ptr_lin; ///< linear part start pointer - void *ptr_wrap; ///< wrapped part start pointer + uint16_t len_lin ; ///< linear length in item size + uint16_t len_wrap ; ///< wrapped length in item size + void * ptr_lin ; ///< linear part start pointer + void * ptr_wrap ; ///< wrapped part start pointer } tu_fifo_buffer_info_t; -#define TU_FIFO_INIT(_buffer, _depth, _type, _overwritable) \ - { \ - .buffer = _buffer, .depth = _depth, .item_size = sizeof(_type), \ - .overwritable = _overwritable, \ - } +#define TU_FIFO_INIT(_buffer, _depth, _type, _overwritable){\ + .buffer = _buffer, \ + .depth = _depth, \ + .item_size = sizeof(_type), \ + .overwritable = _overwritable, \ +} -#define TU_FIFO_DEF(_name, _depth, _type, _overwritable) \ - uint8_t _name##_buf[_depth * sizeof(_type)]; \ +#define TU_FIFO_DEF(_name, _depth, _type, _overwritable) \ + uint8_t _name##_buf[_depth*sizeof(_type)]; \ tu_fifo_t _name = TU_FIFO_INIT(_name##_buf, _depth, _type, _overwritable) bool tu_fifo_set_overwritable(tu_fifo_t *f, bool overwritable); bool tu_fifo_clear(tu_fifo_t *f); -bool tu_fifo_config(tu_fifo_t *f, void *buffer, uint16_t depth, uint16_t item_size, - bool overwritable); +bool tu_fifo_config(tu_fifo_t *f, void* buffer, uint16_t depth, uint16_t item_size, bool overwritable); #if OSAL_MUTEX_REQUIRED -TU_ATTR_ALWAYS_INLINE static inline void tu_fifo_config_mutex(tu_fifo_t *f, osal_mutex_t wr_mutex, - osal_mutex_t rd_mutex) -{ - f->mutex_wr = wr_mutex; - f->mutex_rd = rd_mutex; +TU_ATTR_ALWAYS_INLINE static inline +void tu_fifo_config_mutex(tu_fifo_t *f, osal_mutex_t wr_mutex, osal_mutex_t rd_mutex) { + f->mutex_wr = wr_mutex; + f->mutex_rd = rd_mutex; } #else #define tu_fifo_config_mutex(_f, _wr_mutex, _rd_mutex) #endif -bool tu_fifo_write(tu_fifo_t *f, void const *p_data); -uint16_t tu_fifo_write_n(tu_fifo_t *f, void const *p_data, uint16_t n); +bool tu_fifo_write (tu_fifo_t* f, void const * p_data); +uint16_t tu_fifo_write_n (tu_fifo_t* f, void const * p_data, uint16_t n); #ifdef TUP_MEM_CONST_ADDR -uint16_t tu_fifo_write_n_const_addr_full_words(tu_fifo_t *f, const void *data, uint16_t n); +uint16_t tu_fifo_write_n_const_addr_full_words (tu_fifo_t* f, const void * data, uint16_t n); #endif -bool tu_fifo_read(tu_fifo_t *f, void *p_buffer); -uint16_t tu_fifo_read_n(tu_fifo_t *f, void *p_buffer, uint16_t n); +bool tu_fifo_read (tu_fifo_t* f, void * p_buffer); +uint16_t tu_fifo_read_n (tu_fifo_t* f, void * p_buffer, uint16_t n); #ifdef TUP_MEM_CONST_ADDR -uint16_t tu_fifo_read_n_const_addr_full_words(tu_fifo_t *f, void *buffer, uint16_t n); +uint16_t tu_fifo_read_n_const_addr_full_words (tu_fifo_t* f, void * buffer, uint16_t n); #endif -bool tu_fifo_peek(tu_fifo_t *f, void *p_buffer); -uint16_t tu_fifo_peek_n(tu_fifo_t *f, void *p_buffer, uint16_t n); +bool tu_fifo_peek (tu_fifo_t* f, void * p_buffer); +uint16_t tu_fifo_peek_n (tu_fifo_t* f, void * p_buffer, uint16_t n); -uint16_t tu_fifo_count(tu_fifo_t *f); -uint16_t tu_fifo_remaining(tu_fifo_t *f); -bool tu_fifo_empty(tu_fifo_t *f); -bool tu_fifo_full(tu_fifo_t *f); -bool tu_fifo_overflowed(tu_fifo_t *f); -void tu_fifo_correct_read_pointer(tu_fifo_t *f); +uint16_t tu_fifo_count (tu_fifo_t* f); +uint16_t tu_fifo_remaining (tu_fifo_t* f); +bool tu_fifo_empty (tu_fifo_t* f); +bool tu_fifo_full (tu_fifo_t* f); +bool tu_fifo_overflowed (tu_fifo_t* f); +void tu_fifo_correct_read_pointer (tu_fifo_t* f); -TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_fifo_depth(tu_fifo_t *f) -{ - return f->depth; +TU_ATTR_ALWAYS_INLINE static inline +uint16_t tu_fifo_depth(tu_fifo_t* f) { + return f->depth; } // Pointer modifications intended to be used in combinations with DMAs. // USE WITH CARE - NO SAFETY CHECKS CONDUCTED HERE! NOT MUTEX PROTECTED! void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n); -void tu_fifo_advance_read_pointer(tu_fifo_t *f, uint16_t n); +void tu_fifo_advance_read_pointer (tu_fifo_t *f, uint16_t n); // If you want to read/write from/to the FIFO by use of a DMA, you may need to conduct two copies // to handle a possible wrapping part. These functions deliver a pointer to start // reading/writing from/to and a valid linear length along which no wrap occurs. -void tu_fifo_get_read_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info); +void tu_fifo_get_read_info (tu_fifo_t *f, tu_fifo_buffer_info_t *info); void tu_fifo_get_write_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info); #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/common/tusb_mcu.h b/Libraries/tinyusb/src/common/tusb_mcu.h index 3c0d3724f86..e86f55c1dce 100644 --- a/Libraries/tinyusb/src/common/tusb_mcu.h +++ b/Libraries/tinyusb/src/common/tusb_mcu.h @@ -35,16 +35,16 @@ //------------- Unaligned Memory Access -------------// #ifdef __ARM_ARCH -// ARM Architecture set __ARM_FEATURE_UNALIGNED to 1 for mcu supports unaligned access -#if defined(__ARM_FEATURE_UNALIGNED) && __ARM_FEATURE_UNALIGNED == 1 -#define TUP_ARCH_STRICT_ALIGN 0 + // ARM Architecture set __ARM_FEATURE_UNALIGNED to 1 for mcu supports unaligned access + #if defined(__ARM_FEATURE_UNALIGNED) && __ARM_FEATURE_UNALIGNED == 1 + #define TUP_ARCH_STRICT_ALIGN 0 + #else + #define TUP_ARCH_STRICT_ALIGN 1 + #endif #else -#define TUP_ARCH_STRICT_ALIGN 1 -#endif -#else -// TODO default to strict align for others -// Should investigate other architecture such as risv, xtensa, mips for optimal setting -#define TUP_ARCH_STRICT_ALIGN 1 + // TODO default to strict align for others + // Should investigate other architecture such as risv, xtensa, mips for optimal setting + #define TUP_ARCH_STRICT_ALIGN 1 #endif /* USB Controller Attributes for Device, Host or MCU (both) @@ -57,433 +57,430 @@ //--------------------------------------------------------------------+ // NXP //--------------------------------------------------------------------+ -#if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) -#define TUP_USBIP_IP3511 -#define TUP_DCD_ENDPOINT_MAX 5 +#if TU_CHECK_MCU(OPT_MCU_LPC11UXX, OPT_MCU_LPC13XX, OPT_MCU_LPC15XX) + #define TUP_USBIP_IP3511 + #define TUP_DCD_ENDPOINT_MAX 5 #elif TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX) -#define TUP_DCD_ENDPOINT_MAX 16 -#define TUP_USBIP_OHCI -#define TUP_OHCI_RHPORTS 2 + #define TUP_DCD_ENDPOINT_MAX 16 + #define TUP_USBIP_OHCI + #define TUP_OHCI_RHPORTS 2 #elif TU_CHECK_MCU(OPT_MCU_LPC51UXX) -#define TUP_USBIP_IP3511 -#define TUP_DCD_ENDPOINT_MAX 5 + #define TUP_USBIP_IP3511 + #define TUP_DCD_ENDPOINT_MAX 5 #elif TU_CHECK_MCU(OPT_MCU_LPC54) -// TODO USB0 has 5, USB1 has 6 -#define TUP_USBIP_IP3511 -#define TUP_DCD_ENDPOINT_MAX 6 + // TODO USB0 has 5, USB1 has 6 + #define TUP_USBIP_IP3511 + #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_LPC55) -// TODO USB0 has 5, USB1 has 6 -#define TUP_USBIP_IP3511 -#define TUP_DCD_ENDPOINT_MAX 6 + // TODO USB0 has 5, USB1 has 6 + #define TUP_USBIP_IP3511 + #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_LPC18XX, OPT_MCU_LPC43XX) -// USB0 has 6 with HS PHY, USB1 has 4 only FS -#define TUP_USBIP_CHIPIDEA_HS -#define TUP_USBIP_EHCI + // USB0 has 6 with HS PHY, USB1 has 4 only FS + #define TUP_USBIP_CHIPIDEA_HS + #define TUP_USBIP_EHCI -#define TUP_DCD_ENDPOINT_MAX 6 -#define TUP_RHPORT_HIGHSPEED 1 + #define TUP_DCD_ENDPOINT_MAX 6 + #define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_MCXN9) -// USB0 is chipidea FS -#define TUP_USBIP_CHIPIDEA_FS -#define TUP_USBIP_CHIPIDEA_FS_MCX + // USB0 is chipidea FS + #define TUP_USBIP_CHIPIDEA_FS + #define TUP_USBIP_CHIPIDEA_FS_MCX -// USB1 is chipidea HS -#define TUP_USBIP_CHIPIDEA_HS -#define TUP_USBIP_EHCI + // USB1 is chipidea HS + #define TUP_USBIP_CHIPIDEA_HS + #define TUP_USBIP_EHCI -#define TUP_DCD_ENDPOINT_MAX 8 -#define TUP_RHPORT_HIGHSPEED 1 + #define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_MCXA15) -// USB0 is chipidea FS -#define TUP_USBIP_CHIPIDEA_FS -#define TUP_USBIP_CHIPIDEA_FS_MCX + // USB0 is chipidea FS + #define TUP_USBIP_CHIPIDEA_FS + #define TUP_USBIP_CHIPIDEA_FS_MCX -#define TUP_DCD_ENDPOINT_MAX 16 + #define TUP_DCD_ENDPOINT_MAX 16 #elif TU_CHECK_MCU(OPT_MCU_MIMXRT1XXX) -#define TUP_USBIP_CHIPIDEA_HS -#define TUP_USBIP_EHCI + #define TUP_USBIP_CHIPIDEA_HS + #define TUP_USBIP_EHCI -#define TUP_DCD_ENDPOINT_MAX 8 -#define TUP_RHPORT_HIGHSPEED 1 + #define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_RHPORT_HIGHSPEED 1 #elif TU_CHECK_MCU(OPT_MCU_KINETIS_KL, OPT_MCU_KINETIS_K32L, OPT_MCU_KINETIS_K) -#define TUP_USBIP_CHIPIDEA_FS -#define TUP_USBIP_CHIPIDEA_FS_KINETIS -#define TUP_DCD_ENDPOINT_MAX 16 + #define TUP_USBIP_CHIPIDEA_FS + #define TUP_USBIP_CHIPIDEA_FS_KINETIS + #define TUP_DCD_ENDPOINT_MAX 16 #elif TU_CHECK_MCU(OPT_MCU_MM32F327X) -#define TUP_DCD_ENDPOINT_MAX 16 + #define TUP_DCD_ENDPOINT_MAX 16 //--------------------------------------------------------------------+ // Nordic //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_NRF5X) -// 8 CBI + 1 ISO -#define TUP_DCD_ENDPOINT_MAX 9 + // 8 CBI + 1 ISO + #define TUP_DCD_ENDPOINT_MAX 9 //--------------------------------------------------------------------+ // Microchip //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_SAMD21, OPT_MCU_SAMD51, OPT_MCU_SAME5X) || \ - TU_CHECK_MCU(OPT_MCU_SAMD11, OPT_MCU_SAML21, OPT_MCU_SAML22) -#define TUP_DCD_ENDPOINT_MAX 8 + TU_CHECK_MCU(OPT_MCU_SAMD11, OPT_MCU_SAML21, OPT_MCU_SAML22) + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_SAMG) -#define TUP_DCD_ENDPOINT_MAX 6 -#define TUD_ENDPOINT_EXCLUSIVE_NUMBER + #define TUP_DCD_ENDPOINT_MAX 6 + #define TUD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_SAMX7X) -#define TUP_DCD_ENDPOINT_MAX 10 -#define TUP_RHPORT_HIGHSPEED 1 -#define TUD_ENDPOINT_EXCLUSIVE_NUMBER + #define TUP_DCD_ENDPOINT_MAX 10 + #define TUP_RHPORT_HIGHSPEED 1 + #define TUD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_PIC32MZ) -#define TUP_DCD_ENDPOINT_MAX 8 -#define TUD_ENDPOINT_EXCLUSIVE_NUMBER + #define TUP_DCD_ENDPOINT_MAX 8 + #define TUD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_PIC32MX, OPT_MCU_PIC32MM, OPT_MCU_PIC32MK) || \ - TU_CHECK_MCU(OPT_MCU_PIC24, OPT_MCU_DSPIC33) -#define TUP_DCD_ENDPOINT_MAX 16 -#define TUD_ENDPOINT_EXCLUSIVE_NUMBER + TU_CHECK_MCU(OPT_MCU_PIC24, OPT_MCU_DSPIC33) + #define TUP_DCD_ENDPOINT_MAX 16 + #define TUD_ENDPOINT_EXCLUSIVE_NUMBER //--------------------------------------------------------------------+ // ST //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_STM32F0) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32F1) -// - F102, F103 use fsdev -// - F105, F107 use dwc2 -#if defined(STM32F105x8) || defined(STM32F105xB) || defined(STM32F105xC) || \ - defined(STM32F107xB) || defined(STM32F107xC) -#define TUP_USBIP_DWC2 -#define TUP_USBIP_DWC2_STM32 - -#define TUP_DCD_ENDPOINT_MAX 4 -#elif defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || \ - defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 -#else -#error "Unsupported STM32F1 mcu" -#endif + // - F102, F103 use fsdev + // - F105, F107 use dwc2 + #if defined (STM32F105x8) || defined (STM32F105xB) || defined (STM32F105xC) || \ + defined (STM32F107xB) || defined (STM32F107xC) + #define TUP_USBIP_DWC2 + #define TUP_USBIP_DWC2_STM32 + + #define TUP_DCD_ENDPOINT_MAX 4 + #elif defined(STM32F102x6) || defined(STM32F102xB) || \ + defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 + #else + #error "Unsupported STM32F1 mcu" + #endif #elif TU_CHECK_MCU(OPT_MCU_STM32F2) -#define TUP_USBIP_DWC2 -#define TUP_USBIP_DWC2_STM32 + #define TUP_USBIP_DWC2 + #define TUP_USBIP_DWC2_STM32 -// FS has 4 ep, HS has 5 ep -#define TUP_DCD_ENDPOINT_MAX 6 + // FS has 4 ep, HS has 5 ep + #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_STM32F3) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32F4) -#define TUP_USBIP_DWC2 -#define TUP_USBIP_DWC2_STM32 + #define TUP_USBIP_DWC2 + #define TUP_USBIP_DWC2_STM32 -// For most mcu, FS has 4, HS has 6. TODO 446/469/479 HS has 9 -#define TUP_DCD_ENDPOINT_MAX 6 + // For most mcu, FS has 4, HS has 6. TODO 446/469/479 HS has 9 + #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_STM32F7) -#define TUP_USBIP_DWC2 -#define TUP_USBIP_DWC2_STM32 + #define TUP_USBIP_DWC2 + #define TUP_USBIP_DWC2_STM32 -// FS has 6, HS has 9 -#define TUP_DCD_ENDPOINT_MAX 9 + // FS has 6, HS has 9 + #define TUP_DCD_ENDPOINT_MAX 9 -// MCU with on-chip HS Phy -#if defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F733xx) -#define TUP_RHPORT_HIGHSPEED 1 // Port0: FS, Port1: HS -#endif + // MCU with on-chip HS Phy + #if defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F733xx) + #define TUP_RHPORT_HIGHSPEED 1 // Port0: FS, Port1: HS + #endif #elif TU_CHECK_MCU(OPT_MCU_STM32H7) -#define TUP_USBIP_DWC2 -#define TUP_USBIP_DWC2_STM32 + #define TUP_USBIP_DWC2 + #define TUP_USBIP_DWC2_STM32 -#define TUP_DCD_ENDPOINT_MAX 9 + #define TUP_DCD_ENDPOINT_MAX 9 #elif TU_CHECK_MCU(OPT_MCU_STM32H5) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32G4) -// Device controller -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 + // Device controller + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 -// TypeC controller -#define TUP_USBIP_TYPEC_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 -#define TUP_TYPEC_RHPORTS_NUM 1 + // TypeC controller + #define TUP_USBIP_TYPEC_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_TYPEC_RHPORTS_NUM 1 #elif TU_CHECK_MCU(OPT_MCU_STM32G0) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32L0, OPT_MCU_STM32L1) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32L4) -// - L4x2, L4x3 use fsdev -// - L4x4, L4x6, L4x7, L4x9 use dwc2 -#if defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || \ - defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) || \ - defined(STM32L4P5xx) || defined(STM32L4Q5xx) || defined(STM32L4R5xx) || \ - defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || \ - defined(STM32L4S7xx) || defined(STM32L4S9xx) -#define TUP_USBIP_DWC2 -#define TUP_USBIP_DWC2_STM32 - -#define TUP_DCD_ENDPOINT_MAX 6 -#elif defined(STM32L412xx) || defined(STM32L422xx) || defined(STM32L432xx) || \ - defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ - defined(STM32L452xx) || defined(STM32L462xx) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 -#else -#error "Unsupported STM32L4 mcu" -#endif + // - L4x2, L4x3 use fsdev + // - L4x4, L4x6, L4x7, L4x9 use dwc2 + #if defined (STM32L475xx) || defined (STM32L476xx) || \ + defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || \ + defined (STM32L4A6xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || \ + defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + #define TUP_USBIP_DWC2 + #define TUP_USBIP_DWC2_STM32 + + #define TUP_DCD_ENDPOINT_MAX 6 + #elif defined(STM32L412xx) || defined(STM32L422xx) || defined(STM32L432xx) || defined(STM32L433xx) || \ + defined(STM32L442xx) || defined(STM32L443xx) || defined(STM32L452xx) || defined(STM32L462xx) + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 + #else + #error "Unsupported STM32L4 mcu" + #endif #elif TU_CHECK_MCU(OPT_MCU_STM32WB) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_STM32U5) -#if defined(STM32U535xx) || defined(STM32U545xx) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 - -#else -#define TUP_USBIP_DWC2 -#define TUP_USBIP_DWC2_STM32 - -// U59x/5Ax/5Fx/5Gx are highspeed with built-in HS PHY -#if defined(STM32U595xx) || defined(STM32U599xx) || defined(STM32U5A5xx) || \ - defined(STM32U5A9xx) || defined(STM32U5F7xx) || defined(STM32U5F9xx) || \ - defined(STM32U5G7xx) || defined(STM32U5G9xx) -#define TUP_DCD_ENDPOINT_MAX 9 -#define TUP_RHPORT_HIGHSPEED 1 -#else -#define TUP_DCD_ENDPOINT_MAX 6 -#endif -#endif + #if defined (STM32U535xx) || defined (STM32U545xx) + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 + + #else + #define TUP_USBIP_DWC2 + #define TUP_USBIP_DWC2_STM32 + + // U59x/5Ax/5Fx/5Gx are highspeed with built-in HS PHY + #if defined(STM32U595xx) || defined(STM32U599xx) || defined(STM32U5A5xx) || defined(STM32U5A9xx) || \ + defined(STM32U5F7xx) || defined(STM32U5F9xx) || defined(STM32U5G7xx) || defined(STM32U5G9xx) + #define TUP_DCD_ENDPOINT_MAX 9 + #define TUP_RHPORT_HIGHSPEED 1 + #else + #define TUP_DCD_ENDPOINT_MAX 6 + #endif + #endif #elif TU_CHECK_MCU(OPT_MCU_STM32L5) -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_STM32 -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_STM32 + #define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // Sony //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_CXD56) -#define TUP_DCD_ENDPOINT_MAX 7 -#define TUP_RHPORT_HIGHSPEED 1 -#define TUD_ENDPOINT_EXCLUSIVE_NUMBER + #define TUP_DCD_ENDPOINT_MAX 7 + #define TUP_RHPORT_HIGHSPEED 1 + #define TUD_ENDPOINT_EXCLUSIVE_NUMBER //--------------------------------------------------------------------+ // TI //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_MSP430x5xx) -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_MSP432E4, OPT_MCU_TM4C123, OPT_MCU_TM4C129) -#define TUP_USBIP_MUSB -#define TUP_USBIP_MUSB_TI -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_MUSB + #define TUP_USBIP_MUSB_TI + #define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // ValentyUSB (Litex) //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_VALENTYUSB_EPTRI) -#define TUP_DCD_ENDPOINT_MAX 16 + #define TUP_DCD_ENDPOINT_MAX 16 //--------------------------------------------------------------------+ // Nuvoton //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_NUC121, OPT_MCU_NUC126) -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_NUC120) -#define TUP_DCD_ENDPOINT_MAX 6 + #define TUP_DCD_ENDPOINT_MAX 6 #elif TU_CHECK_MCU(OPT_MCU_NUC505) -#define TUP_DCD_ENDPOINT_MAX 12 -#define TUP_RHPORT_HIGHSPEED 1 + #define TUP_DCD_ENDPOINT_MAX 12 + #define TUP_RHPORT_HIGHSPEED 1 //--------------------------------------------------------------------+ // Espressif //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3) -#define TUP_USBIP_DWC2 -#define TUP_DCD_ENDPOINT_MAX 6 + #define TUP_USBIP_DWC2 + #define TUP_DCD_ENDPOINT_MAX 6 -#elif TU_CHECK_MCU(OPT_MCU_ESP32, OPT_MCU_ESP32C2, OPT_MCU_ESP32C3, OPT_MCU_ESP32C6, \ - OPT_MCU_ESP32H2) -#if (CFG_TUD_ENABLED || !(defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421)) -#error "MCUs are only supported with CFG_TUH_MAX3421 enabled" -#endif -#define TUP_DCD_ENDPOINT_MAX 0 +#elif TU_CHECK_MCU(OPT_MCU_ESP32, OPT_MCU_ESP32C2, OPT_MCU_ESP32C3, OPT_MCU_ESP32C6, OPT_MCU_ESP32H2) + #if (CFG_TUD_ENABLED || !(defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421)) + #error "MCUs are only supported with CFG_TUH_MAX3421 enabled" + #endif + #define TUP_DCD_ENDPOINT_MAX 0 //--------------------------------------------------------------------+ // Dialog //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_DA1469X) -#define TUP_DCD_ENDPOINT_MAX 4 + #define TUP_DCD_ENDPOINT_MAX 4 //--------------------------------------------------------------------+ // Raspberry Pi //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_RP2040) -#define TUP_DCD_ENDPOINT_MAX 16 + #define TUP_DCD_ENDPOINT_MAX 16 -#define TU_ATTR_FAST_FUNC __attribute__((section(".time_critical.tinyusb"))) + #define TU_ATTR_FAST_FUNC __attribute__((section(".time_critical.tinyusb"))) //--------------------------------------------------------------------+ // Silabs //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_EFM32GG) -#define TUP_USBIP_DWC2 -#define TUP_DCD_ENDPOINT_MAX 7 + #define TUP_USBIP_DWC2 + #define TUP_DCD_ENDPOINT_MAX 7 //--------------------------------------------------------------------+ // Renesas //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_RX63X, OPT_MCU_RX65X, OPT_MCU_RX72N, OPT_MCU_RAXXX) -#define TUP_USBIP_RUSB2 -#define TUP_DCD_ENDPOINT_MAX 10 + #define TUP_USBIP_RUSB2 + #define TUP_DCD_ENDPOINT_MAX 10 //--------------------------------------------------------------------+ // GigaDevice //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_GD32VF103) -#define TUP_USBIP_DWC2 -#define TUP_DCD_ENDPOINT_MAX 4 + #define TUP_USBIP_DWC2 + #define TUP_DCD_ENDPOINT_MAX 4 //--------------------------------------------------------------------+ // Broadcom //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_BCM2711, OPT_MCU_BCM2835, OPT_MCU_BCM2837) -#define TUP_USBIP_DWC2 -#define TUP_DCD_ENDPOINT_MAX 8 -#define TUP_RHPORT_HIGHSPEED 1 + #define TUP_USBIP_DWC2 + #define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_RHPORT_HIGHSPEED 1 //--------------------------------------------------------------------+ // Infineon //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_XMC4000) -#define TUP_USBIP_DWC2 -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_USBIP_DWC2 + #define TUP_DCD_ENDPOINT_MAX 8 //--------------------------------------------------------------------+ // BridgeTek //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_FT90X) -#define TUP_DCD_ENDPOINT_MAX 8 -#define TUP_RHPORT_HIGHSPEED 1 -#define TUD_ENDPOINT_EXCLUSIVE_NUMBER + #define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_RHPORT_HIGHSPEED 1 + #define TUD_ENDPOINT_EXCLUSIVE_NUMBER #elif TU_CHECK_MCU(OPT_MCU_FT93X) -#define TUP_DCD_ENDPOINT_MAX 16 -#define TUP_RHPORT_HIGHSPEED 1 -#define TUD_ENDPOINT_EXCLUSIVE_NUMBER + #define TUP_DCD_ENDPOINT_MAX 16 + #define TUP_RHPORT_HIGHSPEED 1 + #define TUD_ENDPOINT_EXCLUSIVE_NUMBER //--------------------------------------------------------------------+ // Allwinner //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_F1C100S) -#define TUP_DCD_ENDPOINT_MAX 4 + #define TUP_DCD_ENDPOINT_MAX 4 //--------------------------------------------------------------------+ // WCH //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_CH32F20X) -#define TUP_USBIP_WCH_USBHS -#define TUP_USBIP_WCH_USBFS + #define TUP_USBIP_WCH_USBHS + #define TUP_USBIP_WCH_USBFS -#if !defined(CFG_TUD_WCH_USBIP_USBFS) -#define CFG_TUD_WCH_USBIP_USBFS 0 -#endif + #if !defined(CFG_TUD_WCH_USBIP_USBFS) + #define CFG_TUD_WCH_USBIP_USBFS 0 + #endif -#if !defined(CFG_TUD_WCH_USBIP_USBHS) -#define CFG_TUD_WCH_USBIP_USBHS (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) -#endif + #if !defined(CFG_TUD_WCH_USBIP_USBHS) + #define CFG_TUD_WCH_USBIP_USBHS (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) + #endif -#define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS -#define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) + #define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS + #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) #elif TU_CHECK_MCU(OPT_MCU_CH32V103) -#define TUP_USBIP_WCH_USBFS + #define TUP_USBIP_WCH_USBFS -#if !defined(CFG_TUD_WCH_USBIP_USBFS) -#define CFG_TUD_WCH_USBIP_USBFS 1 -#endif + #if !defined(CFG_TUD_WCH_USBIP_USBFS) + #define CFG_TUD_WCH_USBIP_USBFS 1 + #endif -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_CH32V20X) -// v20x support both FSDEV (USBD) and USBFS, default to FSDEV -#define TUP_USBIP_WCH_USBFS -#define TUP_USBIP_FSDEV -#define TUP_USBIP_FSDEV_CH32 + // v20x support both FSDEV (USBD) and USBFS, default to FSDEV + #define TUP_USBIP_WCH_USBFS + #define TUP_USBIP_FSDEV + #define TUP_USBIP_FSDEV_CH32 -#if !defined(CFG_TUD_WCH_USBIP_USBFS) -#define CFG_TUD_WCH_USBIP_USBFS 0 -#endif + #if !defined(CFG_TUD_WCH_USBIP_USBFS) + #define CFG_TUD_WCH_USBIP_USBFS 0 + #endif -#if !defined(CFG_TUD_WCH_USBIP_FSDEV) -#define CFG_TUD_WCH_USBIP_FSDEV (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) -#endif + #if !defined(CFG_TUD_WCH_USBIP_FSDEV) + #define CFG_TUD_WCH_USBIP_FSDEV (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) + #endif -#define TUP_DCD_ENDPOINT_MAX 8 + #define TUP_DCD_ENDPOINT_MAX 8 #elif TU_CHECK_MCU(OPT_MCU_CH32V307) -// v307 support both FS and HS, default to HS -#define TUP_USBIP_WCH_USBHS -#define TUP_USBIP_WCH_USBFS + // v307 support both FS and HS, default to HS + #define TUP_USBIP_WCH_USBHS + #define TUP_USBIP_WCH_USBFS -#if !defined(CFG_TUD_WCH_USBIP_USBFS) -#define CFG_TUD_WCH_USBIP_USBFS 0 -#endif + #if !defined(CFG_TUD_WCH_USBIP_USBFS) + #define CFG_TUD_WCH_USBIP_USBFS 0 + #endif -#if !defined(CFG_TUD_WCH_USBIP_USBHS) -#define CFG_TUD_WCH_USBIP_USBHS (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) -#endif + #if !defined(CFG_TUD_WCH_USBIP_USBHS) + #define CFG_TUD_WCH_USBIP_USBHS (CFG_TUD_WCH_USBIP_USBFS ? 0 : 1) + #endif -#define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS -#define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) + #define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS + #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) //--------------------------------------------------------------------+ // Analog Devices //--------------------------------------------------------------------+ #elif TU_CHECK_MCU(OPT_MCU_MAX32650, OPT_MCU_MAX32666, OPT_MCU_MAX32690, OPT_MCU_MAX78002) -#define TUP_USBIP_MUSB -#define TUP_USBIP_MUSB_ADI -#define TUP_DCD_ENDPOINT_MAX 12 -#define TUP_RHPORT_HIGHSPEED 1 -#define TUD_ENDPOINT_EXCLUSIVE_NUMBER + #define TUP_USBIP_MUSB + #define TUP_USBIP_MUSB_ADI + #define TUP_DCD_ENDPOINT_MAX 12 + #define TUP_RHPORT_HIGHSPEED 1 + #define TUD_ENDPOINT_EXCLUSIVE_NUMBER #endif @@ -492,11 +489,12 @@ //--------------------------------------------------------------------+ #if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421 -#ifndef CFG_TUH_MAX3421_ENDPOINT_TOTAL -#define CFG_TUH_MAX3421_ENDPOINT_TOTAL (8 + 4 * (CFG_TUH_DEVICE_MAX - 1)) -#endif + #ifndef CFG_TUH_MAX3421_ENDPOINT_TOTAL + #define CFG_TUH_MAX3421_ENDPOINT_TOTAL (8 + 4*(CFG_TUH_DEVICE_MAX-1)) + #endif #endif + //--------------------------------------------------------------------+ // Default Values //--------------------------------------------------------------------+ @@ -506,27 +504,27 @@ #endif #if !defined(TUP_DCD_ENDPOINT_MAX) && defined(CFG_TUD_ENABLED) && CFG_TUD_ENABLED -#warning "TUP_DCD_ENDPOINT_MAX is not defined for this MCU, default to 8" -#define TUP_DCD_ENDPOINT_MAX 8 + #warning "TUP_DCD_ENDPOINT_MAX is not defined for this MCU, default to 8" + #define TUP_DCD_ENDPOINT_MAX 8 #endif // Default to fullspeed if not defined #ifndef TUP_RHPORT_HIGHSPEED -#define TUP_RHPORT_HIGHSPEED 0 + #define TUP_RHPORT_HIGHSPEED 0 #endif // fast function, normally mean placing function in SRAM #ifndef TU_ATTR_FAST_FUNC -#define TU_ATTR_FAST_FUNC + #define TU_ATTR_FAST_FUNC #endif // USBIP that support ISO alloc & activate API #if defined(TUP_USBIP_DWC2) || defined(TUP_USBIP_FSDEV) || defined(TUP_USBIP_MUSB) -#define TUP_DCD_EDPT_ISO_ALLOC + #define TUP_DCD_EDPT_ISO_ALLOC #endif #if defined(TUP_USBIP_DWC2) -#define TUP_MEM_CONST_ADDR + #define TUP_MEM_CONST_ADDR #endif #endif diff --git a/Libraries/tinyusb/src/common/tusb_private.h b/Libraries/tinyusb/src/common/tusb_private.h index fd288062252..373a502564c 100644 --- a/Libraries/tinyusb/src/common/tusb_private.h +++ b/Libraries/tinyusb/src/common/tusb_private.h @@ -24,97 +24,96 @@ * This file is part of the TinyUSB stack. */ + #ifndef _TUSB_PRIVATE_H_ #define _TUSB_PRIVATE_H_ // Internal Helper used by Host and Device Stack #ifdef __cplusplus -extern "C" { + extern "C" { #endif -typedef struct TU_ATTR_PACKED { - volatile uint8_t busy : 1; - volatile uint8_t stalled : 1; - volatile uint8_t claimed : 1; -} tu_edpt_state_t; +typedef struct TU_ATTR_PACKED +{ + volatile uint8_t busy : 1; + volatile uint8_t stalled : 1; + volatile uint8_t claimed : 1; +}tu_edpt_state_t; typedef struct { - bool is_host; // host or device most - union { - uint8_t daddr; - uint8_t rhport; - uint8_t hwid; - }; - uint8_t ep_addr; - uint8_t ep_speed; + bool is_host; // host or device most + union { + uint8_t daddr; + uint8_t rhport; + uint8_t hwid; + }; + uint8_t ep_addr; + uint8_t ep_speed; - uint16_t ep_packetsize; - uint16_t ep_bufsize; + uint16_t ep_packetsize; + uint16_t ep_bufsize; - // TODO xfer_fifo can skip this buffer - uint8_t *ep_buf; + // TODO xfer_fifo can skip this buffer + uint8_t* ep_buf; - tu_fifo_t ff; + tu_fifo_t ff; - // mutex: read if ep rx, write if e tx - OSAL_MUTEX_DEF(ff_mutexdef); + // mutex: read if ep rx, write if e tx + OSAL_MUTEX_DEF(ff_mutexdef); -} tu_edpt_stream_t; +}tu_edpt_stream_t; //--------------------------------------------------------------------+ // Endpoint //--------------------------------------------------------------------+ // Check if endpoint descriptor is valid per USB specs -bool tu_edpt_validate(tusb_desc_endpoint_t const *desc_ep, tusb_speed_t speed); +bool tu_edpt_validate(tusb_desc_endpoint_t const * desc_ep, tusb_speed_t speed); // Bind all endpoint of a interface descriptor to class driver -void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const *p_desc, - uint16_t desc_len, uint8_t driver_id); +void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const* p_desc, uint16_t desc_len, uint8_t driver_id); // Calculate total length of n interfaces (depending on IAD) -uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const *desc_itf, uint8_t itf_count, - uint16_t max_len); +uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const* desc_itf, uint8_t itf_count, uint16_t max_len); // Claim an endpoint with provided mutex -bool tu_edpt_claim(tu_edpt_state_t *ep_state, osal_mutex_t mutex); +bool tu_edpt_claim(tu_edpt_state_t* ep_state, osal_mutex_t mutex); // Release an endpoint with provided mutex -bool tu_edpt_release(tu_edpt_state_t *ep_state, osal_mutex_t mutex); +bool tu_edpt_release(tu_edpt_state_t* ep_state, osal_mutex_t mutex); //--------------------------------------------------------------------+ // Endpoint Stream //--------------------------------------------------------------------+ // Init an endpoint stream -bool tu_edpt_stream_init(tu_edpt_stream_t *s, bool is_host, bool is_tx, bool overwritable, - void *ff_buf, uint16_t ff_bufsize, uint8_t *ep_buf, uint16_t ep_bufsize); +bool tu_edpt_stream_init(tu_edpt_stream_t* s, bool is_host, bool is_tx, bool overwritable, + void* ff_buf, uint16_t ff_bufsize, uint8_t* ep_buf, uint16_t ep_bufsize); // Deinit an endpoint stream -bool tu_edpt_stream_deinit(tu_edpt_stream_t *s); +bool tu_edpt_stream_deinit(tu_edpt_stream_t* s); // Open an stream for an endpoint // hwid is either device address (host mode) or rhport (device mode) -TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_open(tu_edpt_stream_t *s, uint8_t hwid, - tusb_desc_endpoint_t const *desc_ep) -{ - tu_fifo_clear(&s->ff); - s->hwid = hwid; - s->ep_addr = desc_ep->bEndpointAddress; - s->ep_packetsize = tu_edpt_packet_size(desc_ep); +TU_ATTR_ALWAYS_INLINE static inline +void tu_edpt_stream_open(tu_edpt_stream_t* s, uint8_t hwid, tusb_desc_endpoint_t const *desc_ep) { + tu_fifo_clear(&s->ff); + s->hwid = hwid; + s->ep_addr = desc_ep->bEndpointAddress; + s->ep_packetsize = tu_edpt_packet_size(desc_ep); } -TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_close(tu_edpt_stream_t *s) -{ - s->hwid = 0; - s->ep_addr = 0; +TU_ATTR_ALWAYS_INLINE static inline +void tu_edpt_stream_close(tu_edpt_stream_t* s) { + s->hwid = 0; + s->ep_addr = 0; } // Clear fifo -TU_ATTR_ALWAYS_INLINE static inline bool tu_edpt_stream_clear(tu_edpt_stream_t *s) -{ - return tu_fifo_clear(&s->ff); +TU_ATTR_ALWAYS_INLINE static inline +bool tu_edpt_stream_clear(tu_edpt_stream_t* s) { + return tu_fifo_clear(&s->ff); } //--------------------------------------------------------------------+ @@ -122,18 +121,18 @@ TU_ATTR_ALWAYS_INLINE static inline bool tu_edpt_stream_clear(tu_edpt_stream_t * //--------------------------------------------------------------------+ // Write to stream -uint32_t tu_edpt_stream_write(tu_edpt_stream_t *s, void const *buffer, uint32_t bufsize); +uint32_t tu_edpt_stream_write(tu_edpt_stream_t* s, void const *buffer, uint32_t bufsize); // Start an usb transfer if endpoint is not busy -uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t *s); +uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t* s); // Start an zero-length packet if needed -bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t *s, uint32_t last_xferred_bytes); +bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t* s, uint32_t last_xferred_bytes); // Get the number of bytes available for writing -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_edpt_stream_write_available(tu_edpt_stream_t *s) -{ - return (uint32_t)tu_fifo_remaining(&s->ff); +TU_ATTR_ALWAYS_INLINE static inline +uint32_t tu_edpt_stream_write_available(tu_edpt_stream_t* s) { + return (uint32_t) tu_fifo_remaining(&s->ff); } //--------------------------------------------------------------------+ @@ -141,41 +140,38 @@ TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_edpt_stream_write_available(tu_e //--------------------------------------------------------------------+ // Read from stream -uint32_t tu_edpt_stream_read(tu_edpt_stream_t *s, void *buffer, uint32_t bufsize); +uint32_t tu_edpt_stream_read(tu_edpt_stream_t* s, void* buffer, uint32_t bufsize); // Start an usb transfer if endpoint is not busy -uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t *s); +uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t* s); // Must be called in the transfer complete callback -TU_ATTR_ALWAYS_INLINE static inline void tu_edpt_stream_read_xfer_complete(tu_edpt_stream_t *s, - uint32_t xferred_bytes) -{ - tu_fifo_write_n(&s->ff, s->ep_buf, (uint16_t)xferred_bytes); +TU_ATTR_ALWAYS_INLINE static inline +void tu_edpt_stream_read_xfer_complete(tu_edpt_stream_t* s, uint32_t xferred_bytes) { + tu_fifo_write_n(&s->ff, s->ep_buf, (uint16_t) xferred_bytes); } // Same as tu_edpt_stream_read_xfer_complete but skip the first n bytes -TU_ATTR_ALWAYS_INLINE static inline void -tu_edpt_stream_read_xfer_complete_offset(tu_edpt_stream_t *s, uint32_t xferred_bytes, - uint32_t skip_offset) -{ - if (skip_offset < xferred_bytes) { - tu_fifo_write_n(&s->ff, s->ep_buf + skip_offset, (uint16_t)(xferred_bytes - skip_offset)); - } +TU_ATTR_ALWAYS_INLINE static inline +void tu_edpt_stream_read_xfer_complete_offset(tu_edpt_stream_t* s, uint32_t xferred_bytes, uint32_t skip_offset) { + if (skip_offset < xferred_bytes) { + tu_fifo_write_n(&s->ff, s->ep_buf + skip_offset, (uint16_t) (xferred_bytes - skip_offset)); + } } // Get the number of bytes available for reading -TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_edpt_stream_read_available(tu_edpt_stream_t *s) -{ - return (uint32_t)tu_fifo_count(&s->ff); +TU_ATTR_ALWAYS_INLINE static inline +uint32_t tu_edpt_stream_read_available(tu_edpt_stream_t* s) { + return (uint32_t) tu_fifo_count(&s->ff); } -TU_ATTR_ALWAYS_INLINE static inline bool tu_edpt_stream_peek(tu_edpt_stream_t *s, uint8_t *ch) -{ - return tu_fifo_peek(&s->ff, ch); +TU_ATTR_ALWAYS_INLINE static inline +bool tu_edpt_stream_peek(tu_edpt_stream_t* s, uint8_t* ch) { + return tu_fifo_peek(&s->ff, ch); } #ifdef __cplusplus -} + } #endif #endif /* _TUSB_PRIVATE_H_ */ diff --git a/Libraries/tinyusb/src/common/tusb_types.h b/Libraries/tinyusb/src/common/tusb_types.h index fd68b2a3103..1501a5af6b6 100644 --- a/Libraries/tinyusb/src/common/tusb_types.h +++ b/Libraries/tinyusb/src/common/tusb_types.h @@ -32,7 +32,7 @@ #include "tusb_compiler.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif /*------------------------------------------------------------------*/ @@ -41,211 +41,231 @@ extern "C" { /// defined base on EHCI specs value for Endpoint Speed typedef enum { - TUSB_SPEED_FULL = 0, - TUSB_SPEED_LOW = 1, - TUSB_SPEED_HIGH = 2, - TUSB_SPEED_INVALID = 0xff, + TUSB_SPEED_FULL = 0, + TUSB_SPEED_LOW = 1, + TUSB_SPEED_HIGH = 2, + TUSB_SPEED_INVALID = 0xff, } tusb_speed_t; /// defined base on USB Specs Endpoint's bmAttributes typedef enum { - TUSB_XFER_CONTROL = 0, - TUSB_XFER_ISOCHRONOUS, - TUSB_XFER_BULK, - TUSB_XFER_INTERRUPT + TUSB_XFER_CONTROL = 0 , + TUSB_XFER_ISOCHRONOUS , + TUSB_XFER_BULK , + TUSB_XFER_INTERRUPT } tusb_xfer_type_t; typedef enum { - TUSB_DIR_OUT = 0, - TUSB_DIR_IN = 1, + TUSB_DIR_OUT = 0, + TUSB_DIR_IN = 1, - TUSB_DIR_IN_MASK = 0x80 + TUSB_DIR_IN_MASK = 0x80 } tusb_dir_t; enum { - TUSB_EPSIZE_BULK_FS = 64, - TUSB_EPSIZE_BULK_HS = 512, + TUSB_EPSIZE_BULK_FS = 64, + TUSB_EPSIZE_BULK_HS = 512, - TUSB_EPSIZE_ISO_FS_MAX = 1023, - TUSB_EPSIZE_ISO_HS_MAX = 1024, + TUSB_EPSIZE_ISO_FS_MAX = 1023, + TUSB_EPSIZE_ISO_HS_MAX = 1024, }; /// Isochronous Endpoint Attributes typedef enum { - TUSB_ISO_EP_ATT_NO_SYNC = 0x00, - TUSB_ISO_EP_ATT_ASYNCHRONOUS = 0x04, - TUSB_ISO_EP_ATT_ADAPTIVE = 0x08, - TUSB_ISO_EP_ATT_SYNCHRONOUS = 0x0C, - TUSB_ISO_EP_ATT_DATA = 0x00, ///< Data End Point - TUSB_ISO_EP_ATT_EXPLICIT_FB = 0x10, ///< Feedback End Point - TUSB_ISO_EP_ATT_IMPLICIT_FB = 0x20, ///< Data endpoint that also serves as an implicit feedback + TUSB_ISO_EP_ATT_NO_SYNC = 0x00, + TUSB_ISO_EP_ATT_ASYNCHRONOUS = 0x04, + TUSB_ISO_EP_ATT_ADAPTIVE = 0x08, + TUSB_ISO_EP_ATT_SYNCHRONOUS = 0x0C, + TUSB_ISO_EP_ATT_DATA = 0x00, ///< Data End Point + TUSB_ISO_EP_ATT_EXPLICIT_FB = 0x10, ///< Feedback End Point + TUSB_ISO_EP_ATT_IMPLICIT_FB = 0x20, ///< Data endpoint that also serves as an implicit feedback } tusb_iso_ep_attribute_t; /// USB Descriptor Types typedef enum { - TUSB_DESC_DEVICE = 0x01, - TUSB_DESC_CONFIGURATION = 0x02, - TUSB_DESC_STRING = 0x03, - TUSB_DESC_INTERFACE = 0x04, - TUSB_DESC_ENDPOINT = 0x05, - TUSB_DESC_DEVICE_QUALIFIER = 0x06, - TUSB_DESC_OTHER_SPEED_CONFIG = 0x07, - TUSB_DESC_INTERFACE_POWER = 0x08, - TUSB_DESC_OTG = 0x09, - TUSB_DESC_DEBUG = 0x0A, - TUSB_DESC_INTERFACE_ASSOCIATION = 0x0B, - - TUSB_DESC_BOS = 0x0F, - TUSB_DESC_DEVICE_CAPABILITY = 0x10, - - TUSB_DESC_FUNCTIONAL = 0x21, - - // Class Specific Descriptor - TUSB_DESC_CS_DEVICE = 0x21, - TUSB_DESC_CS_CONFIGURATION = 0x22, - TUSB_DESC_CS_STRING = 0x23, - TUSB_DESC_CS_INTERFACE = 0x24, - TUSB_DESC_CS_ENDPOINT = 0x25, - - TUSB_DESC_SUPERSPEED_ENDPOINT_COMPANION = 0x30, - TUSB_DESC_SUPERSPEED_ISO_ENDPOINT_COMPANION = 0x31 + TUSB_DESC_DEVICE = 0x01, + TUSB_DESC_CONFIGURATION = 0x02, + TUSB_DESC_STRING = 0x03, + TUSB_DESC_INTERFACE = 0x04, + TUSB_DESC_ENDPOINT = 0x05, + TUSB_DESC_DEVICE_QUALIFIER = 0x06, + TUSB_DESC_OTHER_SPEED_CONFIG = 0x07, + TUSB_DESC_INTERFACE_POWER = 0x08, + TUSB_DESC_OTG = 0x09, + TUSB_DESC_DEBUG = 0x0A, + TUSB_DESC_INTERFACE_ASSOCIATION = 0x0B, + + TUSB_DESC_BOS = 0x0F, + TUSB_DESC_DEVICE_CAPABILITY = 0x10, + + TUSB_DESC_FUNCTIONAL = 0x21, + + // Class Specific Descriptor + TUSB_DESC_CS_DEVICE = 0x21, + TUSB_DESC_CS_CONFIGURATION = 0x22, + TUSB_DESC_CS_STRING = 0x23, + TUSB_DESC_CS_INTERFACE = 0x24, + TUSB_DESC_CS_ENDPOINT = 0x25, + + TUSB_DESC_SUPERSPEED_ENDPOINT_COMPANION = 0x30, + TUSB_DESC_SUPERSPEED_ISO_ENDPOINT_COMPANION = 0x31 } tusb_desc_type_t; typedef enum { - TUSB_REQ_GET_STATUS = 0, - TUSB_REQ_CLEAR_FEATURE = 1, - TUSB_REQ_RESERVED = 2, - TUSB_REQ_SET_FEATURE = 3, - TUSB_REQ_RESERVED2 = 4, - TUSB_REQ_SET_ADDRESS = 5, - TUSB_REQ_GET_DESCRIPTOR = 6, - TUSB_REQ_SET_DESCRIPTOR = 7, - TUSB_REQ_GET_CONFIGURATION = 8, - TUSB_REQ_SET_CONFIGURATION = 9, - TUSB_REQ_GET_INTERFACE = 10, - TUSB_REQ_SET_INTERFACE = 11, - TUSB_REQ_SYNCH_FRAME = 12 + TUSB_REQ_GET_STATUS = 0 , + TUSB_REQ_CLEAR_FEATURE = 1 , + TUSB_REQ_RESERVED = 2 , + TUSB_REQ_SET_FEATURE = 3 , + TUSB_REQ_RESERVED2 = 4 , + TUSB_REQ_SET_ADDRESS = 5 , + TUSB_REQ_GET_DESCRIPTOR = 6 , + TUSB_REQ_SET_DESCRIPTOR = 7 , + TUSB_REQ_GET_CONFIGURATION = 8 , + TUSB_REQ_SET_CONFIGURATION = 9 , + TUSB_REQ_GET_INTERFACE = 10 , + TUSB_REQ_SET_INTERFACE = 11 , + TUSB_REQ_SYNCH_FRAME = 12 } tusb_request_code_t; typedef enum { - TUSB_REQ_FEATURE_EDPT_HALT = 0, - TUSB_REQ_FEATURE_REMOTE_WAKEUP = 1, - TUSB_REQ_FEATURE_TEST_MODE = 2 + TUSB_REQ_FEATURE_EDPT_HALT = 0, + TUSB_REQ_FEATURE_REMOTE_WAKEUP = 1, + TUSB_REQ_FEATURE_TEST_MODE = 2 } tusb_request_feature_selector_t; typedef enum { - TUSB_REQ_TYPE_STANDARD = 0, - TUSB_REQ_TYPE_CLASS, - TUSB_REQ_TYPE_VENDOR, - TUSB_REQ_TYPE_INVALID + TUSB_REQ_TYPE_STANDARD = 0, + TUSB_REQ_TYPE_CLASS, + TUSB_REQ_TYPE_VENDOR, + TUSB_REQ_TYPE_INVALID } tusb_request_type_t; typedef enum { - TUSB_REQ_RCPT_DEVICE = 0, - TUSB_REQ_RCPT_INTERFACE, - TUSB_REQ_RCPT_ENDPOINT, - TUSB_REQ_RCPT_OTHER + TUSB_REQ_RCPT_DEVICE =0, + TUSB_REQ_RCPT_INTERFACE, + TUSB_REQ_RCPT_ENDPOINT, + TUSB_REQ_RCPT_OTHER } tusb_request_recipient_t; // https://www.usb.org/defined-class-codes typedef enum { - TUSB_CLASS_UNSPECIFIED = 0, - TUSB_CLASS_AUDIO = 1, - TUSB_CLASS_CDC = 2, - TUSB_CLASS_HID = 3, - TUSB_CLASS_RESERVED_4 = 4, - TUSB_CLASS_PHYSICAL = 5, - TUSB_CLASS_IMAGE = 6, - TUSB_CLASS_PRINTER = 7, - TUSB_CLASS_MSC = 8, - TUSB_CLASS_HUB = 9, - TUSB_CLASS_CDC_DATA = 10, - TUSB_CLASS_SMART_CARD = 11, - TUSB_CLASS_RESERVED_12 = 12, - TUSB_CLASS_CONTENT_SECURITY = 13, - TUSB_CLASS_VIDEO = 14, - TUSB_CLASS_PERSONAL_HEALTHCARE = 15, - TUSB_CLASS_AUDIO_VIDEO = 16, - - TUSB_CLASS_DIAGNOSTIC = 0xDC, - TUSB_CLASS_WIRELESS_CONTROLLER = 0xE0, - TUSB_CLASS_MISC = 0xEF, - TUSB_CLASS_APPLICATION_SPECIFIC = 0xFE, - TUSB_CLASS_VENDOR_SPECIFIC = 0xFF + TUSB_CLASS_UNSPECIFIED = 0 , + TUSB_CLASS_AUDIO = 1 , + TUSB_CLASS_CDC = 2 , + TUSB_CLASS_HID = 3 , + TUSB_CLASS_RESERVED_4 = 4 , + TUSB_CLASS_PHYSICAL = 5 , + TUSB_CLASS_IMAGE = 6 , + TUSB_CLASS_PRINTER = 7 , + TUSB_CLASS_MSC = 8 , + TUSB_CLASS_HUB = 9 , + TUSB_CLASS_CDC_DATA = 10 , + TUSB_CLASS_SMART_CARD = 11 , + TUSB_CLASS_RESERVED_12 = 12 , + TUSB_CLASS_CONTENT_SECURITY = 13 , + TUSB_CLASS_VIDEO = 14 , + TUSB_CLASS_PERSONAL_HEALTHCARE = 15 , + TUSB_CLASS_AUDIO_VIDEO = 16 , + + TUSB_CLASS_DIAGNOSTIC = 0xDC , + TUSB_CLASS_WIRELESS_CONTROLLER = 0xE0 , + TUSB_CLASS_MISC = 0xEF , + TUSB_CLASS_APPLICATION_SPECIFIC = 0xFE , + TUSB_CLASS_VENDOR_SPECIFIC = 0xFF } tusb_class_code_t; -typedef enum { MISC_SUBCLASS_COMMON = 2 } misc_subclass_type_t; +typedef enum +{ + MISC_SUBCLASS_COMMON = 2 +}misc_subclass_type_t; -typedef enum { MISC_PROTOCOL_IAD = 1 } misc_protocol_type_t; +typedef enum { + MISC_PROTOCOL_IAD = 1 +} misc_protocol_type_t; -typedef enum { APP_SUBCLASS_USBTMC = 0x03, APP_SUBCLASS_DFU_RUNTIME = 0x01 } app_subclass_type_t; +typedef enum { + APP_SUBCLASS_USBTMC = 0x03, + APP_SUBCLASS_DFU_RUNTIME = 0x01 +} app_subclass_type_t; typedef enum { - DEVICE_CAPABILITY_WIRELESS_USB = 0x01, - DEVICE_CAPABILITY_USB20_EXTENSION = 0x02, - DEVICE_CAPABILITY_SUPERSPEED_USB = 0x03, - DEVICE_CAPABILITY_CONTAINER_id = 0x04, - DEVICE_CAPABILITY_PLATFORM = 0x05, - DEVICE_CAPABILITY_POWER_DELIVERY = 0x06, - DEVICE_CAPABILITY_BATTERY_INFO = 0x07, - DEVICE_CAPABILITY_PD_CONSUMER_PORT = 0x08, - DEVICE_CAPABILITY_PD_PROVIDER_PORT = 0x09, - DEVICE_CAPABILITY_SUPERSPEED_PLUS = 0x0A, - DEVICE_CAPABILITY_PRECESION_TIME_MEASUREMENT = 0x0B, - DEVICE_CAPABILITY_WIRELESS_USB_EXT = 0x0C, - DEVICE_CAPABILITY_BILLBOARD = 0x0D, - DEVICE_CAPABILITY_AUTHENTICATION = 0x0E, - DEVICE_CAPABILITY_BILLBOARD_EX = 0x0F, - DEVICE_CAPABILITY_CONFIGURATION_SUMMARY = 0x10 + DEVICE_CAPABILITY_WIRELESS_USB = 0x01, + DEVICE_CAPABILITY_USB20_EXTENSION = 0x02, + DEVICE_CAPABILITY_SUPERSPEED_USB = 0x03, + DEVICE_CAPABILITY_CONTAINER_id = 0x04, + DEVICE_CAPABILITY_PLATFORM = 0x05, + DEVICE_CAPABILITY_POWER_DELIVERY = 0x06, + DEVICE_CAPABILITY_BATTERY_INFO = 0x07, + DEVICE_CAPABILITY_PD_CONSUMER_PORT = 0x08, + DEVICE_CAPABILITY_PD_PROVIDER_PORT = 0x09, + DEVICE_CAPABILITY_SUPERSPEED_PLUS = 0x0A, + DEVICE_CAPABILITY_PRECESION_TIME_MEASUREMENT = 0x0B, + DEVICE_CAPABILITY_WIRELESS_USB_EXT = 0x0C, + DEVICE_CAPABILITY_BILLBOARD = 0x0D, + DEVICE_CAPABILITY_AUTHENTICATION = 0x0E, + DEVICE_CAPABILITY_BILLBOARD_EX = 0x0F, + DEVICE_CAPABILITY_CONFIGURATION_SUMMARY = 0x10 } device_capability_type_t; enum { - TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP = 1u << 5, - TUSB_DESC_CONFIG_ATT_SELF_POWERED = 1u << 6, + TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP = 1u << 5, + TUSB_DESC_CONFIG_ATT_SELF_POWERED = 1u << 6, }; -#define TUSB_DESC_CONFIG_POWER_MA(x) ((x) / 2) +#define TUSB_DESC_CONFIG_POWER_MA(x) ((x)/2) // USB 2.0 Spec Table 9-7: Test Mode Selectors typedef enum { - TUSB_FEATURE_TEST_J = 1, - TUSB_FEATURE_TEST_K, - TUSB_FEATURE_TEST_SE0_NAK, - TUSB_FEATURE_TEST_PACKET, - TUSB_FEATURE_TEST_FORCE_ENABLE, + TUSB_FEATURE_TEST_J = 1, + TUSB_FEATURE_TEST_K, + TUSB_FEATURE_TEST_SE0_NAK, + TUSB_FEATURE_TEST_PACKET, + TUSB_FEATURE_TEST_FORCE_ENABLE, } tusb_feature_test_mode_t; //--------------------------------------------------------------------+ // //--------------------------------------------------------------------+ typedef enum { - XFER_RESULT_SUCCESS = 0, - XFER_RESULT_FAILED, - XFER_RESULT_STALLED, - XFER_RESULT_TIMEOUT, - XFER_RESULT_INVALID + XFER_RESULT_SUCCESS = 0, + XFER_RESULT_FAILED, + XFER_RESULT_STALLED, + XFER_RESULT_TIMEOUT, + XFER_RESULT_INVALID } xfer_result_t; // TODO remove -enum { DESC_OFFSET_LEN = 0, DESC_OFFSET_TYPE = 1 }; +enum { + DESC_OFFSET_LEN = 0, + DESC_OFFSET_TYPE = 1 +}; -enum { INTERFACE_INVALID_NUMBER = 0xff }; +enum { + INTERFACE_INVALID_NUMBER = 0xff +}; typedef enum { - MS_OS_20_SET_HEADER_DESCRIPTOR = 0x00, - MS_OS_20_SUBSET_HEADER_CONFIGURATION = 0x01, - MS_OS_20_SUBSET_HEADER_FUNCTION = 0x02, - MS_OS_20_FEATURE_COMPATBLE_ID = 0x03, - MS_OS_20_FEATURE_REG_PROPERTY = 0x04, - MS_OS_20_FEATURE_MIN_RESUME_TIME = 0x05, - MS_OS_20_FEATURE_MODEL_ID = 0x06, - MS_OS_20_FEATURE_CCGP_DEVICE = 0x07, - MS_OS_20_FEATURE_VENDOR_REVISION = 0x08 + MS_OS_20_SET_HEADER_DESCRIPTOR = 0x00, + MS_OS_20_SUBSET_HEADER_CONFIGURATION = 0x01, + MS_OS_20_SUBSET_HEADER_FUNCTION = 0x02, + MS_OS_20_FEATURE_COMPATBLE_ID = 0x03, + MS_OS_20_FEATURE_REG_PROPERTY = 0x04, + MS_OS_20_FEATURE_MIN_RESUME_TIME = 0x05, + MS_OS_20_FEATURE_MODEL_ID = 0x06, + MS_OS_20_FEATURE_CCGP_DEVICE = 0x07, + MS_OS_20_FEATURE_VENDOR_REVISION = 0x08 } microsoft_os_20_type_t; -enum { CONTROL_STAGE_IDLE, CONTROL_STAGE_SETUP, CONTROL_STAGE_DATA, CONTROL_STAGE_ACK }; +enum { + CONTROL_STAGE_IDLE, + CONTROL_STAGE_SETUP, + CONTROL_STAGE_DATA, + CONTROL_STAGE_ACK +}; -enum { TUSB_INDEX_INVALID_8 = 0xFFu }; +enum { + TUSB_INDEX_INVALID_8 = 0xFFu +}; //--------------------------------------------------------------------+ // USB Descriptors @@ -257,193 +277,180 @@ TU_ATTR_BIT_FIELD_ORDER_BEGIN /// USB Device Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes. - uint8_t bDescriptorType; ///< DEVICE Descriptor Type. - uint16_t - bcdUSB; ///< BUSB Specification Release Number in Binary-Coded Decimal (i.e., 2.10 is 210H). - - uint8_t bDeviceClass; ///< Class code (assigned by the USB-IF). - uint8_t bDeviceSubClass; ///< Subclass code (assigned by the USB-IF). - uint8_t bDeviceProtocol; ///< Protocol code (assigned by the USB-IF). - uint8_t - bMaxPacketSize0; ///< Maximum packet size for endpoint zero (only 8, 16, 32, or 64 are valid). For HS devices is fixed to 64. - - uint16_t idVendor; ///< Vendor ID (assigned by the USB-IF). - uint16_t idProduct; ///< Product ID (assigned by the manufacturer). - uint16_t bcdDevice; ///< Device release number in binary-coded decimal. - uint8_t iManufacturer; ///< Index of string descriptor describing manufacturer. - uint8_t iProduct; ///< Index of string descriptor describing product. - uint8_t iSerialNumber; ///< Index of string descriptor describing the device's serial number. - - uint8_t bNumConfigurations; ///< Number of possible configurations. + uint8_t bLength ; ///< Size of this descriptor in bytes. + uint8_t bDescriptorType ; ///< DEVICE Descriptor Type. + uint16_t bcdUSB ; ///< BUSB Specification Release Number in Binary-Coded Decimal (i.e., 2.10 is 210H). + + uint8_t bDeviceClass ; ///< Class code (assigned by the USB-IF). + uint8_t bDeviceSubClass ; ///< Subclass code (assigned by the USB-IF). + uint8_t bDeviceProtocol ; ///< Protocol code (assigned by the USB-IF). + uint8_t bMaxPacketSize0 ; ///< Maximum packet size for endpoint zero (only 8, 16, 32, or 64 are valid). For HS devices is fixed to 64. + + uint16_t idVendor ; ///< Vendor ID (assigned by the USB-IF). + uint16_t idProduct ; ///< Product ID (assigned by the manufacturer). + uint16_t bcdDevice ; ///< Device release number in binary-coded decimal. + uint8_t iManufacturer ; ///< Index of string descriptor describing manufacturer. + uint8_t iProduct ; ///< Index of string descriptor describing product. + uint8_t iSerialNumber ; ///< Index of string descriptor describing the device's serial number. + + uint8_t bNumConfigurations ; ///< Number of possible configurations. } tusb_desc_device_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_device_t) == 18, "size is not correct"); +TU_VERIFY_STATIC( sizeof(tusb_desc_device_t) == 18, "size is not correct"); // USB Binary Device Object Store (BOS) Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes - uint8_t bDescriptorType; ///< CONFIGURATION Descriptor Type - uint16_t wTotalLength; ///< Total length of data returned for this descriptor - uint8_t bNumDeviceCaps; ///< Number of device capability descriptors in the BOS + uint8_t bLength ; ///< Size of this descriptor in bytes + uint8_t bDescriptorType ; ///< CONFIGURATION Descriptor Type + uint16_t wTotalLength ; ///< Total length of data returned for this descriptor + uint8_t bNumDeviceCaps ; ///< Number of device capability descriptors in the BOS } tusb_desc_bos_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_bos_t) == 5, "size is not correct"); +TU_VERIFY_STATIC( sizeof(tusb_desc_bos_t) == 5, "size is not correct"); /// USB Configuration Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes - uint8_t bDescriptorType; ///< CONFIGURATION Descriptor Type - uint16_t - wTotalLength; ///< Total length of data returned for this configuration. Includes the combined length of all descriptors (configuration, interface, endpoint, and class- or vendor-specific) returned for this configuration. - - uint8_t bNumInterfaces; ///< Number of interfaces supported by this configuration - uint8_t - bConfigurationValue; ///< Value to use as an argument to the SetConfiguration() request to select this configuration. - uint8_t iConfiguration; ///< Index of string descriptor describing this configuration - uint8_t - bmAttributes; ///< Configuration characteristics \n D7: Reserved (set to one)\n D6: Self-powered \n D5: Remote Wakeup \n D4...0: Reserved (reset to zero) \n D7 is reserved and must be set to one for historical reasons. \n A device configuration that uses power from the bus and a local source reports a non-zero value in bMaxPower to indicate the amount of bus power required and sets D6. The actual power source at runtime may be determined using the GetStatus(DEVICE) request (see USB 2.0 spec Section 9.4.5). \n If a device configuration supports remote wakeup, D5 is set to one. - uint8_t - bMaxPower; ///< Maximum power consumption of the USB device from the bus in this specific configuration when the device is fully operational. Expressed in 2 mA units (i.e., 50 = 100 mA). + uint8_t bLength ; ///< Size of this descriptor in bytes + uint8_t bDescriptorType ; ///< CONFIGURATION Descriptor Type + uint16_t wTotalLength ; ///< Total length of data returned for this configuration. Includes the combined length of all descriptors (configuration, interface, endpoint, and class- or vendor-specific) returned for this configuration. + + uint8_t bNumInterfaces ; ///< Number of interfaces supported by this configuration + uint8_t bConfigurationValue ; ///< Value to use as an argument to the SetConfiguration() request to select this configuration. + uint8_t iConfiguration ; ///< Index of string descriptor describing this configuration + uint8_t bmAttributes ; ///< Configuration characteristics \n D7: Reserved (set to one)\n D6: Self-powered \n D5: Remote Wakeup \n D4...0: Reserved (reset to zero) \n D7 is reserved and must be set to one for historical reasons. \n A device configuration that uses power from the bus and a local source reports a non-zero value in bMaxPower to indicate the amount of bus power required and sets D6. The actual power source at runtime may be determined using the GetStatus(DEVICE) request (see USB 2.0 spec Section 9.4.5). \n If a device configuration supports remote wakeup, D5 is set to one. + uint8_t bMaxPower ; ///< Maximum power consumption of the USB device from the bus in this specific configuration when the device is fully operational. Expressed in 2 mA units (i.e., 50 = 100 mA). } tusb_desc_configuration_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_configuration_t) == 9, "size is not correct"); +TU_VERIFY_STATIC( sizeof(tusb_desc_configuration_t) == 9, "size is not correct"); /// USB Interface Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes - uint8_t bDescriptorType; ///< INTERFACE Descriptor Type - - uint8_t - bInterfaceNumber; ///< Number of this interface. Zero-based value identifying the index in the array of concurrent interfaces supported by this configuration. - uint8_t - bAlternateSetting; ///< Value used to select this alternate setting for the interface identified in the prior field - uint8_t - bNumEndpoints; ///< Number of endpoints used by this interface (excluding endpoint zero). If this value is zero, this interface only uses the Default Control Pipe. - uint8_t - bInterfaceClass; ///< Class code (assigned by the USB-IF). \li A value of zero is reserved for future standardization. \li If this field is set to FFH, the interface class is vendor-specific. \li All other values are reserved for assignment by the USB-IF. - uint8_t - bInterfaceSubClass; ///< Subclass code (assigned by the USB-IF). \n These codes are qualified by the value of the bInterfaceClass field. \li If the bInterfaceClass field is reset to zero, this field must also be reset to zero. \li If the bInterfaceClass field is not set to FFH, all values are reserved for assignment by the USB-IF. - uint8_t - bInterfaceProtocol; ///< Protocol code (assigned by the USB). \n These codes are qualified by the value of the bInterfaceClass and the bInterfaceSubClass fields. If an interface supports class-specific requests, this code identifies the protocols that the device uses as defined by the specification of the device class. \li If this field is reset to zero, the device does not use a class-specific protocol on this interface. \li If this field is set to FFH, the device uses a vendor-specific protocol for this interface. - uint8_t iInterface; ///< Index of string descriptor describing this interface + uint8_t bLength ; ///< Size of this descriptor in bytes + uint8_t bDescriptorType ; ///< INTERFACE Descriptor Type + + uint8_t bInterfaceNumber ; ///< Number of this interface. Zero-based value identifying the index in the array of concurrent interfaces supported by this configuration. + uint8_t bAlternateSetting ; ///< Value used to select this alternate setting for the interface identified in the prior field + uint8_t bNumEndpoints ; ///< Number of endpoints used by this interface (excluding endpoint zero). If this value is zero, this interface only uses the Default Control Pipe. + uint8_t bInterfaceClass ; ///< Class code (assigned by the USB-IF). \li A value of zero is reserved for future standardization. \li If this field is set to FFH, the interface class is vendor-specific. \li All other values are reserved for assignment by the USB-IF. + uint8_t bInterfaceSubClass ; ///< Subclass code (assigned by the USB-IF). \n These codes are qualified by the value of the bInterfaceClass field. \li If the bInterfaceClass field is reset to zero, this field must also be reset to zero. \li If the bInterfaceClass field is not set to FFH, all values are reserved for assignment by the USB-IF. + uint8_t bInterfaceProtocol ; ///< Protocol code (assigned by the USB). \n These codes are qualified by the value of the bInterfaceClass and the bInterfaceSubClass fields. If an interface supports class-specific requests, this code identifies the protocols that the device uses as defined by the specification of the device class. \li If this field is reset to zero, the device does not use a class-specific protocol on this interface. \li If this field is set to FFH, the device uses a vendor-specific protocol for this interface. + uint8_t iInterface ; ///< Index of string descriptor describing this interface } tusb_desc_interface_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_interface_t) == 9, "size is not correct"); +TU_VERIFY_STATIC( sizeof(tusb_desc_interface_t) == 9, "size is not correct"); /// USB Endpoint Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; // Size of this descriptor in bytes - uint8_t bDescriptorType; // ENDPOINT Descriptor Type + uint8_t bLength ; // Size of this descriptor in bytes + uint8_t bDescriptorType ; // ENDPOINT Descriptor Type - uint8_t bEndpointAddress; // The address of the endpoint + uint8_t bEndpointAddress ; // The address of the endpoint - struct TU_ATTR_PACKED { - uint8_t xfer : 2; // Control, ISO, Bulk, Interrupt - uint8_t sync : 2; // None, Asynchronous, Adaptive, Synchronous - uint8_t usage : 2; // Data, Feedback, Implicit feedback - uint8_t : 2; - } bmAttributes; + struct TU_ATTR_PACKED { + uint8_t xfer : 2; // Control, ISO, Bulk, Interrupt + uint8_t sync : 2; // None, Asynchronous, Adaptive, Synchronous + uint8_t usage : 2; // Data, Feedback, Implicit feedback + uint8_t : 2; + } bmAttributes; - uint16_t - wMaxPacketSize; // Bit 10..0 : max packet size, bit 12..11 additional transaction per highspeed micro-frame - uint8_t bInterval; // Polling interval, in frames or microframes depending on the operating speed + uint16_t wMaxPacketSize ; // Bit 10..0 : max packet size, bit 12..11 additional transaction per highspeed micro-frame + uint8_t bInterval ; // Polling interval, in frames or microframes depending on the operating speed } tusb_desc_endpoint_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_endpoint_t) == 7, "size is not correct"); +TU_VERIFY_STATIC( sizeof(tusb_desc_endpoint_t) == 7, "size is not correct"); /// USB Other Speed Configuration Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of descriptor - uint8_t bDescriptorType; ///< Other_speed_Configuration Type - uint16_t wTotalLength; ///< Total length of data returned - - uint8_t bNumInterfaces; ///< Number of interfaces supported by this speed configuration - uint8_t bConfigurationValue; ///< Value to use to select configuration - uint8_t iConfiguration; ///< Index of string descriptor - uint8_t bmAttributes; ///< Same as Configuration descriptor - uint8_t bMaxPower; ///< Same as Configuration descriptor + uint8_t bLength ; ///< Size of descriptor + uint8_t bDescriptorType ; ///< Other_speed_Configuration Type + uint16_t wTotalLength ; ///< Total length of data returned + + uint8_t bNumInterfaces ; ///< Number of interfaces supported by this speed configuration + uint8_t bConfigurationValue ; ///< Value to use to select configuration + uint8_t iConfiguration ; ///< Index of string descriptor + uint8_t bmAttributes ; ///< Same as Configuration descriptor + uint8_t bMaxPower ; ///< Same as Configuration descriptor } tusb_desc_other_speed_t; /// USB Device Qualifier Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of descriptor - uint8_t bDescriptorType; ///< Device Qualifier Type - uint16_t bcdUSB; ///< USB specification version number (e.g., 0200H for V2.00) + uint8_t bLength ; ///< Size of descriptor + uint8_t bDescriptorType ; ///< Device Qualifier Type + uint16_t bcdUSB ; ///< USB specification version number (e.g., 0200H for V2.00) - uint8_t bDeviceClass; ///< Class Code - uint8_t bDeviceSubClass; ///< SubClass Code - uint8_t bDeviceProtocol; ///< Protocol Code + uint8_t bDeviceClass ; ///< Class Code + uint8_t bDeviceSubClass ; ///< SubClass Code + uint8_t bDeviceProtocol ; ///< Protocol Code - uint8_t bMaxPacketSize0; ///< Maximum packet size for other speed - uint8_t bNumConfigurations; ///< Number of Other-speed Configurations - uint8_t bReserved; ///< Reserved for future use, must be zero + uint8_t bMaxPacketSize0 ; ///< Maximum packet size for other speed + uint8_t bNumConfigurations ; ///< Number of Other-speed Configurations + uint8_t bReserved ; ///< Reserved for future use, must be zero } tusb_desc_device_qualifier_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_device_qualifier_t) == 10, "size is not correct"); +TU_VERIFY_STATIC( sizeof(tusb_desc_device_qualifier_t) == 10, "size is not correct"); /// USB Interface Association Descriptor (IAD ECN) typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of descriptor - uint8_t bDescriptorType; ///< Other_speed_Configuration Type + uint8_t bLength ; ///< Size of descriptor + uint8_t bDescriptorType ; ///< Other_speed_Configuration Type - uint8_t bFirstInterface; ///< Index of the first associated interface. - uint8_t bInterfaceCount; ///< Total number of associated interfaces. + uint8_t bFirstInterface ; ///< Index of the first associated interface. + uint8_t bInterfaceCount ; ///< Total number of associated interfaces. - uint8_t bFunctionClass; ///< Interface class ID. - uint8_t bFunctionSubClass; ///< Interface subclass ID. - uint8_t bFunctionProtocol; ///< Interface protocol ID. + uint8_t bFunctionClass ; ///< Interface class ID. + uint8_t bFunctionSubClass ; ///< Interface subclass ID. + uint8_t bFunctionProtocol ; ///< Interface protocol ID. - uint8_t iFunction; ///< Index of the string descriptor describing the interface association. + uint8_t iFunction ; ///< Index of the string descriptor describing the interface association. } tusb_desc_interface_assoc_t; -TU_VERIFY_STATIC(sizeof(tusb_desc_interface_assoc_t) == 8, "size is not correct"); +TU_VERIFY_STATIC( sizeof(tusb_desc_interface_assoc_t) == 8, "size is not correct"); // USB String Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; ///< Size of this descriptor in bytes - uint8_t bDescriptorType; ///< Descriptor Type - uint16_t unicode_string[]; + uint8_t bLength ; ///< Size of this descriptor in bytes + uint8_t bDescriptorType ; ///< Descriptor Type + uint16_t unicode_string[]; } tusb_desc_string_t; // USB Binary Device Object Store (BOS) typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bDevCapabilityType; - uint8_t bReserved; - uint8_t PlatformCapabilityUUID[16]; - uint8_t CapabilityData[]; + uint8_t bLength; + uint8_t bDescriptorType ; + uint8_t bDevCapabilityType; + uint8_t bReserved; + uint8_t PlatformCapabilityUUID[16]; + uint8_t CapabilityData[]; } tusb_desc_bos_platform_t; // USB WebUSB URL Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bScheme; - char url[]; + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bScheme; + char url[]; } tusb_desc_webusb_url_t; // DFU Functional Descriptor typedef struct TU_ATTR_PACKED { - uint8_t bLength; - uint8_t bDescriptorType; - - union { - struct TU_ATTR_PACKED { - uint8_t bitCanDnload : 1; - uint8_t bitCanUpload : 1; - uint8_t bitManifestationTolerant : 1; - uint8_t bitWillDetach : 1; - uint8_t reserved : 4; - } bmAttributes; - - uint8_t bAttributes; - }; - - uint16_t wDetachTimeOut; - uint16_t wTransferSize; - uint16_t bcdDFUVersion; + uint8_t bLength; + uint8_t bDescriptorType; + + union { + struct TU_ATTR_PACKED { + uint8_t bitCanDnload : 1; + uint8_t bitCanUpload : 1; + uint8_t bitManifestationTolerant : 1; + uint8_t bitWillDetach : 1; + uint8_t reserved : 4; + } bmAttributes; + + uint8_t bAttributes; + }; + + uint16_t wDetachTimeOut; + uint16_t wTransferSize; + uint16_t bcdDFUVersion; } tusb_desc_dfu_functional_t; //--------------------------------------------------------------------+ @@ -451,60 +458,53 @@ typedef struct TU_ATTR_PACKED { //--------------------------------------------------------------------+ typedef struct TU_ATTR_PACKED { - union { - struct TU_ATTR_PACKED { - uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. - uint8_t type : 2; ///< Request type tusb_request_type_t. - uint8_t direction : 1; ///< Direction type. tusb_dir_t - } bmRequestType_bit; - - uint8_t bmRequestType; - }; - - uint8_t bRequest; - uint16_t wValue; - uint16_t wIndex; - uint16_t wLength; + union { + struct TU_ATTR_PACKED { + uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t. + uint8_t type : 2; ///< Request type tusb_request_type_t. + uint8_t direction : 1; ///< Direction type. tusb_dir_t + } bmRequestType_bit; + + uint8_t bmRequestType; + }; + + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; } tusb_control_request_t; -TU_VERIFY_STATIC(sizeof(tusb_control_request_t) == 8, "size is not correct"); +TU_VERIFY_STATIC( sizeof(tusb_control_request_t) == 8, "size is not correct"); -TU_ATTR_PACKED_END // End of all packed definitions - TU_ATTR_BIT_FIELD_ORDER_END +TU_ATTR_PACKED_END // End of all packed definitions +TU_ATTR_BIT_FIELD_ORDER_END - //--------------------------------------------------------------------+ - // Endpoint helper - //--------------------------------------------------------------------+ +//--------------------------------------------------------------------+ +// Endpoint helper +//--------------------------------------------------------------------+ - // Get direction from Endpoint address - TU_ATTR_ALWAYS_INLINE static inline tusb_dir_t - tu_edpt_dir(uint8_t addr) -{ - return (addr & TUSB_DIR_IN_MASK) ? TUSB_DIR_IN : TUSB_DIR_OUT; +// Get direction from Endpoint address +TU_ATTR_ALWAYS_INLINE static inline tusb_dir_t tu_edpt_dir(uint8_t addr) { + return (addr & TUSB_DIR_IN_MASK) ? TUSB_DIR_IN : TUSB_DIR_OUT; } // Get Endpoint number from address -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_number(uint8_t addr) -{ - return (uint8_t)(addr & (~TUSB_DIR_IN_MASK)); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_number(uint8_t addr) { + return (uint8_t)(addr & (~TUSB_DIR_IN_MASK)); } -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_addr(uint8_t num, uint8_t dir) -{ - return (uint8_t)(num | (dir ? TUSB_DIR_IN_MASK : 0)); +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_edpt_addr(uint8_t num, uint8_t dir) { + return (uint8_t)(num | (dir ? TUSB_DIR_IN_MASK : 0)); } -TU_ATTR_ALWAYS_INLINE static inline uint16_t -tu_edpt_packet_size(tusb_desc_endpoint_t const *desc_ep) -{ - return tu_le16toh(desc_ep->wMaxPacketSize) & 0x7FF; +TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_edpt_packet_size(tusb_desc_endpoint_t const* desc_ep) { + return tu_le16toh(desc_ep->wMaxPacketSize) & 0x7FF; } #if CFG_TUSB_DEBUG -TU_ATTR_ALWAYS_INLINE static inline const char *tu_edpt_type_str(tusb_xfer_type_t t) -{ - tu_static const char *str[] = { "control", "isochronous", "bulk", "interrupt" }; - return str[t]; +TU_ATTR_ALWAYS_INLINE static inline const char *tu_edpt_type_str(tusb_xfer_type_t t) { + tu_static const char *str[] = {"control", "isochronous", "bulk", "interrupt"}; + return str[t]; } #endif @@ -513,36 +513,32 @@ TU_ATTR_ALWAYS_INLINE static inline const char *tu_edpt_type_str(tusb_xfer_type_ //--------------------------------------------------------------------+ // return next descriptor -TU_ATTR_ALWAYS_INLINE static inline uint8_t const *tu_desc_next(void const *desc) -{ - uint8_t const *desc8 = (uint8_t const *)desc; - return desc8 + desc8[DESC_OFFSET_LEN]; +TU_ATTR_ALWAYS_INLINE static inline uint8_t const * tu_desc_next(void const* desc) { + uint8_t const* desc8 = (uint8_t const*) desc; + return desc8 + desc8[DESC_OFFSET_LEN]; } // get descriptor type -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_type(void const *desc) -{ - return ((uint8_t const *)desc)[DESC_OFFSET_TYPE]; +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_type(void const* desc) { + return ((uint8_t const*) desc)[DESC_OFFSET_TYPE]; } // get descriptor length -TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_len(void const *desc) -{ - return ((uint8_t const *)desc)[DESC_OFFSET_LEN]; +TU_ATTR_ALWAYS_INLINE static inline uint8_t tu_desc_len(void const* desc) { + return ((uint8_t const*) desc)[DESC_OFFSET_LEN]; } // find descriptor that match byte1 (type) -uint8_t const *tu_desc_find(uint8_t const *desc, uint8_t const *end, uint8_t byte1); +uint8_t const * tu_desc_find(uint8_t const* desc, uint8_t const* end, uint8_t byte1); // find descriptor that match byte1 (type) and byte2 -uint8_t const *tu_desc_find2(uint8_t const *desc, uint8_t const *end, uint8_t byte1, uint8_t byte2); +uint8_t const * tu_desc_find2(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2); // find descriptor that match byte1 (type) and byte2 -uint8_t const *tu_desc_find3(uint8_t const *desc, uint8_t const *end, uint8_t byte1, uint8_t byte2, - uint8_t byte3); +uint8_t const * tu_desc_find3(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2, uint8_t byte3); #ifdef __cplusplus -} + } #endif #endif // TUSB_TYPES_H_ diff --git a/Libraries/tinyusb/src/common/tusb_verify.h b/Libraries/tinyusb/src/common/tusb_verify.h index ae49387c731..4344575b708 100644 --- a/Libraries/tinyusb/src/common/tusb_verify.h +++ b/Libraries/tinyusb/src/common/tusb_verify.h @@ -61,7 +61,7 @@ *------------------------------------------------------------------*/ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -69,64 +69,47 @@ extern "C" { //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG -#include -#define TU_MESS_FAILED() tu_printf("%s %d: ASSERT FAILED\r\n", __func__, __LINE__) + #include + #define TU_MESS_FAILED() tu_printf("%s %d: ASSERT FAILED\r\n", __func__, __LINE__) #else -#define TU_MESS_FAILED() \ - do { \ - } while (0) + #define TU_MESS_FAILED() do {} while (0) #endif // Halt CPU (breakpoint) when hitting error, only apply for Cortex M3, M4, M7, M33. M55 -#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__) || \ - defined(__ARM_ARCH_8_1M_MAIN__) || defined(__ARM7M__) || defined(__ARM7EM__) || \ - defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) -#define TU_BREAKPOINT() \ - do { \ - volatile uint32_t *ARM_CM_DHCSR = \ - ((volatile uint32_t *)0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \ - if ((*ARM_CM_DHCSR) & 1UL) \ - __asm("BKPT #0\n"); /* Only halt mcu if debugger is attached */ \ - } while (0) +#if defined(__ARM_ARCH_7M__) || defined (__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8_1M_MAIN__) || \ + defined(__ARM7M__) || defined (__ARM7EM__) || defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) + #define TU_BREAKPOINT() do { \ + volatile uint32_t* ARM_CM_DHCSR = ((volatile uint32_t*) 0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \ + if ( (*ARM_CM_DHCSR) & 1UL ) __asm("BKPT #0\n"); /* Only halt mcu if debugger is attached */ \ + } while(0) #elif defined(__riscv) && !TUP_MCU_ESPRESSIF -#define TU_BREAKPOINT() \ - do { \ - __asm("ebreak\n"); \ - } while (0) + #define TU_BREAKPOINT() do { __asm("ebreak\n"); } while(0) #elif defined(_mips) -#define TU_BREAKPOINT() \ - do { \ - __asm("sdbbp 0"); \ - } while (0) + #define TU_BREAKPOINT() do { __asm("sdbbp 0"); } while (0) #else -#define TU_BREAKPOINT() \ - do { \ - } while (0) + #define TU_BREAKPOINT() do {} while (0) #endif // Helper to implement optional parameter for TU_VERIFY Macro family -#define _GET_3RD_ARG(arg1, arg2, arg3, ...) arg3 +#define _GET_3RD_ARG(arg1, arg2, arg3, ...) arg3 /*------------------------------------------------------------------*/ /* TU_VERIFY * - TU_VERIFY_1ARGS : return false if failed * - TU_VERIFY_2ARGS : return provided value if failed *------------------------------------------------------------------*/ -#define TU_VERIFY_DEFINE(_cond, _ret) \ - do { \ - if (!(_cond)) { \ - return _ret; \ - } \ - } while (0) +#define TU_VERIFY_DEFINE(_cond, _ret) \ + do { \ + if ( !(_cond) ) { return _ret; } \ + } while(0) -#define TU_VERIFY_1ARGS(_cond) TU_VERIFY_DEFINE(_cond, false) -#define TU_VERIFY_2ARGS(_cond, _ret) TU_VERIFY_DEFINE(_cond, _ret) +#define TU_VERIFY_1ARGS(_cond) TU_VERIFY_DEFINE(_cond, false) +#define TU_VERIFY_2ARGS(_cond, _ret) TU_VERIFY_DEFINE(_cond, _ret) -#define TU_VERIFY(...) \ - _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, _dummy)(__VA_ARGS__) +#define TU_VERIFY(...) _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, _dummy)(__VA_ARGS__) /*------------------------------------------------------------------*/ /* ASSERT @@ -134,25 +117,20 @@ extern "C" { * - 1 arg : return false if failed * - 2 arg : return error if failed *------------------------------------------------------------------*/ -#define TU_ASSERT_DEFINE(_cond, _ret) \ - do { \ - if (!(_cond)) { \ - TU_MESS_FAILED(); \ - TU_BREAKPOINT(); \ - return _ret; \ - } \ - } while (0) - -#define TU_ASSERT_1ARGS(_cond) TU_ASSERT_DEFINE(_cond, false) -#define TU_ASSERT_2ARGS(_cond, _ret) TU_ASSERT_DEFINE(_cond, _ret) +#define TU_ASSERT_DEFINE(_cond, _ret) \ + do { \ + if ( !(_cond) ) { TU_MESS_FAILED(); TU_BREAKPOINT(); return _ret; } \ + } while(0) + +#define TU_ASSERT_1ARGS(_cond) TU_ASSERT_DEFINE(_cond, false) +#define TU_ASSERT_2ARGS(_cond, _ret) TU_ASSERT_DEFINE(_cond, _ret) #ifndef TU_ASSERT -#define TU_ASSERT(...) \ - _GET_3RD_ARG(__VA_ARGS__, TU_ASSERT_2ARGS, TU_ASSERT_1ARGS, _dummy)(__VA_ARGS__) +#define TU_ASSERT(...) _GET_3RD_ARG(__VA_ARGS__, TU_ASSERT_2ARGS, TU_ASSERT_1ARGS, _dummy)(__VA_ARGS__) #endif #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/device/dcd.h b/Libraries/tinyusb/src/device/dcd.h index f2a68d73d7a..d1d4e489765 100644 --- a/Libraries/tinyusb/src/device/dcd.h +++ b/Libraries/tinyusb/src/device/dcd.h @@ -32,7 +32,7 @@ #include "common/tusb_fifo.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -40,49 +40,49 @@ extern "C" { //--------------------------------------------------------------------+ typedef enum { - DCD_EVENT_INVALID = 0, // 0 - DCD_EVENT_BUS_RESET, // 1 - DCD_EVENT_UNPLUGGED, // 2 - DCD_EVENT_SOF, // 3 - DCD_EVENT_SUSPEND, // 4 TODO LPM Sleep L1 support - DCD_EVENT_RESUME, // 5 - DCD_EVENT_SETUP_RECEIVED, // 6 - DCD_EVENT_XFER_COMPLETE, // 7 - USBD_EVENT_FUNC_CALL, // 8 Not an DCD event, just a convenient way to defer ISR function - DCD_EVENT_COUNT + DCD_EVENT_INVALID = 0, // 0 + DCD_EVENT_BUS_RESET, // 1 + DCD_EVENT_UNPLUGGED, // 2 + DCD_EVENT_SOF, // 3 + DCD_EVENT_SUSPEND, // 4 TODO LPM Sleep L1 support + DCD_EVENT_RESUME, // 5 + DCD_EVENT_SETUP_RECEIVED, // 6 + DCD_EVENT_XFER_COMPLETE, // 7 + USBD_EVENT_FUNC_CALL, // 8 Not an DCD event, just a convenient way to defer ISR function + DCD_EVENT_COUNT } dcd_eventid_t; typedef struct TU_ATTR_ALIGNED(4) { - uint8_t rhport; - uint8_t event_id; - - union { - // BUS RESET - struct { - tusb_speed_t speed; - } bus_reset; - - // SOF - struct { - uint32_t frame_count; - } sof; - - // SETUP_RECEIVED - tusb_control_request_t setup_received; - - // XFER_COMPLETE - struct { - uint8_t ep_addr; - uint8_t result; - uint32_t len; - } xfer_complete; - - // FUNC_CALL - struct { - void (*func)(void *); - void *param; - } func_call; - }; + uint8_t rhport; + uint8_t event_id; + + union { + // BUS RESET + struct { + tusb_speed_t speed; + } bus_reset; + + // SOF + struct { + uint32_t frame_count; + }sof; + + // SETUP_RECEIVED + tusb_control_request_t setup_received; + + // XFER_COMPLETE + struct { + uint8_t ep_addr; + uint8_t result; + uint32_t len; + }xfer_complete; + + // FUNC_CALL + struct { + void (*func) (void*); + void* param; + }func_call; + }; } dcd_event_t; //TU_VERIFY_STATIC(sizeof(dcd_event_t) <= 12, "size is not correct"); @@ -93,15 +93,15 @@ typedef struct TU_ATTR_ALIGNED(4) { // clean/flush data cache: write cache -> memory. // Required before an DMA TX transfer to make sure data is in memory -void dcd_dcache_clean(void const *addr, uint32_t data_size) TU_ATTR_WEAK; +void dcd_dcache_clean(void const* addr, uint32_t data_size) TU_ATTR_WEAK; // invalidate data cache: mark cache as invalid, next read will read from memory // Required BOTH before and after an DMA RX transfer -void dcd_dcache_invalidate(void const *addr, uint32_t data_size) TU_ATTR_WEAK; +void dcd_dcache_invalidate(void const* addr, uint32_t data_size) TU_ATTR_WEAK; // clean and invalidate data cache // Required before an DMA transfer where memory is both read/write by DMA -void dcd_dcache_clean_invalidate(void const *addr, uint32_t data_size) TU_ATTR_WEAK; +void dcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) TU_ATTR_WEAK; //--------------------------------------------------------------------+ // Controller API @@ -117,7 +117,7 @@ bool dcd_deinit(uint8_t rhport); void dcd_int_handler(uint8_t rhport); // Enable device interrupt -void dcd_int_enable(uint8_t rhport); +void dcd_int_enable (uint8_t rhport); // Disable device interrupt void dcd_int_disable(uint8_t rhport); @@ -147,30 +147,29 @@ void dcd_enter_test_mode(uint8_t rhport, tusb_feature_test_mode_t test_selector) // Invoked when a control transfer's status stage is complete. // May help DCD to prepare for next control transfer, this API is optional. -void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const *request); +void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * request); // Configure endpoint's registers according to descriptor -bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep); +bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); // Close all non-control endpoints, cancel all pending transfers if any. // Invoked when switching from a non-zero Configuration by SET_CONFIGURE therefore // required for multiple configuration support. -void dcd_edpt_close_all(uint8_t rhport); +void dcd_edpt_close_all (uint8_t rhport); // Submit a transfer, When complete dcd_event_xfer_complete() is invoked to notify the stack -bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes); +bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); // Submit an transfer using fifo, When complete dcd_event_xfer_complete() is invoked to notify the stack // This API is optional, may be useful for register-based for transferring data. -bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, - uint16_t total_bytes) TU_ATTR_WEAK; +bool dcd_edpt_xfer_fifo (uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes) TU_ATTR_WEAK; // Stall endpoint, any queuing transfer should be removed from endpoint -void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr); +void dcd_edpt_stall (uint8_t rhport, uint8_t ep_addr); // clear stall, data toggle is also reset to DATA0 // This API never calls with control endpoints, since it is auto cleared when receiving setup packet -void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr); +void dcd_edpt_clear_stall (uint8_t rhport, uint8_t ep_addr); #ifdef TUP_DCD_EDPT_ISO_ALLOC // Allocate packet buffer used by ISO endpoints @@ -178,11 +177,11 @@ void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr); bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size); // Configure and enable an ISO endpoint according to descriptor -bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep); +bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); #else // Close an endpoint. -void dcd_edpt_close(uint8_t rhport, uint8_t ep_addr) TU_ATTR_WEAK; +void dcd_edpt_close (uint8_t rhport, uint8_t ep_addr) TU_ATTR_WEAK; #endif @@ -191,59 +190,48 @@ void dcd_edpt_close(uint8_t rhport, uint8_t ep_addr) TU_ATTR_WEAK; //--------------------------------------------------------------------+ // Called by DCD to notify device stack -extern void dcd_event_handler(dcd_event_t const *event, bool in_isr); +extern void dcd_event_handler(dcd_event_t const * event, bool in_isr); // helper to send bus signal event -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_signal(uint8_t rhport, dcd_eventid_t eid, - bool in_isr) -{ - dcd_event_t event = { .rhport = rhport, .event_id = eid }; - dcd_event_handler(&event, in_isr); +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_signal (uint8_t rhport, dcd_eventid_t eid, bool in_isr) { + dcd_event_t event = { .rhport = rhport, .event_id = eid }; + dcd_event_handler(&event, in_isr); } // helper to send bus reset event -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_reset(uint8_t rhport, tusb_speed_t speed, - bool in_isr) -{ - dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_BUS_RESET }; - event.bus_reset.speed = speed; - dcd_event_handler(&event, in_isr); +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_bus_reset (uint8_t rhport, tusb_speed_t speed, bool in_isr) { + dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_BUS_RESET }; + event.bus_reset.speed = speed; + dcd_event_handler(&event, in_isr); } // helper to send setup received -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_setup_received(uint8_t rhport, - uint8_t const *setup, bool in_isr) -{ - dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SETUP_RECEIVED }; - memcpy(&event.setup_received, setup, sizeof(tusb_control_request_t)); +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_setup_received(uint8_t rhport, uint8_t const * setup, bool in_isr) { + dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SETUP_RECEIVED }; + memcpy(&event.setup_received, setup, sizeof(tusb_control_request_t)); - dcd_event_handler(&event, in_isr); + dcd_event_handler(&event, in_isr); } // helper to send transfer complete event -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_xfer_complete(uint8_t rhport, uint8_t ep_addr, - uint32_t xferred_bytes, - uint8_t result, bool in_isr) -{ - dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_XFER_COMPLETE }; +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_xfer_complete (uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr) { + dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_XFER_COMPLETE }; - event.xfer_complete.ep_addr = ep_addr; - event.xfer_complete.len = xferred_bytes; - event.xfer_complete.result = result; + event.xfer_complete.ep_addr = ep_addr; + event.xfer_complete.len = xferred_bytes; + event.xfer_complete.result = result; - dcd_event_handler(&event, in_isr); + dcd_event_handler(&event, in_isr); } -TU_ATTR_ALWAYS_INLINE static inline void dcd_event_sof(uint8_t rhport, uint32_t frame_count, - bool in_isr) -{ - dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SOF }; - event.sof.frame_count = frame_count; - dcd_event_handler(&event, in_isr); +TU_ATTR_ALWAYS_INLINE static inline void dcd_event_sof(uint8_t rhport, uint32_t frame_count, bool in_isr) { + dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SOF }; + event.sof.frame_count = frame_count; + dcd_event_handler(&event, in_isr); } #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/device/usbd.c b/Libraries/tinyusb/src/device/usbd.c index 31870584edf..67faf0da769 100644 --- a/Libraries/tinyusb/src/device/usbd.c +++ b/Libraries/tinyusb/src/device/usbd.c @@ -39,74 +39,66 @@ // USBD Configuration //--------------------------------------------------------------------+ #ifndef CFG_TUD_TASK_QUEUE_SZ -#define CFG_TUD_TASK_QUEUE_SZ 16 + #define CFG_TUD_TASK_QUEUE_SZ 16 #endif //--------------------------------------------------------------------+ // Weak stubs: invoked if no strong implementation is available //--------------------------------------------------------------------+ -TU_ATTR_WEAK void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr) -{ - (void)rhport; - (void)eventid; - (void)in_isr; +TU_ATTR_WEAK void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr) { + (void) rhport; + (void) eventid; + (void) in_isr; } -TU_ATTR_WEAK void tud_sof_cb(uint32_t frame_count) -{ - (void)frame_count; +TU_ATTR_WEAK void tud_sof_cb(uint32_t frame_count) { + (void) frame_count; } -TU_ATTR_WEAK uint8_t const *tud_descriptor_bos_cb(void) -{ - return NULL; +TU_ATTR_WEAK uint8_t const* tud_descriptor_bos_cb(void) { + return NULL; } -TU_ATTR_WEAK uint8_t const *tud_descriptor_device_qualifier_cb(void) -{ - return NULL; +TU_ATTR_WEAK uint8_t const* tud_descriptor_device_qualifier_cb(void) { + return NULL; } -TU_ATTR_WEAK uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index) -{ - (void)index; - return NULL; +TU_ATTR_WEAK uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index) { + (void) index; + return NULL; } -TU_ATTR_WEAK void tud_mount_cb(void) {} +TU_ATTR_WEAK void tud_mount_cb(void) { +} -TU_ATTR_WEAK void tud_umount_cb(void) {} +TU_ATTR_WEAK void tud_umount_cb(void) { +} -TU_ATTR_WEAK void tud_suspend_cb(bool remote_wakeup_en) -{ - (void)remote_wakeup_en; +TU_ATTR_WEAK void tud_suspend_cb(bool remote_wakeup_en) { + (void) remote_wakeup_en; } -TU_ATTR_WEAK void tud_resume_cb(void) {} +TU_ATTR_WEAK void tud_resume_cb(void) { +} -TU_ATTR_WEAK bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request) -{ - (void)rhport; - (void)stage; - (void)request; - return false; +TU_ATTR_WEAK bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const* request) { + (void) rhport; + (void) stage; + (void) request; + return false; } -TU_ATTR_WEAK bool dcd_deinit(uint8_t rhport) -{ - (void)rhport; - return false; +TU_ATTR_WEAK bool dcd_deinit(uint8_t rhport) { + (void) rhport; + return false; } -TU_ATTR_WEAK void dcd_connect(uint8_t rhport) -{ - (void)rhport; +TU_ATTR_WEAK void dcd_connect(uint8_t rhport) { + (void) rhport; } -TU_ATTR_WEAK void dcd_disconnect(uint8_t rhport) -{ - (void)rhport; +TU_ATTR_WEAK void dcd_disconnect(uint8_t rhport) { + (void) rhport; } //--------------------------------------------------------------------+ @@ -117,26 +109,25 @@ TU_ATTR_WEAK void dcd_disconnect(uint8_t rhport) enum { DRVID_INVALID = 0xFFu }; typedef struct { - struct TU_ATTR_PACKED { - volatile uint8_t connected : 1; - volatile uint8_t addressed : 1; - volatile uint8_t suspended : 1; + struct TU_ATTR_PACKED { + volatile uint8_t connected : 1; + volatile uint8_t addressed : 1; + volatile uint8_t suspended : 1; - uint8_t remote_wakeup_en : 1; // enable/disable by host - uint8_t remote_wakeup_support : 1; // configuration descriptor's attribute - uint8_t self_powered : 1; // configuration descriptor's attribute - }; - volatile uint8_t cfg_num; // current active configuration (0x00 is not configured) - uint8_t speed; - volatile uint8_t sof_consumer; + uint8_t remote_wakeup_en : 1; // enable/disable by host + uint8_t remote_wakeup_support : 1; // configuration descriptor's attribute + uint8_t self_powered : 1; // configuration descriptor's attribute + }; + volatile uint8_t cfg_num; // current active configuration (0x00 is not configured) + uint8_t speed; + volatile uint8_t sof_consumer; - uint8_t itf2drv[CFG_TUD_INTERFACE_MAX]; // map interface number to driver (0xff is invalid) - uint8_t ep2drv[CFG_TUD_ENDPPOINT_MAX] - [2]; // map endpoint to driver ( 0xff is invalid ), can use only 4-bit each + uint8_t itf2drv[CFG_TUD_INTERFACE_MAX]; // map interface number to driver (0xff is invalid) + uint8_t ep2drv[CFG_TUD_ENDPPOINT_MAX][2]; // map endpoint to driver ( 0xff is invalid ), can use only 4-bit each - tu_edpt_state_t ep_status[CFG_TUD_ENDPPOINT_MAX][2]; + tu_edpt_state_t ep_status[CFG_TUD_ENDPPOINT_MAX][2]; -} usbd_device_t; +}usbd_device_t; tu_static usbd_device_t _usbd_dev; static volatile uint8_t _usbd_queued_setup; @@ -145,170 +136,192 @@ static volatile uint8_t _usbd_queued_setup; // Class Driver //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL -#define DRIVER_NAME(_name) _name + #define DRIVER_NAME(_name) _name #else -#define DRIVER_NAME(_name) NULL + #define DRIVER_NAME(_name) NULL #endif // Built-in class drivers tu_static usbd_class_driver_t const _usbd_driver[] = { -#if CFG_TUD_CDC - { .name = DRIVER_NAME("CDC"), - .init = cdcd_init, - .deinit = cdcd_deinit, - .reset = cdcd_reset, - .open = cdcd_open, - .control_xfer_cb = cdcd_control_xfer_cb, - .xfer_cb = cdcd_xfer_cb, - .sof = NULL }, -#endif + #if CFG_TUD_CDC + { + .name = DRIVER_NAME("CDC"), + .init = cdcd_init, + .deinit = cdcd_deinit, + .reset = cdcd_reset, + .open = cdcd_open, + .control_xfer_cb = cdcd_control_xfer_cb, + .xfer_cb = cdcd_xfer_cb, + .sof = NULL + }, + #endif -#if CFG_TUD_MSC - { .name = DRIVER_NAME("MSC"), - .init = mscd_init, - .deinit = NULL, - .reset = mscd_reset, - .open = mscd_open, - .control_xfer_cb = mscd_control_xfer_cb, - .xfer_cb = mscd_xfer_cb, - .sof = NULL }, -#endif + #if CFG_TUD_MSC + { + .name = DRIVER_NAME("MSC"), + .init = mscd_init, + .deinit = NULL, + .reset = mscd_reset, + .open = mscd_open, + .control_xfer_cb = mscd_control_xfer_cb, + .xfer_cb = mscd_xfer_cb, + .sof = NULL + }, + #endif -#if CFG_TUD_HID - { .name = DRIVER_NAME("HID"), - .init = hidd_init, - .deinit = hidd_deinit, - .reset = hidd_reset, - .open = hidd_open, - .control_xfer_cb = hidd_control_xfer_cb, - .xfer_cb = hidd_xfer_cb, - .sof = NULL }, -#endif + #if CFG_TUD_HID + { + .name = DRIVER_NAME("HID"), + .init = hidd_init, + .deinit = hidd_deinit, + .reset = hidd_reset, + .open = hidd_open, + .control_xfer_cb = hidd_control_xfer_cb, + .xfer_cb = hidd_xfer_cb, + .sof = NULL + }, + #endif -#if CFG_TUD_AUDIO - { .name = DRIVER_NAME("AUDIO"), - .init = audiod_init, - .deinit = audiod_deinit, - .reset = audiod_reset, - .open = audiod_open, - .control_xfer_cb = audiod_control_xfer_cb, - .xfer_cb = audiod_xfer_cb, - .sof = audiod_sof_isr }, -#endif + #if CFG_TUD_AUDIO + { + .name = DRIVER_NAME("AUDIO"), + .init = audiod_init, + .deinit = audiod_deinit, + .reset = audiod_reset, + .open = audiod_open, + .control_xfer_cb = audiod_control_xfer_cb, + .xfer_cb = audiod_xfer_cb, + .sof = audiod_sof_isr + }, + #endif -#if CFG_TUD_VIDEO - { .name = DRIVER_NAME("VIDEO"), - .init = videod_init, - .deinit = videod_deinit, - .reset = videod_reset, - .open = videod_open, - .control_xfer_cb = videod_control_xfer_cb, - .xfer_cb = videod_xfer_cb, - .sof = NULL }, -#endif + #if CFG_TUD_VIDEO + { + .name = DRIVER_NAME("VIDEO"), + .init = videod_init, + .deinit = videod_deinit, + .reset = videod_reset, + .open = videod_open, + .control_xfer_cb = videod_control_xfer_cb, + .xfer_cb = videod_xfer_cb, + .sof = NULL + }, + #endif -#if CFG_TUD_MIDI - { .name = DRIVER_NAME("MIDI"), - .init = midid_init, - .deinit = midid_deinit, - .open = midid_open, - .reset = midid_reset, - .control_xfer_cb = midid_control_xfer_cb, - .xfer_cb = midid_xfer_cb, - .sof = NULL }, -#endif + #if CFG_TUD_MIDI + { + .name = DRIVER_NAME("MIDI"), + .init = midid_init, + .deinit = midid_deinit, + .open = midid_open, + .reset = midid_reset, + .control_xfer_cb = midid_control_xfer_cb, + .xfer_cb = midid_xfer_cb, + .sof = NULL + }, + #endif -#if CFG_TUD_VENDOR - { .name = DRIVER_NAME("VENDOR"), - .init = vendord_init, - .deinit = vendord_deinit, - .reset = vendord_reset, - .open = vendord_open, - .control_xfer_cb = tud_vendor_control_xfer_cb, - .xfer_cb = vendord_xfer_cb, - .sof = NULL }, -#endif + #if CFG_TUD_VENDOR + { + .name = DRIVER_NAME("VENDOR"), + .init = vendord_init, + .deinit = vendord_deinit, + .reset = vendord_reset, + .open = vendord_open, + .control_xfer_cb = tud_vendor_control_xfer_cb, + .xfer_cb = vendord_xfer_cb, + .sof = NULL + }, + #endif -#if CFG_TUD_USBTMC - { .name = DRIVER_NAME("TMC"), - .init = usbtmcd_init_cb, - .deinit = usbtmcd_deinit, - .reset = usbtmcd_reset_cb, - .open = usbtmcd_open_cb, - .control_xfer_cb = usbtmcd_control_xfer_cb, - .xfer_cb = usbtmcd_xfer_cb, - .sof = NULL }, -#endif + #if CFG_TUD_USBTMC + { + .name = DRIVER_NAME("TMC"), + .init = usbtmcd_init_cb, + .deinit = usbtmcd_deinit, + .reset = usbtmcd_reset_cb, + .open = usbtmcd_open_cb, + .control_xfer_cb = usbtmcd_control_xfer_cb, + .xfer_cb = usbtmcd_xfer_cb, + .sof = NULL + }, + #endif -#if CFG_TUD_DFU_RUNTIME - { .name = DRIVER_NAME("DFU-RUNTIME"), - .init = dfu_rtd_init, - .deinit = dfu_rtd_deinit, - .reset = dfu_rtd_reset, - .open = dfu_rtd_open, - .control_xfer_cb = dfu_rtd_control_xfer_cb, - .xfer_cb = NULL, - .sof = NULL }, -#endif + #if CFG_TUD_DFU_RUNTIME + { + .name = DRIVER_NAME("DFU-RUNTIME"), + .init = dfu_rtd_init, + .deinit = dfu_rtd_deinit, + .reset = dfu_rtd_reset, + .open = dfu_rtd_open, + .control_xfer_cb = dfu_rtd_control_xfer_cb, + .xfer_cb = NULL, + .sof = NULL + }, + #endif -#if CFG_TUD_DFU - { .name = DRIVER_NAME("DFU"), - .init = dfu_moded_init, - .deinit = dfu_moded_deinit, - .reset = dfu_moded_reset, - .open = dfu_moded_open, - .control_xfer_cb = dfu_moded_control_xfer_cb, - .xfer_cb = NULL, - .sof = NULL }, -#endif + #if CFG_TUD_DFU + { + .name = DRIVER_NAME("DFU"), + .init = dfu_moded_init, + .deinit = dfu_moded_deinit, + .reset = dfu_moded_reset, + .open = dfu_moded_open, + .control_xfer_cb = dfu_moded_control_xfer_cb, + .xfer_cb = NULL, + .sof = NULL + }, + #endif -#if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM + #if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM { - .name = DRIVER_NAME("NET"), - .init = netd_init, - .deinit = netd_deinit, - .reset = netd_reset, - .open = netd_open, - .control_xfer_cb = netd_control_xfer_cb, - .xfer_cb = netd_xfer_cb, - .sof = NULL, + .name = DRIVER_NAME("NET"), + .init = netd_init, + .deinit = netd_deinit, + .reset = netd_reset, + .open = netd_open, + .control_xfer_cb = netd_control_xfer_cb, + .xfer_cb = netd_xfer_cb, + .sof = NULL, }, -#endif + #endif -#if CFG_TUD_BTH - { .name = DRIVER_NAME("BTH"), - .init = btd_init, - .deinit = btd_deinit, - .reset = btd_reset, - .open = btd_open, - .control_xfer_cb = btd_control_xfer_cb, - .xfer_cb = btd_xfer_cb, - .sof = NULL }, -#endif + #if CFG_TUD_BTH + { + .name = DRIVER_NAME("BTH"), + .init = btd_init, + .deinit = btd_deinit, + .reset = btd_reset, + .open = btd_open, + .control_xfer_cb = btd_control_xfer_cb, + .xfer_cb = btd_xfer_cb, + .sof = NULL + }, + #endif }; enum { BUILTIN_DRIVER_COUNT = TU_ARRAY_SIZE(_usbd_driver) }; // Additional class drivers implemented by application -tu_static usbd_class_driver_t const *_app_driver = NULL; +tu_static usbd_class_driver_t const * _app_driver = NULL; tu_static uint8_t _app_driver_count = 0; -#define TOTAL_DRIVER_COUNT (_app_driver_count + BUILTIN_DRIVER_COUNT) +#define TOTAL_DRIVER_COUNT (_app_driver_count + BUILTIN_DRIVER_COUNT) // virtually joins built-in and application drivers together. // Application is positioned first to allow overwriting built-in ones. -TU_ATTR_ALWAYS_INLINE static inline usbd_class_driver_t const *get_driver(uint8_t drvid) -{ - usbd_class_driver_t const *driver = NULL; - if (drvid < _app_driver_count) { - // Application drivers - driver = &_app_driver[drvid]; - } else if (drvid < TOTAL_DRIVER_COUNT && BUILTIN_DRIVER_COUNT > 0) { - driver = &_usbd_driver[drvid - _app_driver_count]; - } - return driver; +TU_ATTR_ALWAYS_INLINE static inline usbd_class_driver_t const * get_driver(uint8_t drvid) { + usbd_class_driver_t const * driver = NULL; + if ( drvid < _app_driver_count ) { + // Application drivers + driver = &_app_driver[drvid]; + } else if ( drvid < TOTAL_DRIVER_COUNT && BUILTIN_DRIVER_COUNT > 0 ){ + driver = &_usbd_driver[drvid - _app_driver_count]; + } + return driver; } + //--------------------------------------------------------------------+ // DCD Event //--------------------------------------------------------------------+ @@ -323,64 +336,67 @@ tu_static osal_queue_t _usbd_q; // Mutex for claiming endpoint #if OSAL_MUTEX_REQUIRED -tu_static osal_mutex_def_t _ubsd_mutexdef; -tu_static osal_mutex_t _usbd_mutex; + tu_static osal_mutex_def_t _ubsd_mutexdef; + tu_static osal_mutex_t _usbd_mutex; #else -#define _usbd_mutex NULL + #define _usbd_mutex NULL #endif -TU_ATTR_ALWAYS_INLINE static inline bool queue_event(dcd_event_t const *event, bool in_isr) -{ - TU_ASSERT(osal_queue_send(_usbd_q, event, in_isr)); - tud_event_hook_cb(event->rhport, event->event_id, in_isr); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool queue_event(dcd_event_t const * event, bool in_isr) { + TU_ASSERT(osal_queue_send(_usbd_q, event, in_isr)); + tud_event_hook_cb(event->rhport, event->event_id, in_isr); + return true; } //--------------------------------------------------------------------+ // Prototypes //--------------------------------------------------------------------+ -static bool process_control_request(uint8_t rhport, tusb_control_request_t const *p_request); +static bool process_control_request(uint8_t rhport, tusb_control_request_t const * p_request); static bool process_set_config(uint8_t rhport, uint8_t cfg_num); -static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const *p_request); +static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const * p_request); #if CFG_TUD_TEST_MODE -static bool process_test_mode_cb(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request) -{ - TU_VERIFY(CONTROL_STAGE_ACK == stage); - uint8_t const selector = tu_u16_high(request->wIndex); - TU_LOG_USBD(" Enter Test Mode (test selector index: %d)\r\n", selector); - dcd_enter_test_mode(rhport, (tusb_feature_test_mode_t)selector); - return true; +static bool process_test_mode_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { + TU_VERIFY(CONTROL_STAGE_ACK == stage); + uint8_t const selector = tu_u16_high(request->wIndex); + TU_LOG_USBD(" Enter Test Mode (test selector index: %d)\r\n", selector); + dcd_enter_test_mode(rhport, (tusb_feature_test_mode_t) selector); + return true; } #endif // from usbd_control.c void usbd_control_reset(void); void usbd_control_set_request(tusb_control_request_t const *request); -void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp); -bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, - uint32_t xferred_bytes); +void usbd_control_set_complete_callback( usbd_control_xfer_cb_t fp ); +bool usbd_control_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); + //--------------------------------------------------------------------+ // Debug //--------------------------------------------------------------------+ #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL -tu_static char const *const _usbd_event_str[DCD_EVENT_COUNT] = { - "Invalid", "Bus Reset", "Unplugged", "SOF", "Suspend", - "Resume", "Setup Received", "Xfer Complete", "Func Call" +tu_static char const* const _usbd_event_str[DCD_EVENT_COUNT] = { + "Invalid", + "Bus Reset", + "Unplugged", + "SOF", + "Suspend", + "Resume", + "Setup Received", + "Xfer Complete", + "Func Call" }; // for usbd_control to print the name of control complete driver -void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback) -{ - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const *driver = get_driver(i); - if (driver && driver->control_xfer_cb == callback) { - TU_LOG_USBD("%s control complete\r\n", driver->name); - return; - } +void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback) { + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const* driver = get_driver(i); + if (driver && driver->control_xfer_cb == callback) { + TU_LOG_USBD("%s control complete\r\n", driver->name); + return; } + } } #endif @@ -388,168 +404,151 @@ void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback) //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ -tusb_speed_t tud_speed_get(void) -{ - return (tusb_speed_t)_usbd_dev.speed; +tusb_speed_t tud_speed_get(void) { + return (tusb_speed_t) _usbd_dev.speed; } -bool tud_connected(void) -{ - return _usbd_dev.connected; +bool tud_connected(void) { + return _usbd_dev.connected; } -bool tud_mounted(void) -{ - return _usbd_dev.cfg_num ? true : false; +bool tud_mounted(void) { + return _usbd_dev.cfg_num ? true : false; } -bool tud_suspended(void) -{ - return _usbd_dev.suspended; +bool tud_suspended(void) { + return _usbd_dev.suspended; } -bool tud_remote_wakeup(void) -{ - // only wake up host if this feature is supported and enabled and we are suspended - TU_VERIFY(_usbd_dev.suspended && _usbd_dev.remote_wakeup_support && _usbd_dev.remote_wakeup_en); - dcd_remote_wakeup(_usbd_rhport); - return true; +bool tud_remote_wakeup(void) { + // only wake up host if this feature is supported and enabled and we are suspended + TU_VERIFY (_usbd_dev.suspended && _usbd_dev.remote_wakeup_support && _usbd_dev.remote_wakeup_en); + dcd_remote_wakeup(_usbd_rhport); + return true; } -bool tud_disconnect(void) -{ - dcd_disconnect(_usbd_rhport); - return true; +bool tud_disconnect(void) { + dcd_disconnect(_usbd_rhport); + return true; } -bool tud_connect(void) -{ - dcd_connect(_usbd_rhport); - return true; +bool tud_connect(void) { + dcd_connect(_usbd_rhport); + return true; } -void tud_sof_cb_enable(bool en) -{ - usbd_sof_enable(_usbd_rhport, SOF_CONSUMER_USER, en); +void tud_sof_cb_enable(bool en) { + usbd_sof_enable(_usbd_rhport, SOF_CONSUMER_USER, en); } //--------------------------------------------------------------------+ // USBD Task //--------------------------------------------------------------------+ -bool tud_inited(void) -{ - return _usbd_rhport != RHPORT_INVALID; +bool tud_inited(void) { + return _usbd_rhport != RHPORT_INVALID; } -bool tud_init(uint8_t rhport) -{ - // skip if already initialized - if (tud_inited()) - return true; +bool tud_init(uint8_t rhport) { + // skip if already initialized + if (tud_inited()) return true; - TU_LOG_USBD("USBD init on controller %u, Highspeed = %u\r\n", rhport, TUD_OPT_HIGH_SPEED); - TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(usbd_device_t)); - TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(dcd_event_t)); - TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_fifo_t)); - TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_edpt_stream_t)); + TU_LOG_USBD("USBD init on controller %u, Highspeed = %u\r\n", rhport, TUD_OPT_HIGH_SPEED); + TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(usbd_device_t)); + TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(dcd_event_t)); + TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_fifo_t)); + TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_edpt_stream_t)); - tu_varclr(&_usbd_dev); - _usbd_queued_setup = 0; + tu_varclr(&_usbd_dev); + _usbd_queued_setup = 0; #if OSAL_MUTEX_REQUIRED - // Init device mutex - _usbd_mutex = osal_mutex_create(&_ubsd_mutexdef); - TU_ASSERT(_usbd_mutex); + // Init device mutex + _usbd_mutex = osal_mutex_create(&_ubsd_mutexdef); + TU_ASSERT(_usbd_mutex); #endif - // Init device queue & task - _usbd_q = osal_queue_create(&_usbd_qdef); - TU_ASSERT(_usbd_q); + // Init device queue & task + _usbd_q = osal_queue_create(&_usbd_qdef); + TU_ASSERT(_usbd_q); - // Get application driver if available - if (usbd_app_driver_get_cb) { - _app_driver = usbd_app_driver_get_cb(&_app_driver_count); - } + // Get application driver if available + if (usbd_app_driver_get_cb) { + _app_driver = usbd_app_driver_get_cb(&_app_driver_count); + } - // Init class drivers - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const *driver = get_driver(i); - TU_ASSERT(driver && driver->init); - TU_LOG_USBD("%s init\r\n", driver->name); - driver->init(); - } + // Init class drivers + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const* driver = get_driver(i); + TU_ASSERT(driver && driver->init); + TU_LOG_USBD("%s init\r\n", driver->name); + driver->init(); + } - _usbd_rhport = rhport; + _usbd_rhport = rhport; - // Init device controller driver - dcd_init(rhport); - dcd_int_enable(rhport); + // Init device controller driver + dcd_init(rhport); + dcd_int_enable(rhport); - return true; + return true; } -bool tud_deinit(uint8_t rhport) -{ - // skip if not initialized - if (!tud_inited()) - return true; - - TU_LOG_USBD("USBD deinit on controller %u\r\n", rhport); - - // Deinit device controller driver - dcd_int_disable(rhport); - dcd_disconnect(rhport); - dcd_deinit(rhport); - - // Deinit class drivers - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const *driver = get_driver(i); - if (driver && driver->deinit) { - TU_LOG_USBD("%s deinit\r\n", driver->name); - driver->deinit(); - } +bool tud_deinit(uint8_t rhport) { + // skip if not initialized + if (!tud_inited()) return true; + + TU_LOG_USBD("USBD deinit on controller %u\r\n", rhport); + + // Deinit device controller driver + dcd_int_disable(rhport); + dcd_disconnect(rhport); + dcd_deinit(rhport); + + // Deinit class drivers + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const* driver = get_driver(i); + if(driver && driver->deinit) { + TU_LOG_USBD("%s deinit\r\n", driver->name); + driver->deinit(); } + } - // Deinit device queue & task - osal_queue_delete(_usbd_q); - _usbd_q = NULL; + // Deinit device queue & task + osal_queue_delete(_usbd_q); + _usbd_q = NULL; #if OSAL_MUTEX_REQUIRED - // TODO make sure there is no task waiting on this mutex - osal_mutex_delete(_usbd_mutex); - _usbd_mutex = NULL; + // TODO make sure there is no task waiting on this mutex + osal_mutex_delete(_usbd_mutex); + _usbd_mutex = NULL; #endif - _usbd_rhport = RHPORT_INVALID; + _usbd_rhport = RHPORT_INVALID; - return true; + return true; } -static void configuration_reset(uint8_t rhport) -{ - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const *driver = get_driver(i); - TU_ASSERT(driver, ); - driver->reset(rhport); - } +static void configuration_reset(uint8_t rhport) { + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const* driver = get_driver(i); + TU_ASSERT(driver,); + driver->reset(rhport); + } - tu_varclr(&_usbd_dev); - memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping - memset(_usbd_dev.ep2drv, DRVID_INVALID, sizeof(_usbd_dev.ep2drv)); // invalid mapping + tu_varclr(&_usbd_dev); + memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping + memset(_usbd_dev.ep2drv, DRVID_INVALID, sizeof(_usbd_dev.ep2drv)); // invalid mapping } -static void usbd_reset(uint8_t rhport) -{ - configuration_reset(rhport); - usbd_control_reset(); +static void usbd_reset(uint8_t rhport) { + configuration_reset(rhport); + usbd_control_reset(); } -bool tud_task_event_ready(void) -{ - // Skip if stack is not initialized - if (!tud_inited()) - return false; - return !osal_queue_empty(_usbd_q); +bool tud_task_event_ready(void) { + // Skip if stack is not initialized + if (!tud_inited()) return false; + return !osal_queue_empty(_usbd_q); } /* USB Device Driver task @@ -566,140 +565,130 @@ bool tud_task_event_ready(void) } } */ -void tud_task_ext(uint32_t timeout_ms, bool in_isr) -{ - (void)in_isr; // not implemented yet +void tud_task_ext(uint32_t timeout_ms, bool in_isr) { + (void) in_isr; // not implemented yet - // Skip if stack is not initialized - if (!tud_inited()) - return; + // Skip if stack is not initialized + if (!tud_inited()) return; - // Loop until there is no more events in the queue - while (1) { - dcd_event_t event; - if (!osal_queue_receive(_usbd_q, &event, timeout_ms)) - return; + // Loop until there is no more events in the queue + while (1) { + dcd_event_t event; + if (!osal_queue_receive(_usbd_q, &event, timeout_ms)) return; #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL - if (event.event_id == DCD_EVENT_SETUP_RECEIVED) - TU_LOG_USBD("\r\n"); // extra line for setup - TU_LOG_USBD("USBD %s ", event.event_id < DCD_EVENT_COUNT ? _usbd_event_str[event.event_id] : - "CORRUPTED"); + if (event.event_id == DCD_EVENT_SETUP_RECEIVED) TU_LOG_USBD("\r\n"); // extra line for setup + TU_LOG_USBD("USBD %s ", event.event_id < DCD_EVENT_COUNT ? _usbd_event_str[event.event_id] : "CORRUPTED"); #endif - switch (event.event_id) { - case DCD_EVENT_BUS_RESET: - TU_LOG_USBD(": %s Speed\r\n", tu_str_speed[event.bus_reset.speed]); - usbd_reset(event.rhport); - _usbd_dev.speed = event.bus_reset.speed; - break; + switch (event.event_id) { + case DCD_EVENT_BUS_RESET: + TU_LOG_USBD(": %s Speed\r\n", tu_str_speed[event.bus_reset.speed]); + usbd_reset(event.rhport); + _usbd_dev.speed = event.bus_reset.speed; + break; - case DCD_EVENT_UNPLUGGED: - TU_LOG_USBD("\r\n"); - usbd_reset(event.rhport); - tud_umount_cb(); - break; + case DCD_EVENT_UNPLUGGED: + TU_LOG_USBD("\r\n"); + usbd_reset(event.rhport); + tud_umount_cb(); + break; - case DCD_EVENT_SETUP_RECEIVED: - TU_ASSERT(_usbd_queued_setup > 0, ); - _usbd_queued_setup--; - TU_LOG_BUF(CFG_TUD_LOG_LEVEL, &event.setup_received, 8); - if (_usbd_queued_setup) { - TU_LOG_USBD(" Skipped since there is other SETUP in queue\r\n"); - break; - } + case DCD_EVENT_SETUP_RECEIVED: + TU_ASSERT(_usbd_queued_setup > 0,); + _usbd_queued_setup--; + TU_LOG_BUF(CFG_TUD_LOG_LEVEL, &event.setup_received, 8); + if (_usbd_queued_setup) { + TU_LOG_USBD(" Skipped since there is other SETUP in queue\r\n"); + break; + } - // Mark as connected after receiving 1st setup packet. - // But it is easier to set it every time instead of wasting time to check then set - _usbd_dev.connected = 1; - - // mark both in & out control as free - _usbd_dev.ep_status[0][TUSB_DIR_OUT].busy = 0; - _usbd_dev.ep_status[0][TUSB_DIR_OUT].claimed = 0; - _usbd_dev.ep_status[0][TUSB_DIR_IN].busy = 0; - _usbd_dev.ep_status[0][TUSB_DIR_IN].claimed = 0; - - // Process control request - if (!process_control_request(event.rhport, &event.setup_received)) { - TU_LOG_USBD(" Stall EP0\r\n"); - // Failed -> stall both control endpoint IN and OUT - dcd_edpt_stall(event.rhport, 0); - dcd_edpt_stall(event.rhport, 0 | TUSB_DIR_IN_MASK); - } - break; + // Mark as connected after receiving 1st setup packet. + // But it is easier to set it every time instead of wasting time to check then set + _usbd_dev.connected = 1; + + // mark both in & out control as free + _usbd_dev.ep_status[0][TUSB_DIR_OUT].busy = 0; + _usbd_dev.ep_status[0][TUSB_DIR_OUT].claimed = 0; + _usbd_dev.ep_status[0][TUSB_DIR_IN].busy = 0; + _usbd_dev.ep_status[0][TUSB_DIR_IN].claimed = 0; + + // Process control request + if (!process_control_request(event.rhport, &event.setup_received)) { + TU_LOG_USBD(" Stall EP0\r\n"); + // Failed -> stall both control endpoint IN and OUT + dcd_edpt_stall(event.rhport, 0); + dcd_edpt_stall(event.rhport, 0 | TUSB_DIR_IN_MASK); + } + break; - case DCD_EVENT_XFER_COMPLETE: { - // Invoke the class callback associated with the endpoint address - uint8_t const ep_addr = event.xfer_complete.ep_addr; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const ep_dir = tu_edpt_dir(ep_addr); + case DCD_EVENT_XFER_COMPLETE: { + // Invoke the class callback associated with the endpoint address + uint8_t const ep_addr = event.xfer_complete.ep_addr; + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const ep_dir = tu_edpt_dir(ep_addr); - TU_LOG_USBD("on EP %02X with %u bytes\r\n", ep_addr, - (unsigned int)event.xfer_complete.len); + TU_LOG_USBD("on EP %02X with %u bytes\r\n", ep_addr, (unsigned int) event.xfer_complete.len); - _usbd_dev.ep_status[epnum][ep_dir].busy = 0; - _usbd_dev.ep_status[epnum][ep_dir].claimed = 0; + _usbd_dev.ep_status[epnum][ep_dir].busy = 0; + _usbd_dev.ep_status[epnum][ep_dir].claimed = 0; - if (0 == epnum) { - usbd_control_xfer_cb(event.rhport, ep_addr, - (xfer_result_t)event.xfer_complete.result, - event.xfer_complete.len); - } else { - usbd_class_driver_t const *driver = get_driver(_usbd_dev.ep2drv[epnum][ep_dir]); - TU_ASSERT(driver, ); + if (0 == epnum) { + usbd_control_xfer_cb(event.rhport, ep_addr, (xfer_result_t) event.xfer_complete.result, + event.xfer_complete.len); + } else { + usbd_class_driver_t const* driver = get_driver(_usbd_dev.ep2drv[epnum][ep_dir]); + TU_ASSERT(driver,); - TU_LOG_USBD(" %s xfer callback\r\n", driver->name); - driver->xfer_cb(event.rhport, ep_addr, (xfer_result_t)event.xfer_complete.result, - event.xfer_complete.len); - } - break; + TU_LOG_USBD(" %s xfer callback\r\n", driver->name); + driver->xfer_cb(event.rhport, ep_addr, (xfer_result_t) event.xfer_complete.result, event.xfer_complete.len); } + break; + } - case DCD_EVENT_SUSPEND: - // NOTE: When plugging/unplugging device, the D+/D- state are unstable and - // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ), which result in a series of event - // e.g suspend -> resume -> unplug/plug. Skip suspend/resume if not connected - if (_usbd_dev.connected) { - TU_LOG_USBD(": Remote Wakeup = %u\r\n", _usbd_dev.remote_wakeup_en); - tud_suspend_cb(_usbd_dev.remote_wakeup_en); - } else { - TU_LOG_USBD(" Skipped\r\n"); - } - break; - - case DCD_EVENT_RESUME: - if (_usbd_dev.connected) { - TU_LOG_USBD("\r\n"); - tud_resume_cb(); - } else { - TU_LOG_USBD(" Skipped\r\n"); - } - break; + case DCD_EVENT_SUSPEND: + // NOTE: When plugging/unplugging device, the D+/D- state are unstable and + // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ), which result in a series of event + // e.g suspend -> resume -> unplug/plug. Skip suspend/resume if not connected + if (_usbd_dev.connected) { + TU_LOG_USBD(": Remote Wakeup = %u\r\n", _usbd_dev.remote_wakeup_en); + tud_suspend_cb(_usbd_dev.remote_wakeup_en); + } else { + TU_LOG_USBD(" Skipped\r\n"); + } + break; - case USBD_EVENT_FUNC_CALL: - TU_LOG_USBD("\r\n"); - if (event.func_call.func) - event.func_call.func(event.func_call.param); - break; + case DCD_EVENT_RESUME: + if (_usbd_dev.connected) { + TU_LOG_USBD("\r\n"); + tud_resume_cb(); + } else { + TU_LOG_USBD(" Skipped\r\n"); + } + break; - case DCD_EVENT_SOF: - if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { - TU_LOG_USBD("\r\n"); - tud_sof_cb(event.sof.frame_count); - } - break; + case USBD_EVENT_FUNC_CALL: + TU_LOG_USBD("\r\n"); + if (event.func_call.func) event.func_call.func(event.func_call.param); + break; - default: - TU_BREAKPOINT(); - break; + case DCD_EVENT_SOF: + if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { + TU_LOG_USBD("\r\n"); + tud_sof_cb(event.sof.frame_count); } + break; + + default: + TU_BREAKPOINT(); + break; + } #if CFG_TUSB_OS != OPT_OS_NONE && CFG_TUSB_OS != OPT_OS_PICO - // return if there is no more events, for application to run other background - if (osal_queue_empty(_usbd_q)) - return; + // return if there is no more events, for application to run other background + if (osal_queue_empty(_usbd_q)) return; #endif - } + } } //--------------------------------------------------------------------+ @@ -707,540 +696,523 @@ void tud_task_ext(uint32_t timeout_ms, bool in_isr) //--------------------------------------------------------------------+ // Helper to invoke class driver control request handler -static bool invoke_class_control(uint8_t rhport, usbd_class_driver_t const *driver, - tusb_control_request_t const *request) -{ - usbd_control_set_complete_callback(driver->control_xfer_cb); - TU_LOG_USBD(" %s control request\r\n", driver->name); - return driver->control_xfer_cb(rhport, CONTROL_STAGE_SETUP, request); +static bool invoke_class_control(uint8_t rhport, usbd_class_driver_t const * driver, tusb_control_request_t const * request) { + usbd_control_set_complete_callback(driver->control_xfer_cb); + TU_LOG_USBD(" %s control request\r\n", driver->name); + return driver->control_xfer_cb(rhport, CONTROL_STAGE_SETUP, request); } // This handles the actual request and its response. // Returns false if unable to complete the request, causing caller to stall control endpoints. -static bool process_control_request(uint8_t rhport, tusb_control_request_t const *p_request) -{ - usbd_control_set_complete_callback(NULL); - TU_ASSERT(p_request->bmRequestType_bit.type < TUSB_REQ_TYPE_INVALID); +static bool process_control_request(uint8_t rhport, tusb_control_request_t const * p_request) { + usbd_control_set_complete_callback(NULL); + TU_ASSERT(p_request->bmRequestType_bit.type < TUSB_REQ_TYPE_INVALID); - // Vendor request - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_VENDOR) { - usbd_control_set_complete_callback(tud_vendor_control_xfer_cb); - return tud_vendor_control_xfer_cb(rhport, CONTROL_STAGE_SETUP, p_request); - } + // Vendor request + if ( p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_VENDOR ) { + usbd_control_set_complete_callback(tud_vendor_control_xfer_cb); + return tud_vendor_control_xfer_cb(rhport, CONTROL_STAGE_SETUP, p_request); + } #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL - if (TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type && - p_request->bRequest <= TUSB_REQ_SYNCH_FRAME) { - TU_LOG_USBD(" %s", tu_str_std_request[p_request->bRequest]); - if (TUSB_REQ_GET_DESCRIPTOR != p_request->bRequest) - TU_LOG_USBD("\r\n"); - } + if (TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type && p_request->bRequest <= TUSB_REQ_SYNCH_FRAME) { + TU_LOG_USBD(" %s", tu_str_std_request[p_request->bRequest]); + if (TUSB_REQ_GET_DESCRIPTOR != p_request->bRequest) TU_LOG_USBD("\r\n"); + } #endif - switch (p_request->bmRequestType_bit.recipient) { + switch ( p_request->bmRequestType_bit.recipient ) { //------------- Device Requests e.g in enumeration -------------// case TUSB_REQ_RCPT_DEVICE: - if (TUSB_REQ_TYPE_CLASS == p_request->bmRequestType_bit.type) { - uint8_t const itf = tu_u16_low(p_request->wIndex); - TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); + if ( TUSB_REQ_TYPE_CLASS == p_request->bmRequestType_bit.type ) { + uint8_t const itf = tu_u16_low(p_request->wIndex); + TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); - usbd_class_driver_t const *driver = get_driver(_usbd_dev.itf2drv[itf]); - TU_VERIFY(driver); + usbd_class_driver_t const * driver = get_driver(_usbd_dev.itf2drv[itf]); + TU_VERIFY(driver); - // forward to class driver: "non-STD request to Interface" - return invoke_class_control(rhport, driver, p_request); - } + // forward to class driver: "non-STD request to Interface" + return invoke_class_control(rhport, driver, p_request); + } - if (TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type) { - // Non-standard request is not supported - TU_BREAKPOINT(); - return false; - } + if ( TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type ) { + // Non-standard request is not supported + TU_BREAKPOINT(); + return false; + } - switch (p_request->bRequest) { + switch ( p_request->bRequest ) { case TUSB_REQ_SET_ADDRESS: - // Depending on mcu, status phase could be sent either before or after changing device address, - // or even require stack to not response with status at all - // Therefore DCD must take full responsibility to response and include zlp status packet if needed. - usbd_control_set_request( - p_request); // set request since DCD has no access to tud_control_status() API - dcd_set_address(rhport, (uint8_t)p_request->wValue); - // skip tud_control_status() - _usbd_dev.addressed = 1; - break; + // Depending on mcu, status phase could be sent either before or after changing device address, + // or even require stack to not response with status at all + // Therefore DCD must take full responsibility to response and include zlp status packet if needed. + usbd_control_set_request(p_request); // set request since DCD has no access to tud_control_status() API + dcd_set_address(rhport, (uint8_t) p_request->wValue); + // skip tud_control_status() + _usbd_dev.addressed = 1; + break; case TUSB_REQ_GET_CONFIGURATION: { - uint8_t cfg_num = _usbd_dev.cfg_num; - tud_control_xfer(rhport, p_request, &cfg_num, 1); - } break; + uint8_t cfg_num = _usbd_dev.cfg_num; + tud_control_xfer(rhport, p_request, &cfg_num, 1); + } + break; case TUSB_REQ_SET_CONFIGURATION: { - uint8_t const cfg_num = (uint8_t)p_request->wValue; - - // Only process if new configure is different - if (_usbd_dev.cfg_num != cfg_num) { - if (_usbd_dev.cfg_num) { - // already configured: need to clear all endpoints and driver first - TU_LOG_USBD(" Clear current Configuration (%u) before switching\r\n", - _usbd_dev.cfg_num); - - // disable SOF - dcd_sof_enable(rhport, false); - - // close all non-control endpoints, cancel all pending transfers if any - dcd_edpt_close_all(rhport); - - // close all drivers and current configured state except bus speed - uint8_t const speed = _usbd_dev.speed; - configuration_reset(rhport); - - _usbd_dev.speed = speed; // restore speed - } - - _usbd_dev.cfg_num = cfg_num; - - // Handle the new configuration and execute the corresponding callback - if (cfg_num) { - // switch to new configuration if not zero - if (!process_set_config(rhport, cfg_num)) { - TU_MESS_FAILED(); - TU_BREAKPOINT(); - _usbd_dev.cfg_num = 0; - return false; - } - tud_mount_cb(); - } else { - tud_umount_cb(); - } + uint8_t const cfg_num = (uint8_t) p_request->wValue; + + // Only process if new configure is different + if (_usbd_dev.cfg_num != cfg_num) { + if ( _usbd_dev.cfg_num ) { + // already configured: need to clear all endpoints and driver first + TU_LOG_USBD(" Clear current Configuration (%u) before switching\r\n", _usbd_dev.cfg_num); + + // disable SOF + dcd_sof_enable(rhport, false); + + // close all non-control endpoints, cancel all pending transfers if any + dcd_edpt_close_all(rhport); + + // close all drivers and current configured state except bus speed + uint8_t const speed = _usbd_dev.speed; + configuration_reset(rhport); + + _usbd_dev.speed = speed; // restore speed } - tud_control_status(rhport, p_request); - } break; + _usbd_dev.cfg_num = cfg_num; + + // Handle the new configuration and execute the corresponding callback + if ( cfg_num ) { + // switch to new configuration if not zero + if (!process_set_config(rhport, cfg_num)) { + TU_MESS_FAILED(); + TU_BREAKPOINT(); + _usbd_dev.cfg_num = 0; + return false; + } + tud_mount_cb(); + } else { + tud_umount_cb(); + } + } + + tud_control_status(rhport, p_request); + } + break; case TUSB_REQ_GET_DESCRIPTOR: - TU_VERIFY(process_get_descriptor(rhport, p_request)); - break; + TU_VERIFY( process_get_descriptor(rhport, p_request) ); + break; case TUSB_REQ_SET_FEATURE: - switch (p_request->wValue) { + switch(p_request->wValue) { case TUSB_REQ_FEATURE_REMOTE_WAKEUP: - TU_LOG_USBD(" Enable Remote Wakeup\r\n"); - // Host may enable remote wake up before suspending especially HID device - _usbd_dev.remote_wakeup_en = true; - tud_control_status(rhport, p_request); - break; + TU_LOG_USBD(" Enable Remote Wakeup\r\n"); + // Host may enable remote wake up before suspending especially HID device + _usbd_dev.remote_wakeup_en = true; + tud_control_status(rhport, p_request); + break; -#if CFG_TUD_TEST_MODE + #if CFG_TUD_TEST_MODE case TUSB_REQ_FEATURE_TEST_MODE: { - // Only handle the test mode if supported and valid - TU_VERIFY(0 == tu_u16_low(p_request->wIndex)); + // Only handle the test mode if supported and valid + TU_VERIFY(0 == tu_u16_low(p_request->wIndex)); - uint8_t const selector = tu_u16_high(p_request->wIndex); - TU_VERIFY(TUSB_FEATURE_TEST_J <= selector && - selector <= TUSB_FEATURE_TEST_FORCE_ENABLE); + uint8_t const selector = tu_u16_high(p_request->wIndex); + TU_VERIFY(TUSB_FEATURE_TEST_J <= selector && selector <= TUSB_FEATURE_TEST_FORCE_ENABLE); - usbd_control_set_complete_callback(process_test_mode_cb); - tud_control_status(rhport, p_request); - break; + usbd_control_set_complete_callback(process_test_mode_cb); + tud_control_status(rhport, p_request); + break; } -#endif /* CFG_TUD_TEST_MODE */ + #endif /* CFG_TUD_TEST_MODE */ // Stall unsupported feature selector - default: - return false; - } - break; + default: return false; + } + break; case TUSB_REQ_CLEAR_FEATURE: - // Only support remote wakeup for device feature - TU_VERIFY(TUSB_REQ_FEATURE_REMOTE_WAKEUP == p_request->wValue); + // Only support remote wakeup for device feature + TU_VERIFY(TUSB_REQ_FEATURE_REMOTE_WAKEUP == p_request->wValue); - TU_LOG_USBD(" Disable Remote Wakeup\r\n"); + TU_LOG_USBD(" Disable Remote Wakeup\r\n"); - // Host may disable remote wake up after resuming - _usbd_dev.remote_wakeup_en = false; - tud_control_status(rhport, p_request); - break; + // Host may disable remote wake up after resuming + _usbd_dev.remote_wakeup_en = false; + tud_control_status(rhport, p_request); + break; case TUSB_REQ_GET_STATUS: { - // Device status bit mask - // - Bit 0: Self Powered - // - Bit 1: Remote Wakeup enabled - uint16_t status = (uint16_t)((_usbd_dev.self_powered ? 1u : 0u) | - (_usbd_dev.remote_wakeup_en ? 2u : 0u)); - tud_control_xfer(rhport, p_request, &status, 2); - break; + // Device status bit mask + // - Bit 0: Self Powered + // - Bit 1: Remote Wakeup enabled + uint16_t status = (uint16_t) ((_usbd_dev.self_powered ? 1u : 0u) | (_usbd_dev.remote_wakeup_en ? 2u : 0u)); + tud_control_xfer(rhport, p_request, &status, 2); + break; } // Unknown/Unsupported request - default: - TU_BREAKPOINT(); - return false; - } - break; + default: TU_BREAKPOINT(); return false; + } + break; //------------- Class/Interface Specific Request -------------// case TUSB_REQ_RCPT_INTERFACE: { - uint8_t const itf = tu_u16_low(p_request->wIndex); - TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); - - usbd_class_driver_t const *driver = get_driver(_usbd_dev.itf2drv[itf]); - TU_VERIFY(driver); - - // all requests to Interface (STD or Class) is forwarded to class driver. - // notable requests are: GET HID REPORT DESCRIPTOR, SET_INTERFACE, GET_INTERFACE - if (!invoke_class_control(rhport, driver, p_request)) { - // For GET_INTERFACE and SET_INTERFACE, it is mandatory to respond even if the class - // driver doesn't use alternate settings or implement this - TU_VERIFY(TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type); - - switch (p_request->bRequest) { - case TUSB_REQ_GET_INTERFACE: - case TUSB_REQ_SET_INTERFACE: - // Clear complete callback if driver set since it can also stall the request. - usbd_control_set_complete_callback(NULL); - - if (TUSB_REQ_GET_INTERFACE == p_request->bRequest) { - uint8_t alternate = 0; - tud_control_xfer(rhport, p_request, &alternate, 1); - } else { - tud_control_status(rhport, p_request); - } - break; - - default: - return false; + uint8_t const itf = tu_u16_low(p_request->wIndex); + TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv)); + + usbd_class_driver_t const * driver = get_driver(_usbd_dev.itf2drv[itf]); + TU_VERIFY(driver); + + // all requests to Interface (STD or Class) is forwarded to class driver. + // notable requests are: GET HID REPORT DESCRIPTOR, SET_INTERFACE, GET_INTERFACE + if ( !invoke_class_control(rhport, driver, p_request) ) { + // For GET_INTERFACE and SET_INTERFACE, it is mandatory to respond even if the class + // driver doesn't use alternate settings or implement this + TU_VERIFY(TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type); + + switch(p_request->bRequest) { + case TUSB_REQ_GET_INTERFACE: + case TUSB_REQ_SET_INTERFACE: + // Clear complete callback if driver set since it can also stall the request. + usbd_control_set_complete_callback(NULL); + + if (TUSB_REQ_GET_INTERFACE == p_request->bRequest) { + uint8_t alternate = 0; + tud_control_xfer(rhport, p_request, &alternate, 1); + }else { + tud_control_status(rhport, p_request); } + break; + + default: return false; } - break; + } + break; } //------------- Endpoint Request -------------// case TUSB_REQ_RCPT_ENDPOINT: { - uint8_t const ep_addr = tu_u16_low(p_request->wIndex); - uint8_t const ep_num = tu_edpt_number(ep_addr); - uint8_t const ep_dir = tu_edpt_dir(ep_addr); + uint8_t const ep_addr = tu_u16_low(p_request->wIndex); + uint8_t const ep_num = tu_edpt_number(ep_addr); + uint8_t const ep_dir = tu_edpt_dir(ep_addr); - TU_ASSERT(ep_num < TU_ARRAY_SIZE(_usbd_dev.ep2drv)); - usbd_class_driver_t const *driver = get_driver(_usbd_dev.ep2drv[ep_num][ep_dir]); + TU_ASSERT(ep_num < TU_ARRAY_SIZE(_usbd_dev.ep2drv) ); + usbd_class_driver_t const * driver = get_driver(_usbd_dev.ep2drv[ep_num][ep_dir]); - if (TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type) { - // Forward class request to its driver - TU_VERIFY(driver); - return invoke_class_control(rhport, driver, p_request); - } else { - // Handle STD request to endpoint - switch (p_request->bRequest) { - case TUSB_REQ_GET_STATUS: { - uint16_t status = usbd_edpt_stalled(rhport, ep_addr) ? 0x0001 : 0x0000; - tud_control_xfer(rhport, p_request, &status, 2); - } break; - - case TUSB_REQ_CLEAR_FEATURE: - case TUSB_REQ_SET_FEATURE: { - if (TUSB_REQ_FEATURE_EDPT_HALT == p_request->wValue) { - if (TUSB_REQ_CLEAR_FEATURE == p_request->bRequest) { - usbd_edpt_clear_stall(rhport, ep_addr); - } else { - usbd_edpt_stall(rhport, ep_addr); - } - } - - if (driver) { - // Some classes such as USBTMC needs to clear/re-init its buffer when receiving CLEAR_FEATURE request - // We will also forward std request targeted endpoint to class drivers as well - - // STD request must always be ACKed regardless of driver returned value - // Also clear complete callback if driver set since it can also stall the request. - (void)invoke_class_control(rhport, driver, p_request); - usbd_control_set_complete_callback(NULL); - - // skip ZLP status if driver already did that - if (!_usbd_dev.ep_status[0][TUSB_DIR_IN].busy) - tud_control_status(rhport, p_request); - } - } break; - - // Unknown/Unsupported request - default: - TU_BREAKPOINT(); - return false; + if ( TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type ) { + // Forward class request to its driver + TU_VERIFY(driver); + return invoke_class_control(rhport, driver, p_request); + } else { + // Handle STD request to endpoint + switch ( p_request->bRequest ) { + case TUSB_REQ_GET_STATUS: { + uint16_t status = usbd_edpt_stalled(rhport, ep_addr) ? 0x0001 : 0x0000; + tud_control_xfer(rhport, p_request, &status, 2); + } + break; + + case TUSB_REQ_CLEAR_FEATURE: + case TUSB_REQ_SET_FEATURE: { + if ( TUSB_REQ_FEATURE_EDPT_HALT == p_request->wValue ) { + if ( TUSB_REQ_CLEAR_FEATURE == p_request->bRequest ) { + usbd_edpt_clear_stall(rhport, ep_addr); + }else { + usbd_edpt_stall(rhport, ep_addr); + } } + + if (driver) { + // Some classes such as USBTMC needs to clear/re-init its buffer when receiving CLEAR_FEATURE request + // We will also forward std request targeted endpoint to class drivers as well + + // STD request must always be ACKed regardless of driver returned value + // Also clear complete callback if driver set since it can also stall the request. + (void) invoke_class_control(rhport, driver, p_request); + usbd_control_set_complete_callback(NULL); + + // skip ZLP status if driver already did that + if ( !_usbd_dev.ep_status[0][TUSB_DIR_IN].busy ) tud_control_status(rhport, p_request); + } + } + break; + + // Unknown/Unsupported request + default: + TU_BREAKPOINT(); + return false; } - } break; + } + } + break; // Unknown recipient default: - TU_BREAKPOINT(); - return false; - } + TU_BREAKPOINT(); + return false; + } - return true; + return true; } // Process Set Configure Request // This function parse configuration descriptor & open drivers accordingly static bool process_set_config(uint8_t rhport, uint8_t cfg_num) { - // index is cfg_num-1 - tusb_desc_configuration_t const *desc_cfg = - (tusb_desc_configuration_t const *)tud_descriptor_configuration_cb(cfg_num - 1); - TU_ASSERT(desc_cfg != NULL && desc_cfg->bDescriptorType == TUSB_DESC_CONFIGURATION); - - // Parse configuration descriptor - _usbd_dev.remote_wakeup_support = - (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP) ? 1u : 0u; - _usbd_dev.self_powered = (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_SELF_POWERED) ? 1u : 0u; - - // Parse interface descriptor - uint8_t const *p_desc = ((uint8_t const *)desc_cfg) + sizeof(tusb_desc_configuration_t); - uint8_t const *desc_end = ((uint8_t const *)desc_cfg) + tu_le16toh(desc_cfg->wTotalLength); - - while (p_desc < desc_end) { - uint8_t assoc_itf_count = 1; - - // Class will always starts with Interface Association (if any) and then Interface descriptor - if (TUSB_DESC_INTERFACE_ASSOCIATION == tu_desc_type(p_desc)) { - tusb_desc_interface_assoc_t const *desc_iad = - (tusb_desc_interface_assoc_t const *)p_desc; - assoc_itf_count = desc_iad->bInterfaceCount; - - p_desc = tu_desc_next(p_desc); // next to Interface - - // IAD's first interface number and class should match with opened interface - //TU_ASSERT(desc_iad->bFirstInterface == desc_itf->bInterfaceNumber && - // desc_iad->bFunctionClass == desc_itf->bInterfaceClass); - } + // index is cfg_num-1 + tusb_desc_configuration_t const * desc_cfg = (tusb_desc_configuration_t const *) tud_descriptor_configuration_cb(cfg_num-1); + TU_ASSERT(desc_cfg != NULL && desc_cfg->bDescriptorType == TUSB_DESC_CONFIGURATION); - TU_ASSERT(TUSB_DESC_INTERFACE == tu_desc_type(p_desc)); - tusb_desc_interface_t const *desc_itf = (tusb_desc_interface_t const *)p_desc; - - // Find driver for this interface - uint16_t const remaining_len = (uint16_t)(desc_end - p_desc); - uint8_t drv_id; - for (drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) { - usbd_class_driver_t const *driver = get_driver(drv_id); - TU_ASSERT(driver); - uint16_t const drv_len = driver->open(rhport, desc_itf, remaining_len); - - if ((sizeof(tusb_desc_interface_t) <= drv_len) && (drv_len <= remaining_len)) { - // Open successfully - TU_LOG_USBD(" %s opened\r\n", driver->name); - - // Some drivers use 2 or more interfaces but may not have IAD e.g MIDI (always) or - // BTH (even CDC) with class in device descriptor (single interface) - if (assoc_itf_count == 1) { -#if CFG_TUD_CDC - if (driver->open == cdcd_open) - assoc_itf_count = 2; -#endif + // Parse configuration descriptor + _usbd_dev.remote_wakeup_support = (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP) ? 1u : 0u; + _usbd_dev.self_powered = (desc_cfg->bmAttributes & TUSB_DESC_CONFIG_ATT_SELF_POWERED ) ? 1u : 0u; -#if CFG_TUD_MIDI - if (driver->open == midid_open) - assoc_itf_count = 2; -#endif + // Parse interface descriptor + uint8_t const * p_desc = ((uint8_t const*) desc_cfg) + sizeof(tusb_desc_configuration_t); + uint8_t const * desc_end = ((uint8_t const*) desc_cfg) + tu_le16toh(desc_cfg->wTotalLength); -#if CFG_TUD_BTH && CFG_TUD_BTH_ISO_ALT_COUNT - if (driver->open == btd_open) - assoc_itf_count = 2; -#endif - } + while( p_desc < desc_end ) + { + uint8_t assoc_itf_count = 1; - // bind (associated) interfaces to found driver - for (uint8_t i = 0; i < assoc_itf_count; i++) { - uint8_t const itf_num = desc_itf->bInterfaceNumber + i; + // Class will always starts with Interface Association (if any) and then Interface descriptor + if ( TUSB_DESC_INTERFACE_ASSOCIATION == tu_desc_type(p_desc) ) + { + tusb_desc_interface_assoc_t const * desc_iad = (tusb_desc_interface_assoc_t const *) p_desc; + assoc_itf_count = desc_iad->bInterfaceCount; - // Interface number must not be used already - TU_ASSERT(DRVID_INVALID == _usbd_dev.itf2drv[itf_num]); - _usbd_dev.itf2drv[itf_num] = drv_id; - } + p_desc = tu_desc_next(p_desc); // next to Interface - // bind all endpoints to found driver - tu_edpt_bind_driver(_usbd_dev.ep2drv, desc_itf, drv_len, drv_id); + // IAD's first interface number and class should match with opened interface + //TU_ASSERT(desc_iad->bFirstInterface == desc_itf->bInterfaceNumber && + // desc_iad->bFunctionClass == desc_itf->bInterfaceClass); + } - // next Interface - p_desc += drv_len; + TU_ASSERT( TUSB_DESC_INTERFACE == tu_desc_type(p_desc) ); + tusb_desc_interface_t const * desc_itf = (tusb_desc_interface_t const*) p_desc; - break; // exit driver find loop - } + // Find driver for this interface + uint16_t const remaining_len = (uint16_t) (desc_end-p_desc); + uint8_t drv_id; + for (drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) + { + usbd_class_driver_t const *driver = get_driver(drv_id); + TU_ASSERT(driver); + uint16_t const drv_len = driver->open(rhport, desc_itf, remaining_len); + + if ( (sizeof(tusb_desc_interface_t) <= drv_len) && (drv_len <= remaining_len) ) + { + // Open successfully + TU_LOG_USBD(" %s opened\r\n", driver->name); + + // Some drivers use 2 or more interfaces but may not have IAD e.g MIDI (always) or + // BTH (even CDC) with class in device descriptor (single interface) + if ( assoc_itf_count == 1) + { + #if CFG_TUD_CDC + if ( driver->open == cdcd_open ) assoc_itf_count = 2; + #endif + + #if CFG_TUD_MIDI + if ( driver->open == midid_open ) assoc_itf_count = 2; + #endif + + #if CFG_TUD_BTH && CFG_TUD_BTH_ISO_ALT_COUNT + if ( driver->open == btd_open ) assoc_itf_count = 2; + #endif } - // Failed if there is no supported drivers - TU_ASSERT(drv_id < TOTAL_DRIVER_COUNT); + // bind (associated) interfaces to found driver + for(uint8_t i=0; ibInterfaceNumber+i; + + // Interface number must not be used already + TU_ASSERT(DRVID_INVALID == _usbd_dev.itf2drv[itf_num]); + _usbd_dev.itf2drv[itf_num] = drv_id; + } + + // bind all endpoints to found driver + tu_edpt_bind_driver(_usbd_dev.ep2drv, desc_itf, drv_len, drv_id); + + // next Interface + p_desc += drv_len; + + break; // exit driver find loop + } } - return true; + // Failed if there is no supported drivers + TU_ASSERT(drv_id < TOTAL_DRIVER_COUNT); + } + + return true; } // return descriptor's buffer and update desc_len -static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const *p_request) +static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const * p_request) { - tusb_desc_type_t const desc_type = (tusb_desc_type_t)tu_u16_high(p_request->wValue); - uint8_t const desc_index = tu_u16_low(p_request->wValue); + tusb_desc_type_t const desc_type = (tusb_desc_type_t) tu_u16_high(p_request->wValue); + uint8_t const desc_index = tu_u16_low( p_request->wValue ); - switch (desc_type) { + switch(desc_type) + { case TUSB_DESC_DEVICE: { - TU_LOG_USBD(" Device\r\n"); - - void *desc_device = (void *)(uintptr_t)tud_descriptor_device_cb(); - TU_ASSERT(desc_device); - - // Only response with exactly 1 Packet if: not addressed and host requested more data than device descriptor has. - // This only happens with the very first get device descriptor and EP0 size = 8 or 16. - if ((CFG_TUD_ENDPOINT0_SIZE < sizeof(tusb_desc_device_t)) && !_usbd_dev.addressed && - ((tusb_control_request_t const *)p_request)->wLength > sizeof(tusb_desc_device_t)) { - // Hack here: we modify the request length to prevent usbd_control response with zlp - // since we are responding with 1 packet & less data than wLength. - tusb_control_request_t mod_request = *p_request; - mod_request.wLength = CFG_TUD_ENDPOINT0_SIZE; - - return tud_control_xfer(rhport, &mod_request, desc_device, CFG_TUD_ENDPOINT0_SIZE); - } else { - return tud_control_xfer(rhport, p_request, desc_device, sizeof(tusb_desc_device_t)); - } + TU_LOG_USBD(" Device\r\n"); + + void* desc_device = (void*) (uintptr_t) tud_descriptor_device_cb(); + TU_ASSERT(desc_device); + + // Only response with exactly 1 Packet if: not addressed and host requested more data than device descriptor has. + // This only happens with the very first get device descriptor and EP0 size = 8 or 16. + if ((CFG_TUD_ENDPOINT0_SIZE < sizeof(tusb_desc_device_t)) && !_usbd_dev.addressed && + ((tusb_control_request_t const*) p_request)->wLength > sizeof(tusb_desc_device_t)) { + // Hack here: we modify the request length to prevent usbd_control response with zlp + // since we are responding with 1 packet & less data than wLength. + tusb_control_request_t mod_request = *p_request; + mod_request.wLength = CFG_TUD_ENDPOINT0_SIZE; + + return tud_control_xfer(rhport, &mod_request, desc_device, CFG_TUD_ENDPOINT0_SIZE); + }else { + return tud_control_xfer(rhport, p_request, desc_device, sizeof(tusb_desc_device_t)); + } } - // break; // unreachable + // break; // unreachable case TUSB_DESC_BOS: { - TU_LOG_USBD(" BOS\r\n"); + TU_LOG_USBD(" BOS\r\n"); - // requested by host if USB > 2.0 ( i.e 2.1 or 3.x ) - uintptr_t desc_bos = (uintptr_t)tud_descriptor_bos_cb(); - TU_VERIFY(desc_bos); + // requested by host if USB > 2.0 ( i.e 2.1 or 3.x ) + uintptr_t desc_bos = (uintptr_t) tud_descriptor_bos_cb(); + TU_VERIFY(desc_bos); - // Use offsetof to avoid pointer to the odd/misaligned address - uint16_t const total_len = tu_le16toh(tu_unaligned_read16( - (const void *)(desc_bos + offsetof(tusb_desc_bos_t, wTotalLength)))); + // Use offsetof to avoid pointer to the odd/misaligned address + uint16_t const total_len = tu_le16toh( tu_unaligned_read16((const void*) (desc_bos + offsetof(tusb_desc_bos_t, wTotalLength))) ); - return tud_control_xfer(rhport, p_request, (void *)desc_bos, total_len); + return tud_control_xfer(rhport, p_request, (void*) desc_bos, total_len); } - // break; // unreachable + // break; // unreachable case TUSB_DESC_CONFIGURATION: case TUSB_DESC_OTHER_SPEED_CONFIG: { - uintptr_t desc_config; - - if (desc_type == TUSB_DESC_CONFIGURATION) { - TU_LOG_USBD(" Configuration[%u]\r\n", desc_index); - desc_config = (uintptr_t)tud_descriptor_configuration_cb(desc_index); - TU_ASSERT(desc_config); - } else { - // Host only request this after getting Device Qualifier descriptor - TU_LOG_USBD(" Other Speed Configuration\r\n"); - desc_config = (uintptr_t)tud_descriptor_other_speed_configuration_cb(desc_index); - TU_VERIFY(desc_config); - } + uintptr_t desc_config; + + if ( desc_type == TUSB_DESC_CONFIGURATION ) { + TU_LOG_USBD(" Configuration[%u]\r\n", desc_index); + desc_config = (uintptr_t) tud_descriptor_configuration_cb(desc_index); + TU_ASSERT(desc_config); + }else { + // Host only request this after getting Device Qualifier descriptor + TU_LOG_USBD(" Other Speed Configuration\r\n"); + desc_config = (uintptr_t) tud_descriptor_other_speed_configuration_cb(desc_index); + TU_VERIFY(desc_config); + } - // Use offsetof to avoid pointer to the odd/misaligned address - uint16_t const total_len = tu_le16toh(tu_unaligned_read16( - (const void *)(desc_config + offsetof(tusb_desc_configuration_t, wTotalLength)))); + // Use offsetof to avoid pointer to the odd/misaligned address + uint16_t const total_len = tu_le16toh( tu_unaligned_read16((const void*) (desc_config + offsetof(tusb_desc_configuration_t, wTotalLength))) ); - return tud_control_xfer(rhport, p_request, (void *)desc_config, total_len); + return tud_control_xfer(rhport, p_request, (void*) desc_config, total_len); } - // break; // unreachable + // break; // unreachable - case TUSB_DESC_STRING: { - TU_LOG_USBD(" String[%u]\r\n", desc_index); + case TUSB_DESC_STRING: + { + TU_LOG_USBD(" String[%u]\r\n", desc_index); - // String Descriptor always uses the desc set from user - uint8_t const *desc_str = - (uint8_t const *)tud_descriptor_string_cb(desc_index, tu_le16toh(p_request->wIndex)); - TU_VERIFY(desc_str); + // String Descriptor always uses the desc set from user + uint8_t const* desc_str = (uint8_t const*) tud_descriptor_string_cb(desc_index, tu_le16toh(p_request->wIndex)); + TU_VERIFY(desc_str); - // first byte of descriptor is its size - return tud_control_xfer(rhport, p_request, (void *)(uintptr_t)desc_str, - tu_desc_len(desc_str)); + // first byte of descriptor is its size + return tud_control_xfer(rhport, p_request, (void*) (uintptr_t) desc_str, tu_desc_len(desc_str)); } - // break; // unreachable + // break; // unreachable case TUSB_DESC_DEVICE_QUALIFIER: { - TU_LOG_USBD(" Device Qualifier\r\n"); - uint8_t const *desc_qualifier = tud_descriptor_device_qualifier_cb(); - TU_VERIFY(desc_qualifier); - return tud_control_xfer(rhport, p_request, (void *)(uintptr_t)desc_qualifier, - tu_desc_len(desc_qualifier)); + TU_LOG_USBD(" Device Qualifier\r\n"); + uint8_t const* desc_qualifier = tud_descriptor_device_qualifier_cb(); + TU_VERIFY(desc_qualifier); + return tud_control_xfer(rhport, p_request, (void*) (uintptr_t) desc_qualifier, tu_desc_len(desc_qualifier)); } - // break; // unreachable + // break; // unreachable - default: - return false; - } + default: return false; + } } //--------------------------------------------------------------------+ // DCD Event Handler //--------------------------------------------------------------------+ -TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const *event, bool in_isr) -{ - bool send = false; - switch (event->event_id) { +TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const* event, bool in_isr) { + bool send = false; + switch (event->event_id) { case DCD_EVENT_UNPLUGGED: - _usbd_dev.connected = 0; - _usbd_dev.addressed = 0; - _usbd_dev.cfg_num = 0; - _usbd_dev.suspended = 0; - send = true; - break; + _usbd_dev.connected = 0; + _usbd_dev.addressed = 0; + _usbd_dev.cfg_num = 0; + _usbd_dev.suspended = 0; + send = true; + break; case DCD_EVENT_SUSPEND: - // NOTE: When plugging/unplugging device, the D+/D- state are unstable and - // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ). - // In addition, some MCUs such as SAMD or boards that haven no VBUS detection cannot distinguish - // suspended vs disconnected. We will skip handling SUSPEND/RESUME event if not currently connected - if (_usbd_dev.connected) { - _usbd_dev.suspended = 1; - send = true; - } - break; + // NOTE: When plugging/unplugging device, the D+/D- state are unstable and + // can accidentally meet the SUSPEND condition ( Bus Idle for 3ms ). + // In addition, some MCUs such as SAMD or boards that haven no VBUS detection cannot distinguish + // suspended vs disconnected. We will skip handling SUSPEND/RESUME event if not currently connected + if (_usbd_dev.connected) { + _usbd_dev.suspended = 1; + send = true; + } + break; case DCD_EVENT_RESUME: - // skip event if not connected (especially required for SAMD) - if (_usbd_dev.connected) { - _usbd_dev.suspended = 0; - send = true; - } - break; + // skip event if not connected (especially required for SAMD) + if (_usbd_dev.connected) { + _usbd_dev.suspended = 0; + send = true; + } + break; case DCD_EVENT_SOF: - // SOF driver handler in ISR context - for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { - usbd_class_driver_t const *driver = get_driver(i); - if (driver && driver->sof) { - driver->sof(event->rhport, event->sof.frame_count); - } + // SOF driver handler in ISR context + for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) { + usbd_class_driver_t const* driver = get_driver(i); + if (driver && driver->sof) { + driver->sof(event->rhport, event->sof.frame_count); } + } - // Some MCUs after running dcd_remote_wakeup() does not have way to detect the end of remote wakeup - // which last 1-15 ms. DCD can use SOF as a clear indicator that bus is back to operational - if (_usbd_dev.suspended) { - _usbd_dev.suspended = 0; + // Some MCUs after running dcd_remote_wakeup() does not have way to detect the end of remote wakeup + // which last 1-15 ms. DCD can use SOF as a clear indicator that bus is back to operational + if (_usbd_dev.suspended) { + _usbd_dev.suspended = 0; - dcd_event_t const event_resume = { .rhport = event->rhport, - .event_id = DCD_EVENT_RESUME }; - queue_event(&event_resume, in_isr); - } + dcd_event_t const event_resume = {.rhport = event->rhport, .event_id = DCD_EVENT_RESUME}; + queue_event(&event_resume, in_isr); + } - if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { - dcd_event_t const event_sof = { .rhport = event->rhport, - .event_id = DCD_EVENT_SOF, - .sof.frame_count = event->sof.frame_count }; - queue_event(&event_sof, in_isr); - } - break; + if (tu_bit_test(_usbd_dev.sof_consumer, SOF_CONSUMER_USER)) { + dcd_event_t const event_sof = {.rhport = event->rhport, .event_id = DCD_EVENT_SOF, .sof.frame_count = event->sof.frame_count}; + queue_event(&event_sof, in_isr); + } + break; case DCD_EVENT_SETUP_RECEIVED: - _usbd_queued_setup++; - send = true; - break; + _usbd_queued_setup++; + send = true; + break; default: - send = true; - break; - } + send = true; + break; + } - if (send) { - queue_event(event, in_isr); - } + if (send) { + queue_event(event, in_isr); + } } //--------------------------------------------------------------------+ @@ -1249,284 +1221,269 @@ TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const *event, bool in_isr) void usbd_int_set(bool enabled) { - if (enabled) { - dcd_int_enable(_usbd_rhport); - } else { - dcd_int_disable(_usbd_rhport); - } + if (enabled) + { + dcd_int_enable(_usbd_rhport); + }else + { + dcd_int_disable(_usbd_rhport); + } } // Parse consecutive endpoint descriptors (IN & OUT) -bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const *p_desc, uint8_t ep_count, uint8_t xfer_type, - uint8_t *ep_out, uint8_t *ep_in) +bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const* p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t* ep_out, uint8_t* ep_in) { - for (int i = 0; i < ep_count; i++) { - tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + for(int i=0; ibDescriptorType && - xfer_type == desc_ep->bmAttributes.xfer); - TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); - - if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) { - (*ep_in) = desc_ep->bEndpointAddress; - } else { - (*ep_out) = desc_ep->bEndpointAddress; - } + TU_ASSERT(TUSB_DESC_ENDPOINT == desc_ep->bDescriptorType && xfer_type == desc_ep->bmAttributes.xfer); + TU_ASSERT(usbd_edpt_open(rhport, desc_ep)); - p_desc = tu_desc_next(p_desc); + if ( tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN ) + { + (*ep_in) = desc_ep->bEndpointAddress; + }else + { + (*ep_out) = desc_ep->bEndpointAddress; } - return true; + p_desc = tu_desc_next(p_desc); + } + + return true; } // Helper to defer an isr function -void usbd_defer_func(osal_task_func_t func, void *param, bool in_isr) -{ - dcd_event_t event = { - .rhport = 0, - .event_id = USBD_EVENT_FUNC_CALL, - }; - event.func_call.func = func; - event.func_call.param = param; - - queue_event(&event, in_isr); +void usbd_defer_func(osal_task_func_t func, void* param, bool in_isr) { + dcd_event_t event = { + .rhport = 0, + .event_id = USBD_EVENT_FUNC_CALL, + }; + event.func_call.func = func; + event.func_call.param = param; + + queue_event(&event, in_isr); } //--------------------------------------------------------------------+ // USBD Endpoint API //--------------------------------------------------------------------+ -bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep) -{ - rhport = _usbd_rhport; +bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const* desc_ep) { + rhport = _usbd_rhport; - TU_ASSERT(tu_edpt_number(desc_ep->bEndpointAddress) < CFG_TUD_ENDPPOINT_MAX); - TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t)_usbd_dev.speed)); + TU_ASSERT(tu_edpt_number(desc_ep->bEndpointAddress) < CFG_TUD_ENDPPOINT_MAX); + TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed)); - return dcd_edpt_open(rhport, desc_ep); + return dcd_edpt_open(rhport, desc_ep); } -bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr) -{ - (void)rhport; +bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr) { + (void) rhport; - // TODO add this check later, also make sure we don't starve an out endpoint while suspending - // TU_VERIFY(tud_ready()); + // TODO add this check later, also make sure we don't starve an out endpoint while suspending + // TU_VERIFY(tud_ready()); - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); - tu_edpt_state_t *ep_state = &_usbd_dev.ep_status[epnum][dir]; + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); + tu_edpt_state_t* ep_state = &_usbd_dev.ep_status[epnum][dir]; - return tu_edpt_claim(ep_state, _usbd_mutex); + return tu_edpt_claim(ep_state, _usbd_mutex); } -bool usbd_edpt_release(uint8_t rhport, uint8_t ep_addr) -{ - (void)rhport; +bool usbd_edpt_release(uint8_t rhport, uint8_t ep_addr) { + (void) rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); - tu_edpt_state_t *ep_state = &_usbd_dev.ep_status[epnum][dir]; + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); + tu_edpt_state_t* ep_state = &_usbd_dev.ep_status[epnum][dir]; - return tu_edpt_release(ep_state, _usbd_mutex); + return tu_edpt_release(ep_state, _usbd_mutex); } -bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes) -{ - rhport = _usbd_rhport; +bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t* buffer, uint16_t total_bytes) { + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - // TODO skip ready() check for now since enumeration also use this API - // TU_VERIFY(tud_ready()); + // TODO skip ready() check for now since enumeration also use this API + // TU_VERIFY(tud_ready()); - TU_LOG_USBD(" Queue EP %02X with %u bytes ...\r\n", ep_addr, total_bytes); + TU_LOG_USBD(" Queue EP %02X with %u bytes ...\r\n", ep_addr, total_bytes); #if CFG_TUD_LOG_LEVEL >= 3 - if (dir == TUSB_DIR_IN) { - TU_LOG_MEM(CFG_TUD_LOG_LEVEL, buffer, total_bytes, 2); - } + if(dir == TUSB_DIR_IN) { + TU_LOG_MEM(CFG_TUD_LOG_LEVEL, buffer, total_bytes, 2); + } #endif - // Attempt to transfer on a busy endpoint, sound like an race condition ! - TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); + // Attempt to transfer on a busy endpoint, sound like an race condition ! + TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); - // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() - // could return and USBD task can preempt and clear the busy - _usbd_dev.ep_status[epnum][dir].busy = 1; + // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() + // could return and USBD task can preempt and clear the busy + _usbd_dev.ep_status[epnum][dir].busy = 1; - if (dcd_edpt_xfer(rhport, ep_addr, buffer, total_bytes)) { - return true; - } else { - // DCD error, mark endpoint as ready to allow next transfer - _usbd_dev.ep_status[epnum][dir].busy = 0; - _usbd_dev.ep_status[epnum][dir].claimed = 0; - TU_LOG_USBD("FAILED\r\n"); - TU_BREAKPOINT(); - return false; - } + if (dcd_edpt_xfer(rhport, ep_addr, buffer, total_bytes)) { + return true; + } else { + // DCD error, mark endpoint as ready to allow next transfer + _usbd_dev.ep_status[epnum][dir].busy = 0; + _usbd_dev.ep_status[epnum][dir].claimed = 0; + TU_LOG_USBD("FAILED\r\n"); + TU_BREAKPOINT(); + return false; + } } // The number of bytes has to be given explicitly to allow more flexible control of how many // bytes should be written and second to keep the return value free to give back a boolean // success message. If total_bytes is too big, the FIFO will copy only what is available // into the USB buffer! -bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes) -{ - rhport = _usbd_rhport; +bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t* ff, uint16_t total_bytes) { + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - TU_LOG_USBD(" Queue ISO EP %02X with %u bytes ... ", ep_addr, total_bytes); + TU_LOG_USBD(" Queue ISO EP %02X with %u bytes ... ", ep_addr, total_bytes); - // Attempt to transfer on a busy endpoint, sound like an race condition ! - TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); + // Attempt to transfer on a busy endpoint, sound like an race condition ! + TU_ASSERT(_usbd_dev.ep_status[epnum][dir].busy == 0); - // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() could return - // and usbd task can preempt and clear the busy - _usbd_dev.ep_status[epnum][dir].busy = 1; + // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() could return + // and usbd task can preempt and clear the busy + _usbd_dev.ep_status[epnum][dir].busy = 1; - if (dcd_edpt_xfer_fifo(rhport, ep_addr, ff, total_bytes)) { - TU_LOG_USBD("OK\r\n"); - return true; - } else { - // DCD error, mark endpoint as ready to allow next transfer - _usbd_dev.ep_status[epnum][dir].busy = 0; - _usbd_dev.ep_status[epnum][dir].claimed = 0; - TU_LOG_USBD("failed\r\n"); - TU_BREAKPOINT(); - return false; - } + if (dcd_edpt_xfer_fifo(rhport, ep_addr, ff, total_bytes)) { + TU_LOG_USBD("OK\r\n"); + return true; + } else { + // DCD error, mark endpoint as ready to allow next transfer + _usbd_dev.ep_status[epnum][dir].busy = 0; + _usbd_dev.ep_status[epnum][dir].claimed = 0; + TU_LOG_USBD("failed\r\n"); + TU_BREAKPOINT(); + return false; + } } -bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr) -{ - (void)rhport; +bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr) { + (void) rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - return _usbd_dev.ep_status[epnum][dir].busy; + return _usbd_dev.ep_status[epnum][dir].busy; } -void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr) -{ - rhport = _usbd_rhport; +void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr) { + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - // only stalled if currently cleared - TU_LOG_USBD(" Stall EP %02X\r\n", ep_addr); - dcd_edpt_stall(rhport, ep_addr); - _usbd_dev.ep_status[epnum][dir].stalled = 1; - _usbd_dev.ep_status[epnum][dir].busy = 1; + // only stalled if currently cleared + TU_LOG_USBD(" Stall EP %02X\r\n", ep_addr); + dcd_edpt_stall(rhport, ep_addr); + _usbd_dev.ep_status[epnum][dir].stalled = 1; + _usbd_dev.ep_status[epnum][dir].busy = 1; } -void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) -{ - rhport = _usbd_rhport; +void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) { + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - // only clear if currently stalled - TU_LOG_USBD(" Clear Stall EP %02X\r\n", ep_addr); - dcd_edpt_clear_stall(rhport, ep_addr); - _usbd_dev.ep_status[epnum][dir].stalled = 0; - _usbd_dev.ep_status[epnum][dir].busy = 0; + // only clear if currently stalled + TU_LOG_USBD(" Clear Stall EP %02X\r\n", ep_addr); + dcd_edpt_clear_stall(rhport, ep_addr); + _usbd_dev.ep_status[epnum][dir].stalled = 0; + _usbd_dev.ep_status[epnum][dir].busy = 0; } -bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr) -{ - (void)rhport; +bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr) { + (void) rhport; - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - return _usbd_dev.ep_status[epnum][dir].stalled; + return _usbd_dev.ep_status[epnum][dir].stalled; } /** * usbd_edpt_close will disable an endpoint. * In progress transfers on this EP may be delivered after this call. */ -void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr) -{ +void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr) { #ifdef TUP_DCD_EDPT_ISO_ALLOC - (void)rhport; - (void)ep_addr; - // ISO alloc/activate Should be used instead + (void) rhport; (void) ep_addr; + // ISO alloc/activate Should be used instead #else - rhport = _usbd_rhport; + rhport = _usbd_rhport; - TU_LOG_USBD(" CLOSING Endpoint: 0x%02X\r\n", ep_addr); + TU_LOG_USBD(" CLOSING Endpoint: 0x%02X\r\n", ep_addr); - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); - dcd_edpt_close(rhport, ep_addr); - _usbd_dev.ep_status[epnum][dir].stalled = 0; - _usbd_dev.ep_status[epnum][dir].busy = 0; - _usbd_dev.ep_status[epnum][dir].claimed = 0; + dcd_edpt_close(rhport, ep_addr); + _usbd_dev.ep_status[epnum][dir].stalled = 0; + _usbd_dev.ep_status[epnum][dir].busy = 0; + _usbd_dev.ep_status[epnum][dir].claimed = 0; #endif - return; + return; } -void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en) -{ - rhport = _usbd_rhport; - - uint8_t consumer_old = _usbd_dev.sof_consumer; - // Keep track how many class instances need the SOF interrupt - if (en) { - _usbd_dev.sof_consumer |= (uint8_t)(1 << consumer); - } else { - _usbd_dev.sof_consumer &= (uint8_t)(~(1 << consumer)); - } - - // Test logically unequal - if (!_usbd_dev.sof_consumer != !consumer_old) { - dcd_sof_enable(rhport, _usbd_dev.sof_consumer); - } +void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en) { + rhport = _usbd_rhport; + + uint8_t consumer_old = _usbd_dev.sof_consumer; + // Keep track how many class instances need the SOF interrupt + if (en) { + _usbd_dev.sof_consumer |= (uint8_t)(1 << consumer); + } else { + _usbd_dev.sof_consumer &= (uint8_t)(~(1 << consumer)); + } + + // Test logically unequal + if(!_usbd_dev.sof_consumer != !consumer_old) { + dcd_sof_enable(rhport, _usbd_dev.sof_consumer); + } } -bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) -{ +bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) { #ifdef TUP_DCD_EDPT_ISO_ALLOC - rhport = _usbd_rhport; + rhport = _usbd_rhport; - TU_ASSERT(tu_edpt_number(ep_addr) < CFG_TUD_ENDPPOINT_MAX); - return dcd_edpt_iso_alloc(rhport, ep_addr, largest_packet_size); + TU_ASSERT(tu_edpt_number(ep_addr) < CFG_TUD_ENDPPOINT_MAX); + return dcd_edpt_iso_alloc(rhport, ep_addr, largest_packet_size); #else - (void)rhport; - (void)ep_addr; - (void)largest_packet_size; - return false; + (void) rhport; (void) ep_addr; (void) largest_packet_size; + return false; #endif } -bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep) -{ +bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const* desc_ep) { #ifdef TUP_DCD_EDPT_ISO_ALLOC - rhport = _usbd_rhport; + rhport = _usbd_rhport; - uint8_t const epnum = tu_edpt_number(desc_ep->bEndpointAddress); - uint8_t const dir = tu_edpt_dir(desc_ep->bEndpointAddress); + uint8_t const epnum = tu_edpt_number(desc_ep->bEndpointAddress); + uint8_t const dir = tu_edpt_dir(desc_ep->bEndpointAddress); - TU_ASSERT(epnum < CFG_TUD_ENDPPOINT_MAX); - TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t)_usbd_dev.speed)); + TU_ASSERT(epnum < CFG_TUD_ENDPPOINT_MAX); + TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed)); - _usbd_dev.ep_status[epnum][dir].stalled = 0; - _usbd_dev.ep_status[epnum][dir].busy = 0; - _usbd_dev.ep_status[epnum][dir].claimed = 0; - return dcd_edpt_iso_activate(rhport, desc_ep); + _usbd_dev.ep_status[epnum][dir].stalled = 0; + _usbd_dev.ep_status[epnum][dir].busy = 0; + _usbd_dev.ep_status[epnum][dir].claimed = 0; + return dcd_edpt_iso_activate(rhport, desc_ep); #else - (void)rhport; - (void)desc_ep; - return false; + (void) rhport; (void) desc_ep; + return false; #endif } diff --git a/Libraries/tinyusb/src/device/usbd.h b/Libraries/tinyusb/src/device/usbd.h index 9d1a3648da2..7913096e391 100644 --- a/Libraries/tinyusb/src/device/usbd.h +++ b/Libraries/tinyusb/src/device/usbd.h @@ -38,7 +38,7 @@ extern "C" { //--------------------------------------------------------------------+ // Init device stack on roothub port -bool tud_init(uint8_t rhport); +bool tud_init (uint8_t rhport); // Deinit device stack on roothub port bool tud_deinit(uint8_t rhport); @@ -52,9 +52,9 @@ bool tud_inited(void); void tud_task_ext(uint32_t timeout_ms, bool in_isr); // Task function should be called in main/rtos loop -TU_ATTR_ALWAYS_INLINE static inline void tud_task(void) -{ - tud_task_ext(UINT32_MAX, false); +TU_ATTR_ALWAYS_INLINE static inline +void tud_task (void) { + tud_task_ext(UINT32_MAX, false); } // Check if there is pending events need processing by tud_task() @@ -65,7 +65,7 @@ extern void dcd_int_handler(uint8_t rhport); #endif // Interrupt handler, name alias to DCD -#define tud_int_handler dcd_int_handler +#define tud_int_handler dcd_int_handler // Get current bus speed tusb_speed_t tud_speed_get(void); @@ -81,9 +81,9 @@ bool tud_mounted(void); bool tud_suspended(void); // Check if device is ready to transfer -TU_ATTR_ALWAYS_INLINE static inline bool tud_ready(void) -{ - return tud_mounted() && !tud_suspended(); +TU_ATTR_ALWAYS_INLINE static inline +bool tud_ready(void) { + return tud_mounted() && !tud_suspended(); } // Remote wake up host, only if suspended and enabled by host @@ -103,11 +103,10 @@ void tud_sof_cb_enable(bool en); // Carry out Data and Status stage of control transfer // - If len = 0, it is equivalent to sending status only // - If len > wLength : it will be truncated -bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const *request, void *buffer, - uint16_t len); +bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const * request, void* buffer, uint16_t len); // Send STATUS (zero length) packet -bool tud_control_status(uint8_t rhport, tusb_control_request_t const *request); +bool tud_control_status(uint8_t rhport, tusb_control_request_t const * request); //--------------------------------------------------------------------+ // Application Callbacks @@ -115,30 +114,30 @@ bool tud_control_status(uint8_t rhport, tusb_control_request_t const *request); // Invoked when received GET DEVICE DESCRIPTOR request // Application return pointer to descriptor -uint8_t const *tud_descriptor_device_cb(void); +uint8_t const * tud_descriptor_device_cb(void); // Invoked when received GET CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint8_t const *tud_descriptor_configuration_cb(uint8_t index); +uint8_t const * tud_descriptor_configuration_cb(uint8_t index); // Invoked when received GET STRING DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete -uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid); +uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid); // Invoked when received GET BOS DESCRIPTOR request // Application return pointer to descriptor -uint8_t const *tud_descriptor_bos_cb(void); +uint8_t const * tud_descriptor_bos_cb(void); // Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete. // device_qualifier descriptor describes information about a high-speed capable device that would // change if the device were operating at the other speed. If not highspeed capable stall this request. -uint8_t const *tud_descriptor_device_qualifier_cb(void); +uint8_t const* tud_descriptor_device_qualifier_cb(void); // Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete // Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa -uint8_t const *tud_descriptor_other_speed_configuration_cb(uint8_t index); +uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index); // Invoked when device is mounted (configured) void tud_mount_cb(void); @@ -160,140 +159,135 @@ void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr); void tud_sof_cb(uint32_t frame_count); // Invoked when received control request with VENDOR TYPE -bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request); +bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); //--------------------------------------------------------------------+ // Binary Device Object Store (BOS) Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_BOS_DESC_LEN 5 +#define TUD_BOS_DESC_LEN 5 // total length, number of device caps #define TUD_BOS_DESCRIPTOR(_total_len, _caps_num) \ - 5, TUSB_DESC_BOS, U16_TO_U8S_LE(_total_len), _caps_num + 5, TUSB_DESC_BOS, U16_TO_U8S_LE(_total_len), _caps_num // Device Capability Platform 128-bit UUID + Data -#define TUD_BOS_PLATFORM_DESCRIPTOR(...) \ - 4 + TU_ARGS_NUM(__VA_ARGS__), TUSB_DESC_DEVICE_CAPABILITY, DEVICE_CAPABILITY_PLATFORM, 0x00, \ - __VA_ARGS__ +#define TUD_BOS_PLATFORM_DESCRIPTOR(...) \ + 4+TU_ARGS_NUM(__VA_ARGS__), TUSB_DESC_DEVICE_CAPABILITY, DEVICE_CAPABILITY_PLATFORM, 0x00, __VA_ARGS__ //------------- WebUSB BOS Platform -------------// // Descriptor Length -#define TUD_BOS_WEBUSB_DESC_LEN 24 +#define TUD_BOS_WEBUSB_DESC_LEN 24 // Vendor Code, iLandingPage #define TUD_BOS_WEBUSB_DESCRIPTOR(_vendor_code, _ipage) \ - TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_WEBUSB_UUID, U16_TO_U8S_LE(0x0100), _vendor_code, _ipage) + TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_WEBUSB_UUID, U16_TO_U8S_LE(0x0100), _vendor_code, _ipage) -#define TUD_BOS_WEBUSB_UUID \ - 0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65 +#define TUD_BOS_WEBUSB_UUID \ + 0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, \ + 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65 //------------- Microsoft OS 2.0 Platform -------------// -#define TUD_BOS_MICROSOFT_OS_DESC_LEN 28 +#define TUD_BOS_MICROSOFT_OS_DESC_LEN 28 // Total Length of descriptor set, vendor code -#define TUD_BOS_MS_OS_20_DESCRIPTOR(_desc_set_len, _vendor_code) \ - TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_MS_OS_20_UUID, U32_TO_U8S_LE(0x06030000), \ - U16_TO_U8S_LE(_desc_set_len), _vendor_code, 0) +#define TUD_BOS_MS_OS_20_DESCRIPTOR(_desc_set_len, _vendor_code) \ + TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_MS_OS_20_UUID, U32_TO_U8S_LE(0x06030000), U16_TO_U8S_LE(_desc_set_len), _vendor_code, 0) #define TUD_BOS_MS_OS_20_UUID \ - 0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F + 0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, \ + 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F //--------------------------------------------------------------------+ // Configuration Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_CONFIG_DESC_LEN (9) +#define TUD_CONFIG_DESC_LEN (9) // Config number, interface count, string index, total length, attribute, power in mA #define TUD_CONFIG_DESCRIPTOR(config_num, _itfcount, _stridx, _total_len, _attribute, _power_ma) \ - 9, TUSB_DESC_CONFIGURATION, U16_TO_U8S_LE(_total_len), _itfcount, config_num, _stridx, \ - TU_BIT(7) | _attribute, (_power_ma) / 2 + 9, TUSB_DESC_CONFIGURATION, U16_TO_U8S_LE(_total_len), _itfcount, config_num, _stridx, TU_BIT(7) | _attribute, (_power_ma)/2 //--------------------------------------------------------------------+ // CDC Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 66 bytes -#define TUD_CDC_DESC_LEN (8 + 9 + 5 + 5 + 4 + 5 + 7 + 9 + 7 + 7) +#define TUD_CDC_DESC_LEN (8+9+5+5+4+5+7+9+7+7) // CDC Descriptor Template // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -#define TUD_CDC_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ - /* Interface Associate */ \ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, \ - CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, \ - 0, /* CDC Control Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, \ - CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, \ - _stridx, /* CDC Header */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0120), /* CDC Call */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, \ - (uint8_t)((_itfnum) + 1), /* CDC ACM: support line request + send break */ \ - 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 6, /* CDC Union */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, \ - (uint8_t)((_itfnum) + 1), /* Endpoint Notification */ \ - 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), \ - 16, /* CDC Data Interface */ \ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, \ - 0, /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ - 0, /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_CDC_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ + /* Interface Associate */\ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, 0,\ + /* CDC Control Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL, CDC_COMM_PROTOCOL_NONE, _stridx,\ + /* CDC Header */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0120),\ + /* CDC Call */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, (uint8_t)((_itfnum) + 1),\ + /* CDC ACM: support line request + send break */\ + 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 6,\ + /* CDC Union */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ + /* Endpoint Notification */\ + 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 16,\ + /* CDC Data Interface */\ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ + /* Endpoint Out */\ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ + /* Endpoint In */\ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // MSC Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 23 bytes -#define TUD_MSC_DESC_LEN (9 + 7 + 7) +#define TUD_MSC_DESC_LEN (9 + 7 + 7) // Interface number, string index, EP Out & EP In address, EP size -#define TUD_MSC_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ - /* Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_MSC, MSC_SUBCLASS_SCSI, MSC_PROTOCOL_BOT, \ - _stridx, /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ - 0, /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_MSC_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ + /* Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_MSC, MSC_SUBCLASS_SCSI, MSC_PROTOCOL_BOT, _stridx,\ + /* Endpoint Out */\ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ + /* Endpoint In */\ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 + //--------------------------------------------------------------------+ // HID Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 25 bytes -#define TUD_HID_DESC_LEN (9 + 9 + 7) +#define TUD_HID_DESC_LEN (9 + 9 + 7) // HID Input only descriptor // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval -#define TUD_HID_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epin, _epsize, \ - _ep_interval) \ - /* Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_HID, \ - (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, \ - _stridx, /* HID descriptor */ \ - 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, \ - U16_TO_U8S_LE(_report_desc_len), /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval +#define TUD_HID_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epin, _epsize, _ep_interval) \ + /* Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_HID, (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, _stridx,\ + /* HID descriptor */\ + 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, U16_TO_U8S_LE(_report_desc_len),\ + /* Endpoint In */\ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval // Length of template descriptor: 32 bytes -#define TUD_HID_INOUT_DESC_LEN (9 + 9 + 7 + 7) +#define TUD_HID_INOUT_DESC_LEN (9 + 9 + 7 + 7) // HID Input & Output descriptor // Interface number, string index, protocol, report descriptor len, EP OUT & IN address, size & polling interval -#define TUD_HID_INOUT_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epout, \ - _epin, _epsize, _ep_interval) \ - /* Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_HID, \ - (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, \ - _stridx, /* HID descriptor */ \ - 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, \ - U16_TO_U8S_LE(_report_desc_len), /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), \ - _ep_interval, /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval +#define TUD_HID_INOUT_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epout, _epin, _epsize, _ep_interval) \ + /* Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_HID, (uint8_t)((_boot_protocol) ? (uint8_t)HID_SUBCLASS_BOOT : 0), _boot_protocol, _stridx,\ + /* HID descriptor */\ + 9, HID_DESC_TYPE_HID, U16_TO_U8S_LE(0x0111), 0, 1, HID_DESC_TYPE_REPORT, U16_TO_U8S_LE(_report_desc_len),\ + /* Endpoint Out */\ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval, \ + /* Endpoint In */\ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_epsize), _ep_interval //--------------------------------------------------------------------+ // MIDI Descriptor Templates @@ -301,60 +295,61 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, //--------------------------------------------------------------------+ #define TUD_MIDI_DESC_HEAD_LEN (9 + 9 + 9 + 7) -#define TUD_MIDI_DESC_HEAD(_itfnum, _stridx, _numcables) \ - /* Audio Control (AC) Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, \ - AUDIO_FUNC_PROTOCOL_CODE_UNDEF, _stridx, /* AC Header */ \ - 9, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), \ - U16_TO_U8S_LE(0x0009), 1, (uint8_t)((_itfnum) + 1), /* MIDI Streaming (MS) Interface */ \ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_AUDIO, \ - AUDIO_SUBCLASS_MIDI_STREAMING, AUDIO_FUNC_PROTOCOL_CODE_UNDEF, 0, /* MS Header */ \ - 7, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), \ - U16_TO_U8S_LE(7 + (_numcables)*TUD_MIDI_DESC_JACK_LEN + \ - 2 * TUD_MIDI_DESC_EP_LEN(_numcables)) +#define TUD_MIDI_DESC_HEAD(_itfnum, _stridx, _numcables) \ + /* Audio Control (AC) Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_FUNC_PROTOCOL_CODE_UNDEF, _stridx,\ + /* AC Header */\ + 9, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), U16_TO_U8S_LE(0x0009), 1, (uint8_t)((_itfnum) + 1),\ + /* MIDI Streaming (MS) Interface */\ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_MIDI_STREAMING, AUDIO_FUNC_PROTOCOL_CODE_UNDEF, 0,\ + /* MS Header */\ + 7, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_HEADER, U16_TO_U8S_LE(0x0100), U16_TO_U8S_LE(7 + (_numcables) * TUD_MIDI_DESC_JACK_LEN + 2 * TUD_MIDI_DESC_EP_LEN(_numcables)) -#define TUD_MIDI_JACKID_IN_EMB(_cablenum) (uint8_t)(((_cablenum)-1) * 4 + 1) +#define TUD_MIDI_JACKID_IN_EMB(_cablenum) \ + (uint8_t)(((_cablenum) - 1) * 4 + 1) -#define TUD_MIDI_JACKID_IN_EXT(_cablenum) (uint8_t)(((_cablenum)-1) * 4 + 2) +#define TUD_MIDI_JACKID_IN_EXT(_cablenum) \ + (uint8_t)(((_cablenum) - 1) * 4 + 2) -#define TUD_MIDI_JACKID_OUT_EMB(_cablenum) (uint8_t)(((_cablenum)-1) * 4 + 3) +#define TUD_MIDI_JACKID_OUT_EMB(_cablenum) \ + (uint8_t)(((_cablenum) - 1) * 4 + 3) -#define TUD_MIDI_JACKID_OUT_EXT(_cablenum) (uint8_t)(((_cablenum)-1) * 4 + 4) +#define TUD_MIDI_JACKID_OUT_EXT(_cablenum) \ + (uint8_t)(((_cablenum) - 1) * 4 + 4) #define TUD_MIDI_DESC_JACK_LEN (6 + 6 + 9 + 9) -#define TUD_MIDI_DESC_JACK_DESC(_cablenum, _stridx) \ - /* MS In Jack (Embedded) */ \ - 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EMBEDDED, \ - TUD_MIDI_JACKID_IN_EMB(_cablenum), _stridx, /* MS In Jack (External) */ \ - 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EXTERNAL, \ - TUD_MIDI_JACKID_IN_EXT(_cablenum), \ - _stridx, /* MS Out Jack (Embedded), connected to In Jack External */ \ - 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EMBEDDED, \ - TUD_MIDI_JACKID_OUT_EMB(_cablenum), 1, TUD_MIDI_JACKID_IN_EXT(_cablenum), 1, \ - _stridx, /* MS Out Jack (External), connected to In Jack Embedded */ \ - 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EXTERNAL, \ - TUD_MIDI_JACKID_OUT_EXT(_cablenum), 1, TUD_MIDI_JACKID_IN_EMB(_cablenum), 1, _stridx +#define TUD_MIDI_DESC_JACK_DESC(_cablenum, _stridx) \ + /* MS In Jack (Embedded) */\ + 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EMBEDDED, TUD_MIDI_JACKID_IN_EMB(_cablenum), _stridx,\ + /* MS In Jack (External) */\ + 6, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_IN_JACK, MIDI_JACK_EXTERNAL, TUD_MIDI_JACKID_IN_EXT(_cablenum), _stridx,\ + /* MS Out Jack (Embedded), connected to In Jack External */\ + 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EMBEDDED, TUD_MIDI_JACKID_OUT_EMB(_cablenum), 1, TUD_MIDI_JACKID_IN_EXT(_cablenum), 1, _stridx,\ + /* MS Out Jack (External), connected to In Jack Embedded */\ + 9, TUSB_DESC_CS_INTERFACE, MIDI_CS_INTERFACE_OUT_JACK, MIDI_JACK_EXTERNAL, TUD_MIDI_JACKID_OUT_EXT(_cablenum), 1, TUD_MIDI_JACKID_IN_EMB(_cablenum), 1, _stridx #define TUD_MIDI_DESC_JACK(_cablenum) TUD_MIDI_DESC_JACK_DESC(_cablenum, 0) #define TUD_MIDI_DESC_EP_LEN(_numcables) (9 + 4 + (_numcables)) -#define TUD_MIDI_DESC_EP(_epout, _epsize, _numcables) \ - /* Endpoint: Note Audio v1.0's endpoint has 9 bytes instead of 7 */ \ - 9, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0, 0, \ - 0, /* MS Endpoint (connected to embedded jack) */ \ - (uint8_t)(4 + (_numcables)), TUSB_DESC_CS_ENDPOINT, MIDI_CS_ENDPOINT_GENERAL, _numcables +#define TUD_MIDI_DESC_EP(_epout, _epsize, _numcables) \ + /* Endpoint: Note Audio v1.0's endpoint has 9 bytes instead of 7 */\ + 9, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0, 0, 0, \ + /* MS Endpoint (connected to embedded jack) */\ + (uint8_t)(4 + (_numcables)), TUSB_DESC_CS_ENDPOINT, MIDI_CS_ENDPOINT_GENERAL, _numcables // Length of template descriptor (88 bytes) -#define TUD_MIDI_DESC_LEN \ - (TUD_MIDI_DESC_HEAD_LEN + TUD_MIDI_DESC_JACK_LEN + TUD_MIDI_DESC_EP_LEN(1) * 2) +#define TUD_MIDI_DESC_LEN (TUD_MIDI_DESC_HEAD_LEN + TUD_MIDI_DESC_JACK_LEN + TUD_MIDI_DESC_EP_LEN(1) * 2) // MIDI simple descriptor // - 1 Embedded Jack In connected to 1 External Jack Out // - 1 Embedded Jack out connected to 1 External Jack In -#define TUD_MIDI_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ - TUD_MIDI_DESC_HEAD(_itfnum, _stridx, 1), TUD_MIDI_DESC_JACK_DESC(1, 0), \ - TUD_MIDI_DESC_EP(_epout, _epsize, 1), TUD_MIDI_JACKID_IN_EMB(1), \ - TUD_MIDI_DESC_EP(_epin, _epsize, 1), TUD_MIDI_JACKID_OUT_EMB(1) +#define TUD_MIDI_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ + TUD_MIDI_DESC_HEAD(_itfnum, _stridx, 1),\ + TUD_MIDI_DESC_JACK_DESC(1, 0),\ + TUD_MIDI_DESC_EP(_epout, _epsize, 1),\ + TUD_MIDI_JACKID_IN_EMB(1),\ + TUD_MIDI_DESC_EP(_epin, _epsize, 1),\ + TUD_MIDI_JACKID_OUT_EMB(1) //--------------------------------------------------------------------+ // Audio v2.0 Descriptor Templates @@ -362,388 +357,269 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, /* Standard Interface Association Descriptor (IAD) */ #define TUD_AUDIO_DESC_IAD_LEN 8 -#define TUD_AUDIO_DESC_IAD(_firstitf, _nitfs, _stridx) \ - TUD_AUDIO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, _firstitf, _nitfs, TUSB_CLASS_AUDIO, \ - AUDIO_FUNCTION_SUBCLASS_UNDEFINED, AUDIO_FUNC_PROTOCOL_CODE_V2, _stridx +#define TUD_AUDIO_DESC_IAD(_firstitf, _nitfs, _stridx) \ + TUD_AUDIO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, _firstitf, _nitfs, TUSB_CLASS_AUDIO, AUDIO_FUNCTION_SUBCLASS_UNDEFINED, AUDIO_FUNC_PROTOCOL_CODE_V2, _stridx /* Standard AC Interface Descriptor(4.7.1) */ #define TUD_AUDIO_DESC_STD_AC_LEN 9 -#define TUD_AUDIO_DESC_STD_AC(_itfnum, _nEPs, _stridx) /* _nEPs is 0 or 1 */ \ - TUD_AUDIO_DESC_STD_AC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, _nEPs, \ - TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_INT_PROTOCOL_CODE_V2, _stridx +#define TUD_AUDIO_DESC_STD_AC(_itfnum, _nEPs, _stridx) /* _nEPs is 0 or 1 */\ + TUD_AUDIO_DESC_STD_AC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, _nEPs, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_INT_PROTOCOL_CODE_V2, _stridx /* Class-Specific AC Interface Header Descriptor(4.7.2) */ #define TUD_AUDIO_DESC_CS_AC_LEN 9 -#define TUD_AUDIO_DESC_CS_AC( \ - _bcdADC, _category, _totallen, \ - _ctrl) /* _bcdADC : Audio Device Class Specification Release Number in Binary-Coded Decimal, _category : see audio_function_t, _totallen : Total number of bytes returned for the class-specific AudioControl interface i.e. Clock Source, Unit and Terminal descriptors - Do not include TUD_AUDIO_DESC_CS_AC_LEN, we already do this here*/ \ - TUD_AUDIO_DESC_CS_AC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, \ - U16_TO_U8S_LE(_bcdADC), _category, U16_TO_U8S_LE(_totallen + TUD_AUDIO_DESC_CS_AC_LEN), \ - _ctrl +#define TUD_AUDIO_DESC_CS_AC(_bcdADC, _category, _totallen, _ctrl) /* _bcdADC : Audio Device Class Specification Release Number in Binary-Coded Decimal, _category : see audio_function_t, _totallen : Total number of bytes returned for the class-specific AudioControl interface i.e. Clock Source, Unit and Terminal descriptors - Do not include TUD_AUDIO_DESC_CS_AC_LEN, we already do this here*/ \ + TUD_AUDIO_DESC_CS_AC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(_bcdADC), _category, U16_TO_U8S_LE(_totallen + TUD_AUDIO_DESC_CS_AC_LEN), _ctrl /* Clock Source Descriptor(4.7.2.1) */ #define TUD_AUDIO_DESC_CLK_SRC_LEN 8 -#define TUD_AUDIO_DESC_CLK_SRC(_clkid, _attr, _ctrl, _assocTerm, _stridx) \ - TUD_AUDIO_DESC_CLK_SRC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE, \ - _clkid, _attr, _ctrl, _assocTerm, _stridx +#define TUD_AUDIO_DESC_CLK_SRC(_clkid, _attr, _ctrl, _assocTerm, _stridx) \ + TUD_AUDIO_DESC_CLK_SRC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE, _clkid, _attr, _ctrl, _assocTerm, _stridx /* Input Terminal Descriptor(4.7.2.4) */ #define TUD_AUDIO_DESC_INPUT_TERM_LEN 17 -#define TUD_AUDIO_DESC_INPUT_TERM(_termid, _termtype, _assocTerm, _clkid, _nchannelslogical, \ - _channelcfg, _idxchannelnames, _ctrl, _stridx) \ - TUD_AUDIO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL, \ - _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _clkid, _nchannelslogical, \ - U32_TO_U8S_LE(_channelcfg), _idxchannelnames, U16_TO_U8S_LE(_ctrl), _stridx +#define TUD_AUDIO_DESC_INPUT_TERM(_termid, _termtype, _assocTerm, _clkid, _nchannelslogical, _channelcfg, _idxchannelnames, _ctrl, _stridx) \ + TUD_AUDIO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL, _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _clkid, _nchannelslogical, U32_TO_U8S_LE(_channelcfg), _idxchannelnames, U16_TO_U8S_LE(_ctrl), _stridx /* Output Terminal Descriptor(4.7.2.5) */ #define TUD_AUDIO_DESC_OUTPUT_TERM_LEN 12 #define TUD_AUDIO_DESC_OUTPUT_TERM(_termid, _termtype, _assocTerm, _srcid, _clkid, _ctrl, _stridx) \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL, \ - _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _srcid, _clkid, U16_TO_U8S_LE(_ctrl), \ - _stridx + TUD_AUDIO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL, _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _srcid, _clkid, U16_TO_U8S_LE(_ctrl), _stridx /* Feature Unit Descriptor(4.7.2.8) */ // 1 - Channel -#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN 6 + (1 + 1) * 4 -#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, \ - _stridx) \ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, \ - AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), \ - U32_TO_U8S_LE(_ctrlch1), _stridx +#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN 6+(1+1)*4 +#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _stridx) \ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), _stridx // 2 - Channels -#define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN (6 + (2 + 1) * 4) -#define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, \ - _ctrlch2, _stridx) \ - TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, \ - AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), \ - U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), _stridx +#define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN (6+(2+1)*4) +#define TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _ctrlch2, _stridx) \ + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), _stridx // 4 - Channels -#define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN (6 + (4 + 1) * 4) -#define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, \ - _ctrlch2, _ctrlch3, _ctrlch4, _stridx) \ - TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, \ - AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), \ - U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), U32_TO_U8S_LE(_ctrlch3), \ - U32_TO_U8S_LE(_ctrlch4), _stridx +#define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN (6+(4+1)*4) +#define TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _ctrlch2, _ctrlch3, _ctrlch4, _stridx) \ + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), U32_TO_U8S_LE(_ctrlch2), U32_TO_U8S_LE(_ctrlch3), U32_TO_U8S_LE(_ctrlch4), _stridx // For more channels, add definitions here /* Standard AC Interrupt Endpoint Descriptor(4.8.2.1) */ #define TUD_AUDIO_DESC_STD_AC_INT_EP_LEN 7 -#define TUD_AUDIO_DESC_STD_AC_INT_EP(_ep, _interval) \ - TUD_AUDIO_DESC_STD_AC_INT_EP_LEN, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_INTERRUPT, \ - U16_TO_U8S_LE(6), _interval +#define TUD_AUDIO_DESC_STD_AC_INT_EP(_ep, _interval) \ + TUD_AUDIO_DESC_STD_AC_INT_EP_LEN, TUSB_DESC_ENDPOINT, _ep, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(6), _interval /* Standard AS Interface Descriptor(4.9.1) */ #define TUD_AUDIO_DESC_STD_AS_INT_LEN 9 -#define TUD_AUDIO_DESC_STD_AS_INT(_itfnum, _altset, _nEPs, _stridx) \ - TUD_AUDIO_DESC_STD_AS_INT_LEN, TUSB_DESC_INTERFACE, _itfnum, _altset, _nEPs, TUSB_CLASS_AUDIO, \ - AUDIO_SUBCLASS_STREAMING, AUDIO_INT_PROTOCOL_CODE_V2, _stridx +#define TUD_AUDIO_DESC_STD_AS_INT(_itfnum, _altset, _nEPs, _stridx) \ + TUD_AUDIO_DESC_STD_AS_INT_LEN, TUSB_DESC_INTERFACE, _itfnum, _altset, _nEPs, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_STREAMING, AUDIO_INT_PROTOCOL_CODE_V2, _stridx /* Class-Specific AS Interface Descriptor(4.9.2) */ #define TUD_AUDIO_DESC_CS_AS_INT_LEN 16 -#define TUD_AUDIO_DESC_CS_AS_INT(_termid, _ctrl, _formattype, _formats, _nchannelsphysical, \ - _channelcfg, _stridx) \ - TUD_AUDIO_DESC_CS_AS_INT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_AS_GENERAL, \ - _termid, _ctrl, _formattype, U32_TO_U8S_LE(_formats), _nchannelsphysical, \ - U32_TO_U8S_LE(_channelcfg), _stridx +#define TUD_AUDIO_DESC_CS_AS_INT(_termid, _ctrl, _formattype, _formats, _nchannelsphysical, _channelcfg, _stridx) \ + TUD_AUDIO_DESC_CS_AS_INT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_AS_GENERAL, _termid, _ctrl, _formattype, U32_TO_U8S_LE(_formats), _nchannelsphysical, U32_TO_U8S_LE(_channelcfg), _stridx /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ #define TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN 6 -#define TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - _subslotsize, \ - _bitresolution) /* _subslotsize is number of bytes per sample (i.e. subslot) and can be 1,2,3, or 4 */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_FORMAT_TYPE, \ - AUDIO_FORMAT_TYPE_I, _subslotsize, _bitresolution +#define TUD_AUDIO_DESC_TYPE_I_FORMAT(_subslotsize, _bitresolution) /* _subslotsize is number of bytes per sample (i.e. subslot) and can be 1,2,3, or 4 */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_FORMAT_TYPE, AUDIO_FORMAT_TYPE_I, _subslotsize, _bitresolution /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ #define TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN 7 -#define TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep, _attr, _maxEPsize, _interval) \ - TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN, TUSB_DESC_ENDPOINT, _ep, _attr, U16_TO_U8S_LE(_maxEPsize), \ - _interval +#define TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep, _attr, _maxEPsize, _interval) \ + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN, TUSB_DESC_ENDPOINT, _ep, _attr, U16_TO_U8S_LE(_maxEPsize), _interval /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ #define TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN 8 -#define TUD_AUDIO_DESC_CS_AS_ISO_EP(_attr, _ctrl, _lockdelayunit, _lockdelay) \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN, TUSB_DESC_CS_ENDPOINT, AUDIO_CS_EP_SUBTYPE_GENERAL, _attr, \ - _ctrl, _lockdelayunit, U16_TO_U8S_LE(_lockdelay) +#define TUD_AUDIO_DESC_CS_AS_ISO_EP(_attr, _ctrl, _lockdelayunit, _lockdelay) \ + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN, TUSB_DESC_CS_ENDPOINT, AUDIO_CS_EP_SUBTYPE_GENERAL, _attr, _ctrl, _lockdelayunit, U16_TO_U8S_LE(_lockdelay) /* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */ #define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN 7 -#define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(_ep, _epsize, _interval) \ - TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN, TUSB_DESC_ENDPOINT, _ep, \ - (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_NO_SYNC | \ - (uint8_t)TUSB_ISO_EP_ATT_EXPLICIT_FB), \ - U16_TO_U8S_LE(_epsize), _interval +#define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(_ep, _epsize, _interval) \ + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN, TUSB_DESC_ENDPOINT, _ep, (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_NO_SYNC | (uint8_t)TUSB_ISO_EP_ATT_EXPLICIT_FB), U16_TO_U8S_LE(_epsize), _interval // AUDIO simple descriptor (UAC2) for 1 microphone input // - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source -#define TUD_AUDIO_MIC_ONE_CH_DESC_LEN \ - (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ - TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN + TUD_AUDIO_DESC_STD_AS_INT_LEN + \ - TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) - -#define TUD_AUDIO_MIC_ONE_CH_DESC_N_AS_INT 1 // Number of AS interfaces - -#define TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, \ - _epin, _epsize) \ - /* Standard Interface Association Descriptor (IAD) */ \ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, \ - /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ - TUD_AUDIO_DESC_STD_AC( \ - /*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, \ - /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ - TUD_AUDIO_DESC_CS_AC( \ - /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, \ - /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, \ - /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, \ - /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), \ - /*_assocTerm*/ 0x01, \ - /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, \ - /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, \ - /*_nchannelslogical*/ 0x01, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_idxchannelnames*/ 0x00, \ - /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, \ - /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, \ - /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, \ - /*_ctrl*/ 0x0000, \ - /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL( \ - /*_unitid*/ 0x02, /*_srcid*/ 0x01, \ - /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ - /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, \ - /*_nEPs*/ 0x00, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, \ - /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - _nBytesPerSample, \ - _nBitsUsedPerSample), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epin, /*_attr*/ \ - (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ - (uint8_t)TUSB_ISO_EP_ATT_DATA), \ - /*_maxEPsize*/ _epsize, /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_MIC_ONE_CH_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + + TUD_AUDIO_DESC_STD_AC_LEN\ + + TUD_AUDIO_DESC_CS_AC_LEN\ + + TUD_AUDIO_DESC_CLK_SRC_LEN\ + + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) + +#define TUD_AUDIO_MIC_ONE_CH_DESC_N_AS_INT 1 // Number of AS interfaces + +#define TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epin, _epsize) \ + /* Standard Interface Association Descriptor (IAD) */\ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ + /* Standard AC Interface Descriptor(4.7.1) */\ + TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ + /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ + TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ + /* Clock Source Descriptor(4.7.2.1) */\ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ + /* Input Terminal Descriptor(4.7.2.4) */\ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\ + /* Output Terminal Descriptor(4.7.2.5) */\ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ + /* Feature Unit Descriptor(4.7.2.8) */\ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 1 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epsize, /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) // AUDIO simple descriptor (UAC2) for 4 microphone input // - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source -#define TUD_AUDIO_MIC_FOUR_CH_DESC_LEN \ - (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ - TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ - TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN + TUD_AUDIO_DESC_STD_AS_INT_LEN + \ - TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) - -#define TUD_AUDIO_MIC_FOUR_CH_DESC_N_AS_INT 1 // Number of AS interfaces - -#define TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, \ - _epin, _epsize) \ - /* Standard Interface Association Descriptor (IAD) */ \ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, \ - /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ - TUD_AUDIO_DESC_STD_AC( \ - /*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, \ - /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ - TUD_AUDIO_DESC_CS_AC( \ - /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, \ - /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, \ - /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, \ - /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), \ - /*_assocTerm*/ 0x01, \ - /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ - TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, \ - /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, \ - /*_nchannelslogical*/ 0x04, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_idxchannelnames*/ 0x00, \ - /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, \ - /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, \ - /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, \ - /*_ctrl*/ 0x0000, \ - /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ - TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL( \ - /*_unitid*/ 0x02, /*_srcid*/ 0x01, \ - /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ - /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ - /*_ctrlch2*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ - /*_ctrlch3*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ - /*_ctrlch4*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, \ - /*_nEPs*/ 0x00, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, \ - /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, \ - /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x04, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - _nBytesPerSample, \ - _nBitsUsedPerSample), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epin, /*_attr*/ \ - (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ - (uint8_t)TUSB_ISO_EP_ATT_DATA), \ - /*_maxEPsize*/ _epsize, /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000) +#define TUD_AUDIO_MIC_FOUR_CH_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + + TUD_AUDIO_DESC_STD_AC_LEN\ + + TUD_AUDIO_DESC_CS_AC_LEN\ + + TUD_AUDIO_DESC_CLK_SRC_LEN\ + + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) + +#define TUD_AUDIO_MIC_FOUR_CH_DESC_N_AS_INT 1 // Number of AS interfaces + +#define TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epin, _epsize) \ + /* Standard Interface Association Descriptor (IAD) */\ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ + /* Standard AC Interface Descriptor(4.7.1) */\ + TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ + /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ + TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ + /* Clock Source Descriptor(4.7.2.1) */\ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ + /* Input Terminal Descriptor(4.7.2.4) */\ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x04, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\ + /* Output Terminal Descriptor(4.7.2.5) */\ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ + /* Feature Unit Descriptor(4.7.2.8) */\ + TUD_AUDIO_DESC_FEATURE_UNIT_FOUR_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch2*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch3*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch4*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 1 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x04, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epsize, /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) // AUDIO simple descriptor (UAC2) for mono speaker // - 1 Input Terminal, 2 Feature Unit (Mute and Volume Control), 3 Output Terminal, 4 Clock Source -#define TUD_AUDIO_SPEAKER_MONO_FB_DESC_LEN \ - (TUD_AUDIO_DESC_IAD_LEN + TUD_AUDIO_DESC_STD_AC_LEN + TUD_AUDIO_DESC_CS_AC_LEN + \ - TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + TUD_AUDIO_DESC_OUTPUT_TERM_LEN + \ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN + TUD_AUDIO_DESC_STD_AS_INT_LEN + \ - TUD_AUDIO_DESC_STD_AS_INT_LEN + TUD_AUDIO_DESC_CS_AS_INT_LEN + \ - TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN + \ - TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN) - -#define TUD_AUDIO_SPEAKER_MONO_FB_DESCRIPTOR( \ - _itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epout, _epoutsize, _epfb, _epfbsize) \ - /* Standard Interface Association Descriptor (IAD) */ \ - TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, \ - /*_stridx*/ 0x00), /* Standard AC Interface Descriptor(4.7.1) */ \ - TUD_AUDIO_DESC_STD_AC( \ - /*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, \ - /*_stridx*/ _stridx), /* Class-Specific AC Interface Header Descriptor(4.7.2) */ \ - TUD_AUDIO_DESC_CS_AC( \ - /*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_DESKTOP_SPEAKER, \ - /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN + TUD_AUDIO_DESC_INPUT_TERM_LEN + \ - TUD_AUDIO_DESC_OUTPUT_TERM_LEN + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, \ - /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS), /* Clock Source Descriptor(4.7.2.1) */ \ - TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, \ - /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), \ - /*_assocTerm*/ 0x01, \ - /*_stridx*/ 0x00), /* Input Terminal Descriptor(4.7.2.4) */ \ - TUD_AUDIO_DESC_INPUT_TERM( \ - /*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, \ - /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, \ - /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), \ - /*_stridx*/ 0x00), /* Output Terminal Descriptor(4.7.2.5) */ \ - TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, \ - /*_termtype*/ AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER, \ - /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, \ - /*_ctrl*/ 0x0000, \ - /*_stridx*/ 0x00), /* Feature Unit Descriptor(4.7.2.8) */ \ - TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL( \ - /*_unitid*/ 0x02, /*_srcid*/ 0x01, \ - /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, \ - /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | \ - AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */ \ - TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, \ - /*_nEPs*/ 0x00, /*_stridx*/ \ - 0x00), \ - /* Standard AS Interface Descriptor(4.9.1) */ /* Interface 1, Alternate 1 - alternate interface for data streaming */ \ - TUD_AUDIO_DESC_STD_AS_INT( \ - /*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x02, \ - /*_stridx*/ 0x00), /* Class-Specific AS Interface Descriptor(4.9.2) */ \ - TUD_AUDIO_DESC_CS_AS_INT( \ - /*_termid*/ 0x01, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, \ - /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, \ - /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, \ - /*_stridx*/ 0x00), /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */ \ - TUD_AUDIO_DESC_TYPE_I_FORMAT( \ - _nBytesPerSample, \ - _nBitsUsedPerSample), /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_EP( \ - /*_ep*/ _epout, /*_attr*/ \ - (uint8_t)((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | \ - (uint8_t)TUSB_ISO_EP_ATT_DATA), \ - /*_maxEPsize*/ _epoutsize, /*_interval*/ \ - 0x01), /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */ \ - TUD_AUDIO_DESC_CS_AS_ISO_EP( \ - /*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, \ - /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, \ - /*_lockdelay*/ 0x0000), /* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */ \ - TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(/*_ep*/ _epfb, /*_epsize*/ _epfbsize, /*_interval*/ 1) +#define TUD_AUDIO_SPEAKER_MONO_FB_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ + + TUD_AUDIO_DESC_STD_AC_LEN\ + + TUD_AUDIO_DESC_CS_AC_LEN\ + + TUD_AUDIO_DESC_CLK_SRC_LEN\ + + TUD_AUDIO_DESC_INPUT_TERM_LEN\ + + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ + + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_STD_AS_INT_LEN\ + + TUD_AUDIO_DESC_CS_AS_INT_LEN\ + + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ + + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN) + +#define TUD_AUDIO_SPEAKER_MONO_FB_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epout, _epoutsize, _epfb, _epfbsize) \ + /* Standard Interface Association Descriptor (IAD) */\ + TUD_AUDIO_DESC_IAD(/*_firstitf*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\ + /* Standard AC Interface Descriptor(4.7.1) */\ + TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ + /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ + TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_DESKTOP_SPEAKER, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ + /* Clock Source Descriptor(4.7.2.1) */\ + TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\ + /* Input Terminal Descriptor(4.7.2.4) */\ + TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ + /* Output Terminal Descriptor(4.7.2.5) */\ + TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_OUT_DESKTOP_SPEAKER, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ + /* Feature Unit Descriptor(4.7.2.8) */\ + TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\ + /* Standard AS Interface Descriptor(4.9.1) */\ + /* Interface 1, Alternate 1 - alternate interface for data streaming */\ + TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum) + 1), /*_altset*/ 0x01, /*_nEPs*/ 0x02, /*_stridx*/ 0x00),\ + /* Class-Specific AS Interface Descriptor(4.9.2) */\ + TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x01, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ + /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ + TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\ + /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_ASYNCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epoutsize, /*_interval*/ 0x01),\ + /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ + TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ + /* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */\ + TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(/*_ep*/ _epfb, /*_epsize*/ _epfbsize, /*_interval*/ 1) // Calculate wMaxPacketSize of Endpoints -#define TUD_AUDIO_EP_SIZE(_maxFrequency, _nBytesPerSample, _nChannels) \ - ((((_maxFrequency + (TUD_OPT_HIGH_SPEED ? 7999 : 999)) / (TUD_OPT_HIGH_SPEED ? 8000 : 1000)) + \ - 1) * \ - _nBytesPerSample * _nChannels) +#define TUD_AUDIO_EP_SIZE(_maxFrequency, _nBytesPerSample, _nChannels) \ + ((((_maxFrequency + (TUD_OPT_HIGH_SPEED ? 7999 : 999)) / (TUD_OPT_HIGH_SPEED ? 8000 : 1000)) + 1) * _nBytesPerSample * _nChannels) + //--------------------------------------------------------------------+ // USBTMC/USB488 Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_USBTMC_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) +#define TUD_USBTMC_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) #define TUD_USBTMC_APP_SUBCLASS 0x03u -#define TUD_USBTMC_PROTOCOL_STD 0x00u +#define TUD_USBTMC_PROTOCOL_STD 0x00u #define TUD_USBTMC_PROTOCOL_USB488 0x01u // Interface number, number of endpoints, EP string index, USB_TMC_PROTOCOL*, bulk-out endpoint ID, // bulk-in endpoint ID -#define TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, _stridx, _itfProtocol) \ - /* Interface */ \ - 0x09, TUSB_DESC_INTERFACE, _itfnum, 0x00, _bNumEndpoints, TUD_USBTMC_APP_CLASS, \ - TUD_USBTMC_APP_SUBCLASS, _itfProtocol, _stridx +#define TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, _stridx, _itfProtocol) \ + /* Interface */ \ + 0x09, TUSB_DESC_INTERFACE, _itfnum, 0x00, _bNumEndpoints, TUD_USBTMC_APP_CLASS, TUD_USBTMC_APP_SUBCLASS, _itfProtocol, _stridx #define TUD_USBTMC_IF_DESCRIPTOR_LEN 9u -#define TUD_USBTMC_BULK_DESCRIPTORS(_epout, _epin, _bulk_epsize) \ - /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), \ - 0u, /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), 0u +#define TUD_USBTMC_BULK_DESCRIPTORS(_epout, _epin, _bulk_epsize) \ + /* Endpoint Out */ \ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), 0u, \ + /* Endpoint In */ \ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_bulk_epsize), 0u -#define TUD_USBTMC_BULK_DESCRIPTORS_LEN (7u + 7u) +#define TUD_USBTMC_BULK_DESCRIPTORS_LEN (7u+7u) -/* optional interrupt endpoint */ // _int_pollingInterval : for LS/FS, expressed in frames (1ms each). 16 may be a good number? -#define TUD_USBTMC_INT_DESCRIPTOR(_ep_interrupt, _ep_interrupt_size, _int_pollingInterval) \ - 7, TUSB_DESC_ENDPOINT, _ep_interrupt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_interrupt_size), \ - _int_pollingInterval +/* optional interrupt endpoint */ \ +// _int_pollingInterval : for LS/FS, expressed in frames (1ms each). 16 may be a good number? +#define TUD_USBTMC_INT_DESCRIPTOR(_ep_interrupt, _ep_interrupt_size, _int_pollingInterval ) \ + 7, TUSB_DESC_ENDPOINT, _ep_interrupt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_interrupt_size), _int_pollingInterval #define TUD_USBTMC_INT_DESCRIPTOR_LEN (7u) @@ -751,22 +627,22 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, // Vendor Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_VENDOR_DESC_LEN (9 + 7 + 7) +#define TUD_VENDOR_DESC_LEN (9+7+7) // Interface number, string index, EP Out & IN address, EP size -#define TUD_VENDOR_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ - /* Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_VENDOR_SPECIFIC, 0x00, 0x00, \ - _stridx, /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ - 0, /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_VENDOR_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ + /* Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_VENDOR_SPECIFIC, 0x00, 0x00, _stridx,\ + /* Endpoint Out */\ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ + /* Endpoint In */\ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // DFU Runtime Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_DFU_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) +#define TUD_DFU_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC) #define TUD_DFU_APP_SUBCLASS (APP_SUBCLASS_DFU_RUNTIME) // Length of template descriptr: 18 bytes @@ -774,87 +650,91 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, // DFU runtime descriptor // Interface number, string index, attributes, detach timeout, transfer size -#define TUD_DFU_RT_DESCRIPTOR(_itfnum, _stridx, _attr, _timeout, _xfer_size) \ - /* Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, \ - DFU_PROTOCOL_RT, _stridx, /* Function */ \ - 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), \ - U16_TO_U8S_LE(0x0101) +#define TUD_DFU_RT_DESCRIPTOR(_itfnum, _stridx, _attr, _timeout, _xfer_size) \ + /* Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, DFU_PROTOCOL_RT, _stridx, \ + /* Function */ \ + 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), U16_TO_U8S_LE(0x0101) //--------------------------------------------------------------------+ // DFU Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 9 bytes + number of alternatives * 9 -#define TUD_DFU_DESC_LEN(_alt_count) (9 + (_alt_count)*9) +#define TUD_DFU_DESC_LEN(_alt_count) (9 + (_alt_count) * 9) // Interface number, Alternate count, starting string index, attributes, detach timeout, transfer size // Note: Alternate count must be numeric or macro, string index is increased by one for each Alt interface -#define TUD_DFU_DESCRIPTOR(_itfnum, _alt_count, _stridx, _attr, _timeout, _xfer_size) \ - TU_XSTRCAT(_TUD_DFU_ALT_, _alt_count) \ - (_itfnum, 0, _stridx), /* Function */ \ - 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), \ - U16_TO_U8S_LE(0x0101) +#define TUD_DFU_DESCRIPTOR(_itfnum, _alt_count, _stridx, _attr, _timeout, _xfer_size) \ + TU_XSTRCAT(_TUD_DFU_ALT_,_alt_count)(_itfnum, 0, _stridx), \ + /* Function */ \ + 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), U16_TO_U8S_LE(0x0101) -#define _TUD_DFU_ALT(_itfnum, _alt, _stridx) \ - /* Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, \ - DFU_PROTOCOL_DFU, _stridx +#define _TUD_DFU_ALT(_itfnum, _alt, _stridx) \ + /* Interface */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, DFU_PROTOCOL_DFU, _stridx -#define _TUD_DFU_ALT_1(_itfnum, _alt_count, _stridx) _TUD_DFU_ALT(_itfnum, _alt_count, _stridx) +#define _TUD_DFU_ALT_1(_itfnum, _alt_count, _stridx) \ + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx) #define _TUD_DFU_ALT_2(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_1(_itfnum, _alt_count + 1, _stridx + 1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ + _TUD_DFU_ALT_1(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_3(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_2(_itfnum, _alt_count + 1, _stridx + 1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ + _TUD_DFU_ALT_2(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_4(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_3(_itfnum, _alt_count + 1, _stridx + 1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ + _TUD_DFU_ALT_3(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_5(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_4(_itfnum, _alt_count + 1, _stridx + 1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ + _TUD_DFU_ALT_4(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_6(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_5(_itfnum, _alt_count + 1, _stridx + 1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ + _TUD_DFU_ALT_5(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_7(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_6(_itfnum, _alt_count + 1, _stridx + 1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ + _TUD_DFU_ALT_6(_itfnum, _alt_count+1, _stridx+1) #define _TUD_DFU_ALT_8(_itfnum, _alt_count, _stridx) \ - _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), _TUD_DFU_ALT_7(_itfnum, _alt_count + 1, _stridx + 1) + _TUD_DFU_ALT(_itfnum, _alt_count, _stridx), \ + _TUD_DFU_ALT_7(_itfnum, _alt_count+1, _stridx+1) //--------------------------------------------------------------------+ // CDC-ECM Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor: 71 bytes -#define TUD_CDC_ECM_DESC_LEN (8 + 9 + 5 + 5 + 13 + 7 + 9 + 9 + 7 + 7) +#define TUD_CDC_ECM_DESC_LEN (8+9+5+5+13+7+9+9+7+7) // CDC-ECM Descriptor Template // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. -#define TUD_CDC_ECM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, \ - _epout, _epin, _epsize, _maxsegmentsize) \ - /* Interface Association */ \ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, \ - CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, 0, /* CDC Control Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, \ - CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, _desc_stridx, /* CDC-ECM Header */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, \ - U16_TO_U8S_LE(0x0120), /* CDC-ECM Union */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, \ - (uint8_t)((_itfnum) + 1), /* CDC-ECM Functional Descriptor */ \ - 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, \ - U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0, /* Endpoint Notification */ \ - 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), \ - 1, /* CDC Data Interface (default inactive) */ \ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 0, TUSB_CLASS_CDC_DATA, 0, 0, \ - 0, /* CDC Data Interface (alternative active) */ \ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 1, 2, TUSB_CLASS_CDC_DATA, 0, 0, \ - 0, /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ - 0, /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_CDC_ECM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize, _maxsegmentsize) \ + /* Interface Association */\ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, 0,\ + /* CDC Control Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_ETHERNET_CONTROL_MODEL, 0, _desc_stridx,\ + /* CDC-ECM Header */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0120),\ + /* CDC-ECM Union */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ + /* CDC-ECM Functional Descriptor */\ + 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0,\ + /* Endpoint Notification */\ + 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 1,\ + /* CDC Data Interface (default inactive) */\ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 0, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ + /* CDC Data Interface (alternative active) */\ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 1, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ + /* Endpoint In */\ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ + /* Endpoint Out */\ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // RNDIS Descriptor Templates @@ -862,142 +742,132 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, #if 0 /* Windows XP */ -#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_CDC +#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_CDC #define TUD_RNDIS_ITF_SUBCLASS CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL #define TUD_RNDIS_ITF_PROTOCOL 0xFF /* CDC_COMM_PROTOCOL_MICROSOFT_RNDIS */ #else /* Windows 7+ */ -#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_WIRELESS_CONTROLLER +#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_WIRELESS_CONTROLLER #define TUD_RNDIS_ITF_SUBCLASS 0x01 #define TUD_RNDIS_ITF_PROTOCOL 0x03 #endif // Length of template descriptor: 66 bytes -#define TUD_RNDIS_DESC_LEN (8 + 9 + 5 + 5 + 4 + 5 + 7 + 9 + 7 + 7) +#define TUD_RNDIS_DESC_LEN (8+9+5+5+4+5+7+9+7+7) // RNDIS Descriptor Template // Interface number, string index, EP notification address and size, EP data address (out, in) and size. #define TUD_RNDIS_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ - /* Interface Association */ \ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, \ - TUD_RNDIS_ITF_PROTOCOL, 0, /* CDC Control Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, \ - TUD_RNDIS_ITF_PROTOCOL, _stridx, /* CDC-ACM Header */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, \ - U16_TO_U8S_LE(0x0110), /* CDC Call Management */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, \ - (uint8_t)((_itfnum) + 1), /* ACM */ \ - 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 0, /* CDC Union */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, \ - (uint8_t)((_itfnum) + 1), /* Endpoint Notification */ \ - 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), \ - 1, /* CDC Data Interface */ \ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, \ - 0, /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ - 0, /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 + /* Interface Association */\ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, TUD_RNDIS_ITF_PROTOCOL, 0,\ + /* CDC Control Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUD_RNDIS_ITF_CLASS, TUD_RNDIS_ITF_SUBCLASS, TUD_RNDIS_ITF_PROTOCOL, _stridx,\ + /* CDC-ACM Header */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0110),\ + /* CDC Call Management */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, (uint8_t)((_itfnum) + 1),\ + /* ACM */\ + 4, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT, 0,\ + /* CDC Union */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ + /* Endpoint Notification */\ + 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 1,\ + /* CDC Data Interface */\ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\ + /* Endpoint In */\ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ + /* Endpoint Out */\ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 //--------------------------------------------------------------------+ // Bluetooth Radio Descriptor Templates //--------------------------------------------------------------------+ -#define TUD_BT_APP_CLASS (TUSB_CLASS_WIRELESS_CONTROLLER) -#define TUD_BT_APP_SUBCLASS 0x01 -#define TUD_BT_PROTOCOL_PRIMARY_CONTROLLER 0x01 -#define TUD_BT_PROTOCOL_AMP_CONTROLLER 0x02 +#define TUD_BT_APP_CLASS (TUSB_CLASS_WIRELESS_CONTROLLER) +#define TUD_BT_APP_SUBCLASS 0x01 +#define TUD_BT_PROTOCOL_PRIMARY_CONTROLLER 0x01 +#define TUD_BT_PROTOCOL_AMP_CONTROLLER 0x02 // Length of template descriptor: 38 bytes + number of ISO alternatives * 23 #define TUD_BTH_DESC_LEN (8 + 9 + 7 + 7 + 7 + (CFG_TUD_BTH_ISO_ALT_COUNT) * (9 + 7 + 7)) /* Primary Interface */ -#define TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, \ - _ep_out, _ep_size) \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 3, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, \ - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, _stridx, /* Endpoint In for events */ \ - 7, TUSB_DESC_ENDPOINT, _ep_evt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_evt_size), \ - _ep_evt_interval, /* Endpoint In for ACL data */ \ - 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), \ - 1, /* Endpoint Out for ACL data */ \ - 7, TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), 1 - -#define TUD_BTH_ISO_ITF(_itfnum, _alt, _ep_in, _ep_out, _n) \ - , /* Interface with 2 endpoints */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, \ - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0, /* Isochronous endpoints */ \ - 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1, 7, \ - TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1 +#define TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size) \ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 3, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, _stridx, \ + /* Endpoint In for events */ \ + 7, TUSB_DESC_ENDPOINT, _ep_evt, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_evt_size), _ep_evt_interval, \ + /* Endpoint In for ACL data */ \ + 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), 1, \ + /* Endpoint Out for ACL data */ \ + 7, TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_BULK, U16_TO_U8S_LE(_ep_size), 1 + +#define TUD_BTH_ISO_ITF(_itfnum, _alt, _ep_in, _ep_out, _n) ,\ + /* Interface with 2 endpoints */ \ + 9, TUSB_DESC_INTERFACE, _itfnum, _alt, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0, \ + /* Isochronous endpoints */ \ + 7, TUSB_DESC_ENDPOINT, _ep_in, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1, \ + 7, TUSB_DESC_ENDPOINT, _ep_out, TUSB_XFER_ISOCHRONOUS, U16_TO_U8S_LE(_n), 1 #define _FIRST(a, ...) a #define _REST(a, ...) __VA_ARGS__ #define TUD_BTH_ISO_ITF_0(_itfnum, ...) -#define TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, ...) \ - TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-1, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, ...) \ - TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-2, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, ...) \ - TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-3, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, ...) \ - TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-4, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, ...) \ - TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-5, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) -#define TUD_BTH_ISO_ITF_6(_itfnum, _ep_in, _ep_out, ...) \ - TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT)-6, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ - TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 1, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 2, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_1(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 3, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_2(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 4, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_3(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 5, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_4(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) +#define TUD_BTH_ISO_ITF_6(_itfnum, _ep_in, _ep_out, ...) TUD_BTH_ISO_ITF(_itfnum, (CFG_TUD_BTH_ISO_ALT_COUNT) - 6, _ep_in, _ep_out, _FIRST(__VA_ARGS__)) \ + TUD_BTH_ISO_ITF_5(_itfnum, _ep_in, _ep_out, _REST(__VA_ARGS__)) #define TUD_BTH_ISO_ITFS(_itfnum, _ep_in, _ep_out, ...) \ - TU_XSTRCAT(TUD_BTH_ISO_ITF_, CFG_TUD_BTH_ISO_ALT_COUNT)(_itfnum, _ep_in, _ep_out, __VA_ARGS__) + TU_XSTRCAT(TUD_BTH_ISO_ITF_, CFG_TUD_BTH_ISO_ALT_COUNT)(_itfnum, _ep_in, _ep_out, __VA_ARGS__) // BT Primary controller descriptor // Interface number, string index, attributes, event endpoint, event endpoint size, interval, data in, data out, data endpoint size, iso endpoint sizes // TODO BTH should also use IAD like CDC for composite device -#define TUD_BTH_DESCRIPTOR(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, \ - _ep_out, _ep_size, ...) \ - /* Interface Associate */ \ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, \ - TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0, \ - TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, \ - _ep_out, _ep_size) \ - TUD_BTH_ISO_ITFS(_itfnum + 1, _ep_in + 1, _ep_out + 1, __VA_ARGS__) +#define TUD_BTH_DESCRIPTOR(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size,...) \ + /* Interface Associate */\ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUD_BT_APP_CLASS, TUD_BT_APP_SUBCLASS, TUD_BT_PROTOCOL_PRIMARY_CONTROLLER, 0,\ + TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size) \ + TUD_BTH_ISO_ITFS(_itfnum + 1, _ep_in + 1, _ep_out + 1, __VA_ARGS__) //--------------------------------------------------------------------+ // CDC-NCM Descriptor Templates //--------------------------------------------------------------------+ // Length of template descriptor -#define TUD_CDC_NCM_DESC_LEN (8 + 9 + 5 + 5 + 13 + 6 + 7 + 9 + 9 + 7 + 7) +#define TUD_CDC_NCM_DESC_LEN (8+9+5+5+13+6+7+9+9+7+7) // CDC-ECM Descriptor Template // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. -#define TUD_CDC_NCM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, \ - _epout, _epin, _epsize, _maxsegmentsize) \ - /* Interface Association */ \ - 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, \ - CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, 0, /* CDC Control Interface */ \ - 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, \ - CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, _desc_stridx, /* CDC-NCM Header */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, \ - U16_TO_U8S_LE(0x0110), /* CDC-NCM Union */ \ - 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, \ - (uint8_t)((_itfnum) + 1), /* CDC-NCM Functional Descriptor */ \ - 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, \ - U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0, /* CDC-NCM Functional Descriptor */ \ - 6, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_NCM, U16_TO_U8S_LE(0x0100), \ - 0, /* Endpoint Notification */ \ - 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), \ - 50, /* CDC Data Interface (default inactive) */ \ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 0, 0, TUSB_CLASS_CDC_DATA, 0, \ - NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0, /* CDC Data Interface (alternative active) */ \ - 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum) + 1), 1, 2, TUSB_CLASS_CDC_DATA, 0, \ - NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0, /* Endpoint In */ \ - 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), \ - 0, /* Endpoint Out */ \ - 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 +#define TUD_CDC_NCM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize, _maxsegmentsize) \ + /* Interface Association */\ + 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, 0,\ + /* CDC Control Interface */\ + 9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, _desc_stridx,\ + /* CDC-NCM Header */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0110),\ + /* CDC-NCM Union */\ + 5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\ + /* CDC-NCM Functional Descriptor */\ + 13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0, \ + /* CDC-NCM Functional Descriptor */\ + 6, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_NCM, U16_TO_U8S_LE(0x0100), 0, \ + /* Endpoint Notification */\ + 7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 50,\ + /* CDC Data Interface (default inactive) */\ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 0, TUSB_CLASS_CDC_DATA, 0, NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0,\ + /* CDC Data Interface (alternative active) */\ + 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 1, 2, TUSB_CLASS_CDC_DATA, 0, NCM_DATA_PROTOCOL_NETWORK_TRANSFER_BLOCK, 0,\ + /* Endpoint In */\ + 7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\ + /* Endpoint Out */\ + 7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0 #ifdef __cplusplus } diff --git a/Libraries/tinyusb/src/device/usbd_control.c b/Libraries/tinyusb/src/device/usbd_control.c index 3d82edc9f82..35cce1f7ee5 100644 --- a/Libraries/tinyusb/src/device/usbd_control.c +++ b/Libraries/tinyusb/src/device/usbd_control.c @@ -35,10 +35,9 @@ //--------------------------------------------------------------------+ // Callback weak stubs (called if application does not provide) //--------------------------------------------------------------------+ -TU_ATTR_WEAK void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const *request) -{ - (void)rhport; - (void)request; +TU_ATTR_WEAK void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const* request) { + (void) rhport; + (void) request; } //--------------------------------------------------------------------+ @@ -49,183 +48,175 @@ TU_ATTR_WEAK void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request extern void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback); #endif -enum { EDPT_CTRL_OUT = 0x00, EDPT_CTRL_IN = 0x80 }; +enum { + EDPT_CTRL_OUT = 0x00, + EDPT_CTRL_IN = 0x80 +}; typedef struct { - tusb_control_request_t request; - uint8_t *buffer; - uint16_t data_len; - uint16_t total_xferred; - usbd_control_xfer_cb_t complete_cb; + tusb_control_request_t request; + uint8_t* buffer; + uint16_t data_len; + uint16_t total_xferred; + usbd_control_xfer_cb_t complete_cb; } usbd_control_xfer_t; tu_static usbd_control_xfer_t _ctrl_xfer; -CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN tu_static uint8_t _usbd_ctrl_buf[CFG_TUD_ENDPOINT0_SIZE]; +CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN +tu_static uint8_t _usbd_ctrl_buf[CFG_TUD_ENDPOINT0_SIZE]; //--------------------------------------------------------------------+ // Application API //--------------------------------------------------------------------+ // Queue ZLP status transaction -static inline bool _status_stage_xact(uint8_t rhport, tusb_control_request_t const *request) -{ - // Opposite to endpoint in Data Phase - uint8_t const ep_addr = request->bmRequestType_bit.direction ? EDPT_CTRL_OUT : EDPT_CTRL_IN; - return usbd_edpt_xfer(rhport, ep_addr, NULL, 0); +static inline bool _status_stage_xact(uint8_t rhport, tusb_control_request_t const* request) { + // Opposite to endpoint in Data Phase + uint8_t const ep_addr = request->bmRequestType_bit.direction ? EDPT_CTRL_OUT : EDPT_CTRL_IN; + return usbd_edpt_xfer(rhport, ep_addr, NULL, 0); } // Status phase -bool tud_control_status(uint8_t rhport, tusb_control_request_t const *request) -{ - _ctrl_xfer.request = (*request); - _ctrl_xfer.buffer = NULL; - _ctrl_xfer.total_xferred = 0; - _ctrl_xfer.data_len = 0; - - return _status_stage_xact(rhport, request); +bool tud_control_status(uint8_t rhport, tusb_control_request_t const* request) { + _ctrl_xfer.request = (*request); + _ctrl_xfer.buffer = NULL; + _ctrl_xfer.total_xferred = 0; + _ctrl_xfer.data_len = 0; + + return _status_stage_xact(rhport, request); } // Queue a transaction in Data Stage // Each transaction has up to Endpoint0's max packet size. // This function can also transfer an zero-length packet -static bool _data_stage_xact(uint8_t rhport) -{ - uint16_t const xact_len = - tu_min16(_ctrl_xfer.data_len - _ctrl_xfer.total_xferred, CFG_TUD_ENDPOINT0_SIZE); - - uint8_t ep_addr = EDPT_CTRL_OUT; - - if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_IN) { - ep_addr = EDPT_CTRL_IN; - if (xact_len) { - TU_VERIFY(0 == tu_memcpy_s(_usbd_ctrl_buf, CFG_TUD_ENDPOINT0_SIZE, _ctrl_xfer.buffer, - xact_len)); - } +static bool _data_stage_xact(uint8_t rhport) { + uint16_t const xact_len = tu_min16(_ctrl_xfer.data_len - _ctrl_xfer.total_xferred, + CFG_TUD_ENDPOINT0_SIZE); + + uint8_t ep_addr = EDPT_CTRL_OUT; + + if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_IN) { + ep_addr = EDPT_CTRL_IN; + if (xact_len) { + TU_VERIFY(0 == tu_memcpy_s(_usbd_ctrl_buf, CFG_TUD_ENDPOINT0_SIZE, _ctrl_xfer.buffer, xact_len)); } + } - return usbd_edpt_xfer(rhport, ep_addr, xact_len ? _usbd_ctrl_buf : NULL, xact_len); + return usbd_edpt_xfer(rhport, ep_addr, xact_len ? _usbd_ctrl_buf : NULL, xact_len); } // Transmit data to/from the control endpoint. // If the request's wLength is zero, a status packet is sent instead. -bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const *request, void *buffer, - uint16_t len) -{ - _ctrl_xfer.request = (*request); - _ctrl_xfer.buffer = (uint8_t *)buffer; - _ctrl_xfer.total_xferred = 0U; - _ctrl_xfer.data_len = tu_min16(len, request->wLength); - - if (request->wLength > 0U) { - if (_ctrl_xfer.data_len > 0U) { - TU_ASSERT(buffer); - } - - // TU_LOG2(" Control total data length is %u bytes\r\n", _ctrl_xfer.data_len); - - // Data stage - TU_ASSERT(_data_stage_xact(rhport)); - } else { - // Status stage - TU_ASSERT(_status_stage_xact(rhport, request)); +bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const* request, void* buffer, uint16_t len) { + _ctrl_xfer.request = (*request); + _ctrl_xfer.buffer = (uint8_t*) buffer; + _ctrl_xfer.total_xferred = 0U; + _ctrl_xfer.data_len = tu_min16(len, request->wLength); + + if (request->wLength > 0U) { + if (_ctrl_xfer.data_len > 0U) { + TU_ASSERT(buffer); } - return true; +// TU_LOG2(" Control total data length is %u bytes\r\n", _ctrl_xfer.data_len); + + // Data stage + TU_ASSERT(_data_stage_xact(rhport)); + } else { + // Status stage + TU_ASSERT(_status_stage_xact(rhport, request)); + } + + return true; } //--------------------------------------------------------------------+ // USBD API //--------------------------------------------------------------------+ void usbd_control_reset(void); -void usbd_control_set_request(tusb_control_request_t const *request); +void usbd_control_set_request(tusb_control_request_t const* request); void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp); -bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, - uint32_t xferred_bytes); +bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); -void usbd_control_reset(void) -{ - tu_varclr(&_ctrl_xfer); +void usbd_control_reset(void) { + tu_varclr(&_ctrl_xfer); } // Set complete callback -void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp) -{ - _ctrl_xfer.complete_cb = fp; +void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp) { + _ctrl_xfer.complete_cb = fp; } // for dcd_set_address where DCD is responsible for status response -void usbd_control_set_request(tusb_control_request_t const *request) -{ - _ctrl_xfer.request = (*request); - _ctrl_xfer.buffer = NULL; - _ctrl_xfer.total_xferred = 0; - _ctrl_xfer.data_len = 0; +void usbd_control_set_request(tusb_control_request_t const* request) { + _ctrl_xfer.request = (*request); + _ctrl_xfer.buffer = NULL; + _ctrl_xfer.total_xferred = 0; + _ctrl_xfer.data_len = 0; } // callback when a transaction complete on // - DATA stage of control endpoint or // - Status stage -bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, - uint32_t xferred_bytes) -{ - (void)result; - - // Endpoint Address is opposite to direction bit, this is Status Stage complete event - if (tu_edpt_dir(ep_addr) != _ctrl_xfer.request.bmRequestType_bit.direction) { - TU_ASSERT(0 == xferred_bytes); +bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { + (void) result; - // invoke optional dcd hook if available - dcd_edpt0_status_complete(rhport, &_ctrl_xfer.request); + // Endpoint Address is opposite to direction bit, this is Status Stage complete event + if (tu_edpt_dir(ep_addr) != _ctrl_xfer.request.bmRequestType_bit.direction) { + TU_ASSERT(0 == xferred_bytes); - if (_ctrl_xfer.complete_cb) { - // TODO refactor with usbd_driver_print_control_complete_name - _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_ACK, &_ctrl_xfer.request); - } + // invoke optional dcd hook if available + dcd_edpt0_status_complete(rhport, &_ctrl_xfer.request); - return true; + if (_ctrl_xfer.complete_cb) { + // TODO refactor with usbd_driver_print_control_complete_name + _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_ACK, &_ctrl_xfer.request); } - if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_OUT) { - TU_VERIFY(_ctrl_xfer.buffer); - memcpy(_ctrl_xfer.buffer, _usbd_ctrl_buf, xferred_bytes); - TU_LOG_MEM(CFG_TUD_LOG_LEVEL, _usbd_ctrl_buf, xferred_bytes, 2); + return true; + } + + if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_OUT) { + TU_VERIFY(_ctrl_xfer.buffer); + memcpy(_ctrl_xfer.buffer, _usbd_ctrl_buf, xferred_bytes); + TU_LOG_MEM(CFG_TUD_LOG_LEVEL, _usbd_ctrl_buf, xferred_bytes, 2); + } + + _ctrl_xfer.total_xferred += (uint16_t) xferred_bytes; + _ctrl_xfer.buffer += xferred_bytes; + + // Data Stage is complete when all request's length are transferred or + // a short packet is sent including zero-length packet. + if ((_ctrl_xfer.request.wLength == _ctrl_xfer.total_xferred) || + (xferred_bytes < CFG_TUD_ENDPOINT0_SIZE)) { + // DATA stage is complete + bool is_ok = true; + + // invoke complete callback if set + // callback can still stall control in status phase e.g out data does not make sense + if (_ctrl_xfer.complete_cb) { + #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL + usbd_driver_print_control_complete_name(_ctrl_xfer.complete_cb); + #endif + + is_ok = _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_DATA, &_ctrl_xfer.request); } - _ctrl_xfer.total_xferred += (uint16_t)xferred_bytes; - _ctrl_xfer.buffer += xferred_bytes; - - // Data Stage is complete when all request's length are transferred or - // a short packet is sent including zero-length packet. - if ((_ctrl_xfer.request.wLength == _ctrl_xfer.total_xferred) || - (xferred_bytes < CFG_TUD_ENDPOINT0_SIZE)) { - // DATA stage is complete - bool is_ok = true; - - // invoke complete callback if set - // callback can still stall control in status phase e.g out data does not make sense - if (_ctrl_xfer.complete_cb) { -#if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL - usbd_driver_print_control_complete_name(_ctrl_xfer.complete_cb); -#endif - - is_ok = _ctrl_xfer.complete_cb(rhport, CONTROL_STAGE_DATA, &_ctrl_xfer.request); - } - - if (is_ok) { - // Send status - TU_ASSERT(_status_stage_xact(rhport, &_ctrl_xfer.request)); - } else { - // Stall both IN and OUT control endpoint - dcd_edpt_stall(rhport, EDPT_CTRL_OUT); - dcd_edpt_stall(rhport, EDPT_CTRL_IN); - } + if (is_ok) { + // Send status + TU_ASSERT(_status_stage_xact(rhport, &_ctrl_xfer.request)); } else { - // More data to transfer - TU_ASSERT(_data_stage_xact(rhport)); + // Stall both IN and OUT control endpoint + dcd_edpt_stall(rhport, EDPT_CTRL_OUT); + dcd_edpt_stall(rhport, EDPT_CTRL_IN); } + } else { + // More data to transfer + TU_ASSERT(_data_stage_xact(rhport)); + } - return true; + return true; } #endif diff --git a/Libraries/tinyusb/src/device/usbd_pvt.h b/Libraries/tinyusb/src/device/usbd_pvt.h index da521b2d2fc..335d46cd89f 100644 --- a/Libraries/tinyusb/src/device/usbd_pvt.h +++ b/Libraries/tinyusb/src/device/usbd_pvt.h @@ -30,18 +30,18 @@ #include "common/tusb_fifo.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif -#define TU_LOG_USBD(...) TU_LOG(CFG_TUD_LOG_LEVEL, __VA_ARGS__) +#define TU_LOG_USBD(...) TU_LOG(CFG_TUD_LOG_LEVEL, __VA_ARGS__) //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF PROTYPES //--------------------------------------------------------------------+ typedef enum { - SOF_CONSUMER_USER = 0, - SOF_CONSUMER_AUDIO, + SOF_CONSUMER_USER = 0, + SOF_CONSUMER_AUDIO, } sof_consumer_t; //--------------------------------------------------------------------+ @@ -49,23 +49,22 @@ typedef enum { //--------------------------------------------------------------------+ typedef struct { - char const *name; - void (*init)(void); - bool (*deinit)(void); - void (*reset)(uint8_t rhport); - uint16_t (*open)(uint8_t rhport, tusb_desc_interface_t const *desc_intf, uint16_t max_len); - bool (*control_xfer_cb)(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request); - bool (*xfer_cb)(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); - void (*sof)(uint8_t rhport, uint32_t frame_count); // optional + char const* name; + void (* init ) (void); + bool (* deinit ) (void); + void (* reset ) (uint8_t rhport); + uint16_t (* open ) (uint8_t rhport, tusb_desc_interface_t const * desc_intf, uint16_t max_len); + bool (* control_xfer_cb ) (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); + bool (* xfer_cb ) (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); + void (* sof ) (uint8_t rhport, uint32_t frame_count); // optional } usbd_class_driver_t; // Invoked when initializing device stack to get additional class drivers. // Can be implemented by application to extend/overwrite class driver support. // Note: The drivers array must be accessible at all time when stack is active -usbd_class_driver_t const *usbd_app_driver_get_cb(uint8_t *driver_count) TU_ATTR_WEAK; +usbd_class_driver_t const* usbd_app_driver_get_cb(uint8_t* driver_count) TU_ATTR_WEAK; -typedef bool (*usbd_control_xfer_cb_t)(uint8_t rhport, uint8_t stage, - tusb_control_request_t const *request); +typedef bool (*usbd_control_xfer_cb_t)(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); void usbd_int_set(bool enabled); @@ -75,16 +74,16 @@ void usbd_int_set(bool enabled); //--------------------------------------------------------------------+ // Open an endpoint -bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep); +bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); // Close an endpoint void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr); // Submit a usb transfer -bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes); +bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); // Submit a usb ISO transfer by use of a FIFO (ring buffer) - all bytes in FIFO get transmitted -bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes); +bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes); // Claim an endpoint before submitting a transfer. // If caller does not make any transfer, it must release endpoint for others. @@ -109,12 +108,12 @@ bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr); bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size); // Configure and enable an ISO endpoint according to descriptor -bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *p_endpoint_desc); +bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc); // Check if endpoint is ready (not busy and not stalled) -TU_ATTR_ALWAYS_INLINE static inline bool usbd_edpt_ready(uint8_t rhport, uint8_t ep_addr) -{ - return !usbd_edpt_busy(rhport, ep_addr) && !usbd_edpt_stalled(rhport, ep_addr); +TU_ATTR_ALWAYS_INLINE static inline +bool usbd_edpt_ready(uint8_t rhport, uint8_t ep_addr) { + return !usbd_edpt_busy(rhport, ep_addr) && !usbd_edpt_stalled(rhport, ep_addr); } // Enable SOF interrupt @@ -124,12 +123,11 @@ void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en); /* Helper *------------------------------------------------------------------*/ -bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const *p_desc, uint8_t ep_count, uint8_t xfer_type, - uint8_t *ep_out, uint8_t *ep_in); +bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const* p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t* ep_out, uint8_t* ep_in); void usbd_defer_func(osal_task_func_t func, void *param, bool in_isr); #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/osal/osal.h b/Libraries/tinyusb/src/osal/osal.h index b291a8be27b..8f45ea5c18a 100644 --- a/Libraries/tinyusb/src/osal/osal.h +++ b/Libraries/tinyusb/src/osal/osal.h @@ -28,47 +28,45 @@ #define _TUSB_OSAL_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif #include "common/tusb_common.h" -typedef void (*osal_task_func_t)(void *); +typedef void (*osal_task_func_t)( void * ); // Timeout -#define OSAL_TIMEOUT_NOTIMEOUT (0) // Return immediately -#define OSAL_TIMEOUT_NORMAL (10) // Default timeout -#define OSAL_TIMEOUT_WAIT_FOREVER (UINT32_MAX) // Wait forever -#define OSAL_TIMEOUT_CONTROL_XFER OSAL_TIMEOUT_WAIT_FOREVER +#define OSAL_TIMEOUT_NOTIMEOUT (0) // Return immediately +#define OSAL_TIMEOUT_NORMAL (10) // Default timeout +#define OSAL_TIMEOUT_WAIT_FOREVER (UINT32_MAX) // Wait forever +#define OSAL_TIMEOUT_CONTROL_XFER OSAL_TIMEOUT_WAIT_FOREVER // Mutex is required when using a preempted RTOS or MCU has multiple cores #if (CFG_TUSB_OS == OPT_OS_NONE) && !TUP_MCU_MULTIPLE_CORE -#define OSAL_MUTEX_REQUIRED 0 -#define OSAL_MUTEX_DEF(_name) \ -uint8_t: \ - 0 + #define OSAL_MUTEX_REQUIRED 0 + #define OSAL_MUTEX_DEF(_name) uint8_t :0 #else -#define OSAL_MUTEX_REQUIRED 1 -#define OSAL_MUTEX_DEF(_name) osal_mutex_def_t _name + #define OSAL_MUTEX_REQUIRED 1 + #define OSAL_MUTEX_DEF(_name) osal_mutex_def_t _name #endif // OS thin implementation #if CFG_TUSB_OS == OPT_OS_NONE -#include "osal_none.h" + #include "osal_none.h" #elif CFG_TUSB_OS == OPT_OS_FREERTOS -#include "osal_freertos.h" + #include "osal_freertos.h" #elif CFG_TUSB_OS == OPT_OS_MYNEWT -#include "osal_mynewt.h" + #include "osal_mynewt.h" #elif CFG_TUSB_OS == OPT_OS_PICO -#include "osal_pico.h" + #include "osal_pico.h" #elif CFG_TUSB_OS == OPT_OS_RTTHREAD -#include "osal_rtthread.h" + #include "osal_rtthread.h" #elif CFG_TUSB_OS == OPT_OS_RTX4 -#include "osal_rtx4.h" + #include "osal_rtx4.h" #elif CFG_TUSB_OS == OPT_OS_CUSTOM -#include "tusb_os_custom.h" // implemented by application + #include "tusb_os_custom.h" // implemented by application #else -#error OS is not supported yet + #error OS is not supported yet #endif //--------------------------------------------------------------------+ @@ -95,7 +93,7 @@ uint8_t: \ //--------------------------------------------------------------------+ #ifdef __cplusplus -} + } #endif #endif /* _TUSB_OSAL_H_ */ diff --git a/Libraries/tinyusb/src/osal/osal_freertos.h b/Libraries/tinyusb/src/osal/osal_freertos.h index 4bec88224de..a3a0f3a3fed 100644 --- a/Libraries/tinyusb/src/osal/osal_freertos.h +++ b/Libraries/tinyusb/src/osal/osal_freertos.h @@ -28,10 +28,10 @@ #define TUSB_OSAL_FREERTOS_H_ // FreeRTOS Headers -#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH, FreeRTOS.h) -#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH, semphr.h) -#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH, queue.h) -#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH, task.h) +#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH,FreeRTOS.h) +#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH,semphr.h) +#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH,queue.h) +#include TU_INCLUDE_PATH(CFG_TUSB_OS_INC_PATH,task.h) #ifdef __cplusplus extern "C" { @@ -42,210 +42,184 @@ extern "C" { //--------------------------------------------------------------------+ #if configSUPPORT_STATIC_ALLOCATION -typedef StaticSemaphore_t osal_semaphore_def_t; -typedef StaticSemaphore_t osal_mutex_def_t; + typedef StaticSemaphore_t osal_semaphore_def_t; + typedef StaticSemaphore_t osal_mutex_def_t; #else -// not used therefore defined to smallest possible type to save space -typedef uint8_t osal_semaphore_def_t; -typedef uint8_t osal_mutex_def_t; + // not used therefore defined to smallest possible type to save space + typedef uint8_t osal_semaphore_def_t; + typedef uint8_t osal_mutex_def_t; #endif typedef SemaphoreHandle_t osal_semaphore_t; typedef SemaphoreHandle_t osal_mutex_t; typedef QueueHandle_t osal_queue_t; -typedef struct { - uint16_t depth; - uint16_t item_sz; - void *buf; +typedef struct +{ + uint16_t depth; + uint16_t item_sz; + void* buf; -#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE > 0) - char const *name; +#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE>0) + char const* name; #endif #if configSUPPORT_STATIC_ALLOCATION - StaticQueue_t sq; + StaticQueue_t sq; #endif } osal_queue_def_t; -#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE > 0) -#define _OSAL_Q_NAME(_name) .name = #_name +#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE>0) + #define _OSAL_Q_NAME(_name) .name = #_name #else -#define _OSAL_Q_NAME(_name) + #define _OSAL_Q_NAME(_name) #endif // _int_set is not used with an RTOS -#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - static _type _name##_##buf[_depth]; \ - osal_queue_def_t _name = { \ - .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, _OSAL_Q_NAME(_name) \ - } +#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ + static _type _name##_##buf[_depth];\ + osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, _OSAL_Q_NAME(_name) } //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline uint32_t _osal_ms2tick(uint32_t msec) -{ - if (msec == OSAL_TIMEOUT_WAIT_FOREVER) - return portMAX_DELAY; - if (msec == 0) - return 0; +TU_ATTR_ALWAYS_INLINE static inline uint32_t _osal_ms2tick(uint32_t msec) { + if ( msec == OSAL_TIMEOUT_WAIT_FOREVER ) return portMAX_DELAY; + if ( msec == 0 ) return 0; - uint32_t ticks = pdMS_TO_TICKS(msec); + uint32_t ticks = pdMS_TO_TICKS(msec); - // configTICK_RATE_HZ is less than 1000 and 1 tick > 1 ms - // we still need to delay at least 1 tick - if (ticks == 0) - ticks = 1; + // configTICK_RATE_HZ is less than 1000 and 1 tick > 1 ms + // we still need to delay at least 1 tick + if ( ticks == 0 ) ticks = 1; - return ticks; + return ticks; } -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) -{ - vTaskDelay(pdMS_TO_TICKS(msec)); +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { + vTaskDelay(pdMS_TO_TICKS(msec)); } //--------------------------------------------------------------------+ // Semaphore API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t -osal_semaphore_create(osal_semaphore_def_t *semdef) -{ +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t *semdef) { #if configSUPPORT_STATIC_ALLOCATION - return xSemaphoreCreateBinaryStatic(semdef); + return xSemaphoreCreateBinaryStatic(semdef); #else - (void)semdef; - return xSemaphoreCreateBinary(); + (void) semdef; + return xSemaphoreCreateBinary(); #endif } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) -{ - vSemaphoreDelete(semd_hdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { + vSemaphoreDelete(semd_hdl); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) -{ - if (!in_isr) { - return xSemaphoreGive(sem_hdl) != 0; - } else { - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - BaseType_t res = xSemaphoreGiveFromISR(sem_hdl, &xHigherPriorityTaskWoken); +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { + if ( !in_isr ) { + return xSemaphoreGive(sem_hdl) != 0; + } else { + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + BaseType_t res = xSemaphoreGiveFromISR(sem_hdl, &xHigherPriorityTaskWoken); #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 - // not needed after https://github.com/espressif/esp-idf/commit/c5fd79547ac9b7bae06fa660e9f814d18d3390b7 - if (xHigherPriorityTaskWoken) - portYIELD_FROM_ISR(); + // not needed after https://github.com/espressif/esp-idf/commit/c5fd79547ac9b7bae06fa660e9f814d18d3390b7 + if ( xHigherPriorityTaskWoken ) portYIELD_FROM_ISR(); #else - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); #endif - return res != 0; - } + return res != 0; + } } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, - uint32_t msec) -{ - return xSemaphoreTake(sem_hdl, _osal_ms2tick(msec)); +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { + return xSemaphoreTake(sem_hdl, _osal_ms2tick(msec)); } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) -{ - xQueueReset(sem_hdl); +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) { + xQueueReset(sem_hdl); } //--------------------------------------------------------------------+ // MUTEX API (priority inheritance) //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) -{ +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) { #if configSUPPORT_STATIC_ALLOCATION - return xSemaphoreCreateMutexStatic(mdef); + return xSemaphoreCreateMutexStatic(mdef); #else - (void)mdef; - return xSemaphoreCreateMutex(); + (void) mdef; + return xSemaphoreCreateMutex(); #endif } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) -{ - vSemaphoreDelete(mutex_hdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { + vSemaphoreDelete(mutex_hdl); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) -{ - return osal_semaphore_wait(mutex_hdl, msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { + return osal_semaphore_wait(mutex_hdl, msec); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) -{ - return xSemaphoreGive(mutex_hdl); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { + return xSemaphoreGive(mutex_hdl); } //--------------------------------------------------------------------+ // QUEUE API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) -{ - osal_queue_t q; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { + osal_queue_t q; #if configSUPPORT_STATIC_ALLOCATION - q = xQueueCreateStatic(qdef->depth, qdef->item_sz, (uint8_t *)qdef->buf, &qdef->sq); + q = xQueueCreateStatic(qdef->depth, qdef->item_sz, (uint8_t*) qdef->buf, &qdef->sq); #else - q = xQueueCreate(qdef->depth, qdef->item_sz); + q = xQueueCreate(qdef->depth, qdef->item_sz); #endif -#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE > 0) - vQueueAddToRegistry(q, qdef->name); +#if defined(configQUEUE_REGISTRY_SIZE) && (configQUEUE_REGISTRY_SIZE>0) + vQueueAddToRegistry(q, qdef->name); #endif - return q; + return q; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) -{ - vQueueDelete(qhdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { + vQueueDelete(qhdl); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, - uint32_t msec) -{ - return xQueueReceive(qhdl, data, _osal_ms2tick(msec)); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { + return xQueueReceive(qhdl, data, _osal_ms2tick(msec)); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, - bool in_isr) -{ - if (!in_isr) { - return xQueueSendToBack(qhdl, data, OSAL_TIMEOUT_WAIT_FOREVER) != 0; - } else { - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - BaseType_t res = xQueueSendToBackFromISR(qhdl, data, &xHigherPriorityTaskWoken); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, bool in_isr) { + if ( !in_isr ) { + return xQueueSendToBack(qhdl, data, OSAL_TIMEOUT_WAIT_FOREVER) != 0; + } else { + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + BaseType_t res = xQueueSendToBackFromISR(qhdl, data, &xHigherPriorityTaskWoken); #if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 - // not needed after https://github.com/espressif/esp-idf/commit/c5fd79547ac9b7bae06fa660e9f814d18d3390b7 (IDF v5) - if (xHigherPriorityTaskWoken) - portYIELD_FROM_ISR(); + // not needed after https://github.com/espressif/esp-idf/commit/c5fd79547ac9b7bae06fa660e9f814d18d3390b7 (IDF v5) + if ( xHigherPriorityTaskWoken ) portYIELD_FROM_ISR(); #else - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); #endif - return res != 0; - } + return res != 0; + } } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) -{ - return uxQueueMessagesWaiting(qhdl) == 0; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { + return uxQueueMessagesWaiting(qhdl) == 0; } #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/osal/osal_mynewt.h b/Libraries/tinyusb/src/osal/osal_mynewt.h index 17cac209e97..16def0d2a49 100644 --- a/Libraries/tinyusb/src/osal/osal_mynewt.h +++ b/Libraries/tinyusb/src/osal/osal_mynewt.h @@ -30,81 +30,67 @@ #include "os/os.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) -{ - os_time_delay(os_time_ms_to_ticks32(msec)); +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { + os_time_delay( os_time_ms_to_ticks32(msec) ); } //--------------------------------------------------------------------+ // Semaphore API //--------------------------------------------------------------------+ -typedef struct os_sem osal_semaphore_def_t; -typedef struct os_sem *osal_semaphore_t; +typedef struct os_sem osal_semaphore_def_t; +typedef struct os_sem* osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t -osal_semaphore_create(osal_semaphore_def_t *semdef) -{ - return (os_sem_init(semdef, 0) == OS_OK) ? (osal_semaphore_t)semdef : NULL; +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) { + return (os_sem_init(semdef, 0) == OS_OK) ? (osal_semaphore_t) semdef : NULL; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) -{ - (void)semd_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { + (void) semd_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) -{ - (void)in_isr; - return os_sem_release(sem_hdl) == OS_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { + (void) in_isr; + return os_sem_release(sem_hdl) == OS_OK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, - uint32_t msec) -{ - uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? OS_TIMEOUT_NEVER : - os_time_ms_to_ticks32(msec); - return os_sem_pend(sem_hdl, ticks) == OS_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { + uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? OS_TIMEOUT_NEVER : os_time_ms_to_ticks32(msec); + return os_sem_pend(sem_hdl, ticks) == OS_OK; } -static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) -{ - // TODO implement later +static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) { + // TODO implement later } //--------------------------------------------------------------------+ // MUTEX API (priority inheritance) //--------------------------------------------------------------------+ typedef struct os_mutex osal_mutex_def_t; -typedef struct os_mutex *osal_mutex_t; +typedef struct os_mutex* osal_mutex_t; -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) -{ - return (os_mutex_init(mdef) == OS_OK) ? (osal_mutex_t)mdef : NULL; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { + return (os_mutex_init(mdef) == OS_OK) ? (osal_mutex_t) mdef : NULL; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) -{ - (void)mutex_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { + (void) mutex_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) -{ - uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? OS_TIMEOUT_NEVER : - os_time_ms_to_ticks32(msec); - return os_mutex_pend(mutex_hdl, ticks) == OS_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { + uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? OS_TIMEOUT_NEVER : os_time_ms_to_ticks32(msec); + return os_mutex_pend(mutex_hdl, ticks) == OS_OK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) -{ - return os_mutex_release(mutex_hdl) == OS_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { + return os_mutex_release(mutex_hdl) == OS_OK; } //--------------------------------------------------------------------+ @@ -112,91 +98,80 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd //--------------------------------------------------------------------+ // role device/host is used by OS NONE for mutex (disable usb isr) only -#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - static _type _name##_##buf[_depth]; \ - static struct os_event _name##_##evbuf[_depth]; \ - osal_queue_def_t _name = { \ - .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, .evbuf = _name##_##evbuf \ - }; +#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ + static _type _name##_##buf[_depth];\ + static struct os_event _name##_##evbuf[_depth];\ + osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, .evbuf = _name##_##evbuf};\ typedef struct { - uint16_t depth; - uint16_t item_sz; - void *buf; - void *evbuf; + uint16_t depth; + uint16_t item_sz; + void* buf; + void* evbuf; - struct os_mempool mpool; - struct os_mempool epool; + struct os_mempool mpool; + struct os_mempool epool; - struct os_eventq evq; -} osal_queue_def_t; + struct os_eventq evq; +}osal_queue_def_t; -typedef osal_queue_def_t *osal_queue_t; +typedef osal_queue_def_t* osal_queue_t; -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) -{ - if (OS_OK != os_mempool_init(&qdef->mpool, qdef->depth, qdef->item_sz, qdef->buf, "usb queue")) - return NULL; - if (OS_OK != os_mempool_init(&qdef->epool, qdef->depth, sizeof(struct os_event), qdef->evbuf, - "usb evqueue")) - return NULL; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { + if ( OS_OK != os_mempool_init(&qdef->mpool, qdef->depth, qdef->item_sz, qdef->buf, "usb queue") ) return NULL; + if ( OS_OK != os_mempool_init(&qdef->epool, qdef->depth, sizeof(struct os_event), qdef->evbuf, "usb evqueue") ) return NULL; - os_eventq_init(&qdef->evq); - return (osal_queue_t)qdef; + os_eventq_init(&qdef->evq); + return (osal_queue_t) qdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) -{ - (void)qhdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { + (void) qhdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, - uint32_t msec) -{ - (void)msec; // os_eventq_get() does not take timeout, always behave as msec = WAIT_FOREVER +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { + (void) msec; // os_eventq_get() does not take timeout, always behave as msec = WAIT_FOREVER - struct os_event *ev; - ev = os_eventq_get(&qhdl->evq); + struct os_event* ev; + ev = os_eventq_get(&qhdl->evq); - memcpy(data, ev->ev_arg, qhdl->item_sz); // copy message - os_memblock_put(&qhdl->mpool, ev->ev_arg); // put back mem block - os_memblock_put(&qhdl->epool, ev); // put back ev block + memcpy(data, ev->ev_arg, qhdl->item_sz); // copy message + os_memblock_put(&qhdl->mpool, ev->ev_arg); // put back mem block + os_memblock_put(&qhdl->epool, ev); // put back ev block - return true; + return true; } -static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, bool in_isr) -{ - (void)in_isr; +static inline bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in_isr) { + (void) in_isr; - // get a block from mem pool for data - void *ptr = os_memblock_get(&qhdl->mpool); - if (!ptr) - return false; - memcpy(ptr, data, qhdl->item_sz); + // get a block from mem pool for data + void* ptr = os_memblock_get(&qhdl->mpool); + if (!ptr) return false; + memcpy(ptr, data, qhdl->item_sz); - // get a block from event pool to put into queue - struct os_event *ev = (struct os_event *)os_memblock_get(&qhdl->epool); - if (!ev) { - os_memblock_put(&qhdl->mpool, ptr); - return false; - } - tu_memclr(ev, sizeof(struct os_event)); - ev->ev_arg = ptr; + // get a block from event pool to put into queue + struct os_event* ev = (struct os_event*) os_memblock_get(&qhdl->epool); + if (!ev) { + os_memblock_put(&qhdl->mpool, ptr); + return false; + } + tu_memclr(ev, sizeof(struct os_event)); + ev->ev_arg = ptr; - os_eventq_put(&qhdl->evq, ev); + os_eventq_put(&qhdl->evq, ev); - return true; + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) -{ - return STAILQ_EMPTY(&qhdl->evq.evq_list); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { + return STAILQ_EMPTY(&qhdl->evq.evq_list); } + #ifdef __cplusplus -} + } #endif #endif /* OSAL_MYNEWT_H_ */ diff --git a/Libraries/tinyusb/src/osal/osal_none.h b/Libraries/tinyusb/src/osal/osal_none.h index 144e77f1fd4..c93f7a86c9b 100644 --- a/Libraries/tinyusb/src/osal/osal_none.h +++ b/Libraries/tinyusb/src/osal/osal_none.h @@ -44,46 +44,40 @@ TU_ATTR_WEAK void osal_task_delay(uint32_t msec); // Binary Semaphore API //--------------------------------------------------------------------+ typedef struct { - volatile uint16_t count; + volatile uint16_t count; } osal_semaphore_def_t; -typedef osal_semaphore_def_t *osal_semaphore_t; +typedef osal_semaphore_def_t* osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t -osal_semaphore_create(osal_semaphore_def_t *semdef) -{ - semdef->count = 0; - return semdef; +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) { + semdef->count = 0; + return semdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) -{ - (void)semd_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { + (void) semd_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) -{ - (void)in_isr; - sem_hdl->count++; - return true; + +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { + (void) in_isr; + sem_hdl->count++; + return true; } // TODO blocking for now -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, - uint32_t msec) -{ - (void)msec; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { + (void) msec; - while (sem_hdl->count == 0) {} - sem_hdl->count--; + while (sem_hdl->count == 0) {} + sem_hdl->count--; - return true; + return true; } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) -{ - sem_hdl->count = 0; +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) { + sem_hdl->count = 0; } //--------------------------------------------------------------------+ @@ -97,33 +91,29 @@ typedef osal_semaphore_t osal_mutex_t; // Note: multiple cores MCUs usually do provide IPC API for mutex // or we can use std atomic function -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) -{ - mdef->count = 1; - return mdef; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { + mdef->count = 1; + return mdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) -{ - (void)mutex_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { + (void) mutex_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) -{ - return osal_semaphore_wait(mutex_hdl, msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock (osal_mutex_t mutex_hdl, uint32_t msec) { + return osal_semaphore_wait(mutex_hdl, msec); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) -{ - return osal_semaphore_post(mutex_hdl, false); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { + return osal_semaphore_post(mutex_hdl, false); } #else -#define osal_mutex_create(_mdef) (NULL) -#define osal_mutex_lock(_mutex_hdl, _ms) (true) -#define osal_mutex_unlock(_mutex_hdl) (true) +#define osal_mutex_create(_mdef) (NULL) +#define osal_mutex_lock(_mutex_hdl, _ms) (true) +#define osal_mutex_unlock(_mutex_hdl) (true) #endif @@ -133,77 +123,70 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd #include "common/tusb_fifo.h" typedef struct { - void (*interrupt_set)(bool); - tu_fifo_t ff; + void (* interrupt_set)(bool); + tu_fifo_t ff; } osal_queue_def_t; -typedef osal_queue_def_t *osal_queue_t; +typedef osal_queue_def_t* osal_queue_t; // _int_set is used as mutex in OS NONE (disable/enable USB ISR) #define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - uint8_t _name##_buf[_depth * sizeof(_type)]; \ - osal_queue_def_t _name = { .interrupt_set = _int_set, \ - .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) } + uint8_t _name##_buf[_depth*sizeof(_type)]; \ + osal_queue_def_t _name = { \ + .interrupt_set = _int_set, \ + .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) \ + } // lock queue by disable USB interrupt -TU_ATTR_ALWAYS_INLINE static inline void _osal_q_lock(osal_queue_t qhdl) -{ - // disable dcd/hcd interrupt - qhdl->interrupt_set(false); +TU_ATTR_ALWAYS_INLINE static inline void _osal_q_lock(osal_queue_t qhdl) { + // disable dcd/hcd interrupt + qhdl->interrupt_set(false); } // unlock queue -TU_ATTR_ALWAYS_INLINE static inline void _osal_q_unlock(osal_queue_t qhdl) -{ - // enable dcd/hcd interrupt - qhdl->interrupt_set(true); +TU_ATTR_ALWAYS_INLINE static inline void _osal_q_unlock(osal_queue_t qhdl) { + // enable dcd/hcd interrupt + qhdl->interrupt_set(true); } -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) -{ - tu_fifo_clear(&qdef->ff); - return (osal_queue_t)qdef; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { + tu_fifo_clear(&qdef->ff); + return (osal_queue_t) qdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) -{ - (void)qhdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { + (void) qhdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, - uint32_t msec) -{ - (void)msec; // not used, always behave as msec = 0 +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { + (void) msec; // not used, always behave as msec = 0 - _osal_q_lock(qhdl); - bool success = tu_fifo_read(&qhdl->ff, data); - _osal_q_unlock(qhdl); + _osal_q_lock(qhdl); + bool success = tu_fifo_read(&qhdl->ff, data); + _osal_q_unlock(qhdl); - return success; + return success; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, - bool in_isr) -{ - if (!in_isr) { - _osal_q_lock(qhdl); - } +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const* data, bool in_isr) { + if (!in_isr) { + _osal_q_lock(qhdl); + } - bool success = tu_fifo_write(&qhdl->ff, data); + bool success = tu_fifo_write(&qhdl->ff, data); - if (!in_isr) { - _osal_q_unlock(qhdl); - } + if (!in_isr) { + _osal_q_unlock(qhdl); + } - return success; + return success; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) -{ - // Skip queue lock/unlock since this function is primarily called - // with interrupt disabled before going into low power mode - return tu_fifo_empty(&qhdl->ff); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { + // Skip queue lock/unlock since this function is primarily called + // with interrupt disabled before going into low power mode + return tu_fifo_empty(&qhdl->ff); } #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/osal/osal_pico.h b/Libraries/tinyusb/src/osal/osal_pico.h index 4ffe1d92432..315de0950a8 100644 --- a/Libraries/tinyusb/src/osal/osal_pico.h +++ b/Libraries/tinyusb/src/osal/osal_pico.h @@ -39,74 +39,62 @@ extern "C" { //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) -{ - sleep_ms(msec); +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { + sleep_ms(msec); } //--------------------------------------------------------------------+ // Binary Semaphore API //--------------------------------------------------------------------+ -typedef struct semaphore osal_semaphore_def_t, *osal_semaphore_t; +typedef struct semaphore osal_semaphore_def_t, * osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t -osal_semaphore_create(osal_semaphore_def_t *semdef) -{ - sem_init(semdef, 0, 255); - return semdef; +TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) { + sem_init(semdef, 0, 255); + return semdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) -{ - (void)semd_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { + (void) semd_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) -{ - (void)in_isr; - sem_release(sem_hdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { + (void) in_isr; + sem_release(sem_hdl); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, - uint32_t msec) -{ - return sem_acquire_timeout_ms(sem_hdl, msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { + return sem_acquire_timeout_ms(sem_hdl, msec); } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) -{ - sem_reset(sem_hdl, 0); +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl) { + sem_reset(sem_hdl, 0); } //--------------------------------------------------------------------+ // MUTEX API // Within tinyusb, mutex is never used in ISR context //--------------------------------------------------------------------+ -typedef struct mutex osal_mutex_def_t, *osal_mutex_t; +typedef struct mutex osal_mutex_def_t, * osal_mutex_t; -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) -{ - mutex_init(mdef); - return mdef; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { + mutex_init(mdef); + return mdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) -{ - (void)mutex_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { + (void) mutex_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) -{ - return mutex_enter_timeout_ms(mutex_hdl, msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { + return mutex_enter_timeout_ms(mutex_hdl, msec); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) -{ - mutex_exit(mutex_hdl); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { + mutex_exit(mutex_hdl); + return true; } //--------------------------------------------------------------------+ @@ -115,63 +103,58 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd #include "common/tusb_fifo.h" typedef struct { - tu_fifo_t ff; - struct critical_section critsec; // osal_queue may be used in IRQs, so need critical section + tu_fifo_t ff; + struct critical_section critsec; // osal_queue may be used in IRQs, so need critical section } osal_queue_def_t; -typedef osal_queue_def_t *osal_queue_t; +typedef osal_queue_def_t* osal_queue_t; // role device/host is used by OS NONE for mutex (disable usb isr) only -#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - uint8_t _name##_buf[_depth * sizeof(_type)]; \ - osal_queue_def_t _name = { .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) } +#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ + uint8_t _name##_buf[_depth*sizeof(_type)]; \ + osal_queue_def_t _name = { \ + .ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) \ + } -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) -{ - critical_section_init(&qdef->critsec); - tu_fifo_clear(&qdef->ff); - return (osal_queue_t)qdef; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { + critical_section_init(&qdef->critsec); + tu_fifo_clear(&qdef->ff); + return (osal_queue_t) qdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) -{ - osal_queue_def_t *qdef = (osal_queue_def_t *)qhdl; - critical_section_deinit(&qdef->critsec); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { + osal_queue_def_t* qdef = (osal_queue_def_t*) qhdl; + critical_section_deinit(&qdef->critsec); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, - uint32_t msec) -{ - (void)msec; // not used, always behave as msec = 0 +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { + (void) msec; // not used, always behave as msec = 0 - critical_section_enter_blocking(&qhdl->critsec); - bool success = tu_fifo_read(&qhdl->ff, data); - critical_section_exit(&qhdl->critsec); + critical_section_enter_blocking(&qhdl->critsec); + bool success = tu_fifo_read(&qhdl->ff, data); + critical_section_exit(&qhdl->critsec); - return success; + return success; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, - bool in_isr) -{ - (void)in_isr; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const* data, bool in_isr) { + (void) in_isr; - critical_section_enter_blocking(&qhdl->critsec); - bool success = tu_fifo_write(&qhdl->ff, data); - critical_section_exit(&qhdl->critsec); + critical_section_enter_blocking(&qhdl->critsec); + bool success = tu_fifo_write(&qhdl->ff, data); + critical_section_exit(&qhdl->critsec); - return success; + return success; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) -{ - // TODO: revisit; whether this is true or not currently, tu_fifo_empty is a single - // volatile read. +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { + // TODO: revisit; whether this is true or not currently, tu_fifo_empty is a single + // volatile read. - // Skip queue lock/unlock since this function is primarily called - // with interrupt disabled before going into low power mode - return tu_fifo_empty(&qhdl->ff); + // Skip queue lock/unlock since this function is primarily called + // with interrupt disabled before going into low power mode + return tu_fifo_empty(&qhdl->ff); } #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/osal/osal_rtthread.h b/Libraries/tinyusb/src/osal/osal_rtthread.h index 9624b83ba88..c27814835be 100644 --- a/Libraries/tinyusb/src/osal/osal_rtthread.h +++ b/Libraries/tinyusb/src/osal/osal_rtthread.h @@ -38,9 +38,8 @@ extern "C" { //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) -{ - rt_thread_mdelay(msec); +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { + rt_thread_mdelay(msec); } //--------------------------------------------------------------------+ @@ -49,33 +48,27 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) typedef struct rt_semaphore osal_semaphore_def_t; typedef rt_sem_t osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline osal_semaphore_t -osal_semaphore_create(osal_semaphore_def_t *semdef) -{ - rt_sem_init(semdef, "tusb", 0, RT_IPC_FLAG_PRIO); - return semdef; +TU_ATTR_ALWAYS_INLINE static inline +osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t *semdef) { + rt_sem_init(semdef, "tusb", 0, RT_IPC_FLAG_PRIO); + return semdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) -{ - return RT_EOK == rt_sem_detach(semd_hdl); +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { + return RT_EOK == rt_sem_detach(semd_hdl); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) -{ - (void)in_isr; - return rt_sem_release(sem_hdl) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { + (void) in_isr; + return rt_sem_release(sem_hdl) == RT_EOK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, - uint32_t msec) -{ - return rt_sem_take(sem_hdl, rt_tick_from_millisecond((rt_int32_t)msec)) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec) { + return rt_sem_take(sem_hdl, rt_tick_from_millisecond((rt_int32_t) msec)) == RT_EOK; } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) -{ - rt_sem_control(sem_hdl, RT_IPC_CMD_RESET, 0); +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) { + rt_sem_control(sem_hdl, RT_IPC_CMD_RESET, 0); } //--------------------------------------------------------------------+ @@ -84,25 +77,21 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t c typedef struct rt_mutex osal_mutex_def_t; typedef rt_mutex_t osal_mutex_t; -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) -{ - rt_mutex_init(mdef, "tusb", RT_IPC_FLAG_PRIO); - return mdef; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) { + rt_mutex_init(mdef, "tusb", RT_IPC_FLAG_PRIO); + return mdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) -{ - return RT_EOK == rt_mutex_detach(mutex_hdl); +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { + return RT_EOK == rt_mutex_detach(mutex_hdl); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) -{ - return rt_mutex_take(mutex_hdl, rt_tick_from_millisecond((rt_int32_t)msec)) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) { + return rt_mutex_take(mutex_hdl, rt_tick_from_millisecond((rt_int32_t) msec)) == RT_EOK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) -{ - return rt_mutex_release(mutex_hdl) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { + return rt_mutex_release(mutex_hdl) == RT_EOK; } //--------------------------------------------------------------------+ @@ -111,7 +100,7 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd // role device/host is used by OS NONE for mutex (disable usb isr) only #define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - static _type _name##_##buf[_depth]; \ + static _type _name##_##buf[_depth]; \ osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf }; typedef struct { @@ -124,39 +113,32 @@ typedef struct { typedef rt_mq_t osal_queue_t; -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) -{ - rt_mq_init(&(qdef->sq), "tusb", qdef->buf, qdef->item_sz, qdef->item_sz * qdef->depth, - RT_IPC_FLAG_PRIO); - return &(qdef->sq); +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) { + rt_mq_init(&(qdef->sq), "tusb", qdef->buf, qdef->item_sz, + qdef->item_sz * qdef->depth, RT_IPC_FLAG_PRIO); + return &(qdef->sq); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) -{ - return RT_EOK == rt_mq_detach(qhdl); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { + return RT_EOK == rt_mq_detach(qhdl); } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, - uint32_t msec) -{ - rt_tick_t tick = rt_tick_from_millisecond((rt_int32_t)msec); +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, uint32_t msec) { + rt_tick_t tick = rt_tick_from_millisecond((rt_int32_t) msec); #if RT_VERSION_MAJOR >= 5 - return rt_mq_recv(qhdl, data, qhdl->msg_size, tick) > 0; + return rt_mq_recv(qhdl, data, qhdl->msg_size, tick) > 0; #else - return rt_mq_recv(qhdl, data, qhdl->msg_size, tick) == RT_EOK; -#endif /* RT_VERSION_MAJOR >= 5 */ + return rt_mq_recv(qhdl, data, qhdl->msg_size, tick) == RT_EOK; +#endif /* RT_VERSION_MAJOR >= 5 */ } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, - bool in_isr) -{ - (void)in_isr; - return rt_mq_send(qhdl, (void *)data, qhdl->msg_size) == RT_EOK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, bool in_isr) { + (void) in_isr; + return rt_mq_send(qhdl, (void *)data, qhdl->msg_size) == RT_EOK; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) -{ - return (qhdl->entry) == 0; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { + return (qhdl->entry) == 0; } #ifdef __cplusplus diff --git a/Libraries/tinyusb/src/osal/osal_rtx4.h b/Libraries/tinyusb/src/osal/osal_rtx4.h index 5e8d726f19a..35909e4d6b8 100644 --- a/Libraries/tinyusb/src/osal/osal_rtx4.h +++ b/Libraries/tinyusb/src/osal/osal_rtx4.h @@ -37,25 +37,23 @@ extern "C" { //--------------------------------------------------------------------+ // TASK API //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) -{ - uint16_t hi = msec >> 16; - uint16_t lo = msec; - while (hi--) { - os_dly_wait(0xFFFE); - } - os_dly_wait(lo); -} - -TU_ATTR_ALWAYS_INLINE static inline uint16_t msec2wait(uint32_t msec) -{ - if (msec == OSAL_TIMEOUT_WAIT_FOREVER) { - return 0xFFFF; - } else if (msec >= 0xFFFE) { - return 0xFFFE; - } else { - return msec; - } +TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) { + uint16_t hi = msec >> 16; + uint16_t lo = msec; + while (hi--) { + os_dly_wait(0xFFFE); + } + os_dly_wait(lo); +} + +TU_ATTR_ALWAYS_INLINE static inline uint16_t msec2wait(uint32_t msec) { + if (msec == OSAL_TIMEOUT_WAIT_FOREVER) { + return 0xFFFF; + } else if (msec >= 0xFFFE) { + return 0xFFFE; + } else { + return msec; + } } //--------------------------------------------------------------------+ @@ -64,37 +62,31 @@ TU_ATTR_ALWAYS_INLINE static inline uint16_t msec2wait(uint32_t msec) typedef OS_SEM osal_semaphore_def_t; typedef OS_ID osal_semaphore_t; -TU_ATTR_ALWAYS_INLINE static inline OS_ID osal_semaphore_create(osal_semaphore_def_t *semdef) -{ - os_sem_init(semdef, 0); - return semdef; +TU_ATTR_ALWAYS_INLINE static inline OS_ID osal_semaphore_create(osal_semaphore_def_t* semdef) { + os_sem_init(semdef, 0); + return semdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) -{ - (void)semd_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_delete(osal_semaphore_t semd_hdl) { + (void) semd_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) -{ - if (!in_isr) { - os_sem_send(sem_hdl); - } else { - isr_sem_send(sem_hdl); - } - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { + if ( !in_isr ) { + os_sem_send(sem_hdl); + } else { + isr_sem_send(sem_hdl); + } + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, - uint32_t msec) -{ - return os_sem_wait(sem_hdl, msec2wait(msec)) != OS_R_TMO; +TU_ATTR_ALWAYS_INLINE static inline bool osal_semaphore_wait (osal_semaphore_t sem_hdl, uint32_t msec) { + return os_sem_wait(sem_hdl, msec2wait(msec)) != OS_R_TMO; } -TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) -{ - // TODO: implement +TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t const sem_hdl) { + // TODO: implement } //--------------------------------------------------------------------+ @@ -103,26 +95,22 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_semaphore_reset(osal_semaphore_t c typedef OS_MUT osal_mutex_def_t; typedef OS_ID osal_mutex_t; -TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef) -{ - os_mut_init(mdef); - return mdef; +TU_ATTR_ALWAYS_INLINE static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef) { + os_mut_init(mdef); + return mdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) -{ - (void)mutex_hdl; - return true; // nothing to do +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_delete(osal_mutex_t mutex_hdl) { + (void) mutex_hdl; + return true; // nothing to do } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock(osal_mutex_t mutex_hdl, uint32_t msec) -{ - return os_mut_wait(mutex_hdl, msec2wait(msec)) != OS_R_TMO; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_lock (osal_mutex_t mutex_hdl, uint32_t msec) { + return os_mut_wait(mutex_hdl, msec2wait(msec)) != OS_R_TMO; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) -{ - return os_mut_release(mutex_hdl) == OS_R_OK; +TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) { + return os_mut_release(mutex_hdl) == OS_R_OK; } //--------------------------------------------------------------------+ @@ -130,65 +118,56 @@ TU_ATTR_ALWAYS_INLINE static inline bool osal_mutex_unlock(osal_mutex_t mutex_hd //--------------------------------------------------------------------+ // role device/host is used by OS NONE for mutex (disable usb isr) only -#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ - os_mbx_declare(_name##__mbox, _depth); \ - _declare_box(_name##__pool, sizeof(_type), _depth); \ - osal_queue_def_t _name = { \ - .depth = _depth, .item_sz = sizeof(_type), .pool = _name##__pool, .mbox = _name##__mbox \ - }; +#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \ + os_mbx_declare(_name##__mbox, _depth); \ + _declare_box(_name##__pool, sizeof(_type), _depth); \ + osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .pool = _name##__pool, .mbox = _name##__mbox }; typedef struct { - uint16_t depth; - uint16_t item_sz; - U32 *pool; - U32 *mbox; -} osal_queue_def_t; + uint16_t depth; + uint16_t item_sz; + U32* pool; + U32* mbox; +}osal_queue_def_t; -typedef osal_queue_def_t *osal_queue_t; +typedef osal_queue_def_t* osal_queue_t; -TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t *qdef) -{ - os_mbx_init(qdef->mbox, (qdef->depth + 4) * 4); - _init_box(qdef->pool, ((qdef->item_sz + 3) / 4) * (qdef->depth) + 3, qdef->item_sz); - return qdef; +TU_ATTR_ALWAYS_INLINE static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) { + os_mbx_init(qdef->mbox, (qdef->depth + 4) * 4); + _init_box(qdef->pool, ((qdef->item_sz+3)/4)*(qdef->depth) + 3, qdef->item_sz); + return qdef; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void *data, - uint32_t msec) -{ - void *buf; - os_mbx_wait(qhdl->mbox, &buf, msec2wait(msec)); - memcpy(data, buf, qhdl->item_sz); - _free_box(qhdl->pool, buf); - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_receive(osal_queue_t qhdl, void* data, uint32_t msec) { + void* buf; + os_mbx_wait(qhdl->mbox, &buf, msec2wait(msec)); + memcpy(data, buf, qhdl->item_sz); + _free_box(qhdl->pool, buf); + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) -{ - (void)qhdl; - return true; // nothing to do ? +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_delete(osal_queue_t qhdl) { + (void) qhdl; + return true; // nothing to do ? } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const *data, - bool in_isr) -{ - void *buf = _alloc_box(qhdl->pool); - memcpy(buf, data, qhdl->item_sz); - if (!in_isr) { - os_mbx_send(qhdl->mbox, buf, 0xFFFF); - } else { - isr_mbx_send(qhdl->mbox, buf); - } - return true; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in_isr) { + void* buf = _alloc_box(qhdl->pool); + memcpy(buf, data, qhdl->item_sz); + if ( !in_isr ) { + os_mbx_send(qhdl->mbox, buf, 0xFFFF); + } else { + isr_mbx_send(qhdl->mbox, buf); + } + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) -{ - return os_mbx_check(qhdl->mbox) == qhdl->depth; +TU_ATTR_ALWAYS_INLINE static inline bool osal_queue_empty(osal_queue_t qhdl) { + return os_mbx_check(qhdl->mbox) == qhdl->depth; } #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/portable/mentor/musb/dcd_musb.c b/Libraries/tinyusb/src/portable/mentor/musb/dcd_musb.c index d24157f8f89..a40b3dc0791 100644 --- a/Libraries/tinyusb/src/portable/mentor/musb/dcd_musb.c +++ b/Libraries/tinyusb/src/portable/mentor/musb/dcd_musb.c @@ -30,7 +30,7 @@ #if CFG_TUD_ENABLED && defined(TUP_USBIP_MUSB) #define MUSB_DEBUG 2 -#define MUSB_REGS(rhport) ((musb_regs_t *)MUSB_BASES[rhport]) +#define MUSB_REGS(rhport) ((musb_regs_t*) MUSB_BASES[rhport]) #if __GNUC__ > 8 && defined(__ARM_FEATURE_UNALIGNED) /* GCC warns that an address may be unaligned, even though @@ -45,38 +45,40 @@ _Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\""); // - musb_dcd_int_enable/disable/clear/get_enable // - musb_dcd_int_handler_enter/exit #if defined(TUP_USBIP_MUSB_TI) -#include "musb_ti.h" + #include "musb_ti.h" #elif defined(TUP_USBIP_MUSB_ADI) -#include "musb_max32.h" + #include "musb_max32.h" #else -#error "Unsupported MCU" + #error "Unsupported MCU" #endif /*------------------------------------------------------------------ * MACRO TYPEDEF CONSTANT ENUM DECLARATION *------------------------------------------------------------------*/ -#define REQUEST_TYPE_INVALID (0xFFu) +#define REQUEST_TYPE_INVALID (0xFFu) typedef union { - volatile uint8_t u8; - volatile uint16_t u16; - volatile uint32_t u32; + volatile uint8_t u8; + volatile uint16_t u16; + volatile uint32_t u32; } hw_fifo_t; -typedef struct TU_ATTR_PACKED { - void *buf; /* the start address of a transfer data buffer */ - uint16_t length; /* the number of bytes in the buffer */ - uint16_t remaining; /* the number of bytes remaining in the buffer */ +typedef struct TU_ATTR_PACKED +{ + void *buf; /* the start address of a transfer data buffer */ + uint16_t length; /* the number of bytes in the buffer */ + uint16_t remaining; /* the number of bytes remaining in the buffer */ } pipe_state_t; -typedef struct { - tusb_control_request_t setup_packet; - uint16_t remaining_ctrl; /* The number of bytes remaining in data stage of control transfer. */ - int8_t status_out; - pipe_state_t pipe0; - pipe_state_t pipe[2][TUP_DCD_ENDPOINT_MAX - 1]; /* pipe[direction][endpoint number - 1] */ - uint16_t pipe_buf_is_fifo[2]; /* Bitmap. Each bit means whether 1:TU_FIFO or 0:POD. */ +typedef struct +{ + tusb_control_request_t setup_packet; + uint16_t remaining_ctrl; /* The number of bytes remaining in data stage of control transfer. */ + int8_t status_out; + pipe_state_t pipe0; + pipe_state_t pipe[2][TUP_DCD_ENDPOINT_MAX-1]; /* pipe[direction][endpoint number - 1] */ + uint16_t pipe_buf_is_fifo[2]; /* Bitmap. Each bit means whether 1:TU_FIFO or 0:POD. */ } dcd_data_t; static dcd_data_t _dcd; @@ -95,477 +97,464 @@ static dcd_data_t _dcd; static uint32_t alloced_fifo_bytes; // ffsize is log2(mps) - 3 (round up) -TU_ATTR_ALWAYS_INLINE static inline uint8_t hwfifo_byte2size(uint16_t nbytes) -{ - uint8_t ffsize = 28 - tu_min8(28, __builtin_clz(nbytes)); - if ((8u << ffsize) < nbytes) { - ++ffsize; - } - return ffsize; +TU_ATTR_ALWAYS_INLINE static inline uint8_t hwfifo_byte2size(uint16_t nbytes) { + uint8_t ffsize = 28 - tu_min8(28, __builtin_clz(nbytes)); + if ((8u << ffsize) < nbytes) { + ++ffsize; + } + return ffsize; } -TU_ATTR_ALWAYS_INLINE static inline void hwfifo_reset(musb_regs_t *musb, unsigned epnum, - unsigned is_rx) -{ - (void)epnum; - musb->fifo_size[is_rx] = 0; - musb->fifo_addr[is_rx] = 0; +TU_ATTR_ALWAYS_INLINE static inline void hwfifo_reset(musb_regs_t* musb, unsigned epnum, unsigned is_rx) { + (void) epnum; + musb->fifo_size[is_rx] = 0; + musb->fifo_addr[is_rx] = 0; } -TU_ATTR_ALWAYS_INLINE static inline bool -hwfifo_config(musb_regs_t *musb, unsigned epnum, unsigned is_rx, unsigned mps, bool double_packet) -{ - (void)epnum; - uint8_t ffsize = hwfifo_byte2size(mps); - mps = 8 << ffsize; // round up to the next power of 2 +TU_ATTR_ALWAYS_INLINE static inline bool hwfifo_config(musb_regs_t* musb, unsigned epnum, unsigned is_rx, unsigned mps, + bool double_packet) { + (void) epnum; + uint8_t ffsize = hwfifo_byte2size(mps); + mps = 8 << ffsize; // round up to the next power of 2 - if (double_packet) { - ffsize |= MUSB_FIFOSZ_DOUBLE_PACKET; - mps <<= 1; - } + if (double_packet) { + ffsize |= MUSB_FIFOSZ_DOUBLE_PACKET; + mps <<= 1; + } - TU_ASSERT(alloced_fifo_bytes + mps <= MUSB_CFG_DYNAMIC_FIFO_SIZE); - musb->fifo_addr[is_rx] = alloced_fifo_bytes / 8; - musb->fifo_size[is_rx] = ffsize; + TU_ASSERT(alloced_fifo_bytes + mps <= MUSB_CFG_DYNAMIC_FIFO_SIZE); + musb->fifo_addr[is_rx] = alloced_fifo_bytes / 8; + musb->fifo_size[is_rx] = ffsize; - alloced_fifo_bytes += mps; - return true; + alloced_fifo_bytes += mps; + return true; } #else -TU_ATTR_ALWAYS_INLINE static inline void hwfifo_reset(musb_regs_t *musb, unsigned epnum, - unsigned is_rx) -{ - (void)musb; - (void)epnum; - (void)is_rx; - // nothing to do for static FIFO +TU_ATTR_ALWAYS_INLINE static inline void hwfifo_reset(musb_regs_t* musb, unsigned epnum, unsigned is_rx) { + (void) musb; (void) epnum; (void) is_rx; + // nothing to do for static FIFO } -TU_ATTR_ALWAYS_INLINE static inline bool -hwfifo_config(musb_regs_t *musb, unsigned epnum, unsigned is_rx, unsigned mps, bool double_packet) -{ - (void)epnum; - (void)mps; - if (!double_packet) { -#if defined(TUP_USBIP_MUSB_ADI) - musb->indexed_csr.maxp_csr[is_rx].csrh |= MUSB_CSRH_DISABLE_DOUBLE_PACKET(is_rx); -#else - if (is_rx) { - musb->rx_doulbe_packet_disable |= 1u << epnum; - } else { - musb->tx_double_packet_disable |= 1u << epnum; - } -#endif +TU_ATTR_ALWAYS_INLINE static inline bool hwfifo_config(musb_regs_t* musb, unsigned epnum, unsigned is_rx, unsigned mps, + bool double_packet) { + (void) epnum; (void) mps; + if (!double_packet) { + #if defined(TUP_USBIP_MUSB_ADI) + musb->indexed_csr.maxp_csr[is_rx].csrh |= MUSB_CSRH_DISABLE_DOUBLE_PACKET(is_rx); + #else + if (is_rx) { + musb->rx_doulbe_packet_disable |= 1u << epnum; + } else { + musb->tx_double_packet_disable |= 1u << epnum; } + #endif + } - return true; + return true; } #endif // Flush FIFO and clear data toggle -TU_ATTR_ALWAYS_INLINE static inline void hwfifo_flush(musb_regs_t *musb, unsigned epnum, - unsigned is_rx, bool clear_dtog) -{ - (void)epnum; - const uint8_t csrl_dtog = clear_dtog ? MUSB_CSRL_CLEAR_DATA_TOGGLE(is_rx) : 0; - musb_ep_maxp_csr_t *maxp_csr = &musb->indexed_csr.maxp_csr[is_rx]; - // may need to flush twice for double packet - for (unsigned i = 0; i < 2; i++) { - if (maxp_csr->csrl & MUSB_CSRL_PACKET_READY(is_rx)) { - maxp_csr->csrl = MUSB_CSRL_FLUSH_FIFO(is_rx) | csrl_dtog; - } +TU_ATTR_ALWAYS_INLINE static inline void hwfifo_flush(musb_regs_t* musb, unsigned epnum, unsigned is_rx, bool clear_dtog) { + (void) epnum; + const uint8_t csrl_dtog = clear_dtog ? MUSB_CSRL_CLEAR_DATA_TOGGLE(is_rx) : 0; + musb_ep_maxp_csr_t* maxp_csr = &musb->indexed_csr.maxp_csr[is_rx]; + // may need to flush twice for double packet + for (unsigned i=0; i<2; i++) { + if (maxp_csr->csrl & MUSB_CSRL_PACKET_READY(is_rx)) { + maxp_csr->csrl = MUSB_CSRL_FLUSH_FIFO(is_rx) | csrl_dtog; } + } } static void pipe_write_packet(void *buf, volatile void *fifo, unsigned len) { - volatile hw_fifo_t *reg = (volatile hw_fifo_t *)fifo; - uintptr_t addr = (uintptr_t)buf; - while (len >= 4) { - reg->u32 = *(uint32_t const *)addr; - addr += 4; - len -= 4; - } - if (len >= 2) { - reg->u16 = *(uint16_t const *)addr; - addr += 2; - len -= 2; - } - if (len) { - reg->u8 = *(uint8_t const *)addr; - } + volatile hw_fifo_t *reg = (volatile hw_fifo_t*)fifo; + uintptr_t addr = (uintptr_t)buf; + while (len >= 4) { + reg->u32 = *(uint32_t const *)addr; + addr += 4; + len -= 4; + } + if (len >= 2) { + reg->u16 = *(uint16_t const *)addr; + addr += 2; + len -= 2; + } + if (len) { + reg->u8 = *(uint8_t const *)addr; + } } static void pipe_read_packet(void *buf, volatile void *fifo, unsigned len) { - volatile hw_fifo_t *reg = (volatile hw_fifo_t *)fifo; - uintptr_t addr = (uintptr_t)buf; - while (len >= 4) { - *(uint32_t *)addr = reg->u32; - addr += 4; - len -= 4; - } - if (len >= 2) { - *(uint16_t *)addr = reg->u16; - addr += 2; - len -= 2; - } - if (len) { - *(uint8_t *)addr = reg->u8; - } + volatile hw_fifo_t *reg = (volatile hw_fifo_t*)fifo; + uintptr_t addr = (uintptr_t)buf; + while (len >= 4) { + *(uint32_t *)addr = reg->u32; + addr += 4; + len -= 4; + } + if (len >= 2) { + *(uint16_t *)addr = reg->u16; + addr += 2; + len -= 2; + } + if (len) { + *(uint8_t *)addr = reg->u8; + } } static void pipe_read_write_packet_ff(tu_fifo_t *f, volatile void *fifo, unsigned len, unsigned dir) { - static const struct { - void (*tu_fifo_get_info)(tu_fifo_t *f, tu_fifo_buffer_info_t *info); - void (*tu_fifo_advance)(tu_fifo_t *f, uint16_t n); - void (*pipe_read_write)(void *buf, volatile void *fifo, unsigned len); - } ops[] = { - /* OUT */ { tu_fifo_get_write_info, tu_fifo_advance_write_pointer, pipe_read_packet }, - /* IN */ { tu_fifo_get_read_info, tu_fifo_advance_read_pointer, pipe_write_packet }, - }; - tu_fifo_buffer_info_t info; - ops[dir].tu_fifo_get_info(f, &info); - unsigned total_len = len; - len = TU_MIN(total_len, info.len_lin); - ops[dir].pipe_read_write(info.ptr_lin, fifo, len); - unsigned rem = total_len - len; - if (rem) { - len = TU_MIN(rem, info.len_wrap); - ops[dir].pipe_read_write(info.ptr_wrap, fifo, len); - rem -= len; - } - ops[dir].tu_fifo_advance(f, total_len - rem); -} - -static void process_setup_packet(uint8_t rhport) -{ - musb_regs_t *musb_regs = MUSB_REGS(rhport); - - // Read setup packet - uint32_t *p = (void *)&_dcd.setup_packet; - volatile uint32_t *fifo_ptr = &musb_regs->fifo[0]; - p[0] = *fifo_ptr; - p[1] = *fifo_ptr; - - _dcd.pipe0.buf = NULL; - _dcd.pipe0.length = 0; - _dcd.pipe0.remaining = 0; - dcd_event_setup_received(rhport, (const uint8_t *)(uintptr_t)&_dcd.setup_packet, true); - - const unsigned len = _dcd.setup_packet.wLength; - _dcd.remaining_ctrl = len; - const unsigned dir_in = tu_edpt_dir(_dcd.setup_packet.bmRequestType); - /* Clear RX FIFO and reverse the transaction direction */ - if (len && dir_in) { - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, 0); - ep_csr->csr0l = MUSB_CSRL0_RXRDYC; - } + static const struct { + void (*tu_fifo_get_info)(tu_fifo_t *f, tu_fifo_buffer_info_t *info); + void (*tu_fifo_advance)(tu_fifo_t *f, uint16_t n); + void (*pipe_read_write)(void *buf, volatile void *fifo, unsigned len); + } ops[] = { + /* OUT */ {tu_fifo_get_write_info,tu_fifo_advance_write_pointer,pipe_read_packet}, + /* IN */ {tu_fifo_get_read_info, tu_fifo_advance_read_pointer, pipe_write_packet}, + }; + tu_fifo_buffer_info_t info; + ops[dir].tu_fifo_get_info(f, &info); + unsigned total_len = len; + len = TU_MIN(total_len, info.len_lin); + ops[dir].pipe_read_write(info.ptr_lin, fifo, len); + unsigned rem = total_len - len; + if (rem) { + len = TU_MIN(rem, info.len_wrap); + ops[dir].pipe_read_write(info.ptr_wrap, fifo, len); + rem -= len; + } + ops[dir].tu_fifo_advance(f, total_len - rem); +} + +static void process_setup_packet(uint8_t rhport) { + musb_regs_t* musb_regs = MUSB_REGS(rhport); + + // Read setup packet + uint32_t *p = (void*)&_dcd.setup_packet; + volatile uint32_t *fifo_ptr = &musb_regs->fifo[0]; + p[0] = *fifo_ptr; + p[1] = *fifo_ptr; + + _dcd.pipe0.buf = NULL; + _dcd.pipe0.length = 0; + _dcd.pipe0.remaining = 0; + dcd_event_setup_received(rhport, (const uint8_t*)(uintptr_t)&_dcd.setup_packet, true); + + const unsigned len = _dcd.setup_packet.wLength; + _dcd.remaining_ctrl = len; + const unsigned dir_in = tu_edpt_dir(_dcd.setup_packet.bmRequestType); + /* Clear RX FIFO and reverse the transaction direction */ + if (len && dir_in) { + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, 0); + ep_csr->csr0l = MUSB_CSRL0_RXRDYC; + } } static bool handle_xfer_in(uint8_t rhport, uint_fast8_t ep_addr) { - unsigned epnum = tu_edpt_number(ep_addr); - unsigned epnum_minus1 = epnum - 1; - pipe_state_t *pipe = &_dcd.pipe[tu_edpt_dir(ep_addr)][epnum_minus1]; - const unsigned rem = pipe->remaining; - - if (!rem) { - pipe->buf = NULL; - return true; - } + unsigned epnum = tu_edpt_number(ep_addr); + unsigned epnum_minus1 = epnum - 1; + pipe_state_t *pipe = &_dcd.pipe[tu_edpt_dir(ep_addr)][epnum_minus1]; + const unsigned rem = pipe->remaining; - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epnum); - const unsigned mps = ep_csr->tx_maxp; - const unsigned len = TU_MIN(mps, rem); - void *buf = pipe->buf; - volatile void *fifo_ptr = &musb_regs->fifo[epnum]; - // TU_LOG1(" %p mps %d len %d rem %d\r\n", buf, mps, len, rem); - if (len) { - if (_dcd.pipe_buf_is_fifo[TUSB_DIR_IN] & TU_BIT(epnum_minus1)) { - pipe_read_write_packet_ff(buf, fifo_ptr, len, TUSB_DIR_IN); - } else { - pipe_write_packet(buf, fifo_ptr, len); - pipe->buf = buf + len; - } - pipe->remaining = rem - len; + if (!rem) { + pipe->buf = NULL; + return true; + } + + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epnum); + const unsigned mps = ep_csr->tx_maxp; + const unsigned len = TU_MIN(mps, rem); + void *buf = pipe->buf; + volatile void *fifo_ptr = &musb_regs->fifo[epnum]; + // TU_LOG1(" %p mps %d len %d rem %d\r\n", buf, mps, len, rem); + if (len) { + if (_dcd.pipe_buf_is_fifo[TUSB_DIR_IN] & TU_BIT(epnum_minus1)) { + pipe_read_write_packet_ff(buf, fifo_ptr, len, TUSB_DIR_IN); + } else { + pipe_write_packet(buf, fifo_ptr, len); + pipe->buf = buf + len; } - ep_csr->tx_csrl = MUSB_TXCSRL1_TXRDY; - // TU_LOG1(" TXCSRL%d = %x %d\r\n", epnum, ep_csr->tx_csrl, rem - len); - return false; + pipe->remaining = rem - len; + } + ep_csr->tx_csrl = MUSB_TXCSRL1_TXRDY; + // TU_LOG1(" TXCSRL%d = %x %d\r\n", epnum, ep_csr->tx_csrl, rem - len); + return false; } static bool handle_xfer_out(uint8_t rhport, uint_fast8_t ep_addr) { - unsigned epnum = tu_edpt_number(ep_addr); - unsigned epnum_minus1 = epnum - 1; - pipe_state_t *pipe = &_dcd.pipe[tu_edpt_dir(ep_addr)][epnum_minus1]; - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epnum); - // TU_LOG1(" RXCSRL%d = %x\r\n", epnum_minus1 + 1, ep_csr->rx_csrl); - - TU_ASSERT(ep_csr->rx_csrl & MUSB_RXCSRL1_RXRDY); - - const unsigned mps = ep_csr->rx_maxp; - const unsigned rem = pipe->remaining; - const unsigned vld = ep_csr->rx_count; - const unsigned len = TU_MIN(TU_MIN(rem, mps), vld); - void *buf = pipe->buf; - volatile void *fifo_ptr = &musb_regs->fifo[epnum]; - if (len) { - if (_dcd.pipe_buf_is_fifo[TUSB_DIR_OUT] & TU_BIT(epnum_minus1)) { - pipe_read_write_packet_ff(buf, fifo_ptr, len, TUSB_DIR_OUT); - } else { - pipe_read_packet(buf, fifo_ptr, len); - pipe->buf = buf + len; - } - pipe->remaining = rem - len; - } - if ((len < mps) || (rem == len)) { - pipe->buf = NULL; - return NULL != buf; + unsigned epnum = tu_edpt_number(ep_addr); + unsigned epnum_minus1 = epnum - 1; + pipe_state_t *pipe = &_dcd.pipe[tu_edpt_dir(ep_addr)][epnum_minus1]; + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epnum); + // TU_LOG1(" RXCSRL%d = %x\r\n", epnum_minus1 + 1, ep_csr->rx_csrl); + + TU_ASSERT(ep_csr->rx_csrl & MUSB_RXCSRL1_RXRDY); + + const unsigned mps = ep_csr->rx_maxp; + const unsigned rem = pipe->remaining; + const unsigned vld = ep_csr->rx_count; + const unsigned len = TU_MIN(TU_MIN(rem, mps), vld); + void *buf = pipe->buf; + volatile void *fifo_ptr = &musb_regs->fifo[epnum]; + if (len) { + if (_dcd.pipe_buf_is_fifo[TUSB_DIR_OUT] & TU_BIT(epnum_minus1)) { + pipe_read_write_packet_ff(buf, fifo_ptr, len, TUSB_DIR_OUT); + } else { + pipe_read_packet(buf, fifo_ptr, len); + pipe->buf = buf + len; } - ep_csr->rx_csrl = 0; /* Clear RXRDY bit */ - return false; + pipe->remaining = rem - len; + } + if ((len < mps) || (rem == len)) { + pipe->buf = NULL; + return NULL != buf; + } + ep_csr->rx_csrl = 0; /* Clear RXRDY bit */ + return false; } static bool edpt_n_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes) { - unsigned epnum = tu_edpt_number(ep_addr); - unsigned epnum_minus1 = epnum - 1; - unsigned dir_in = tu_edpt_dir(ep_addr); + unsigned epnum = tu_edpt_number(ep_addr); + unsigned epnum_minus1 = epnum - 1; + unsigned dir_in = tu_edpt_dir(ep_addr); - pipe_state_t *pipe = &_dcd.pipe[dir_in][epnum_minus1]; - pipe->buf = buffer; - pipe->length = total_bytes; - pipe->remaining = total_bytes; + pipe_state_t *pipe = &_dcd.pipe[dir_in][epnum_minus1]; + pipe->buf = buffer; + pipe->length = total_bytes; + pipe->remaining = total_bytes; - if (dir_in) { - handle_xfer_in(rhport, ep_addr); - } else { - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epnum); - if (ep_csr->rx_csrl & MUSB_RXCSRL1_RXRDY) - ep_csr->rx_csrl = 0; - } - return true; + if (dir_in) { + handle_xfer_in(rhport, ep_addr); + } else { + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epnum); + if (ep_csr->rx_csrl & MUSB_RXCSRL1_RXRDY) ep_csr->rx_csrl = 0; + } + return true; } static bool edpt0_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes) { - (void)rhport; - TU_ASSERT(total_bytes <= 64); /* Current implementation supports for only up to 64 bytes. */ - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, 0); - const unsigned req = _dcd.setup_packet.bmRequestType; - TU_ASSERT(req != REQUEST_TYPE_INVALID || total_bytes == 0); - - if (req == REQUEST_TYPE_INVALID || _dcd.status_out) { - /* STATUS OUT stage. + (void)rhport; + TU_ASSERT(total_bytes <= 64); /* Current implementation supports for only up to 64 bytes. */ + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, 0); + const unsigned req = _dcd.setup_packet.bmRequestType; + TU_ASSERT(req != REQUEST_TYPE_INVALID || total_bytes == 0); + + if (req == REQUEST_TYPE_INVALID || _dcd.status_out) { + /* STATUS OUT stage. * MUSB controller automatically handles STATUS OUT packets without * software helps. We do not have to do anything. And STATUS stage * may have already finished and received the next setup packet * without calling this function, so we have no choice but to * invoke the callback function of status packet here. */ - // TU_LOG1(" STATUS OUT ep_csr->csr0l = %x\r\n", ep_csr->csr0l); - _dcd.status_out = 0; - if (req == REQUEST_TYPE_INVALID) { - dcd_event_xfer_complete(rhport, ep_addr, total_bytes, XFER_RESULT_SUCCESS, false); - } else { - /* The next setup packet has already been received, it aborts + // TU_LOG1(" STATUS OUT ep_csr->csr0l = %x\r\n", ep_csr->csr0l); + _dcd.status_out = 0; + if (req == REQUEST_TYPE_INVALID) { + dcd_event_xfer_complete(rhport, ep_addr, total_bytes, XFER_RESULT_SUCCESS, false); + } else { + /* The next setup packet has already been received, it aborts * invoking callback function to avoid confusing TUSB stack. */ - TU_LOG1("Drop CONTROL_STAGE_ACK\r\n"); - } - return true; - } - const unsigned dir_in = tu_edpt_dir(ep_addr); - if (tu_edpt_dir(req) == dir_in) { /* DATA stage */ - TU_ASSERT(total_bytes <= _dcd.remaining_ctrl); - const unsigned rem = _dcd.remaining_ctrl; - const unsigned len = TU_MIN(TU_MIN(rem, 64), total_bytes); - volatile void *fifo_ptr = &musb_regs->fifo[0]; - if (dir_in) { - pipe_write_packet(buffer, fifo_ptr, len); - - _dcd.pipe0.buf = buffer + len; - _dcd.pipe0.length = len; - _dcd.pipe0.remaining = 0; - - _dcd.remaining_ctrl = rem - len; - if ((len < 64) || (rem == len)) { - _dcd.setup_packet.bmRequestType = - REQUEST_TYPE_INVALID; /* Change to STATUS/SETUP stage */ - _dcd.status_out = 1; - /* Flush TX FIFO and reverse the transaction direction. */ - ep_csr->csr0l = MUSB_CSRL0_TXRDY | MUSB_CSRL0_DATAEND; - } else { - ep_csr->csr0l = MUSB_CSRL0_TXRDY; /* Flush TX FIFO to return ACK. */ - } - // TU_LOG1(" IN ep_csr->csr0l = %x\r\n", ep_csr->csr0l); - } else { - // TU_LOG1(" OUT ep_csr->csr0l = %x\r\n", ep_csr->csr0l); - _dcd.pipe0.buf = buffer; - _dcd.pipe0.length = len; - _dcd.pipe0.remaining = len; - ep_csr->csr0l = MUSB_CSRL0_RXRDYC; /* Clear RX FIFO to return ACK. */ - } - } else if (dir_in) { - // TU_LOG1(" STATUS IN ep_csr->csr0l = %x\r\n", ep_csr->csr0l); - _dcd.pipe0.buf = NULL; - _dcd.pipe0.length = 0; - _dcd.pipe0.remaining = 0; - /* Clear RX FIFO and reverse the transaction direction */ - ep_csr->csr0l = MUSB_CSRL0_RXRDYC | MUSB_CSRL0_DATAEND; + TU_LOG1("Drop CONTROL_STAGE_ACK\r\n"); } return true; + } + const unsigned dir_in = tu_edpt_dir(ep_addr); + if (tu_edpt_dir(req) == dir_in) { /* DATA stage */ + TU_ASSERT(total_bytes <= _dcd.remaining_ctrl); + const unsigned rem = _dcd.remaining_ctrl; + const unsigned len = TU_MIN(TU_MIN(rem, 64), total_bytes); + volatile void *fifo_ptr = &musb_regs->fifo[0]; + if (dir_in) { + pipe_write_packet(buffer, fifo_ptr, len); + + _dcd.pipe0.buf = buffer + len; + _dcd.pipe0.length = len; + _dcd.pipe0.remaining = 0; + + _dcd.remaining_ctrl = rem - len; + if ((len < 64) || (rem == len)) { + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; /* Change to STATUS/SETUP stage */ + _dcd.status_out = 1; + /* Flush TX FIFO and reverse the transaction direction. */ + ep_csr->csr0l = MUSB_CSRL0_TXRDY | MUSB_CSRL0_DATAEND; + } else { + ep_csr->csr0l = MUSB_CSRL0_TXRDY; /* Flush TX FIFO to return ACK. */ + } + // TU_LOG1(" IN ep_csr->csr0l = %x\r\n", ep_csr->csr0l); + } else { + // TU_LOG1(" OUT ep_csr->csr0l = %x\r\n", ep_csr->csr0l); + _dcd.pipe0.buf = buffer; + _dcd.pipe0.length = len; + _dcd.pipe0.remaining = len; + ep_csr->csr0l = MUSB_CSRL0_RXRDYC; /* Clear RX FIFO to return ACK. */ + } + } else if (dir_in) { + // TU_LOG1(" STATUS IN ep_csr->csr0l = %x\r\n", ep_csr->csr0l); + _dcd.pipe0.buf = NULL; + _dcd.pipe0.length = 0; + _dcd.pipe0.remaining = 0; + /* Clear RX FIFO and reverse the transaction direction */ + ep_csr->csr0l = MUSB_CSRL0_RXRDYC | MUSB_CSRL0_DATAEND; + } + return true; } static void process_ep0(uint8_t rhport) { - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, 0); - uint_fast8_t csrl = ep_csr->csr0l; - - // TU_LOG1(" EP0 ep_csr->csr0l = %x\r\n", csrl); - // 21.1.5: endpoint 0 service routine as peripheral - - if (csrl & MUSB_CSRL0_STALLED) { - /* Returned STALL packet to HOST. */ - ep_csr->csr0l = 0; /* Clear STALL */ - return; - } - - unsigned req = _dcd.setup_packet.bmRequestType; - if (csrl & MUSB_CSRL0_SETEND) { - TU_LOG1(" ABORT by the next packets\r\n"); - ep_csr->csr0l = MUSB_CSRL0_SETENDC; - if (req != REQUEST_TYPE_INVALID && _dcd.pipe0.buf) { - /* DATA stage was aborted by receiving STATUS or SETUP packet. */ - _dcd.pipe0.buf = NULL; - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; - dcd_event_xfer_complete(rhport, req & TUSB_DIR_IN_MASK, - _dcd.pipe0.length - _dcd.pipe0.remaining, XFER_RESULT_SUCCESS, - true); - } - req = REQUEST_TYPE_INVALID; - if (!(csrl & MUSB_CSRL0_RXRDY)) - return; /* Received SETUP packet */ - } - - if (csrl & MUSB_CSRL0_RXRDY) { - /* Received SETUP or DATA OUT packet */ - if (req == REQUEST_TYPE_INVALID) { - /* SETUP */ - TU_ASSERT(sizeof(tusb_control_request_t) == ep_csr->count0, ); - process_setup_packet(rhport); - return; - } - if (_dcd.pipe0.buf) { - /* DATA OUT */ - const unsigned vld = ep_csr->count0; - const unsigned rem = _dcd.pipe0.remaining; - const unsigned len = TU_MIN(TU_MIN(rem, 64), vld); - volatile void *fifo_ptr = &musb_regs->fifo[0]; - pipe_read_packet(_dcd.pipe0.buf, fifo_ptr, len); - - _dcd.pipe0.remaining = rem - len; - _dcd.remaining_ctrl -= len; - - _dcd.pipe0.buf = NULL; - dcd_event_xfer_complete(rhport, tu_edpt_addr(0, TUSB_DIR_OUT), - _dcd.pipe0.length - _dcd.pipe0.remaining, XFER_RESULT_SUCCESS, - true); - } - return; - } - - /* When CSRL0 is zero, it means that completion of sending a any length packet - * or receiving a zero length packet. */ - if (req != REQUEST_TYPE_INVALID && !tu_edpt_dir(req)) { - /* STATUS IN */ - if (*(const uint16_t *)(uintptr_t)&_dcd.setup_packet == 0x0500) { - /* The address must be changed on completion of the control transfer. */ - musb_regs->faddr = (uint8_t)_dcd.setup_packet.wValue; - } - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; - dcd_event_xfer_complete(rhport, tu_edpt_addr(0, TUSB_DIR_IN), - _dcd.pipe0.length - _dcd.pipe0.remaining, XFER_RESULT_SUCCESS, - true); - return; + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, 0); + uint_fast8_t csrl = ep_csr->csr0l; + + // TU_LOG1(" EP0 ep_csr->csr0l = %x\r\n", csrl); + // 21.1.5: endpoint 0 service routine as peripheral + + if (csrl & MUSB_CSRL0_STALLED) { + /* Returned STALL packet to HOST. */ + ep_csr->csr0l = 0; /* Clear STALL */ + return; + } + + unsigned req = _dcd.setup_packet.bmRequestType; + if (csrl & MUSB_CSRL0_SETEND) { + TU_LOG1(" ABORT by the next packets\r\n"); + ep_csr->csr0l = MUSB_CSRL0_SETENDC; + if (req != REQUEST_TYPE_INVALID && _dcd.pipe0.buf) { + /* DATA stage was aborted by receiving STATUS or SETUP packet. */ + _dcd.pipe0.buf = NULL; + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; + dcd_event_xfer_complete(rhport, + req & TUSB_DIR_IN_MASK, + _dcd.pipe0.length - _dcd.pipe0.remaining, + XFER_RESULT_SUCCESS, true); + } + req = REQUEST_TYPE_INVALID; + if (!(csrl & MUSB_CSRL0_RXRDY)) return; /* Received SETUP packet */ + } + + if (csrl & MUSB_CSRL0_RXRDY) { + /* Received SETUP or DATA OUT packet */ + if (req == REQUEST_TYPE_INVALID) { + /* SETUP */ + TU_ASSERT(sizeof(tusb_control_request_t) == ep_csr->count0,); + process_setup_packet(rhport); + return; } if (_dcd.pipe0.buf) { - /* DATA IN */ - _dcd.pipe0.buf = NULL; - dcd_event_xfer_complete(rhport, tu_edpt_addr(0, TUSB_DIR_IN), - _dcd.pipe0.length - _dcd.pipe0.remaining, XFER_RESULT_SUCCESS, - true); + /* DATA OUT */ + const unsigned vld = ep_csr->count0; + const unsigned rem = _dcd.pipe0.remaining; + const unsigned len = TU_MIN(TU_MIN(rem, 64), vld); + volatile void *fifo_ptr = &musb_regs->fifo[0]; + pipe_read_packet(_dcd.pipe0.buf, fifo_ptr, len); + + _dcd.pipe0.remaining = rem - len; + _dcd.remaining_ctrl -= len; + + _dcd.pipe0.buf = NULL; + dcd_event_xfer_complete(rhport, + tu_edpt_addr(0, TUSB_DIR_OUT), + _dcd.pipe0.length - _dcd.pipe0.remaining, + XFER_RESULT_SUCCESS, true); + } + return; + } + + /* When CSRL0 is zero, it means that completion of sending a any length packet + * or receiving a zero length packet. */ + if (req != REQUEST_TYPE_INVALID && !tu_edpt_dir(req)) { + /* STATUS IN */ + if (*(const uint16_t*)(uintptr_t)&_dcd.setup_packet == 0x0500) { + /* The address must be changed on completion of the control transfer. */ + musb_regs->faddr = (uint8_t)_dcd.setup_packet.wValue; } + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; + dcd_event_xfer_complete(rhport, + tu_edpt_addr(0, TUSB_DIR_IN), + _dcd.pipe0.length - _dcd.pipe0.remaining, + XFER_RESULT_SUCCESS, true); + return; + } + if (_dcd.pipe0.buf) { + /* DATA IN */ + _dcd.pipe0.buf = NULL; + dcd_event_xfer_complete(rhport, + tu_edpt_addr(0, TUSB_DIR_IN), + _dcd.pipe0.length - _dcd.pipe0.remaining, + XFER_RESULT_SUCCESS, true); + } } static void process_edpt_n(uint8_t rhport, uint_fast8_t ep_addr) { - bool completed; - const unsigned dir_in = tu_edpt_dir(ep_addr); - const unsigned epn = tu_edpt_number(ep_addr); - const unsigned epn_minus1 = epn - 1; - - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epn); - if (dir_in) { - // TU_LOG1(" TX CSRL%d = %x\r\n", epn, ep_csr->tx_csrl); - if (ep_csr->tx_csrl & MUSB_TXCSRL1_STALLED) { - ep_csr->tx_csrl &= ~(MUSB_TXCSRL1_STALLED | MUSB_TXCSRL1_UNDRN); - return; - } - completed = handle_xfer_in(rhport, ep_addr); - } else { - // TU_LOG1(" RX CSRL%d = %x\r\n", epn, ep_csr->rx_csrl); - if (ep_csr->rx_csrl & MUSB_RXCSRL1_STALLED) { - ep_csr->rx_csrl &= ~(MUSB_RXCSRL1_STALLED | MUSB_RXCSRL1_OVER); - return; - } - completed = handle_xfer_out(rhport, ep_addr); - } - - if (completed) { - pipe_state_t *pipe = &_dcd.pipe[dir_in][epn_minus1]; - dcd_event_xfer_complete(rhport, ep_addr, pipe->length - pipe->remaining, - XFER_RESULT_SUCCESS, true); - } + bool completed; + const unsigned dir_in = tu_edpt_dir(ep_addr); + const unsigned epn = tu_edpt_number(ep_addr); + const unsigned epn_minus1 = epn - 1; + + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epn); + if (dir_in) { + // TU_LOG1(" TX CSRL%d = %x\r\n", epn, ep_csr->tx_csrl); + if (ep_csr->tx_csrl & MUSB_TXCSRL1_STALLED) { + ep_csr->tx_csrl &= ~(MUSB_TXCSRL1_STALLED | MUSB_TXCSRL1_UNDRN); + return; + } + completed = handle_xfer_in(rhport, ep_addr); + } else { + // TU_LOG1(" RX CSRL%d = %x\r\n", epn, ep_csr->rx_csrl); + if (ep_csr->rx_csrl & MUSB_RXCSRL1_STALLED) { + ep_csr->rx_csrl &= ~(MUSB_RXCSRL1_STALLED | MUSB_RXCSRL1_OVER); + return; + } + completed = handle_xfer_out(rhport, ep_addr); + } + + if (completed) { + pipe_state_t *pipe = &_dcd.pipe[dir_in][epn_minus1]; + dcd_event_xfer_complete(rhport, ep_addr, + pipe->length - pipe->remaining, + XFER_RESULT_SUCCESS, true); + } } // Upon BUS RESET is detected, hardware havs already done: // faddr = 0, index = 0, flushes all ep fifos, clears all ep csr, enabled all ep interrupts -static void process_bus_reset(uint8_t rhport) -{ - musb_regs_t *musb = MUSB_REGS(rhport); +static void process_bus_reset(uint8_t rhport) { + musb_regs_t* musb = MUSB_REGS(rhport); #if MUSB_CFG_DYNAMIC_FIFO - alloced_fifo_bytes = CFG_TUD_ENDPOINT0_SIZE; + alloced_fifo_bytes = CFG_TUD_ENDPOINT0_SIZE; #endif - /* When bmRequestType is REQUEST_TYPE_INVALID(0xFF), a control transfer state is SETUP or STATUS stage. */ - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; - _dcd.status_out = 0; - /* When pipe0.buf has not NULL, DATA stage works in progress. */ - _dcd.pipe0.buf = NULL; + /* When bmRequestType is REQUEST_TYPE_INVALID(0xFF), a control transfer state is SETUP or STATUS stage. */ + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; + _dcd.status_out = 0; + /* When pipe0.buf has not NULL, DATA stage works in progress. */ + _dcd.pipe0.buf = NULL; - musb->intr_txen = 1; /* Enable only EP0 */ - musb->intr_rxen = 0; + musb->intr_txen = 1; /* Enable only EP0 */ + musb->intr_rxen = 0; - /* Clear FIFO settings */ - for (unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) { - musb->index = i; - hwfifo_reset(musb, i, 0); - hwfifo_reset(musb, i, 1); - } - dcd_event_bus_reset( - rhport, (musb->power & MUSB_POWER_HSMODE) ? TUSB_SPEED_HIGH : TUSB_SPEED_FULL, true); + /* Clear FIFO settings */ + for (unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) { + musb->index = i; + hwfifo_reset(musb, i, 0); + hwfifo_reset(musb, i, 1); + } + dcd_event_bus_reset(rhport, (musb->power & MUSB_POWER_HSMODE) ? TUSB_SPEED_HIGH : TUSB_SPEED_FULL, true); } /*------------------------------------------------------------------ @@ -573,101 +562,93 @@ static void process_bus_reset(uint8_t rhport) *------------------------------------------------------------------*/ #if CFG_TUSB_DEBUG >= MUSB_DEBUG -void print_musb_info(musb_regs_t *musb_regs) -{ - // print version, epinfo, raminfo, config_data0, fifo_size - TU_LOG1("musb version = %u.%u\r\n", musb_regs->hwvers_bit.major, musb_regs->hwvers_bit.minor); - TU_LOG1("Number of endpoints: %u TX, %u RX\r\n", musb_regs->epinfo_bit.tx_ep_num, - musb_regs->epinfo_bit.rx_ep_num); - TU_LOG1("RAM Info: %u DMA Channel, %u RAM address width\r\n", - musb_regs->raminfo_bit.dma_channel, musb_regs->raminfo_bit.ram_bits); +void print_musb_info(musb_regs_t* musb_regs) { + // print version, epinfo, raminfo, config_data0, fifo_size + TU_LOG1("musb version = %u.%u\r\n", musb_regs->hwvers_bit.major, musb_regs->hwvers_bit.minor); + TU_LOG1("Number of endpoints: %u TX, %u RX\r\n", musb_regs->epinfo_bit.tx_ep_num, musb_regs->epinfo_bit.rx_ep_num); + TU_LOG1("RAM Info: %u DMA Channel, %u RAM address width\r\n", musb_regs->raminfo_bit.dma_channel, musb_regs->raminfo_bit.ram_bits); - musb_regs->index = 0; - TU_LOG1("config_data0 = 0x%x\r\n", musb_regs->indexed_csr.config_data0); + musb_regs->index = 0; + TU_LOG1("config_data0 = 0x%x\r\n", musb_regs->indexed_csr.config_data0); #if MUSB_CFG_DYNAMIC_FIFO - TU_LOG1("Dynamic FIFO configuration\r\n"); + TU_LOG1("Dynamic FIFO configuration\r\n"); #else - for (uint8_t i = 1; i <= musb_regs->epinfo_bit.tx_ep_num; i++) { - musb_regs->index = i; - TU_LOG1("FIFO %u Size: TX %u RX %u\r\n", i, musb_regs->indexed_csr.fifo_size_bit.tx, - musb_regs->indexed_csr.fifo_size_bit.rx); - } + for (uint8_t i=1; i <= musb_regs->epinfo_bit.tx_ep_num; i++) { + musb_regs->index = i; + TU_LOG1("FIFO %u Size: TX %u RX %u\r\n", i, musb_regs->indexed_csr.fifo_size_bit.tx, musb_regs->indexed_csr.fifo_size_bit.rx); + } #endif } #endif -void dcd_init(uint8_t rhport) -{ - musb_regs_t *musb_regs = MUSB_REGS(rhport); +void dcd_init(uint8_t rhport) { + musb_regs_t* musb_regs = MUSB_REGS(rhport); #if CFG_TUSB_DEBUG >= MUSB_DEBUG - print_musb_info(musb_regs); + print_musb_info(musb_regs); #endif - musb_regs->intr_usben |= MUSB_IE_SUSPND; - musb_dcd_int_clear(rhport); - musb_dcd_phy_init(rhport); - dcd_connect(rhport); + musb_regs->intr_usben |= MUSB_IE_SUSPND; + musb_dcd_int_clear(rhport); + musb_dcd_phy_init(rhport); + dcd_connect(rhport); } -void dcd_int_enable(uint8_t rhport) -{ - musb_dcd_int_enable(rhport); +void dcd_int_enable(uint8_t rhport) { + musb_dcd_int_enable(rhport); } -void dcd_int_disable(uint8_t rhport) -{ - musb_dcd_int_disable(rhport); +void dcd_int_disable(uint8_t rhport) { + musb_dcd_int_disable(rhport); } // Receive Set Address request, mcu port must also include status IN response void dcd_set_address(uint8_t rhport, uint8_t dev_addr) { - (void)dev_addr; - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, 0); + (void)dev_addr; + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, 0); - _dcd.pipe0.buf = NULL; - _dcd.pipe0.length = 0; - _dcd.pipe0.remaining = 0; - /* Clear RX FIFO to return ACK. */ - ep_csr->csr0l = MUSB_CSRL0_RXRDYC | MUSB_CSRL0_DATAEND; + _dcd.pipe0.buf = NULL; + _dcd.pipe0.length = 0; + _dcd.pipe0.remaining = 0; + /* Clear RX FIFO to return ACK. */ + ep_csr->csr0l = MUSB_CSRL0_RXRDYC | MUSB_CSRL0_DATAEND; } // Wake up host -void dcd_remote_wakeup(uint8_t rhport) -{ - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_regs->power |= MUSB_POWER_RESUME; +void dcd_remote_wakeup(uint8_t rhport) { + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_regs->power |= MUSB_POWER_RESUME; - unsigned cnt = SystemCoreClock / 1000; - while (cnt--) __NOP(); + unsigned cnt = SystemCoreClock / 1000; + while (cnt--) __NOP(); - musb_regs->power &= ~MUSB_POWER_RESUME; + musb_regs->power &= ~MUSB_POWER_RESUME; } // Connect by enabling internal pull-up resistor on D+/D- void dcd_connect(uint8_t rhport) { - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_regs->power |= TUD_OPT_HIGH_SPEED ? MUSB_POWER_HSENAB : 0; - musb_regs->power |= MUSB_POWER_SOFTCONN; + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_regs->power |= TUD_OPT_HIGH_SPEED ? MUSB_POWER_HSENAB : 0; + musb_regs->power |= MUSB_POWER_SOFTCONN; } // Disconnect by disabling internal pull-up resistor on D+/D- void dcd_disconnect(uint8_t rhport) { - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_regs->power &= ~MUSB_POWER_SOFTCONN; + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_regs->power &= ~MUSB_POWER_SOFTCONN; } void dcd_sof_enable(uint8_t rhport, bool en) { - (void)rhport; - (void)en; + (void) rhport; + (void) en; - // TODO implement later + // TODO implement later } //--------------------------------------------------------------------+ @@ -679,253 +660,243 @@ void dcd_sof_enable(uint8_t rhport, bool en) // } // Configure endpoint's registers according to descriptor -bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *ep_desc) -{ - const unsigned ep_addr = ep_desc->bEndpointAddress; - const unsigned epn = tu_edpt_number(ep_addr); - const unsigned dir_in = tu_edpt_dir(ep_addr); - const unsigned mps = tu_edpt_packet_size(ep_desc); - - pipe_state_t *pipe = &_dcd.pipe[dir_in][epn - 1]; - pipe->buf = NULL; - pipe->length = 0; - pipe->remaining = 0; - - musb_regs_t *musb = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb, epn); - const uint8_t is_rx = 1 - dir_in; - musb_ep_maxp_csr_t *maxp_csr = &ep_csr->maxp_csr[is_rx]; - - maxp_csr->maxp = mps; - maxp_csr->csrh = 0; +bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * ep_desc) { + const unsigned ep_addr = ep_desc->bEndpointAddress; + const unsigned epn = tu_edpt_number(ep_addr); + const unsigned dir_in = tu_edpt_dir(ep_addr); + const unsigned mps = tu_edpt_packet_size(ep_desc); + + pipe_state_t *pipe = &_dcd.pipe[dir_in][epn - 1]; + pipe->buf = NULL; + pipe->length = 0; + pipe->remaining = 0; + + musb_regs_t* musb = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb, epn); + const uint8_t is_rx = 1 - dir_in; + musb_ep_maxp_csr_t* maxp_csr = &ep_csr->maxp_csr[is_rx]; + + maxp_csr->maxp = mps; + maxp_csr->csrh = 0; #if MUSB_CFG_SHARED_FIFO - if (dir_in) { - maxp_csr->csrh |= MUSB_CSRH_TX_MODE; - } + if (dir_in) { + maxp_csr->csrh |= MUSB_CSRH_TX_MODE; + } #endif - hwfifo_flush(musb, epn, is_rx, true); + hwfifo_flush(musb, epn, is_rx, true); - TU_ASSERT(hwfifo_config(musb, epn, is_rx, mps, false)); - musb->intren_ep[is_rx] |= TU_BIT(epn); + TU_ASSERT(hwfifo_config(musb, epn, is_rx, mps, false)); + musb->intren_ep[is_rx] |= TU_BIT(epn); - return true; + return true; } -bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) -{ - const unsigned epn = tu_edpt_number(ep_addr); - const unsigned dir_in = tu_edpt_dir(ep_addr); - musb_regs_t *musb = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb, epn); - const uint8_t is_rx = 1 - dir_in; - ep_csr->maxp_csr[is_rx].csrh = 0; - return hwfifo_config(musb, epn, is_rx, largest_packet_size, true); +bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size) { + const unsigned epn = tu_edpt_number(ep_addr); + const unsigned dir_in = tu_edpt_dir(ep_addr); + musb_regs_t* musb = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb, epn); + const uint8_t is_rx = 1 - dir_in; + ep_csr->maxp_csr[is_rx].csrh = 0; + return hwfifo_config(musb, epn, is_rx, largest_packet_size, true); } -bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *ep_desc) -{ - const unsigned ep_addr = ep_desc->bEndpointAddress; - const unsigned epn = tu_edpt_number(ep_addr); - const unsigned dir_in = tu_edpt_dir(ep_addr); - const unsigned mps = tu_edpt_packet_size(ep_desc); +bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *ep_desc ) { + const unsigned ep_addr = ep_desc->bEndpointAddress; + const unsigned epn = tu_edpt_number(ep_addr); + const unsigned dir_in = tu_edpt_dir(ep_addr); + const unsigned mps = tu_edpt_packet_size(ep_desc); - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); - pipe_state_t *pipe = &_dcd.pipe[dir_in][epn - 1]; - pipe->buf = NULL; - pipe->length = 0; - pipe->remaining = 0; + pipe_state_t *pipe = &_dcd.pipe[dir_in][epn - 1]; + pipe->buf = NULL; + pipe->length = 0; + pipe->remaining = 0; - musb_regs_t *musb = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb, epn); - const uint8_t is_rx = 1 - dir_in; - musb_ep_maxp_csr_t *maxp_csr = &ep_csr->maxp_csr[is_rx]; + musb_regs_t* musb = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb, epn); + const uint8_t is_rx = 1 - dir_in; + musb_ep_maxp_csr_t* maxp_csr = &ep_csr->maxp_csr[is_rx]; - maxp_csr->maxp = mps; - maxp_csr->csrh |= MUSB_CSRH_ISO; + maxp_csr->maxp = mps; + maxp_csr->csrh |= MUSB_CSRH_ISO; #if MUSB_CFG_SHARED_FIFO - if (dir_in) { - maxp_csr->csrh |= MUSB_CSRH_TX_MODE; - } + if (dir_in) { + maxp_csr->csrh |= MUSB_CSRH_TX_MODE; + } #endif - hwfifo_flush(musb, epn, is_rx, true); + hwfifo_flush(musb, epn, is_rx, true); #if MUSB_CFG_DYNAMIC_FIFO - // fifo space is already allocated, keep the address and just change packet size - musb->fifo_size[is_rx] = hwfifo_byte2size(mps) | MUSB_FIFOSZ_DOUBLE_PACKET; + // fifo space is already allocated, keep the address and just change packet size + musb->fifo_size[is_rx] = hwfifo_byte2size(mps) | MUSB_FIFOSZ_DOUBLE_PACKET; #endif - musb->intren_ep[is_rx] |= TU_BIT(epn); + musb->intren_ep[is_rx] |= TU_BIT(epn); - if (ie) - musb_dcd_int_enable(rhport); + if (ie) musb_dcd_int_enable(rhport); - return true; + return true; } void dcd_edpt_close_all(uint8_t rhport) { - musb_regs_t *musb = MUSB_REGS(rhport); - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); - - musb->intr_txen = 1; /* Enable only EP0 */ - musb->intr_rxen = 0; - for (unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) { - musb_ep_csr_t *ep_csr = get_ep_csr(musb, i); - for (unsigned d = 0; d < 2; d++) { - musb_ep_maxp_csr_t *maxp_csr = &ep_csr->maxp_csr[d]; - hwfifo_flush(musb, i, d, true); - hwfifo_reset(musb, i, d); - maxp_csr->maxp = 0; - maxp_csr->csrh = 0; - } + musb_regs_t* musb = MUSB_REGS(rhport); + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); + + musb->intr_txen = 1; /* Enable only EP0 */ + musb->intr_rxen = 0; + for (unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) { + musb_ep_csr_t* ep_csr = get_ep_csr(musb, i); + for (unsigned d = 0; d < 2; d++) { + musb_ep_maxp_csr_t* maxp_csr = &ep_csr->maxp_csr[d]; + hwfifo_flush(musb, i, d, true); + hwfifo_reset(musb, i, d); + maxp_csr->maxp = 0; + maxp_csr->csrh = 0; } + } #if MUSB_CFG_DYNAMIC_FIFO - alloced_fifo_bytes = CFG_TUD_ENDPOINT0_SIZE; + alloced_fifo_bytes = CFG_TUD_ENDPOINT0_SIZE; #endif - if (ie) - musb_dcd_int_enable(rhport); + if (ie) musb_dcd_int_enable(rhport); } // Submit a transfer, When complete dcd_event_xfer_complete() is invoked to notify the stack -bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes) +bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes) { - (void)rhport; - bool ret; - // TU_LOG1("X %x %d\r\n", ep_addr, total_bytes); - unsigned const epnum = tu_edpt_number(ep_addr); - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); - - if (epnum) { - _dcd.pipe_buf_is_fifo[tu_edpt_dir(ep_addr)] &= ~TU_BIT(epnum - 1); - ret = edpt_n_xfer(rhport, ep_addr, buffer, total_bytes); - } else { - ret = edpt0_xfer(rhport, ep_addr, buffer, total_bytes); - } + (void)rhport; + bool ret; + // TU_LOG1("X %x %d\r\n", ep_addr, total_bytes); + unsigned const epnum = tu_edpt_number(ep_addr); + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); + + if (epnum) { + _dcd.pipe_buf_is_fifo[tu_edpt_dir(ep_addr)] &= ~TU_BIT(epnum - 1); + ret = edpt_n_xfer(rhport, ep_addr, buffer, total_bytes); + } else { + ret = edpt0_xfer(rhport, ep_addr, buffer, total_bytes); + } - if (ie) - musb_dcd_int_enable(rhport); - return ret; + if (ie) musb_dcd_int_enable(rhport); + return ret; } // Submit a transfer where is managed by FIFO, When complete dcd_event_xfer_complete() is invoked to notify the stack // - optional, however, must be listed in usbd.c -bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes) +bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes) { - (void)rhport; - bool ret; - // TU_LOG1("X %x %d\r\n", ep_addr, total_bytes); - unsigned const epnum = tu_edpt_number(ep_addr); - TU_ASSERT(epnum); - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); - _dcd.pipe_buf_is_fifo[tu_edpt_dir(ep_addr)] |= TU_BIT(epnum - 1); - ret = edpt_n_xfer(rhport, ep_addr, (uint8_t *)ff, total_bytes); - if (ie) - musb_dcd_int_enable(rhport); - return ret; + (void)rhport; + bool ret; + // TU_LOG1("X %x %d\r\n", ep_addr, total_bytes); + unsigned const epnum = tu_edpt_number(ep_addr); + TU_ASSERT(epnum); + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); + _dcd.pipe_buf_is_fifo[tu_edpt_dir(ep_addr)] |= TU_BIT(epnum - 1); + ret = edpt_n_xfer(rhport, ep_addr, (uint8_t*)ff, total_bytes); + if (ie) musb_dcd_int_enable(rhport); + return ret; } // Stall endpoint -void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr) -{ - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); - - unsigned const epn = tu_edpt_number(ep_addr); - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epn); - - if (0 == epn) { - if (!ep_addr) { /* Ignore EP80 */ - _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; - _dcd.pipe0.buf = NULL; - ep_csr->csr0l = MUSB_CSRL0_STALL; - } - } else { - const uint8_t is_rx = 1 - tu_edpt_dir(ep_addr); - ep_csr->maxp_csr[is_rx].csrl = MUSB_CSRL_SEND_STALL(is_rx); +void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr) { + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); + + unsigned const epn = tu_edpt_number(ep_addr); + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epn); + + if (0 == epn) { + if (!ep_addr) { /* Ignore EP80 */ + _dcd.setup_packet.bmRequestType = REQUEST_TYPE_INVALID; + _dcd.pipe0.buf = NULL; + ep_csr->csr0l = MUSB_CSRL0_STALL; } + } else { + const uint8_t is_rx = 1 - tu_edpt_dir(ep_addr); + ep_csr->maxp_csr[is_rx].csrl = MUSB_CSRL_SEND_STALL(is_rx); + } - if (ie) - musb_dcd_int_enable(rhport); + if (ie) musb_dcd_int_enable(rhport); } // clear stall, data toggle is also reset to DATA0 void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) { - (void)rhport; - unsigned const ie = musb_dcd_get_int_enable(rhport); - musb_dcd_int_disable(rhport); + (void)rhport; + unsigned const ie = musb_dcd_get_int_enable(rhport); + musb_dcd_int_disable(rhport); - unsigned const epn = tu_edpt_number(ep_addr); - musb_regs_t *musb_regs = MUSB_REGS(rhport); - musb_ep_csr_t *ep_csr = get_ep_csr(musb_regs, epn); - const uint8_t is_rx = 1 - tu_edpt_dir(ep_addr); + unsigned const epn = tu_edpt_number(ep_addr); + musb_regs_t* musb_regs = MUSB_REGS(rhport); + musb_ep_csr_t* ep_csr = get_ep_csr(musb_regs, epn); + const uint8_t is_rx = 1 - tu_edpt_dir(ep_addr); - ep_csr->maxp_csr[is_rx].csrl = MUSB_CSRL_CLEAR_DATA_TOGGLE(is_rx); + ep_csr->maxp_csr[is_rx].csrl = MUSB_CSRL_CLEAR_DATA_TOGGLE(is_rx); - if (ie) - musb_dcd_int_enable(rhport); + if (ie) musb_dcd_int_enable(rhport); } /*------------------------------------------------------------------- * ISR *-------------------------------------------------------------------*/ -void dcd_int_handler(uint8_t rhport) -{ - musb_regs_t *musb_regs = MUSB_REGS(rhport); - const uint8_t saved_index = musb_regs->index; // save endpoint index - - //Part specific ISR setup/entry - musb_dcd_int_handler_enter(rhport); - - uint_fast8_t intr_usb = musb_regs->intr_usb; // a read will clear this interrupt status - uint_fast8_t intr_tx = musb_regs->intr_tx; // a read will clear this interrupt status - uint_fast8_t intr_rx = musb_regs->intr_rx; // a read will clear this interrupt status - // TU_LOG1("D%2x T%2x R%2x\r\n", is, txis, rxis); - - intr_usb &= musb_regs->intr_usben; /* Clear disabled interrupts */ - if (intr_usb & MUSB_IS_DISCON) {} - if (intr_usb & MUSB_IS_SOF) { - dcd_event_bus_signal(rhport, DCD_EVENT_SOF, true); - } - if (intr_usb & MUSB_IS_RESET) { - process_bus_reset(rhport); - } - if (intr_usb & MUSB_IS_RESUME) { - dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true); - } - if (intr_usb & MUSB_IS_SUSPEND) { - dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true); - } - - intr_tx &= musb_regs->intr_txen; /* Clear disabled interrupts */ - if (intr_tx & TU_BIT(0)) { - process_ep0(rhport); - intr_tx &= ~TU_BIT(0); - } - while (intr_tx) { - unsigned const num = __builtin_ctz(intr_tx); - process_edpt_n(rhport, tu_edpt_addr(num, TUSB_DIR_IN)); - intr_tx &= ~TU_BIT(num); - } - - intr_rx &= musb_regs->intr_rxen; /* Clear disabled interrupts */ - while (intr_rx) { - unsigned const num = __builtin_ctz(intr_rx); - process_edpt_n(rhport, tu_edpt_addr(num, TUSB_DIR_OUT)); - intr_rx &= ~TU_BIT(num); - } - - musb_regs->index = saved_index; // restore endpoint index +void dcd_int_handler(uint8_t rhport) { + musb_regs_t* musb_regs = MUSB_REGS(rhport); + const uint8_t saved_index = musb_regs->index; // save endpoint index + + //Part specific ISR setup/entry + musb_dcd_int_handler_enter(rhport); + + uint_fast8_t intr_usb = musb_regs->intr_usb; // a read will clear this interrupt status + uint_fast8_t intr_tx = musb_regs->intr_tx; // a read will clear this interrupt status + uint_fast8_t intr_rx = musb_regs->intr_rx; // a read will clear this interrupt status + // TU_LOG1("D%2x T%2x R%2x\r\n", is, txis, rxis); + + intr_usb &= musb_regs->intr_usben; /* Clear disabled interrupts */ + if (intr_usb & MUSB_IS_DISCON) { + } + if (intr_usb & MUSB_IS_SOF) { + dcd_event_bus_signal(rhport, DCD_EVENT_SOF, true); + } + if (intr_usb & MUSB_IS_RESET) { + process_bus_reset(rhport); + } + if (intr_usb & MUSB_IS_RESUME) { + dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true); + } + if (intr_usb & MUSB_IS_SUSPEND) { + dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true); + } + + intr_tx &= musb_regs->intr_txen; /* Clear disabled interrupts */ + if (intr_tx & TU_BIT(0)) { + process_ep0(rhport); + intr_tx &= ~TU_BIT(0); + } + while (intr_tx) { + unsigned const num = __builtin_ctz(intr_tx); + process_edpt_n(rhport, tu_edpt_addr(num, TUSB_DIR_IN)); + intr_tx &= ~TU_BIT(num); + } + + intr_rx &= musb_regs->intr_rxen; /* Clear disabled interrupts */ + while (intr_rx) { + unsigned const num = __builtin_ctz(intr_rx); + process_edpt_n(rhport, tu_edpt_addr(num, TUSB_DIR_OUT)); + intr_rx &= ~TU_BIT(num); + } + + musb_regs->index = saved_index; // restore endpoint index } #endif diff --git a/Libraries/tinyusb/src/portable/mentor/musb/musb_max32.h b/Libraries/tinyusb/src/portable/mentor/musb/musb_max32.h index dfaddbf4a09..35849b5f837 100644 --- a/Libraries/tinyusb/src/portable/mentor/musb/musb_max32.h +++ b/Libraries/tinyusb/src/portable/mentor/musb/musb_max32.h @@ -34,8 +34,8 @@ extern "C" { #include "mxc_device.h" #include "usbhs_regs.h" -#define MUSB_CFG_SHARED_FIFO 1 // shared FIFO for TX and RX endpoints -#define MUSB_CFG_DYNAMIC_FIFO 0 // dynamic EP FIFO sizing +#define MUSB_CFG_SHARED_FIFO 1 // shared FIFO for TX and RX endpoints +#define MUSB_CFG_DYNAMIC_FIFO 0 // dynamic EP FIFO sizing const uintptr_t MUSB_BASES[] = { MXC_BASE_USBHS }; @@ -43,87 +43,83 @@ const uintptr_t MUSB_BASES[] = { MXC_BASE_USBHS }; #define USBHS_M31_CLOCK_RECOVERY // Mapping of IRQ numbers to port. Currently just 1. -static const IRQn_Type musb_irqs[] = { USB_IRQn }; +static const IRQn_Type musb_irqs[] = { + USB_IRQn +}; -TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_enable(uint8_t rhport) -{ - NVIC_EnableIRQ(musb_irqs[rhport]); +TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_enable(uint8_t rhport) { + NVIC_EnableIRQ(musb_irqs[rhport]); } -TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_disable(uint8_t rhport) -{ - NVIC_DisableIRQ(musb_irqs[rhport]); +TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_disable(uint8_t rhport) { + NVIC_DisableIRQ(musb_irqs[rhport]); } -TU_ATTR_ALWAYS_INLINE static inline unsigned musb_dcd_get_int_enable(uint8_t rhport) -{ -#ifdef NVIC_GetEnableIRQ // only defined in CMSIS 5 - return NVIC_GetEnableIRQ(musb_irqs[rhport]); -#else - uint32_t IRQn = (uint32_t)musb_irqs[rhport]; - return ((NVIC->ISER[IRQn >> 5UL] & (1UL << (IRQn & 0x1FUL))) != 0UL) ? 1UL : 0UL; -#endif +TU_ATTR_ALWAYS_INLINE static inline unsigned musb_dcd_get_int_enable(uint8_t rhport) { + #ifdef NVIC_GetEnableIRQ // only defined in CMSIS 5 + return NVIC_GetEnableIRQ(musb_irqs[rhport]); + #else + uint32_t IRQn = (uint32_t) musb_irqs[rhport]; + return ((NVIC->ISER[IRQn >> 5UL] & (1UL << (IRQn & 0x1FUL))) != 0UL) ? 1UL : 0UL; + #endif } -TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_clear(uint8_t rhport) -{ - NVIC_ClearPendingIRQ(musb_irqs[rhport]); +TU_ATTR_ALWAYS_INLINE static inline void musb_dcd_int_clear(uint8_t rhport) { + NVIC_ClearPendingIRQ(musb_irqs[rhport]); } -static inline void musb_dcd_int_handler_enter(uint8_t rhport) -{ - mxc_usbhs_regs_t *hs_phy = MXC_USBHS; - uint32_t mxm_int, mxm_int_en, mxm_is; +static inline void musb_dcd_int_handler_enter(uint8_t rhport) { + mxc_usbhs_regs_t* hs_phy = MXC_USBHS; + uint32_t mxm_int, mxm_int_en, mxm_is; - //Handle PHY specific events - mxm_int = hs_phy->mxm_int; - mxm_int_en = hs_phy->mxm_int_en; - mxm_is = mxm_int & mxm_int_en; - hs_phy->mxm_int = mxm_is; + //Handle PHY specific events + mxm_int = hs_phy->mxm_int; + mxm_int_en = hs_phy->mxm_int_en; + mxm_is = mxm_int & mxm_int_en; + hs_phy->mxm_int = mxm_is; - if (mxm_is & MXC_F_USBHS_MXM_INT_NOVBUS) { - dcd_event_bus_signal(rhport, DCD_EVENT_UNPLUGGED, true); - } + if (mxm_is & MXC_F_USBHS_MXM_INT_NOVBUS) { + dcd_event_bus_signal(rhport, DCD_EVENT_UNPLUGGED, true); + } } -static inline void musb_dcd_phy_init(uint8_t rhport) -{ - (void)rhport; - mxc_usbhs_regs_t *hs_phy = MXC_USBHS; - - // Interrupt for VBUS disconnect - hs_phy->mxm_int_en |= MXC_F_USBHS_MXM_INT_EN_NOVBUS; - - musb_dcd_int_clear(rhport); - - // Unsuspend the MAC - hs_phy->mxm_suspend = 0; - - // Configure PHY - hs_phy->m31_phy_xcfgi_31_0 = (0x1 << 3) | (0x1 << 11); - hs_phy->m31_phy_xcfgi_63_32 = 0; - hs_phy->m31_phy_xcfgi_95_64 = 0x1 << (72 - 64); - hs_phy->m31_phy_xcfgi_127_96 = 0; - -#ifdef USBHS_M31_CLOCK_RECOVERY - hs_phy->m31_phy_noncry_rstb = 1; - hs_phy->m31_phy_noncry_en = 1; - hs_phy->m31_phy_outclksel = 0; - hs_phy->m31_phy_coreclkin = 0; - hs_phy->m31_phy_xtlsel = 2; /* Select 25 MHz clock */ -#else - hs_phy->m31_phy_noncry_rstb = 0; - hs_phy->m31_phy_noncry_en = 0; - hs_phy->m31_phy_outclksel = 1; - hs_phy->m31_phy_coreclkin = 1; - hs_phy->m31_phy_xtlsel = 3; /* Select 30 MHz clock */ -#endif - hs_phy->m31_phy_pll_en = 1; - hs_phy->m31_phy_oscouten = 1; - - /* Reset PHY */ - hs_phy->m31_phy_ponrst = 0; - hs_phy->m31_phy_ponrst = 1; +static inline void musb_dcd_phy_init(uint8_t rhport) { + (void) rhport; + mxc_usbhs_regs_t* hs_phy = MXC_USBHS; + + // Interrupt for VBUS disconnect + hs_phy->mxm_int_en |= MXC_F_USBHS_MXM_INT_EN_NOVBUS; + + musb_dcd_int_clear(rhport); + + // Unsuspend the MAC + hs_phy->mxm_suspend = 0; + + // Configure PHY + hs_phy->m31_phy_xcfgi_31_0 = (0x1 << 3) | (0x1 << 11); + hs_phy->m31_phy_xcfgi_63_32 = 0; + hs_phy->m31_phy_xcfgi_95_64 = 0x1 << (72 - 64); + hs_phy->m31_phy_xcfgi_127_96 = 0; + + #ifdef USBHS_M31_CLOCK_RECOVERY + hs_phy->m31_phy_noncry_rstb = 1; + hs_phy->m31_phy_noncry_en = 1; + hs_phy->m31_phy_outclksel = 0; + hs_phy->m31_phy_coreclkin = 0; + hs_phy->m31_phy_xtlsel = 2; /* Select 25 MHz clock */ + #else + hs_phy->m31_phy_noncry_rstb = 0; + hs_phy->m31_phy_noncry_en = 0; + hs_phy->m31_phy_outclksel = 1; + hs_phy->m31_phy_coreclkin = 1; + hs_phy->m31_phy_xtlsel = 3; /* Select 30 MHz clock */ + #endif + hs_phy->m31_phy_pll_en = 1; + hs_phy->m31_phy_oscouten = 1; + + /* Reset PHY */ + hs_phy->m31_phy_ponrst = 0; + hs_phy->m31_phy_ponrst = 1; } // static inline void musb_dcd_setup_fifo(uint8_t rhport, unsigned epnum, unsigned dir_in, unsigned mps) { diff --git a/Libraries/tinyusb/src/portable/mentor/musb/musb_type.h b/Libraries/tinyusb/src/portable/mentor/musb/musb_type.h index 89c32c81ef4..4e448c0eda2 100644 --- a/Libraries/tinyusb/src/portable/mentor/musb/musb_type.h +++ b/Libraries/tinyusb/src/portable/mentor/musb/musb_type.h @@ -64,234 +64,234 @@ #include "stdint.h" #ifdef __cplusplus -extern "C" { + extern "C" { #endif #ifndef __IO -#define __IO volatile + #define __IO volatile #endif #ifndef __I -#define __I volatile const + #define __I volatile const #endif #ifndef __O -#define __O volatile + #define __O volatile #endif #ifndef __R -#define __R volatile const + #define __R volatile const #endif typedef struct TU_ATTR_PACKED { - __IO uint16_t maxp; // 0x00, 0x04: MAXP - __IO uint8_t csrl; // 0x02, 0x06: CSRL - __IO uint8_t csrh; // 0x03, 0x07: CSRH -} musb_ep_maxp_csr_t; + __IO uint16_t maxp; // 0x00, 0x04: MAXP + __IO uint8_t csrl; // 0x02, 0x06: CSRL + __IO uint8_t csrh; // 0x03, 0x07: CSRH +}musb_ep_maxp_csr_t; // 0: TX (device IN, host OUT) // 1: RX (device OUT, host IN) typedef struct TU_ATTR_PACKED { - union { - struct { - __IO uint16_t tx_maxp; // 0x00: TXMAXP - union { - __IO uint8_t csr0l; // 0x02: CSR0 - __IO uint8_t tx_csrl; // 0x02: TX CSRL - }; - union { - __IO uint8_t csr0h; // 0x03: CSR0H - __IO uint8_t tx_csrh; // 0x03: TX CSRH - }; - - __IO uint16_t rx_maxp; // 0x04: RX MAXP - __IO uint8_t rx_csrl; // 0x06: RX CSRL - __IO uint8_t rx_csrh; // 0x07: RX CSRH - }; - - musb_ep_maxp_csr_t maxp_csr[2]; + union { + struct { + __IO uint16_t tx_maxp; // 0x00: TXMAXP + union { + __IO uint8_t csr0l; // 0x02: CSR0 + __IO uint8_t tx_csrl; // 0x02: TX CSRL + }; + union { + __IO uint8_t csr0h; // 0x03: CSR0H + __IO uint8_t tx_csrh; // 0x03: TX CSRH + }; + + __IO uint16_t rx_maxp; // 0x04: RX MAXP + __IO uint8_t rx_csrl; // 0x06: RX CSRL + __IO uint8_t rx_csrh; // 0x07: RX CSRH }; - union { - __IO uint16_t count0; // 0x08: COUNT0 - __IO uint16_t rx_count; // 0x08: RX COUNT - }; - union { - __IO uint8_t type0; // 0x0A: TYPE0 (host only) - __IO uint8_t tx_type; // 0x0A: TX TYPE - }; - __IO uint8_t tx_interval; // 0x0B: TX INTERVAL - __IO uint8_t rx_type; // 0x0C: RX TYPE - __IO uint8_t rx_interval; // 0x0D: RX INTERVAL - __IO uint8_t reserved_0x0e; // 0x0E: Reserved - union { - __IO uint8_t config_data0; // 0x0F: CONFIG DATA - struct { - __IO uint8_t utmi_data_width : 1; // [0] UTMI Data Width - __IO uint8_t softconn_en : 1; // [1] Soft Connect Enable - __IO uint8_t dynamic_fifo : 1; // [2] Dynamic FIFO Sizing - __IO uint8_t hb_tx_en : 1; // [3] High Bandwidth TX ISO Enable - __IO uint8_t hb_rx_en : 1; // [4] High Bandwidth RX ISO Enable - __IO uint8_t big_endian : 1; // [5] Big Endian - __IO uint8_t mp_tx_en : 1; // [6] Auto splitting BULK TX Enable - __IO uint8_t mp_rx_en : 1; // [7] Auto amalgamation BULK RX Enable - } config_data0_bit; - - __IO uint8_t fifo_size; // 0x0F: FIFO_SIZE - struct { - __IO uint8_t tx : 4; // [3:0] TX FIFO Size - __IO uint8_t rx : 4; // [7:4] RX FIFO Size - } fifo_size_bit; - }; + musb_ep_maxp_csr_t maxp_csr[2]; + }; + + union { + __IO uint16_t count0; // 0x08: COUNT0 + __IO uint16_t rx_count; // 0x08: RX COUNT + }; + union { + __IO uint8_t type0; // 0x0A: TYPE0 (host only) + __IO uint8_t tx_type; // 0x0A: TX TYPE + }; + __IO uint8_t tx_interval; // 0x0B: TX INTERVAL + __IO uint8_t rx_type; // 0x0C: RX TYPE + __IO uint8_t rx_interval; // 0x0D: RX INTERVAL + __IO uint8_t reserved_0x0e; // 0x0E: Reserved + union { + __IO uint8_t config_data0; // 0x0F: CONFIG DATA + struct { + __IO uint8_t utmi_data_width : 1; // [0] UTMI Data Width + __IO uint8_t softconn_en : 1; // [1] Soft Connect Enable + __IO uint8_t dynamic_fifo : 1; // [2] Dynamic FIFO Sizing + __IO uint8_t hb_tx_en : 1; // [3] High Bandwidth TX ISO Enable + __IO uint8_t hb_rx_en : 1; // [4] High Bandwidth RX ISO Enable + __IO uint8_t big_endian : 1; // [5] Big Endian + __IO uint8_t mp_tx_en : 1; // [6] Auto splitting BULK TX Enable + __IO uint8_t mp_rx_en : 1; // [7] Auto amalgamation BULK RX Enable + } config_data0_bit; + + __IO uint8_t fifo_size; // 0x0F: FIFO_SIZE + struct { + __IO uint8_t tx : 4; // [3:0] TX FIFO Size + __IO uint8_t rx : 4; // [7:4] RX FIFO Size + }fifo_size_bit; + }; } musb_ep_csr_t; TU_VERIFY_STATIC(sizeof(musb_ep_csr_t) == 16, "size is not correct"); typedef struct TU_ATTR_PACKED { - //------------- Common -------------// - __IO uint8_t faddr; // 0x00: FADDR - union { - __IO uint8_t power; // 0x01: POWER - struct { - __IO uint8_t suspend_mode_en : 1; // [0] SUSPEND Mode Enable - __IO uint8_t suspend_mode : 1; // [1] SUSPEND Mode - __IO uint8_t resume_mode : 1; // [2] RESUME - __IO uint8_t reset : 1; // [3] RESET - __IO uint8_t highspeed_mode : 1; // [4] High Speed Mode - __IO uint8_t highspeed_en : 1; // [5] High Speed Enable - __IO uint8_t soft_conn : 1; // [6] Soft Connect/Disconnect - __IO uint8_t iso_update : 1; // [7] Isochronous Update - } power_bit; - }; - - union { - struct { - __IO uint16_t intr_tx; // 0x02: INTR_TX - __IO uint16_t intr_rx; // 0x04: INTR_RX - }; - - __IO uint16_t intr_ep[2]; // 0x02-0x05: INTR_EP0-1 + //------------- Common -------------// + __IO uint8_t faddr; // 0x00: FADDR + union { + __IO uint8_t power; // 0x01: POWER + struct { + __IO uint8_t suspend_mode_en : 1; // [0] SUSPEND Mode Enable + __IO uint8_t suspend_mode : 1; // [1] SUSPEND Mode + __IO uint8_t resume_mode : 1; // [2] RESUME + __IO uint8_t reset : 1; // [3] RESET + __IO uint8_t highspeed_mode : 1; // [4] High Speed Mode + __IO uint8_t highspeed_en : 1; // [5] High Speed Enable + __IO uint8_t soft_conn : 1; // [6] Soft Connect/Disconnect + __IO uint8_t iso_update : 1; // [7] Isochronous Update + } power_bit; + }; + + union { + struct { + __IO uint16_t intr_tx; // 0x02: INTR_TX + __IO uint16_t intr_rx; // 0x04: INTR_RX }; - union { - struct { - __IO uint16_t intr_txen; // 0x06: INTR_TXEN - __IO uint16_t intr_rxen; // 0x08: INTR_RXEN - }; + __IO uint16_t intr_ep[2]; // 0x02-0x05: INTR_EP0-1 + }; - __IO uint16_t intren_ep[2]; // 0x06-0x09: INTREN_EP0-1 + union { + struct { + __IO uint16_t intr_txen; // 0x06: INTR_TXEN + __IO uint16_t intr_rxen; // 0x08: INTR_RXEN }; - __IO uint8_t intr_usb; // 0x0A: INTRUSB - __IO uint8_t intr_usben; // 0x0B: INTRUSBEN + __IO uint16_t intren_ep[2]; // 0x06-0x09: INTREN_EP0-1 + }; - __IO uint16_t frame; // 0x0C: FRAME - __IO uint8_t index; // 0x0E: INDEX - __IO uint8_t testmode; // 0x0F: TESTMODE + __IO uint8_t intr_usb; // 0x0A: INTRUSB + __IO uint8_t intr_usben; // 0x0B: INTRUSBEN - //------------- Endpoint CSR (indexed) -------------// - musb_ep_csr_t indexed_csr; // 0x10-0x1F: Indexed CSR 0-15 + __IO uint16_t frame; // 0x0C: FRAME + __IO uint8_t index; // 0x0E: INDEX + __IO uint8_t testmode; // 0x0F: TESTMODE - //------------- FIFOs -------------// - __IO uint32_t fifo[16]; // 0x20-0x5C: FIFO 0-15 + //------------- Endpoint CSR (indexed) -------------// + musb_ep_csr_t indexed_csr; // 0x10-0x1F: Indexed CSR 0-15 - // Common (2) - __IO uint8_t devctl; // 0x60: DEVCTL - __IO uint8_t misc; // 0x61: MISC + //------------- FIFOs -------------// + __IO uint32_t fifo[16]; // 0x20-0x5C: FIFO 0-15 - //------------- Dynammic FIFO (indexed) -------------// - union { - struct { - __IO uint8_t txfifo_sz; // 0x62: TXFIFO_SZ - __IO uint8_t rxfifo_sz; // 0x63: RXFIFO_SZ - }; - __IO uint8_t fifo_size[2]; - }; + // Common (2) + __IO uint8_t devctl; // 0x60: DEVCTL + __IO uint8_t misc; // 0x61: MISC - union { - struct { - __IO uint16_t txfifo_addr; // 0x64: TXFIFO_ADDR - __IO uint16_t rxfifo_addr; // 0x66: RXFIFO_ADDR - }; - __IO uint16_t fifo_addr[2]; + //------------- Dynammic FIFO (indexed) -------------// + union { + struct { + __IO uint8_t txfifo_sz; // 0x62: TXFIFO_SZ + __IO uint8_t rxfifo_sz; // 0x63: RXFIFO_SZ }; + __IO uint8_t fifo_size[2]; + }; - //------------- Additional Control and Configuration -------------// - union { - __O uint32_t vcontrol; // 0x68: PHY VCONTROL - __IO uint32_t vstatus; // 0x68: PHY VSTATUS - }; - union { - __IO uint16_t hwvers; // 0x6C: HWVERS - struct { - __IO uint16_t minor : 10; // [9:0] Minor - __IO uint16_t major : 5; // [14:10] Major - __IO uint16_t rc : 1; // [15] Release Candidate - } hwvers_bit; - }; - __R uint16_t rsv_0x6e_0x77[5]; // 0x6E-0x77: Reserved - - //------------- Additional Configuration -------------// - union { - __IO uint8_t epinfo; // 0x78: EPINFO - struct { - __IO uint8_t tx_ep_num : 4; // [3:0] TX Endpoints - __IO uint8_t rx_ep_num : 4; // [7:4] RX Endpoints - } epinfo_bit; - }; - union { - __IO uint8_t raminfo; // 0x79: RAMINFO - struct { - __IO uint8_t ram_bits : 4; // [3:0] RAM Address Bus Width - __IO uint8_t dma_channel : 4; // [7:4] DMA Channels - } raminfo_bit; - }; - union { - __IO uint8_t link_info; // 0x7A: LINK_INFO - __IO uint8_t adi_softreset; // 0x7A: AnalogDevice SOFTRESET + union { + struct { + __IO uint16_t txfifo_addr; // 0x64: TXFIFO_ADDR + __IO uint16_t rxfifo_addr; // 0x66: RXFIFO_ADDR }; - __IO uint8_t vplen; // 0x7B: VPLEN - __IO uint8_t hs_eof1; // 0x7C: HS_EOF1 - __IO uint8_t fs_eof1; // 0x7D: FS_EOF1 - __IO uint8_t ls_eof1; // 0x7E: LS_EOF1 - __IO uint8_t soft_rst; // 0x7F: SOFT_RST - - //------------- Target Endpoints (multipoint option) -------------// - __IO uint16_t ctuch; // 0x80: CTUCH - __IO uint16_t cthsrtn; // 0x82: CTHSRTN - __R uint32_t rsv_0x84_0xff[31]; // 0x84-0xFF: Reserved - - //------------- Non-Indexed Endpoint CSRs -------------// - // TI tm4c can access this directly, but should use indexed_csr for portability - musb_ep_csr_t abs_csr[16]; // 0x100-0x1FF: EP0-15 CSR - - //------------- DMA -------------// - __IO uint8_t dma_intr; // 0x200: DMA_INTR - __R uint8_t rsv_0x201_0x203[3]; // 0x201-0x203: Reserved + __IO uint16_t fifo_addr[2]; + }; + + //------------- Additional Control and Configuration -------------// + union { + __O uint32_t vcontrol; // 0x68: PHY VCONTROL + __IO uint32_t vstatus; // 0x68: PHY VSTATUS + }; + union { + __IO uint16_t hwvers; // 0x6C: HWVERS struct { - __IO uint16_t cntl; // 0x204: DMA_CNTL - __IO uint16_t rsv_0x206; // 0x206: Reserved - __IO uint32_t addr; // 0x208: DMA_ADDR - __IO uint32_t count; // 0x20C: DMA_COUNT - __IO uint32_t rsv_0x210; // 0x210: Reserved - } dma[8]; - __R uint32_t rsv_0x284_0x2FF[31]; // 0x284-0x2FF: Reserved - - //------------- Extended -------------// - __R uint32_t rsv_0x300; // 0x300: Reserved + __IO uint16_t minor : 10; // [9:0] Minor + __IO uint16_t major : 5; // [14:10] Major + __IO uint16_t rc : 1; // [15] Release Candidate + } hwvers_bit; + }; + __R uint16_t rsv_0x6e_0x77[5]; // 0x6E-0x77: Reserved + + //------------- Additional Configuration -------------// + union { + __IO uint8_t epinfo; // 0x78: EPINFO struct { - __IO uint16_t count; // 0x304: REQ_PACKET_COUNT - __R uint16_t rsv_0x306; // 0x306: Reserved - } req_packet[15]; - - __IO uint16_t rx_doulbe_packet_disable; // 0x340: RX_DOUBLE_PACKET_DISABLE - __IO uint16_t tx_double_packet_disable; // 0x342: TX_DOUBLE_PACKET_DISABLE - - __IO uint16_t chirp_timeout; // 0x344: CHIRP_TIMEOUT - __IO uint16_t hs_to_utm; // 0x346: HS_TO_UTM delay - __IO uint16_t hs_timeout_adder; // 0x348: HS_TIMEOUT_ADDER - - __R uint8_t rsv_34A_34f[6]; // 0x34A-0x34F: Reserved + __IO uint8_t tx_ep_num : 4; // [3:0] TX Endpoints + __IO uint8_t rx_ep_num : 4; // [7:4] RX Endpoints + } epinfo_bit; + }; + union { + __IO uint8_t raminfo; // 0x79: RAMINFO + struct { + __IO uint8_t ram_bits : 4; // [3:0] RAM Address Bus Width + __IO uint8_t dma_channel : 4; // [7:4] DMA Channels + }raminfo_bit; + }; + union { + __IO uint8_t link_info; // 0x7A: LINK_INFO + __IO uint8_t adi_softreset; // 0x7A: AnalogDevice SOFTRESET + }; + __IO uint8_t vplen; // 0x7B: VPLEN + __IO uint8_t hs_eof1; // 0x7C: HS_EOF1 + __IO uint8_t fs_eof1; // 0x7D: FS_EOF1 + __IO uint8_t ls_eof1; // 0x7E: LS_EOF1 + __IO uint8_t soft_rst; // 0x7F: SOFT_RST + + //------------- Target Endpoints (multipoint option) -------------// + __IO uint16_t ctuch; // 0x80: CTUCH + __IO uint16_t cthsrtn; // 0x82: CTHSRTN + __R uint32_t rsv_0x84_0xff[31]; // 0x84-0xFF: Reserved + + //------------- Non-Indexed Endpoint CSRs -------------// + // TI tm4c can access this directly, but should use indexed_csr for portability + musb_ep_csr_t abs_csr[16]; // 0x100-0x1FF: EP0-15 CSR + + //------------- DMA -------------// + __IO uint8_t dma_intr; // 0x200: DMA_INTR + __R uint8_t rsv_0x201_0x203[3]; // 0x201-0x203: Reserved + struct { + __IO uint16_t cntl; // 0x204: DMA_CNTL + __IO uint16_t rsv_0x206; // 0x206: Reserved + __IO uint32_t addr; // 0x208: DMA_ADDR + __IO uint32_t count; // 0x20C: DMA_COUNT + __IO uint32_t rsv_0x210; // 0x210: Reserved + }dma[8]; + __R uint32_t rsv_0x284_0x2FF[31]; // 0x284-0x2FF: Reserved + + //------------- Extended -------------// + __R uint32_t rsv_0x300; // 0x300: Reserved + struct { + __IO uint16_t count; // 0x304: REQ_PACKET_COUNT + __R uint16_t rsv_0x306; // 0x306: Reserved + }req_packet[15]; + + __IO uint16_t rx_doulbe_packet_disable; // 0x340: RX_DOUBLE_PACKET_DISABLE + __IO uint16_t tx_double_packet_disable; // 0x342: TX_DOUBLE_PACKET_DISABLE + + __IO uint16_t chirp_timeout; // 0x344: CHIRP_TIMEOUT + __IO uint16_t hs_to_utm; // 0x346: HS_TO_UTM delay + __IO uint16_t hs_timeout_adder; // 0x348: HS_TIMEOUT_ADDER + + __R uint8_t rsv_34A_34f[6]; // 0x34A-0x34F: Reserved } musb_regs_t; TU_VERIFY_STATIC(sizeof(musb_regs_t) == 0x350, "size is not correct"); @@ -299,11 +299,9 @@ TU_VERIFY_STATIC(sizeof(musb_regs_t) == 0x350, "size is not correct"); //--------------------------------------------------------------------+ // Helper //--------------------------------------------------------------------+ -TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_regs, - unsigned epnum) -{ - musb_regs->index = epnum; - return &musb_regs->indexed_csr; +TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t* get_ep_csr(musb_regs_t* musb_regs, unsigned epnum) { + musb_regs->index = epnum; + return &musb_regs->indexed_csr; } //--------------------------------------------------------------------+ @@ -311,116 +309,117 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ //--------------------------------------------------------------------+ // 0x01: Power -#define MUSB_POWER_ISOUP 0x0080 // Isochronous Update -#define MUSB_POWER_SOFTCONN 0x0040 // Soft Connect/Disconnect -#define MUSB_POWER_HSENAB 0x0020 // High Speed Enable -#define MUSB_POWER_HSMODE 0x0010 // High Speed Enable -#define MUSB_POWER_RESET 0x0008 // RESET Signaling -#define MUSB_POWER_RESUME 0x0004 // RESUME Signaling -#define MUSB_POWER_SUSPEND 0x0002 // SUSPEND Mode -#define MUSB_POWER_PWRDNPHY 0x0001 // Power Down PHY +#define MUSB_POWER_ISOUP 0x0080 // Isochronous Update +#define MUSB_POWER_SOFTCONN 0x0040 // Soft Connect/Disconnect +#define MUSB_POWER_HSENAB 0x0020 // High Speed Enable +#define MUSB_POWER_HSMODE 0x0010 // High Speed Enable +#define MUSB_POWER_RESET 0x0008 // RESET Signaling +#define MUSB_POWER_RESUME 0x0004 // RESUME Signaling +#define MUSB_POWER_SUSPEND 0x0002 // SUSPEND Mode +#define MUSB_POWER_PWRDNPHY 0x0001 // Power Down PHY // Interrupt TX/RX Status and Enable: each bit is for an endpoint // 0x6c: HWVERS -#define MUSB_HWVERS_RC_SHIFT 15 -#define MUSB_HWVERS_RC_MASK 0x8000 +#define MUSB_HWVERS_RC_SHIFT 15 +#define MUSB_HWVERS_RC_MASK 0x8000 #define MUSB_HWVERS_MAJOR_SHIFT 10 -#define MUSB_HWVERS_MAJOR_MASK 0x7C00 +#define MUSB_HWVERS_MAJOR_MASK 0x7C00 #define MUSB_HWVERS_MINOR_SHIFT 0 -#define MUSB_HWVERS_MINOR_MASK 0x03FF +#define MUSB_HWVERS_MINOR_MASK 0x03FF // 0x12, 0x16: TX/RX CSRL -#define MUSB_CSRL_PACKET_READY(_rx) (1u << 0) -#define MUSB_CSRL_FLUSH_FIFO(_rx) (1u << ((_rx) ? 4 : 3)) -#define MUSB_CSRL_SEND_STALL(_rx) (1u << ((_rx) ? 5 : 4)) -#define MUSB_CSRL_STALLED(_rx) (1u << ((_rx) ? 6 : 5)) +#define MUSB_CSRL_PACKET_READY(_rx) (1u << 0) +#define MUSB_CSRL_FLUSH_FIFO(_rx) (1u << ((_rx) ? 4 : 3)) +#define MUSB_CSRL_SEND_STALL(_rx) (1u << ((_rx) ? 5 : 4)) +#define MUSB_CSRL_STALLED(_rx) (1u << ((_rx) ? 6 : 5)) #define MUSB_CSRL_CLEAR_DATA_TOGGLE(_rx) (1u << ((_rx) ? 7 : 6)) // 0x13, 0x17: TX/RX CSRH #define MUSB_CSRH_DISABLE_DOUBLE_PACKET(_rx) (1u << 1) -#define MUSB_CSRH_TX_MODE (1u << 5) // 1 = TX, 0 = RX. only relevant for SHARED FIFO -#define MUSB_CSRH_ISO (1u << 6) +#define MUSB_CSRH_TX_MODE (1u << 5) // 1 = TX, 0 = RX. only relevant for SHARED FIFO +#define MUSB_CSRH_ISO (1u << 6) // 0x62, 0x63: TXFIFO_SZ, RXFIFO_SZ -#define MUSB_FIFOSZ_DOUBLE_PACKET (1u << 4) +#define MUSB_FIFOSZ_DOUBLE_PACKET (1u << 4) + //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_IS register. // //***************************************************************************** -#define MUSB_IS_VBUSERR 0x0080 // VBUS Error (OTG only) -#define MUSB_IS_SESREQ 0x0040 // SESSION REQUEST (OTG only) -#define MUSB_IS_DISCON 0x0020 // Session Disconnect (OTG only) -#define MUSB_IS_CONN 0x0010 // Session Connect -#define MUSB_IS_SOF 0x0008 // Start of Frame -#define MUSB_IS_BABBLE 0x0004 // Babble Detected -#define MUSB_IS_RESET 0x0004 // RESET Signaling Detected -#define MUSB_IS_RESUME 0x0002 // RESUME Signaling Detected -#define MUSB_IS_SUSPEND 0x0001 // SUSPEND Signaling Detected +#define MUSB_IS_VBUSERR 0x0080 // VBUS Error (OTG only) +#define MUSB_IS_SESREQ 0x0040 // SESSION REQUEST (OTG only) +#define MUSB_IS_DISCON 0x0020 // Session Disconnect (OTG only) +#define MUSB_IS_CONN 0x0010 // Session Connect +#define MUSB_IS_SOF 0x0008 // Start of Frame +#define MUSB_IS_BABBLE 0x0004 // Babble Detected +#define MUSB_IS_RESET 0x0004 // RESET Signaling Detected +#define MUSB_IS_RESUME 0x0002 // RESUME Signaling Detected +#define MUSB_IS_SUSPEND 0x0001 // SUSPEND Signaling Detected //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_IE register. // //***************************************************************************** -#define MUSB_IE_VBUSERR 0x0080 // Enable VBUS Error Interrupt (OTG only) -#define MUSB_IE_SESREQ 0x0040 // Enable Session Request (OTG only) -#define MUSB_IE_DISCON 0x0020 // Enable Disconnect Interrupt -#define MUSB_IE_CONN 0x0010 // Enable Connect Interrupt -#define MUSB_IE_SOF 0x0008 // Enable Start-of-Frame Interrupt -#define MUSB_IE_BABBLE 0x0004 // Enable Babble Interrupt -#define MUSB_IE_RESET 0x0004 // Enable RESET Interrupt -#define MUSB_IE_RESUME 0x0002 // Enable RESUME Interrupt -#define MUSB_IE_SUSPND 0x0001 // Enable SUSPEND Interrupt +#define MUSB_IE_VBUSERR 0x0080 // Enable VBUS Error Interrupt (OTG only) +#define MUSB_IE_SESREQ 0x0040 // Enable Session Request (OTG only) +#define MUSB_IE_DISCON 0x0020 // Enable Disconnect Interrupt +#define MUSB_IE_CONN 0x0010 // Enable Connect Interrupt +#define MUSB_IE_SOF 0x0008 // Enable Start-of-Frame Interrupt +#define MUSB_IE_BABBLE 0x0004 // Enable Babble Interrupt +#define MUSB_IE_RESET 0x0004 // Enable RESET Interrupt +#define MUSB_IE_RESUME 0x0002 // Enable RESUME Interrupt +#define MUSB_IE_SUSPND 0x0001 // Enable SUSPEND Interrupt //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_FRAME register. // //***************************************************************************** -#define MUSB_FRAME_M 0x07FF // Frame Number -#define MUSB_FRAME_S 0 +#define MUSB_FRAME_M 0x07FF // Frame Number +#define MUSB_FRAME_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TEST register. // //***************************************************************************** -#define MUSB_TEST_FORCEH 0x0080 // Force Host Mode -#define MUSB_TEST_FIFOACC 0x0040 // FIFO Access -#define MUSB_TEST_FORCEFS 0x0020 // Force Full-Speed Mode -#define MUSB_TEST_FORCEHS 0x0010 // Force High-Speed Mode -#define MUSB_TEST_TESTPKT 0x0008 // Test Packet Mode Enable -#define MUSB_TEST_TESTK 0x0004 // Test_K Mode Enable -#define MUSB_TEST_TESTJ 0x0002 // Test_J Mode Enable -#define MUSB_TEST_TESTSE0NAK 0x0001 // Test_SE0_NAK Test Mode Enable +#define MUSB_TEST_FORCEH 0x0080 // Force Host Mode +#define MUSB_TEST_FIFOACC 0x0040 // FIFO Access +#define MUSB_TEST_FORCEFS 0x0020 // Force Full-Speed Mode +#define MUSB_TEST_FORCEHS 0x0010 // Force High-Speed Mode +#define MUSB_TEST_TESTPKT 0x0008 // Test Packet Mode Enable +#define MUSB_TEST_TESTK 0x0004 // Test_K Mode Enable +#define MUSB_TEST_TESTJ 0x0002 // Test_J Mode Enable +#define MUSB_TEST_TESTSE0NAK 0x0001 // Test_SE0_NAK Test Mode Enable //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_DEVCTL register. // //***************************************************************************** -#define MUSB_DEVCTL_DEV 0x0080 // Device Mode (OTG only) -#define MUSB_DEVCTL_FSDEV 0x0040 // Full-Speed Device Detected -#define MUSB_DEVCTL_LSDEV 0x0020 // Low-Speed Device Detected -#define MUSB_DEVCTL_VBUS_M 0x0018 // VBUS Level (OTG only) -#define MUSB_DEVCTL_VBUS_NONE 0x0000 // Below SessionEnd -#define MUSB_DEVCTL_VBUS_SEND 0x0008 // Above SessionEnd, below AValid -#define MUSB_DEVCTL_VBUS_AVALID 0x0010 // Above AValid, below VBUSValid -#define MUSB_DEVCTL_VBUS_VALID 0x0018 // Above VBUSValid -#define MUSB_DEVCTL_HOST 0x0004 // Host Mode -#define MUSB_DEVCTL_HOSTREQ 0x0002 // Host Request (OTG only) -#define MUSB_DEVCTL_SESSION 0x0001 // Session Start/End (OTG only) +#define MUSB_DEVCTL_DEV 0x0080 // Device Mode (OTG only) +#define MUSB_DEVCTL_FSDEV 0x0040 // Full-Speed Device Detected +#define MUSB_DEVCTL_LSDEV 0x0020 // Low-Speed Device Detected +#define MUSB_DEVCTL_VBUS_M 0x0018 // VBUS Level (OTG only) +#define MUSB_DEVCTL_VBUS_NONE 0x0000 // Below SessionEnd +#define MUSB_DEVCTL_VBUS_SEND 0x0008 // Above SessionEnd, below AValid +#define MUSB_DEVCTL_VBUS_AVALID 0x0010 // Above AValid, below VBUSValid +#define MUSB_DEVCTL_VBUS_VALID 0x0018 // Above VBUSValid +#define MUSB_DEVCTL_HOST 0x0004 // Host Mode +#define MUSB_DEVCTL_HOSTREQ 0x0002 // Host Request (OTG only) +#define MUSB_DEVCTL_SESSION 0x0001 // Session Start/End (OTG only) //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CCONF register. // //***************************************************************************** -#define MUSB_CCONF_TXEDMA 0x0002 // TX Early DMA Enable -#define MUSB_CCONF_RXEDMA 0x0001 // TX Early DMA Enable +#define MUSB_CCONF_TXEDMA 0x0002 // TX Early DMA Enable +#define MUSB_CCONF_RXEDMA 0x0001 // TX Early DMA Enable //***************************************************************************** // @@ -428,8 +427,8 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ // register. // //***************************************************************************** -#define MUSB_ULPIVBUSCTL_USEEXTVBUSIND 0x0002 // Use External VBUS Indicator -#define MUSB_ULPIVBUSCTL_USEEXTVBUS 0x0001 // Use External VBUS +#define MUSB_ULPIVBUSCTL_USEEXTVBUSIND 0x0002 // Use External VBUS Indicator +#define MUSB_ULPIVBUSCTL_USEEXTVBUS 0x0001 // Use External VBUS //***************************************************************************** // @@ -437,16 +436,16 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ // register. // //***************************************************************************** -#define MUSB_ULPIREGDATA_REGDATA_M 0x00FF // Register Data -#define MUSB_ULPIREGDATA_REGDATA_S 0 +#define MUSB_ULPIREGDATA_REGDATA_M 0x00FF // Register Data +#define MUSB_ULPIREGDATA_REGDATA_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_ULPIREGADDR // register. // //***************************************************************************** -#define MUSB_ULPIREGADDR_ADDR_M 0x00FF // Register Address -#define MUSB_ULPIREGADDR_ADDR_S 0 +#define MUSB_ULPIREGADDR_ADDR_M 0x00FF // Register Address +#define MUSB_ULPIREGADDR_ADDR_S 0 //***************************************************************************** // @@ -454,199 +453,199 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ // register. // //***************************************************************************** -#define MUSB_ULPIREGCTL_RDWR 0x0004 // Read/Write Control -#define MUSB_ULPIREGCTL_REGCMPLT 0x0002 // Register Access Complete -#define MUSB_ULPIREGCTL_REGACC 0x0001 // Initiate Register Access +#define MUSB_ULPIREGCTL_RDWR 0x0004 // Read/Write Control +#define MUSB_ULPIREGCTL_REGCMPLT 0x0002 // Register Access Complete +#define MUSB_ULPIREGCTL_REGACC 0x0001 // Initiate Register Access //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_EPINFO register. // //***************************************************************************** -#define MUSB_EPINFO_RXEP_M 0x00F0 // RX Endpoints -#define MUSB_EPINFO_TXEP_M 0x000F // TX Endpoints -#define MUSB_EPINFO_RXEP_S 4 -#define MUSB_EPINFO_TXEP_S 0 +#define MUSB_EPINFO_RXEP_M 0x00F0 // RX Endpoints +#define MUSB_EPINFO_TXEP_M 0x000F // TX Endpoints +#define MUSB_EPINFO_RXEP_S 4 +#define MUSB_EPINFO_TXEP_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_RAMINFO register. // //***************************************************************************** -#define MUSB_RAMINFO_DMACHAN_M 0x00F0 // DMA Channels -#define MUSB_RAMINFO_RAMBITS_M 0x000F // RAM Address Bus Width -#define MUSB_RAMINFO_DMACHAN_S 4 -#define MUSB_RAMINFO_RAMBITS_S 0 +#define MUSB_RAMINFO_DMACHAN_M 0x00F0 // DMA Channels +#define MUSB_RAMINFO_RAMBITS_M 0x000F // RAM Address Bus Width +#define MUSB_RAMINFO_DMACHAN_S 4 +#define MUSB_RAMINFO_RAMBITS_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CONTIM register. // //***************************************************************************** -#define MUSB_CONTIM_WTCON_M 0x00F0 // Connect Wait -#define MUSB_CONTIM_WTID_M 0x000F // Wait ID -#define MUSB_CONTIM_WTCON_S 4 -#define MUSB_CONTIM_WTID_S 0 +#define MUSB_CONTIM_WTCON_M 0x00F0 // Connect Wait +#define MUSB_CONTIM_WTID_M 0x000F // Wait ID +#define MUSB_CONTIM_WTCON_S 4 +#define MUSB_CONTIM_WTID_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_VPLEN register. // //***************************************************************************** -#define MUSB_VPLEN_VPLEN_M 0x00FF // VBUS Pulse Length -#define MUSB_VPLEN_VPLEN_S 0 +#define MUSB_VPLEN_VPLEN_M 0x00FF // VBUS Pulse Length +#define MUSB_VPLEN_VPLEN_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_HSEOF register. // //***************************************************************************** -#define MUSB_HSEOF_HSEOFG_M 0x00FF // HIgh-Speed End-of-Frame Gap -#define MUSB_HSEOF_HSEOFG_S 0 +#define MUSB_HSEOF_HSEOFG_M 0x00FF // HIgh-Speed End-of-Frame Gap +#define MUSB_HSEOF_HSEOFG_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_FSEOF register. // //***************************************************************************** -#define MUSB_FSEOF_FSEOFG_M 0x00FF // Full-Speed End-of-Frame Gap -#define MUSB_FSEOF_FSEOFG_S 0 +#define MUSB_FSEOF_FSEOFG_M 0x00FF // Full-Speed End-of-Frame Gap +#define MUSB_FSEOF_FSEOFG_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_LSEOF register. // //***************************************************************************** -#define MUSB_LSEOF_LSEOFG_M 0x00FF // Low-Speed End-of-Frame Gap -#define MUSB_LSEOF_LSEOFG_S 0 +#define MUSB_LSEOF_LSEOFG_M 0x00FF // Low-Speed End-of-Frame Gap +#define MUSB_LSEOF_LSEOFG_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CSRL0 register. // //***************************************************************************** -#define MUSB_CSRL0_NAKTO 0x0080 // NAK Timeout -#define MUSB_CSRL0_SETENDC 0x0080 // Setup End Clear -#define MUSB_CSRL0_STATUS 0x0040 // STATUS Packet -#define MUSB_CSRL0_RXRDYC 0x0040 // RXRDY Clear -#define MUSB_CSRL0_REQPKT 0x0020 // Request Packet -#define MUSB_CSRL0_STALL 0x0020 // Send Stall -#define MUSB_CSRL0_SETEND 0x0010 // Setup End -#define MUSB_CSRL0_ERROR 0x0010 // Error -#define MUSB_CSRL0_DATAEND 0x0008 // Data End -#define MUSB_CSRL0_SETUP 0x0008 // Setup Packet -#define MUSB_CSRL0_STALLED 0x0004 // Endpoint Stalled -#define MUSB_CSRL0_TXRDY 0x0002 // Transmit Packet Ready -#define MUSB_CSRL0_RXRDY 0x0001 // Receive Packet Ready +#define MUSB_CSRL0_NAKTO 0x0080 // NAK Timeout +#define MUSB_CSRL0_SETENDC 0x0080 // Setup End Clear +#define MUSB_CSRL0_STATUS 0x0040 // STATUS Packet +#define MUSB_CSRL0_RXRDYC 0x0040 // RXRDY Clear +#define MUSB_CSRL0_REQPKT 0x0020 // Request Packet +#define MUSB_CSRL0_STALL 0x0020 // Send Stall +#define MUSB_CSRL0_SETEND 0x0010 // Setup End +#define MUSB_CSRL0_ERROR 0x0010 // Error +#define MUSB_CSRL0_DATAEND 0x0008 // Data End +#define MUSB_CSRL0_SETUP 0x0008 // Setup Packet +#define MUSB_CSRL0_STALLED 0x0004 // Endpoint Stalled +#define MUSB_CSRL0_TXRDY 0x0002 // Transmit Packet Ready +#define MUSB_CSRL0_RXRDY 0x0001 // Receive Packet Ready //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CSRH0 register. // //***************************************************************************** -#define MUSB_CSRH0_DISPING 0x0008 // PING Disable -#define MUSB_CSRH0_DTWE 0x0004 // Data Toggle Write Enable -#define MUSB_CSRH0_DT 0x0002 // Data Toggle -#define MUSB_CSRH0_FLUSH 0x0001 // Flush FIFO +#define MUSB_CSRH0_DISPING 0x0008 // PING Disable +#define MUSB_CSRH0_DTWE 0x0004 // Data Toggle Write Enable +#define MUSB_CSRH0_DT 0x0002 // Data Toggle +#define MUSB_CSRH0_FLUSH 0x0001 // Flush FIFO //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TYPE0 register. // //***************************************************************************** -#define MUSB_TYPE0_SPEED_M 0x00C0 // Operating Speed -#define MUSB_TYPE0_SPEED_HIGH 0x0040 // High -#define MUSB_TYPE0_SPEED_FULL 0x0080 // Full -#define MUSB_TYPE0_SPEED_LOW 0x00C0 // Low +#define MUSB_TYPE0_SPEED_M 0x00C0 // Operating Speed +#define MUSB_TYPE0_SPEED_HIGH 0x0040 // High +#define MUSB_TYPE0_SPEED_FULL 0x0080 // Full +#define MUSB_TYPE0_SPEED_LOW 0x00C0 // Low //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_NAKLMT register. // //***************************************************************************** -#define MUSB_NAKLMT_NAKLMT_M 0x001F // EP0 NAK Limit -#define MUSB_NAKLMT_NAKLMT_S 0 +#define MUSB_NAKLMT_NAKLMT_M 0x001F // EP0 NAK Limit +#define MUSB_NAKLMT_NAKLMT_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TXCSRL1 register. // //***************************************************************************** -#define MUSB_TXCSRL1_NAKTO 0x0080 // NAK Timeout -#define MUSB_TXCSRL1_CLRDT 0x0040 // Clear Data Toggle -#define MUSB_TXCSRL1_STALLED 0x0020 // Endpoint Stalled -#define MUSB_TXCSRL1_STALL 0x0010 // Send STALL -#define MUSB_TXCSRL1_SETUP 0x0010 // Setup Packet -#define MUSB_TXCSRL1_FLUSH 0x0008 // Flush FIFO -#define MUSB_TXCSRL1_ERROR 0x0004 // Error -#define MUSB_TXCSRL1_UNDRN 0x0004 // Underrun -#define MUSB_TXCSRL1_FIFONE 0x0002 // FIFO Not Empty -#define MUSB_TXCSRL1_TXRDY 0x0001 // Transmit Packet Ready +#define MUSB_TXCSRL1_NAKTO 0x0080 // NAK Timeout +#define MUSB_TXCSRL1_CLRDT 0x0040 // Clear Data Toggle +#define MUSB_TXCSRL1_STALLED 0x0020 // Endpoint Stalled +#define MUSB_TXCSRL1_STALL 0x0010 // Send STALL +#define MUSB_TXCSRL1_SETUP 0x0010 // Setup Packet +#define MUSB_TXCSRL1_FLUSH 0x0008 // Flush FIFO +#define MUSB_TXCSRL1_ERROR 0x0004 // Error +#define MUSB_TXCSRL1_UNDRN 0x0004 // Underrun +#define MUSB_TXCSRL1_FIFONE 0x0002 // FIFO Not Empty +#define MUSB_TXCSRL1_TXRDY 0x0001 // Transmit Packet Ready //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TXCSRH1 register. // //***************************************************************************** -#define MUSB_TXCSRH1_AUTOSET 0x0080 // Auto Set -#define MUSB_TXCSRH1_ISO 0x0040 // Isochronous Transfers -#define MUSB_TXCSRH1_MODE 0x0020 // Mode -#define MUSB_TXCSRH1_DMAEN 0x0010 // DMA Request Enable -#define MUSB_TXCSRH1_FDT 0x0008 // Force Data Toggle -#define MUSB_TXCSRH1_DMAMOD 0x0004 // DMA Request Mode -#define MUSB_TXCSRH1_DTWE 0x0002 // Data Toggle Write Enable -#define MUSB_TXCSRH1_DT 0x0001 // Data Toggle +#define MUSB_TXCSRH1_AUTOSET 0x0080 // Auto Set +#define MUSB_TXCSRH1_ISO 0x0040 // Isochronous Transfers +#define MUSB_TXCSRH1_MODE 0x0020 // Mode +#define MUSB_TXCSRH1_DMAEN 0x0010 // DMA Request Enable +#define MUSB_TXCSRH1_FDT 0x0008 // Force Data Toggle +#define MUSB_TXCSRH1_DMAMOD 0x0004 // DMA Request Mode +#define MUSB_TXCSRH1_DTWE 0x0002 // Data Toggle Write Enable +#define MUSB_TXCSRH1_DT 0x0001 // Data Toggle //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_RXCSRL1 register. // //***************************************************************************** -#define MUSB_RXCSRL1_CLRDT 0x0080 // Clear Data Toggle -#define MUSB_RXCSRL1_STALLED 0x0040 // Endpoint Stalled -#define MUSB_RXCSRL1_STALL 0x0020 // Send STALL -#define MUSB_RXCSRL1_REQPKT 0x0020 // Request Packet -#define MUSB_RXCSRL1_FLUSH 0x0010 // Flush FIFO -#define MUSB_RXCSRL1_DATAERR 0x0008 // Data Error -#define MUSB_RXCSRL1_NAKTO 0x0008 // NAK Timeout -#define MUSB_RXCSRL1_OVER 0x0004 // Overrun -#define MUSB_RXCSRL1_ERROR 0x0004 // Error -#define MUSB_RXCSRL1_FULL 0x0002 // FIFO Full -#define MUSB_RXCSRL1_RXRDY 0x0001 // Receive Packet Ready +#define MUSB_RXCSRL1_CLRDT 0x0080 // Clear Data Toggle +#define MUSB_RXCSRL1_STALLED 0x0040 // Endpoint Stalled +#define MUSB_RXCSRL1_STALL 0x0020 // Send STALL +#define MUSB_RXCSRL1_REQPKT 0x0020 // Request Packet +#define MUSB_RXCSRL1_FLUSH 0x0010 // Flush FIFO +#define MUSB_RXCSRL1_DATAERR 0x0008 // Data Error +#define MUSB_RXCSRL1_NAKTO 0x0008 // NAK Timeout +#define MUSB_RXCSRL1_OVER 0x0004 // Overrun +#define MUSB_RXCSRL1_ERROR 0x0004 // Error +#define MUSB_RXCSRL1_FULL 0x0002 // FIFO Full +#define MUSB_RXCSRL1_RXRDY 0x0001 // Receive Packet Ready //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_RXCSRH1 register. // //***************************************************************************** -#define MUSB_RXCSRH1_AUTOCL 0x0080 // Auto Clear -#define MUSB_RXCSRH1_AUTORQ 0x0040 // Auto Request -#define MUSB_RXCSRH1_ISO 0x0040 // Isochronous Transfers -#define MUSB_RXCSRH1_DMAEN 0x0020 // DMA Request Enable -#define MUSB_RXCSRH1_DISNYET 0x0010 // Disable NYET -#define MUSB_RXCSRH1_PIDERR 0x0010 // PID Error -#define MUSB_RXCSRH1_DMAMOD 0x0008 // DMA Request Mode -#define MUSB_RXCSRH1_DTWE 0x0004 // Data Toggle Write Enable -#define MUSB_RXCSRH1_DT 0x0002 // Data Toggle -#define MUSB_RXCSRH1_INCOMPRX 0x0001 // Incomplete RX Transmission Status +#define MUSB_RXCSRH1_AUTOCL 0x0080 // Auto Clear +#define MUSB_RXCSRH1_AUTORQ 0x0040 // Auto Request +#define MUSB_RXCSRH1_ISO 0x0040 // Isochronous Transfers +#define MUSB_RXCSRH1_DMAEN 0x0020 // DMA Request Enable +#define MUSB_RXCSRH1_DISNYET 0x0010 // Disable NYET +#define MUSB_RXCSRH1_PIDERR 0x0010 // PID Error +#define MUSB_RXCSRH1_DMAMOD 0x0008 // DMA Request Mode +#define MUSB_RXCSRH1_DTWE 0x0004 // Data Toggle Write Enable +#define MUSB_RXCSRH1_DT 0x0002 // Data Toggle +#define MUSB_RXCSRH1_INCOMPRX 0x0001 // Incomplete RX Transmission Status //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_TXTYPE1 register. // //***************************************************************************** -#define MUSB_TXTYPE1_SPEED_M 0x00C0 // Operating Speed -#define MUSB_TXTYPE1_SPEED_DFLT 0x0000 // Default -#define MUSB_TXTYPE1_SPEED_HIGH 0x0040 // High -#define MUSB_TXTYPE1_SPEED_FULL 0x0080 // Full -#define MUSB_TXTYPE1_SPEED_LOW 0x00C0 // Low -#define MUSB_TXTYPE1_PROTO_M 0x0030 // Protocol -#define MUSB_TXTYPE1_PROTO_CTRL 0x0000 // Control -#define MUSB_TXTYPE1_PROTO_ISOC 0x0010 // Isochronous -#define MUSB_TXTYPE1_PROTO_BULK 0x0020 // Bulk -#define MUSB_TXTYPE1_PROTO_INT 0x0030 // Interrupt -#define MUSB_TXTYPE1_TEP_M 0x000F // Target Endpoint Number -#define MUSB_TXTYPE1_TEP_S 0 +#define MUSB_TXTYPE1_SPEED_M 0x00C0 // Operating Speed +#define MUSB_TXTYPE1_SPEED_DFLT 0x0000 // Default +#define MUSB_TXTYPE1_SPEED_HIGH 0x0040 // High +#define MUSB_TXTYPE1_SPEED_FULL 0x0080 // Full +#define MUSB_TXTYPE1_SPEED_LOW 0x00C0 // Low +#define MUSB_TXTYPE1_PROTO_M 0x0030 // Protocol +#define MUSB_TXTYPE1_PROTO_CTRL 0x0000 // Control +#define MUSB_TXTYPE1_PROTO_ISOC 0x0010 // Isochronous +#define MUSB_TXTYPE1_PROTO_BULK 0x0020 // Bulk +#define MUSB_TXTYPE1_PROTO_INT 0x0030 // Interrupt +#define MUSB_TXTYPE1_TEP_M 0x000F // Target Endpoint Number +#define MUSB_TXTYPE1_TEP_S 0 //***************************************************************************** // @@ -654,8 +653,8 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ // register. // //***************************************************************************** -#define MUSB_TXINTERVAL1_NAKLMT_M 0x00FF // NAK Limit -#define MUSB_TXINTERVAL1_TXPOLL_M 0x00FF // TX Polling +#define MUSB_TXINTERVAL1_NAKLMT_M 0x00FF // NAK Limit +#define MUSB_TXINTERVAL1_TXPOLL_M 0x00FF // TX Polling #define MUSB_TXINTERVAL1_TXPOLL_S 0 #define MUSB_TXINTERVAL1_NAKLMT_S 0 @@ -664,18 +663,18 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ // The following are defines for the bit fields in the MUSB_O_RXTYPE1 register. // //***************************************************************************** -#define MUSB_RXTYPE1_SPEED_M 0x00C0 // Operating Speed -#define MUSB_RXTYPE1_SPEED_DFLT 0x0000 // Default -#define MUSB_RXTYPE1_SPEED_HIGH 0x0040 // High -#define MUSB_RXTYPE1_SPEED_FULL 0x0080 // Full -#define MUSB_RXTYPE1_SPEED_LOW 0x00C0 // Low -#define MUSB_RXTYPE1_PROTO_M 0x0030 // Protocol -#define MUSB_RXTYPE1_PROTO_CTRL 0x0000 // Control -#define MUSB_RXTYPE1_PROTO_ISOC 0x0010 // Isochronous -#define MUSB_RXTYPE1_PROTO_BULK 0x0020 // Bulk -#define MUSB_RXTYPE1_PROTO_INT 0x0030 // Interrupt -#define MUSB_RXTYPE1_TEP_M 0x000F // Target Endpoint Number -#define MUSB_RXTYPE1_TEP_S 0 +#define MUSB_RXTYPE1_SPEED_M 0x00C0 // Operating Speed +#define MUSB_RXTYPE1_SPEED_DFLT 0x0000 // Default +#define MUSB_RXTYPE1_SPEED_HIGH 0x0040 // High +#define MUSB_RXTYPE1_SPEED_FULL 0x0080 // Full +#define MUSB_RXTYPE1_SPEED_LOW 0x00C0 // Low +#define MUSB_RXTYPE1_PROTO_M 0x0030 // Protocol +#define MUSB_RXTYPE1_PROTO_CTRL 0x0000 // Control +#define MUSB_RXTYPE1_PROTO_ISOC 0x0010 // Isochronous +#define MUSB_RXTYPE1_PROTO_BULK 0x0020 // Bulk +#define MUSB_RXTYPE1_PROTO_INT 0x0030 // Interrupt +#define MUSB_RXTYPE1_TEP_M 0x000F // Target Endpoint Number +#define MUSB_RXTYPE1_TEP_S 0 //***************************************************************************** // @@ -683,8 +682,8 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ // register. // //***************************************************************************** -#define MUSB_RXINTERVAL1_TXPOLL_M 0x00FF // RX Polling -#define MUSB_RXINTERVAL1_NAKLMT_M 0x00FF // NAK Limit +#define MUSB_RXINTERVAL1_TXPOLL_M 0x00FF // RX Polling +#define MUSB_RXINTERVAL1_NAKLMT_M 0x00FF // NAK Limit #define MUSB_RXINTERVAL1_TXPOLL_S 0 #define MUSB_RXINTERVAL1_NAKLMT_S 0 @@ -693,30 +692,28 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ // The following are defines for the bit fields in the MUSB_O_DMACTL0 register. // //***************************************************************************** -#define MUSB_DMACTL0_BRSTM_M 0x0600 // Burst Mode -#define MUSB_DMACTL0_BRSTM_ANY 0x0000 // Bursts of unspecified length -#define MUSB_DMACTL0_BRSTM_INC4 0x0200 // INCR4 or unspecified length -#define MUSB_DMACTL0_BRSTM_INC8 \ - 0x0400 // INCR8, INCR4 or unspecified \ - // length -#define MUSB_DMACTL0_BRSTM_INC16 \ - 0x0600 // INCR16, INCR8, INCR4 or \ - // unspecified length -#define MUSB_DMACTL0_ERR 0x0100 // Bus Error Bit -#define MUSB_DMACTL0_EP_M 0x00F0 // Endpoint number -#define MUSB_DMACTL0_IE 0x0008 // DMA Interrupt Enable -#define MUSB_DMACTL0_MODE 0x0004 // DMA Transfer Mode -#define MUSB_DMACTL0_DIR 0x0002 // DMA Direction -#define MUSB_DMACTL0_ENABLE 0x0001 // DMA Transfer Enable -#define MUSB_DMACTL0_EP_S 4 +#define MUSB_DMACTL0_BRSTM_M 0x0600 // Burst Mode +#define MUSB_DMACTL0_BRSTM_ANY 0x0000 // Bursts of unspecified length +#define MUSB_DMACTL0_BRSTM_INC4 0x0200 // INCR4 or unspecified length +#define MUSB_DMACTL0_BRSTM_INC8 0x0400 // INCR8, INCR4 or unspecified + // length +#define MUSB_DMACTL0_BRSTM_INC16 0x0600 // INCR16, INCR8, INCR4 or + // unspecified length +#define MUSB_DMACTL0_ERR 0x0100 // Bus Error Bit +#define MUSB_DMACTL0_EP_M 0x00F0 // Endpoint number +#define MUSB_DMACTL0_IE 0x0008 // DMA Interrupt Enable +#define MUSB_DMACTL0_MODE 0x0004 // DMA Transfer Mode +#define MUSB_DMACTL0_DIR 0x0002 // DMA Direction +#define MUSB_DMACTL0_ENABLE 0x0001 // DMA Transfer Enable +#define MUSB_DMACTL0_EP_S 4 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_DMAADDR0 register. // //***************************************************************************** -#define MUSB_DMAADDR0_ADDR_M 0xFFFFFFFC // DMA Address -#define MUSB_DMAADDR0_ADDR_S 2 +#define MUSB_DMAADDR0_ADDR_M 0xFFFFFFFC // DMA Address +#define MUSB_DMAADDR0_ADDR_S 2 //***************************************************************************** // @@ -724,37 +721,36 @@ TU_ATTR_ALWAYS_INLINE static inline musb_ep_csr_t *get_ep_csr(musb_regs_t *musb_ // register. // //***************************************************************************** -#define MUSB_DMACOUNT0_COUNT_M 0xFFFFFFFC // DMA Count -#define MUSB_DMACOUNT0_COUNT_S 2 +#define MUSB_DMACOUNT0_COUNT_M 0xFFFFFFFC // DMA Count +#define MUSB_DMACOUNT0_COUNT_S 2 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_CTO register. // //***************************************************************************** -#define MUSB_CTO_CCTV_M 0xFFFF // Configurable Chirp Timeout Value -#define MUSB_CTO_CCTV_S 0 +#define MUSB_CTO_CCTV_M 0xFFFF // Configurable Chirp Timeout Value +#define MUSB_CTO_CCTV_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_HHSRTN register. // //***************************************************************************** -#define MUSB_HHSRTN_HHSRTN_M \ - 0xFFFF // HIgh Speed to UTM Operating \ - // Delay -#define MUSB_HHSRTN_HHSRTN_S 0 +#define MUSB_HHSRTN_HHSRTN_M 0xFFFF // HIgh Speed to UTM Operating + // Delay +#define MUSB_HHSRTN_HHSRTN_S 0 //***************************************************************************** // // The following are defines for the bit fields in the MUSB_O_HSBT register. // //***************************************************************************** -#define MUSB_HSBT_HSBT_M 0x000F // High Speed Timeout Adder -#define MUSB_HSBT_HSBT_S 0 +#define MUSB_HSBT_HSBT_M 0x000F // High Speed Timeout Adder +#define MUSB_HSBT_HSBT_S 0 #ifdef __cplusplus -} + } #endif #endif diff --git a/Libraries/tinyusb/src/tusb.c b/Libraries/tinyusb/src/tusb.c index a71deb399e6..860e8ac350c 100644 --- a/Libraries/tinyusb/src/tusb.c +++ b/Libraries/tinyusb/src/tusb.c @@ -43,350 +43,325 @@ // Public API //--------------------------------------------------------------------+ -bool tusb_init(void) -{ -#if CFG_TUD_ENABLED && defined(TUD_OPT_RHPORT) - // init device stack CFG_TUSB_RHPORTx_MODE must be defined - TU_ASSERT(tud_init(TUD_OPT_RHPORT)); -#endif - -#if CFG_TUH_ENABLED && defined(TUH_OPT_RHPORT) - // init host stack CFG_TUSB_RHPORTx_MODE must be defined - TU_ASSERT(tuh_init(TUH_OPT_RHPORT)); -#endif - - return true; +bool tusb_init(void) { + #if CFG_TUD_ENABLED && defined(TUD_OPT_RHPORT) + // init device stack CFG_TUSB_RHPORTx_MODE must be defined + TU_ASSERT ( tud_init(TUD_OPT_RHPORT) ); + #endif + + #if CFG_TUH_ENABLED && defined(TUH_OPT_RHPORT) + // init host stack CFG_TUSB_RHPORTx_MODE must be defined + TU_ASSERT( tuh_init(TUH_OPT_RHPORT) ); + #endif + + return true; } -bool tusb_inited(void) -{ - bool ret = false; +bool tusb_inited(void) { + bool ret = false; -#if CFG_TUD_ENABLED - ret = ret || tud_inited(); -#endif + #if CFG_TUD_ENABLED + ret = ret || tud_inited(); + #endif -#if CFG_TUH_ENABLED - ret = ret || tuh_inited(); -#endif + #if CFG_TUH_ENABLED + ret = ret || tuh_inited(); + #endif - return ret; + return ret; } //--------------------------------------------------------------------+ // Descriptor helper //--------------------------------------------------------------------+ -uint8_t const *tu_desc_find(uint8_t const *desc, uint8_t const *end, uint8_t byte1) -{ - while (desc + 1 < end) { - if (desc[1] == byte1) - return desc; - desc += desc[DESC_OFFSET_LEN]; - } - return NULL; +uint8_t const* tu_desc_find(uint8_t const* desc, uint8_t const* end, uint8_t byte1) { + while (desc + 1 < end) { + if (desc[1] == byte1) return desc; + desc += desc[DESC_OFFSET_LEN]; + } + return NULL; } -uint8_t const *tu_desc_find2(uint8_t const *desc, uint8_t const *end, uint8_t byte1, uint8_t byte2) -{ - while (desc + 2 < end) { - if (desc[1] == byte1 && desc[2] == byte2) - return desc; - desc += desc[DESC_OFFSET_LEN]; - } - return NULL; +uint8_t const* tu_desc_find2(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2) { + while (desc + 2 < end) { + if (desc[1] == byte1 && desc[2] == byte2) return desc; + desc += desc[DESC_OFFSET_LEN]; + } + return NULL; } -uint8_t const *tu_desc_find3(uint8_t const *desc, uint8_t const *end, uint8_t byte1, uint8_t byte2, - uint8_t byte3) -{ - while (desc + 3 < end) { - if (desc[1] == byte1 && desc[2] == byte2 && desc[3] == byte3) - return desc; - desc += desc[DESC_OFFSET_LEN]; - } - return NULL; +uint8_t const* tu_desc_find3(uint8_t const* desc, uint8_t const* end, uint8_t byte1, uint8_t byte2, uint8_t byte3) { + while (desc + 3 < end) { + if (desc[1] == byte1 && desc[2] == byte2 && desc[3] == byte3) return desc; + desc += desc[DESC_OFFSET_LEN]; + } + return NULL; } //--------------------------------------------------------------------+ // Endpoint Helper for both Host and Device stack //--------------------------------------------------------------------+ -bool tu_edpt_claim(tu_edpt_state_t *ep_state, osal_mutex_t mutex) -{ - (void)mutex; +bool tu_edpt_claim(tu_edpt_state_t* ep_state, osal_mutex_t mutex) { + (void) mutex; - // pre-check to help reducing mutex lock - TU_VERIFY((ep_state->busy == 0) && (ep_state->claimed == 0)); - (void)osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); + // pre-check to help reducing mutex lock + TU_VERIFY((ep_state->busy == 0) && (ep_state->claimed == 0)); + (void) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); - // can only claim the endpoint if it is not busy and not claimed yet. - bool const available = (ep_state->busy == 0) && (ep_state->claimed == 0); - if (available) { - ep_state->claimed = 1; - } + // can only claim the endpoint if it is not busy and not claimed yet. + bool const available = (ep_state->busy == 0) && (ep_state->claimed == 0); + if (available) { + ep_state->claimed = 1; + } - (void)osal_mutex_unlock(mutex); - return available; + (void) osal_mutex_unlock(mutex); + return available; } -bool tu_edpt_release(tu_edpt_state_t *ep_state, osal_mutex_t mutex) -{ - (void)mutex; - (void)osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); +bool tu_edpt_release(tu_edpt_state_t* ep_state, osal_mutex_t mutex) { + (void) mutex; + (void) osal_mutex_lock(mutex, OSAL_TIMEOUT_WAIT_FOREVER); - // can only release the endpoint if it is claimed and not busy - bool const ret = (ep_state->claimed == 1) && (ep_state->busy == 0); - if (ret) { - ep_state->claimed = 0; - } + // can only release the endpoint if it is claimed and not busy + bool const ret = (ep_state->claimed == 1) && (ep_state->busy == 0); + if (ret) { + ep_state->claimed = 0; + } - (void)osal_mutex_unlock(mutex); - return ret; + (void) osal_mutex_unlock(mutex); + return ret; } -bool tu_edpt_validate(tusb_desc_endpoint_t const *desc_ep, tusb_speed_t speed) -{ - uint16_t const max_packet_size = tu_edpt_packet_size(desc_ep); - TU_LOG2(" Open EP %02X with Size = %u\r\n", desc_ep->bEndpointAddress, max_packet_size); +bool tu_edpt_validate(tusb_desc_endpoint_t const* desc_ep, tusb_speed_t speed) { + uint16_t const max_packet_size = tu_edpt_packet_size(desc_ep); + TU_LOG2(" Open EP %02X with Size = %u\r\n", desc_ep->bEndpointAddress, max_packet_size); - switch (desc_ep->bmAttributes.xfer) { + switch (desc_ep->bmAttributes.xfer) { case TUSB_XFER_ISOCHRONOUS: { - uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 1023); - TU_ASSERT(max_packet_size <= spec_size); - break; + uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 1023); + TU_ASSERT(max_packet_size <= spec_size); + break; } case TUSB_XFER_BULK: - if (speed == TUSB_SPEED_HIGH) { - // Bulk highspeed must be EXACTLY 512 - TU_ASSERT(max_packet_size == 512); - } else { - // TODO Bulk fullspeed can only be 8, 16, 32, 64 - TU_ASSERT(max_packet_size <= 64); - } - break; + if (speed == TUSB_SPEED_HIGH) { + // Bulk highspeed must be EXACTLY 512 + TU_ASSERT(max_packet_size == 512); + } else { + // TODO Bulk fullspeed can only be 8, 16, 32, 64 + TU_ASSERT(max_packet_size <= 64); + } + break; case TUSB_XFER_INTERRUPT: { - uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 64); - TU_ASSERT(max_packet_size <= spec_size); - break; + uint16_t const spec_size = (speed == TUSB_SPEED_HIGH ? 1024 : 64); + TU_ASSERT(max_packet_size <= spec_size); + break; } default: - return false; - } + return false; + } - return true; + return true; } -void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const *desc_itf, - uint16_t desc_len, uint8_t driver_id) -{ - uint8_t const *p_desc = (uint8_t const *)desc_itf; - uint8_t const *desc_end = p_desc + desc_len; - - while (p_desc < desc_end) { - if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { - uint8_t const ep_addr = ((tusb_desc_endpoint_t const *)p_desc)->bEndpointAddress; - TU_LOG(2, " Bind EP %02x to driver id %u\r\n", ep_addr, driver_id); - ep2drv[tu_edpt_number(ep_addr)][tu_edpt_dir(ep_addr)] = driver_id; - } - p_desc = tu_desc_next(p_desc); +void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const* desc_itf, uint16_t desc_len, + uint8_t driver_id) { + uint8_t const* p_desc = (uint8_t const*) desc_itf; + uint8_t const* desc_end = p_desc + desc_len; + + while (p_desc < desc_end) { + if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { + uint8_t const ep_addr = ((tusb_desc_endpoint_t const*) p_desc)->bEndpointAddress; + TU_LOG(2, " Bind EP %02x to driver id %u\r\n", ep_addr, driver_id); + ep2drv[tu_edpt_number(ep_addr)][tu_edpt_dir(ep_addr)] = driver_id; } + p_desc = tu_desc_next(p_desc); + } } -uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const *desc_itf, uint8_t itf_count, - uint16_t max_len) -{ - uint8_t const *p_desc = (uint8_t const *)desc_itf; - uint16_t len = 0; - - while (itf_count--) { - // Next on interface desc - len += tu_desc_len(desc_itf); - p_desc = tu_desc_next(p_desc); - - while (len < max_len) { - // return on IAD regardless of itf count - if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE_ASSOCIATION) { - return len; - } - if ((tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) && - ((tusb_desc_interface_t const *)p_desc)->bAlternateSetting == 0) { - break; - } - - len += tu_desc_len(p_desc); - p_desc = tu_desc_next(p_desc); - } +uint16_t tu_desc_get_interface_total_len(tusb_desc_interface_t const* desc_itf, uint8_t itf_count, uint16_t max_len) { + uint8_t const* p_desc = (uint8_t const*) desc_itf; + uint16_t len = 0; + + while (itf_count--) { + // Next on interface desc + len += tu_desc_len(desc_itf); + p_desc = tu_desc_next(p_desc); + + while (len < max_len) { + // return on IAD regardless of itf count + if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE_ASSOCIATION) { + return len; + } + if ((tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) && + ((tusb_desc_interface_t const*) p_desc)->bAlternateSetting == 0) { + break; + } + + len += tu_desc_len(p_desc); + p_desc = tu_desc_next(p_desc); } + } - return len; + return len; } //--------------------------------------------------------------------+ // Endpoint Stream Helper for both Host and Device stack //--------------------------------------------------------------------+ -bool tu_edpt_stream_init(tu_edpt_stream_t *s, bool is_host, bool is_tx, bool overwritable, - void *ff_buf, uint16_t ff_bufsize, uint8_t *ep_buf, uint16_t ep_bufsize) -{ - osal_mutex_t new_mutex = osal_mutex_create(&s->ff_mutexdef); - (void)new_mutex; - (void)is_tx; +bool tu_edpt_stream_init(tu_edpt_stream_t* s, bool is_host, bool is_tx, bool overwritable, + void* ff_buf, uint16_t ff_bufsize, uint8_t* ep_buf, uint16_t ep_bufsize) { + osal_mutex_t new_mutex = osal_mutex_create(&s->ff_mutexdef); + (void) new_mutex; + (void) is_tx; - s->is_host = is_host; - tu_fifo_config(&s->ff, ff_buf, ff_bufsize, 1, overwritable); - tu_fifo_config_mutex(&s->ff, is_tx ? new_mutex : NULL, is_tx ? NULL : new_mutex); + s->is_host = is_host; + tu_fifo_config(&s->ff, ff_buf, ff_bufsize, 1, overwritable); + tu_fifo_config_mutex(&s->ff, is_tx ? new_mutex : NULL, is_tx ? NULL : new_mutex); - s->ep_buf = ep_buf; - s->ep_bufsize = ep_bufsize; + s->ep_buf = ep_buf; + s->ep_bufsize = ep_bufsize; - return true; + return true; } -bool tu_edpt_stream_deinit(tu_edpt_stream_t *s) -{ - (void)s; -#if OSAL_MUTEX_REQUIRED - if (s->ff.mutex_wr) - osal_mutex_delete(s->ff.mutex_wr); - if (s->ff.mutex_rd) - osal_mutex_delete(s->ff.mutex_rd); -#endif - return true; +bool tu_edpt_stream_deinit(tu_edpt_stream_t* s) { + (void) s; + #if OSAL_MUTEX_REQUIRED + if (s->ff.mutex_wr) osal_mutex_delete(s->ff.mutex_wr); + if (s->ff.mutex_rd) osal_mutex_delete(s->ff.mutex_rd); + #endif + return true; } -TU_ATTR_ALWAYS_INLINE static inline bool stream_claim(tu_edpt_stream_t *s) -{ - if (s->is_host) { -#if CFG_TUH_ENABLED - return usbh_edpt_claim(s->daddr, s->ep_addr); -#endif - } else { -#if CFG_TUD_ENABLED - return usbd_edpt_claim(s->rhport, s->ep_addr); -#endif - } - return false; +TU_ATTR_ALWAYS_INLINE static inline +bool stream_claim(tu_edpt_stream_t* s) { + if (s->is_host) { + #if CFG_TUH_ENABLED + return usbh_edpt_claim(s->daddr, s->ep_addr); + #endif + } else { + #if CFG_TUD_ENABLED + return usbd_edpt_claim(s->rhport, s->ep_addr); + #endif + } + return false; } -TU_ATTR_ALWAYS_INLINE static inline bool stream_xfer(tu_edpt_stream_t *s, uint16_t count) -{ - if (s->is_host) { -#if CFG_TUH_ENABLED - return usbh_edpt_xfer(s->daddr, s->ep_addr, count ? s->ep_buf : NULL, count); -#endif - } else { -#if CFG_TUD_ENABLED - return usbd_edpt_xfer(s->rhport, s->ep_addr, count ? s->ep_buf : NULL, count); -#endif - } - return false; +TU_ATTR_ALWAYS_INLINE static inline +bool stream_xfer(tu_edpt_stream_t* s, uint16_t count) { + if (s->is_host) { + #if CFG_TUH_ENABLED + return usbh_edpt_xfer(s->daddr, s->ep_addr, count ? s->ep_buf : NULL, count); + #endif + } else { + #if CFG_TUD_ENABLED + return usbd_edpt_xfer(s->rhport, s->ep_addr, count ? s->ep_buf : NULL, count); + #endif + } + return false; } -TU_ATTR_ALWAYS_INLINE static inline bool stream_release(tu_edpt_stream_t *s) -{ - if (s->is_host) { -#if CFG_TUH_ENABLED - return usbh_edpt_release(s->daddr, s->ep_addr); -#endif - } else { -#if CFG_TUD_ENABLED - return usbd_edpt_release(s->rhport, s->ep_addr); -#endif - } - return false; +TU_ATTR_ALWAYS_INLINE static inline +bool stream_release(tu_edpt_stream_t* s) { + if (s->is_host) { + #if CFG_TUH_ENABLED + return usbh_edpt_release(s->daddr, s->ep_addr); + #endif + } else { + #if CFG_TUD_ENABLED + return usbd_edpt_release(s->rhport, s->ep_addr); + #endif + } + return false; } //--------------------------------------------------------------------+ // Stream Write //--------------------------------------------------------------------+ -bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t *s, uint32_t last_xferred_bytes) -{ - // ZLP condition: no pending data, last transferred bytes is multiple of packet size - TU_VERIFY(!tu_fifo_count(&s->ff) && last_xferred_bytes && - (0 == (last_xferred_bytes & (s->ep_packetsize - 1)))); - TU_VERIFY(stream_claim(s)); - TU_ASSERT(stream_xfer(s, 0)); - return true; +bool tu_edpt_stream_write_zlp_if_needed(tu_edpt_stream_t* s, uint32_t last_xferred_bytes) { + // ZLP condition: no pending data, last transferred bytes is multiple of packet size + TU_VERIFY(!tu_fifo_count(&s->ff) && last_xferred_bytes && (0 == (last_xferred_bytes & (s->ep_packetsize - 1)))); + TU_VERIFY(stream_claim(s)); + TU_ASSERT(stream_xfer(s, 0)); + return true; } -uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t *s) -{ - // skip if no data - TU_VERIFY(tu_fifo_count(&s->ff), 0); - - // Claim the endpoint - TU_VERIFY(stream_claim(s), 0); - - // Pull data from FIFO -> EP buf - uint16_t const count = tu_fifo_read_n(&s->ff, s->ep_buf, s->ep_bufsize); - - if (count) { - TU_ASSERT(stream_xfer(s, count), 0); - return count; - } else { - // Release endpoint since we don't make any transfer - // Note: data is dropped if terminal is not connected - stream_release(s); - return 0; - } +uint32_t tu_edpt_stream_write_xfer(tu_edpt_stream_t* s) { + // skip if no data + TU_VERIFY(tu_fifo_count(&s->ff), 0); + + // Claim the endpoint + TU_VERIFY(stream_claim(s), 0); + + // Pull data from FIFO -> EP buf + uint16_t const count = tu_fifo_read_n(&s->ff, s->ep_buf, s->ep_bufsize); + + if (count) { + TU_ASSERT(stream_xfer(s, count), 0); + return count; + } else { + // Release endpoint since we don't make any transfer + // Note: data is dropped if terminal is not connected + stream_release(s); + return 0; + } } -uint32_t tu_edpt_stream_write(tu_edpt_stream_t *s, void const *buffer, uint32_t bufsize) -{ - TU_VERIFY(bufsize); // TODO support ZLP - uint16_t ret = tu_fifo_write_n(&s->ff, buffer, (uint16_t)bufsize); +uint32_t tu_edpt_stream_write(tu_edpt_stream_t* s, void const* buffer, uint32_t bufsize) { + TU_VERIFY(bufsize); // TODO support ZLP + uint16_t ret = tu_fifo_write_n(&s->ff, buffer, (uint16_t) bufsize); - // flush if fifo has more than packet size or - // in rare case: fifo depth is configured too small (which never reach packet size) - if ((tu_fifo_count(&s->ff) >= s->ep_packetsize) || (tu_fifo_depth(&s->ff) < s->ep_packetsize)) { - tu_edpt_stream_write_xfer(s); - } + // flush if fifo has more than packet size or + // in rare case: fifo depth is configured too small (which never reach packet size) + if ((tu_fifo_count(&s->ff) >= s->ep_packetsize) || (tu_fifo_depth(&s->ff) < s->ep_packetsize)) { + tu_edpt_stream_write_xfer(s); + } - return ret; + return ret; } //--------------------------------------------------------------------+ // Stream Read //--------------------------------------------------------------------+ -uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t *s) -{ - uint16_t available = tu_fifo_remaining(&s->ff); - - // Prepare for incoming data but only allow what we can store in the ring buffer. - // TODO Actually we can still carry out the transfer, keeping count of received bytes - // and slowly move it to the FIFO when read(). - // This pre-check reduces endpoint claiming - TU_VERIFY(available >= s->ep_packetsize); - - // claim endpoint - TU_VERIFY(stream_claim(s), 0); - - // get available again since fifo can be changed before endpoint is claimed - available = tu_fifo_remaining(&s->ff); - - if (available >= s->ep_packetsize) { - // multiple of packet size limit by ep bufsize - uint16_t count = (uint16_t)(available & ~(s->ep_packetsize - 1)); - count = tu_min16(count, s->ep_bufsize); - - TU_ASSERT(stream_xfer(s, count), 0); - return count; - } else { - // Release endpoint since we don't make any transfer - stream_release(s); - return 0; - } +uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t* s) { + uint16_t available = tu_fifo_remaining(&s->ff); + + // Prepare for incoming data but only allow what we can store in the ring buffer. + // TODO Actually we can still carry out the transfer, keeping count of received bytes + // and slowly move it to the FIFO when read(). + // This pre-check reduces endpoint claiming + TU_VERIFY(available >= s->ep_packetsize); + + // claim endpoint + TU_VERIFY(stream_claim(s), 0); + + // get available again since fifo can be changed before endpoint is claimed + available = tu_fifo_remaining(&s->ff); + + if (available >= s->ep_packetsize) { + // multiple of packet size limit by ep bufsize + uint16_t count = (uint16_t) (available & ~(s->ep_packetsize - 1)); + count = tu_min16(count, s->ep_bufsize); + + TU_ASSERT(stream_xfer(s, count), 0); + return count; + } else { + // Release endpoint since we don't make any transfer + stream_release(s); + return 0; + } } -uint32_t tu_edpt_stream_read(tu_edpt_stream_t *s, void *buffer, uint32_t bufsize) -{ - uint32_t num_read = tu_fifo_read_n(&s->ff, buffer, (uint16_t)bufsize); - tu_edpt_stream_read_xfer(s); - return num_read; +uint32_t tu_edpt_stream_read(tu_edpt_stream_t* s, void* buffer, uint32_t bufsize) { + uint32_t num_read = tu_fifo_read_n(&s->ff, buffer, (uint16_t) bufsize); + tu_edpt_stream_read_xfer(s); + return num_read; } //--------------------------------------------------------------------+ @@ -397,25 +372,36 @@ uint32_t tu_edpt_stream_read(tu_edpt_stream_t *s, void *buffer, uint32_t bufsize #include #if CFG_TUSB_DEBUG >= CFG_TUH_LOG_LEVEL || CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL -char const *const tu_str_speed[] = { "Full", "Low", "High" }; -char const *const tu_str_std_request[] = { - "Get Status", "Clear Feature", "Reserved", "Set Feature", "Reserved", - "Set Address", "Get Descriptor", "Set Descriptor", "Get Configuration", "Set Configuration", - "Get Interface", "Set Interface", "Synch Frame" +char const* const tu_str_speed[] = {"Full", "Low", "High"}; +char const* const tu_str_std_request[] = { + "Get Status", + "Clear Feature", + "Reserved", + "Set Feature", + "Reserved", + "Set Address", + "Get Descriptor", + "Set Descriptor", + "Get Configuration", + "Set Configuration", + "Get Interface", + "Set Interface", + "Synch Frame" }; -char const *const tu_str_xfer_result[] = { "OK", "FAILED", "STALLED", "TIMEOUT" }; +char const* const tu_str_xfer_result[] = { + "OK", "FAILED", "STALLED", "TIMEOUT" +}; #endif -static void dump_str_line(uint8_t const *buf, uint16_t count) -{ - tu_printf(" |"); - // each line is 16 bytes - for (uint16_t i = 0; i < count; i++) { - int ch = buf[i]; - tu_printf("%c", isprint(ch) ? ch : '.'); - } - tu_printf("|\r\n"); +static void dump_str_line(uint8_t const* buf, uint16_t count) { + tu_printf(" |"); + // each line is 16 bytes + for (uint16_t i = 0; i < count; i++) { + int ch = buf[i]; + tu_printf("%c", isprint(ch) ? ch : '.'); + } + tu_printf("|\r\n"); } /* Print out memory contents @@ -423,49 +409,47 @@ static void dump_str_line(uint8_t const *buf, uint16_t count) * - count : number of item * - indent: prefix spaces on every line */ -void tu_print_mem(void const *buf, uint32_t count, uint8_t indent) -{ - uint8_t const size = 1; // fixed 1 byte for now - if (!buf || !count) { - tu_printf("NULL\r\n"); - return; +void tu_print_mem(void const* buf, uint32_t count, uint8_t indent) { + uint8_t const size = 1; // fixed 1 byte for now + if (!buf || !count) { + tu_printf("NULL\r\n"); + return; + } + + uint8_t const* buf8 = (uint8_t const*) buf; + char format[] = "%00X"; + format[2] += (uint8_t) (2 * size); // 1 byte = 2 hex digits + const uint8_t item_per_line = 16 / size; + + for (unsigned int i = 0; i < count; i++) { + unsigned int value = 0; + + if (i % item_per_line == 0) { + // Print Ascii + if (i != 0) dump_str_line(buf8 - 16, 16); + for (uint8_t s = 0; s < indent; s++) tu_printf(" "); + // print offset or absolute address + tu_printf("%04X: ", 16 * i / item_per_line); } - uint8_t const *buf8 = (uint8_t const *)buf; - char format[] = "%00X"; - format[2] += (uint8_t)(2 * size); // 1 byte = 2 hex digits - const uint8_t item_per_line = 16 / size; - - for (unsigned int i = 0; i < count; i++) { - unsigned int value = 0; - - if (i % item_per_line == 0) { - // Print Ascii - if (i != 0) - dump_str_line(buf8 - 16, 16); - for (uint8_t s = 0; s < indent; s++) tu_printf(" "); - // print offset or absolute address - tu_printf("%04X: ", 16 * i / item_per_line); - } + tu_memcpy_s(&value, sizeof(value), buf8, size); + buf8 += size; - tu_memcpy_s(&value, sizeof(value), buf8, size); - buf8 += size; - - tu_printf(" "); - tu_printf(format, value); - } + tu_printf(" "); + tu_printf(format, value); + } - // fill up last row to 16 for printing ascii - const uint32_t remain = count % 16; - uint8_t nback = (uint8_t)(remain ? remain : 16); - if (remain) { - for (uint32_t i = 0; i < 16 - remain; i++) { - tu_printf(" "); - for (int j = 0; j < 2 * size; j++) tu_printf(" "); - } + // fill up last row to 16 for printing ascii + const uint32_t remain = count % 16; + uint8_t nback = (uint8_t) (remain ? remain : 16); + if (remain) { + for (uint32_t i = 0; i < 16 - remain; i++) { + tu_printf(" "); + for (int j = 0; j < 2 * size; j++) tu_printf(" "); } + } - dump_str_line(buf8 - nback, nback); + dump_str_line(buf8 - nback, nback); } #endif diff --git a/Libraries/tinyusb/src/tusb.h b/Libraries/tinyusb/src/tusb.h index 9aad1685b94..4f69a141403 100644 --- a/Libraries/tinyusb/src/tusb.h +++ b/Libraries/tinyusb/src/tusb.h @@ -28,7 +28,7 @@ #define _TUSB_H_ #ifdef __cplusplus -extern "C" { + extern "C" { #endif //--------------------------------------------------------------------+ @@ -40,91 +40,92 @@ extern "C" { //------------- TypeC -------------// #if CFG_TUC_ENABLED -#include "typec/usbc.h" + #include "typec/usbc.h" #endif //------------- HOST -------------// #if CFG_TUH_ENABLED -#include "host/usbh.h" + #include "host/usbh.h" -#if CFG_TUH_HID -#include "class/hid/hid_host.h" -#endif + #if CFG_TUH_HID + #include "class/hid/hid_host.h" + #endif -#if CFG_TUH_MSC -#include "class/msc/msc_host.h" -#endif + #if CFG_TUH_MSC + #include "class/msc/msc_host.h" + #endif -#if CFG_TUH_CDC -#include "class/cdc/cdc_host.h" -#endif + #if CFG_TUH_CDC + #include "class/cdc/cdc_host.h" + #endif -#if CFG_TUH_VENDOR -#include "class/vendor/vendor_host.h" -#endif + #if CFG_TUH_VENDOR + #include "class/vendor/vendor_host.h" + #endif #else -#ifndef tuh_int_handler -#define tuh_int_handler(...) -#endif + #ifndef tuh_int_handler + #define tuh_int_handler(...) + #endif #endif //------------- DEVICE -------------// #if CFG_TUD_ENABLED -#include "device/usbd.h" + #include "device/usbd.h" -#if CFG_TUD_HID -#include "class/hid/hid_device.h" -#endif + #if CFG_TUD_HID + #include "class/hid/hid_device.h" + #endif -#if CFG_TUD_CDC -#include "class/cdc/cdc_device.h" -#endif + #if CFG_TUD_CDC + #include "class/cdc/cdc_device.h" + #endif -#if CFG_TUD_MSC -#include "class/msc/msc_device.h" -#endif + #if CFG_TUD_MSC + #include "class/msc/msc_device.h" + #endif -#if CFG_TUD_AUDIO -#include "class/audio/audio_device.h" -#endif + #if CFG_TUD_AUDIO + #include "class/audio/audio_device.h" + #endif -#if CFG_TUD_VIDEO -#include "class/video/video_device.h" -#endif + #if CFG_TUD_VIDEO + #include "class/video/video_device.h" + #endif -#if CFG_TUD_MIDI -#include "class/midi/midi_device.h" -#endif + #if CFG_TUD_MIDI + #include "class/midi/midi_device.h" + #endif -#if CFG_TUD_VENDOR -#include "class/vendor/vendor_device.h" -#endif + #if CFG_TUD_VENDOR + #include "class/vendor/vendor_device.h" + #endif -#if CFG_TUD_USBTMC -#include "class/usbtmc/usbtmc_device.h" -#endif + #if CFG_TUD_USBTMC + #include "class/usbtmc/usbtmc_device.h" + #endif -#if CFG_TUD_DFU_RUNTIME -#include "class/dfu/dfu_rt_device.h" -#endif + #if CFG_TUD_DFU_RUNTIME + #include "class/dfu/dfu_rt_device.h" + #endif -#if CFG_TUD_DFU -#include "class/dfu/dfu_device.h" -#endif + #if CFG_TUD_DFU + #include "class/dfu/dfu_device.h" + #endif -#if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM -#include "class/net/net_device.h" -#endif + #if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM + #include "class/net/net_device.h" + #endif -#if CFG_TUD_BTH -#include "class/bth/bth_device.h" -#endif + #if CFG_TUD_BTH + #include "class/bth/bth_device.h" + #endif #else -#ifndef tud_int_handler -#define tud_int_handler(...) -#endif + #ifndef tud_int_handler + #define tud_int_handler(...) + #endif #endif + //--------------------------------------------------------------------+ // APPLICATION API //--------------------------------------------------------------------+ @@ -141,7 +142,7 @@ bool tusb_inited(void); // bool tusb_teardown(void); #ifdef __cplusplus -} + } #endif #endif /* _TUSB_H_ */ diff --git a/Libraries/tinyusb/src/tusb_option.h b/Libraries/tinyusb/src/tusb_option.h index c1c7b8f57c3..fb0209023d1 100644 --- a/Libraries/tinyusb/src/tusb_option.h +++ b/Libraries/tinyusb/src/tusb_option.h @@ -30,205 +30,202 @@ #include "common/tusb_compiler.h" // Version is release as major.minor.revision eg 1.0.0 -#define TUSB_VERSION_MAJOR 0 -#define TUSB_VERSION_MINOR 17 -#define TUSB_VERSION_REVISION 0 +#define TUSB_VERSION_MAJOR 0 +#define TUSB_VERSION_MINOR 17 +#define TUSB_VERSION_REVISION 0 -#define TUSB_VERSION_NUMBER \ - (TUSB_VERSION_MAJOR * 10000 + TUSB_VERSION_MINOR * 100 + TUSB_VERSION_REVISION) -#define TUSB_VERSION_STRING \ - TU_STRING(TUSB_VERSION_MAJOR) \ - "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION) +#define TUSB_VERSION_NUMBER (TUSB_VERSION_MAJOR * 10000 + TUSB_VERSION_MINOR * 100 + TUSB_VERSION_REVISION) +#define TUSB_VERSION_STRING TU_STRING(TUSB_VERSION_MAJOR) "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION) //--------------------------------------------------------------------+ // Supported MCUs // CFG_TUSB_MCU must be defined to one of following value //--------------------------------------------------------------------+ -#define OPT_MCU_NONE 0 +#define OPT_MCU_NONE 0 // LPC -#define OPT_MCU_LPC11UXX 1 ///< NXP LPC11Uxx -#define OPT_MCU_LPC13XX 2 ///< NXP LPC13xx -#define OPT_MCU_LPC15XX 3 ///< NXP LPC15xx -#define OPT_MCU_LPC175X_6X 4 ///< NXP LPC175x, LPC176x -#define OPT_MCU_LPC177X_8X 5 ///< NXP LPC177x, LPC178x -#define OPT_MCU_LPC18XX 6 ///< NXP LPC18xx -#define OPT_MCU_LPC40XX 7 ///< NXP LPC40xx -#define OPT_MCU_LPC43XX 8 ///< NXP LPC43xx -#define OPT_MCU_LPC51 9 ///< NXP LPC51 -#define OPT_MCU_LPC51UXX OPT_MCU_LPC51 ///< NXP LPC51 -#define OPT_MCU_LPC54 10 ///< NXP LPC54 -#define OPT_MCU_LPC55 11 ///< NXP LPC55 +#define OPT_MCU_LPC11UXX 1 ///< NXP LPC11Uxx +#define OPT_MCU_LPC13XX 2 ///< NXP LPC13xx +#define OPT_MCU_LPC15XX 3 ///< NXP LPC15xx +#define OPT_MCU_LPC175X_6X 4 ///< NXP LPC175x, LPC176x +#define OPT_MCU_LPC177X_8X 5 ///< NXP LPC177x, LPC178x +#define OPT_MCU_LPC18XX 6 ///< NXP LPC18xx +#define OPT_MCU_LPC40XX 7 ///< NXP LPC40xx +#define OPT_MCU_LPC43XX 8 ///< NXP LPC43xx +#define OPT_MCU_LPC51 9 ///< NXP LPC51 +#define OPT_MCU_LPC51UXX OPT_MCU_LPC51 ///< NXP LPC51 +#define OPT_MCU_LPC54 10 ///< NXP LPC54 +#define OPT_MCU_LPC55 11 ///< NXP LPC55 // legacy naming -#define OPT_MCU_LPC54XXX OPT_MCU_LPC54 -#define OPT_MCU_LPC55XX OPT_MCU_LPC55 +#define OPT_MCU_LPC54XXX OPT_MCU_LPC54 +#define OPT_MCU_LPC55XX OPT_MCU_LPC55 // NRF -#define OPT_MCU_NRF5X 100 ///< Nordic nRF5x series +#define OPT_MCU_NRF5X 100 ///< Nordic nRF5x series // SAM -#define OPT_MCU_SAMD21 200 ///< MicroChip SAMD21 -#define OPT_MCU_SAMD51 201 ///< MicroChip SAMD51 -#define OPT_MCU_SAMG 202 ///< MicroChip SAMDG series -#define OPT_MCU_SAME5X 203 ///< MicroChip SAM E5x -#define OPT_MCU_SAMD11 204 ///< MicroChip SAMD11 -#define OPT_MCU_SAML22 205 ///< MicroChip SAML22 -#define OPT_MCU_SAML21 206 ///< MicroChip SAML21 -#define OPT_MCU_SAMX7X 207 ///< MicroChip SAME70, S70, V70, V71 family +#define OPT_MCU_SAMD21 200 ///< MicroChip SAMD21 +#define OPT_MCU_SAMD51 201 ///< MicroChip SAMD51 +#define OPT_MCU_SAMG 202 ///< MicroChip SAMDG series +#define OPT_MCU_SAME5X 203 ///< MicroChip SAM E5x +#define OPT_MCU_SAMD11 204 ///< MicroChip SAMD11 +#define OPT_MCU_SAML22 205 ///< MicroChip SAML22 +#define OPT_MCU_SAML21 206 ///< MicroChip SAML21 +#define OPT_MCU_SAMX7X 207 ///< MicroChip SAME70, S70, V70, V71 family // STM32 -#define OPT_MCU_STM32F0 300 ///< ST F0 -#define OPT_MCU_STM32F1 301 ///< ST F1 -#define OPT_MCU_STM32F2 302 ///< ST F2 -#define OPT_MCU_STM32F3 303 ///< ST F3 -#define OPT_MCU_STM32F4 304 ///< ST F4 -#define OPT_MCU_STM32F7 305 ///< ST F7 -#define OPT_MCU_STM32H7 306 ///< ST H7 -#define OPT_MCU_STM32L1 308 ///< ST L1 -#define OPT_MCU_STM32L0 307 ///< ST L0 -#define OPT_MCU_STM32L4 309 ///< ST L4 -#define OPT_MCU_STM32G0 310 ///< ST G0 -#define OPT_MCU_STM32G4 311 ///< ST G4 -#define OPT_MCU_STM32WB 312 ///< ST WB -#define OPT_MCU_STM32U5 313 ///< ST U5 -#define OPT_MCU_STM32L5 314 ///< ST L5 -#define OPT_MCU_STM32H5 315 ///< ST H5 +#define OPT_MCU_STM32F0 300 ///< ST F0 +#define OPT_MCU_STM32F1 301 ///< ST F1 +#define OPT_MCU_STM32F2 302 ///< ST F2 +#define OPT_MCU_STM32F3 303 ///< ST F3 +#define OPT_MCU_STM32F4 304 ///< ST F4 +#define OPT_MCU_STM32F7 305 ///< ST F7 +#define OPT_MCU_STM32H7 306 ///< ST H7 +#define OPT_MCU_STM32L1 308 ///< ST L1 +#define OPT_MCU_STM32L0 307 ///< ST L0 +#define OPT_MCU_STM32L4 309 ///< ST L4 +#define OPT_MCU_STM32G0 310 ///< ST G0 +#define OPT_MCU_STM32G4 311 ///< ST G4 +#define OPT_MCU_STM32WB 312 ///< ST WB +#define OPT_MCU_STM32U5 313 ///< ST U5 +#define OPT_MCU_STM32L5 314 ///< ST L5 +#define OPT_MCU_STM32H5 315 ///< ST H5 // Sony -#define OPT_MCU_CXD56 400 ///< SONY CXD56 +#define OPT_MCU_CXD56 400 ///< SONY CXD56 // TI -#define OPT_MCU_MSP430x5xx 500 ///< TI MSP430x5xx -#define OPT_MCU_MSP432E4 510 ///< TI MSP432E4xx -#define OPT_MCU_TM4C123 511 ///< TI Tiva-C 123x -#define OPT_MCU_TM4C129 512 ///< TI Tiva-C 129x +#define OPT_MCU_MSP430x5xx 500 ///< TI MSP430x5xx +#define OPT_MCU_MSP432E4 510 ///< TI MSP432E4xx +#define OPT_MCU_TM4C123 511 ///< TI Tiva-C 123x +#define OPT_MCU_TM4C129 512 ///< TI Tiva-C 129x // ValentyUSB eptri -#define OPT_MCU_VALENTYUSB_EPTRI 600 ///< Fomu eptri config +#define OPT_MCU_VALENTYUSB_EPTRI 600 ///< Fomu eptri config // NXP iMX RT -#define OPT_MCU_MIMXRT1XXX 700 ///< NXP iMX RT1xxx Series -#define OPT_MCU_MIMXRT10XX OPT_MCU_MIMXRT1XXX ///< RT10xx -#define OPT_MCU_MIMXRT11XX OPT_MCU_MIMXRT1XXX ///< RT11xx +#define OPT_MCU_MIMXRT1XXX 700 ///< NXP iMX RT1xxx Series +#define OPT_MCU_MIMXRT10XX OPT_MCU_MIMXRT1XXX ///< RT10xx +#define OPT_MCU_MIMXRT11XX OPT_MCU_MIMXRT1XXX ///< RT11xx // Nuvoton -#define OPT_MCU_NUC121 800 -#define OPT_MCU_NUC126 801 -#define OPT_MCU_NUC120 802 -#define OPT_MCU_NUC505 803 +#define OPT_MCU_NUC121 800 +#define OPT_MCU_NUC126 801 +#define OPT_MCU_NUC120 802 +#define OPT_MCU_NUC505 803 // Espressif -#define OPT_MCU_ESP32S2 900 ///< Espressif ESP32-S2 -#define OPT_MCU_ESP32S3 901 ///< Espressif ESP32-S3 -#define OPT_MCU_ESP32 902 ///< Espressif ESP32 (for host max3421e) -#define OPT_MCU_ESP32C3 903 ///< Espressif ESP32-C3 -#define OPT_MCU_ESP32C6 904 ///< Espressif ESP32-C6 -#define OPT_MCU_ESP32C2 905 ///< Espressif ESP32-C2 -#define OPT_MCU_ESP32H2 906 ///< Espressif ESP32-H2 -#define TUP_MCU_ESPRESSIF (CFG_TUSB_MCU >= 900 && CFG_TUSB_MCU < 1000) // check if Espressif MCU +#define OPT_MCU_ESP32S2 900 ///< Espressif ESP32-S2 +#define OPT_MCU_ESP32S3 901 ///< Espressif ESP32-S3 +#define OPT_MCU_ESP32 902 ///< Espressif ESP32 (for host max3421e) +#define OPT_MCU_ESP32C3 903 ///< Espressif ESP32-C3 +#define OPT_MCU_ESP32C6 904 ///< Espressif ESP32-C6 +#define OPT_MCU_ESP32C2 905 ///< Espressif ESP32-C2 +#define OPT_MCU_ESP32H2 906 ///< Espressif ESP32-H2 +#define TUP_MCU_ESPRESSIF (CFG_TUSB_MCU >= 900 && CFG_TUSB_MCU < 1000) // check if Espressif MCU // Dialog -#define OPT_MCU_DA1469X 1000 ///< Dialog Semiconductor DA1469x +#define OPT_MCU_DA1469X 1000 ///< Dialog Semiconductor DA1469x // Raspberry Pi -#define OPT_MCU_RP2040 1100 ///< Raspberry Pi RP2040 +#define OPT_MCU_RP2040 1100 ///< Raspberry Pi RP2040 // NXP Kinetis -#define OPT_MCU_KINETIS_KL 1200 ///< NXP KL series -#define OPT_MCU_KINETIS_K32L 1201 ///< NXP K32L series -#define OPT_MCU_KINETIS_K32 1201 ///< Alias to K32L -#define OPT_MCU_KINETIS_K 1202 ///< NXP K series +#define OPT_MCU_KINETIS_KL 1200 ///< NXP KL series +#define OPT_MCU_KINETIS_K32L 1201 ///< NXP K32L series +#define OPT_MCU_KINETIS_K32 1201 ///< Alias to K32L +#define OPT_MCU_KINETIS_K 1202 ///< NXP K series -#define OPT_MCU_MKL25ZXX 1200 ///< Alias to KL (obsolete) -#define OPT_MCU_K32L2BXX 1201 ///< Alias to K32 (obsolete) +#define OPT_MCU_MKL25ZXX 1200 ///< Alias to KL (obsolete) +#define OPT_MCU_K32L2BXX 1201 ///< Alias to K32 (obsolete) // Silabs -#define OPT_MCU_EFM32GG 1300 ///< Silabs EFM32GG +#define OPT_MCU_EFM32GG 1300 ///< Silabs EFM32GG // Renesas RX -#define OPT_MCU_RX63X 1400 ///< Renesas RX63N/631 -#define OPT_MCU_RX65X 1401 ///< Renesas RX65N/RX651 -#define OPT_MCU_RX72N 1402 ///< Renesas RX72N -#define OPT_MCU_RAXXX 1403 ///< Renesas RAxxx families +#define OPT_MCU_RX63X 1400 ///< Renesas RX63N/631 +#define OPT_MCU_RX65X 1401 ///< Renesas RX65N/RX651 +#define OPT_MCU_RX72N 1402 ///< Renesas RX72N +#define OPT_MCU_RAXXX 1403 ///< Renesas RAxxx families // Mind Motion -#define OPT_MCU_MM32F327X 1500 ///< Mind Motion MM32F327 +#define OPT_MCU_MM32F327X 1500 ///< Mind Motion MM32F327 // GigaDevice -#define OPT_MCU_GD32VF103 1600 ///< GigaDevice GD32VF103 +#define OPT_MCU_GD32VF103 1600 ///< GigaDevice GD32VF103 // Broadcom -#define OPT_MCU_BCM2711 1700 ///< Broadcom BCM2711 -#define OPT_MCU_BCM2835 1701 ///< Broadcom BCM2835 -#define OPT_MCU_BCM2837 1702 ///< Broadcom BCM2837 +#define OPT_MCU_BCM2711 1700 ///< Broadcom BCM2711 +#define OPT_MCU_BCM2835 1701 ///< Broadcom BCM2835 +#define OPT_MCU_BCM2837 1702 ///< Broadcom BCM2837 // Infineon -#define OPT_MCU_XMC4000 1800 ///< Infineon XMC4000 +#define OPT_MCU_XMC4000 1800 ///< Infineon XMC4000 // PIC -#define OPT_MCU_PIC32MZ 1900 ///< MicroChip PIC32MZ family -#define OPT_MCU_PIC32MM 1901 ///< MicroChip PIC32MM family -#define OPT_MCU_PIC32MX 1902 ///< MicroChip PIC32MX family -#define OPT_MCU_PIC32MK 1903 ///< MicroChip PIC32MK family -#define OPT_MCU_PIC24 1910 ///< MicroChip PIC24 family -#define OPT_MCU_DSPIC33 1911 ///< MicroChip DSPIC33 family +#define OPT_MCU_PIC32MZ 1900 ///< MicroChip PIC32MZ family +#define OPT_MCU_PIC32MM 1901 ///< MicroChip PIC32MM family +#define OPT_MCU_PIC32MX 1902 ///< MicroChip PIC32MX family +#define OPT_MCU_PIC32MK 1903 ///< MicroChip PIC32MK family +#define OPT_MCU_PIC24 1910 ///< MicroChip PIC24 family +#define OPT_MCU_DSPIC33 1911 ///< MicroChip DSPIC33 family // BridgeTek -#define OPT_MCU_FT90X 2000 ///< BridgeTek FT90x -#define OPT_MCU_FT93X 2001 ///< BridgeTek FT93x +#define OPT_MCU_FT90X 2000 ///< BridgeTek FT90x +#define OPT_MCU_FT93X 2001 ///< BridgeTek FT93x // Allwinner -#define OPT_MCU_F1C100S 2100 ///< Allwinner F1C100s family +#define OPT_MCU_F1C100S 2100 ///< Allwinner F1C100s family // WCH -#define OPT_MCU_CH32V307 2200 ///< WCH CH32V307 -#define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x -#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20X -#define OPT_MCU_CH32V103 2230 ///< WCH CH32V103 +#define OPT_MCU_CH32V307 2200 ///< WCH CH32V307 +#define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x +#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20X +#define OPT_MCU_CH32V103 2230 ///< WCH CH32V103 // NXP LPC MCX -#define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series -#define OPT_MCU_MCXA15 2301 ///< NXP MCX A15 Series +#define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series +#define OPT_MCU_MCXA15 2301 ///< NXP MCX A15 Series // Analog Devices -#define OPT_MCU_MAX32690 2400 ///< ADI MAX32690 -#define OPT_MCU_MAX32666 2401 ///< ADI MAX32666/5 -#define OPT_MCU_MAX32650 2402 ///< ADI MAX32650/1/2 -#define OPT_MCU_MAX78002 2403 ///< ADI MAX78002 +#define OPT_MCU_MAX32690 2400 ///< ADI MAX32690 +#define OPT_MCU_MAX32666 2401 ///< ADI MAX32666/5 +#define OPT_MCU_MAX32650 2402 ///< ADI MAX32650/1/2 +#define OPT_MCU_MAX78002 2403 ///< ADI MAX78002 // Check if configured MCU is one of listed // Apply _TU_CHECK_MCU with || as separator to list of input -#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m) -#define TU_CHECK_MCU(...) (TU_ARGS_APPLY(_TU_CHECK_MCU, ||, __VA_ARGS__)) +#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m) +#define TU_CHECK_MCU(...) (TU_ARGS_APPLY(_TU_CHECK_MCU, ||, __VA_ARGS__)) //--------------------------------------------------------------------+ // Supported OS //--------------------------------------------------------------------+ -#define OPT_OS_NONE 1 ///< No RTOS -#define OPT_OS_FREERTOS 2 ///< FreeRTOS -#define OPT_OS_MYNEWT 3 ///< Mynewt OS -#define OPT_OS_CUSTOM 4 ///< Custom OS is implemented by application -#define OPT_OS_PICO 5 ///< Raspberry Pi Pico SDK -#define OPT_OS_RTTHREAD 6 ///< RT-Thread -#define OPT_OS_RTX4 7 ///< Keil RTX 4 +#define OPT_OS_NONE 1 ///< No RTOS +#define OPT_OS_FREERTOS 2 ///< FreeRTOS +#define OPT_OS_MYNEWT 3 ///< Mynewt OS +#define OPT_OS_CUSTOM 4 ///< Custom OS is implemented by application +#define OPT_OS_PICO 5 ///< Raspberry Pi Pico SDK +#define OPT_OS_RTTHREAD 6 ///< RT-Thread +#define OPT_OS_RTX4 7 ///< Keil RTX 4 //--------------------------------------------------------------------+ // Mode and Speed //--------------------------------------------------------------------+ // Low byte is operational mode -#define OPT_MODE_NONE 0x0000 ///< Disabled -#define OPT_MODE_DEVICE 0x0001 ///< Device Mode -#define OPT_MODE_HOST 0x0002 ///< Host Mode +#define OPT_MODE_NONE 0x0000 ///< Disabled +#define OPT_MODE_DEVICE 0x0001 ///< Device Mode +#define OPT_MODE_HOST 0x0002 ///< Host Mode // High byte is max operational speed (corresponding to tusb_speed_t) -#define OPT_MODE_DEFAULT_SPEED 0x0000 ///< Default (max) speed supported by MCU -#define OPT_MODE_LOW_SPEED 0x0100 ///< Low Speed -#define OPT_MODE_FULL_SPEED 0x0200 ///< Full Speed -#define OPT_MODE_HIGH_SPEED 0x0400 ///< High Speed -#define OPT_MODE_SPEED_MASK 0xff00 +#define OPT_MODE_DEFAULT_SPEED 0x0000 ///< Default (max) speed supported by MCU +#define OPT_MODE_LOW_SPEED 0x0100 ///< Low Speed +#define OPT_MODE_FULL_SPEED 0x0200 ///< Full Speed +#define OPT_MODE_HIGH_SPEED 0x0400 ///< High Speed +#define OPT_MODE_SPEED_MASK 0xff00 //--------------------------------------------------------------------+ // Include tusb_config.h and tusb_mcu.h @@ -236,9 +233,9 @@ // Allow to use command line to change the config name/location #ifdef CFG_TUSB_CONFIG_FILE -#include CFG_TUSB_CONFIG_FILE + #include CFG_TUSB_CONFIG_FILE #else -#include "tusb_config.h" + #include "tusb_config.h" #endif #include "common/tusb_mcu.h" @@ -249,61 +246,60 @@ //------------- Root hub as Device -------------// -#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE)&OPT_MODE_DEVICE) -#define TUD_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) -#define TUD_OPT_RHPORT 0 -#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE)&OPT_MODE_DEVICE) -#define TUD_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) -#define TUD_OPT_RHPORT 1 +#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_DEVICE) + #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) + #define TUD_OPT_RHPORT 0 +#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_DEVICE) + #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) + #define TUD_OPT_RHPORT 1 #else -#define TUD_RHPORT_MODE OPT_MODE_NONE + #define TUD_RHPORT_MODE OPT_MODE_NONE #endif #ifndef CFG_TUD_ENABLED -// fallback to use CFG_TUSB_RHPORTx_MODE -#define CFG_TUD_ENABLED (TUD_RHPORT_MODE & OPT_MODE_DEVICE) + // fallback to use CFG_TUSB_RHPORTx_MODE + #define CFG_TUD_ENABLED (TUD_RHPORT_MODE & OPT_MODE_DEVICE) #endif #ifndef CFG_TUD_MAX_SPEED -// fallback to use CFG_TUSB_RHPORTx_MODE -#define CFG_TUD_MAX_SPEED (TUD_RHPORT_MODE & OPT_MODE_SPEED_MASK) + // fallback to use CFG_TUSB_RHPORTx_MODE + #define CFG_TUD_MAX_SPEED (TUD_RHPORT_MODE & OPT_MODE_SPEED_MASK) #endif // For backward compatible #define TUSB_OPT_DEVICE_ENABLED CFG_TUD_ENABLED // highspeed support indicator -#define TUD_OPT_HIGH_SPEED \ - (CFG_TUD_MAX_SPEED ? (CFG_TUD_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) +#define TUD_OPT_HIGH_SPEED (CFG_TUD_MAX_SPEED ? (CFG_TUD_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) //------------- Root hub as Host -------------// -#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE)&OPT_MODE_HOST) -#define TUH_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) -#define TUH_OPT_RHPORT 0 -#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE)&OPT_MODE_HOST) -#define TUH_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) -#define TUH_OPT_RHPORT 1 +#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_HOST) + #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE) + #define TUH_OPT_RHPORT 0 +#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HOST) + #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE) + #define TUH_OPT_RHPORT 1 #else -#define TUH_RHPORT_MODE OPT_MODE_NONE + #define TUH_RHPORT_MODE OPT_MODE_NONE #endif #ifndef CFG_TUH_ENABLED -// fallback to use CFG_TUSB_RHPORTx_MODE -#define CFG_TUH_ENABLED (TUH_RHPORT_MODE & OPT_MODE_HOST) + // fallback to use CFG_TUSB_RHPORTx_MODE + #define CFG_TUH_ENABLED (TUH_RHPORT_MODE & OPT_MODE_HOST) #endif #ifndef CFG_TUH_MAX_SPEED -// fallback to use CFG_TUSB_RHPORTx_MODE -#define CFG_TUH_MAX_SPEED (TUH_RHPORT_MODE & OPT_MODE_SPEED_MASK) + // fallback to use CFG_TUSB_RHPORTx_MODE + #define CFG_TUH_MAX_SPEED (TUH_RHPORT_MODE & OPT_MODE_SPEED_MASK) #endif // For backward compatible -#define TUSB_OPT_HOST_ENABLED CFG_TUH_ENABLED +#define TUSB_OPT_HOST_ENABLED CFG_TUH_ENABLED // highspeed support indicator -#define TUH_OPT_HIGH_SPEED \ - (CFG_TUH_MAX_SPEED ? (CFG_TUH_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) +#define TUH_OPT_HIGH_SPEED (CFG_TUH_MAX_SPEED ? (CFG_TUH_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED) + //--------------------------------------------------------------------+ // TODO move later @@ -314,49 +310,50 @@ // to generate unaligned access code. // LPC_IP3511 Highspeed cannot access unaligned memory on USB_RAM #if TUD_OPT_HIGH_SPEED && TU_CHECK_MCU(OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX) -#define TUP_MCU_STRICT_ALIGN 1 + #define TUP_MCU_STRICT_ALIGN 1 #else -#define TUP_MCU_STRICT_ALIGN 0 + #define TUP_MCU_STRICT_ALIGN 0 #endif + //--------------------------------------------------------------------+ // Common Options (Default) //--------------------------------------------------------------------+ // Debug enable to print out error message #ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG 0 + #define CFG_TUSB_DEBUG 0 #endif // Level where CFG_TUSB_DEBUG must be at least for USBH is logged #ifndef CFG_TUH_LOG_LEVEL -#define CFG_TUH_LOG_LEVEL 2 + #define CFG_TUH_LOG_LEVEL 2 #endif // Level where CFG_TUSB_DEBUG must be at least for USBD is logged #ifndef CFG_TUD_LOG_LEVEL -#define CFG_TUD_LOG_LEVEL 2 + #define CFG_TUD_LOG_LEVEL 2 #endif // Memory section for placing buffer used for usb transferring. If MEM_SECTION is different for // host and device use: CFG_TUD_MEM_SECTION, CFG_TUH_MEM_SECTION instead #ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION + #define CFG_TUSB_MEM_SECTION #endif // Alignment requirement of buffer used for usb transferring. if MEM_ALIGN is different for // host and device controller use: CFG_TUD_MEM_ALIGN, CFG_TUH_MEM_ALIGN instead #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4) + #define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4) #endif // OS selection #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE + #define CFG_TUSB_OS OPT_OS_NONE #endif #ifndef CFG_TUSB_OS_INC_PATH -#define CFG_TUSB_OS_INC_PATH + #define CFG_TUSB_OS_INC_PATH #endif //-------------------------------------------------------------------- @@ -365,39 +362,39 @@ // Attribute to place data in accessible RAM for device controller (default: CFG_TUSB_MEM_SECTION) #ifndef CFG_TUD_MEM_SECTION -#define CFG_TUD_MEM_SECTION CFG_TUSB_MEM_SECTION + #define CFG_TUD_MEM_SECTION CFG_TUSB_MEM_SECTION #endif // Attribute to align memory for device controller (default: CFG_TUSB_MEM_ALIGN) #ifndef CFG_TUD_MEM_ALIGN -#define CFG_TUD_MEM_ALIGN CFG_TUSB_MEM_ALIGN + #define CFG_TUD_MEM_ALIGN CFG_TUSB_MEM_ALIGN #endif #ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE 64 + #define CFG_TUD_ENDPOINT0_SIZE 64 #endif #ifndef CFG_TUD_INTERFACE_MAX -#define CFG_TUD_INTERFACE_MAX 16 + #define CFG_TUD_INTERFACE_MAX 16 #endif // default to max hardware endpoint, but can be smaller to save RAM #ifndef CFG_TUD_ENDPPOINT_MAX -#define CFG_TUD_ENDPPOINT_MAX TUP_DCD_ENDPOINT_MAX + #define CFG_TUD_ENDPPOINT_MAX TUP_DCD_ENDPOINT_MAX #endif #if CFG_TUD_ENDPPOINT_MAX > TUP_DCD_ENDPOINT_MAX -#error "CFG_TUD_ENDPPOINT_MAX must be less than or equal to TUP_DCD_ENDPOINT_MAX" + #error "CFG_TUD_ENDPPOINT_MAX must be less than or equal to TUP_DCD_ENDPOINT_MAX" #endif // USB 2.0 7.1.20: compliance test mode support #ifndef CFG_TUD_TEST_MODE -#define CFG_TUD_TEST_MODE 0 + #define CFG_TUD_TEST_MODE 0 #endif //------------- Device Class Driver -------------// #ifndef CFG_TUD_BTH -#define CFG_TUD_BTH 0 + #define CFG_TUD_BTH 0 #endif #if CFG_TUD_BTH && !defined(CFG_TUD_BTH_ISO_ALT_COUNT) @@ -405,171 +402,164 @@ #endif #ifndef CFG_TUD_CDC -#define CFG_TUD_CDC 0 + #define CFG_TUD_CDC 0 #endif #ifndef CFG_TUD_MSC -#define CFG_TUD_MSC 0 + #define CFG_TUD_MSC 0 #endif #ifndef CFG_TUD_HID -#define CFG_TUD_HID 0 + #define CFG_TUD_HID 0 #endif #ifndef CFG_TUD_AUDIO -#define CFG_TUD_AUDIO 0 + #define CFG_TUD_AUDIO 0 #endif #ifndef CFG_TUD_VIDEO -#define CFG_TUD_VIDEO 0 + #define CFG_TUD_VIDEO 0 #endif #ifndef CFG_TUD_MIDI -#define CFG_TUD_MIDI 0 + #define CFG_TUD_MIDI 0 #endif #ifndef CFG_TUD_VENDOR -#define CFG_TUD_VENDOR 0 + #define CFG_TUD_VENDOR 0 #endif #ifndef CFG_TUD_USBTMC -#define CFG_TUD_USBTMC 0 + #define CFG_TUD_USBTMC 0 #endif #ifndef CFG_TUD_DFU_RUNTIME -#define CFG_TUD_DFU_RUNTIME 0 + #define CFG_TUD_DFU_RUNTIME 0 #endif #ifndef CFG_TUD_DFU -#define CFG_TUD_DFU 0 + #define CFG_TUD_DFU 0 #endif #ifndef CFG_TUD_ECM_RNDIS -#ifdef CFG_TUD_NET -#warning "CFG_TUD_NET is renamed to CFG_TUD_ECM_RNDIS" -#define CFG_TUD_ECM_RNDIS CFG_TUD_NET -#else -#define CFG_TUD_ECM_RNDIS 0 -#endif + #ifdef CFG_TUD_NET + #warning "CFG_TUD_NET is renamed to CFG_TUD_ECM_RNDIS" + #define CFG_TUD_ECM_RNDIS CFG_TUD_NET + #else + #define CFG_TUD_ECM_RNDIS 0 + #endif #endif #ifndef CFG_TUD_NCM -#define CFG_TUD_NCM 0 + #define CFG_TUD_NCM 0 #endif //-------------------------------------------------------------------- // Host Options (Default) //-------------------------------------------------------------------- #if CFG_TUH_ENABLED -#ifndef CFG_TUH_DEVICE_MAX -#define CFG_TUH_DEVICE_MAX 1 -#endif + #ifndef CFG_TUH_DEVICE_MAX + #define CFG_TUH_DEVICE_MAX 1 + #endif -#ifndef CFG_TUH_ENUMERATION_BUFSIZE -#define CFG_TUH_ENUMERATION_BUFSIZE 256 -#endif + #ifndef CFG_TUH_ENUMERATION_BUFSIZE + #define CFG_TUH_ENUMERATION_BUFSIZE 256 + #endif #endif // CFG_TUH_ENABLED // Attribute to place data in accessible RAM for host controller (default: CFG_TUSB_MEM_SECTION) #ifndef CFG_TUH_MEM_SECTION -#define CFG_TUH_MEM_SECTION CFG_TUSB_MEM_SECTION + #define CFG_TUH_MEM_SECTION CFG_TUSB_MEM_SECTION #endif // Attribute to align memory for host controller #ifndef CFG_TUH_MEM_ALIGN -#define CFG_TUH_MEM_ALIGN CFG_TUSB_MEM_ALIGN + #define CFG_TUH_MEM_ALIGN CFG_TUSB_MEM_ALIGN #endif //------------- CLASS -------------// #ifndef CFG_TUH_HUB -#define CFG_TUH_HUB 0 + #define CFG_TUH_HUB 0 #endif #ifndef CFG_TUH_CDC -#define CFG_TUH_CDC 0 + #define CFG_TUH_CDC 0 #endif // FTDI is not part of CDC class, only to re-use CDC driver API #ifndef CFG_TUH_CDC_FTDI -#define CFG_TUH_CDC_FTDI 0 + #define CFG_TUH_CDC_FTDI 0 #endif // List of product IDs that can use the FTDI CDC driver. 0x0403 is FTDI's VID #ifndef CFG_TUH_CDC_FTDI_VID_PID_LIST -#define CFG_TUH_CDC_FTDI_VID_PID_LIST \ - { 0x0403, 0x6001 }, { 0x0403, 0x6006 }, { 0x0403, 0x6010 }, { 0x0403, 0x6011 }, \ - { 0x0403, 0x6014 }, { 0x0403, 0x6015 }, { 0x0403, 0x8372 }, { 0x0403, 0xFBFA }, \ - { \ - 0x0403, 0xCD18 \ - } + #define CFG_TUH_CDC_FTDI_VID_PID_LIST \ + {0x0403, 0x6001}, {0x0403, 0x6006}, {0x0403, 0x6010}, {0x0403, 0x6011}, \ + {0x0403, 0x6014}, {0x0403, 0x6015}, {0x0403, 0x8372}, {0x0403, 0xFBFA}, \ + {0x0403, 0xCD18} #endif // CP210X is not part of CDC class, only to re-use CDC driver API #ifndef CFG_TUH_CDC_CP210X -#define CFG_TUH_CDC_CP210X 0 + #define CFG_TUH_CDC_CP210X 0 #endif // List of product IDs that can use the CP210X CDC driver. 0x10C4 is Silicon Labs' VID #ifndef CFG_TUH_CDC_CP210X_VID_PID_LIST -#define CFG_TUH_CDC_CP210X_VID_PID_LIST \ - { 0x10C4, 0xEA60 }, \ - { \ - 0x10C4, 0xEA70 \ - } + #define CFG_TUH_CDC_CP210X_VID_PID_LIST \ + {0x10C4, 0xEA60}, {0x10C4, 0xEA70} #endif #ifndef CFG_TUH_CDC_CH34X -// CH34X is not part of CDC class, only to re-use CDC driver API -#define CFG_TUH_CDC_CH34X 0 + // CH34X is not part of CDC class, only to re-use CDC driver API + #define CFG_TUH_CDC_CH34X 0 #endif // List of product IDs that can use the CH34X CDC driver #ifndef CFG_TUH_CDC_CH34X_VID_PID_LIST -#define CFG_TUH_CDC_CH34X_VID_PID_LIST \ - { 0x1a86, 0x5523 }, /* ch341 chip */ \ - { 0x1a86, 0x7522 }, /* ch340k chip */ \ - { 0x1a86, 0x7523 }, /* ch340 chip */ \ - { 0x1a86, 0xe523 }, /* ch330 chip */ \ - { 0x4348, 0x5523 }, /* ch340 custom chip */ \ - { 0x2184, 0x0057 }, /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ \ - { \ - 0x9986, 0x7523 \ - } /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ + #define CFG_TUH_CDC_CH34X_VID_PID_LIST \ + { 0x1a86, 0x5523 }, /* ch341 chip */ \ + { 0x1a86, 0x7522 }, /* ch340k chip */ \ + { 0x1a86, 0x7523 }, /* ch340 chip */ \ + { 0x1a86, 0xe523 }, /* ch330 chip */ \ + { 0x4348, 0x5523 }, /* ch340 custom chip */ \ + { 0x2184, 0x0057 }, /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ \ + { 0x9986, 0x7523 } /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ #endif #ifndef CFG_TUH_HID -#define CFG_TUH_HID 0 + #define CFG_TUH_HID 0 #endif #ifndef CFG_TUH_MIDI -#define CFG_TUH_MIDI 0 + #define CFG_TUH_MIDI 0 #endif #ifndef CFG_TUH_MSC -#define CFG_TUH_MSC 0 + #define CFG_TUH_MSC 0 #endif #ifndef CFG_TUH_VENDOR -#define CFG_TUH_VENDOR 0 + #define CFG_TUH_VENDOR 0 #endif #ifndef CFG_TUH_API_EDPT_XFER -#define CFG_TUH_API_EDPT_XFER 0 + #define CFG_TUH_API_EDPT_XFER 0 #endif // Enable PIO-USB software host controller #ifndef CFG_TUH_RPI_PIO_USB -#define CFG_TUH_RPI_PIO_USB 0 + #define CFG_TUH_RPI_PIO_USB 0 #endif #ifndef CFG_TUD_RPI_PIO_USB -#define CFG_TUD_RPI_PIO_USB 0 + #define CFG_TUD_RPI_PIO_USB 0 #endif // MAX3421 Host controller option #ifndef CFG_TUH_MAX3421 -#define CFG_TUH_MAX3421 0 + #define CFG_TUH_MAX3421 0 #endif //--------------------------------------------------------------------+ @@ -586,7 +576,7 @@ // Configuration Validation //------------------------------------------------------------------ #if CFG_TUD_ENDPOINT0_SIZE > 64 -#error Control Endpoint Max Packet Size cannot be larger than 64 + #error Control Endpoint Max Packet Size cannot be larger than 64 #endif // To avoid GCC compiler warnings when -pedantic option is used (strict ISO C) From 189ba120ff2685b87240e1f48264806b77f87673 Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 11:57:12 -0500 Subject: [PATCH 22/27] Mistakenly reverted wrong commit. Re-add comment --- Examples/MAX32655/Demo_2048/RISCV/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 703e2b7ca5b..561a980abcc 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -340,7 +340,7 @@ int main(void) SendGameStateToARMCore(Game_2048_CheckState()); - // Signal ARM core to + // Signal ARM core to display initial grid. MXC_SEMA_FreeSema(SEMA_IDX_ARM); // Wait for ARM core to finish displaying the starting grid. From 2a2316aceefbe614d200bc0947fbce839b3232c0 Mon Sep 17 00:00:00 2001 From: sihyung-maxim Date: Tue, 17 Sep 2024 17:01:02 +0000 Subject: [PATCH 23/27] clang-format bot reformatting. --- .../MAX32655/Demo_2048/ARM/inc/graphics.h | 178 +- .../MAX32655/Demo_2048/ARM/inc/ipc_defines.h | 15 +- Examples/MAX32655/Demo_2048/ARM/main.c | 69 +- .../Demo_2048/ARM/resources/all_imgs.c | 123340 ++++++++++++++- .../MAX32655/Demo_2048/ARM/resources/bitmap.h | 12 +- .../MAX32655/Demo_2048/ARM/src/graphics.c | 844 +- .../MAX32655/Demo_2048/RISCV/inc/game_2048.h | 7 +- .../Demo_2048/RISCV/inc/ipc_defines.h | 15 +- Examples/MAX32655/Demo_2048/RISCV/main.c | 86 +- .../MAX32655/Demo_2048/RISCV/src/controller.c | 4 - .../MAX32655/Demo_2048/RISCV/src/game_2048.c | 80 +- Libraries/MiscDrivers/Display/tft_ssd2119.c | 35 +- Libraries/MiscDrivers/Display/tft_ssd2119.h | 11 +- 13 files changed, 116736 insertions(+), 7960 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h index 36db538a4ae..c53bb87bf89 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -25,110 +25,129 @@ /* **** Definitions **** */ -#define SCREEN_ORIENTATION (SCREEN_ROTATE) +#define SCREEN_ORIENTATION (SCREEN_ROTATE) // Will be different from actual screen dimensions depending on screen orientation -#define SCREEN_WIDTH (320) -#define SCREEN_HEIGHT (240) +#define SCREEN_WIDTH (320) +#define SCREEN_HEIGHT (240) // TODO(SW): Automatically calculate these sizes based on screen dimensions. // Set the dimensions of all the models. -#define GRID_OFFSET_X (80) -#define GRID_OFFSET_Y (0) -#define GRID_LENGTH (224) -#define GRID_SPACING (8) // spacing between edge of "screen to grid". +#define GRID_OFFSET_X (80) +#define GRID_OFFSET_Y (0) +#define GRID_LENGTH (224) +#define GRID_SPACING (8) // spacing between edge of "screen to grid". -#define BLOCK_LENGTH (51) -#define BLOCK_SPACING (4) // spacing between edge of "grid to block" and "block to block". +#define BLOCK_LENGTH (51) +#define BLOCK_SPACING (4) // spacing between edge of "grid to block" and "block to block". -#define RADIUS_FOR_CORNERS (3) +#define RADIUS_FOR_CORNERS (3) -#define CFS_LOGO_OFFSET_X (4) -#define CFS_LOGO_OFFSET_Y (0) +#define CFS_LOGO_OFFSET_X (4) +#define CFS_LOGO_OFFSET_Y (0) -#define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) -#define GAME_LOGO_OFFSET_Y (80) +#define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) +#define GAME_LOGO_OFFSET_Y (80) // Position settings for timer. -#define TIME_OFFSET_Y (215) -#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - 1) -#define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels -#define TIME_DIGIT3_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) -#define TIME_DIGIT2_OFFSET_X(width) ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) -#define TIME_DIGIT1_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) -#define TIME_DIGIT0_OFFSET_X(width) ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) +#define TIME_OFFSET_Y (215) +#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - 1) +#define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels +#define TIME_DIGIT3_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - \ + (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT2_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - \ + (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT1_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + \ + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) +#define TIME_DIGIT0_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + \ + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) // Position settings for moves counter. -#define MOVES_DIGITS_OFFSET_Y (160) -#define MOVES_TEXT_OFFSET_Y (MOVES_DIGITS_OFFSET_Y + GAME_TEXT_DIGITS_HEIGHT + 4) // 4 seemed to be appropriate number of pxiels for spacing. -#define MOVES_DIGIT_WIDTH (15) // Max width of digit is 15 pixels. -#define MOVES_DIGITS_OFFSET_X ((GRID_OFFSET_X / 2) - MOVES_DIGIT_WIDTH - (MOVES_DIGIT_WIDTH / 2)) -#define MOVES_TEXT_OFFSET_X ((GRID_OFFSET_X / 2) - (GAME_TEXT_MOVES_WIDTH / 2) + 4) -#define MOVES_DIGIT3_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 0) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT2_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 1) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT1_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) -#define MOVES_DIGIT0_OFFSET_X(width) (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGITS_OFFSET_Y (160) +#define MOVES_TEXT_OFFSET_Y \ + (MOVES_DIGITS_OFFSET_Y + GAME_TEXT_DIGITS_HEIGHT + \ + 4) // 4 seemed to be appropriate number of pxiels for spacing. +#define MOVES_DIGIT_WIDTH (15) // Max width of digit is 15 pixels. +#define MOVES_DIGITS_OFFSET_X ((GRID_OFFSET_X / 2) - MOVES_DIGIT_WIDTH - (MOVES_DIGIT_WIDTH / 2)) +#define MOVES_TEXT_OFFSET_X ((GRID_OFFSET_X / 2) - (GAME_TEXT_MOVES_WIDTH / 2) + 4) +#define MOVES_DIGIT3_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 0) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT2_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 1) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT1_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT0_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) // Position settings for Game Over and You Win boxes, -#define GAME_OVER_BOX_OFFSET_X (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (GAME_OVER_BOX_WIDTH / 2)) -#define GAME_OVER_BOX_OFFSET_Y (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (GAME_OVER_BOX_HEIGHT / 2)) -#define YOU_WIN_BOX_OFFSET_X (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (YOU_WIN_BOX_WIDTH / 2)) -#define YOU_WIN_BOX_OFFSET_Y (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (YOU_WIN_BOX_HEIGHT / 2)) +#define GAME_OVER_BOX_OFFSET_X \ + (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (GAME_OVER_BOX_WIDTH / 2)) +#define GAME_OVER_BOX_OFFSET_Y \ + (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (GAME_OVER_BOX_HEIGHT / 2)) +#define YOU_WIN_BOX_OFFSET_X \ + (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (YOU_WIN_BOX_WIDTH / 2)) +#define YOU_WIN_BOX_OFFSET_Y \ + (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (YOU_WIN_BOX_HEIGHT / 2)) // Colors 16-bit RGB565. -#define RGB565_WHITE (0xFFFF) -#define RGB565_BLACK (0x0000) -#define RGB565_DARK_GRAY (0x3084) -#define RGB565_LIGHT_GRAY (0x5AEB) +#define RGB565_WHITE (0xFFFF) +#define RGB565_BLACK (0x0000) +#define RGB565_DARK_GRAY (0x3084) +#define RGB565_LIGHT_GRAY (0x5AEB) // Block colors (2-2048) are taken from original game: https://github.com/gabrielecirulli/2048?tab=readme-ov-file // Open-source under MIT License. -#define RGB565_BLOCK_2 (0xEF3B) -#define RGB565_BLOCK_4 (0xEF19) -#define RGB565_BLOCK_8 (0xF58F) -#define RGB565_BLOCK_16 (0xF4AC) -#define RGB565_BLOCK_32 (0xF3EB) -#define RGB565_BLOCK_64 (0xF2E7) -#define RGB565_BLOCK_128 (0xEE6E) -#define RGB565_BLOCK_256 (0xEE6C) -#define RGB565_BLOCK_512 (0xEE4A) -#define RGB565_BLOCK_1024 (0xEE27) -#define RGB565_BLOCK_2048 (0xEE05) +#define RGB565_BLOCK_2 (0xEF3B) +#define RGB565_BLOCK_4 (0xEF19) +#define RGB565_BLOCK_8 (0xF58F) +#define RGB565_BLOCK_16 (0xF4AC) +#define RGB565_BLOCK_32 (0xF3EB) +#define RGB565_BLOCK_64 (0xF2E7) +#define RGB565_BLOCK_128 (0xEE6E) +#define RGB565_BLOCK_256 (0xEE6C) +#define RGB565_BLOCK_512 (0xEE4A) +#define RGB565_BLOCK_1024 (0xEE27) +#define RGB565_BLOCK_2048 (0xEE05) // Unused, but left here if anyone wants to expand features. -#define RGB565_BLOCK_4096 (0xFDF7) -#define RGB565_BLOCK_8192 (0xF38E) -#define RGB565_BLOCK_16384 (0xFC58) -#define RGB565_BLOCK_32768 (0xB43C) -#define RGB565_BLOCK_65536 (0x8BF9) -#define RGB565_BLOCK_131072 (0x6C3C) +#define RGB565_BLOCK_4096 (0xFDF7) +#define RGB565_BLOCK_8192 (0xF38E) +#define RGB565_BLOCK_16384 (0xFC58) +#define RGB565_BLOCK_32768 (0xB43C) +#define RGB565_BLOCK_65536 (0x8BF9) +#define RGB565_BLOCK_131072 (0x6C3C) // For my non-American English Speakers :) -#define RGB565_DARK_GREY RGB565_DARK_GRAY -#define RGB565_LIGHT_GREY RGB565_LIGHT_GRAY +#define RGB565_DARK_GREY RGB565_DARK_GRAY +#define RGB565_LIGHT_GREY RGB565_LIGHT_GRAY // Formatted Colors -#define FORMAT_RGB565_TO_PACKET(RGB) (0x01000100 | ((RGB & 0x00FF) << 16) | ((RGB & 0xFF00) >> 8)) +#define FORMAT_RGB565_TO_PACKET(RGB) (0x01000100 | ((RGB & 0x00FF) << 16) | ((RGB & 0xFF00) >> 8)) // 'F_' prefix stands for "formatted into packets". -#define F_BACKGROUND_COLOR FORMAT_RGB565_TO_PACKET(RGB565_WHITE) -#define F_GRID_COLOR FORMAT_RGB565_TO_PACKET(RGB565_DARK_GRAY) -#define F_EMPTY_BLOCK_COLOR FORMAT_RGB565_TO_PACKET(RGB565_LIGHT_GRAY) - -#define RGB_BLOCK_COLOR(block) ((block) == 2 ? RGB565_BLOCK_2 \ - : (block) == 4 ? RGB565_BLOCK_4 \ - : (block) == 8 ? RGB565_BLOCK_8 \ - : (block) == 16 ? RGB565_BLOCK_16 \ - : (block) == 32 ? RGB565_BLOCK_32 \ - : (block) == 64 ? RGB565_BLOCK_64 \ - : (block) == 128 ? RGB565_BLOCK_128 \ - : (block) == 256 ? RGB565_BLOCK_256 \ - : (block) == 512 ? RGB565_BLOCK_512 \ - : (block) == 1024 ? RGB565_BLOCK_1024 \ - : (block) == 2048 ? RGB565_BLOCK_2048 \ - : BLOCK_2_DIGIT_PX_HEIGHT) - -#define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) +#define F_BACKGROUND_COLOR FORMAT_RGB565_TO_PACKET(RGB565_WHITE) +#define F_GRID_COLOR FORMAT_RGB565_TO_PACKET(RGB565_DARK_GRAY) +#define F_EMPTY_BLOCK_COLOR FORMAT_RGB565_TO_PACKET(RGB565_LIGHT_GRAY) + +#define RGB_BLOCK_COLOR(block) \ + ((block) == 2 ? RGB565_BLOCK_2 : \ + (block) == 4 ? RGB565_BLOCK_4 : \ + (block) == 8 ? RGB565_BLOCK_8 : \ + (block) == 16 ? RGB565_BLOCK_16 : \ + (block) == 32 ? RGB565_BLOCK_32 : \ + (block) == 64 ? RGB565_BLOCK_64 : \ + (block) == 128 ? RGB565_BLOCK_128 : \ + (block) == 256 ? RGB565_BLOCK_256 : \ + (block) == 512 ? RGB565_BLOCK_512 : \ + (block) == 1024 ? RGB565_BLOCK_1024 : \ + (block) == 2048 ? RGB565_BLOCK_2048 : \ + BLOCK_2_DIGIT_PX_HEIGHT) + +#define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) /** * These enums help keep track of what blocks were erased, @@ -136,12 +155,7 @@ * the animation of for the display. * IMPORTANT: Sync these commands with the RISCV core. */ -typedef enum { - EMPTY = 0, - ERASE = 1, - COMBINE = 2, - UNMOVED = 3 -} block_state_t; +typedef enum { EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; /** * These enums help keep track of the game state. diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h index 69e7ed870ce..b32456265eb 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h @@ -49,12 +49,13 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. -#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) -#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX \ + (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) #endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c index 2380ced7550..c2b3d97000f 100644 --- a/Examples/MAX32655/Demo_2048/ARM/main.c +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -59,12 +59,12 @@ extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes // Rename boxes for readability. -// Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. +// Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. #define SEMA_RISCV_MAILBOX mxcSemaBox0 #define SEMA_ARM_MAILBOX mxcSemaBox1 -uint32_t ARM_GRID_COPY[4][4] = {0}; -block_state_t ARM_GRID_COPY_STATE[4][4] = {0}; +uint32_t ARM_GRID_COPY[4][4] = { 0 }; +block_state_t ARM_GRID_COPY_STATE[4][4] = { 0 }; uint32_t MOVES_COUNT = 0; @@ -78,11 +78,11 @@ void ReceiveGridFromRISCVCore(void) for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { ARM_GRID_COPY[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+1] << (8 * 1); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+2] << (8 * 2); - ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i+3] << (8 * 3); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 1] << (8 * 1); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 2] << (8 * 2); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 3] << (8 * 3); - i+=4; + i += 4; } } @@ -101,24 +101,24 @@ graphics_slide_direction_t ReceiveDirectionFromRISCVCore(void) { // Add more direction keys here. switch (SEMA_ARM_MAILBOX->payload[MAILBOX_KEYPRESS_IDX]) { - // UP - case 'w': - return GRAPHICS_SLIDE_DIR_UP; + // UP + case 'w': + return GRAPHICS_SLIDE_DIR_UP; - // DOWN - case 's': - return GRAPHICS_SLIDE_DIR_DOWN; + // DOWN + case 's': + return GRAPHICS_SLIDE_DIR_DOWN; - // LEFT - case 'a': - return GRAPHICS_SLIDE_DIR_LEFT; + // LEFT + case 'a': + return GRAPHICS_SLIDE_DIR_LEFT; - // RIGHT - case 'd': - return GRAPHICS_SLIDE_DIR_RIGHT; + // RIGHT + case 'd': + return GRAPHICS_SLIDE_DIR_RIGHT; - default: - return -1; + default: + return -1; } } @@ -145,9 +145,9 @@ uint32_t ReceiveMovesCountFromRISCVCore(void) { uint32_t moves_count = 0; moves_count = SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] << (8 * 0); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+1] << (8 * 1); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+2] << (8 * 2); - moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+3] << (8 * 3); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 1] << (8 * 1); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 2] << (8 * 2); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 3] << (8 * 3); return moves_count; } @@ -163,7 +163,7 @@ int main(void) // - Use IPO for System Clock for fastest speed. (Done in SystemInit) // - Enable Internal Cache. (Done in SystemInit) - // Speed up console UART to match player controller baud rate which have shared ports + // Speed up console UART to match player controller baud rate which have shared ports // (PC Keyboard via Console UART). error = MXC_UART_Init(MXC_UART_GET_UART(CONSOLE_UART), RISCV_CONTROLLER_BAUD, MXC_UART_APB_CLK); if (error != E_NO_ERROR) { @@ -173,7 +173,7 @@ int main(void) } PRINT("\n\n*******************************************************************************\n"); - + // ARM Initialization. PRINT("ARM: Starting ARM Initialization.\n\n"); @@ -185,7 +185,7 @@ int main(void) // Prepare ARM semaphore. MXC_SEMA_Init(); - + // Check status of ARM semaphore. error = MXC_SEMA_CheckSema(SEMA_IDX_ARM); if (error != E_NO_ERROR) { @@ -196,11 +196,13 @@ int main(void) error = MXC_SEMA_GetSema(SEMA_IDX_ARM); if (error != E_NO_ERROR) { - PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); + PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_ARM]); LED_On(LED_RED); while (1) {} } else { - PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_ARM]); + PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_ARM]); } // Backup Delay for 1 second before starting RISCV core. @@ -302,7 +304,9 @@ int main(void) // Add new blocks. for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { - if ((ARM_GRID_COPY[row][col]) != 0 && (ARM_GRID_COPY_STATE[row][col] != UNMOVED) && (ARM_GRID_COPY_STATE[row][col] != COMBINE)) { + if ((ARM_GRID_COPY[row][col]) != 0 && + (ARM_GRID_COPY_STATE[row][col] != UNMOVED) && + (ARM_GRID_COPY_STATE[row][col] != COMBINE)) { // Don't draw newly spawned block. // new_block_row and new_block_col will be set to 0xFFFF for invalid // location if new block was not added. @@ -315,10 +319,11 @@ int main(void) // Add combined blocks. Graphics_CombineBlocks(ARM_GRID_COPY, ARM_GRID_COPY_STATE); - + // Add new block with spawn animation. if (new_block_added == true) { - Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); + Graphics_AddNewBlock(new_block_row, new_block_col, + ARM_GRID_COPY[new_block_row][new_block_col]); } game_state = ReceiveGameStateFromRISCVCore(); diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c index 1536bb85377..b2091035ae7 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c +++ b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c @@ -14,7416 +14,115960 @@ * See the License for the specific language governing permissions and * limitations under the License. * - ******************************************************************************/ + ******************************************************************************/ -__attribute__ ((section(".bin_storage_img"))) __attribute__ ((__used__)) -const unsigned char imgs_arr[ ] = { +__attribute__((section(".bin_storage_img"))) __attribute__((__used__)) +const unsigned char imgs_arr[] = { -/* + /* Header */ -0x18,0x00,0x00,0x00,0x1D,0x04,0x00,0x00,0x16,0x0A,0x00,0x00,0x01,0x00,0x00, -0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x1D, + 0x04, + 0x00, + 0x00, + 0x16, + 0x0A, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, -/* + /* Palette */ -0x01, -0x1D,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9B,0xA5,0x18,0x00,0x70,0x73,0x71, -0x00,0x33,0x35,0x3B,0x00,0x20,0xE8,0xD9,0x00,0x03,0x02,0xD5,0x00,0x00,0xA9,0x00, -0x00,0x6F,0x6E,0x7A,0x00,0xFF,0xFD,0xFF,0x00,0x76,0x75,0x76,0x00,0x95,0x94,0x95, -0x00,0x6A,0x66,0x69,0x00,0x7A,0x76,0x78,0x00,0x76,0x72,0x74,0x00,0x75,0x71,0x73, -0x00,0x71,0x6F,0x6F,0x00,0x76,0x75,0x75,0x00,0x75,0x74,0x74,0x00,0x74,0x73,0x73, -0x00,0x73,0x72,0x72,0x00,0x72,0x71,0x71,0x00,0x91,0x90,0x90,0x00,0x86,0x85,0x85, -0x00,0x67,0x65,0x64,0x00,0x63,0x61,0x60,0x00,0x70,0x6E,0x6D,0x00,0x6A,0x68,0x66, -0x00,0x77,0x76,0x75,0x00,0x71,0x70,0x6F,0x00,0x6E,0x6D,0x6C,0x00,0x6D,0x6C,0x6B, -0x00,0x6C,0x6B,0x6A,0x00,0x90,0x8F,0x8E,0x00,0x88,0x87,0x86,0x00,0x77,0x74,0x70, -0x00,0x76,0x73,0x6F,0x00,0x75,0x72,0x6E,0x00,0x4F,0x4D,0x4A,0x00,0x5A,0x58,0x55, -0x00,0x58,0x56,0x53,0x00,0x56,0x54,0x51,0x00,0x3F,0x3D,0x39,0x00,0x44,0x42,0x3E, -0x00,0x47,0x45,0x41,0x00,0x4C,0x4A,0x46,0x00,0x4B,0x49,0x45,0x00,0x4A,0x48,0x44, -0x00,0x4E,0x4C,0x48,0x00,0x4D,0x4B,0x47,0x00,0x6B,0x6A,0x68,0x00,0x68,0x67,0x65, -0x00,0x66,0x65,0x63,0x00,0x64,0x63,0x61,0x00,0x74,0x73,0x71,0x00,0x73,0x72,0x70, -0x00,0x42,0x40,0x3B,0x00,0x41,0x3F,0x3A,0x00,0x43,0x41,0x3C,0x00,0x46,0x44,0x3F, -0x00,0x5D,0x5C,0x59,0x00,0x5B,0x5A,0x57,0x00,0x61,0x60,0x5D,0x00,0x5F,0x5E,0x5B, -0x00,0x76,0x75,0x72,0x00,0x72,0x71,0x6E,0x00,0x53,0x52,0x4E,0x00,0x51,0x50,0x4C, -0x00,0x79,0x78,0x74,0x00,0x48,0x47,0x42,0x00,0xFD,0xFC,0xF7,0x00,0x77,0x76,0x6B, -0x00,0x80,0x7F,0x71,0x00,0x9D,0xA0,0x19,0x00,0x93,0x95,0x1E,0x00,0xA3,0xA6,0x25, -0x00,0xF9,0xF9,0xED,0x00,0x76,0x76,0x73,0x00,0x79,0x79,0x77,0x00,0x89,0x89,0x87, -0x00,0x81,0x81,0x7F,0x00,0x4C,0x4C,0x4B,0x00,0x4A,0x4A,0x49,0x00,0xFE,0xFE,0xFC, -0x00,0xFF,0xFF,0xFE,0x00,0xE2,0xE2,0xE1,0x00,0xC2,0xC2,0xC1,0x00,0xB7,0xB7,0xB6, -0x00,0xAE,0xAE,0xAD,0x00,0xA7,0xA7,0xA6,0x00,0xA1,0xA1,0xA0,0x00,0x9C,0x9C,0x9B, -0x00,0x9A,0x9A,0x99,0x00,0x97,0x97,0x96,0x00,0x8E,0x8E,0x8D,0x00,0x8D,0x8D,0x8C, -0x00,0x8A,0x8A,0x89,0x00,0x83,0x83,0x82,0x00,0xA6,0xAE,0x00,0x00,0xA5,0xAB,0x00, -0x00,0xA2,0xA6,0x00,0x00,0xA0,0xA4,0x00,0x00,0x95,0x9C,0x01,0x00,0xA6,0xAA,0x0A, -0x00,0x9F,0xA6,0x0B,0x00,0x89,0x8F,0x0E,0x00,0xA9,0xAD,0x13,0x00,0xAD,0xB1,0x1D, -0x00,0x9C,0xA2,0x1F,0x00,0xB1,0xB5,0x25,0x00,0xBD,0xC3,0x41,0x00,0xB5,0xB9,0x44, -0x00,0xC3,0xC8,0x59,0x00,0x83,0x85,0x4B,0x00,0xCB,0xCF,0x79,0x00,0x8B,0x8D,0x56, -0x00,0x7D,0x7E,0x59,0x00,0xDB,0xDE,0x9D,0x00,0xE4,0xE6,0xB7,0x00,0xA9,0xB2,0x00, -0x00,0xAF,0xB8,0x14,0x00,0x9D,0xA6,0x13,0x00,0x9C,0xA5,0x15,0x00,0x9B,0xA5,0x16, -0x00,0x99,0xA2,0x17,0x00,0x9A,0xA3,0x19,0x00,0x9E,0xA7,0x1D,0x00,0xA0,0xA9,0x20, -0x00,0x74,0x7A,0x1A,0x00,0xB5,0xBC,0x2B,0x00,0xAE,0xB4,0x36,0x00,0x9A,0xA0,0x31, -0x00,0x93,0x97,0x46,0x00,0x97,0x9A,0x67,0x00,0xA8,0xAB,0x77,0x00,0x84,0x86,0x65, -0x00,0xEC,0xEE,0xCC,0x00,0xF4,0xF5,0xE0,0x00,0x9C,0xA6,0x18,0x00,0x91,0x99,0x2C, -0x00,0x60,0x65,0x24,0x00,0x6A,0x6C,0x56,0x00,0x77,0x79,0x62,0x00,0x9C,0xAB,0x15, -0x00,0xA5,0xB5,0x2B,0x00,0x9E,0xAD,0x2C,0x00,0x8A,0x93,0x37,0x00,0x7C,0x84,0x3D, -0x00,0x51,0x55,0x2F,0x00,0x4C,0x4F,0x2F,0x00,0x9C,0x9F,0x81,0x00,0x8F,0xA2,0x15, -0x00,0xAF,0xC1,0x29,0x00,0xAA,0xBC,0x2A,0x00,0xA7,0xB8,0x2B,0x00,0xA4,0xB5,0x2B, -0x00,0xA3,0xB3,0x2C,0x00,0x99,0xA9,0x35,0x00,0x45,0x48,0x32,0x00,0xA6,0xBA,0x32, -0x00,0xA2,0xB5,0x33,0x00,0x9D,0xAF,0x34,0x00,0x6A,0x72,0x40,0x00,0x65,0x6B,0x42, -0x00,0x5F,0x65,0x40,0x00,0x48,0x4C,0x31,0x00,0x58,0x5C,0x40,0x00,0x59,0x5C,0x47, -0x00,0x53,0x56,0x44,0x00,0x4F,0x51,0x45,0x00,0x53,0x55,0x49,0x00,0x41,0x44,0x34, -0x00,0x76,0x7A,0x66,0x00,0x48,0x4D,0x38,0x00,0x73,0x76,0x6B,0x00,0x4B,0x4D,0x46, -0x00,0x41,0x45,0x39,0x00,0x73,0x76,0x6D,0x00,0x7C,0x7D,0x7B,0x00,0xFC,0xFD,0xFB, -0x00,0x3A,0x3D,0x39,0x00,0x6D,0x71,0x6C,0x00,0x56,0x59,0x56,0x00,0x75,0x78,0x75, -0x00,0xCC,0xCD,0xCC,0x00,0x50,0xCD,0x59,0x00,0x32,0xC6,0x3E,0x00,0x81,0xDC,0x89, -0x00,0xA8,0xE8,0xAE,0x00,0xC3,0xEF,0xC7,0x00,0x02,0xC0,0x19,0x00,0xE9,0xF9,0xEB, -0x00,0x02,0xD4,0x2E,0x00,0x6A,0x6D,0x6B,0x00,0x74,0x77,0x75,0x00,0x73,0x76,0x74, -0x00,0x71,0x74,0x72,0x00,0x6C,0x6F,0x6D,0x00,0xFC,0xFF,0xFE,0x00,0x26,0xE2,0xD3, -0x00,0x2E,0xD8,0xC9,0x00,0x34,0xD0,0xC1,0x00,0x57,0xE1,0xD5,0x00,0x88,0xE9,0xE1, -0x00,0xBC,0xF3,0xEE,0x00,0xE0,0xF9,0xF7,0x00,0xF1,0xFD,0xFC,0x00,0x1F,0xE9,0xDA, -0x00,0x63,0x65,0x65,0x00,0x51,0x52,0x52,0x00,0x55,0x56,0x56,0x00,0x4B,0x4D,0x4E, -0x00,0x36,0x38,0x3A,0x00,0x42,0x44,0x47,0x00,0x6F,0x71,0x75,0x00,0x4E,0x4F,0x51, -0x00,0x37,0x39,0x3E,0x00,0x3A,0x3C,0x41,0x00,0x34,0x36,0x3C,0x00,0x3F,0x40,0x44, -0x00,0x46,0x47,0x4B,0x00,0x44,0x45,0x49,0x00,0x5A,0x5B,0x5F,0x00,0x79,0x7A,0x7F, -0x00,0xF9,0xFA,0xFF,0x00,0x69,0x6A,0x70,0x00,0x12,0x25,0xF6,0x00,0x0D,0x1A,0xEB, -0x00,0xEE,0xEF,0xFD,0x00,0x09,0x0F,0xE1,0x00,0x27,0x2A,0xE1,0x00,0x38,0x3A,0xE3, -0x00,0x48,0x4A,0xE4,0x00,0x72,0x73,0xEA,0x00,0x7F,0x80,0xEC,0x00,0xA6,0xA6,0xF1, -0x00,0xBD,0xBD,0xF5,0x00,0xD8,0xD8,0xF9,0x00,0x79,0x79,0x84,0x00,0x75,0x75,0x7E, -0x00,0x97,0x97,0x9E,0x00,0x49,0x49,0x4C,0x00,0x58,0x58,0x59,0x00,0xFA,0xFA,0xFA, -0x00,0xF7,0xF7,0xF7,0x00,0xF3,0xF3,0xF3,0x00,0xEA,0xEA,0xEA,0x00,0xD8,0xD8,0xD8, -0x00,0x98,0x98,0x98,0x00,0x92,0x92,0x92,0x00,0x91,0x91,0x91,0x00,0x76,0x76,0x76, -0x00,0x4D,0x4D,0x4D,0x00,0x4B,0x4B,0x4B,0x00,0x4A,0x4A,0x4A,0x00,0x49,0x49,0x49, -0x00, + 0x01, + 0x1D, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x9B, + 0xA5, + 0x18, + 0x00, + 0x70, + 0x73, + 0x71, + 0x00, + 0x33, + 0x35, + 0x3B, + 0x00, + 0x20, + 0xE8, + 0xD9, + 0x00, + 0x03, + 0x02, + 0xD5, + 0x00, + 0x00, + 0xA9, + 0x00, + 0x00, + 0x6F, + 0x6E, + 0x7A, + 0x00, + 0xFF, + 0xFD, + 0xFF, + 0x00, + 0x76, + 0x75, + 0x76, + 0x00, + 0x95, + 0x94, + 0x95, + 0x00, + 0x6A, + 0x66, + 0x69, + 0x00, + 0x7A, + 0x76, + 0x78, + 0x00, + 0x76, + 0x72, + 0x74, + 0x00, + 0x75, + 0x71, + 0x73, + 0x00, + 0x71, + 0x6F, + 0x6F, + 0x00, + 0x76, + 0x75, + 0x75, + 0x00, + 0x75, + 0x74, + 0x74, + 0x00, + 0x74, + 0x73, + 0x73, + 0x00, + 0x73, + 0x72, + 0x72, + 0x00, + 0x72, + 0x71, + 0x71, + 0x00, + 0x91, + 0x90, + 0x90, + 0x00, + 0x86, + 0x85, + 0x85, + 0x00, + 0x67, + 0x65, + 0x64, + 0x00, + 0x63, + 0x61, + 0x60, + 0x00, + 0x70, + 0x6E, + 0x6D, + 0x00, + 0x6A, + 0x68, + 0x66, + 0x00, + 0x77, + 0x76, + 0x75, + 0x00, + 0x71, + 0x70, + 0x6F, + 0x00, + 0x6E, + 0x6D, + 0x6C, + 0x00, + 0x6D, + 0x6C, + 0x6B, + 0x00, + 0x6C, + 0x6B, + 0x6A, + 0x00, + 0x90, + 0x8F, + 0x8E, + 0x00, + 0x88, + 0x87, + 0x86, + 0x00, + 0x77, + 0x74, + 0x70, + 0x00, + 0x76, + 0x73, + 0x6F, + 0x00, + 0x75, + 0x72, + 0x6E, + 0x00, + 0x4F, + 0x4D, + 0x4A, + 0x00, + 0x5A, + 0x58, + 0x55, + 0x00, + 0x58, + 0x56, + 0x53, + 0x00, + 0x56, + 0x54, + 0x51, + 0x00, + 0x3F, + 0x3D, + 0x39, + 0x00, + 0x44, + 0x42, + 0x3E, + 0x00, + 0x47, + 0x45, + 0x41, + 0x00, + 0x4C, + 0x4A, + 0x46, + 0x00, + 0x4B, + 0x49, + 0x45, + 0x00, + 0x4A, + 0x48, + 0x44, + 0x00, + 0x4E, + 0x4C, + 0x48, + 0x00, + 0x4D, + 0x4B, + 0x47, + 0x00, + 0x6B, + 0x6A, + 0x68, + 0x00, + 0x68, + 0x67, + 0x65, + 0x00, + 0x66, + 0x65, + 0x63, + 0x00, + 0x64, + 0x63, + 0x61, + 0x00, + 0x74, + 0x73, + 0x71, + 0x00, + 0x73, + 0x72, + 0x70, + 0x00, + 0x42, + 0x40, + 0x3B, + 0x00, + 0x41, + 0x3F, + 0x3A, + 0x00, + 0x43, + 0x41, + 0x3C, + 0x00, + 0x46, + 0x44, + 0x3F, + 0x00, + 0x5D, + 0x5C, + 0x59, + 0x00, + 0x5B, + 0x5A, + 0x57, + 0x00, + 0x61, + 0x60, + 0x5D, + 0x00, + 0x5F, + 0x5E, + 0x5B, + 0x00, + 0x76, + 0x75, + 0x72, + 0x00, + 0x72, + 0x71, + 0x6E, + 0x00, + 0x53, + 0x52, + 0x4E, + 0x00, + 0x51, + 0x50, + 0x4C, + 0x00, + 0x79, + 0x78, + 0x74, + 0x00, + 0x48, + 0x47, + 0x42, + 0x00, + 0xFD, + 0xFC, + 0xF7, + 0x00, + 0x77, + 0x76, + 0x6B, + 0x00, + 0x80, + 0x7F, + 0x71, + 0x00, + 0x9D, + 0xA0, + 0x19, + 0x00, + 0x93, + 0x95, + 0x1E, + 0x00, + 0xA3, + 0xA6, + 0x25, + 0x00, + 0xF9, + 0xF9, + 0xED, + 0x00, + 0x76, + 0x76, + 0x73, + 0x00, + 0x79, + 0x79, + 0x77, + 0x00, + 0x89, + 0x89, + 0x87, + 0x00, + 0x81, + 0x81, + 0x7F, + 0x00, + 0x4C, + 0x4C, + 0x4B, + 0x00, + 0x4A, + 0x4A, + 0x49, + 0x00, + 0xFE, + 0xFE, + 0xFC, + 0x00, + 0xFF, + 0xFF, + 0xFE, + 0x00, + 0xE2, + 0xE2, + 0xE1, + 0x00, + 0xC2, + 0xC2, + 0xC1, + 0x00, + 0xB7, + 0xB7, + 0xB6, + 0x00, + 0xAE, + 0xAE, + 0xAD, + 0x00, + 0xA7, + 0xA7, + 0xA6, + 0x00, + 0xA1, + 0xA1, + 0xA0, + 0x00, + 0x9C, + 0x9C, + 0x9B, + 0x00, + 0x9A, + 0x9A, + 0x99, + 0x00, + 0x97, + 0x97, + 0x96, + 0x00, + 0x8E, + 0x8E, + 0x8D, + 0x00, + 0x8D, + 0x8D, + 0x8C, + 0x00, + 0x8A, + 0x8A, + 0x89, + 0x00, + 0x83, + 0x83, + 0x82, + 0x00, + 0xA6, + 0xAE, + 0x00, + 0x00, + 0xA5, + 0xAB, + 0x00, + 0x00, + 0xA2, + 0xA6, + 0x00, + 0x00, + 0xA0, + 0xA4, + 0x00, + 0x00, + 0x95, + 0x9C, + 0x01, + 0x00, + 0xA6, + 0xAA, + 0x0A, + 0x00, + 0x9F, + 0xA6, + 0x0B, + 0x00, + 0x89, + 0x8F, + 0x0E, + 0x00, + 0xA9, + 0xAD, + 0x13, + 0x00, + 0xAD, + 0xB1, + 0x1D, + 0x00, + 0x9C, + 0xA2, + 0x1F, + 0x00, + 0xB1, + 0xB5, + 0x25, + 0x00, + 0xBD, + 0xC3, + 0x41, + 0x00, + 0xB5, + 0xB9, + 0x44, + 0x00, + 0xC3, + 0xC8, + 0x59, + 0x00, + 0x83, + 0x85, + 0x4B, + 0x00, + 0xCB, + 0xCF, + 0x79, + 0x00, + 0x8B, + 0x8D, + 0x56, + 0x00, + 0x7D, + 0x7E, + 0x59, + 0x00, + 0xDB, + 0xDE, + 0x9D, + 0x00, + 0xE4, + 0xE6, + 0xB7, + 0x00, + 0xA9, + 0xB2, + 0x00, + 0x00, + 0xAF, + 0xB8, + 0x14, + 0x00, + 0x9D, + 0xA6, + 0x13, + 0x00, + 0x9C, + 0xA5, + 0x15, + 0x00, + 0x9B, + 0xA5, + 0x16, + 0x00, + 0x99, + 0xA2, + 0x17, + 0x00, + 0x9A, + 0xA3, + 0x19, + 0x00, + 0x9E, + 0xA7, + 0x1D, + 0x00, + 0xA0, + 0xA9, + 0x20, + 0x00, + 0x74, + 0x7A, + 0x1A, + 0x00, + 0xB5, + 0xBC, + 0x2B, + 0x00, + 0xAE, + 0xB4, + 0x36, + 0x00, + 0x9A, + 0xA0, + 0x31, + 0x00, + 0x93, + 0x97, + 0x46, + 0x00, + 0x97, + 0x9A, + 0x67, + 0x00, + 0xA8, + 0xAB, + 0x77, + 0x00, + 0x84, + 0x86, + 0x65, + 0x00, + 0xEC, + 0xEE, + 0xCC, + 0x00, + 0xF4, + 0xF5, + 0xE0, + 0x00, + 0x9C, + 0xA6, + 0x18, + 0x00, + 0x91, + 0x99, + 0x2C, + 0x00, + 0x60, + 0x65, + 0x24, + 0x00, + 0x6A, + 0x6C, + 0x56, + 0x00, + 0x77, + 0x79, + 0x62, + 0x00, + 0x9C, + 0xAB, + 0x15, + 0x00, + 0xA5, + 0xB5, + 0x2B, + 0x00, + 0x9E, + 0xAD, + 0x2C, + 0x00, + 0x8A, + 0x93, + 0x37, + 0x00, + 0x7C, + 0x84, + 0x3D, + 0x00, + 0x51, + 0x55, + 0x2F, + 0x00, + 0x4C, + 0x4F, + 0x2F, + 0x00, + 0x9C, + 0x9F, + 0x81, + 0x00, + 0x8F, + 0xA2, + 0x15, + 0x00, + 0xAF, + 0xC1, + 0x29, + 0x00, + 0xAA, + 0xBC, + 0x2A, + 0x00, + 0xA7, + 0xB8, + 0x2B, + 0x00, + 0xA4, + 0xB5, + 0x2B, + 0x00, + 0xA3, + 0xB3, + 0x2C, + 0x00, + 0x99, + 0xA9, + 0x35, + 0x00, + 0x45, + 0x48, + 0x32, + 0x00, + 0xA6, + 0xBA, + 0x32, + 0x00, + 0xA2, + 0xB5, + 0x33, + 0x00, + 0x9D, + 0xAF, + 0x34, + 0x00, + 0x6A, + 0x72, + 0x40, + 0x00, + 0x65, + 0x6B, + 0x42, + 0x00, + 0x5F, + 0x65, + 0x40, + 0x00, + 0x48, + 0x4C, + 0x31, + 0x00, + 0x58, + 0x5C, + 0x40, + 0x00, + 0x59, + 0x5C, + 0x47, + 0x00, + 0x53, + 0x56, + 0x44, + 0x00, + 0x4F, + 0x51, + 0x45, + 0x00, + 0x53, + 0x55, + 0x49, + 0x00, + 0x41, + 0x44, + 0x34, + 0x00, + 0x76, + 0x7A, + 0x66, + 0x00, + 0x48, + 0x4D, + 0x38, + 0x00, + 0x73, + 0x76, + 0x6B, + 0x00, + 0x4B, + 0x4D, + 0x46, + 0x00, + 0x41, + 0x45, + 0x39, + 0x00, + 0x73, + 0x76, + 0x6D, + 0x00, + 0x7C, + 0x7D, + 0x7B, + 0x00, + 0xFC, + 0xFD, + 0xFB, + 0x00, + 0x3A, + 0x3D, + 0x39, + 0x00, + 0x6D, + 0x71, + 0x6C, + 0x00, + 0x56, + 0x59, + 0x56, + 0x00, + 0x75, + 0x78, + 0x75, + 0x00, + 0xCC, + 0xCD, + 0xCC, + 0x00, + 0x50, + 0xCD, + 0x59, + 0x00, + 0x32, + 0xC6, + 0x3E, + 0x00, + 0x81, + 0xDC, + 0x89, + 0x00, + 0xA8, + 0xE8, + 0xAE, + 0x00, + 0xC3, + 0xEF, + 0xC7, + 0x00, + 0x02, + 0xC0, + 0x19, + 0x00, + 0xE9, + 0xF9, + 0xEB, + 0x00, + 0x02, + 0xD4, + 0x2E, + 0x00, + 0x6A, + 0x6D, + 0x6B, + 0x00, + 0x74, + 0x77, + 0x75, + 0x00, + 0x73, + 0x76, + 0x74, + 0x00, + 0x71, + 0x74, + 0x72, + 0x00, + 0x6C, + 0x6F, + 0x6D, + 0x00, + 0xFC, + 0xFF, + 0xFE, + 0x00, + 0x26, + 0xE2, + 0xD3, + 0x00, + 0x2E, + 0xD8, + 0xC9, + 0x00, + 0x34, + 0xD0, + 0xC1, + 0x00, + 0x57, + 0xE1, + 0xD5, + 0x00, + 0x88, + 0xE9, + 0xE1, + 0x00, + 0xBC, + 0xF3, + 0xEE, + 0x00, + 0xE0, + 0xF9, + 0xF7, + 0x00, + 0xF1, + 0xFD, + 0xFC, + 0x00, + 0x1F, + 0xE9, + 0xDA, + 0x00, + 0x63, + 0x65, + 0x65, + 0x00, + 0x51, + 0x52, + 0x52, + 0x00, + 0x55, + 0x56, + 0x56, + 0x00, + 0x4B, + 0x4D, + 0x4E, + 0x00, + 0x36, + 0x38, + 0x3A, + 0x00, + 0x42, + 0x44, + 0x47, + 0x00, + 0x6F, + 0x71, + 0x75, + 0x00, + 0x4E, + 0x4F, + 0x51, + 0x00, + 0x37, + 0x39, + 0x3E, + 0x00, + 0x3A, + 0x3C, + 0x41, + 0x00, + 0x34, + 0x36, + 0x3C, + 0x00, + 0x3F, + 0x40, + 0x44, + 0x00, + 0x46, + 0x47, + 0x4B, + 0x00, + 0x44, + 0x45, + 0x49, + 0x00, + 0x5A, + 0x5B, + 0x5F, + 0x00, + 0x79, + 0x7A, + 0x7F, + 0x00, + 0xF9, + 0xFA, + 0xFF, + 0x00, + 0x69, + 0x6A, + 0x70, + 0x00, + 0x12, + 0x25, + 0xF6, + 0x00, + 0x0D, + 0x1A, + 0xEB, + 0x00, + 0xEE, + 0xEF, + 0xFD, + 0x00, + 0x09, + 0x0F, + 0xE1, + 0x00, + 0x27, + 0x2A, + 0xE1, + 0x00, + 0x38, + 0x3A, + 0xE3, + 0x00, + 0x48, + 0x4A, + 0xE4, + 0x00, + 0x72, + 0x73, + 0xEA, + 0x00, + 0x7F, + 0x80, + 0xEC, + 0x00, + 0xA6, + 0xA6, + 0xF1, + 0x00, + 0xBD, + 0xBD, + 0xF5, + 0x00, + 0xD8, + 0xD8, + 0xF9, + 0x00, + 0x79, + 0x79, + 0x84, + 0x00, + 0x75, + 0x75, + 0x7E, + 0x00, + 0x97, + 0x97, + 0x9E, + 0x00, + 0x49, + 0x49, + 0x4C, + 0x00, + 0x58, + 0x58, + 0x59, + 0x00, + 0xFA, + 0xFA, + 0xFA, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0xF3, + 0xF3, + 0xF3, + 0x00, + 0xEA, + 0xEA, + 0xEA, + 0x00, + 0xD8, + 0xD8, + 0xD8, + 0x00, + 0x98, + 0x98, + 0x98, + 0x00, + 0x92, + 0x92, + 0x92, + 0x00, + 0x91, + 0x91, + 0x91, + 0x00, + 0x76, + 0x76, + 0x76, + 0x00, + 0x4D, + 0x4D, + 0x4D, + 0x00, + 0x4B, + 0x4B, + 0x4B, + 0x00, + 0x4A, + 0x4A, + 0x4A, + 0x00, + 0x49, + 0x49, + 0x49, + 0x00, -/* + /* Fonts */ -0x04, -0x2E,0x04,0x00,0x00,0xA8,0x05,0x00,0x00,0x22,0x07,0x00,0x00,0x9C,0x08,0x00, -0x00, -0x5E, -0x00, -0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0B,0x23,0x15,0x00,0x09, -0x24,0x1F,0x00,0x10,0x25,0x30,0x00,0x0F,0x26,0x40,0x00,0x02,0x27,0x43,0x00,0x06, -0x28,0x4A,0x00,0x07,0x29,0x52,0x00,0x06,0x2A,0x59,0x00,0x0B,0x2B,0x65,0x00,0x05, -0x2C,0x6B,0x00,0x06,0x2D,0x72,0x00,0x02,0x2E,0x75,0x00,0x09,0x2F,0x7F,0x00,0x0B, -0x30,0x8B,0x00,0x05,0x31,0x91,0x00,0x0A,0x32,0x9C,0x00,0x0B,0x33,0xA8,0x00,0x0B, -0x34,0xB4,0x00,0x0C,0x35,0xC1,0x00,0x0B,0x36,0xCD,0x00,0x09,0x37,0xD7,0x00,0x0A, -0x38,0xE2,0x00,0x0B,0x39,0xEE,0x00,0x02,0x3A,0xF1,0x00,0x04,0x3B,0xF6,0x00,0x0B, -0x3C,0x02,0x01,0x0B,0x3D,0x0E,0x01,0x0B,0x3E,0x1A,0x01,0x0A,0x3F,0x25,0x01,0x10, -0x40,0x36,0x01,0x10,0x41,0x47,0x01,0x0A,0x42,0x52,0x01,0x10,0x43,0x63,0x01,0x0D, -0x44,0x71,0x01,0x09,0x45,0x7B,0x01,0x09,0x46,0x85,0x01,0x11,0x47,0x97,0x01,0x0C, -0x48,0xA4,0x01,0x02,0x49,0xA7,0x01,0x09,0x4A,0xB1,0x01,0x0B,0x4B,0xBD,0x01,0x09, -0x4C,0xC7,0x01,0x11,0x4D,0xD9,0x01,0x0D,0x4E,0xE7,0x01,0x11,0x4F,0xF9,0x01,0x0B, -0x50,0x05,0x02,0x11,0x51,0x17,0x02,0x0B,0x52,0x23,0x02,0x0A,0x53,0x2E,0x02,0x09, -0x54,0x38,0x02,0x0B,0x55,0x44,0x02,0x0F,0x56,0x54,0x02,0x15,0x57,0x6A,0x02,0x0D, -0x58,0x78,0x02,0x0E,0x59,0x87,0x02,0x0A,0x5A,0x92,0x02,0x04,0x5B,0x97,0x02,0x09, -0x5C,0xA1,0x02,0x05,0x5D,0xA7,0x02,0x0D,0x5E,0xB5,0x02,0x0B,0x5F,0xC1,0x02,0x06, -0x60,0xC8,0x02,0x0D,0x61,0xD6,0x02,0x0C,0x62,0xE3,0x02,0x0D,0x63,0xF1,0x02,0x0D, -0x64,0xFF,0x02,0x0C,0x65,0x0C,0x03,0x06,0x66,0x13,0x03,0x0C,0x67,0x20,0x03,0x0B, -0x68,0x2C,0x03,0x02,0x69,0x2F,0x03,0x05,0x6A,0x35,0x03,0x0A,0x6B,0x40,0x03,0x02, -0x6C,0x43,0x03,0x12,0x6D,0x56,0x03,0x0A,0x6E,0x61,0x03,0x0C,0x6F,0x6E,0x03,0x0C, -0x70,0x7B,0x03,0x0D,0x71,0x89,0x03,0x05,0x72,0x8F,0x03,0x07,0x73,0x97,0x03,0x07, -0x74,0x9F,0x03,0x0A,0x75,0xAA,0x03,0x0C,0x76,0xB7,0x03,0x12,0x77,0xCA,0x03,0x0B, -0x78,0xD6,0x03,0x0C,0x79,0xE3,0x03,0x09,0x7A,0xED,0x03,0x06,0x7B,0xF4,0x03,0x02, -0x7C,0xF7,0x03,0x06,0x7D,0xFE,0x03,0x0B,0x7E, -0x5E, -0x01, -0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0B,0x23,0x15,0x00,0x09, -0x24,0x1F,0x00,0x10,0x25,0x30,0x00,0x0F,0x26,0x40,0x00,0x02,0x27,0x43,0x00,0x06, -0x28,0x4A,0x00,0x07,0x29,0x52,0x00,0x06,0x2A,0x59,0x00,0x0B,0x2B,0x65,0x00,0x05, -0x2C,0x6B,0x00,0x06,0x2D,0x72,0x00,0x02,0x2E,0x75,0x00,0x09,0x2F,0x7F,0x00,0x0B, -0x30,0x8B,0x00,0x05,0x31,0x91,0x00,0x0A,0x32,0x9C,0x00,0x0B,0x33,0xA8,0x00,0x0B, -0x34,0xB4,0x00,0x0C,0x35,0xC1,0x00,0x0B,0x36,0xCD,0x00,0x09,0x37,0xD7,0x00,0x0A, -0x38,0xE2,0x00,0x0B,0x39,0xEE,0x00,0x02,0x3A,0xF1,0x00,0x04,0x3B,0xF6,0x00,0x0B, -0x3C,0x02,0x01,0x0B,0x3D,0x0E,0x01,0x0B,0x3E,0x1A,0x01,0x0A,0x3F,0x25,0x01,0x10, -0x40,0x36,0x01,0x10,0x41,0x47,0x01,0x0A,0x42,0x52,0x01,0x10,0x43,0x63,0x01,0x0D, -0x44,0x71,0x01,0x09,0x45,0x7B,0x01,0x09,0x46,0x85,0x01,0x11,0x47,0x97,0x01,0x0C, -0x48,0xA4,0x01,0x02,0x49,0xA7,0x01,0x09,0x4A,0xB1,0x01,0x0B,0x4B,0xBD,0x01,0x09, -0x4C,0xC7,0x01,0x11,0x4D,0xD9,0x01,0x0D,0x4E,0xE7,0x01,0x11,0x4F,0xF9,0x01,0x0B, -0x50,0x05,0x02,0x11,0x51,0x17,0x02,0x0B,0x52,0x23,0x02,0x0A,0x53,0x2E,0x02,0x09, -0x54,0x38,0x02,0x0B,0x55,0x44,0x02,0x0F,0x56,0x54,0x02,0x15,0x57,0x6A,0x02,0x0D, -0x58,0x78,0x02,0x0E,0x59,0x87,0x02,0x0A,0x5A,0x92,0x02,0x04,0x5B,0x97,0x02,0x09, -0x5C,0xA1,0x02,0x05,0x5D,0xA7,0x02,0x0D,0x5E,0xB5,0x02,0x0B,0x5F,0xC1,0x02,0x06, -0x60,0xC8,0x02,0x0D,0x61,0xD6,0x02,0x0C,0x62,0xE3,0x02,0x0D,0x63,0xF1,0x02,0x0D, -0x64,0xFF,0x02,0x0C,0x65,0x0C,0x03,0x06,0x66,0x13,0x03,0x0C,0x67,0x20,0x03,0x0B, -0x68,0x2C,0x03,0x02,0x69,0x2F,0x03,0x05,0x6A,0x35,0x03,0x0A,0x6B,0x40,0x03,0x02, -0x6C,0x43,0x03,0x12,0x6D,0x56,0x03,0x0A,0x6E,0x61,0x03,0x0C,0x6F,0x6E,0x03,0x0C, -0x70,0x7B,0x03,0x0D,0x71,0x89,0x03,0x05,0x72,0x8F,0x03,0x07,0x73,0x97,0x03,0x07, -0x74,0x9F,0x03,0x0A,0x75,0xAA,0x03,0x0C,0x76,0xB7,0x03,0x12,0x77,0xCA,0x03,0x0B, -0x78,0xD6,0x03,0x0C,0x79,0xE3,0x03,0x09,0x7A,0xED,0x03,0x06,0x7B,0xF4,0x03,0x02, -0x7C,0xF7,0x03,0x06,0x7D,0xFE,0x03,0x0B,0x7E, -0x5E, -0x02, -0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0C,0x23,0x16,0x00,0x09, -0x24,0x20,0x00,0x11,0x25,0x32,0x00,0x10,0x26,0x43,0x00,0x02,0x27,0x46,0x00,0x07, -0x28,0x4E,0x00,0x07,0x29,0x56,0x00,0x07,0x2A,0x5E,0x00,0x0C,0x2B,0x6B,0x00,0x04, -0x2C,0x70,0x00,0x06,0x2D,0x77,0x00,0x02,0x2E,0x7A,0x00,0x0A,0x2F,0x85,0x00,0x0C, -0x30,0x92,0x00,0x05,0x31,0x98,0x00,0x0B,0x32,0xA4,0x00,0x0B,0x33,0xB0,0x00,0x0C, -0x34,0xBD,0x00,0x0C,0x35,0xCA,0x00,0x0C,0x36,0xD7,0x00,0x0A,0x37,0xE2,0x00,0x0B, -0x38,0xEE,0x00,0x0C,0x39,0xFB,0x00,0x02,0x3A,0xFE,0x00,0x04,0x3B,0x03,0x01,0x0C, -0x3C,0x10,0x01,0x0C,0x3D,0x1D,0x01,0x0C,0x3E,0x2A,0x01,0x0B,0x3F,0x36,0x01,0x11, -0x40,0x48,0x01,0x11,0x41,0x5A,0x01,0x0B,0x42,0x66,0x01,0x11,0x43,0x78,0x01,0x0E, -0x44,0x87,0x01,0x0A,0x45,0x92,0x01,0x09,0x46,0x9C,0x01,0x12,0x47,0xAF,0x01,0x0C, -0x48,0xBC,0x01,0x02,0x49,0xBF,0x01,0x09,0x4A,0xC9,0x01,0x0C,0x4B,0xD6,0x01,0x09, -0x4C,0xE0,0x01,0x12,0x4D,0xF3,0x01,0x0E,0x4E,0x02,0x02,0x12,0x4F,0x15,0x02,0x0B, -0x50,0x21,0x02,0x12,0x51,0x34,0x02,0x0C,0x52,0x41,0x02,0x0B,0x53,0x4D,0x02,0x0A, -0x54,0x58,0x02,0x0C,0x55,0x65,0x02,0x10,0x56,0x76,0x02,0x16,0x57,0x8D,0x02,0x0E, -0x58,0x9C,0x02,0x0E,0x59,0xAB,0x02,0x0B,0x5A,0xB7,0x02,0x05,0x5B,0xBD,0x02,0x0A, -0x5C,0xC8,0x02,0x05,0x5D,0xCE,0x02,0x0E,0x5E,0xDD,0x02,0x0C,0x5F,0xEA,0x02,0x07, -0x60,0xF2,0x02,0x0E,0x61,0x01,0x03,0x0D,0x62,0x0F,0x03,0x0E,0x63,0x1E,0x03,0x0E, -0x64,0x2D,0x03,0x0D,0x65,0x3B,0x03,0x07,0x66,0x43,0x03,0x0D,0x67,0x51,0x03,0x0B, -0x68,0x5D,0x03,0x02,0x69,0x60,0x03,0x05,0x6A,0x66,0x03,0x0B,0x6B,0x72,0x03,0x02, -0x6C,0x75,0x03,0x13,0x6D,0x89,0x03,0x0B,0x6E,0x95,0x03,0x0D,0x6F,0xA3,0x03,0x0D, -0x70,0xB1,0x03,0x0D,0x71,0xBF,0x03,0x06,0x72,0xC6,0x03,0x08,0x73,0xCF,0x03,0x07, -0x74,0xD7,0x03,0x0B,0x75,0xE3,0x03,0x0D,0x76,0xF1,0x03,0x14,0x77,0x06,0x04,0x0B, -0x78,0x12,0x04,0x0D,0x79,0x20,0x04,0x09,0x7A,0x2A,0x04,0x06,0x7B,0x31,0x04,0x02, -0x7C,0x34,0x04,0x06,0x7D,0x3B,0x04,0x0C,0x7E, -0x5E, -0x03, -0x00,0x00,0x01,0x21,0x01,0x00,0x02,0x22,0x09,0x00,0x0C,0x23,0x16,0x00,0x09, -0x24,0x20,0x00,0x11,0x25,0x32,0x00,0x10,0x26,0x43,0x00,0x02,0x27,0x46,0x00,0x07, -0x28,0x4E,0x00,0x07,0x29,0x56,0x00,0x07,0x2A,0x5E,0x00,0x0C,0x2B,0x6B,0x00,0x04, -0x2C,0x70,0x00,0x06,0x2D,0x77,0x00,0x02,0x2E,0x7A,0x00,0x0A,0x2F,0x85,0x00,0x0C, -0x30,0x92,0x00,0x05,0x31,0x98,0x00,0x0B,0x32,0xA4,0x00,0x0B,0x33,0xB0,0x00,0x0C, -0x34,0xBD,0x00,0x0C,0x35,0xCA,0x00,0x0C,0x36,0xD7,0x00,0x0A,0x37,0xE2,0x00,0x0B, -0x38,0xEE,0x00,0x0C,0x39,0xFB,0x00,0x02,0x3A,0xFE,0x00,0x04,0x3B,0x03,0x01,0x0C, -0x3C,0x10,0x01,0x0C,0x3D,0x1D,0x01,0x0C,0x3E,0x2A,0x01,0x0B,0x3F,0x36,0x01,0x11, -0x40,0x48,0x01,0x11,0x41,0x5A,0x01,0x0B,0x42,0x66,0x01,0x11,0x43,0x78,0x01,0x0E, -0x44,0x87,0x01,0x0A,0x45,0x92,0x01,0x09,0x46,0x9C,0x01,0x12,0x47,0xAF,0x01,0x0C, -0x48,0xBC,0x01,0x02,0x49,0xBF,0x01,0x09,0x4A,0xC9,0x01,0x0C,0x4B,0xD6,0x01,0x09, -0x4C,0xE0,0x01,0x12,0x4D,0xF3,0x01,0x0E,0x4E,0x02,0x02,0x12,0x4F,0x15,0x02,0x0B, -0x50,0x21,0x02,0x12,0x51,0x34,0x02,0x0C,0x52,0x41,0x02,0x0B,0x53,0x4D,0x02,0x0A, -0x54,0x58,0x02,0x0C,0x55,0x65,0x02,0x10,0x56,0x76,0x02,0x16,0x57,0x8D,0x02,0x0E, -0x58,0x9C,0x02,0x0E,0x59,0xAB,0x02,0x0B,0x5A,0xB7,0x02,0x05,0x5B,0xBD,0x02,0x0A, -0x5C,0xC8,0x02,0x05,0x5D,0xCE,0x02,0x0E,0x5E,0xDD,0x02,0x0C,0x5F,0xEA,0x02,0x07, -0x60,0xF2,0x02,0x0E,0x61,0x01,0x03,0x0D,0x62,0x0F,0x03,0x0E,0x63,0x1E,0x03,0x0E, -0x64,0x2D,0x03,0x0D,0x65,0x3B,0x03,0x07,0x66,0x43,0x03,0x0D,0x67,0x51,0x03,0x0B, -0x68,0x5D,0x03,0x02,0x69,0x60,0x03,0x05,0x6A,0x66,0x03,0x0B,0x6B,0x72,0x03,0x02, -0x6C,0x75,0x03,0x13,0x6D,0x89,0x03,0x0B,0x6E,0x95,0x03,0x0D,0x6F,0xA3,0x03,0x0D, -0x70,0xB1,0x03,0x0D,0x71,0xBF,0x03,0x06,0x72,0xC6,0x03,0x08,0x73,0xCF,0x03,0x07, -0x74,0xD7,0x03,0x0B,0x75,0xE3,0x03,0x0D,0x76,0xF1,0x03,0x14,0x77,0x06,0x04,0x0B, -0x78,0x12,0x04,0x0D,0x79,0x20,0x04,0x09,0x7A,0x2A,0x04,0x06,0x7B,0x31,0x04,0x02, -0x7C,0x34,0x04,0x06,0x7D,0x3B,0x04,0x0C,0x7E, + 0x04, + 0x2E, + 0x04, + 0x00, + 0x00, + 0xA8, + 0x05, + 0x00, + 0x00, + 0x22, + 0x07, + 0x00, + 0x00, + 0x9C, + 0x08, + 0x00, + 0x00, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0B, + 0x23, + 0x15, + 0x00, + 0x09, + 0x24, + 0x1F, + 0x00, + 0x10, + 0x25, + 0x30, + 0x00, + 0x0F, + 0x26, + 0x40, + 0x00, + 0x02, + 0x27, + 0x43, + 0x00, + 0x06, + 0x28, + 0x4A, + 0x00, + 0x07, + 0x29, + 0x52, + 0x00, + 0x06, + 0x2A, + 0x59, + 0x00, + 0x0B, + 0x2B, + 0x65, + 0x00, + 0x05, + 0x2C, + 0x6B, + 0x00, + 0x06, + 0x2D, + 0x72, + 0x00, + 0x02, + 0x2E, + 0x75, + 0x00, + 0x09, + 0x2F, + 0x7F, + 0x00, + 0x0B, + 0x30, + 0x8B, + 0x00, + 0x05, + 0x31, + 0x91, + 0x00, + 0x0A, + 0x32, + 0x9C, + 0x00, + 0x0B, + 0x33, + 0xA8, + 0x00, + 0x0B, + 0x34, + 0xB4, + 0x00, + 0x0C, + 0x35, + 0xC1, + 0x00, + 0x0B, + 0x36, + 0xCD, + 0x00, + 0x09, + 0x37, + 0xD7, + 0x00, + 0x0A, + 0x38, + 0xE2, + 0x00, + 0x0B, + 0x39, + 0xEE, + 0x00, + 0x02, + 0x3A, + 0xF1, + 0x00, + 0x04, + 0x3B, + 0xF6, + 0x00, + 0x0B, + 0x3C, + 0x02, + 0x01, + 0x0B, + 0x3D, + 0x0E, + 0x01, + 0x0B, + 0x3E, + 0x1A, + 0x01, + 0x0A, + 0x3F, + 0x25, + 0x01, + 0x10, + 0x40, + 0x36, + 0x01, + 0x10, + 0x41, + 0x47, + 0x01, + 0x0A, + 0x42, + 0x52, + 0x01, + 0x10, + 0x43, + 0x63, + 0x01, + 0x0D, + 0x44, + 0x71, + 0x01, + 0x09, + 0x45, + 0x7B, + 0x01, + 0x09, + 0x46, + 0x85, + 0x01, + 0x11, + 0x47, + 0x97, + 0x01, + 0x0C, + 0x48, + 0xA4, + 0x01, + 0x02, + 0x49, + 0xA7, + 0x01, + 0x09, + 0x4A, + 0xB1, + 0x01, + 0x0B, + 0x4B, + 0xBD, + 0x01, + 0x09, + 0x4C, + 0xC7, + 0x01, + 0x11, + 0x4D, + 0xD9, + 0x01, + 0x0D, + 0x4E, + 0xE7, + 0x01, + 0x11, + 0x4F, + 0xF9, + 0x01, + 0x0B, + 0x50, + 0x05, + 0x02, + 0x11, + 0x51, + 0x17, + 0x02, + 0x0B, + 0x52, + 0x23, + 0x02, + 0x0A, + 0x53, + 0x2E, + 0x02, + 0x09, + 0x54, + 0x38, + 0x02, + 0x0B, + 0x55, + 0x44, + 0x02, + 0x0F, + 0x56, + 0x54, + 0x02, + 0x15, + 0x57, + 0x6A, + 0x02, + 0x0D, + 0x58, + 0x78, + 0x02, + 0x0E, + 0x59, + 0x87, + 0x02, + 0x0A, + 0x5A, + 0x92, + 0x02, + 0x04, + 0x5B, + 0x97, + 0x02, + 0x09, + 0x5C, + 0xA1, + 0x02, + 0x05, + 0x5D, + 0xA7, + 0x02, + 0x0D, + 0x5E, + 0xB5, + 0x02, + 0x0B, + 0x5F, + 0xC1, + 0x02, + 0x06, + 0x60, + 0xC8, + 0x02, + 0x0D, + 0x61, + 0xD6, + 0x02, + 0x0C, + 0x62, + 0xE3, + 0x02, + 0x0D, + 0x63, + 0xF1, + 0x02, + 0x0D, + 0x64, + 0xFF, + 0x02, + 0x0C, + 0x65, + 0x0C, + 0x03, + 0x06, + 0x66, + 0x13, + 0x03, + 0x0C, + 0x67, + 0x20, + 0x03, + 0x0B, + 0x68, + 0x2C, + 0x03, + 0x02, + 0x69, + 0x2F, + 0x03, + 0x05, + 0x6A, + 0x35, + 0x03, + 0x0A, + 0x6B, + 0x40, + 0x03, + 0x02, + 0x6C, + 0x43, + 0x03, + 0x12, + 0x6D, + 0x56, + 0x03, + 0x0A, + 0x6E, + 0x61, + 0x03, + 0x0C, + 0x6F, + 0x6E, + 0x03, + 0x0C, + 0x70, + 0x7B, + 0x03, + 0x0D, + 0x71, + 0x89, + 0x03, + 0x05, + 0x72, + 0x8F, + 0x03, + 0x07, + 0x73, + 0x97, + 0x03, + 0x07, + 0x74, + 0x9F, + 0x03, + 0x0A, + 0x75, + 0xAA, + 0x03, + 0x0C, + 0x76, + 0xB7, + 0x03, + 0x12, + 0x77, + 0xCA, + 0x03, + 0x0B, + 0x78, + 0xD6, + 0x03, + 0x0C, + 0x79, + 0xE3, + 0x03, + 0x09, + 0x7A, + 0xED, + 0x03, + 0x06, + 0x7B, + 0xF4, + 0x03, + 0x02, + 0x7C, + 0xF7, + 0x03, + 0x06, + 0x7D, + 0xFE, + 0x03, + 0x0B, + 0x7E, + 0x5E, + 0x01, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0B, + 0x23, + 0x15, + 0x00, + 0x09, + 0x24, + 0x1F, + 0x00, + 0x10, + 0x25, + 0x30, + 0x00, + 0x0F, + 0x26, + 0x40, + 0x00, + 0x02, + 0x27, + 0x43, + 0x00, + 0x06, + 0x28, + 0x4A, + 0x00, + 0x07, + 0x29, + 0x52, + 0x00, + 0x06, + 0x2A, + 0x59, + 0x00, + 0x0B, + 0x2B, + 0x65, + 0x00, + 0x05, + 0x2C, + 0x6B, + 0x00, + 0x06, + 0x2D, + 0x72, + 0x00, + 0x02, + 0x2E, + 0x75, + 0x00, + 0x09, + 0x2F, + 0x7F, + 0x00, + 0x0B, + 0x30, + 0x8B, + 0x00, + 0x05, + 0x31, + 0x91, + 0x00, + 0x0A, + 0x32, + 0x9C, + 0x00, + 0x0B, + 0x33, + 0xA8, + 0x00, + 0x0B, + 0x34, + 0xB4, + 0x00, + 0x0C, + 0x35, + 0xC1, + 0x00, + 0x0B, + 0x36, + 0xCD, + 0x00, + 0x09, + 0x37, + 0xD7, + 0x00, + 0x0A, + 0x38, + 0xE2, + 0x00, + 0x0B, + 0x39, + 0xEE, + 0x00, + 0x02, + 0x3A, + 0xF1, + 0x00, + 0x04, + 0x3B, + 0xF6, + 0x00, + 0x0B, + 0x3C, + 0x02, + 0x01, + 0x0B, + 0x3D, + 0x0E, + 0x01, + 0x0B, + 0x3E, + 0x1A, + 0x01, + 0x0A, + 0x3F, + 0x25, + 0x01, + 0x10, + 0x40, + 0x36, + 0x01, + 0x10, + 0x41, + 0x47, + 0x01, + 0x0A, + 0x42, + 0x52, + 0x01, + 0x10, + 0x43, + 0x63, + 0x01, + 0x0D, + 0x44, + 0x71, + 0x01, + 0x09, + 0x45, + 0x7B, + 0x01, + 0x09, + 0x46, + 0x85, + 0x01, + 0x11, + 0x47, + 0x97, + 0x01, + 0x0C, + 0x48, + 0xA4, + 0x01, + 0x02, + 0x49, + 0xA7, + 0x01, + 0x09, + 0x4A, + 0xB1, + 0x01, + 0x0B, + 0x4B, + 0xBD, + 0x01, + 0x09, + 0x4C, + 0xC7, + 0x01, + 0x11, + 0x4D, + 0xD9, + 0x01, + 0x0D, + 0x4E, + 0xE7, + 0x01, + 0x11, + 0x4F, + 0xF9, + 0x01, + 0x0B, + 0x50, + 0x05, + 0x02, + 0x11, + 0x51, + 0x17, + 0x02, + 0x0B, + 0x52, + 0x23, + 0x02, + 0x0A, + 0x53, + 0x2E, + 0x02, + 0x09, + 0x54, + 0x38, + 0x02, + 0x0B, + 0x55, + 0x44, + 0x02, + 0x0F, + 0x56, + 0x54, + 0x02, + 0x15, + 0x57, + 0x6A, + 0x02, + 0x0D, + 0x58, + 0x78, + 0x02, + 0x0E, + 0x59, + 0x87, + 0x02, + 0x0A, + 0x5A, + 0x92, + 0x02, + 0x04, + 0x5B, + 0x97, + 0x02, + 0x09, + 0x5C, + 0xA1, + 0x02, + 0x05, + 0x5D, + 0xA7, + 0x02, + 0x0D, + 0x5E, + 0xB5, + 0x02, + 0x0B, + 0x5F, + 0xC1, + 0x02, + 0x06, + 0x60, + 0xC8, + 0x02, + 0x0D, + 0x61, + 0xD6, + 0x02, + 0x0C, + 0x62, + 0xE3, + 0x02, + 0x0D, + 0x63, + 0xF1, + 0x02, + 0x0D, + 0x64, + 0xFF, + 0x02, + 0x0C, + 0x65, + 0x0C, + 0x03, + 0x06, + 0x66, + 0x13, + 0x03, + 0x0C, + 0x67, + 0x20, + 0x03, + 0x0B, + 0x68, + 0x2C, + 0x03, + 0x02, + 0x69, + 0x2F, + 0x03, + 0x05, + 0x6A, + 0x35, + 0x03, + 0x0A, + 0x6B, + 0x40, + 0x03, + 0x02, + 0x6C, + 0x43, + 0x03, + 0x12, + 0x6D, + 0x56, + 0x03, + 0x0A, + 0x6E, + 0x61, + 0x03, + 0x0C, + 0x6F, + 0x6E, + 0x03, + 0x0C, + 0x70, + 0x7B, + 0x03, + 0x0D, + 0x71, + 0x89, + 0x03, + 0x05, + 0x72, + 0x8F, + 0x03, + 0x07, + 0x73, + 0x97, + 0x03, + 0x07, + 0x74, + 0x9F, + 0x03, + 0x0A, + 0x75, + 0xAA, + 0x03, + 0x0C, + 0x76, + 0xB7, + 0x03, + 0x12, + 0x77, + 0xCA, + 0x03, + 0x0B, + 0x78, + 0xD6, + 0x03, + 0x0C, + 0x79, + 0xE3, + 0x03, + 0x09, + 0x7A, + 0xED, + 0x03, + 0x06, + 0x7B, + 0xF4, + 0x03, + 0x02, + 0x7C, + 0xF7, + 0x03, + 0x06, + 0x7D, + 0xFE, + 0x03, + 0x0B, + 0x7E, + 0x5E, + 0x02, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0C, + 0x23, + 0x16, + 0x00, + 0x09, + 0x24, + 0x20, + 0x00, + 0x11, + 0x25, + 0x32, + 0x00, + 0x10, + 0x26, + 0x43, + 0x00, + 0x02, + 0x27, + 0x46, + 0x00, + 0x07, + 0x28, + 0x4E, + 0x00, + 0x07, + 0x29, + 0x56, + 0x00, + 0x07, + 0x2A, + 0x5E, + 0x00, + 0x0C, + 0x2B, + 0x6B, + 0x00, + 0x04, + 0x2C, + 0x70, + 0x00, + 0x06, + 0x2D, + 0x77, + 0x00, + 0x02, + 0x2E, + 0x7A, + 0x00, + 0x0A, + 0x2F, + 0x85, + 0x00, + 0x0C, + 0x30, + 0x92, + 0x00, + 0x05, + 0x31, + 0x98, + 0x00, + 0x0B, + 0x32, + 0xA4, + 0x00, + 0x0B, + 0x33, + 0xB0, + 0x00, + 0x0C, + 0x34, + 0xBD, + 0x00, + 0x0C, + 0x35, + 0xCA, + 0x00, + 0x0C, + 0x36, + 0xD7, + 0x00, + 0x0A, + 0x37, + 0xE2, + 0x00, + 0x0B, + 0x38, + 0xEE, + 0x00, + 0x0C, + 0x39, + 0xFB, + 0x00, + 0x02, + 0x3A, + 0xFE, + 0x00, + 0x04, + 0x3B, + 0x03, + 0x01, + 0x0C, + 0x3C, + 0x10, + 0x01, + 0x0C, + 0x3D, + 0x1D, + 0x01, + 0x0C, + 0x3E, + 0x2A, + 0x01, + 0x0B, + 0x3F, + 0x36, + 0x01, + 0x11, + 0x40, + 0x48, + 0x01, + 0x11, + 0x41, + 0x5A, + 0x01, + 0x0B, + 0x42, + 0x66, + 0x01, + 0x11, + 0x43, + 0x78, + 0x01, + 0x0E, + 0x44, + 0x87, + 0x01, + 0x0A, + 0x45, + 0x92, + 0x01, + 0x09, + 0x46, + 0x9C, + 0x01, + 0x12, + 0x47, + 0xAF, + 0x01, + 0x0C, + 0x48, + 0xBC, + 0x01, + 0x02, + 0x49, + 0xBF, + 0x01, + 0x09, + 0x4A, + 0xC9, + 0x01, + 0x0C, + 0x4B, + 0xD6, + 0x01, + 0x09, + 0x4C, + 0xE0, + 0x01, + 0x12, + 0x4D, + 0xF3, + 0x01, + 0x0E, + 0x4E, + 0x02, + 0x02, + 0x12, + 0x4F, + 0x15, + 0x02, + 0x0B, + 0x50, + 0x21, + 0x02, + 0x12, + 0x51, + 0x34, + 0x02, + 0x0C, + 0x52, + 0x41, + 0x02, + 0x0B, + 0x53, + 0x4D, + 0x02, + 0x0A, + 0x54, + 0x58, + 0x02, + 0x0C, + 0x55, + 0x65, + 0x02, + 0x10, + 0x56, + 0x76, + 0x02, + 0x16, + 0x57, + 0x8D, + 0x02, + 0x0E, + 0x58, + 0x9C, + 0x02, + 0x0E, + 0x59, + 0xAB, + 0x02, + 0x0B, + 0x5A, + 0xB7, + 0x02, + 0x05, + 0x5B, + 0xBD, + 0x02, + 0x0A, + 0x5C, + 0xC8, + 0x02, + 0x05, + 0x5D, + 0xCE, + 0x02, + 0x0E, + 0x5E, + 0xDD, + 0x02, + 0x0C, + 0x5F, + 0xEA, + 0x02, + 0x07, + 0x60, + 0xF2, + 0x02, + 0x0E, + 0x61, + 0x01, + 0x03, + 0x0D, + 0x62, + 0x0F, + 0x03, + 0x0E, + 0x63, + 0x1E, + 0x03, + 0x0E, + 0x64, + 0x2D, + 0x03, + 0x0D, + 0x65, + 0x3B, + 0x03, + 0x07, + 0x66, + 0x43, + 0x03, + 0x0D, + 0x67, + 0x51, + 0x03, + 0x0B, + 0x68, + 0x5D, + 0x03, + 0x02, + 0x69, + 0x60, + 0x03, + 0x05, + 0x6A, + 0x66, + 0x03, + 0x0B, + 0x6B, + 0x72, + 0x03, + 0x02, + 0x6C, + 0x75, + 0x03, + 0x13, + 0x6D, + 0x89, + 0x03, + 0x0B, + 0x6E, + 0x95, + 0x03, + 0x0D, + 0x6F, + 0xA3, + 0x03, + 0x0D, + 0x70, + 0xB1, + 0x03, + 0x0D, + 0x71, + 0xBF, + 0x03, + 0x06, + 0x72, + 0xC6, + 0x03, + 0x08, + 0x73, + 0xCF, + 0x03, + 0x07, + 0x74, + 0xD7, + 0x03, + 0x0B, + 0x75, + 0xE3, + 0x03, + 0x0D, + 0x76, + 0xF1, + 0x03, + 0x14, + 0x77, + 0x06, + 0x04, + 0x0B, + 0x78, + 0x12, + 0x04, + 0x0D, + 0x79, + 0x20, + 0x04, + 0x09, + 0x7A, + 0x2A, + 0x04, + 0x06, + 0x7B, + 0x31, + 0x04, + 0x02, + 0x7C, + 0x34, + 0x04, + 0x06, + 0x7D, + 0x3B, + 0x04, + 0x0C, + 0x7E, + 0x5E, + 0x03, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0C, + 0x23, + 0x16, + 0x00, + 0x09, + 0x24, + 0x20, + 0x00, + 0x11, + 0x25, + 0x32, + 0x00, + 0x10, + 0x26, + 0x43, + 0x00, + 0x02, + 0x27, + 0x46, + 0x00, + 0x07, + 0x28, + 0x4E, + 0x00, + 0x07, + 0x29, + 0x56, + 0x00, + 0x07, + 0x2A, + 0x5E, + 0x00, + 0x0C, + 0x2B, + 0x6B, + 0x00, + 0x04, + 0x2C, + 0x70, + 0x00, + 0x06, + 0x2D, + 0x77, + 0x00, + 0x02, + 0x2E, + 0x7A, + 0x00, + 0x0A, + 0x2F, + 0x85, + 0x00, + 0x0C, + 0x30, + 0x92, + 0x00, + 0x05, + 0x31, + 0x98, + 0x00, + 0x0B, + 0x32, + 0xA4, + 0x00, + 0x0B, + 0x33, + 0xB0, + 0x00, + 0x0C, + 0x34, + 0xBD, + 0x00, + 0x0C, + 0x35, + 0xCA, + 0x00, + 0x0C, + 0x36, + 0xD7, + 0x00, + 0x0A, + 0x37, + 0xE2, + 0x00, + 0x0B, + 0x38, + 0xEE, + 0x00, + 0x0C, + 0x39, + 0xFB, + 0x00, + 0x02, + 0x3A, + 0xFE, + 0x00, + 0x04, + 0x3B, + 0x03, + 0x01, + 0x0C, + 0x3C, + 0x10, + 0x01, + 0x0C, + 0x3D, + 0x1D, + 0x01, + 0x0C, + 0x3E, + 0x2A, + 0x01, + 0x0B, + 0x3F, + 0x36, + 0x01, + 0x11, + 0x40, + 0x48, + 0x01, + 0x11, + 0x41, + 0x5A, + 0x01, + 0x0B, + 0x42, + 0x66, + 0x01, + 0x11, + 0x43, + 0x78, + 0x01, + 0x0E, + 0x44, + 0x87, + 0x01, + 0x0A, + 0x45, + 0x92, + 0x01, + 0x09, + 0x46, + 0x9C, + 0x01, + 0x12, + 0x47, + 0xAF, + 0x01, + 0x0C, + 0x48, + 0xBC, + 0x01, + 0x02, + 0x49, + 0xBF, + 0x01, + 0x09, + 0x4A, + 0xC9, + 0x01, + 0x0C, + 0x4B, + 0xD6, + 0x01, + 0x09, + 0x4C, + 0xE0, + 0x01, + 0x12, + 0x4D, + 0xF3, + 0x01, + 0x0E, + 0x4E, + 0x02, + 0x02, + 0x12, + 0x4F, + 0x15, + 0x02, + 0x0B, + 0x50, + 0x21, + 0x02, + 0x12, + 0x51, + 0x34, + 0x02, + 0x0C, + 0x52, + 0x41, + 0x02, + 0x0B, + 0x53, + 0x4D, + 0x02, + 0x0A, + 0x54, + 0x58, + 0x02, + 0x0C, + 0x55, + 0x65, + 0x02, + 0x10, + 0x56, + 0x76, + 0x02, + 0x16, + 0x57, + 0x8D, + 0x02, + 0x0E, + 0x58, + 0x9C, + 0x02, + 0x0E, + 0x59, + 0xAB, + 0x02, + 0x0B, + 0x5A, + 0xB7, + 0x02, + 0x05, + 0x5B, + 0xBD, + 0x02, + 0x0A, + 0x5C, + 0xC8, + 0x02, + 0x05, + 0x5D, + 0xCE, + 0x02, + 0x0E, + 0x5E, + 0xDD, + 0x02, + 0x0C, + 0x5F, + 0xEA, + 0x02, + 0x07, + 0x60, + 0xF2, + 0x02, + 0x0E, + 0x61, + 0x01, + 0x03, + 0x0D, + 0x62, + 0x0F, + 0x03, + 0x0E, + 0x63, + 0x1E, + 0x03, + 0x0E, + 0x64, + 0x2D, + 0x03, + 0x0D, + 0x65, + 0x3B, + 0x03, + 0x07, + 0x66, + 0x43, + 0x03, + 0x0D, + 0x67, + 0x51, + 0x03, + 0x0B, + 0x68, + 0x5D, + 0x03, + 0x02, + 0x69, + 0x60, + 0x03, + 0x05, + 0x6A, + 0x66, + 0x03, + 0x0B, + 0x6B, + 0x72, + 0x03, + 0x02, + 0x6C, + 0x75, + 0x03, + 0x13, + 0x6D, + 0x89, + 0x03, + 0x0B, + 0x6E, + 0x95, + 0x03, + 0x0D, + 0x6F, + 0xA3, + 0x03, + 0x0D, + 0x70, + 0xB1, + 0x03, + 0x0D, + 0x71, + 0xBF, + 0x03, + 0x06, + 0x72, + 0xC6, + 0x03, + 0x08, + 0x73, + 0xCF, + 0x03, + 0x07, + 0x74, + 0xD7, + 0x03, + 0x0B, + 0x75, + 0xE3, + 0x03, + 0x0D, + 0x76, + 0xF1, + 0x03, + 0x14, + 0x77, + 0x06, + 0x04, + 0x0B, + 0x78, + 0x12, + 0x04, + 0x0D, + 0x79, + 0x20, + 0x04, + 0x09, + 0x7A, + 0x2A, + 0x04, + 0x06, + 0x7B, + 0x31, + 0x04, + 0x02, + 0x7C, + 0x34, + 0x04, + 0x06, + 0x7D, + 0x3B, + 0x04, + 0x0C, + 0x7E, -/* + /* Bitmaps */ -0x04, -0x27,0x0A,0x00,0x00,0x6F,0x73,0x00,0x00,0xB7,0xDC,0x00,0x00,0xCB,0x50,0x01, -0x00, -0x0B,0x04,0x00,0x00, -0x1A,0x00,0x00,0x00, -0x00, -0x00, -0x3A,0x69,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0xDF,0x56,0xF7,0x56,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0x00,0x00, -0x00,0x53,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF7,0x00,0x55,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF3, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0x04,0xDF,0xD6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x54,0xDF,0xDA,0x04,0xDD,0xF7,0x00,0x00,0xD8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD0,0xF6,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD7,0x53,0x00,0xD6,0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x00,0x00,0x04,0x57,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x56, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD0,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0xC6,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, -0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0xDC, -0x04,0x04,0x04,0x04,0xE1,0xF3,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0x53,0xD5,0x04,0x04,0x5A,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, -0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0xD0,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x53,0x00,0x58,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xDC, -0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD2,0x04, -0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, -0x17,0x04,0x04,0xDD,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF4, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x5B,0x04,0x04,0x04,0xDE,0xF3,0x00, -0x00,0xF3,0xDE,0x04,0x04,0x04,0x04,0x57,0x53,0x00,0x00,0x53,0x5E,0x04,0x04,0x04, -0x04,0xD5,0xB3,0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0xD8,0x04,0x04,0x04, -0x04,0x60,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xDE,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xDC,0x00,0xDF,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDA,0xFA,0xB3,0x00,0x54,0x00,0xF5,0xD7,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x04,0x04,0xDB,0x55,0x54,0x54,0x00,0xF6,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00,0x54, -0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00,0x54,0x54,0xF7,0xD9,0x04, -0x04,0x04,0x04,0x09,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E,0xB3, -0x00,0x00,0x53,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0xF4, -0x00,0x00,0x54,0x54,0x55,0xD7,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x5E,0x04,0x00,0x00,0x00,0x00, -0x54,0x00,0xB3,0x56,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0xF6,0x54,0x00,0x54, -0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x54,0x00,0x09,0xF6, -0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xF7, -0x53,0x00,0x54,0x00,0x54,0xF6,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDE,0xF3,0x00, -0x54,0x53,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00, -0xF7,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0xDC,0x55,0x54,0x00,0x54,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xB8, -0xB3,0x00,0x54,0x00,0x53,0xF7,0xDB,0xDA,0x56,0x54,0x54,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xD9,0x00,0x00,0xDB,0x04,0x04,0x04,0xD0,0xF3,0x00,0x54,0x53,0xB8, -0xD8,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, -0xF3,0x00,0x54,0x54,0xF7,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x54,0xB8,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF6,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0xF4,0x04,0x04,0xDA,0x53,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x58,0xB3,0x00,0x54,0x00,0xF6,0xDC,0x04,0x00,0xF6,0x04,0x00,0xF6,0xDA,0x57,0x53, -0x00,0x00,0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xB3,0x00,0x54,0x00, -0xF6,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0xF3,0x00,0x54,0x00,0xF6,0xDC, -0x04,0x00,0xF6,0x04,0x04,0x04,0xDA,0x56,0x53,0x00,0x00,0xC6,0x56,0xD8,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0xC6,0x00,0x00,0x53, -0x58,0xDA,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xF1,0x00,0x54,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xD8,0x56,0x53,0x00,0x54,0x54,0xF7,0xD9, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x56,0xC6,0x00,0x00,0x53,0xB8,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0x59,0xB3,0x00,0x54,0x00,0xF5,0xD2,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x57,0xC6,0x54,0x00,0x57,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0xDA,0xB8,0x54,0x00,0x00,0xB3,0xD2,0xF6,0x00,0x04,0x04, -0x04, -0x04,0x04,0xDD,0x00,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x55,0x54,0xB8,0x04,0x04,0x04,0x04,0x53,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xDF,0x04,0x04,0x04,0x04,0xD5,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x59, -0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF7,0x04,0x04,0x04, -0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0x00,0x00,0x00,0x59,0x04,0x04, -0x04,0x04,0x04,0x04,0xF5,0xC6,0x04,0x04,0xE1,0x00,0x00,0xF7,0xF7,0x00,0x00,0xD6, -0x04,0x04,0xF4,0x00,0x53,0xF7,0xF7,0x00,0x00,0xF7,0x04,0x04,0xDD,0x00,0x00,0xD6, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, -0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF6,0x00,0x54,0x55,0xB8,0xF6,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0xC6,0x00,0x00,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x04,0x04,0xF1,0x00, -0x00,0xF5,0xB8,0xF6,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x5A,0x00,0x00,0x55,0xB8,0xF3,0x00,0xC6,0xD9, -0x04,0x04,0x04,0x59,0x00,0x00,0x55,0xB8,0xF5,0x00,0x00,0xDB,0x04,0x04,0x04,0x5A, -0x54,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xC6,0xF7,0xF7,0x53,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0xDA,0x53,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x57,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, -0xF7,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x53,0x00,0x00,0xF4,0xF7,0xB8,0x55, -0x00,0x00,0x55,0xD4,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x53,0x54,0xDA,0x04,0x00,0x53,0x56,0x56,0xB8,0x55,0x53,0x00, -0x00,0xDB,0x04,0x04,0x04,0xD8,0xF5,0x00,0x00,0xF4,0xF7,0xB8,0x55,0x54,0x00,0x54, -0xD2,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0xF7,0xF4,0x00,0x00,0xB3,0xDB,0x04, -0x04,0x04,0x00,0x53,0x56,0x56,0x56,0x56,0x56,0x56,0xDF,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xB3,0x55,0xB8,0xF7, -0xF4,0x00,0x00,0xF3,0xDB,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xDE,0x00,0x00,0x55,0xB8,0xB3,0x54,0xF6, -0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0xF3,0x04,0x04,0x00,0xB3, -0x56,0x56,0x56,0x56,0x56,0x56,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9,0x00, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDB,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF3,0xF7, -0xB8,0x55,0x54,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x53,0x55,0xB8,0x55, -0x53,0x00,0x00,0x00,0x00,0xF3,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0xD6,0x04,0x04,0x04,0x5D,0x54,0x00,0x55,0xB8,0xF4,0x54,0xB3,0xD8,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x55,0xB8,0xF5, -0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xD3,0x04,0x04,0x04, -0x04,0x04,0xF4,0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xDB,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0xC6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xF7,0x56,0x56,0x56,0x56,0x56, -0x56,0x56,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0xD6,0x04,0x04,0x04,0xDF,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x53,0x00,0x54,0xF7,0xB8, -0xF6,0x00,0x00,0xEF,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0xB3,0xF7,0xF7,0xF3,0x00, -0x54,0xDC,0x04,0x04,0x04,0xD9,0xB3,0x00,0x53,0xF7,0xB8,0xF5,0x00,0x00,0x56,0x04, -0x04,0x04,0x04,0xD9,0xB3,0x00,0x54,0x55,0xB8,0xF6,0x00,0x00,0xD6,0x00,0xF6,0x04, -0x04,0xDB,0xC6,0x00,0xB3,0xF7,0xF7,0xF3,0x00,0x53,0xDB,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xDD,0x54,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0xF6,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x54,0x00,0xDD,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x04,0xDD,0x54,0x00,0xB3,0xF7,0xB8,0xF4,0x00,0x00,0xD2,0x04,0x04,0x00, -0x00,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x54,0xDD,0x04,0x04,0x04,0xD9,0xB3,0x00, -0x53,0xF7,0xB8,0xF6,0x00,0x00,0x5D,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x59,0x00,0xB3,0xB8,0xF3,0x00,0x57,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0xDA, -0xB3,0x00,0xB3,0xF7,0xF7,0x54,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x53,0x04, -0x04,0x04,0xD5,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD8,0x04, -0x04,0x04,0xF3,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xC6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x00,0xB8,0x56,0x56,0x56,0x56,0x56,0x56,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x54,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04, -0x04,0x04,0xDA,0x54,0x00,0xDF,0xDA,0xDD,0xF3,0x00,0xD6,0x04,0x04,0x04,0x04,0x04, -0xD0,0x00,0xE1,0x04,0x53,0x00,0xD9,0x04,0x04,0xD9,0x54,0x53,0x04,0x57,0x00,0xF7, -0x04,0x04,0x04,0xD8,0xF3,0x00,0x17,0xD3,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x04, -0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x57,0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xF7,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF5,0xDA, -0x04,0x04,0x04,0xD5,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDB,0x54, -0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0xD2,0x04,0x04,0x04, -0xDD,0x00,0x54,0xDA,0x04,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x00,0xF3,0x17, -0x04,0x04,0xDE,0x00,0xF3,0xD8,0x04,0x04,0x04,0x17,0x00,0xF3,0x04,0x04,0xF2,0x00, -0x53,0xD9,0x04,0x04,0x04,0xD0,0x54,0xB3,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x60,0x00,0x55,0x04,0x04,0x04,0x04,0x55,0x00,0x5C,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x54,0xF7,0x04,0x04,0xD8, -0x55,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xF5,0x00,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xF6,0xD7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0xF1,0x00,0x00,0x00,0x00,0xD9,0x04,0x04,0xD8,0x00,0x00,0x00,0xD6, -0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, -0x00,0xB8,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x17,0x00,0x55,0x04,0x04, -0xD9,0x54,0x00,0xF6,0xD9,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDE,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0x00,0xDD,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0x53,0x00,0xF4,0xDC,0x04,0x04,0x04,0x04,0x04,0xD8,0xF7,0x00, -0x00,0xD5,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0xF3,0x00,0xD5,0x04,0x04,0x04,0xF5,0x54,0xDC,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0xDB,0x00,0x00,0xD9,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0xD9,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0x00,0xF6,0xDA,0x04,0xD4,0xF4,0x00,0xF5,0xDB,0x04,0x04,0x04,0x04,0x04,0xD6, -0x54,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0x00, -0xF3,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x58,0x00,0xF7,0x04,0x04,0x04, -0xD9,0x00,0x00,0xD5,0x04,0x04,0x04,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF4,0xDA,0x04,0x04,0x04,0xD2,0x00,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, -0xF4,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04, -0xD9,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x59,0x04,0x04,0x04,0x04,0xD8,0xF5,0x00, -0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xD8,0x04, -0xDA,0x53,0x00,0x5D,0x04,0x04,0x04,0x04,0xDB,0xB3,0x00,0x21,0x04,0x04,0xDA,0x53, -0x00,0x5A,0x04,0x04,0x04,0x04,0xD8,0xF4,0x00,0x00,0xF6,0xDA,0xDA,0xC6,0x00,0xD6, -0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0xD4,0x54,0x00,0xE1,0x04,0x04,0x04,0x04,0xD6,0x00,0x00,0x00,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF3,0x04,0x04,0x04,0xF3,0x00,0xE1,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD4,0x54, -0x00,0xE1,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xD9,0x04,0x00,0x00,0x00,0xE1,0x04, -0x04,0x04,0x04,0xD0,0x00,0x54,0xD8,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04, -0xD8,0xF5,0x00,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0x09,0xDA,0x04, -0x04, -0x54,0x54,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04, -0x04,0x04,0x04,0xF5,0x00,0x00,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x54,0xB3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xDB,0x04,0x04,0x57,0x00, -0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF6,0x04,0x04,0x59,0x54,0x58, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0xD0,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xB8,0x00,0x04,0x04,0xDA,0x55,0x00,0x04,0x04,0x04,0x04,0xFA,0x00, -0xFA,0x04,0x04,0x04,0xD8,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04, -0xD8,0x00,0x00,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF1,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0x5A,0x00,0x17,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD9,0xC6,0x00,0xE1,0x04, -0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0x60, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xF3,0x00, -0xD8,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04, -0x04,0x04,0xB8,0x00,0xD0,0x04,0x04,0x04,0xB8,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, -0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0xDA,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04, -0x58,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xEF,0xF3,0x00,0x00,0xF6,0xD3,0x04,0x04,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0xD3,0xF6,0x00,0x00,0xF3,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, -0x00,0x00,0x00,0x00,0x00,0xF4,0xDF,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDB,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0xF4,0x00,0x56,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x53,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xB3,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x54,0xDE,0x54,0xB8,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x00,0xF6,0x04, -0xDA,0x55,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xC6,0x00,0xD7, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0x00,0xF3,0xD8,0x04,0x04,0x04,0x04,0xDA,0xD0,0x00,0x00,0x00,0x54,0xB8,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0xD3,0x00,0x53,0xDA,0x04,0x04,0x04,0x5A,0x00,0x57,0x04, -0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0xF3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD0,0x04,0x04,0x04,0x04, -0x04,0x04,0xF3,0x54,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD6,0x00,0x00,0x00,0xF4,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x17,0x04,0x04,0x04,0x60,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x56,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00, -0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x54,0xB8,0x04,0x57,0x00,0x5A,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0xF6,0x55,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x53,0x00,0xF6,0x04,0x56,0x00,0xD6,0x04,0x04,0x04,0x04,0x04, -0x04,0x17,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x00,0x17,0x04, -0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00, -0x58,0xDA,0xF7,0x00,0x56,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xB8,0x00,0xDF,0x04,0x04,0x04, -0x04,0x04,0x04,0xE1,0x00,0xF7,0x04,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x54,0xB8,0x04,0x57,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00, -0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x16,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0xD8, -0x00,0x00,0x04,0x04,0x04,0x04,0x5C,0x00,0xDE,0xB8,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF4,0x54,0xDB,0x00,0x57,0x04,0x04,0xB3,0xB3,0xD7,0x00,0x5A,0x04, -0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD6,0xDB,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x56,0x00,0xDF,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF2, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xFB,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0xF7, -0x54,0x59,0x17,0x17,0x55,0x00,0xFA,0x17,0x17,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04, -0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xDC,0x54,0x54,0xDA,0x04, -0x04,0xDA,0x54,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, -0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xEF,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04, -0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF7,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD9,0x53,0x00,0xEF,0x04,0x04,0x04,0x04, -0x04,0x56,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0xB3,0x00,0xD0, -0xDD,0xDD,0xDD,0xDD,0xDD,0x00,0xF5,0xDD,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0xDC,0x54,0xB8,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x54, -0xB8,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0xD9,0xD6,0xD0,0x00,0x54,0xD8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0x54,0x00, -0x00,0xF7,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x54,0x54,0x5B,0xD4,0x04,0x04,0x04, -0x04,0x04,0x04,0xF6,0x5D,0x04,0x04,0x04,0x04,0xDA,0x58,0x00,0x00,0x00,0x00,0xDE, -0xDA,0xF7,0x00,0x00,0x04,0xDF,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD0,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDC,0x5D,0xDD,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x5E,0x00,0x5E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xDA,0x04,0x04,0x04, -0x04,0x04,0xD8,0x00,0x55,0x04,0x00,0xB3,0x04,0x04,0x04,0xF7,0x00,0x56,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x50,0x00,0x58,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x53,0xDA,0x00,0xF6,0x04,0xD7,0x00,0xF4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xB3,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0xD8,0x04,0x04, -0x04,0x04,0xD9,0x55,0x00,0x00,0xD2,0xD8,0xC6,0x00,0xD3,0x04,0x00,0xF6,0x04,0x04, -0xD4,0x54,0x00,0xD5,0x04,0x04,0x04,0x04,0xDF,0xF6,0xDD,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xB3,0x04, -0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0xDD,0x54,0xB8, -0x04,0xF7,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD8,0xF6, -0x00,0x04,0x04,0x04,0x04,0xB8,0x00,0xDB,0x55,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0x54,0x00,0xD9,0x04,0xD9,0x00,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x54,0xB3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x56,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x58,0x00,0x60,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x5E,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0xF6,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xD5, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF7,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x54,0x54,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04, -0x53, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04, -0x04,0x04,0xB3,0x53,0x04,0xDB,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF7,0x04,0xB3,0xF3,0x04,0xD9,0x00,0x57,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0x54,0x00,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53, -0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x54,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, -0x04,0x04,0x04,0xD7,0xD9,0x04,0x04,0x04,0x04,0xDA,0xE1,0xD7,0x04,0x04,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xD9,0xDD,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x00,0xB3,0x5A,0x59,0x53,0x00,0x17, -0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0xF3,0x00, -0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xD8,0x53,0x00,0x17,0x04,0x04,0x04,0x04,0xDC,0xDF,0xDA, -0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0xDC,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0xD8,0xDF,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00, -0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04, -0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF5,0x00,0x04,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0x56,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04, -0x04,0x04,0x04,0x04,0xD8,0xB8,0x54,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xC6, -0xE0,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDB,0x00,0xF5,0x04,0x04,0x04,0xF4,0x00, -0xDA,0x04,0xD0,0x00,0xF7,0x04,0x04,0x04,0x04,0x56,0x00,0x5B,0x17,0x17,0x17,0x17, -0x17,0x17,0x55,0x00,0xDE,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xB3,0x00,0x04,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD5,0x04,0x04,0x04,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x5E,0x00,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0x00,0xF7,0x04,0xDF,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF3,0x00,0xD8, -0x04,0x5B,0x54,0x17,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0xF4,0x54,0xD7,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF7,0x5C,0x5E,0x56,0xF5,0x00,0x00, -0xF6,0xD9,0x04,0x04,0xDE,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x55,0x00,0x5E,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0xF7,0x00,0xDB,0x04,0xDD,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB3,0x04,0x5C,0x54,0xDE,0x04,0x04, -0x04,0xB3,0x54,0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00, -0xF6,0xDA,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00, -0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x58,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04, -0x00,0xB3,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00, -0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x56,0x00,0x00,0xFA,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xD7,0x00,0x58, -0x04,0x04,0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0xC6,0xDD,0x04,0x57,0x00, -0xD9,0x59,0x00,0xDB,0x04,0x57,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xB8,0x04,0xD7,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xF1,0xF4, -0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x55,0x00,0xF7,0xDC,0x04,0xB3, -0xF6,0x04,0x04,0x04,0x5D,0x54,0x00,0x00,0xF7,0xDA,0x04,0x04,0x87,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0xDD,0xDD,0x00,0x55,0xDD,0xDD,0xDC,0x00,0xF7,0xDC, -0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xC6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0xD9,0xDF,0x54,0x00,0x00,0x54,0x50,0x04,0x04,0x55,0x00,0xFA, -0xDA,0x04,0x04,0x5E,0x00,0x54,0x5D,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0xD8,0xB3,0xC6,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x50,0x00,0x57,0x04,0x04,0xB8,0x54,0xFA,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x00,0xF4, -0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8, -0x04,0x04,0x04,0x04,0xC6,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x53,0x04,0x04, -0xF4,0x00,0xF6,0xDE,0xF1,0x5C,0x54,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x57,0x04,0x04, -0x04,0x04,0x00,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0xDF,0x04,0x04,0xF6, -0x00,0xD9,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x00, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, -0x00,0x57,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xDC,0x00,0x55,0x04,0x04,0xDA,0x00,0xF3, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x5D,0x00,0xB8,0x04, -0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF2,0x00,0x56,0x04,0x00,0xF3,0x17,0x17,0x17,0x50,0xD0,0xD9,0x04,0x04, -0x04,0x04,0x53,0x00,0xB3,0x00,0x00,0x00,0x00,0x54,0x55,0xD7,0x04,0x04,0x04,0x04, -0x04,0x54,0x54,0x04,0x00,0xF6,0xDA,0xDF,0x00,0x54,0x00,0xF3,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0xD4,0x00,0xF3,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD5,0x00,0xB8,0x04,0xDB,0x00,0xB8,0x04,0x04,0xD8,0x00,0x55,0x04, -0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x55,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0xD2,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF2,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0x00,0xF6,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF6,0xDC,0x00,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00, -0xF3,0xD0,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x55,0x00,0xD8,0x04,0x04,0xD0,0x00, -0x58,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xD5,0x00,0x00,0x00,0x53,0x04, -0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDB,0x04,0x04,0xB3,0x00,0xD4,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0x04,0x04,0x04,0xF7,0x00,0x5D,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0xD4,0x00,0x00,0xF7,0x04,0xD6,0x00,0xF7,0x58,0x54, -0x00,0x00,0xB3,0x00,0x00,0xFA,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD0,0x53,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, -0xB8,0x04,0x04,0xD8,0xD9,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0x55,0xD8,0x59,0x00, -0xC6,0xD9,0x04,0xF3,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xF5,0x00,0xDD,0xDD,0xDD,0xDD,0xDD,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0xB3,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xD9, -0x04,0x04,0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x04,0xF5,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0x58,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDA,0x04,0x04,0x04, -0x59,0x00,0x56,0x04,0x04,0x04,0x04,0x57,0x54,0xB8,0x04,0x5D,0x00,0xF7,0x04,0x04, -0x04,0x04,0xD9,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B, -0x54,0x00,0x00,0x55,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x00,0x00, -0x53,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xC6,0x5E,0x04,0x04,0x04,0x00,0xF5, -0x04,0x54,0xB3,0x04,0x04,0x04,0x04,0xB3,0xF6,0x04,0x04,0xDE,0x00,0x59,0x04,0x04, -0x04,0x04,0xF6,0x00,0xD3,0xDD,0xDD,0xDD,0xDD,0x5C,0x00,0x5A,0x04,0x04,0x04,0x04, -0x00,0xF3,0x17,0x60,0x5D,0x57,0xF6,0x00,0x53,0xD9,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF3,0x17,0x17,0x17,0x17, -0x17,0x17,0xD5,0x04,0x00,0xF3,0x17,0x17,0x17,0x17,0x17,0xE1,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xD5,0x04, -0x00,0xF3,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xF2, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0xF7,0x00,0xF1,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0x00,0x53,0xDA,0x04,0x04,0x00,0xF6,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, -0x55,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0x04,0x04,0x00,0xF5, -0x04,0x04,0xDB,0xDB,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x00,0xF6,0x04,0xD2,0xEF,0x5D,0xF7,0x00,0xC6,0x56,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x57,0x53,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xFA,0x00,0xDF,0x04,0x04,0x04,0x5E,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x58, -0x00,0xF2,0x04,0x04,0x54,0xB3,0x04,0x04,0xDF,0x00,0xDF,0x04,0x04,0xF3,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x54,0xD8,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xE1,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD9,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF6,0x04,0x00, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD6,0x00,0xF6,0x04,0x53,0x00,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, -0xDD,0xDD,0x00,0xC6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB3,0xC6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0x04,0xDB,0x00,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x5E,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0xD8,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x00, -0xF4, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00, -0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xDF,0x00,0xB3,0xD7,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0x04,0xE0,0x53,0x04,0x04,0x04, -0x04,0xD7,0x00,0x58,0x04,0x04,0x04,0x53,0x00,0x00,0x56,0x04,0x04,0x04,0xF4,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0xF4,0x04,0x04,0x04,0x60,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0xC6,0x54,0xD8,0x04,0x04,0x04,0xD2,0xF3,0x00,0xF2,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x55,0x00,0x55,0xD3,0x04,0x04,0x58,0x00,0x00,0xC6,0x56,0xD9,0x04,0xD8, -0xB3,0xF5,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x55,0x54,0x04,0x04,0x04,0xF4,0xB3,0x04,0x04,0x04,0x04,0x04,0xD8,0xB8,0x54,0x00, -0x00,0xF7,0x04,0x04,0x04,0x04,0xDB,0xDF,0xD0,0xDA,0x04,0xF6,0x00,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0xD7, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xE1,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, -0xDA,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x53,0x00,0xDD, -0x04,0x04,0x04,0x04,0x04,0xD3,0xFA,0xF7,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0xD2, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04, -0x04,0xD2,0x00,0xC6,0x04,0x04,0xD2,0x00,0xF4,0xDA,0x04,0x04,0x04,0xDD,0x00,0x54, -0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0x00,0x5D,0x04,0x04,0x04,0x04,0xF6,0x00,0xF4, -0x5A,0x5B,0xF5,0x00,0xF5,0xDA,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x5C, -0x00,0xD0,0x04,0x54,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0xF3,0x00, -0x00,0xF5,0xD2,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00,0x00,0xF3,0xEF,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0x5D,0x04,0x04,0x00,0xF5,0x04,0xF5,0x00,0xD9, -0x04,0x04,0x04,0xB8,0x00,0xDA,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0xD7,0x00, -0x58,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xDD,0x00,0x00,0xD8,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDA, -0x00,0xF4,0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0xF4,0x54,0xD7,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0x00,0xF5, -0xDD,0xDD,0xDD,0xD3,0xDF,0xF6,0x54,0x54,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xD8,0xB3,0x00,0xDD,0x04,0x04,0x04,0xDE,0xF3,0x54,0x00,0x54,0x57, -0xDA,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, -0x04,0x04,0xDA,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04, -0xF7,0x00,0xD8,0x04,0x55,0x54,0xD8,0x04,0x04,0x56,0x00,0xDC,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF4,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0xF6,0x00,0xDB,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0xE1,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD5, -0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00, -0xD9,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5C, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00,0x00,0x60,0x04,0x04, -0x04,0x04,0x04,0x04,0xEF,0x54,0xB8,0x04,0x56,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0xF3,0xF5,0x04,0x04,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x53,0x00,0xF6,0x04,0xB8,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF7, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0xEF,0x00,0x00,0x04,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0x60, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x55,0x00, -0xFA,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0xE1, -0x00, -0x54,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x00,0x00,0xDA,0x04,0x04, -0x04,0x04,0xD4,0x00,0x53,0x04,0xB8,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, -0x54,0xB8,0x04,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x54,0xB8,0x04, -0x56,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF6,0x04,0x00,0x54, -0x04,0x04,0x04,0xDA,0x55,0x00,0xD9,0x04,0x04,0xDB,0xD9,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04, -0x58,0x00,0xD2,0x04,0x04,0x04,0x04,0x57,0x00,0xDE,0x04,0x04,0x04,0xF7,0x00,0xD8, -0x04,0x04,0x04,0xB8,0x00,0x00,0xDD,0x04,0x04,0x04,0xDF,0x54,0xE1,0x04,0x04,0x04, -0x04,0x57,0x00,0x5C,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xDF,0x04, -0x04,0x04,0x04,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x55,0x04, -0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, -0x04,0x04,0x04,0x04,0x04,0xD8,0xD9,0x04,0x04,0x04,0x04,0x04,0xD8,0xDA,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xD0,0x55,0x00,0xD0,0xD0, -0xD0,0xF5,0x00,0xD0,0xD0,0x04,0x04,0xDB,0x54,0x00,0x00,0x55,0xDC,0x04,0x04,0x04, -0x04,0x55,0x00,0x00,0x00,0x00,0xE1,0xD2,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xF6,0xD8,0x04,0x04,0xF6,0x00,0xDC,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xDF,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD6,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0x00,0x53,0x57,0x5D,0x55,0x54,0x00,0xDC, -0x04,0x04,0x04,0xF6,0x00,0xC6,0x57,0xFA,0xF7,0x00,0x00,0xD2,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB8,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00,0x00,0xF3, -0xE1,0x04,0x04,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0x04,0x04, -0xE1,0xF3,0x00,0x00,0xF5,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0x53,0x00,0xDB,0x04,0x54,0x53,0x04,0xD6,0x00,0xF7,0x04,0x04,0x04,0xDF, -0x00,0x17,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04, -0xD5,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0xDD,0xDD,0xD7,0x60,0xB3,0x00, -0xDF,0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, -0x00,0x04,0x00,0xF5,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xD8,0x04,0x00,0xF5,0xDD,0xDD, -0xDD,0xDD,0xDD,0xDB,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, -0xDD,0xDD,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x0A,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x57,0x00,0xD6,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x5D,0x00, -0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xB8,0x54,0x60,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xDE,0x00,0x56,0x04,0x04,0xE1,0x00,0x00,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF1,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xD5,0x04,0x04,0x04,0x04,0xDA,0x00,0xF5,0x04,0x04,0x04,0x0A,0x00,0xD6,0x04, -0x54,0xB3,0x04,0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60, -0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04, -0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xDA, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD0,0x00,0x56,0x04,0x04,0x04, -0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x5C,0x04,0x04,0x04, -0x04,0xD8,0xF5,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0xD0, -0x00,0x54,0xD8,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04,0xD9,0xB3,0x00,0x5E, -0x04,0x04,0xDA,0x53,0x00,0x60,0x04,0x04,0x04,0x04,0xD9,0xF3,0x00,0x00,0xF6,0x04, -0xD8,0x54,0x00,0xD7,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xD9,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0xD8,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xE1,0x54,0x00,0x00, -0x04,0x00,0x00,0xF5,0xD4,0x04,0x04,0x04,0xD5,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDA,0xC6,0x00,0xDC,0x04,0x04, -0x04, -0x00,0xF6,0x04,0x00,0x00,0x56,0x04,0x04,0x04,0xD8,0x53,0x00,0x00,0x57,0x04, -0x04,0x04,0xDA,0xB3,0x00,0xDD,0x04,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x55,0x00, -0xB8,0x04,0xD8,0x54,0x00,0xD0,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD8,0x04,0x00, -0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xD8,0x04,0xDA,0x54,0x00,0x60, -0x04,0x04,0x04,0x04,0xD8,0xF5,0x54,0x00,0xF6,0x04,0x00,0x00,0x58,0x04,0x04,0x04, -0xF7,0x00,0xDC,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xC6,0x53,0x04,0x04, -0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xDC, -0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDC,0x00,0xF4,0x04, -0x04,0x56,0x00,0x5E,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x04,0x04,0x04,0x04,0xB8, -0x54,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD0,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0xF6,0x00,0x56,0xDA,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xF6,0xD7, -0xD6,0x54,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1, -0x00,0xF3,0xDB,0xF7,0x00,0x54,0xD8,0x04,0xD9,0x17,0xDC,0x04,0x04,0x04,0x04,0x04, -0xDE,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x53,0x04,0x04,0x04, -0xF7,0xDC,0xDB,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x5A,0xDE, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0xD9,0xDC,0x5E, -0x54,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x00,0xD8,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x00,0x54,0xB3,0x00,0x00,0x00,0xF5,0xD5,0x04,0x04,0x04,0x04,0xD9, -0x00,0x00,0x00,0x00,0x00,0xF3,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58, -0x00,0xDE,0x04,0x04,0x04,0x58,0x00,0xF6,0xDE,0xD7,0xF6,0x00,0x57,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04, -0x54,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x00,0x00,0x53,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF1,0xD9,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0x56,0x04,0x55,0x00,0xD5,0x04,0xF3,0x00,0xDE,0x04,0x04,0x5C,0x00,0xF5,0x04,0xDE, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0xD6,0x04,0x04,0xF7,0x00,0xD5,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xDA,0x54,0x53,0x04,0x04,0xF5, -0x54,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF4,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0xB8,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0xE0,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0x00,0x57,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xDB,0x00,0x53,0xDA,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0xD3,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF7,0xDA,0xF3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0xF5,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0xDA, -0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x55,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04, -0x04,0x04,0xD0,0x00,0x5B,0x04,0x04,0x04,0xD8,0x00,0xF7,0xDB,0x00,0xB8,0x04,0x04, -0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x54,0xD9,0x00,0x00, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDB,0x04,0x04,0x56,0x00,0xE1, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xF7,0x04,0x04,0x04,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0xDA,0x00,0xB3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6,0x00,0x00,0xDF, -0x00,0xF6,0xDA,0x00,0x00,0x00,0x09,0xF3,0xF7,0xF7,0xF3,0x54,0x54,0xDD,0x04,0x04, -0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0xD9, -0xB3,0x54,0x53,0xF7,0xB8,0xF6,0x00,0x00,0x59,0x00,0xF6,0xDA,0x04,0xDD,0x54,0x54, -0xF4,0xF7,0xF7,0xF3,0x54,0x54,0xD7,0x04,0x04,0x56,0x56,0x00,0x53,0x56,0x56,0x04, -0x04,0xF1,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0xF5,0xF6,0x00,0x04,0x00,0x00,0x00, -0x54,0xF7,0xB8,0xF6,0x00,0x00,0xEF,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0xDC,0x00,0xC6,0xD4,0x04,0x04,0x00,0xF6,0xDA, -0x00,0x00,0x00,0xF3,0xF7,0x55,0x00,0x00,0xD6,0xF6,0x00,0xF3,0xB8,0xF7,0x54,0x00, -0x56,0x04,0x04,0x00,0x00,0x00,0x53,0xF7,0xF7,0x53,0x54,0xB3,0xD8,0x04,0x04,0xDD, -0x54,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x00,0xD3,0x04,0x04,0x00,0x00,0x00,0x09,0xF4, -0xF7,0xF7,0xB3,0x54,0x54,0xDD,0x04,0x04,0x04,0xDB,0x53,0x00,0x53,0xF7,0xB8,0xF6, -0x00,0x00,0x5C,0x00,0xF6,0xDA,0x00,0x00,0x09,0xF4,0x58,0x04,0xD3,0x00,0x54,0xB8, -0xB3,0x00,0xD0,0x04,0x56,0x56,0x53,0x00,0x56,0x56,0x56,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDE,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x55,0x00,0xD9,0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xB8,0x50,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04,0x53,0x00,0xD9,0x04,0x04,0x04,0xB3,0x00, -0xDB,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04, -0x56,0x56,0x56,0x56,0x56,0xB8,0x54,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, -0xF6,0x04,0xD8,0xD8,0xD9,0x00,0x58,0xD8,0xD8,0xD7,0x00,0x60,0xD8,0x04,0x04,0x00, -0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x53,0x04,0x04,0x04,0xDE,0x00,0x00, -0x00,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0xD8,0x04,0x04, -0x5B,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x04,0xDA,0xF6,0x00,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x54,0xB8,0x04, -0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4, -0x54,0x04,0xD8,0xDB,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDB, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF4,0x04,0x04, -0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0x00,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x56,0xD8,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0xF1,0x00, -0xF5,0x04,0xDB,0x54,0x54,0xB8,0x5A,0x00,0x53,0x00,0xD8,0xF6,0x00,0xD7,0x04,0x04, -0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xE1,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xDF,0xDB,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF7,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4, -0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xE1,0x09,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0xF4,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x5E,0x00, -0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0xE1,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x04,0x00,0xF5,0x04, -0x04,0x04,0x04,0x04,0xDE,0xDD,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0x00, -0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0xF7,0x00, -0xDB,0x04,0x04,0x04,0x04,0xB3,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xF6,0x00, -0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD6,0x04,0xD6,0x00,0x55,0x04,0x04,0x04, -0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0x04,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDC,0x04,0x04,0x54,0x53,0x04,0x04,0x04, -0x04,0x04,0x5D,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0x54,0xB8,0x04, -0x04,0x04,0x04,0x59,0x00,0xDF,0x04,0xFA,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x58,0xB3,0x00,0x00,0x00,0xF6,0xDD,0x04,0x00,0xF6,0x04,0x00, -0xF6,0x04,0x57,0x53,0x00,0x00,0xC6,0xB8,0xD8,0x04,0x04,0x04,0x04,0x04,0xDA,0x58, -0xB3,0x00,0x00,0x00,0xF6,0xF1,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0xB3,0x00, -0x00,0x00,0xF6,0xD7,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x00,0xC6, -0xB8,0xD8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD8,0xF7, -0x54,0x00,0x00,0xB3,0x5C,0x04,0xF6,0x00,0x04,0x00,0xF6,0xD7,0xF5,0x00,0x00,0x00, -0xF5, -0xD3,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xE1,0xB3, -0x00,0x00,0xF3,0xDE,0x04,0x04,0x57,0x54,0x00,0x00,0xB3,0x17,0x04,0x04,0x04,0x00, -0xF6,0xDD,0xF5,0x00,0x00,0x53,0xB8,0xDA,0x04,0x04,0x04,0x04,0xD8,0x56,0x53,0x00, -0x00,0x54,0xF7,0xD8,0x04,0x04,0x04,0x00,0xF6,0x04,0x57,0x53,0x00,0x00,0xC6,0xB8, -0xD8,0x04,0x04,0x04,0x04,0x04,0xDA,0x59,0xB3,0x00,0x00,0x00,0xF5,0xD2,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x57,0x00,0x00,0x04,0x04,0xD6,0xC6,0x00,0x54,0x5C,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0xF6,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x56,0x04, -0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3, -0x00,0x59,0x04,0xB8,0x00,0x17,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3,0x04,0x04,0xF6, -0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD9,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04, -0x04,0x54,0x55,0x04,0x04,0x04,0x00,0x56,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x16,0xF7,0x04,0x00,0xF5,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x00,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD7,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0xDE,0x00,0xF4,0x04,0x04,0x04,0x17,0x59,0x00,0x09,0x57,0x17,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, -0x00,0xDF,0x04,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x59,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54, -0x04,0x04,0x5E,0x00,0xD3,0x04,0x04,0x04,0xD8,0x00,0x55,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0x00,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDD,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD5,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xF6,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xB3,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0xF7,0x00,0x58,0x04,0xDB, -0xF4,0x00,0x00,0xF3,0xD8,0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xB8,0x00,0xDC,0x5A,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0xF4,0x00,0x58,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDB,0x00,0x00,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xE1,0x00,0x53,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x54,0x00,0xDD,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD6,0x00,0xF6,0x04,0x00,0xF6, -0x5C,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF7,0x54,0x56, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xF1,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF7,0x04,0x04,0xB3,0x00,0x59,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF5,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x17,0x00,0x5A,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0xDB, -0x00,0xF7,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x5B,0x00,0x60,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x5D,0x00,0xFA,0x04,0x04,0x04,0x53,0xC6,0x04,0x04,0x04,0x04, -0x04,0xB8,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x0A,0x04,0x04,0x04, -0x04,0xD6,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xF5, -0x00,0xDB,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD3,0x00,0xF3,0x04,0x04,0x55,0x00,0xD7,0x04,0x04,0x04,0x04,0xB3,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0xDA, -0x00,0xF3,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD8,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0xF3,0x04, -0x04,0x04,0x53,0xF5,0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x53,0x54,0x04, -0x53,0x00,0xD9,0x04,0x04,0x5B,0x00,0x5A,0x04,0x56,0x00,0xD3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x54,0x54,0xDA,0x04,0x04,0xDF,0x00,0x57,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x58,0x09,0xF5,0xDA,0x04,0x04,0xE1,0x00,0x54,0xD9, -0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04, -0x60,0x00,0xF6,0xD4,0x04,0x04,0x04,0xDC,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x5A,0x54,0xF7,0x04,0x04,0x04,0x04,0xF7,0x00,0x57,0x04,0x04,0xD7,0x00, -0xF7,0x04,0x04,0x04,0x5C,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, -0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x17,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x53,0x00,0xD8,0x04,0x04,0xD8,0x00, -0x53,0x04,0x04,0xD3,0x00,0xB3,0xD8,0x04,0x04,0x04,0x50,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x59,0x04,0x04, -0x04,0xD8,0xB3,0x00,0xDD,0x04,0x04,0x04,0xF4,0x00,0x55,0xD8,0x04,0xD8,0xD9,0x04, -0xDA,0xB8,0x54,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD5,0x00, -0xF3,0x04,0x04,0x04,0xD9,0x54,0x00,0x55,0xD8,0x04,0x04,0x04,0x04,0x04,0xD6,0x00, -0x00,0xDE,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0x00,0x00,0xD5, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF4,0xDD,0x04,0x04,0x04,0x04, -0x04,0xDB,0xF6,0x00,0xF3,0xDA,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDC,0x00,0x54,0xD8,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x53,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF5,0x54,0xF6,0xDB,0x04,0x04, -0x04,0x04,0x04,0x50,0x00,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0xD8,0xF3,0x00,0xE1,0x04,0x04,0xD9,0x54,0x00,0xF6,0xDB,0x04,0x04,0x04,0x04, -0x04,0xDB,0xF6,0x00,0x53,0xD8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD7, -0x00,0x00,0xD8,0x04,0x04,0xF4,0x00,0xD2,0x04,0x04,0x04,0xF7,0x00,0xD6,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x00,0xB3,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0xD8,0x00,0x00,0xD8, -0x04,0x04,0x04,0xD8,0x00,0x54,0xD8,0x04,0x04,0x04,0xD2,0x00,0x55,0x04,0x04,0x04, -0x04,0x04,0xDA,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x5D,0x04,0xD5,0x00,0x54,0xD5,0x04,0x04,0xD7,0x00,0x17,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0xF6,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x5E,0x00, -0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDE,0xF3,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0x54, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF7,0x04, -0x04,0x04,0x04,0x54,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6, -0xDA,0x00,0x00,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0xF6,0xC6, -0x04,0x04,0x04,0x56,0x00,0xF7,0xD9,0xD8,0xF7,0x00,0x58,0x04,0xD6,0x00,0x54,0xF7, -0xF6,0x00,0x53,0xDA,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, -0x00,0xC6,0xB8,0xF6,0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x57,0x09,0x54,0x04,0x5C,0x54,0xB3,0xD9,0x04,0x04,0x04,0x04,0xDC, -0xD6,0x00,0x00,0xDF,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0xF6,0x00,0xC6, -0xF7,0xB8,0xF5,0x00,0x00,0xD6,0x04,0x04,0x17,0x56,0x56,0x00,0xF6,0xDA,0x04,0xF5, -0x54,0x53,0xF7,0xF7,0x53,0x00,0xF4,0x04,0x04,0x04,0x04,0xF4,0x00,0xF4,0xB8,0xF6, -0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xF6,0xDA, -0x04,0x04,0x04,0xDD,0x00,0xF5,0x56,0x56,0x56,0x56,0x56,0xD5,0x04,0x04,0x04,0x04, -0x04,0x04,0x17,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x56,0x56,0x56,0x56,0x56,0x56, -0x56,0x00,0x00,0x04,0x04,0xD6,0x00,0x54,0xF7,0xF7,0x00,0x00,0xD6,0x04,0x04,0x04, -0x5A,0x00,0x00,0x55,0xB8,0xF3,0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0xF3,0xB8,0xF7,0x00,0x54,0x59, -0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF4,0xF7,0xB8,0xF6,0x00,0x00,0xF3,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x00,0x58,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xF7,0xF5,0x00,0x00,0xD2,0x04,0x04,0x04, -0x04,0xD9,0xF4,0x00,0x00,0xF4,0xF7,0xB8,0x55,0x54,0x53,0x54,0xDE,0x04,0x04,0x04, -0x00,0x53,0x56,0x56,0xB8,0x55,0xF3,0x00,0x00,0xF3,0xDB,0x04,0x04,0x04,0x00,0x53, -0x56,0x56,0x56,0x56,0x56,0x56,0xDF,0x04,0x00,0x53,0x56,0x56,0x56,0x56,0x56,0x56, -0x04,0x04,0x04,0x04,0xD8,0xF5,0x00,0x00,0xB3,0x55,0xB8,0xF7,0xF3,0x00,0x00,0xF7, -0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x50,0x00,0xF4,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x00,0xF6,0xDA,0x00,0x00,0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x00,0xF3,0xF7,0xB8,0x55,0x54,0x54, -0x54,0xD0,0x04,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0xF7,0xF5,0x00,0x00,0xF6, -0x04,0x04,0x04,0x04,0xD9,0xF5,0x00,0x00,0xF3,0x55,0xB8,0xF7,0xF3,0x00,0x00,0xF6, -0xD8,0x04,0x04,0x04,0x00,0x53,0x56,0x56,0xB8,0x55,0xB3,0x00,0x00,0xD0,0x04,0x04, -0x04,0xDD,0x00,0x54,0xF6,0xB8,0xB3,0x54,0xF4,0x04,0x04,0x56,0x56,0x56,0x53,0x00, -0x56,0x56,0x56,0x56,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0xD7,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xF1, -0x04,0x5B,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x58,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x55,0x00,0x50,0x04,0x04,0x04,0x04,0x04, -0x17,0x00,0xF7,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x58, -0x00,0x60,0x04,0x04,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xB8,0x54,0x00,0x04,0x04, -0xDF,0x00,0x00,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0xF4,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, -0xF4,0x00,0x54,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x53,0xF7,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF7,0xD5, -0x04,0x00,0xF6,0xDA,0xD0,0xF3,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, -0xF6,0x04,0x04,0x04,0x04,0xDF,0x00,0xD9,0x04,0x04,0x56,0x00,0xDA,0x04,0x04,0x04, -0x55,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0xD0,0xB3,0x00,0x00,0xF6,0xD8,0x04, -0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0x00, -0xF6,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0xD3,0xF5,0x04,0x5A,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF2,0x00,0x50,0x04,0x04,0x04,0xFA,0xB3,0x00,0x00,0x00,0xF6, -0xDC,0x04,0x04,0x04,0xF4,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x5A,0xB3,0x00,0x00, -0x53,0x58,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x55,0xD9,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5, -0x00,0xDC,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0x04,0x04,0xD0,0xF3,0x00,0x00,0xB3,0xE1,0x04,0x04,0x04,0x04,0x04,0xDE,0xF4,0x00, -0x00,0x54,0xF7,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0xF3,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDC,0x55,0xC6,0x00,0x00,0x00,0xF5,0xEF,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x54,0xF6,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0xF6,0x54,0x00,0x00,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x53,0x55,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x04,0x04,0x04, -0x04,0x04,0xD0,0xF5,0x00,0x00,0x00,0x00,0xB3,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x54,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x00, -0xF6,0x04,0x00,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0xD5,0xF7,0x53,0x00,0x00,0x00,0xF3,0x59,0xDA,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF4,0x5E,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDE,0xF6,0x54,0x00,0x00,0x00,0x54,0x55,0xD7,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0xD5,0xF5, -0x00,0x00,0x53,0xB8,0xDA,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF1,0x00,0x55,0x04,0xF5,0x00,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xD5,0x04,0xDE,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD2, -0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0x54,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD3,0xF5,0x04, -0xD8,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xD6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x59,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xC6,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x54,0x00,0xD6,0x04,0x00,0xF6,0x04, -0xF7,0x00,0xF4,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF4, -0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xD5,0xD9,0x57,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xEC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x00,0x00, -0x0B,0x04,0x00,0x00, -0x1A,0x00,0x00,0x00, -0x00, -0x00, -0x3A,0x69,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5, -0x59,0xF7,0xF7,0xB8,0xF9,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x54,0x00,0x00,0x00, -0x00,0x53,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF7,0x00,0x55,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF3, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x04,0x59,0x5B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xB8,0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD7,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58, -0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x54,0x59,0xDB,0x04,0xE1,0x55,0x00,0x00,0xD3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF9,0xF5,0x53,0xB3,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x0D,0x53,0x54,0x5B,0x04,0x04,0x04,0x04,0xF7,0x00,0xF5,0xD9,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5E,0x00,0x00,0x04,0xB8,0x54,0xF4,0xDC,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF9,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD7,0x00,0xC6,0xDC,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, -0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xF5,0xE1, -0x04,0x04,0x04,0x04,0x5D,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00, -0x53,0xD0,0x04,0x04,0x56,0x00,0x53,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x5D,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x54,0xF9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x54,0xB8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD6, -0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x17,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF3,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00, -0x58,0x04,0x04,0xE1,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF3, -0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0x04,0x60,0xF3,0x00, -0x00,0xF3,0x60,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x00,0xB3,0x57,0x04,0x04,0x04, -0x04,0xD0,0xB3,0xD6,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0xDC,0x04,0x04,0x04, -0x04,0x58,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x16,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD6,0x53,0x59,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xB3,0x00,0x00,0x00,0xF4,0xDF,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x04,0x04,0xDE,0xF6,0x00,0x00,0x00,0xF6,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x60,0xF3,0x00,0x00, -0x54,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0x60,0xF4,0x00,0x00,0x54,0x55,0xD7,0x04, -0x04,0x04,0x04,0xC6,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xB3, -0x00,0x00,0x53,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5D,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0xD8,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x58,0xF3, -0x00,0x00,0x00,0x00,0xF6,0x0D,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDE,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x09,0x57,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0xB3,0xF7,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0xF6,0x54,0x00,0x00, -0x00,0xF3,0x56,0xD9,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xF6, -0x5C,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x55, -0x53,0x00,0x00,0x00,0x54,0xF5,0x5D,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x60,0xF3,0x00, -0x00,0x54,0xF7,0xD8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, -0xF7,0x04,0x00,0x00,0x53,0x53,0x53,0x53,0x53,0x00,0xD0,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0xE1,0x55,0x54,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0xF7, -0xB3,0x00,0x00,0x00,0x53,0xF7,0xDE,0xDB,0xF7,0x54,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xD7,0x00,0x00,0xDE,0x04,0x04,0x04,0x5E,0xF3,0x00,0x00,0x54,0xF7, -0xD5,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x59, -0xF3,0x00,0x00,0x54,0x55,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF6,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0xDB,0x53,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0x56,0xB3,0x00,0x00,0x00,0xF5,0xD6,0x04,0x00,0xF6,0x04,0x00,0xF6,0xD9,0xB8,0x53, -0x00,0x00,0x54,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0xB3,0x00,0x00,0x54, -0xF5,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xF3,0x00,0x00,0x00,0xF5,0xD6, -0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0xB8,0x53,0x00,0x00,0xC6,0xF7,0xD5,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0xC6,0x00,0x00,0x53, -0xB8,0x04,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xD6,0x00,0x54,0xDD,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xD5,0xF7,0x53,0x00,0x00,0x54,0x55,0xD2, -0x04,0x04,0x04,0x00,0xF6,0xD9,0xB8,0xC6,0x00,0x00,0x53,0xF7,0xDC,0x04,0x04,0x04, -0x04,0x04,0xD8,0x56,0xB3,0x00,0x00,0x54,0xF5,0xDF,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x54,0xB8,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0xDB,0xF7,0x54,0x00,0x00,0xB3,0x17,0xF6,0x00,0x04,0x04, -0x04, -0x04,0x04,0xE1,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0xF7,0x04,0x04,0x04,0x04,0x53,0x54,0xF9,0x04,0x04,0x04,0x04,0x04,0xF7, -0x00,0x59,0x04,0x04,0x04,0x04,0xD0,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x04,0x04, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD0,0xB3,0x00,0x00,0x54,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0x04,0xF4,0xC6,0x04,0x04,0x5D,0x00,0x00,0x55,0x55,0x00,0x00,0x5B, -0x04,0xD8,0xF3,0x00,0x53,0xF7,0x55,0x00,0x00,0x55,0x04,0x04,0xE1,0x00,0x00,0x5B, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF6,0x00,0x54,0x55,0xF7,0xF5,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x54,0x00,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x04,0x04,0xD6,0x00, -0x00,0xF5,0xF7,0xF6,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0x55,0xF7,0xF3,0x00,0xC6,0xD7, -0x04,0x04,0x04,0x56,0x00,0x00,0xF6,0xF7,0xF4,0x00,0x00,0xDE,0x04,0x04,0x04,0x56, -0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xC6,0x55,0x55,0x53,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0xD9,0x53,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0xB8,0x00,0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, -0x55,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0x55,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0x00,0xF4,0x55,0xF7,0x55, -0x00,0x00,0xF6,0xD9,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x53,0x00,0xD9,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF6,0x53,0x00, -0x00,0xDE,0x04,0x04,0x04,0xD3,0xF4,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00,0x54, -0x17,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF3,0x00,0x00,0xB3,0xDE,0x04, -0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x59,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x00,0xB3,0x55,0xF7,0x55, -0xF3,0x00,0x00,0xF3,0xDE,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x60,0x00,0x00,0xF6,0xF7,0xB3,0x00,0xF6, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xF3,0xD8,0x04,0x00,0xB3, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xDC,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD2,0x00, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x00,0x00,0xF6,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xF3,0x55, -0xF7,0xF6,0x54,0x00,0x00,0xF9,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x53,0x55,0xF7,0x55, -0x53,0x00,0x00,0x00,0x00,0xF3,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0x5B,0x04,0x04,0x04,0x57,0x00,0x00,0xF6,0xF7,0xF4,0x00,0xB3,0xDC,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x55,0xF7,0xF5, -0x00,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x54,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x11,0x04,0x04,0x04, -0x04,0x04,0xF3,0x00,0x00,0x11,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xDE,0x04, -0x04,0x04,0x04,0x04,0xDE,0x00,0xC6,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, -0xF7,0xF7,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00, -0x5A,0x04,0x04,0x04,0x59,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x53,0x00,0x54,0x55,0xF7, -0xF6,0x00,0x00,0x5A,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0xB3,0x55,0x55,0xF3,0x00, -0x54,0xD6,0x04,0x04,0x04,0xF2,0xB3,0x00,0x53,0x55,0xF7,0xF5,0x00,0x00,0xF7,0x04, -0x04,0x04,0x04,0xD2,0xB3,0x00,0x54,0x55,0xF7,0xF6,0x00,0x00,0x5B,0x00,0xF6,0x04, -0x04,0xDE,0xC6,0x00,0xB3,0xF7,0x55,0xF3,0x00,0x53,0xDE,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0xF3,0xF7,0x55,0xF3,0x00,0xF5,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xD3,0x54,0x00,0xE1,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x04,0xE1,0x53,0x00,0xB3,0x55,0xF7,0xF3,0x00,0x00,0x17,0x04,0x04,0x00, -0x00,0x00,0x00,0xF3,0xF7,0xF7,0xF3,0x00,0x54,0xE1,0x04,0x04,0x04,0xF2,0xB3,0x00, -0x53,0x55,0xF7,0xF5,0x00,0x00,0x57,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x56,0x00,0xB3,0xF7,0xF3,0x00,0xB8,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0xDB, -0xB3,0x00,0xB3,0x55,0x55,0x54,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x53,0x04, -0x04,0x04,0xD0,0x00,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xD3,0x04, -0x04,0x04,0xF3,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xC6,0x04,0x04, -0x04,0x04,0x04,0x04,0x54,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x54,0x55, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04, -0x04,0x04,0xD9,0x09,0xC6,0x59,0xDB,0xE1,0xF3,0x00,0x5B,0x04,0x04,0x04,0x04,0x04, -0x5E,0x00,0x5C,0x04,0x53,0x00,0xD2,0x04,0x04,0xF2,0x00,0x53,0x04,0xB8,0x54,0x55, -0x04,0x04,0x04,0xDC,0xF3,0x00,0x58,0x0A,0x00,0x00,0x5E,0x04,0x04,0x04,0x04,0x04, -0xD6,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB8,0x54,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0x55,0x04,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF4,0xDB, -0x04,0x04,0x04,0xD0,0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDE,0x54, -0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0x00,0x17,0x04,0x04,0x04, -0xE1,0x00,0x54,0xDB,0x04,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x00,0xF3,0x58, -0x04,0x04,0x60,0x00,0xF3,0xDC,0x04,0x04,0x04,0x58,0x00,0xF3,0x04,0x04,0x17,0x00, -0x53,0xD7,0x04,0x04,0x04,0xF9,0x00,0xB3,0x04,0x04,0x04,0xDB,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x58,0x00,0xF6,0x04,0x04,0x04,0x04,0xF6,0x00,0x57,0x04,0x04, -0x04,0x04,0x04,0xD6,0x54,0xF6,0xDA,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0xD5, -0xF6,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xF5,0x54,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0xF5,0xDF, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04, -0x04,0x04,0x04,0xD6,0x00,0x00,0x00,0x00,0xD7,0x04,0x04,0xD5,0x00,0x00,0x00,0x5B, -0x04,0x04,0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, -0x00,0xF7,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x58,0x00,0xF6,0x04,0x04, -0xD7,0x54,0x00,0xF6,0xF2,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x60,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0xD8,0x57,0x00,0x00,0xE1,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF2,0x53,0x00,0xF3,0xD6,0x04,0x04,0x04,0x04,0x04,0xDC,0x55,0x00, -0x00,0xD0,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0xF3,0x00,0xD0,0x04,0x04,0x04,0xF4,0x00,0xD6,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0xDE,0x00,0x00,0xF2,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xD2,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0x00,0xF6,0xDA,0x04,0xD9,0xF3,0x00,0xF4,0xDE,0x04,0x04,0x04,0x04,0x04,0x5B, -0x54,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0x54,0x60,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00, -0xF3,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04, -0xD2,0x00,0x54,0xD0,0x04,0x04,0x04,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x59,0x53,0xF4,0xDB,0x04,0x04,0x04,0x17,0x00,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0xD8,0x00,0x00, -0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0xF4,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x57,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0x04, -0xD7,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0x56,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00, -0x00,0xF6,0xDA,0x00,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x5D,0x00,0x54,0xDC,0x04, -0xD9,0x53,0x00,0x57,0x04,0x04,0x04,0x04,0xDE,0xB3,0x00,0x57,0x04,0x04,0xD9,0x53, -0x00,0x56,0x04,0x04,0x04,0x04,0xD3,0xF3,0x00,0x00,0xF6,0xDA,0xDB,0xC6,0x00,0x5A, -0x04,0x04,0x04,0x04,0x5B,0x00,0x53,0xD9,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0xDC,0x54,0x00,0x5D,0x04,0x04,0x04,0x04,0x5B,0x09,0xC6,0x00,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF3,0x04,0x04,0xD8,0xF3,0x54,0x5C,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDC,0x54, -0x00,0x5C,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xD7,0x04,0x00,0x00,0x00,0x5C,0x04, -0x04,0x04,0x04,0xF9,0x00,0x54,0xDC,0x04,0xDB,0x53,0x54,0x58,0x04,0x04,0x04,0x04, -0xD3,0xF4,0x00,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0x54,0xD9,0x04, -0xD8, -0x54,0x54,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB8,0x54,0xF7,0x04, -0x04,0x04,0xD8,0xF5,0x00,0x00,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0xB3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0xDE,0x04,0x04,0xB8,0x53, -0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF5,0x04,0x04,0x56,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0x00,0xF9,0x04,0x04,0x04,0x04,0x04, -0x59,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0x04,0x04,0x04,0x55,0x00,0x04,0x04,0x04,0x04,0x57,0x09, -0x57,0x04,0x04,0x04,0xDC,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, -0x54,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04, -0xD3,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x0A,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, -0x56,0x00,0x58,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF2,0xC6,0x00,0x5D,0x04, -0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x58, -0x04,0x00,0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x00,0x04,0x04,0xF3,0x00, -0xD3,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x60,0x04,0xF4,0x00,0xD0,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0x5E,0x04,0x04,0x04,0xF7,0x00,0x0A,0x04,0x04,0x04,0x04,0x04, -0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0xDB,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04, -0xB8,0x54,0xF9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5A,0xF3,0x00,0x00,0xF5,0x0A,0x04,0x04,0x58,0x58,0x58,0x58,0x58, -0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x0A,0xF5,0x00,0x00,0xF3,0x5B,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54, -0x00,0x00,0x00,0x00,0x00,0xF4,0x59,0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04, -0x59,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0xDE,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0xF4,0x00,0xF7,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0xD3,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xE1,0x09,0xB3,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xB3, -0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x53,0x53,0xD8,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x00,0xF4,0x04,0x04,0x04,0x04,0x60,0x54,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0xD8, -0xB3,0x00,0x5E,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0xD8,0x00,0x54,0x60,0x00,0xF7,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xF6,0x04, -0x04,0xF6,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xC6,0x00,0x0D, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, -0x00,0xF3,0xDC,0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x00,0x00,0x00,0xF7,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x0A,0x00,0x53,0xD9,0x04,0x04,0x04,0x56,0x54,0xB8,0x04, -0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0xF3,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF9,0x04,0x04,0x04,0x04, -0x04,0x04,0xF3,0x00,0xDB,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x5B,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x58,0x04,0x04,0x04,0x58,0x00,0x55,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD2,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00, -0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xF7,0x04,0xB8,0x00,0x56,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0xF5,0xF6,0x04,0x04,0xB8,0x00,0x56,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0x53,0x00,0xF6,0x04,0xB8,0x00,0x5B,0x04,0x04,0x04,0x04,0x04, -0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0x58,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00, -0x56,0xDA,0x55,0x54,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xF7,0x00,0x59,0x04,0x04,0x04, -0x04,0x04,0x04,0x5C,0x00,0x55,0x04,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04, -0x59,0x00,0xF7,0x04,0xB8,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00, -0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x57,0x04,0x04,0x04,0xF5,0x00,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0xDC, -0x00,0x00,0x04,0x04,0x04,0x04,0x57,0x00,0x60,0xF7,0x00,0x0D,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF3,0x54,0xDE,0x54,0xB8,0x04,0x04,0xB3,0xB3,0x0D,0x00,0x56,0x04, -0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5A,0xDE,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0x59,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x17, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xFB,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x55, -0x00,0x56,0x58,0x58,0xF6,0x09,0x57,0x58,0x58,0x04,0x55,0x00,0xD2,0x04,0x04,0x04, -0x04,0xF4,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x54,0xC6,0xDB,0x04, -0x04,0xDB,0x54,0x54,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, -0x0D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5A,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04, -0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF7,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD7,0x53,0x00,0x5A,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x0D,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0xB3,0x54,0x16, -0xE1,0xE1,0xE1,0xE1,0xE1,0x00,0xF4,0xE1,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xD6,0x00,0xF7,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00, -0xF7,0x04,0x04,0x04,0xF2,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04, -0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0x04,0xF2,0x5B,0xF9,0x00,0x54,0xDC, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x56,0x54,0x54, -0x00,0x55,0xDE,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x00,0x54,0x57,0xD9,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x56,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x00,0x00,0x60, -0xDB,0x55,0x00,0x00,0xD8,0x59,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x53,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0xF9,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD6,0x57,0xE1,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x57,0x09,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF4,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xC6,0x56,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD9,0xD8,0x04,0x04, -0x04,0x04,0xDC,0x00,0xF6,0x04,0x00,0xB3,0x04,0x04,0xDA,0x55,0x00,0xF7,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x59,0x54,0xB8,0x04,0x53,0x00,0xD8,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x53,0xD9,0x00,0xF6,0x04,0x0D,0x00,0xF4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xB3,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD3,0x04,0x04, -0x04,0x04,0xD7,0x55,0x00,0x00,0xDF,0xD5,0xE0,0x00,0x0A,0x04,0x00,0xF6,0x04,0x04, -0xDB,0xC6,0x09,0xD0,0x04,0x04,0x04,0x04,0x59,0xF6,0xE1,0x04,0x04,0x04,0x04,0x04, -0xF5,0x00,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xB3,0x04, -0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF7, -0x04,0x55,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD3,0xF5, -0x00,0xD8,0x04,0x04,0x04,0xF7,0x00,0xDE,0xF6,0x00,0xDC,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0x54,0x00,0xD7,0x04,0xD7,0x00,0x54,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xB3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x56,0xC6,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xC6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0x04,0x00,0x54,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x59,0x00,0xF6,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xD0, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x55,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x54,0x54,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xC6,0x04, -0x53, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5C,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xE0,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04, -0x04,0x04,0xB3,0x53,0x04,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, -0xF7,0x04,0xB3,0xF3,0x04,0xF2,0x54,0xB8,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0xDB,0x54,0x00,0x00,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54, -0x04,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0xDC,0x09,0x54,0xDB,0x04,0x04,0x04, -0x04,0x04,0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF4, -0x04,0x04,0x04,0x60,0xD0,0x04,0x04,0x04,0x04,0xD9,0x5D,0x0D,0x04,0x04,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x00,0x00,0x54,0x54, -0x00,0x00,0x00,0x54,0x00,0x04,0xD7,0xE1,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0x54,0xB3,0x56,0x56,0x53,0x00,0x58, -0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x00,0x00,0xD3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, -0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0xF3,0x00, -0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xD3,0x53,0x00,0x58,0x04,0x04,0x04,0x04,0xD6,0x59,0xD9, -0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0x04,0xD6,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0xD5,0x59,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04, -0x04,0xF6,0x00,0xD2,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0xF5,0x00,0x04,0x04,0xDB,0xF6,0x00,0x09,0x00,0x00,0x00,0x55,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xB8,0xDC,0x04,0x04,0x04, -0x04,0x04,0x04,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0xD3,0xF7,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x53, -0xC6,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xDE,0x00,0xF4,0x04,0x04,0x04,0xF4,0x00, -0xD8,0x04,0x5E,0x00,0x55,0x04,0x04,0x04,0x04,0xB8,0x54,0x57,0x58,0x58,0x58,0x58, -0x58,0x58,0x55,0x00,0x60,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xB3,0x00,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00, -0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD0,0x04,0x04,0x04,0x58,0x58,0x58,0x58, -0x58,0x58,0x58,0x58,0x57,0x09,0xB3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0x00,0xF7,0x04,0x59,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF3,0x00,0xDC, -0x04,0x57,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0xF4,0x00,0xDF,0x04,0x00,0xF6,0x04,0xF6,0x00,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x55,0x57,0x57,0xB8,0xF4,0x00,0x00, -0xF5,0xD7,0x04,0x04,0x16,0x09,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6,0x00,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDE,0x04,0xE1,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB3,0x04,0x57,0x00,0x60,0x04,0x04, -0x04,0xB3,0x54,0x04,0x59,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF9,0x00, -0xF5,0xDA,0xF5,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00, -0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x56,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD5,0x00,0xB3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0x04, -0x00,0xB3,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00, -0xF4, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xD7,0xF7,0x00,0x00,0x57,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0xDF,0x00,0xB8, -0x04,0x04,0xF4,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xE1,0x04,0xB8,0x54, -0xD7,0x56,0x00,0xDE,0x04,0xB8,0x54,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00, -0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x54,0xF7,0x04,0x0D,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0xD6,0xF4, -0x00,0x5E,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF6,0x00,0x55,0x13,0x04,0xB3, -0xF5,0xDA,0x04,0x04,0x57,0x54,0x00,0x00,0x55,0x04,0x04,0x04,0xAD,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0xE1,0xE1,0x00,0xF6,0xE1,0xE1,0xD6,0x00,0x55,0xE1, -0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xC6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0xD2,0x59,0x53,0x00,0x00,0x54,0x59,0x04,0x04,0xF6,0x00,0x57, -0x04,0x04,0x04,0x57,0x09,0x54,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54,0x54,0x54,0x00,0x00,0x00,0x54,0x54,0x54, -0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD6,0xD6,0xD6,0xD6,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x0D,0x00,0x59,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0xDC,0xB3,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x59,0x00,0xB8,0x04,0x04,0xF7,0x00,0x57,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x55,0x04,0x00,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x04,0x04,0x0D,0x00,0xF7, -0x04,0x04,0x04,0x04,0xC6,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x04,0x04, -0xF3,0x00,0xF5,0x16,0xD6,0x57,0x54,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD2,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xB8,0x04,0x04, -0x04,0x04,0x00,0xB3,0x04,0x00,0xF5,0x04,0x04,0x04,0xD6,0x00,0x59,0x04,0x04,0xF6, -0x00,0xF2,0x04,0x04,0x04,0xD7,0x00,0x00,0x00,0x00,0x54,0x54,0x54,0x00,0x00,0x53, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x00, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x00,0x54,0x54,0x54,0x54,0x54,0x54,0x54, -0x54,0x54,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, -0x00,0xB8,0x54,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD6,0x00,0x55,0x04,0x04,0xDB,0x00,0xF3, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x57,0x00,0xF7,0x04, -0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x17,0x00,0xB8,0x04,0x00,0xF3,0x58,0x58,0x58,0x59,0xF9,0xD7,0x04,0x04, -0x04,0x04,0x53,0x00,0xB3,0x00,0x00,0x00,0x00,0x54,0xF6,0x0D,0x04,0x04,0x04,0x04, -0x04,0x54,0x54,0x04,0x00,0xF6,0xDA,0x59,0x54,0x00,0x00,0xF3,0x5C,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0xD9,0x54,0xF3,0x04,0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0xD0,0x00,0xF7,0x04,0xDE,0x00,0xF7,0x04,0x04,0xDC,0x00,0xF6,0x04, -0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x55,0x00,0x55, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x17,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x53,0x17,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x55,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF9,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, -0x00,0xF6,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF6,0xDA,0x00,0x00,0x00,0x54, -0x54,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF6,0xE1,0x09,0xC6,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x00,0xF5, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD3,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00, -0xF3,0xF9,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0xF9,0x00, -0x56,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xD0,0x00,0x00,0x00,0x53,0x04, -0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x5B,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDE,0x04,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04, -0x04,0x04,0x04,0x55,0x00,0x60,0x04,0x04,0x04,0x04,0x55,0x00,0x57,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0xD9,0x00,0x00,0x55,0x04,0x5B,0x53,0x55,0xB8,0x53, -0x54,0x00,0xB3,0x00,0x00,0x57,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB3,0xF4,0x04,0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5E,0x53,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54, -0xF7,0x04,0x04,0xD3,0xD7,0x04,0x04,0x04,0x04,0xD7,0x54,0x00,0x55,0xDC,0x56,0x00, -0xC6,0xF2,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xF4,0x00,0xE1,0xE1,0xE1,0xE1,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDC, -0xB3,0x09,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x00,0xF2, -0x04,0x04,0xD8,0x53,0x00,0xD2,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x5A,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04, -0x04,0x04,0x56,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xD9,0x04,0x04,0x04, -0x56,0x00,0xF7,0x04,0x04,0x04,0x04,0xB8,0x00,0xF7,0x04,0x57,0x00,0x55,0x04,0x04, -0x04,0x04,0xF2,0x00,0x53,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0x54,0x00,0x00,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x58,0x58,0x58,0x58, -0x58,0x58,0x58,0x58,0x58,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x54, -0x54,0x56,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0xC6,0x57,0x04,0x04,0x04,0x00,0xF5, -0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0xB3,0xF5,0x04,0x04,0x60,0x00,0x56,0x04,0x04, -0x04,0x04,0xF6,0x00,0x0A,0xE1,0xE1,0xE1,0xE1,0x57,0x00,0x56,0x04,0x04,0x04,0x04, -0x00,0xF3,0x58,0x58,0x57,0xB8,0xF5,0x00,0x53,0xD7,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF3,0x58,0x58,0x58,0x58, -0x58,0x58,0xD0,0x04,0x00,0xF3,0x58,0x58,0x58,0x58,0x58,0x5D,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xD0,0x04, -0x00,0xF3,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x00,0x17, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0xF6,0x00,0xE1,0x04,0x04,0x04,0x55,0x00,0xD6,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDE,0x00,0x53,0xD9,0x04,0x04,0x00,0xF6,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00, -0xF6,0x04,0x00,0x00,0x00,0x54,0x54,0x00,0x54,0x00,0xF3,0xDE,0x04,0x04,0x00,0xF4, -0x04,0xD8,0xDE,0xDE,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04, -0x00,0xF6,0x04,0x17,0x5A,0x57,0x55,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04, -0xDE,0xB8,0x53,0x54,0x53,0xDC,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x57,0x00,0x59,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0x17,0x04,0x04,0x54,0xB3,0x04,0x04,0x59,0x00,0x59,0x04,0x04,0xF3,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x00,0x54,0xD5,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5D,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0xD0,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD2,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xC6,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xF6,0x04,0x00, -0xC6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0x04,0x54,0x00,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1, -0xE1,0xE1,0x00,0x09,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xC6,0xC6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0x04,0xDE,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x57,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF4,0x04,0x04, -0x04,0x04,0x04,0xDC,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x00, -0xF4, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x54,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x09,0xC6,0x04,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x54,0x53,0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, -0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x59,0x00,0xB3,0x0D,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0x04,0xDC,0x00,0xF6,0x04,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04, -0x04,0xDF,0x00,0x56,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0x04,0x04,0x04,0xF4,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xD3,0x04,0x04,0x04,0x04,0x04, -0xD7,0x00,0xF3,0x04,0x04,0x04,0x58,0xC6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0xC6,0x54,0xD5,0x04,0x04,0x04,0xDF,0xF3,0x00,0x17,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0xF6,0x00,0xF6,0x0A,0x04,0x04,0xB8,0x00,0x00,0x53,0xB8,0xD7,0x04,0xD5, -0xB3,0xF5,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0xF6,0x54,0x04,0x04,0x04,0xF4,0xB3,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x54,0x00, -0x00,0x55,0x04,0x04,0x04,0x04,0xDE,0x59,0x5E,0xD9,0x04,0xF5,0x00,0xDB,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF5,0x00,0x00,0x00,0x00,0xD3,0x04,0x04,0xDF, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5D,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, -0xDB,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x53,0x54,0xE1, -0x04,0x04,0x04,0x04,0x04,0x0A,0x57,0xF7,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0xDF, -0x00,0xF5,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0x00,0x55,0xD8,0x04,0x04, -0xDA,0xDF,0x00,0xC6,0x04,0x04,0x17,0x00,0xF4,0xD9,0x04,0x04,0x04,0xE1,0x00,0x54, -0xD8,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x57,0x04,0x04,0x04,0x04,0xF6,0x00,0xF4, -0x56,0x57,0xF5,0x00,0xF4,0xD9,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x57, -0x00,0x5E,0x04,0x54,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x5A,0xF3,0x00, -0x54,0xF5,0xDF,0x04,0x04,0x04,0x04,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54, -0x54,0x00,0x04,0x04,0x04,0x04,0x0D,0xF5,0x00,0x00,0xF3,0x5A,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDC,0xB3,0x00,0x57,0x04,0x04,0x00,0xF5,0x04,0xF4,0x00,0xD7, -0x04,0x04,0x04,0xF7,0x00,0xDB,0x04,0xDC,0x00,0x55,0x04,0x04,0x04,0x04,0xDF,0x00, -0x56,0x04,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0xDB,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x00,0x56,0x04, -0x00,0x00,0x54,0x54,0x54,0x54,0x54,0x53,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x54, -0x54,0x54,0x54,0x54,0x54,0x00,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xE1,0x00,0x00,0xDC,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDC, -0x00,0xF3,0x04,0x04,0x04,0x04,0xDE,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x55,0x04,0x00,0xF4, -0xE1,0xE1,0xE1,0x0A,0x59,0xF6,0x00,0x54,0xD9,0x04,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xDC,0xF3,0x00,0xE1,0x04,0x04,0x04,0x16,0xF3,0x00,0x00,0x53,0xB8, -0xDB,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB3,0x00,0xD8,0x04, -0x04,0x04,0xD9,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04, -0x55,0x00,0xD5,0x04,0x55,0x00,0xDC,0x04,0x04,0xF7,0x00,0x03,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF3,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0xDE,0xF7,0xC6,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF5,0x00,0x5C,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00, -0xD7,0x04,0x04,0x04,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x57, -0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00,0x09,0x57,0x04,0x04, -0x04,0x04,0x04,0x04,0x5A,0x00,0xF7,0x04,0xB8,0x00,0x57,0x04,0x04,0x04,0x04,0x04, -0x04,0xDC,0xF4,0xF5,0x04,0x04,0xB8,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0x53,0x00,0xF6,0x04,0xF7,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x55, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0x5C,0x04,0x04,0x04,0x04,0x04, -0x04,0x5A,0x00,0x00,0x04,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x57, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6,0x09, -0x57,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x5D, -0x00, -0x53,0x04,0x04,0x04,0x04,0x04,0xF9,0x54,0xB8,0x04,0x00,0x00,0xD9,0x04,0x04, -0x04,0x04,0xDB,0x00,0x54,0x04,0xF7,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x59, -0x00,0xF7,0x04,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xF7,0x04, -0xF7,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xF6,0x04,0x00,0x53, -0x04,0x04,0x04,0xDA,0x55,0x00,0xF2,0x04,0x04,0xDE,0xD2,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04, -0xB8,0x00,0xDF,0x04,0x04,0x04,0x04,0xB8,0x00,0x60,0x04,0x04,0x04,0x55,0x00,0xD3, -0x04,0x04,0x04,0xF7,0x00,0x00,0xE1,0x04,0x04,0x04,0x59,0x54,0x5C,0x04,0x04,0x04, -0x04,0xB8,0x00,0x57,0xD6,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x59,0x04, -0x04,0x04,0xD8,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x55,0x04, -0x04,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF3, -0x04,0x04,0x04,0x04,0x04,0xDC,0xD2,0x04,0x04,0x04,0x04,0x04,0xF2,0xDD,0x04,0x04, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF9,0xF9,0x55,0x00,0xF9,0xF9, -0xF9,0xF5,0x00,0xF9,0xF9,0x04,0x04,0xDE,0x54,0x00,0x00,0x55,0xD6,0x04,0x04,0x04, -0x04,0x55,0x00,0x00,0x00,0x00,0x5D,0x17,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x00,0xF6,0xD3,0x04,0x04,0xF5,0x54,0xD6,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x59,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0xF5,0x04,0x04,0x04,0x04, -0x04,0x55,0x00,0x09,0xC6,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x5B,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0xD3,0x00,0x00,0x53,0xB8,0x57,0x55,0x00,0x00,0xD6, -0x04,0x04,0x04,0xF6,0x00,0xC6,0xB8,0x57,0x55,0x00,0x00,0x17,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0xF7,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDF,0xF5,0x00,0x00,0xF3, -0x5C,0x04,0x04,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0x04,0x04, -0x5C,0xF3,0x00,0x00,0xF5,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDC,0x53,0x00,0xDE,0x04,0x54,0x53,0x04,0x5A,0x00,0xF7,0x04,0x04,0x04,0x59, -0x00,0x58,0x04,0xDC,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF3,0xC6,0x04,0x04,0x04, -0xD0,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0xE1,0xE1,0x0D,0x58,0xB3,0x00, -0x59,0x04,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, -0x00,0x04,0x00,0xF4,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1,0xDC,0x04,0x00,0xF4,0xE1,0xE1, -0xE1,0xE1,0xE1,0xDE,0x04,0x04,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0xE1,0xE1,0xE1,0xE1,0xE1,0xE1, -0xE1,0xE1,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x5A,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xB8,0x54,0x5B,0x04,0x04, -0x04,0x04,0x04,0xF4,0x00,0xDC,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x57,0x00, -0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xB8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0x58,0x04,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x16,0x00,0xF7,0x04,0x04,0x5D,0x00,0x00,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0xD0,0x04,0x04,0x04,0x04,0xD9,0x00,0xF5,0x04,0x04,0x04,0x5A,0x00,0x5B,0x04, -0x54,0xB3,0x04,0x04,0x04,0x0D,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0xC6,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04, -0xDC,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x54,0xDB, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, -0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0x04,0x04,0x04,0xF9,0x54,0xB8,0x04,0x04,0x04, -0x55,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0x57,0x04,0xDA,0xDA, -0x04,0xDC,0xF4,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x5A,0x04,0xDA,0x04,0x04,0x5E, -0x00,0x54,0xDC,0x04,0xDB,0x53,0x00,0x58,0x04,0xDA,0x04,0x04,0xD2,0xB3,0x54,0x57, -0x04,0x04,0xDB,0x53,0x00,0x58,0x04,0xDA,0x04,0x04,0xD2,0xF3,0x00,0x00,0xF6,0x04, -0xDC,0x54,0x00,0x0D,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0xD2,0x04,0x04,0x04,0x00, -0xF6,0xD4,0x04,0x04,0xDC,0x00,0x00,0x60,0x04,0xDA,0xDA,0x04,0x5D,0x54,0x00,0x00, -0x04,0x00,0x00,0xF5,0xD9,0xDA,0xDA,0x04,0xD0,0x00,0x00,0xDC,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xDB,0xC6,0x00,0xD6,0x04,0x04, -0x04, -0x00,0xF6,0x04,0x00,0x00,0xB8,0x04,0x04,0x04,0xDC,0x53,0x00,0x00,0xB8,0x04, -0x04,0x04,0xDB,0xB3,0x00,0xE1,0x04,0x00,0x00,0x55,0xDA,0xDA,0xDA,0x04,0x55,0x00, -0xF7,0x04,0xDC,0x54,0x00,0xF9,0x04,0xDA,0x04,0x04,0x60,0x00,0x00,0xD3,0x04,0x00, -0x00,0x00,0x5B,0x04,0xDA,0x04,0x04,0x5C,0x54,0x54,0xDC,0x04,0xDB,0x54,0x00,0x58, -0x04,0xDA,0xDA,0x04,0xDC,0xF4,0x00,0x00,0xF6,0x04,0x00,0x00,0xB8,0x04,0x04,0x04, -0x55,0x00,0xD6,0x04,0xDC,0x00,0xF6,0xDA,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xC6,0x53,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0xF5,0x04,0x04,0xD8,0x00,0xF4,0x04,0x04,0x04,0x04,0xD6, -0x00,0x54,0x04,0x04,0x04,0x04,0xD8,0x00,0xF5,0x04,0x04,0x04,0xD6,0x00,0xF4,0x04, -0x04,0xB8,0x54,0x57,0x04,0x04,0x04,0x04,0x54,0x00,0xD8,0x04,0x04,0x04,0x04,0xF7, -0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF9,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09, -0xC6,0x04,0x04,0xF5,0x00,0xF7,0xDB,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0xDF, -0x5B,0x54,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D, -0x00,0xF3,0xDE,0x55,0x00,0x54,0xDC,0x04,0xF2,0x58,0xD6,0x04,0x04,0x04,0x04,0x04, -0x60,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x53,0x04,0x04,0x04, -0x55,0xE1,0xDE,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x00,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x56,0x5E, -0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0xD7,0xD6,0x57, -0x09,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0xDB,0xC6,0x00,0xDC,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x00,0x54,0xB3,0x00,0x00,0x00,0xF5,0xD0,0x04,0x04,0x04,0x04,0xD7, -0x00,0x00,0x00,0x00,0x00,0xF3,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0x16,0x04,0x04,0x04,0xB8,0x54,0xF5,0x60,0xDF,0xF6,0x00,0xB8,0x04,0x04,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA,0x00,0xF6,0x04,0x04,0x04, -0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x00,0x54,0x53,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0x00,0x55,0xDE, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xD7,0x04,0x04,0x04,0x04,0x04,0x60,0x00, -0xF7,0xDA,0xF6,0x00,0xD0,0x04,0xF3,0x00,0x60,0x04,0x04,0x57,0x00,0xF4,0x04,0x5E, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x57,0x09,0x5B,0x04,0x04,0x55,0x00,0xD0,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD9,0x54,0x53,0x04,0x04,0xF5, -0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF4,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0xF7,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x54,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, -0x00,0xB8,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xDE,0x00,0x53,0xD9,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0x00,0x0A,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, -0x55,0xDA,0xF4,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD2,0x00,0xF5,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0xDA, -0x04,0x53,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0xF6,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0x04, -0x04,0x04,0xF9,0x00,0x57,0x04,0x04,0x04,0xD5,0x00,0x55,0xDE,0x00,0xF7,0x04,0x04, -0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x54,0xF2,0x00,0x00, -0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xDE,0x04,0x04,0xB8,0x54,0x5C, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF7,0x04,0x04,0x04,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF2,0x00,0xF6,0x04,0x04,0x04,0x04,0xC6,0x09,0xD8,0x04,0xD9,0x00,0xB3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x53,0x54,0x53,0x55,0xF7,0xF6,0x00,0x00,0x59, -0x00,0xF6,0xDA,0x00,0x00,0x00,0x54,0xB3,0x55,0xF7,0xF3,0x00,0x54,0xE1,0x04,0x04, -0x04,0xDE,0x53,0x00,0x53,0x55,0xF7,0xF5,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0xF2, -0xB3,0xC6,0x53,0x55,0xF7,0xF5,0x54,0x00,0x56,0x00,0xF6,0xDA,0x04,0xE1,0x54,0x00, -0xF3,0xF7,0x55,0xF3,0x00,0x54,0x0D,0x04,0x04,0xF7,0xF7,0x00,0x53,0xF7,0xF7,0x04, -0x04,0xD6,0x00,0x00,0xF3,0x55,0x55,0xF3,0x00,0xF5,0xF6,0x00,0x04,0x00,0x00,0x00, -0x54,0x55,0xF7,0xF6,0x00,0x00,0x5A,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0xD6,0x00,0xC6,0xDB,0x04,0x04,0x00,0xF6,0xDA, -0x00,0x00,0x00,0xF3,0xF7,0x55,0x00,0x00,0x5B,0xF6,0x54,0xF3,0xF7,0x55,0x54,0x00, -0xF7,0x04,0x04,0x00,0x00,0x00,0x53,0x55,0x55,0x53,0x00,0xB3,0xD5,0x04,0x04,0xE1, -0x54,0x00,0xF3,0x55,0xF7,0xF3,0x00,0x00,0x0A,0x04,0x04,0x00,0x00,0x00,0x54,0xF3, -0x55,0xF7,0xB3,0x00,0x54,0xE1,0x04,0x04,0x04,0xDE,0x53,0x00,0x53,0x55,0xF7,0xF6, -0x00,0x00,0x57,0x00,0xF6,0xDA,0x00,0x00,0x54,0xF3,0x56,0x04,0x0A,0x00,0x09,0xF7, -0xB3,0x00,0xF9,0x04,0xF7,0xF7,0x53,0x00,0xF7,0xF7,0xF7,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x60,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0xD7,0x04,0x59,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0xF7,0x59,0x04,0x04, -0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0xD8,0x53,0x00,0xF2,0x04,0x04,0x04,0xB3,0x00, -0xDE,0x04,0x04,0x16,0x09,0x55,0xDA,0x04,0x04,0x04,0x04,0xDE,0x00,0xF6,0xDA,0x04, -0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, -0xF6,0x04,0xDC,0xDC,0xF2,0x00,0x56,0xDC,0xDC,0xDF,0xC6,0x57,0xDC,0x04,0x04,0x00, -0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x53,0x04,0x04,0x04,0x60,0x00,0x00, -0x00,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0xD3,0x04,0x04, -0x57,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xDE, -0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x59,0x04,0x04,0x04,0xF5,0x00,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0xD0,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF4,0x04,0x04,0x04,0x04, -0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF7,0x04, -0x04,0x04,0x04,0x04,0x04,0x5E,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF3, -0x54,0x04,0xDC,0xDE,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0x00,0xDE, -0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF4,0x04,0x04, -0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x53,0x00,0x04,0x04,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x0A,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xB8,0x00,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0xD6,0x00, -0xF5,0x04,0xDE,0x54,0x00,0xF7,0x56,0x00,0x53,0x00,0xD5,0xF5,0x00,0xDF,0x04,0x04, -0x04,0x04,0x04,0xD9,0x00,0xF3,0x04,0xDB,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x5C,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x59,0xDE,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x09,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xF7,0x55,0xD8,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4, -0x54,0x59,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x5C,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x54,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x0D,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04,0x57,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x5D,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x55,0x04,0x04,0x00,0xF5,0x04, -0x04,0x04,0x04,0xDA,0x5E,0xE1,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD5,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x55,0x00, -0xDE,0x04,0x04,0x04,0x04,0xB3,0x00,0x00,0x00,0x60,0x04,0x04,0x04,0x04,0xF5,0x54, -0xDB,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x5B,0x04,0x5B,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x0A,0x00,0x55,0x04,0x04,0x04,0xD5,0x54,0xB3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0xD6,0x04,0x04,0x54,0x53,0x04,0x04,0x04, -0x04,0x04,0x57,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF7,0x04, -0x04,0x04,0x04,0x56,0x00,0x59,0xDA,0x58,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0xB8,0xB3,0x00,0x00,0x00,0xF6,0xE1,0x04,0x00,0xF6,0x04,0x00, -0xF6,0xD8,0xB8,0x53,0x00,0x00,0xC6,0xF7,0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x56, -0xB3,0x00,0x00,0x00,0xF6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x56,0xB3,0x00, -0x00,0x00,0xF5,0x0D,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0xF7,0x53,0x00,0x00,0xC6, -0xF7,0xDC,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD3,0xF7, -0x54,0x00,0x00,0xB3,0x57,0x04,0xF6,0x00,0x04,0x00,0xF6,0x0D,0xF4,0x00,0x00,0x00, -0xF5, -0x0A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x57,0x00,0xF6,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x5C,0xB3, -0x00,0x00,0xF3,0x60,0x04,0x04,0xB8,0x54,0x00,0x00,0xB3,0x58,0x04,0x04,0x04,0x00, -0xF6,0xE1,0xF4,0x00,0x00,0x54,0xF7,0xDB,0x04,0x04,0x04,0x04,0xDC,0xF7,0x53,0x00, -0x00,0x54,0x55,0xD3,0x04,0x04,0x04,0x00,0xF6,0xD8,0xB8,0x53,0x00,0x00,0xC6,0xF7, -0xDC,0x04,0x04,0x04,0x04,0x04,0xD9,0x56,0xB3,0x00,0x00,0x00,0xF5,0xDF,0x04,0x00, -0xF6,0x04,0x00,0xF6,0xB8,0x00,0x09,0x04,0x04,0x5B,0xC6,0x00,0x54,0x57,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xF6,0x00,0x04,0xF5,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x0D,0x54,0xB8,0x04, -0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A, -0x00,0x56,0x04,0xF7,0x00,0x58,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3,0x04,0x04,0xF5, -0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD7,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04, -0x04,0x54,0x55,0x04,0x04,0xD8,0x00,0xF7,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04, -0x04,0x57,0x55,0x04,0x00,0xF5,0x04,0x04,0x04,0xD5,0x00,0xF6,0xD8,0x00,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0xDB,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x0D,0x00,0xF3,0xD8,0x04,0x04,0x04, -0x04,0x60,0x00,0xF4,0x04,0x04,0x04,0x58,0x56,0x00,0x54,0xB8,0x58,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, -0x00,0x59,0x04,0x04,0xF4,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x54,0x53, -0x04,0x04,0x57,0x00,0x0A,0x04,0x04,0x04,0xD5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x60,0x00,0xF6,0x04,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xE1,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD0,0x04,0x04,0x00,0xF5,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0xDA,0x55, -0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xB3,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xF7,0x04,0x04,0x55,0x54,0xB8,0x04,0xDE, -0xF4,0x00,0x00,0xF3,0xDC,0x04,0x58,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF7,0x00,0xD6,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF4,0x00,0x04,0x04,0x04,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0xC6,0x09,0xDC,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x5D,0x00,0x53,0xD8,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x55,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x54,0x00,0xE1,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x5B,0x00,0xF6,0x04,0x00,0xF6, -0x57,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x55,0x54,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0x00,0xD6,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x55,0x04,0x04,0xB3,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xF4,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x58,0x00,0x56,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0xDE, -0x00,0x55,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x57,0x09,0x57,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x57,0x54,0x57,0x04,0x04,0x04,0x53,0x09,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x57,0x00,0x5A,0x04,0x04,0x04, -0x04,0x5B,0x00,0xF6,0x04,0x04,0x04,0xF5,0x00,0xF9,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0xDE,0x04,0x04,0x04,0x04,0xB8,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x0A,0x00,0xF3,0x04,0xDA,0x55,0x00,0x0D,0x04,0x04,0x04,0x04,0xB3,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x16,0x04,0x04,0x04,0x04,0xDB, -0x00,0xF4,0x04,0xB3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04, -0x04,0x04,0x53,0xF5,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x53,0x54,0x04, -0x53,0x00,0xD2,0xDA,0x04,0x57,0x00,0x56,0x04,0xF7,0x00,0x0A,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xE0,0x54,0xDB,0x04,0x04,0x59,0x00,0xB8,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x56,0x54,0xF5,0xDB,0x04,0x04,0x5D,0x00,0x54,0xD7, -0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x53,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04, -0x57,0x00,0xF5,0xD9,0xDA,0x04,0x04,0xD6,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x56,0x00,0x55,0xDA,0xDA,0xDA,0x04,0xF7,0x00,0xB8,0x04,0x04,0xDF,0x00, -0x55,0xDA,0x04,0x04,0x57,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x00, -0x00,0x00,0xF6,0x04,0x04,0x04,0x04,0x58,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x53,0x00,0xD3,0xDA,0xDA,0xD3,0x00, -0x53,0x04,0x04,0x0A,0x00,0xB3,0xDC,0xDA,0x04,0x04,0x59,0x00,0xB3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x56,0x04,0x04, -0x04,0xDC,0xB3,0x00,0xE1,0x04,0x04,0xD8,0xF4,0x00,0x55,0xD3,0x04,0xF1,0xF2,0x04, -0xDB,0xF7,0x00,0x54,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x00,0x00, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0xD0,0x00, -0xF3,0x04,0x04,0x04,0xD7,0x00,0x00,0x55,0xD3,0x04,0xDA,0xDA,0x04,0x04,0x5B,0x00, -0x00,0x16,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0xD5,0xF7,0x00,0x00,0xD0, -0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0xF4,0xE1,0x04,0xDA,0xDA,0xDA, -0x04,0xDE,0xF5,0x00,0xF3,0xD9,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD6,0x00,0x54,0xDC,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD5,0x00,0x00,0x00,0xF6,0x04,0x00,0x00,0x00,0x53,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0xF5,0x00,0xF6,0xDE,0x04,0xDA, -0xDA,0x04,0x04,0x59,0x00,0x00,0x58,0x04,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04, -0x04,0xDC,0xF3,0x00,0x5C,0x04,0x04,0xF2,0x54,0x00,0xF6,0xDE,0x04,0xDA,0xDA,0xDA, -0x04,0xDE,0xF5,0x54,0x53,0xDC,0x04,0x04,0x00,0xF6,0xD4,0x04,0x04,0x04,0x04,0x0D, -0x00,0x00,0xDC,0x04,0x04,0xF4,0x00,0x17,0xDA,0x04,0x04,0x55,0x00,0x5B,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0xB3,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x00,0xB3,0x04,0x04,0xF2,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x00, -0xF4,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0xDC,0x00,0x00,0xD3, -0x04,0x04,0x04,0xD3,0x00,0x54,0xD5,0x04,0x04,0x04,0xDF,0x00,0x55,0x04,0x04,0x04, -0x04,0x04,0xDB,0xC6,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0x57,0x04,0xD0,0x00,0x54,0xD0,0x04,0x04,0xDF,0x00,0x58,0x04,0x04,0x04,0x04, -0x04,0x04,0xD7,0xF5,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x57,0xC6, -0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x16,0xF3,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0x54, -0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0xDA, -0x04,0x04,0x04,0x54,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF4,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD7,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6, -0xDA,0x00,0x00,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x04,0x04,0x04,0xF5,0x09, -0x04,0x04,0x04,0xB8,0x00,0x55,0xD2,0xDC,0xF7,0x00,0x56,0x04,0x5B,0x54,0x54,0x55, -0xF6,0x00,0x53,0xDB,0x04,0xD7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0x09,0xC6,0xF7,0xF6,0x00,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0xB8,0x54,0x54,0x04,0x57,0x00,0xB3,0xF2,0x04,0x04,0x04,0x04,0xD6, -0x5B,0x00,0x00,0x59,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0xF6,0x54,0x53, -0x55,0xF7,0xF5,0x54,0x00,0x5B,0x04,0x04,0x58,0xF7,0xF7,0x00,0xF6,0xDA,0x04,0xF4, -0x00,0x53,0x55,0x55,0x53,0x54,0xF4,0xD8,0x04,0x04,0x04,0xF4,0x00,0xF4,0xF7,0xF5, -0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x54,0x00,0xF6,0xDA, -0x04,0x04,0x04,0xE1,0x00,0xF4,0xF7,0xF7,0xF7,0xF7,0xF7,0xD0,0x04,0x04,0x04,0x04, -0x04,0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, -0xF7,0x00,0x00,0x04,0x04,0x5B,0x00,0x54,0x55,0x55,0x00,0x00,0x5A,0x04,0x04,0x04, -0x56,0xC6,0x09,0x55,0xF7,0xF3,0x00,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x00,0xF3,0xF7,0x55,0x00,0x54,0x56, -0x04,0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0xF4,0x55,0xF7,0xF5,0x00,0x00,0xF3,0xDE, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x00,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0x55,0xF4,0x00,0x00,0x17,0x04,0x04,0x04, -0x04,0xD7,0xF4,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00,0xC6,0x60,0x04,0x04,0x04, -0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF3,0x00,0x00,0xF3,0xDE,0x04,0x04,0x04,0x00,0x53, -0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x59,0x04,0x00,0x53,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7, -0x04,0x04,0x04,0x04,0xDC,0xF5,0x54,0x54,0xB3,0x55,0xF7,0x55,0xF3,0x00,0x00,0xF7, -0xD9,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x59,0x00,0xF4,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x55,0x00,0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xF7,0x00,0x00,0xF3,0x55,0xF7,0xF6,0x54,0x00, -0xC6,0x5E,0x04,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xF5,0x00,0x09,0xF5, -0x04,0x04,0x04,0x04,0xD7,0xF4,0x00,0x00,0xF3,0x55,0xF7,0x55,0xF3,0x00,0x00,0xF5, -0xDC,0x04,0x04,0x04,0x00,0x53,0xF7,0xF7,0xF7,0x55,0xB3,0x00,0x00,0xF9,0x04,0x04, -0x04,0xE1,0x00,0x00,0xF6,0xF7,0xB3,0x00,0xF4,0x04,0x04,0xF7,0xF7,0xF7,0x53,0x00, -0xF7,0xF7,0xF7,0xF7,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0xDF,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD6, -0x04,0x57,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x56,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0x54,0x04,0x04,0x04,0xF6,0x00,0x59,0x04,0x04,0x04,0x04,0x04, -0x58,0x00,0x55,0xDA,0x04,0x04,0xF3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0x58,0x04,0x04,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0x00,0x04,0x04, -0x59,0x00,0x00,0x04,0x04,0xF6,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54, -0xF4,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x00,0xD7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6, -0xF4,0x00,0x54,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x53,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x55,0x0C, -0x04,0x00,0xF6,0xDA,0xF9,0xF3,0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x00,0xF6,0x04,0x00,0xF6,0x00, -0xF6,0x04,0x04,0x04,0x04,0x59,0x00,0xF2,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0xD8, -0x55,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04,0xF9,0xB3,0x00,0x00,0xF6,0xD3,0x04, -0x04,0x04,0xF6,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x53,0x00,0x00, -0xF5,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x0A,0xF5,0x04,0x56,0x56,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x17,0x00,0x59,0x04,0x04,0x04,0x57,0xB3,0x00,0x00,0x00,0xF5, -0xD6,0x04,0x04,0x04,0xF3,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0x56,0xB3,0x00,0x00, -0x53,0xB8,0xD8,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0xF6,0xD2,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0xD6,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0x04,0x04,0x5E,0xF3,0x00,0x00,0xB3,0x5D,0x04,0x04,0x04,0x04,0x04,0x16,0xF3,0x00, -0x00,0x54,0x55,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD2,0xF6,0x00,0x00,0x00,0xF3,0x5C,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD6,0x55,0xC6,0x00,0x00,0x00,0xF4,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x54,0xF6,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5E, -0xF5,0x54,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x53,0xF6,0x5D,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF5,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0xF9,0xF5,0x00,0x00,0x00,0x00,0xB3,0xF7,0xDE,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x55,0x00,0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00, -0xF6,0x04,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x00,0x00,0xF3,0x56,0xDB,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF4,0x57,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x60,0xF6,0x54,0x00,0x00,0x00,0x54,0xF6,0xDF,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x55,0xDE,0x04,0x04,0x04,0x04,0x04,0xD0,0xF5, -0x00,0x00,0x54,0xF7,0xD9,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xF6,0x00,0xE1, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55,0x04,0xF5,0x00,0xD9, -0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x00,0xD0,0x04,0x16,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x17, -0x04,0x17,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xD8,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x0A,0xF4,0x04, -0xDC,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x5A,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x54,0x00,0x56,0xD8,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0xC6,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x54,0x00,0x5B,0x04,0x00,0xF6,0x04, -0xF7,0x00,0xF4,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xF3, -0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0xD0,0xD7,0xB8,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xEC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x00,0x00, -0x49,0x04,0x00,0x00, -0x1B,0x00,0x00,0x00, -0x00, -0x00, -0x06,0x74,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, -0xB8,0x5D,0x17,0x17,0x5D,0xF7,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x54, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xB8,0xF2,0x04,0x04,0x04,0x04, -0x04,0x04,0xE1,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x17,0xDC,0xEF,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x55,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x60,0x5D,0x54,0x5D, -0x60,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDC,0xD6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5,0xDF,0xFA,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x57,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0xB8,0xD9,0xD9,0xDF,0xB8,0x55,0xF7,0x5A,0xD2,0x04,0xDE, -0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x58,0xDE,0x04,0xF2,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDE,0xD9, -0x17,0x00,0x00,0x00,0x00,0xDA,0xDC,0xEF,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD2,0x04,0x5B,0x00,0x5B,0xDA,0xD2,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x5E,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xB8,0xDC,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD8,0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0xD7,0xDB,0xB8,0x54,0x00,0x00,0x00,0x00,0xF3,0xDE,0x04,0x59,0x54,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF, -0x04,0x5A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x53,0xD3,0xD5,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xDE,0x57,0x54,0x00,0x00, -0x00,0xD6,0xD3,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0xDC,0xD9,0x58,0x00,0x00,0x00,0x59,0xD9,0xD7,0xF5,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xB8,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x56,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, -0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xC6,0x00,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF6,0xDC,0xDA,0x60,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xDE,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0xDD,0x5A,0x53, -0x00,0x00,0x00,0x00,0x54,0x54,0xF7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60, -0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDB,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, -0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xD8, -0x17,0x00,0x00,0x00,0xD6,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, -0xF2,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD3,0xD6,0x00,0x00,0x00,0x00,0xF7, -0xD0,0xDB,0xDB,0xD0,0xF7,0x00,0x00,0x00,0x00,0x58,0xDE,0xDB,0xD8,0xD7,0x60,0xF3, -0x00,0x00,0x00,0x00,0x57,0xD0,0xF3,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xD9,0x56, -0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0xD0,0x53,0x54,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDE,0xDD,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x53,0xDC,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF7,0xD6,0xD7,0xD8, -0xD8,0xD7,0x12,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x53,0xB8,0xE1,0xDD,0xD8,0xD3, -0xDF,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, -0x00,0x00,0x00,0x00,0xB3,0x16,0xF2,0xD9,0xD9,0xDE,0x5D,0x53,0x00,0x00,0x00,0x00, -0x54,0xF5,0xDF,0xD2,0xD9,0xD9,0xDE,0xFA,0xB3,0x54,0x00,0x00,0x00,0xD0,0xDA,0xF7, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xE1,0xDD,0xD8,0xDC,0xD6,0x55, -0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDA,0xDE,0x53,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0xF6,0xD9,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3, -0x5B,0xD0,0xDC,0xD8,0xD9,0xD7,0xD6,0x56,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0x03,0x00,0x04, -0x04,0x04,0x04,0xDA,0xDB,0xD2,0xD6,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF5, -0xFA,0xD0,0xDC,0xDA,0xD9,0xD3,0xE1,0x59,0x53,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0x04,0xD9,0xD3,0xD0,0x5E,0xF6,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x17,0x54,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xB3,0x59,0xE1,0xD7,0xD9,0xDA,0xD5,0xDE,0x60,0xF6,0x09, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x04,0xDE,0x00,0x00,0xF7,0xE1,0xD5,0xDA,0xDD,0xD6,0xF6,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0x04,0x5D,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xD2,0x00, -0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x59,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0x59,0xD0,0xDC,0xD8, -0xD8,0xD3,0xE1,0x5A,0xF3,0xC6,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x53,0x59,0xE1,0xF1,0xD8,0xD9, -0xF1,0xE1,0x59,0x53,0xF5,0xDF,0xD7,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0xD5,0xDB,0xF7,0x00,0x00,0x00,0x55,0xEF,0xD7,0xD9,0xDB,0xDE,0x59,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF7, -0xD6,0xD7,0xD9,0xDB,0xDE,0x5E,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0xD5,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, -0xD8,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x04,0xB8,0x00,0x00,0x00, -0x00,0x00,0x17,0x04,0xDF,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x0D, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xDF,0x04,0xDF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0xDF,0x00,0x00,0xF3,0xD2, -0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD3,0xD8,0xD9,0xD7, -0xDF,0xF5,0x00,0x04,0xDE,0x00,0x04,0xDE,0x09,0xB8,0xE1,0xDC,0xD8,0xD5,0xD0,0x58, -0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD6,0xF1,0xD8,0xD9,0xF2,0x17,0xF5,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x0A,0xD7,0xD9,0xD8,0xD2,0x17,0xF5,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x57,0xD0,0xDD,0xDA,0xD5,0xD0,0x57,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x57,0xD0,0xDD,0xD8,0xD5, -0xE1,0xB8,0x00,0xF1,0xD7,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x17,0x04,0xD6,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x54,0x58,0xD0,0xDD, -0xDA,0xDB,0xDE,0x5A,0x00,0x54,0x00,0x00,0x04,0xDE,0x00,0x56,0xD0,0xD5,0xDA,0xDD, -0xD0,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x58,0xD0,0xD5,0xDA,0xD5,0xD0,0x56, -0xC6,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xC6,0x56,0xD0,0xDB,0xD9, -0xDE,0x56,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x54,0x59,0xDE, -0xDB,0x04,0xD5,0xD6,0xF5,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x17, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0xD9,0xF4,0x00,0x00, -0x00,0x00,0xD7,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x60,0x00,0x00, -0x00,0x00,0x00,0x5B,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0xF5,0x04,0xF2,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xD0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD0,0x00,0x00,0x00, -0xFA,0x04,0x55,0x00,0x00,0x00,0x00,0xC6,0x56,0xF2,0x04,0x04,0x04,0xD9,0x5B,0x00, -0x00,0x00,0x00,0x00,0x00,0xFA,0xD9,0x55,0x00,0x00,0xF7,0xDB,0xD8,0xD0,0xE1,0xD9, -0xDB,0xF7,0x00,0x00,0xEF,0x04,0xDB,0xE1,0xD6,0xF1,0x04,0xDE,0xF3,0x00,0x54,0x58, -0xD9,0xD5,0xF7,0x00,0x00,0x00,0x00,0x00,0x5E,0x04,0x60,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xE1,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x5D, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x0A,0xDB,0xF3, -0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xDB, -0x56,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xDC,0x04,0x04,0x0A,0x0A,0x0A,0x0A, -0x0A,0x0A,0x0A,0x0A,0x00,0x53,0x59,0xD8,0xD9,0xD0,0xD6,0xDE,0x04,0xDC,0xF7,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xF6, -0xDE,0x04,0xD7,0xD6,0xE1,0xDC,0x04,0xDE,0xF4,0x00,0x00,0x00,0xB8,0xDC,0x04,0xD7, -0xD6,0xD6,0xDC,0x04,0xDE,0xF5,0x00,0x00,0x00,0x56,0x04,0xD6,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x5D,0xDA,0xD9,0xD0,0xD6,0xDE,0x04,0xDB,0x56,0x00,0x00,0x00, -0x00,0x00,0x00,0xDF,0x04,0x60,0x54,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0xD6,0xDA,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0x60,0xDC, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x60, -0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xDC,0x04,0xDC,0xD0,0xD6, -0xD6,0xD0,0xDB,0x04,0xDE,0x55,0x00,0x00,0x00,0x55,0xDA,0xD0,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0xB8,0x00,0x04,0xDC,0x0A,0x0A,0x0A, -0xE1,0xD2,0x04,0x04,0x17,0x54,0x00,0x00,0x00,0x00,0x5D,0xDB,0x04,0xDB,0xD0,0xD6, -0xD6,0xDE,0xD9,0x04,0xD2,0xF7,0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0xD6,0xD6,0xDE, -0xD5,0x04,0xD9,0x17,0x53,0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x57, -0xD7,0x04,0xD9,0xDE,0xD6,0xD6,0xD0,0xDB,0x04,0xDB,0x16,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, -0xF7,0xD5,0x04,0xDE,0xD6,0xDE,0x04,0xD7,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0xDF,0x04,0xD6,0x00,0x00,0x04,0xDC,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x56,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5, -0x04,0xDE,0x00,0x00,0x00,0xC6,0x56,0xD7,0x04,0xD9,0xD0,0xD6,0xD6,0xD0,0xDB,0x04, -0xD7,0x56,0x54,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0xB8,0xD2,0x04,0xD9,0xDE,0xD6,0xD6,0xDE,0xD8,0x04,0x04, -0x04,0x04,0xDE,0x16,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xB3,0xDE,0x04,0x59, -0x00,0x00,0x54,0xB8,0xD5,0x04,0xD2,0xD6,0xE1,0xD5,0x04,0xD6,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0x04,0xF2,0xD6,0xD6, -0xD3,0x04,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x5A,0x04,0x04,0xDF, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x04,0xD0,0x00, -0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2, -0xD4,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x04,0x0A,0x0A, -0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0xD2,0xD8,0xF6,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDF,0xD8,0x55,0x00,0x00,0x00,0x59,0x04,0x60,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x53,0xEF,0x04,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04, -0xDE,0x00,0x04,0xDE,0x16,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00, -0x00,0x53,0xDF,0x04,0xDA,0xDE,0xD6,0xE1,0xF1,0x04,0xDC,0x57,0x00,0x00,0x00,0x00, -0x00,0xDF,0xDA,0x04,0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04,0xDE,0x00,0x00,0x53, -0xD6,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x54,0xF3,0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xD9,0xD8,0x59,0xDE, -0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0x04,0xF2, -0xF3,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x00,0x00,0x00,0x00,0x09,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0x54,0xF3,0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04, -0xDE,0xF5,0x00,0x00,0x04,0xDE,0x60,0x04,0xDB,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3, -0x00,0x00,0x54,0xF3,0xE1,0x04,0xDB,0xD0,0xD6,0xD0,0xD9,0x04,0x16,0xDE,0x04,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0xC6,0x56,0xD8,0xD9,0xE1,0xD6,0xDB,0xD8,0x57,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x54,0x54,0xEF,0x04,0xD9,0xD0,0xD6,0xDE,0xD4, -0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0x04,0xDC,0xB3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x04,0x58,0x00,0x00,0x00,0xF7,0x04,0x04, -0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2,0xD9,0xF7,0x00,0x00,0x00,0x55,0xDB, -0xD7,0xF4,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0xDB,0x04,0xE1,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x3E,0x54,0x00,0xD5,0xD0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xDC,0x00,0x00,0x00,0x56,0x04,0x58,0x00, -0x00,0x00,0x00,0x56,0xD9,0xF2,0xB8,0xF3,0xB8,0xD7,0xDA,0x56,0x00,0x00,0x00,0x00, -0x00,0xF4,0xD5,0xDF,0x00,0x00,0xD0,0x04,0x57,0x00,0x00,0x57,0x04,0xD0,0x00,0x58, -0x04,0xDE,0xF6,0x00,0x00,0xF3,0xD6,0x04,0xD6,0x00,0x59,0xD8,0xDC,0xF7,0x00,0x00, -0x00,0x00,0x00,0xF4,0xD5,0xD7,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD8, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x17,0x5A,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x56,0x04,0x58,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0xD9,0xD5,0x56,0x00,0x00,0x00,0x00,0x59,0xD8,0xDC,0xF4,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0xF7,0xFC,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xB8,0xD4,0xD3,0xF7,0x00,0x00,0x00,0x59,0xD8,0xD7,0xB3,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xDE,0x04,0x60,0x00,0x00, -0x00,0xF3,0x12,0x04,0xE1,0x54,0x00,0xF6,0xDC,0xD8,0x5B,0x00,0x00,0x00,0x53,0xDF, -0x04,0xD0,0x00,0x00,0x00,0x00,0xDE,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x56, -0xDA,0xD2,0x55,0x00,0x00,0x00,0x56,0xD9,0xD5,0xF5,0x00,0x00,0x00,0x00,0x00,0xF3, -0xD2,0xD8,0xB8,0x54,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0xF7,0x04,0x0A,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x0A,0xD9,0x04,0xF1,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0x04,0xDB,0xEF,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xD0,0x56,0x00,0x00,0x00,0x00,0x00,0xB3,0x04, -0x04,0xDC,0xF7,0x00,0x00,0x00,0xD0,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0xF6,0xD9,0xDE,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF7,0xD7, -0x04,0xB8,0x54,0x00,0x00,0xEF,0x04,0xD5,0xFA,0xF3,0x00,0x00,0x00,0x00,0xF5,0x17, -0xD9,0xDB,0x56,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD0,0x04, -0xD0,0xB3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0xDB,0x60,0xF4, -0x00,0x00,0x00,0x00,0xB3,0x5A,0xDC,0x04,0xD6,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xD6,0x04,0x59,0x54, -0x00,0x00,0xDF,0x04,0x60,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xD2, -0xF3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0xF4,0xDD,0x04,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0xDE,0x00,0x00, -0x00,0x59,0xD8,0xDB,0x5E,0xF4,0x00,0x00,0x00,0x00,0xF3,0xFA,0xDB,0xD8,0x59,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, -0x58,0xD9,0xDA,0xDF,0xF6,0x00,0x00,0x00,0x54,0xF6,0x04,0x04,0x04,0xDF,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x0D,0x04,0xEF,0x00,0x00,0x00,0xF3,0xD3, -0xDA,0x5D,0x00,0x00,0x00,0xF4,0xD0,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0xF7,0xD8,0xD5,0x56,0x00,0x00,0x00,0x53,0x60,0x04,0xF2, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xDE,0x04,0x04,0xD5,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x04,0xD9,0xF3,0x00,0x00,0x00,0x00, -0x00,0xD2,0x04,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00, -0x00,0x00,0x00,0x53,0xDE,0xDA,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD9,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0xD5,0xE1,0x00,0x00,0x00,0x00,0x55,0xDA,0xE1,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0A,0x04,0xDE,0xF7,0x00,0x00,0x00,0x00,0x56,0xDC,0x04,0x04,0xDE,0x00,0x04,0x04, -0x04,0xD0,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xD0,0x00,0x00,0x00,0x0D,0x04,0xDE, -0xF7,0x00,0x00,0x00,0x00,0x5B,0xD9,0xD9,0xF7,0x00,0x00,0x00,0xDF,0x04,0xDE,0xF7, -0x00,0x00,0x00,0x00,0x57,0xDC,0x04,0x04,0xDE,0x00,0x00,0xEF,0x04,0xD6,0xF5,0x00, -0x00,0x00,0xF5,0xD6,0x04,0xD6,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0xE1,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7,0xDB,0xDC,0x55,0x00,0x00,0x00,0x04, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x54,0x54,0xE1,0x04,0xE1,0xF6,0x00,0x00,0x00,0xF3,0x0A,0x04,0xDE,0x53,0x00, -0x04,0x04,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xD6,0x04,0xD0,0x00,0x54,0x54,0xE1, -0x04,0xE1,0xF5,0x00,0x00,0x00,0xF6,0xE1,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0xDE,0xD8,0xF7,0x00,0x00,0xB8,0xD8,0xDE,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x57,0x04,0xF2,0xF6,0x00,0x00,0x00,0xB8,0xD5,0x04,0x04,0x00, -0x00,0x00,0x00,0x00,0xDF,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF3,0xD5,0x04,0x04,0xD6,0x00,0x00,0x00,0x17,0x04,0x04,0xDA,0x55,0x00,0x00, -0x00,0x00,0x00,0x00,0xB8,0xD8,0xDE,0x00,0x00,0x54,0xD0,0x04,0x56,0x00,0x00,0x00, -0x00,0x00,0x00,0xEF,0x04,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0xD0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0x3B,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x16,0x04,0xF6,0x54,0x00,0xF5,0x04,0x17,0x00,0x00,0x00,0x00,0xD0, -0xDA,0x55,0x00,0x00,0x00,0xF7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDB, -0xF5,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0xDE,0xD9,0xF6,0x00,0x00, -0x00,0x00,0x53,0xDE,0x04,0xEF,0xDA,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x5A, -0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x53,0xDD,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04, -0x58,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x5A,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x55,0xD2,0xD8,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0xB8, -0x54,0x00,0x00,0x00,0x00,0x17,0x04,0x5A,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x59,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, -0x04,0xB8,0x54,0xDF,0x04,0x16,0x09,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x56,0x00, -0x00,0x00,0x58,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00, -0x00,0x00,0x00,0x5E,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD9,0xD2,0xF3, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xF3,0x00,0x00,0x00,0x00,0x54, -0x00, -0x56,0xD0,0xDA,0x04,0xD2,0x5A,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x59,0xD2,0x04,0xDA,0xE1,0x56,0x54,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x5A,0xDA,0xFA,0x00,0xF4,0xF7,0xF5,0x54,0x54,0xF3,0xF7,0x04,0x04,0x0A,0xF7,0x00, -0x00,0x00,0x56,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, -0x59,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDF,0x00,0x00, -0xFA,0x04,0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDB,0xD5,0x55, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xEF,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x04,0xD7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0xD2,0x04,0x60,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0xF4,0xD9, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x55,0xDB,0xDB,0xF7,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x59, -0x04,0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0x04,0x04,0xDE,0x00,0x00,0x57,0xDA,0xD3,0xF7, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD7,0xD8,0x57,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD9,0xD9,0x57,0x00, -0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x04,0x04,0xD9,0x56,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x59,0x04,0xDE,0xB3,0x00,0x00,0x00,0x58,0x04,0xE1,0x00,0x00,0x00, -0x00,0x00,0xF5,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0xD6,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x57,0x00,0x00,0x00, -0x00,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0xDC,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0x00,0x55,0x04,0x04,0x04, -0xDA,0xF6,0x54,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xDF,0x00,0x00,0x00,0x00,0x60, -0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF3,0xD7,0xD2,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x56,0x00, -0x00,0x00,0x00,0x53,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDE,0xF4,0x00, -0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0x04,0xDE,0x00,0x04,0x04,0xDE,0x53,0x00,0x00, -0x00,0x00,0x00,0x53,0xD0,0x04,0x58,0x00,0x56,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00, -0x00,0x00,0x57,0xD9,0xDE,0x00,0x00,0x56,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xDB,0x04,0xDE,0x00,0x56,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xD6,0x04,0x57,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0x04,0xD0,0x53, -0x00,0x00,0x00,0x00,0x00,0x53,0xD0,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, -0x04,0x5B,0x53,0xF5,0xD7,0xD9,0x56,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, -0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x57,0x04, -0xD0,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x5A,0x54,0x04,0x04,0xD0,0x53, -0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x58,0x00,0x57,0x04,0xD0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xDB, -0xDE,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x04,0x00,0x00,0x00,0x00,0xB3, -0xDD,0xDE,0xF6,0xD9,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x04, -0x04,0xD5,0xB3,0x00,0x00,0xD2,0xD2,0xB8,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x17,0x04,0xFA,0x54,0x59,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xDB, -0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x5B,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x69,0xFF,0xAD,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56, -0x04,0x57,0x00,0x00,0x00,0xF1,0xD0,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00, -0x00,0x00,0xD2,0xDD,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0x60,0x00,0xDB,0xD2, -0x00,0x00,0x00,0xC6,0xF2,0xDB,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0xB8, -0x04,0x04,0xD2,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x55,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xC3,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00,0xD7,0xDB,0x53,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0x04,0x0A,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF6, -0xDE,0xDA,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0xD7,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0x04,0xD6,0x00,0xDB,0x04,0xD6,0x0A,0x0A,0x0A,0x0A,0x0A,0xDC,0x04,0x0A, -0x0A, -0x00,0xE1,0xD4,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0xD7, -0xDB,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x00,0x00,0xD2, -0xD5,0xF4,0x00,0x00,0x00,0x00,0x00,0xD5,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x55, -0x04,0xE1,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x60,0x04,0xDF,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x59,0xF2,0x04,0x04,0xD0, -0x57,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0x00,0x00,0x00,0x57,0xD0,0x04,0x04,0xDE,0x59,0x53,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xEF,0xFA,0x00,0x00,0x00,0x00,0x00,0xF6,0xDB,0xFA,0x00,0x60, -0xD9,0x04,0xDA,0xD6,0xB8,0xDD,0x04,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0xD2, -0xDC,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xF1,0xDC,0x53,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0xF6,0xDB,0xDB,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD6,0x5A,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xDA,0xF7,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0xD9,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, -0xDC,0xD9,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x04,0xDE,0x00,0x58,0x56,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0x04,0xDE, -0x09,0x00,0x00,0xF3,0xD2,0x04,0x58,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0xDE,0xD9,0xF5,0x57,0x04, -0x17,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0xF7,0xD9,0xD7,0xF4,0x04,0xDE,0x00,0xF3,0xDC,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0xDC,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xD7,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0xF4, -0x0D,0x04,0xFD,0xF7,0x57,0xDA,0xF1,0xF3,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7,0xDB, -0xD5,0x55,0x00,0x00,0x00,0x00,0xFA,0xDD,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0xD9,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xD7,0xDB,0xB3, -0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xD6, -0x04,0xF7,0xB3,0xDC,0xF2,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04, -0xDF,0xF7,0x04,0xDF,0x00,0x00,0x00,0x00,0x5A,0x04,0x04,0xDA,0x04,0x59,0x00,0x00, -0x00,0x00,0x00,0x00,0xB3,0xF2,0xD4,0xB8,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x54,0x57,0xDA,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xF2,0xD2,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x54,0x5A,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, -0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x16,0x04,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF7,0x04,0xD0,0x54,0xE1,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xE1,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, -0xDE,0x54,0xE1,0xD9,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x5E,0x57,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0xD9,0xB8,0xD0, -0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xD0,0xDA,0x55,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x55,0xDA,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0xD0,0x00,0xD0,0x04,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x55,0x04,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0xDC,0xD5,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF1,0xF1,0x00,0x00, -0x00,0x00,0x00,0x00,0x53,0xDB,0x04,0x00,0x00,0x00,0x54,0x59,0x04,0x5A,0x00,0xD6, -0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0xF4,0x59,0x04,0x57,0x00, -0x55,0x04,0x17,0x00,0xD2,0xD7,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xD2,0xD9, -0xB8,0xD5,0xD7,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x60,0x57,0x04,0xDF, -0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xD7,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0x04,0xD0,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00, -0xF3,0x55,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0x56,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xD6,0x04,0xDE,0x0A,0x0A, -0x0A,0xDC,0xD5,0x0A,0x0A,0x0A,0x54,0x59,0x57,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDC,0xF3,0xD0,0x04,0x56,0x00,0x00,0x56, -0xDA,0xD0,0x00,0xDB,0xD2,0x54,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x04,0x59,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD3,0xF1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04, -0x58,0x00,0x00,0x00,0x00,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, -0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xF4,0xDE,0x04,0x17, -0x00,0x00,0x00,0x00,0x00,0xDE,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xD0, -0x00,0xFA,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x0A,0xD6, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0xD9,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0x5B,0x04,0x16,0x00,0x00, -0x00,0x00,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00, -0x00,0x54,0xB8,0x60,0x0D,0x5E,0x04,0xDA,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF5,0x60,0xF1,0x04,0xD9,0xD6,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0xE1,0xD8,0x04,0xD7,0xFA,0xF4,0x00,0x00,0x00,0x00,0x00,0x00, -0xF1,0xD7,0x00,0x00,0x00,0x00,0x00,0x17,0xDE,0x00,0x58,0x04,0xF1,0x60,0x17,0xF1, -0x04,0x04,0x56,0x55,0xEF,0xDC,0xF7,0x00,0x00,0x00,0x54,0x5B,0x04,0x59,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x60,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0xF5,0x04,0xD0,0x00,0x17,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x54,0xB8,0x04,0x0D,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xFA, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x5D,0x04,0xDF,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0x16,0x00,0x00,0xD6, -0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x54,0xB8,0x04,0xD6,0x00,0xC6,0xD7,0xDC,0xB3,0x00,0x00, -0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xDA,0x56,0x00, -0x04,0xDE,0x00,0xFA,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x60,0x04,0xFA,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x59,0x04,0x04,0x56,0xF5,0x53,0xF5,0x56,0xDF,0xD5,0x04,0xD0,0xF6,0x00, -0x00,0xEF,0x04,0xFA,0x00,0x04,0xDE,0x00,0x00,0xF3,0xD2,0x04,0x57,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD5,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF5,0x04,0xD0,0x00,0x00,0x00,0x00,0x09,0xF5,0xD9,0xDE,0x00,0x00,0xDF, -0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x56,0x00,0xDC,0xF2, -0x00,0x00,0x00,0x00,0xE1,0x04,0xF6,0xF6,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xD9,0xD7,0xF3,0x53,0xDE,0xDA,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF3,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xDB, -0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF3, -0xDC,0xDC,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDC,0xD5,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04, -0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xD5,0x00, -0xDC,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC, -0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xDE,0x00,0xDC,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7, -0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0xDD,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xD2,0xDB,0x00,0x04,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7, -0xD5,0x00,0xDD,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x04,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xDE,0x04,0x0D,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF2,0x04,0x00,0x00,0x00,0x00,0xDE,0xD5,0xF3,0x00,0x56,0x04,0xDF,0x00,0x00, -0x00,0x00,0x00,0x00,0xF6,0xD8,0xD6,0x00,0xF4,0xD9,0xEF,0x00,0x5E,0x04,0xF7,0x00, -0x60,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD8,0x04,0x04,0x56,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0xF6,0x00,0xD7,0xD5,0xF3,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0xD8,0xDE,0x53,0x00,0x00,0x00,0x00,0x00,0x5B,0x04,0xDF,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xDE,0xDB,0xF7,0xC6,0x00,0x0A,0xE1,0x00,0x54, -0x53,0x53,0x57,0xDE,0xD9,0xDE,0xF7,0x00,0x00,0x00,0x56,0xFF,0xFF,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xDC,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0xF7,0xD4,0x04,0x04,0x04,0xD9,0xD6,0xD6,0xD9,0xD5,0xF7,0x00,0xD0, -0xDA,0xB8,0x53,0x00,0x00,0x53,0xD6,0x04,0x04,0x04,0xD2,0x53,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, -0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A, -0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDD,0xE1,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xD0,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xD0,0x04,0x0A,0x53,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00,0x00,0xDE,0xD9, -0xF7,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0xDB,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0xF3,0xDC,0xF1,0xB3,0x00,0x00,0x00,0x00,0xD7, -0xDC,0x53,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xE1,0x00,0x00,0xF3,0xE1,0x04,0x04, -0x04,0x04,0x04,0x04,0xF1,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xDB,0x04,0x04,0x04,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x55,0x04,0x04,0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x5A,0x00, -0x00,0x00,0x00,0xF2,0x58,0x00,0xE1,0x04,0xF7,0x00,0x00,0xF5,0xD2,0x04,0x59,0x54, -0x00,0xFA,0xD7,0xE0,0x00,0x00,0x00,0xF3,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0xF6,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x58, -0x04,0xDF,0x00,0xDE,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDC,0xD2,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD9,0xF4,0x00,0x00,0x00,0x0A, -0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6,0x04,0xD2,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0xDA,0x57,0x5B,0x04,0xD0,0x53,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0xD6,0x04,0xF7,0x00,0x00,0x16,0x04,0x59,0x54,0x00,0x00,0x04,0xDE,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xDF,0x00,0x00,0x04,0xDE,0x00,0xD0, -0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xD8, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x59,0x54,0x00,0x00,0x00,0x55,0x04,0xDE, -0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x04,0xDF,0x56,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04, -0xD0,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0x59,0x54,0x00,0x55,0xDA,0xD6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x54,0xDE,0xDB,0xB3,0x00,0x03,0xDA,0xF6,0x00,0x00,0x54, -0xDD,0xF2,0x00,0x00,0xF2,0xD5,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, -0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04, -0xDA,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xD6,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6, -0xDB,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x17,0x04,0x59,0x54, -0x00,0x00,0x00,0x00,0x00,0x59,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xDE,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00,0xD8,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xDE,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0xDA,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x04,0xDE,0x56,0xDA,0x04,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x60,0x04,0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD8,0x00,0xDA,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0xF3,0xFA,0xD2,0x04,0xD8,0xEF,0xF3,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, -0x00,0x00,0xF7,0x04,0x0D,0x00,0x00,0x00,0xF2,0xD5,0xF3,0x00,0x00,0x00,0x00,0x00, -0x16,0x04,0x57,0x00,0x00,0xD0,0xDC,0x00,0xDE,0xD7,0x00,0x00,0x55,0xD8,0x0A,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0x04,0xE1,0x00,0x00,0xFA,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17, -0x04,0x17,0x00,0x00,0x00,0x00,0xDC,0xDA,0x04,0xF5,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0xF7,0x04,0xDA,0xFA,0x00,0x5A,0x04,0xFA,0xF3,0x57,0xDE,0x04,0x04, -0x04,0x04,0xD5,0x55,0x00,0x00,0x4D,0xF9,0x69,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD0,0xD7,0x00,0x00,0x00,0x59,0x04,0xB8,0x54,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF5,0xD0,0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xE1,0x04,0x53,0xF7,0xD0,0xDB,0xDB,0xD0,0xF7,0x00,0x00,0x56,0xD4,0xDC,0xB8,0x54, -0xB3,0xE1,0x04,0xD0,0xF3,0x17,0x04,0x5D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A, -0x0A,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xDB,0xF3,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD6,0x04,0xE1,0x53,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xFA,0x00,0x00,0xF7,0xD9,0xD0,0x00,0x00,0x00, -0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56, -0x04,0xDF,0x00,0xDE,0xDB,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xEF,0x00, -0x00,0x00,0x00,0x00,0x16,0x04,0x5A,0x00,0x00,0x00,0x00,0xDF,0x04,0x5D,0x00,0x00, -0x00,0x00,0x00,0xE1,0x04,0x5A,0x00,0x53,0xD0,0x04,0xD0,0xB8,0xF3,0xF5,0x59,0xD3, -0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x04,0x04,0x04, -0xF7,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x55,0x04,0x04, -0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xDC,0xD9,0x56,0xC6,0x00,0x00,0xDB, -0xF6,0x00,0xD0,0x04,0xF3,0x00,0x00,0x00,0xF7,0xD9,0xD0,0x00,0x00,0x00,0xD0,0x16, -0xC6,0x00,0x00,0x00,0xDF,0x04,0xD0,0xEF,0xEF,0xEF,0xEF,0xEF,0xD0,0x04,0xD6,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0x00,0xF7,0xF1,0xD9,0xF7,0x00,0xDB, -0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDB,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xF6,0xD9,0xDE, -0x00,0x00,0x00,0xF4,0xDB,0xDE,0x54,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0xF7,0xD9,0xD2,0xF3,0x00,0x00,0x04,0xDE,0x00,0xDD,0xD2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD5,0x00,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0xF2,0x17,0xF4,0x00,0x00,0xDC,0xF1,0x55,0x5A,0x17,0xEF, -0xDF,0x5D,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xD5,0x00,0x04,0xDE,0x00, -0xF7,0xD0,0xDE,0xD7,0xD8,0x04,0xDE,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x55,0xDF,0xD9,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0xD7,0xDC,0xB3,0x00,0x00,0x00,0xD0,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00, -0x00,0xF5,0xD8,0xD0,0x00,0x00,0x59,0x04,0x59,0x54,0x00,0xB8,0x04,0xDF,0x00,0x00, -0x17,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xF2,0x04,0x04,0xD2,0xF3, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDD,0x04,0x04,0xD0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0x0D,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x55,0xD9,0xDE,0x54,0x00,0x00,0x00,0x00, -0x00,0xDE,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0xD5,0xD7,0x54,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0xDE,0x00,0xD5,0x04,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x04,0xDC,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD5,0xD2,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0xD9,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, -0xDE,0x00,0x17,0x04,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x53,0x00,0x00,0x00,0x00,0x00,0x17,0x04, -0x57,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xDB,0xD2, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0x04,0xD7,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0xDC,0x00,0xD5,0xD7,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD7,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF6, -0xD2,0x04,0xD3,0x60,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0xEF,0x04, -0xF7,0x00,0x00,0x00,0x5D,0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0xF2,0xDC,0x53,0x00, -0x00,0x5B,0x04,0x57,0xD4,0xDF,0x00,0x00,0x00,0xD0,0xDB,0xF4,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0xD5,0x04,0xD9,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x57, -0x00,0x00,0xF4,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0xD8,0xB8, -0x54,0x00,0x00,0xDB,0x04,0x04,0xF4,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xF7, -0x04,0xDA,0x16,0x00,0x00,0xD6,0x04,0x04,0x04,0xD9,0xD6,0x56,0xF4,0x5A,0xD8,0xD6, -0x00,0x00,0xFF,0xFF,0xD8,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0xDA,0xF4,0x00,0x00,0xF7,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x0A, -0xDB,0x04,0xFC,0xF6,0x00,0x00,0x00,0x54,0x00,0x00,0x54,0x53,0xB8,0x04,0x58,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x59,0xD9,0xD8,0xEF,0xD0,0x04,0xD6,0x53, -0x00,0xF4,0xDC,0xDC,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x57,0x04,0x59,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD6,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54, -0x5A,0xDA,0xF1,0xF4,0x00,0x00,0x00,0x17,0x04,0x5A,0x00,0x00,0x00,0xDE,0x04,0x00, -0x00,0x00,0x00,0xF7,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x56,0x00,0x5A, -0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0xF4,0xDB,0xD2,0x00,0x00,0x00,0x00,0xF4,0xD2,0xD8,0x17,0x55,0xB3,0xF7,0xE1,0x04, -0xDE,0xB3,0x00,0x5B,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0xF6,0xD3,0xD8,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xFA,0xD7,0x04,0xDA,0xD0,0xB8,0x00, -0x00,0x00,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD6,0xD8,0x04,0xD7,0xFA,0xF4,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0xB8,0xDB,0xDB,0x56,0x00,0x00,0x04,0x53,0x00,0x0A,0x04, -0xF7,0x00,0x00,0x00,0x00,0xD6,0xDA,0x55,0x00,0x00,0x56,0xF2,0x00,0x00,0x00,0x00, -0x55,0xD8,0xD6,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0xF7,0x00,0x00,0x00,0x00,0x04, -0xDC,0x0A,0x0A,0xD6,0xE1,0xF2,0xDA,0xDB,0x57,0x00,0x00,0xDA,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, -0x54,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x56,0xD8,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x60,0x04,0x58,0x00,0x00,0x00,0x00, -0xEF,0x04,0xB8,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xF3,0xD2,0xD8, -0xB8,0x00,0x00,0x00,0x04,0xDE,0x00,0xDA,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0xD6, -0xD0,0xDB,0x04,0xD2,0xF4,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0xF5,0x17,0xDA,0xD7,0xF3,0x00,0x00,0x00,0x00,0x55,0x60,0xDE,0xDA,0x04,0xB6,0xB8, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x57,0x04,0xDF, -0x00,0x00,0x00,0x00,0x58,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x5C, -0x00,0x00,0xF6,0xDA,0xD6,0x00,0x00,0x60,0x04,0x56,0x00,0x00,0x56,0x04,0x17,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x58,0xD6,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF4,0xDC,0xD2,0x53,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x03,0x04,0xB8,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xFA,0x04,0xDE,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x55,0x04,0xD0,0x00,0xD0,0x04,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, -0xF5,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04, -0xDE,0x00,0xD0,0x04,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0x04,0xD0,0x54, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0xD4,0x55,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0x04,0x00,0x04,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC, -0xD7,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x53,0xD0, -0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xD7,0x00,0x00,0x00,0x00, -0x00,0x00,0xD2,0x04,0xF6,0x00,0x00,0x00,0x00,0x00,0x0D,0x04,0xB8,0x00,0x04,0xF1, -0x54, -0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD5,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF7,0x04,0xD0,0x00,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0x04,0xD0,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF7,0x04,0x04,0x00,0x04,0xD2,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xDF,0x53,0x00, -0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x00,0xF4,0xDB,0xDE,0x00,0x00,0x00,0x00, -0xF4,0xDB,0xDE,0x54,0x00,0x00,0x00,0xF7,0x04,0xDF,0x00,0x00,0x00,0xF6,0xD8,0x04, -0x04,0xB8,0x00,0x00,0x00,0x59,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD8, -0x5A,0xD8,0xDE,0x53,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0x00,0x00,0x00,0xEF, -0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDB,0xD7,0xF4,0x00,0x00,0x53, -0x16,0x04,0x17,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD2,0xD9,0xF7,0x00,0x00, -0x00,0x00,0x5A,0xDF,0x5D,0xF6,0x00,0x00,0x00,0x00,0xFA,0x56,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0xB8,0x00, -0x00,0xB3,0x04,0xEF,0x00,0x00,0x00,0x00,0xF7,0xDE,0x04,0xDA,0xD9,0xD6,0xF6,0x00, -0x00,0x00,0x00,0x57,0xDF,0xDF,0x57,0x00,0x54,0xDE,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xF7,0xD0,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x5D,0x04, -0x17,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0xF4,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x58,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53, -0xD5,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xD0,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0xFA,0xD6,0xD2,0x04,0xF1,0xF7,0x00, -0x00,0x00,0x00,0xB3,0xD2,0xD5,0xF6,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xD7, -0xDA,0x5E,0x00,0x00,0x00,0xF3,0x0A,0x04,0xD0,0x00,0x00,0x53,0xD2,0xD8,0x5A,0x00, -0x00,0x00,0x53,0xDF,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57, -0x00,0x00,0x00,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xDE, -0xD8,0xF6,0x00,0x00,0x00,0x00,0x00,0x53,0x59,0x04,0x17,0x00,0x04,0xDE,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x58,0xDE,0x04,0x04,0xDE,0x58,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, -0x00,0x57,0xD0,0x04,0x04,0xDE,0x58,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x54,0xB8,0xDB,0xD9,0xF7,0x00,0xD9,0xF6,0x00,0x58,0x04,0x17,0x00,0x00,0x00, -0x00,0x56,0x04,0x17,0x00,0x00,0xF4,0xD9,0x00,0x00,0x00,0x00,0x54,0xE1,0xD9,0xF6, -0x00,0x00,0x09,0xF5,0xDB,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xC6,0xF2,0xD9,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0x0A,0x00,0x00,0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x57,0x00,0xD9,0xD2,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xDC,0x04,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0xFA,0x04,0xE1, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x53,0xF1,0xD3,0x53,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00, -0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0xDF,0x04,0x17,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xD2,0xD5,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xE1,0x04, -0xDF,0x00,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF2,0xDB,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04, -0x5D,0x00,0x00,0x00,0xDF,0xD8,0x04,0xD2,0xDF,0xB8,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00, -0x53,0xDC,0xD7,0x54,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x55,0x00,0x00,0x00,0xF2, -0xD3,0x00,0x00,0xD0,0xDB,0xB3,0x00,0x00,0x53,0xD5,0xF2,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDF,0x04,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF5,0xDB,0xF2,0x00,0x55,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x5A,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x53,0xDC,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x54,0xB8,0x04,0xD6,0x00,0x00,0x00,0x00,0xD6,0x04,0x56,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x57,0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5,0x04, -0xDE,0x00,0x04,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x54,0x00,0xD0,0x04,0x57,0x00, -0x57,0x04,0xDE,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0xDE,0x00,0x00,0x57, -0x04,0xDE,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xDB,0x04,0xDE,0x00,0x58,0x04, -0xD6,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x12,0x04,0x57,0x00,0x00,0x00,0x04,0xDE, -0x00, -0x00,0x00,0x00,0x59,0x04,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04, -0x04,0x00,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xE1,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0xF6,0xDC,0xDB,0xF7,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0x55,0xDA,0x04, -0x5A,0x00,0x00,0x00,0x00,0x00,0xD2,0xD8,0xF4,0x00,0x04,0x04,0xB8,0x00,0x00,0x00, -0x00,0x00,0x56,0x04,0xD0,0x00,0x59,0x04,0xD0,0x54,0x00,0x00,0x00,0x00,0x54,0x53, -0xD0,0x04,0x58,0x00,0x04,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x54,0x53,0xD0,0x04, -0x57,0x00,0x58,0x04,0xD0,0x53,0x00,0x00,0x00,0x00,0x00,0x53,0xD0,0x04,0x04,0x00, -0x04,0xDA,0x55,0x00,0x00,0x00,0x00,0xD0,0x04,0xF4,0x00,0x00,0xF4,0x5B,0x56,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDE,0x04,0x00,0x00,0x5B,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0xB8, -0x00,0x00,0x00,0xDF,0x04,0xF7,0x00,0x00,0x00,0x00,0xDE,0x04,0xDC,0x00,0x00,0x00, -0x00,0xF3,0xD5,0xD0,0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0xDF,0x00,0x16,0x04,0x17, -0x54,0x00,0x00,0x00,0x5B,0x04,0x60,0x00,0x00,0x00,0x00,0xF7,0x04,0xE1,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x0A,0x54,0x00,0x00,0xF3,0x04,0xD0,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0xD8,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0xFF,0xFF,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x58,0xFA,0x04,0xDF,0x58,0x58,0x58,0x04,0xF2, -0x58,0x58,0x00,0xF5,0xDC,0x04,0xD2,0xFA,0xF6,0x00,0x00,0x00,0x00,0xF3,0xD0,0x04, -0xDA,0x04,0x04,0xD0,0xF3,0x57,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xD6,0x04,0xDE,0xDB,0xDA,0xDF,0x53,0x00,0x53,0xD2,0xDC,0xF6,0x00,0x00, -0x00,0x00,0x00,0x17,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3, -0x04,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD9,0xF3,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xDE, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x59,0x54,0x00,0x00,0x00,0x00,0x00, -0x56,0xDA,0xD6,0x00,0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0xE1,0x04,0x04,0xD3,0xD6, -0xE1,0xDC,0x04,0xDE,0xF5,0x00,0x00,0x00,0xB8,0xD8,0x04,0xD2,0xD6,0xD6,0xF1,0x04, -0xF2,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x54,0x00,0x00,0x00, -0xF6,0x04,0x04,0xDE,0xD6,0xD0,0x04,0x04,0x55,0x00,0x00,0xDB,0xF2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF5,0x04,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0xB8,0xE1,0xD8,0x04,0xD2,0x5C,0xF3,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x5A,0xD2,0x04,0xD4,0xE1, -0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x57, -0x04,0xE1,0x00,0xD2,0x59,0x54,0x53,0xD7,0xDB,0xF7,0x00,0x00,0x00,0x53,0x04,0xD3, -0x00,0x00,0xF4,0xD8,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0x17,0x00,0x00,0x00,0x16, -0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xB3,0x55,0x5A,0xDC,0xDB, -0xF7,0x00,0x00,0xDE,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xB3,0xD9,0xD2,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xDA,0xF5,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x17,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x58,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x54,0xD0,0xD9,0xF6,0x00,0x04,0xDE,0x00, -0x04,0xDE,0x00,0x00,0x56,0xDA,0xDE,0x53,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xDE, -0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xDA, -0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0xD7,0xD9, -0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xD9,0xDE, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xDA,0xE1,0x00,0x00,0xFA, -0x04,0xD0,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x55,0xD8,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDA,0x57, -0x54,0x00,0x00,0x00,0x54,0xDC,0xD2,0x00,0x00,0x00,0x00,0xDF,0x04,0xF7,0xF3,0xD9, -0xD0,0x00,0x00,0x00,0x00,0xE1,0x04,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xD4, -0x04,0x04,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x57,0x54, -0x00,0xEF,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDB,0x55, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x04,0x58, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xDE,0x00,0x00,0x00,0x00,0xDE,0xD9, -0xF6,0x00,0x00,0xF5,0xD9,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xD6, -0x04,0xDE,0xF7,0x00,0x00,0x00,0x00,0x57,0xF1,0x04,0x04,0xDE,0x00,0x04,0x04, -0x04,0xD0,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xE1,0x00,0x00,0x00,0x0A,0x04,0xD0, -0x55,0x00,0x00,0x00,0x00,0x59,0xDB,0xDB,0xF7,0x00,0x00,0x00,0x0A,0x04,0xDE,0x55, -0x00,0x00,0x00,0x00,0x59,0xD5,0x04,0x04,0xDE,0x00,0x00,0xD0,0x04,0xEF,0xF4,0x00, -0x00,0x00,0xF5,0x12,0x04,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0xD0,0x04,0xD6,0xF4,0x00,0x00,0x00,0xF6,0xE1,0xD4,0x04,0x04,0x00,0x04,0x04, -0xD7,0xF7,0x00,0x00,0x00,0x55,0xD7,0x04,0x56,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00,0x56,0xDA,0xD2,0xF3,0x00,0x00,0x00,0x04, -0xDE,0x00,0x04,0x04,0xD0,0xF3,0x00,0x00,0xF4,0xD0,0x04,0x04,0xDC,0xF7,0x00,0x00, -0x00,0x5E,0x04,0xE1,0x00,0x00,0x04,0x04,0xD7,0xF7,0x00,0x00,0x00,0xF7,0xD7,0x04, -0x59,0x00,0x00,0xD0,0x04,0xE1,0xF5,0x00,0x00,0x00,0xF5,0xE1,0x04,0xD0,0x00,0x00, -0x04,0x04,0x04,0xE1,0xF6,0x00,0x00,0x00,0xF5,0xE1,0x04,0xE1,0x00,0x00,0x00,0xD0, -0x04,0xE1,0xF5,0x00,0x00,0x00,0xF6,0xE1,0x04,0x04,0x04,0x00,0x04,0x04,0xDE,0xF6, -0x00,0x00,0x00,0x0A,0x04,0x57,0x53,0x00,0x5A,0x04,0xDF,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00, -0x54,0xF2,0xDD,0xB3,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xD6,0x00,0x54,0x53,0xDC, -0xF2,0x00,0x00,0x00,0x00,0x00,0xFA,0xDA,0xEF,0x00,0x00,0x00,0x00,0x00,0xEF,0xDA, -0x55,0x00,0x00,0x00,0xF7,0xD9,0xD2,0xB3,0x00,0x00,0xDE,0xD8,0xB8,0x54,0x00,0x54, -0xF2,0xD8,0xF6,0x00,0x00,0x00,0x00,0x54,0xD0,0xD8,0x55,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xD6,0x04,0x57,0x54,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x74,0xEC,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0xDA,0x04,0x04,0xDA,0xDA,0xDA,0x04,0x04,0x04,0x04,0x00,0x60, -0x04,0xD6,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xD6,0xF6,0xF6,0xD6,0x04, -0xDF,0x00,0xD2,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x04,0xD6, -0x00,0xF6,0xD0,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55, -0xD4,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xDB,0xD7,0x00,0x00,0x00, -0x56,0x58,0x00,0x57,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x59,0x54,0x00,0x00,0xD9,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0xD0,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xD9,0x00,0x00,0x00,0x00, -0x00,0x00,0xF3,0x56,0xD2,0xD8,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x57, -0x00,0xDE,0x04,0x00,0x00,0x00,0x00,0x60,0x04,0xDF,0xDE,0xDB,0xD9,0xF2,0x16,0xF3, -0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0xDC,0xD9,0xD2,0x17,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0xB8,0x54,0x00,0x00,0xE1,0x04,0x5A,0x00, -0x00,0x00,0x59,0x04,0xD0,0x00,0x00,0xD9,0xDE,0x54,0x00,0x00,0x00,0x00,0x00,0x00, -0xF3,0x04,0xD0,0x00,0xD5,0xD0,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x55,0xDF,0xDB,0x04,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x04,0xDB,0x0D,0x55,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x57,0xEE,0xF5,0x54,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0xDF, -0xDE,0x00,0x00,0xB8,0xD8,0xD3,0xF7,0x00,0x00,0xF7,0x04,0x04,0x57,0x00,0x57,0xD7, -0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDD,0xF3,0x54,0x53,0xD3,0xD7,0x53,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x17, -0x04,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x04,0x0D,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0xDE,0x00,0x00,0xF3,0xDE,0x04,0x58,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD0,0xD9,0xF5,0x00, -0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x60,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0xF4, -0xD7,0xD9,0xF7,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xFA,0x04,0x60,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0xFA,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x0A,0x04,0x5B,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x17,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x04,0xD0,0x00,0x00,0xD7,0xD5,0xF4,0x00,0x00, -0x00,0x00,0x00,0x00,0x53,0x54,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x17,0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD8,0xD0,0x00,0x00,0x00,0x00, -0xB8,0x04,0xDF,0x00,0x00,0x00,0x00,0x56,0x04,0x04,0x04,0x04,0xFA,0x00,0x00,0x00, -0x00,0x5A,0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0xF3,0xD2,0xD8,0xB8,0x55,0xD9,0xD7, -0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x00,0x00,0x00,0xF6,0xD9,0xF2, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xE1,0x00,0x00,0x00,0x00, -0xDB,0xB6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD7,0x53,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x55,0x04,0xD0,0x00,0x00,0x00,0x00,0x59,0x04,0x60,0x00,0x00,0x16, -0x04,0x5A,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDF,0x04,0xDA, -0xDE,0xD6,0xD6,0xD2,0x04,0xD3,0xF7,0x04,0xDE,0x00,0x04,0xDE,0xFA,0xD4,0xD9,0xD0, -0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00,0x00,0x53,0xDF,0x04,0xD8,0xDE,0xD6,0xD6, -0xD7,0x04,0xDC,0xB8,0x54,0x00,0x00,0x00,0x00,0xDF,0xDA,0xD8,0xDE,0xD6,0xE1,0xD7, -0x04,0xD5,0x56,0x04,0xDE,0x00,0x00,0xF3,0xE1,0x04,0xDB,0xD0,0xD6,0xD0,0xDB,0xDA, -0xD6,0xF3,0x00,0x00,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x0A,0x00,0x00,0xF4,0xD0,0x04, -0xDB,0xD0,0xD6,0xD0,0xD9,0xD9,0x59,0xDE,0x04,0x00,0x04,0x04,0x04,0xD9,0xD0,0xD6, -0xD0,0xD9,0x04,0x17,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x17,0x04,0x12,0x54,0x00,0x00,0x04,0xDE,0x00,0x04,0x04, -0x04,0xDC,0xD6,0xD6,0xDC,0x04,0x60,0xB8,0xDB,0xD9,0xD0,0xD6,0xF2,0x04,0xD7,0x55, -0x00,0x00,0x04,0x04,0x04,0xD9,0xD0,0xD6,0xD0,0xD9,0x04,0xDF,0x00,0x00,0x00,0xF3, -0xE1,0x04,0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xD0,0xF4,0x00,0x00,0x04,0xDE,0xFA,0xD4, -0xD9,0xD0,0xD6,0xD0,0xDB,0x04,0xE1,0xF3,0x00,0x00,0x00,0xF3,0xE1,0x04,0xD9,0xD0, -0xD6,0xD0,0xDB,0x04,0x60,0xDE,0x04,0x00,0x04,0x04,0x04,0xDB,0xD6,0x56,0x00,0xF7, -0xDB,0xD9,0xE1,0xE1,0xD9,0xD5,0x55,0x00,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xB8,0x04,0xDF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0xF5,0x00,0x57,0x04,0xF9,0x00,0x00,0x00, -0x00,0x00,0xF6,0xF9,0xF7,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0x17,0x00,0x00,0x53, -0xDE,0xD9,0xF7,0x00,0x00,0x00,0x55,0xDB,0xD7,0xF3,0x00,0xB8,0x04,0xD0,0x00,0x00, -0x00,0x00,0x00,0x00,0x57,0x04,0xDF,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6, -0x04,0xDD,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x3B,0x56,0x94,0x00,0x04,0xDE,0x00,0x04,0xDE,0xDE,0x04,0x53,0xF6,0x55, -0x55,0xDE,0xDE,0x55,0x55,0x55,0x17,0x04,0xB8,0x55,0x00,0xD0,0xDA,0xF6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDD,0xD3,0x53,0x00,0x00,0x53,0xF1,0xDC,0x00,0x5A,0x04, -0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0xD5,0xF4,0x00,0x00,0xF3,0xDC, -0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xD6,0x04,0x58,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x5A,0x00,0x00,0x00,0x17,0xDD,0x55,0xDC, -0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x53,0xD5,0xE1,0x00,0x00,0x00,0xD7,0xD5,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0x04,0xE1,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD5,0xD7,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDB,0x00,0x00,0xF4,0xF3,0x00,0x00,0x00,0x00, -0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xF1,0xD7,0xF4,0xDE,0x04,0x00, -0x00,0x00,0x00,0x57,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xB3,0xF2,0xDA,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0xDA,0xE1,0x00,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0xD2, -0xD9,0x00,0x00,0xD7,0xD5,0x53,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0xEF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF5,0x16,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDC,0x16,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16, -0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xD9,0x00,0x55,0xD9,0x60,0x00,0x00, -0x58,0xD9,0xD8,0xD0,0xD6,0xDD,0xDE,0xD7,0xE1,0x53,0xDE,0xDF,0x00,0x00,0x00,0x00, -0x00,0x00,0x5A,0x04,0x5B,0x00,0x58,0x04,0x5E,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0x04,0xD0,0x00,0x00,0xF6,0xDB,0xD5,0x55,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x56,0xD6,0x58,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4,0xD2,0xDA,0xF7,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xD8,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7, -0xE1,0x0D,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x55,0xDC,0xDB,0xF7,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0xF7,0x04,0xD6,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xD7,0xD3,0x53,0x04,0xDE,0x00,0x04,0xDE,0x00,0x0A,0x04,0xFA,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF4,0xF1,0xDB,0xF7,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xF7,0xD9,0xDC,0xF3,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF2,0xD8,0x00,0xF7,0xDA,0xDC,0xF6,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF6,0xDC,0xD9,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0xE1,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0x17, -0x59,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xB3,0xDC,0xDC,0xB3,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD4,0x55,0x00,0x00,0x00,0x17,0x04,0x57,0x00, -0x00,0x00,0x00,0xB3,0xDB,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0xF6,0x04,0xE1, -0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0xDF,0x00,0x00,0xFA,0x04,0xEF,0x00,0x00,0x00, -0x00,0x00,0x00,0xEF,0x04,0x57,0x00,0x00,0x00,0x00,0xDF,0x04,0x59,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xDA,0x56,0x00,0x00,0x00,0xD2,0xDB,0xB3,0x00, -0x00,0x00,0x00,0x00,0xF7,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x57, -0x04,0xD6,0x00,0x00,0x00,0x00,0xB3,0xDC,0xF1,0x53,0x00,0xD7,0xDD,0xF3,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD7,0xD9,0xD9,0xF2, -0x17,0xF4,0x00,0x04,0xDE,0x00,0x04,0xDE,0x54,0xB8,0xE1,0xDD,0xDA,0xD5,0xD0,0x58, -0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD3,0xD9,0xD9,0xF2,0x17,0xF5,0x00, -0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD6,0xD7,0xD9,0xD9,0xD2,0xDF,0xF6,0x00,0x04, -0xDE,0x00,0x00,0x00,0x54,0x57,0xD0,0xDD,0xD8,0xDC,0xD0,0x57,0x00,0x00,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x59,0xD0,0xD5,0xD8,0xDC, -0xD6,0xF7,0x00,0xDE,0x04,0x00,0x04,0xDE,0xF5,0xDF,0xD3,0xD9,0xD5,0xD0,0x57,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x53,0xDE,0x04,0x59,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x55,0xD0,0xDB,0xD9, -0xDE,0x59,0x00,0x00,0xF7,0xD0,0xDB,0xD8,0xF1,0xEF,0xF6,0x00,0x00,0x00,0x04,0xDE, -0xF3,0x60,0xD2,0xD9,0xD5,0xD0,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0xD0,0xDC, -0xD8,0xD5,0xD0,0x59,0x00,0x00,0x00,0x00,0x04,0xDE,0x54,0xB8,0xE1,0xDD,0xDA,0xD5, -0xD0,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xD0,0xDD,0xD8,0xD5,0xD0,0x56, -0x00,0xDE,0x04,0x00,0x04,0xDE,0xB8,0xD7,0x04,0x17,0x00,0x00,0xF7,0xD0,0xD9,0xDB, -0xD0,0xF7,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0xD6,0x04,0x55,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x58,0x04,0xFA,0x00,0xE1,0xD8,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD7,0x00,0x00,0x60,0x04,0x60,0x00,0x00, -0x00,0x00,0x00,0x5D,0x04,0x0D,0x00,0xD6,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xD7,0xD5,0xF3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x8C, -0x3B,0x00,0x04,0xDE,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0xEF,0xDB,0x00, -0x00,0x00,0x56,0x04,0x58,0x00,0x00,0xD0,0x04,0xF3,0x00,0x00,0x00,0x00,0xD0,0xD7, -0x00,0xD9,0xDE,0x00,0x00,0x00,0x54,0xDE,0xD9,0x00,0xF3,0xDC,0xD6,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD9,0xDE,0x00,0x00,0x00,0x53,0xDE,0xD9,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0xF6,0xD5,0xDD,0x55,0x00,0x00,0x00,0x00, -0x54,0xB8,0xD9,0xDE,0x53,0x00,0x00,0x00,0xB3,0x04,0x04,0x04,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xD6,0xD9,0xF4,0x00,0x00,0xD6,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0xDF, -0x04,0x5E,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xD0,0x04,0xF7,0x00,0x00,0x00,0x00, -0x00,0x55,0xDA,0xDE,0x00,0x00,0xDE,0xD3,0x00,0x00,0x00,0x00,0xF4,0x04,0xD0,0x00, -0x00,0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xF6, -0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xD9, -0xD0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, -0xD4,0x55,0x00,0x00,0xDB,0xD2,0x00,0x00,0x00,0x00,0x00,0xD2,0xDB,0x00,0x00,0xDF, -0x04,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x57,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x04,0xDF,0x00,0x00, -0x00,0x00,0x00,0xF6,0xD9,0xF2,0x00,0x00,0x5B,0xDA,0x5E,0x00,0x00,0xF7,0xE1,0xD5, -0xD9,0xD0,0x55,0x00,0xF3,0x04,0xD5,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xDD, -0xD2,0x00,0xDE,0xDB,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x55,0x04,0xE1,0x00,0x00,0x00,0xFA,0x04,0xD2,0x55,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x09,0xB8,0xD5,0xDB,0x55,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF3,0xE1,0x04,0xEF,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04, -0xD7,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD2,0x04,0x59,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x54, -0xB8,0xD9,0xD7,0xF5,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x16,0x04, -0x04,0x04,0xDE,0x00,0x04,0xDE,0x57,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x56,0xD8,0xD7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xF7, -0xDC,0xDA,0x57,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xD9, -0xF1,0x00,0x00,0xDF,0x04,0xF2,0xF6,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55, -0xF2,0x04,0x16,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04, -0xFA,0x00,0x00,0xDC,0xDC,0xB3,0x00,0x00,0x00,0x54,0xF7,0x04,0xD6,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x59,0x04,0xDF,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x57,0x04,0xDF,0x00,0x00,0x54,0xDE,0xDB,0xF3,0x00,0x00,0x00,0x00,0x00, -0xD0,0x04,0x04,0xD3,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xDB,0x53,0x00,0x00,0xC6, -0xB8,0xD8,0xD2,0xB3,0x00,0x00,0x00,0xDE,0x04,0x56,0x00,0x00,0x00,0x00,0x55,0xD9, -0xDE,0x00,0x00,0x00,0x00,0x00,0xF5,0xDB,0xD7,0x53,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xF6,0xD9,0xD2,0xB3,0x00,0x00,0x17,0x04,0x59,0x00,0x00,0x00,0x00,0x00, -0xC3,0xD9,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x5A,0x00,0x00, -0x00,0x00,0x00,0x17,0x04,0x59,0x57,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF7,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0xC8,0xE3,0x00,0x04,0xDE, -0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x5A,0x04,0xF7,0x00,0x00,0xF5,0x04, -0x17,0x00,0x00,0x17,0x04,0x57,0x00,0x00,0x00,0xF4,0xDB,0xDE,0x00,0xDE,0xDA,0x56, -0x54,0x00,0xB8,0xD4,0xDE,0x00,0x00,0x16,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xDE,0xD9,0xF7,0x54,0x00,0xB8,0xD9,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0xDE,0x00,0x00,0x00,0x57,0x04,0xD2,0x55,0x00,0x00,0x00,0xF7,0xDC,0xD5,0xF7, -0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x04,0x59, -0x00,0x00,0xF7,0xD9,0xDD,0x56,0x00,0x00,0x00,0x00,0x5C,0xD4,0xDC,0xF5,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x56,0x04,0xD7,0x55,0x00,0x00,0x00,0x55,0xD2,0x04,0x57, -0x00,0x00,0xEF,0x04,0x59,0x00,0x00,0x00,0x17,0x04,0x17,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xDC,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04,0x16,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x04,0xEF,0x00,0x00, -0xD0,0x04,0x59,0x00,0x00,0x00,0x59,0xDA,0xD0,0x00,0x00,0xF6,0xD5,0xDB,0x57,0x00, -0x00,0x00,0xF3,0xDF,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD7,0xD8,0x5A,0x54,0x00,0x54,0xF5,0xD0, -0x04,0x5A,0x00,0x00,0x00,0x17,0x04,0xDE,0x56,0x00,0x00,0x00,0x00,0x00,0xB3,0x59, -0xD7,0xDB,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x04,0x60,0x04,0x0A, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xB3,0xD6,0x04, -0x5D,0x00,0x00,0x00,0x00,0xDF,0x04,0xDD,0x5A,0xF3,0x00,0x00,0x00,0x00,0xF4,0x60, -0xD9,0xD9,0x56,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x54,0x00,0xB3,0x58,0xD2,0x04, -0xD0,0xB3,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x53,0xD0,0x04,0xDB,0xFA,0xF3, -0x00,0x00,0x00,0x00,0xB3,0x5A,0xDC,0x04,0x60,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x5B,0x04,0xD0, -0x53,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5,0xDB,0x04,0x04,0xDE,0x00, -0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x59,0xD9,0xDB,0x5E,0xF4,0x00,0x00,0x00,0x00,0xF5,0x17,0xD9,0xD8,0x59,0x54, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF4,0xD0,0x04,0xEF,0x00,0x00,0x53, -0xD6,0x04,0xDC,0x5A,0xF3,0x00,0x00,0x00,0x00,0xF3,0x5C,0xDD,0x04,0xEF,0x00,0x00, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF3,0xFA,0xD8,0xDC,0xF5,0x00,0x00,0xDF, -0x04,0x0D,0x53,0x00,0x54,0xF5,0xDE,0x04,0x57,0x54,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0xDE,0xDA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD3, -0xD5,0xF3,0x00,0xF5,0xD4,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x04,0x04,0xD6, -0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x04,0x56,0x00,0x00,0xB3,0xD2,0xD8,0xB8,0x54, -0x00,0x00,0x00,0xF7,0xD9,0xD7,0xF3,0x00,0x00,0x00,0xD6,0x04,0x56,0x00,0x00,0x00, -0x00,0x00,0x00,0x17,0x04,0x5B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16, -0x04,0x5E,0x00,0x00,0xF6,0xDB,0xDB,0x56,0x00,0x00,0x00,0xF5,0xDB,0xD6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x53,0x17,0x04,0xD7,0xF3,0x00,0x00,0x00,0x00,0x00,0xF6, -0xD9,0x04,0x04,0xD8,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xFA,0x5D,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xD2,0xD8,0xF7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xD0,0x00,0x00,0x00,0x00, -0xD5,0xD0,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xD2,0x00,0x00,0x00,0x04,0xDE, -0x00,0x00,0x55,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x04,0xDE,0x00,0x04,0x04,0x04, -0x04,0x00,0x00,0x00,0x00,0xF7,0x04,0x59,0x54,0x00,0x00,0xD3,0xD0,0x00,0x00,0xF6, -0xF1,0xD3,0x56,0xF3,0x55,0xD0,0x04,0x5A,0x00,0xB8,0xDB,0xD9,0xE1,0xE1,0xD9,0xDB, -0xB8,0x54,0x00,0xF4,0xDB,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xD9,0xDB, -0xE1,0xE1,0xD9,0xD9,0xB8,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00, -0x00,0x00,0x59,0xD9,0xDC,0x56,0x00,0x57,0xDB,0xD5,0xB8,0x54,0x00,0x00,0x00,0x0A, -0x0A,0x04,0x04,0x04,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD5,0xE1,0x00,0x00,0x00,0x59, -0xD8,0x04,0xDE,0xD6,0xD6,0xD7,0x04,0xD5,0xB8,0x54,0x00,0x0A,0x0A,0x0A,0x04,0xDE, -0x00,0x00,0x5E,0xD4,0xD9,0xD0,0xD6,0xD0,0xD9,0x04,0x60,0x00,0x00,0x00,0x55,0xDC, -0xD4,0xD0,0xD6,0xDE,0x04,0xD7,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, -0xD5,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, -0xF7,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xD9,0xB8,0x54,0x00,0x00,0x00,0x00, -0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x04,0xD9,0x00,0x00,0x55,0xF1,0x04,0xDE, -0xD6,0xDE,0x04,0xDC,0x55,0x00,0x00,0x00,0xB8,0xD5,0x04,0xDE,0xD6,0xE1,0xDC,0x04, -0xDE,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x56,0xDB,0x04,0xD2,0xD6,0xE1,0xD5,0x04,0xD6,0x00,0x00,0x00, -0x00,0x00,0x58,0xDC,0x04,0xDD,0xD0,0xD6,0xD6,0xD0,0xDB,0x04,0xDE,0xF7,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD9,0x04,0x04,0xF7,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDC,0x0A,0x0A,0xD6,0xD0,0xDD,0x04,0xDE,0xB3,0x00,0x00,0x00, -0x00,0x00,0x5D,0xDB,0x04,0xDB,0xD0,0xD6,0xD6,0xDE,0xD9,0x04,0xD2,0xF7,0x00,0x00, -0x00, -0x04,0xDC,0x0A,0x0A,0xD6,0xE1,0xDE,0xDB,0x04,0xD9,0x17,0x53,0x00,0x00,0x00, -0x04,0xDC,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x57,0x54,0x04,0xDC,0x0A,0x0A,0x0A, -0x0A,0x0A,0x0A,0x57,0x54,0x00,0x00,0xB3,0xEF,0x04,0x04,0xD9,0xDE,0xD6,0xD6,0xD0, -0xDB,0x04,0xD7,0x57,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDE,0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE, -0x04,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x04,0x0D,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x58,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x04,0x04,0xDE,0x00,0x04,0x04,0x04,0x5A, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0xB8,0xD2, -0x04,0xD9,0xDE,0xD6,0xD6,0xDE,0xD9,0x04,0xD7,0x56,0x00,0x00,0x00,0x00,0x04,0xDC, -0x0A,0x0A,0x12,0xD6,0xDE,0xDB,0x04,0xD2,0xF5,0x00,0x00,0x00,0x00,0x5E,0xDB,0x04, -0xDB,0xD0,0xD6,0xD6,0xD0,0xDB,0xDA,0xDB,0x5C,0x00,0x00,0x00,0x00,0x04,0xDC,0x0A, -0x0A,0x12,0xD6,0xDE,0xDB,0x04,0xDC,0xB8,0x54,0x00,0x00,0xF4,0xDE,0x04,0xD7,0xD6, -0xE1,0xD5,0x04,0xD6,0x00,0x00,0x0A,0x0A,0x0A,0x0A,0x04,0xDC,0x0A,0x0A,0x0A,0x0A, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0xF7,0x04, -0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x5A,0x54,0x59, -0x04,0xF9,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x58,0x00,0x00,0x00,0x00, -0x00,0x00,0x56,0x04,0xDF,0x00,0x00,0x17,0x04,0x17,0x00,0x00,0x00,0x00,0x00,0x00, -0x16,0x04,0xDF,0x00,0x00,0xF7,0xDA,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF4, -0xDD,0xF1,0xF3,0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0xD6,0x04,0xDB,0x00,0x00, -0x00,0x57,0xD9,0xDA,0x5A,0x00,0x00,0x16,0x04,0xB8,0x54,0x00,0x00,0x00,0x00,0x00, -0x00,0xD2,0x04,0xD3,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x04,0x04,0xC1, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x58,0xD7,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x57,0xD4,0xD8,0xD0,0xD6,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0xD0,0x57,0x00,0x04,0xDE,0x00,0x0A,0xD7,0x04, -0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x9D,0x3B,0xD8,0x00,0x04,0xDE,0x00,0x04,0xDE,0xDE,0x04,0x00,0x00,0x00, -0x00,0x53,0xDB,0xDF,0x00,0x00,0x00,0xD0,0xDC,0x00,0x00,0x00,0x55,0xDE,0x04,0x04, -0x04,0xD8,0x17,0x00,0x00,0x00,0xF7,0xD0,0xDB,0xDB,0xD0,0xB8,0x00,0x00,0x00,0x00, -0xDF,0xDB,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0xD0,0xD9,0xDB,0xD0,0xB8, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0xF7, -0xD0,0x17,0x00,0x17,0xD0,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0x04,0x04, -0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD9,0xF4,0x00,0x00,0x00,0xF7,0xD6,0xD7,0xD9, -0xD9,0xD2,0xDF,0xF6,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0x54,0xB8, -0xE1,0xDC,0xD8,0xDC,0xD0,0x56,0x00,0x00,0x00,0x00,0x00,0x55,0xD6,0xD5,0xD8,0xF1, -0xEF,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x04,0x04,0x00, -0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x55,0xD5,0xD7,0xF4,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x55,0x12,0xDC,0xD8,0xDC,0xD6,0x55, -0x00,0x00,0x00,0x00,0x00,0xF6,0xDF,0xD7,0xD9,0xDB,0xDE,0x5D,0x53,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0xF7,0xE1,0xDD,0x04,0xDB,0xDE,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3, -0x5B,0xD0,0xF1,0xD8,0xD9,0xD7,0xD6,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xD6,0x04,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0x04,0x04,0x04,0xD9,0xDC,0xDE,0xFA,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF5, -0x16,0xD0,0xDD,0xD8,0xD9,0xD7,0xE1,0x58,0x53,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0xD8,0xDB,0xD7,0xD0,0x5E,0xF6,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17, -0x00,0x00,0x00,0x00,0x54,0xB8,0x0A,0xD7,0xD9,0x04,0xD9,0xD7,0xD6,0x59,0x53,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04, -0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x04,0x00,0x04,0xDE, -0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0xDE,0x04,0x5A,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xD3,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF7,0x04,0x04,0xDE,0x00,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x53,0x58,0xE1,0xD3,0xD8, -0xD8,0xF1,0xE1,0x59,0x53,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xD9, -0xDC,0xD0,0xFA,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x60,0xDE,0xDD,0xDA,0xD8, -0xDC,0xD0,0xFA,0xF5,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDA,0xD9,0xD3, -0xD0,0xFA,0xF4,0x00,0x00,0x00,0x00,0x00,0xF3,0x60,0xD2,0xD9,0xDB,0xDE,0x5A,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0xDE,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x0D,0x04,0x58,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xD9,0xDE,0x00,0xD6,0x04,0x55,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0xD7,0xD8,0xF5,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xD5, -0xD2,0x00,0xF7,0xD8,0xD2,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0xDA,0x56, -0x00,0xE1,0x04,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x04,0x5E,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0xB8,0xDE, -0x17,0x00,0x00,0xD7,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0xEF,0xF5, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0xB8,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6, -0xDE,0x04,0xD7,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, -0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x54,0xB8,0xE1,0xF1,0xD9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x04,0xDE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF7,0xF2,0xD8,0x17,0x00,0x04,0xDE,0x00,0xD8,0xDC,0xD6,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x04,0xF2,0xF6,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0xF3, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0xD2,0x53,0xD0,0xE1,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0xDE,0x16,0xB3,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x3B,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xF3,0x55,0x00,0xF6,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00, -0x00,0xFF,0xFF,0xFF,0x00,0x00, -0x49,0x04,0x00,0x00, -0x1B,0x00,0x00,0x00, -0x00, -0x00, -0x06,0x74,0x00,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDC,0x60,0x58,0x58,0x60,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00,0x00,0x00,0x00, -0x00,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x58,0x53,0xB8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, -0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x60,0x04,0x60, -0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x57,0x16,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53, -0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x00,0x56,0xD7,0xD9,0xDB,0xDF,0xF3,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD0,0xF6,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF6,0x00, -0x58,0x04,0x04,0x04,0x04,0x54,0x53,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF4,0x00,0x17,0x04,0x17,0x00,0xF4,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x5C,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0x53,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x54,0xD3,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x0A,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56, -0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xB3,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xF6,0xD0,0x04,0x04,0x04, -0x04,0xB8,0xB3,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x53,0x00,0xE1,0x04,0x04,0x04,0xD6,0x00,0xF3,0xD4,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD7,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD2,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD8,0x53,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0xF5,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x53,0xDF,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A, -0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x3B,0x3B,0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0x57,0x04,0x04,0x04,0xB8,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xF7,0x04,0x04,0x04,0x04,0xDB, -0x55,0x54,0x54,0x55,0xDB,0x04,0x04,0x04,0x04,0xE1,0xF6,0x54,0x00,0xF3,0x59,0x04, -0x04,0x04,0x04,0x04,0xDE,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xF2, -0x04,0x04,0x04,0x04,0x04,0xEF,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0xB8,0xF3,0x00, -0x00,0xF3,0xB8,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00, -0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x04,0x04,0x04,0xDD,0xF7,0x53,0x54,0xB3, -0x56,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0x04,0x04,0x04,0x04,0x5D,0xF5,0x00,0x00,0xF5,0x60,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0x57,0xF3,0x00,0x00,0xF5,0x16,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0x53,0x54,0x53,0xB8,0xD9, -0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0xDA,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x17,0x55,0x53,0x54,0x53,0xF3,0xB8,0xD2,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDE, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0xF7,0x04,0x00, -0x00,0x54,0x53,0x53,0x54,0xF4,0xB8,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0xFA,0xF6,0x53,0x54,0x00,0x53,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54, -0x53,0x53,0x00,0x53,0x55,0x5C,0xD8,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x53, -0x53,0x53,0x53,0x53,0x53,0x57,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0xF7,0xF3,0x00,0x54,0x53,0xF6,0x5A,0xDA,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0xDB,0xF7,0x53,0x00,0x46,0xB8,0xD8,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x17,0x04,0x00,0x00,0x54,0x53,0x53, -0x53,0x53,0x53,0x53,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF4,0x04, -0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x0A,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x55,0x53,0x54, -0x53,0xB3,0xF7,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0xF7,0xB3,0x00,0x54, -0xB3,0xF7,0xD6,0x04,0xDA,0x57,0xF3,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x54,0x54,0xDB,0x04,0x04,0x04,0xD9,0xB8,0xF3,0x54,0x54,0xF6,0xE1,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, -0xB8,0xF3,0x54,0x53,0xF5,0x5C,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x54,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4, -0x00,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x00,0xD3,0x04,0x04,0x04, -0x04,0x04,0x59,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x56, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x00,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x04,0x57,0x00,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x57,0x04,0x04,0xDA,0xF4, -0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF7,0xB3,0x54,0x54,0xF3, -0x57,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD7,0xF7,0x53,0x54,0x53,0x55,0xD0, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0xB3,0x54,0x00,0xF4,0x59,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x54,0x54,0xF3,0x57,0xDA,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xDE,0x55,0x53,0x54,0x53,0x55,0xDE,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C,0x55,0x53,0x54,0x53, -0xF7,0xDC,0x04,0xB3,0xF3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x59,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDE,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x0C,0x55,0x53, -0x54,0x54,0xF6,0xEF,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD2,0x55,0x54,0x54,0x53, -0x55,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C,0x55,0x54,0x54,0x53,0x55,0xD2, -0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x54,0x00, -0xF5,0xF2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD6,0xF5, -0x54,0x54,0x53,0xB8,0xD4,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0x57, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x51,0x00,0x00,0xDA,0x04,0x04, -0x04,0x04,0xF3,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x5A,0x04,0x04, -0x04,0x04,0x04,0x17,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF4,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x55,0x04,0x04,0x04, -0xFA,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0xD7,0xF4,0x00,0x00,0x00,0x00,0x17,0x04, -0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0xD9,0x04,0x04,0xDB,0x54,0x00,0x55,0xF7,0x00, -0x54,0xD5,0x04,0x04,0xB8,0x00,0x54,0xF7,0xF7,0xB3,0x00,0xF6,0xD4,0x04,0x04,0xE1, -0x00,0x54,0xDD,0x04,0x04,0x04,0x04,0x04,0x5C,0x54,0x59,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x17, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB8,0x54,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xF5,0xF7,0xF7,0xF4,0x00,0x54, -0xD2,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x53,0x00,0x54,0xB8,0xB8,0xB8,0xB8, -0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x0A,0x00,0x00,0x55,0xB8,0xF5,0x00,0x53,0xDB,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0xD4, -0xF5,0x00,0xF3,0xF7,0xF7,0x53,0x00,0xF6,0xDA,0x04,0x04,0x04,0xDC,0x53,0x00,0xF3, -0xF7,0xF7,0x53,0x00,0xF5,0xD4,0x04,0x04,0x04,0xD7,0x54,0xB8,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x55,0xB8,0xF6,0x00,0x54,0xD2,0x04,0x04,0x04, -0x04,0x04,0x04,0x57,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0xB8,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0x53, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x5A, -0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x53,0x00,0x53,0x55,0xB8, -0xB8,0xF6,0x54,0x00,0xF6,0xD9,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x00,0x53,0xB8,0xB8,0xB8, -0xF7,0xF4,0x00,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x17,0xC6,0x09,0x54,0xF6,0xB8, -0xF7,0xF6,0x00,0x00,0xF4,0xDD,0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xF7,0xF6, -0x53,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0xD0,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDE, -0xF3,0x00,0x00,0xF6,0xF7,0xB8,0x55,0x54,0x00,0x54,0x5D,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, -0xD9,0x54,0x00,0xF6,0xB8,0xF5,0x00,0xF3,0xD4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x57,0x00,0xF7,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54, -0x00,0xF6,0x04,0x04,0x04,0x04,0xD7,0xF3,0x00,0x00,0xF6,0xB8,0xB8,0xF6,0x09,0x09, -0xF3,0xD2,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0xF4,0x00,0x00,0xF5,0xF7,0xB8,0xF6,0x00,0x00,0x00, -0x54,0x54,0xF5,0x5B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xD6, -0x04,0x04,0x04,0xDD,0x54,0x00,0xF4,0xB8,0xF7,0x53,0x00,0xB8,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x00,0xF4,0xB8,0xF7, -0xB3,0x54,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x56, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0xF3,0xDA,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x54,0xB8,0xB8, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0xF3,0x00,0xD8,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD9,0x04,0x04,0x04,0xD6,0x00,0x5A,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0xF5,0xB8,0xF7,0xF4,0x00,0xB3,0xD5,0x00, -0xF6,0x04,0x00,0xF6,0x5D,0x00,0x00,0x55,0xB8,0x55,0x54,0x00,0xF7,0xD4,0x04,0x04, -0x04,0x04,0x56,0x00,0x00,0xF6,0xB8,0xF7,0xB3,0x00,0x53,0xDE,0x04,0x04,0x04,0x04, -0x04,0x57,0x54,0x00,0xF5,0xB8,0xF7,0xF4,0x00,0xB3,0xDB,0x00,0xF6,0x04,0x04,0x04, -0xB8,0x00,0x00,0x55,0xB8,0x55,0x54,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xD4,0xF7,0x00,0x00,0x55,0xB8,0x55,0x00,0x00,0xE1,0xF5, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD0,0x00,0xF5, -0xDA,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0xD4,0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00, -0xF6,0xD4,0x04,0x04,0x00,0xF6,0x5A,0x00,0x54,0x55,0xB8,0x55,0x54,0x00,0xF7,0xD4, -0x04,0x04,0x04,0xDA,0xF7,0x00,0x54,0x55,0xB8,0x55,0x00,0x00,0x5B,0xF6,0x00,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0xF7,0xF7,0x54,0x00,0xDE,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0x55,0xB8,0xF6,0x00, -0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x53,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0xE1,0x04,0x04,0x04,0xD5,0x00,0x00, -0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04,0x04,0xD9,0x54, -0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x00,0xD2,0x04,0x04,0x04,0x04,0x04, -0x04,0x54,0x00,0xF7,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFE,0xFF,0xF9,0x04,0x54,0x55, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x53,0x04,0x04,0x04,0xD2,0x00,0xD0,0x04, -0x04,0x04,0x04,0xD7,0x00,0xF5,0xDC,0x04,0xD7,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0xD4,0x53,0x56,0x04,0x04,0x55,0x00,0xDE,0x04,0x04,0xDE,0x00,0x55,0xDA,0xE1, -0x00,0xF6,0xD4,0x04,0x04,0x04,0xF7,0x00,0xB8,0x04,0xEF,0x00,0x53,0xD5,0x04,0x04, -0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0xDF,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04,0xF2,0x54,0xD0,0x04,0x04,0x04,0x04, -0x04,0x04,0xD5,0x00,0x54,0xD7,0x04,0x04,0x04,0x04,0xD6,0x00,0x53,0xDA,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0xDB,0xB3,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDC,0x00,0xB3,0xDB,0x04,0x04,0x04,0xD6,0x53,0xF3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xF6,0x54,0x5A,0x04,0x04, -0x04,0x04,0xB8,0x00,0xF7,0x04,0x04,0xDA,0x53,0x00,0x17,0x04,0x04,0x04,0x04,0x56, -0x00,0x55,0xDA,0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, -0x00,0xF4,0xD9,0x04,0x04,0x04,0xF2,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0xF4,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0xDB,0x00,0xB8,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xB8,0x54,0x00,0xB3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x00,0x54,0xB8,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xC6,0x55,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xF6,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0x00,0x53,0xD9,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0xD8,0x00,0xF5,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD5,0xF3, -0x00,0xDD,0x04,0x04,0x04,0xB8,0xC6,0x54,0x16,0x04,0x04,0x04,0x04,0x04,0xDA,0x58, -0x00,0x54,0xD7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x00, -0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B,0x00,0x54,0x5A,0xDA, -0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0xF7,0x00,0xEF,0x04, -0x04,0x04,0x57,0x00,0x59,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0xF4, -0xDA,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0xF6,0x04,0x04, -0x04,0xEF,0x00,0x54,0x5C,0xDA,0x04,0x04,0x04,0x04,0xDA,0x16,0xC6,0x00,0xEF,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD0,0x00,0x00,0x56,0xDA,0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x00,0x57,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xB8,0x04,0x04,0x04,0x04,0xB3, -0x00,0x17,0x04,0x04,0x04,0xDA,0x55,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x54,0xD2,0x04,0x04,0x04,0x04,0x5A,0x54,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x00,0x54,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0x00,0xDA,0x04,0x04,0x04,0x04, -0x04,0xF4,0x00,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0xD8,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xB8,0x54,0xF5,0xD5,0x04,0x04,0x04,0x04,0xD2,0x53,0x00,0x00,0xF6,0x04,0x00,0x00, -0x00,0x55,0xD8,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04,0x04,0x56,0x00,0xF5, -0xDB,0x04,0x04,0x04,0x04,0x17,0x00,0x00,0xDD,0x04,0x04,0x04,0x56,0x00,0xF5,0xD5, -0x04,0x04,0x04,0x04,0xDE,0x53,0x00,0x00,0xF6,0x04,0x04,0xB8,0x53,0xF7,0xDA,0x04, -0x04,0x04,0xDA,0xF7,0x00,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0xF7,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x00,0xF5,0x04,0x04,0x04,0xD5,0x54,0x53,0xD9,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x59,0x54,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x04,0xF7,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xB8,0x54,0xF6,0xDA,0x04, -0x00,0x00,0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04,0x04,0xF7, -0x00,0xF7,0xDA,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0xDD,0x04,0x04,0xDD,0x00,0xF5,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0xD0,0x00,0xF4,0xD8,0x04,0x04,0x04,0xD3,0x53,0x00,0x00,0x04, -0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x54,0x00,0x00,0xF7,0x04,0x04,0x04,0x58,0x00,0x00,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0x04,0xDD,0x00,0xF5,0x04,0x04,0x04,0x55,0x54,0xD2,0x04,0x04,0x04, -0x04,0x04,0x04,0xB8,0x54,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x55, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xC8,0xFF,0xFE,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x5D,0x00,0xD8,0x04,0x04,0xD4,0x00,0x58,0x04,0x04,0x04,0x04,0xF6, -0x00,0xD9,0x04,0x04,0x04,0xD5,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x53, -0xD4,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0xF6,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0xB8,0x54,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xDF, -0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, -0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0xD9,0xF3,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD7, -0x04,0x04,0x04,0x04,0x04,0x57,0x54,0xEF,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53, -0x53,0x00,0x00,0x54,0x53,0x04,0xD6,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0xD7,0x04,0x57,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD7,0x04, -0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x04, -0x04,0x04,0x04,0x5C,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x53,0xF4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0xD2,0x55,0x00,0x00,0xF4,0xEF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEF,0xF4,0x00,0x00,0xF7,0xD7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0xFA,0x04,0xDA,0xD5,0xDA,0x04,0x04,0xDA,0xD5,0x00,0x00,0xB8,0xDB,0x04, -0x04,0x04,0xD2,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54, -0xD6,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x57,0x04,0x04, -0x16,0x09,0xF3,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x54,0x53,0xD9, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xB8,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD8,0xF4,0x00,0x59,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x53,0xF3,0x04,0x04,0x04,0x04,0xDA,0x00, -0xF5,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD9,0x54,0x54,0xD9,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xEF, -0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x60,0x00,0x00,0x00,0xF6,0xDA,0x04,0xDE,0x00,0xB3,0xDB, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0xF3,0x00,0xDE,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x00,0xDE,0x04, -0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0xD7,0x04,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0xE1,0x00,0xF5,0x04,0x04,0x04,0x04,0xD0,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0xDA,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0xB8,0x54,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0x00,0x00,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, -0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x57,0x04,0x04,0x04,0x04,0x5A, -0x00,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF3,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0xD2,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0xF5,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0x00,0xF6,0xDA,0x00,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0xD2,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04, -0x04,0x04,0xDE,0x00,0xF5,0x04,0x04,0xD2,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0x54,0x00,0xF6,0xDA,0xD2,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF7,0x00,0xDE,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD0,0x00,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, -0x00,0x17,0x04,0xD4,0xF3,0x00,0xD7,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, -0xDE,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xD0,0x00, -0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x00,0x00,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xE1,0x04,0xD0,0x00,0x55,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x55,0x00,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x54, -0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00,0x04,0x04,0x04,0x04,0x04, -0x53,0xF5,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0x00, -0x00,0x54,0x04,0x04,0x04,0xF4,0xF4,0xD7,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x58,0x00,0xFA,0x04,0x0A,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54, -0x00,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x17,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xE3,0x3B,0x6E,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2, -0x00,0xD0,0x04,0x04,0x04,0xB3,0x55,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04, -0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x59,0x04,0x54,0xF4, -0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, -0x00,0x00,0xF4,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xB8,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x54,0xB8,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xDA, -0xF5,0x00,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0xF7,0x04,0x09,0x00,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x53,0x54,0xB8, -0xB8, -0x04,0xF7,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x56,0x04,0xF3, -0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0x04,0x04,0xF3, -0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0x56,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0xF5,0x00,0x00,0xF6, -0xDE,0x04,0x04,0x04,0x04,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, -0x53,0x04,0x04,0x04,0x04,0xDE,0xF6,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB8,0x16,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xFA,0x04,0x59, -0x00,0x00,0x00,0xF7,0xDC,0x53,0x00,0x00,0x54,0xD8,0x04,0x04,0x04,0x04,0x04,0xF4, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x53,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0xDA,0x54,0x54,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0xF7,0xDF,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD5,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0x53,0x00,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x00,0xF6,0x04,0xD0,0xD2,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF5, -0x04,0x04,0x04,0xDA,0xF4,0x00,0xD0,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x54,0xDA,0xD0,0x00, -0x58,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x00,0xF3,0xDA,0x00,0xF6,0x04,0xDA,0x53,0x54,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDB,0x54,0x53,0xD4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0xDA, -0x56,0x00,0xB3,0xDD,0xDE,0x54,0xB3,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0xDB,0x54, -0x54,0xD9,0x04,0x04,0x04,0x04,0xFA,0x53,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0xF5, -0x00,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, -0x00,0xDB,0x04,0x53,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00, -0x57,0xDD,0x00,0x57,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x00,0x00,0xEF,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xD7,0x04,0x04,0xDB,0x00,0xF3,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD0,0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0xF4,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0xDF,0x00,0x58,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00, -0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x5B,0x00,0xF6,0x04,0x00,0x00,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x00,0x55,0x04,0xF7,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, -0xF6,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x5C,0xDE,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD5,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0xD3,0x55, -0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDE,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x55,0x00,0xD9,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0xF6,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x53,0x54,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xB3,0xB3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0x00,0x04,0x04,0x04,0x04,0xD6,0x00,0xDF,0x04,0xF7, -0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x0A,0x00,0xDE,0x04, -0xD9,0x00,0x58,0x04,0xF3,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00, -0xD3,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x54,0x5A,0xDE,0x00,0x57, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF3,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0xD4,0xD9,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, -0xF7,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF7,0x00,0xF6,0xB8,0xB8, -0xB8,0x53,0x53,0xB8,0xB8,0xB8,0x04,0xEF,0xDE,0x04,0x04,0x04,0x04,0x04,0xF5,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x53,0x04,0x55,0x00,0xD7,0x04,0x04,0xD2, -0x00,0x55,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x00,0xD6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x53,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00, -0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x00,0x55,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD4,0xF6,0x54,0x57, -0x04,0x04,0x04,0x04,0x04,0xF6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x16,0x54,0x5A,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0xB8,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x54,0xF5,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x17,0x00,0x5D,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0xDC,0x59,0x56,0x5C,0x00,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x5A,0xB3,0x00,0x00,0xF7,0xDD,0x04,0x04,0x04,0x04,0x04, -0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0xF7,0x00,0x00,0xF3,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0xB3,0xF3,0x04,0x04,0x04,0x04,0x04,0x58,0xF6,0x04,0xD0,0x00,0xB3,0x5A,0x58,0xB3, -0x00,0x00,0xD7,0xD9,0xB8,0xC6,0xDB,0x04,0x04,0x04,0x04,0x17,0x00,0xD6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x5A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x59,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDC,0x00,0x56,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xFA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x56,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0x00,0x5D,0x04,0x04,0xF7, -0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0xDC,0x54,0xB8,0x04,0x04,0xF3,0x53,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD7,0x04, -0x00,0xF6,0x04,0x16,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x5A,0x00,0xF9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x0A,0x00,0x00,0xD2,0xDA,0x04,0xDA,0xD7,0x57,0x53,0x00,0xF6,0xDA,0x04, -0x04,0xB8,0x00,0x16,0x04,0x00,0xF6,0x04,0x04,0xD4,0xF4,0x00,0xDE,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x04,0x57, -0x00,0xD3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xD2,0x04,0x53,0xF4, -0x04,0x04,0x04,0x04,0xF7,0x00,0xDA,0xDA,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDD,0x00,0xF3,0x04,0x04,0xF5,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x54, -0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD7,0x00,0x60,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x53,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF6,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0x04, -0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, -0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x53,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x54,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00, -0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0xF6,0x00,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x54,0x04,0x00,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3, -0x54,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xF6,0x54,0x56,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0x04,0x04,0x04,0x04,0xF6,0x54,0xDA,0x04,0xD7,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0xF7,0x04,0xDA,0x00,0xB8,0x04,0x5C,0x00,0xDD,0x04, -0x5A,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x00,0x00,0xF2,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD8,0x04,0xF4,0x53,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0x56,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF5,0x54,0xD9,0x04,0x04,0xB8,0xF7,0x04,0x04, -0x04,0x04,0xD0,0xF6,0x00,0xF5,0xD5,0x04,0x04,0x04,0xF7,0x3B,0x3B,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x54,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x54,0x53,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0xDB,0x00,0x00,0x00,0x00,0x00,0xF7,0xF7,0x00,0x54,0xDB,0x04,0xF6, -0x00,0xDC,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0xF3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x00,0x55,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x53,0x53,0x53,0x54, -0x00,0x00,0x53,0x53,0x53,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8, -0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0xC6,0xF7,0x04,0x04,0xF5,0x00, -0xD9,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x00,0x55,0xDA,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0x04,0xF3, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04,0x04,0xD4,0xF7,0x00,0x00, -0x00,0x00,0x00,0x00,0xB3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x54,0x00,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0x00,0x00,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDF,0x04, -0x04,0x04,0x04,0xF5,0xE1,0x04,0xF7,0x00,0xDD,0x04,0x04,0xDA,0xF4,0x00,0x0A,0x04, -0x04,0xFA,0xF3,0xD4,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0x53,0x53,0x53,0x53,0x54, -0x00,0x00,0x54,0xDA,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0x00,0x57,0x04,0xF5,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x53,0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0xB8, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xF7,0x00,0xF3,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x00,0x00,0xDE,0x17,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0xF7,0x00,0xDD,0x04,0x04,0x5D,0x54,0xD6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x5A,0x00,0x57,0x04,0x04,0x00,0xF6,0x04,0xF6, -0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00, -0x00,0x00,0x53,0x54,0x00,0x00,0x00,0xF4,0xD6,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6, -0x04,0x00,0xF6,0x04,0x04,0xB8,0x54,0x00,0x57,0xD2,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0xD6,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04, -0x53,0xF4,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00, -0x00,0x00,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00, -0x00,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7, -0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x57,0x53,0xD6,0x04, -0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0x53,0x53,0x53,0x53, -0x53,0x53,0x53,0x53,0x54,0x00,0x00,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x00,0xF6,0xD2,0x00,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0x59,0x54,0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x16,0xF5,0x54,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0x04,0xD5,0x00,0x56,0x04,0x04,0x04,0xF4,0x54,0xDA,0x04,0x04,0x04,0x04,0x04, -0x5D,0x00,0xDE,0x04,0x04,0x55,0x53,0x04,0xF5,0xF3,0x04,0x04,0xD8,0x00,0xB8,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDD,0x54,0xF7,0x04,0x04,0x16,0x09,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x59, -0x00,0x59,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0xDA,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0xDD,0x00,0x00,0x16,0x04,0xDF,0x00,0x16,0xDA,0xD0,0xF5,0x00,0x00, -0x00,0x00,0x53,0xD9,0x04,0x04,0xFC,0x3B,0xE3,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF6,0xF4,0x04,0x04,0x04,0x0A,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xF7,0x00,0x04,0xDB,0x55,0x54,0x54,0x55,0xD5,0x04,0x04,0xD2,0x00,0x53,0xDC,0x04, -0x04,0xF7,0x00,0x55,0x04,0x58,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8, -0xB8,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x53,0xD4,0x04,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x54,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x16,0x04,0x04,0xD5,0x00,0xF6,0xDA,0x04,0x04, -0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7, -0x00,0x56,0x04,0xF6,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8,0x04, -0x04,0x04,0x04,0x04,0x5B,0x00,0xEF,0x04,0x04,0x04,0x04,0x57,0x00,0x60,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xDF,0x04,0x04,0xF6,0x00,0x55,0xD7,0x04,0xDA,0xD6,0xB3, -0xC6,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x00,0x00, -0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00, -0x00,0x09,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0xD7,0x04,0x04,0x04,0x54, -0xDA,0x04,0x55,0x00,0x04,0x04,0x04,0x04,0xDB,0x54,0xF6,0x04,0x04,0x04,0x55,0x5B, -0x04,0x04,0x04,0x04,0x57,0x00,0x55,0xB8,0xB8,0xB8,0xB8,0xB8,0x55,0x00,0xB8,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xD5,0xB3,0x00,0xD9,0x04,0x54, -0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xDA,0x00,0xF6, -0x04,0x04,0x04,0xDA,0x53,0xF5,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0x04, -0x04,0x04,0xDD,0x00,0xF4,0x04,0x04,0x04,0x00,0xF6,0xDA,0x53,0xF4,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0x00, -0x54,0x53,0x53,0x53,0x54,0xF4,0x59,0xDA,0x04,0x04,0x53,0xB3,0xD9,0xDF,0x57,0xB8, -0x57,0x17,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x00,0xF6,0xDA, -0xD5,0x55,0xF6,0xF3,0x00,0x00,0xF5,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x57,0x00,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0xF3,0x53,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0x00,0x55,0x04,0x04,0x0A,0x00,0x03,0x04,0x04,0xDD,0x00,0x57,0x04,0x04, -0x57,0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x00,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x53,0x00,0x00,0x55,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0x56,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xD8,0x00,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0xF6,0xDA,0x54,0x00,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0x54,0x53,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x54,0xF4,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, -0xF6,0xDA,0x59,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00, -0xDE,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x54,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x00,0xF3,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x53,0x04,0x54,0xF3,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA, -0xF3,0x00,0xB3,0x59,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0xB8,0x00, -0xDB,0x04,0x04,0x04,0x17,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0xF4,0x53,0x04,0x04, -0x04,0x17,0x00,0xD0,0x00,0x57,0x04,0x04,0x04,0x55,0x54,0xDA,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x54,0x54,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE, -0x04,0x04,0xDA,0x53,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDC, -0x04,0x04,0x04,0x54,0x00,0x00,0xD4,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0xD5, -0x00,0x00,0x5D,0x04,0x04,0xB8,0x54,0x00,0x00,0x00,0xF7,0xF2,0xDA,0xDF,0x09,0xF7, -0x04,0x04,0x3B,0x3B,0x45,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x58,0x00,0xDA,0x04,0x04,0xD5,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0xB8, -0x54,0x00,0xB3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0xE1,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0A,0x00,0x00,0xB8,0x55,0x00,0xF7,0x04, -0x04,0xDA,0x53,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x54,0xE1,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xB8,0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x00,0xB3,0xDA,0x04,0x04,0x04,0x58,0x00,0xDF,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0x04,0x04,0xD5,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD7,0x04,0xDF, -0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04,0x04,0x04, -0xDA,0x54,0xF4,0x04,0x04,0x04,0x04,0xDA,0xF4,0x00,0x58,0xD9,0x04,0xD5,0xF7,0x00, -0xF5,0x04,0x04,0x17,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xD8,0xB3,0x00,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x16,0xF3,0x00,0x00,0x55,0xD7,0x04, -0x04,0x04,0x04,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0x00,0x00,0xF4,0x16,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDC,0x54,0x54,0xF2,0x04,0x04,0x00,0x04,0x04,0xB8,0x00, -0xDB,0x04,0x04,0x04,0x04,0xB8,0x00,0xD9,0x04,0x04,0xD2,0xF5,0x04,0x04,0x04,0x04, -0xD9,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDD,0x04,0x04,0x04,0x04,0x00, -0x53,0xB8,0xB8,0xB8,0xF7,0xF4,0x00,0x54,0xD0,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x00,0x54,0x53, -0x53,0x53,0x53,0x53,0x53,0x04,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x57, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0x00,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x00,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0xD2,0x00,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x5A,0x00,0xE1,0x04,0x04,0x04,0x04, -0xB8,0x00,0xDC,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF4,0x00, -0xDC,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8, -0x55,0x54,0x00,0xF4,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0xDA,0x59,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0xD9,0x5A,0xF5,0x00,0x00,0xF5,0xD7, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xDE,0x00,0x57, -0x04,0x04,0x04,0x04,0xD0,0x00,0x5B,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x17, -0x04,0x04,0xDA,0x54,0xB8,0x04,0x04,0x5A,0x00,0xD2,0x04,0x04,0xD7,0x54,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xE1,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDA,0x53,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0xF7,0x00,0xDC,0x04,0x04,0x04,0x04,0xDD,0x00,0xF7,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x16,0x00,0xF6,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xD9,0x00,0x55,0xDA,0x55,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0xDA,0x04,0x04,0x55,0x54,0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5A,0x00, -0xF6,0xDA,0xF6,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0x55,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0x00,0x04,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, -0xF3,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xF6, -0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF3,0x04,0x04,0x04,0x04, -0x04,0x04,0xF4,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xDC,0x04,0x00,0xB3, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x54,0xDA,0xF6,0x00,0xDB,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDB,0x00,0x55,0x04,0x00,0x00,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDB,0x00,0x55,0xDA,0x55,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDB,0x00,0x00,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x04,0xDA,0x54,0xF6,0x04,0x04,0x04,0x04, -0xDA,0x53,0xF5,0x04,0x04,0x04,0x04,0xDD,0x00,0x57,0x04,0x04,0x04,0xDA,0x00,0x00, -0x00,0xD7,0x04,0x04,0x04,0xD6,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x54, -0xEF,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0xB8, -0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0xD4,0x04,0x04,0x04, -0x5B,0x54,0x57,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xF4,0x00,0xDB,0x04,0x04, -0x04,0x04,0xEF,0x56,0x17,0xDA,0x04,0x04,0x04,0x04,0x16,0xD7,0x04,0x04,0x3B,0x3B, -0x3B,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xDC,0x04, -0x04,0x04,0x54,0xB8,0x04,0x04,0x04,0x04,0xDB,0xF5,0x00,0x00,0x00,0xF7,0xD8,0x04, -0x04,0x04,0xDA,0xD0,0x57,0x57,0xD0,0x04,0xDA,0xF6,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xDB,0x55,0x00,0x00,0x00,0xD5,0x04,0x04,0x04,0x60,0x00, -0x58,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD0,0x54,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x53,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x55,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x0B,0xF7,0xF4,0x00,0xB3,0xD5,0x04, -0x04,0x04,0x04,0x04,0xF4,0x53,0xDA,0x04,0xDA,0xF6,0x00,0x04,0x04,0x04,0x04,0xF3, -0x00,0x5C,0x04,0x04,0x04,0x04,0xB8,0x00,0x55,0x04,0x04,0x04,0xF4,0x00,0xEF,0x04, -0x04,0x04,0x04,0x57,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDE, -0x04,0x04,0x04,0x04,0xDA,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0xDA,0x04,0x04,0xF5, -0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x00,0x59,0x04,0x00,0xF6,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xD0,0xF6,0x00,0x00,0xF6,0xD0,0x04,0x04,0x04, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04, -0x04,0xDE,0xF6,0x00,0x00,0xF5,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDC,0x54,0x00,0xDB,0x04,0x00,0xD8,0x04,0xD0,0x00,0x58,0x04,0x04,0x04, -0x04,0xD7,0x00,0x58,0x04,0x04,0xDA,0x00,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD4, -0x04,0x04,0x04,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xDE,0x04,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xB8,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xD0,0x04,0x00,0xF4,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x53,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0xFA,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0xB3,0xB3,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04, -0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x57,0x00,0x59,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF4,0x54,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00, -0x57,0x04,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF4,0x53,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, -0x60,0x04,0x04,0xDA,0x57,0x00,0x00,0xF3,0x57,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x55,0x00,0xDB,0x04,0x04,0x04,0x04, -0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD9,0x04,0x04,0x04,0xF5, -0xB3,0x04,0x04,0xF6,0x54,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x56,0x00,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x54,0xF4,0x04,0xD9,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDF,0x54,0x5C,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x53,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04,0xB8,0x00,0xD7,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x54,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x53,0x00, -0xF6,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xD0,0x04, -0xDE,0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xF5,0x04,0x04,0xDE, -0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD5,0x54,0x00,0xF6,0x04,0xE1,0x00, -0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6, -0x04, -0x04,0x04,0x04,0xD6,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00, -0x00,0x04,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xF7,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0xD8,0x53,0xC6,0xDB,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0xD8,0x00,0x00, -0xDF,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x00,0x00,0xD3,0x04,0x04,0x04, -0x04,0x04,0xD2,0x00,0xF6,0x04,0xD6,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x55,0x00,0xE1,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00, -0xD0,0x04,0xD0,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0x00,0x04, -0x00,0x00,0xD9,0x04,0x04,0x04,0x04,0x55,0x00,0xDA,0x04,0x04,0xDA,0x17,0xD2,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0xF6,0x00,0x04,0x04,0x17,0x00,0xD6,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDC, -0x04,0x04,0x04,0x56,0x00,0xD5,0x04,0x04,0x04,0xDA,0xF6,0x54,0x53,0x04,0x04,0x04, -0x04,0x04,0x54,0xF6,0x04,0x04,0x04,0x04,0x04,0x60,0x54,0x57,0x04,0x5D,0x00,0x58, -0x04,0x04,0x04,0x04,0x17,0x54,0x59,0x04,0x04,0x04,0x04,0xDB,0x00,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD6,0x54,0xB8,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3C,0x3B,0x3B,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xD0,0x16,0x00,0x56,0xD0,0xD0,0xD0,0x00,0xF4, -0xD0,0xD0,0x04,0xDA,0x53,0x54,0xF3,0xFA,0xD4,0x04,0x04,0x04,0x04,0xDA,0xF6,0x54, -0x00,0x00,0x54,0x55,0xDA,0xD0,0x00,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF7,0x54,0xF6,0x54,0x00,0x57,0x04,0x04,0x04,0xF4,0x53,0xDA,0x04,0x04, -0x04,0x04,0x04,0x58,0x00,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8, -0x54,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDA,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x00,0x00,0xEF,0x04,0x04,0x04,0x04,0x04,0x04, -0xD7,0x00,0xF7,0x04,0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xB3,0xF7, -0xF7,0x53,0x00,0xF5,0xDA,0x04,0x04,0x04,0xDC,0x54,0x00,0xF4,0xB8,0xF7,0xB3,0x00, -0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x54,0xF6,0xDA,0x04,0x04,0x04, -0xD8,0x00,0x00,0xF5,0xB8,0xF6,0x00,0x00,0xD9,0x04,0x04,0x54,0xF4,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0x00,0x00,0xF3,0x17,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0xF4,0x00,0x00,0xF7, -0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE, -0x00,0xF7,0x04,0xF4,0xD6,0x04,0x04,0xF3,0x54,0xDB,0x04,0x04,0x04,0x04,0x00,0xB3, -0x04,0x04,0xDA,0x00,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x04,0x5B, -0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0xD9,0xEF,0x53,0x54, -0xD9,0x04,0x04,0xF5,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF4,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x00,0xDA,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0xF7,0x00,0x59,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA, -0xD0,0x00,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0x00,0xF6,0x04, -0x00,0xF6,0x04,0x04,0xD7,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xF5, -0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00, -0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0xF4,0x00, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF5, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0xFA, -0x00,0xF6,0xDC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0xD9,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x58,0x00,0xD0, -0x04,0x04,0x04,0x04,0x04,0x53,0xF3,0x04,0x04,0x04,0x04,0x57,0x00,0xDB,0xDA,0x00, -0x55,0x04,0x04,0x04,0x04,0xF7,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00, -0x00,0x00,0x00,0xF2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xD0,0x04, -0x04,0xB8,0x54,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0xD8, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0x00,0xD0, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0xF5,0x54, -0xD4,0x04,0x04,0xDA,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xB8, -0x54,0xF5,0xDB,0x04,0x04,0x04,0x04,0xDE,0xB3,0x00,0x00,0xF6,0x04,0x00,0x00, -0xC6,0x55,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x04,0xB8,0x54,0xF6, -0xD9,0x04,0x04,0x04,0x04,0x0A,0x54,0x54,0xD5,0x04,0x04,0x04,0xB8,0x00,0xF6,0xD9, -0x04,0x04,0x04,0x04,0xE1,0x53,0x00,0x00,0xF6,0x04,0x04,0x55,0x00,0xB8,0xD4,0x04, -0x04,0x04,0xDA,0xB8,0x54,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x55,0x00,0xB8,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x00,0x04,0x00,0x00, -0xF3,0xDB,0x04,0x04,0x04,0xD9,0xF3,0x00,0xD2,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04,0xF2,0x00,0xF4,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x00,0x00,0x55,0xD4,0x04,0x04,0xDA,0x55,0x00,0x00,0x53,0xDB,0x04,0x04, -0x04,0x5C,0x00,0xF7,0x04,0x04,0x00,0x00,0xF3,0xD9,0x04,0x04,0x04,0xDB,0xF3,0x00, -0xE1,0x04,0x04,0x55,0x00,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0x55,0x04,0x04, -0x00,0x00,0xC6,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x00,0xF7,0x04,0x04,0x04,0x55, -0x00,0xF7,0xD4,0x04,0x04,0x04,0xDA,0xF7,0x54,0x00,0x00,0x04,0x00,0x00,0xF5,0xD4, -0x04,0x04,0x04,0xB8,0x54,0xD0,0x04,0x04,0xDF,0x00,0x57,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04, -0x04,0xF5,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xB8,0x04,0x04,0x04,0x53, -0xF5,0x04,0x04,0x04,0x04,0x04,0x5E,0x09,0xB8,0x04,0x04,0x04,0x04,0x04,0xB8,0x54, -0xD9,0x04,0x04,0x04,0xDB,0x00,0xF4,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0x04, -0xF5,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xD0,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xD8,0x3E,0x04,0x00,0xF6,0xDA,0x04,0x04,0xDA, -0x04,0x04,0x00,0x00,0x00,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x5A, -0x00,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0xB8,0xD8,0xDA,0xB8,0x54, -0x56,0x04,0xF4,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x60,0x00,0xB8, -0x04,0xD8,0xF6,0x00,0x59,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04, -0xB6,0xD0,0x04,0xDE,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xD6,0x04,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6, -0xDA,0xF6,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04,0x04, -0x04,0x04,0xDA,0xD2,0xF4,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDE, -0x04,0xF6,0x00,0x04,0x04,0x04,0x04,0x5A,0x54,0x57,0xF6,0x54,0x00,0xF4,0x5D,0x04, -0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x00,0x53,0x00,0xF3,0x59,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0xDC,0x04,0x04,0x04,0xF7,0x00,0xDF,0x04, -0x04,0x04,0xD6,0x00,0x55,0x04,0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDA,0x00,0x55,0x04,0x54,0x55,0x04,0x04,0x04,0x54,0x55,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD9,0x56,0x54,0x00,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x53,0x00,0x54,0x56,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDE,0x57,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x57, -0xF5,0x04,0x04,0xD7,0x00,0xB3,0xD5,0x04,0x04,0xDB,0x00,0x00,0xDE,0x04,0xDE,0xF3, -0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x53,0x04,0x04,0x04,0xB3,0xF3,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0xD2,0x00,0x56,0x04,0x04,0x58, -0x00,0xFA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x56,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x5D,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0xF5,0x00,0xD0,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xF6,0x00,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x5A,0x04,0x00,0xF6,0xDA,0x00,0xF6,0xDA,0xD4, -0xF3,0x00,0xDB,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xFA,0x00,0x5A,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0x16,0x04,0x00,0xF6, -0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0xB8,0x54,0x17,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x57,0x04,0x00,0xF6,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0xF3,0x54,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x58,0x00,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04, -0xDC,0x00,0x56,0x04,0x04,0x04,0x04,0xD2,0x00,0x00,0x00,0x00,0x16,0x04,0x04,0x04, -0x04,0xDF,0x00,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x54,0xDC,0xD9,0x00,0xF3, -0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x00,0xF5,0x04,0x04,0x04,0xD8,0x00,0xF5, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x00,0xF7,0x04,0x04,0x04,0x04, -0x54,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0xF3,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD8,0x00,0xF6,0xDA,0x04,0x04,0x04,0x0A,0x00,0x59,0x04,0x04,0x5D, -0x54,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x56,0x00,0x00, -0xF5,0xF7,0xF7,0xF3,0x00,0xB3,0xD5,0x00,0xF6,0xDA,0x00,0xF6,0x0B,0x00,0x00,0x55, -0xB8,0x55,0x54,0x00,0xF7,0xDA,0x04,0x04,0x04,0x04,0x56,0x00,0x00,0xF6,0xB8,0xF7, -0xF3,0x00,0x53,0xD7,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0x54,0xF6,0xB8,0xF7,0xF3, -0x00,0x53,0xD2,0x00,0xF6,0xDA,0x04,0xDA,0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00, -0xF7,0x04,0x04,0x04,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0xB8,0x04,0x04,0xDA,0x55,0x00, -0x54,0x55,0xB8,0x55,0x00,0x00,0x0A,0xF6,0x00,0x04,0x00,0x00,0x00,0x00,0xF6,0xB8, -0x55,0x00,0x00,0x58,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x58,0x00,0xB8,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00,0x00, -0x00,0x53,0xF7,0xF7,0x53,0x00,0x5A,0xDC,0x54,0x00,0x55,0xB8,0xF5,0x53,0xF3,0xD9, -0x04,0x04,0x00,0x00,0x00,0x54,0xF6,0xB8,0xF6,0x00,0x00,0x56,0x04,0x04,0x04,0xDA, -0xF7,0x00,0x00,0x55,0xB8,0x55,0x54,0x00,0xF6,0xD4,0x04,0x04,0x00,0xF6,0x0B,0x00, -0x00,0x55,0xB8,0x55,0x54,0x00,0xF7,0x04,0x04,0x04,0x04,0xDA,0xF7,0x00,0x00,0x55, -0xB8,0x55,0x54,0x00,0x59,0xF6,0x00,0x04,0x00,0x00,0x00,0x54,0xF7,0xD7,0x04,0xDB, -0x54,0x00,0xF7,0xF7,0x00,0x54,0xD9,0x04,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0x04, -0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xDC,0x00,0x57,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDA,0x04,0xD0,0x00,0xFA,0x04,0x04,0x04, -0x04,0x04,0xDA,0x16,0xDB,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0x59,0x04,0x04,0x04, -0xF5,0x54,0xDD,0x04,0x04,0x04,0xD9,0x54,0xF3,0xDA,0x04,0xDC,0x00,0x55,0x04,0x04, -0x04,0x04,0x04,0x04,0xD0,0x00,0x57,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xF7, -0x00,0x53,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xFF,0xF9,0x94,0x04,0x00,0xF6,0x04,0x00,0xF6,0xF6,0x00,0x04,0xD9,0xD9, -0xD9,0xF5,0xF5,0xD9,0xD9,0xD9,0x58,0x00,0xD7,0xD9,0xDA,0x55,0x00,0xD8,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0x04,0x04,0xB3,0x53,0x04,0xDF,0x00, -0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3,0x54,0xDA,0x04,0x04,0xDA,0x53, -0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xF7,0x00,0xE1,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00,0xDF,0x04,0x04,0x04,0x57,0x53,0xD9,0x53, -0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0xF4,0x53,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x53,0xF3,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x04,0xD4,0xDA,0x04,0x04,0x04,0x04, -0xD5,0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xB3,0xF3,0xD4,0xF6,0x00,0x04, -0x04,0x04,0x04,0xDE,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF5,0x00,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDB,0x00,0xF7,0x04,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0xF4, -0x00,0x04,0x04,0xF3,0x54,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0x54,0xB8,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDA,0x5B,0x53,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x53,0x5B,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D, -0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0xD9,0x00,0x5A,0x04,0x04, -0xE1,0x00,0x00,0x55,0xB8,0x53,0xF5,0xF3,0xF7,0x04,0xF5,0x56,0x04,0x04,0x04,0x04, -0x04,0x04,0xDF,0x00,0x17,0x04,0xE1,0x00,0x5C,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x55,0x04,0x04,0xD8,0x09,0x53,0xD9,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0xB8,0xD0,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0xD5,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xDB,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB, -0xF7,0x56,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0xD9,0x53,0x54,0xD5,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xD5,0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF3,0xB3,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xB8,0x00,0xFA,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xDA,0xB3,0xC6,0xDB,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD5,0x00,0x53,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF5,0x00,0x04,0xD5,0x00,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0xEF,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x53,0x53,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xD9,0x04,0x04,0x04,0x59,0x00,0xDE,0x04, -0x04,0x04,0x04,0x04,0x54,0x00,0x00,0xC6,0xDB,0x04,0x04,0x04,0x04,0xD8,0x54,0xF7, -0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x57,0x04,0x04,0xFA,0x00,0xB8,0x04,0x04,0x04, -0x04,0x04,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x57,0x00,0xD6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04,0xF4,0x53,0x04,0x04, -0x04,0x04,0x04,0x04,0xD5,0x54,0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0, -0x00,0xF7,0x04,0x04,0x04,0x04,0x04,0x53,0xB3,0x04,0x04,0xF3,0x53,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF7,0xF3,0x00,0x00,0xF4, -0x59,0xDA,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0xD3,0xF7,0x53,0x00,0x54,0x55,0xD0, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD3,0xF7,0xB3,0x00,0x00,0xF4,0x59,0xDA,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x00,0x00,0xF4,0x57,0xDA,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x53,0x55,0xDE,0x04,0x04,0x04,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xE1,0xF6,0x53,0x00,0x53, -0xF7,0xD5,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x56,0xB3,0x00,0x54,0x55,0xDE,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x0A,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0xD9,0x55,0x54,0x00, -0xF5,0xD6,0x04,0x04,0xDB,0x55,0x54,0x00,0xB3,0xB8,0xDA,0x04,0x04,0x04,0x00,0xF6, -0x04,0x59,0xF3,0x00,0x54,0xF6,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x55,0x53, -0x00,0x54,0xF6,0x0A,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0xD3,0xF7,0x53,0x00,0x54, -0xF6,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x55,0x53,0x00,0x53,0x55,0xD2, -0x04,0xF6,0x00,0x04,0x00,0xF6,0xD7,0xF3,0x54,0x57,0x04,0x04,0xDC,0xF6,0x00,0x54, -0xF6,0xDD,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0xB8,0x00,0xD9,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xE1,0x00,0x16,0x04,0xF7,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF4,0xF3,0x04,0x04,0x59,0x00,0x5A,0x04,0x04, -0x04,0x04,0x04,0x60,0x00,0x56,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF3,0x54,0xDA,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x9E, -0xFF,0x04,0x00,0xF6,0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xB8,0x54,0x04, -0x04,0x04,0xF2,0x00,0xD0,0x04,0xDA,0x55,0x00,0xDA,0x04,0x04,0x04,0x04,0x55,0xF3, -0x04,0x00,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x53,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x54,0xF5,0x04,0x04,0x04,0x04,0xF5,0x00,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD8,0x54,0x53,0xD9,0x04,0x04,0x04,0x04, -0x04,0xDC,0x00,0xF5,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xB8,0x00,0xDA,0x04,0x04,0xB8,0x00,0xDE,0x04,0x04,0x04,0x04,0x04,0x04,0x57, -0x00,0x5C,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x55,0x00,0xDD,0x04,0x04,0x04,0x04, -0x04,0xD9,0x00,0xF6,0x04,0x04,0xF5,0xB3,0x04,0x04,0x04,0x04,0xDA,0x00,0x55,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDA, -0x54,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00, -0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55, -0x54,0xD9,0x04,0x04,0x54,0xF4,0x04,0x04,0x04,0x04,0x04,0xF4,0x54,0x04,0x04,0x57, -0x00,0xEF,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0xDE,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF2,0x00,0x56,0x04,0x04, -0x04,0x04,0x04,0xD4,0x00,0xF5,0x04,0x04,0x17,0x00,0x5C,0x04,0x04,0xD5,0xF7,0x54, -0x00,0xF6,0xD9,0x04,0x04,0x00,0x53,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53, -0xF4,0x04,0xF6,0x53,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0xD9,0x00,0xF7,0x04,0x04,0x04,0x16,0x00,0xF4,0xD9,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xDD,0x54,0x54,0xD9,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0xB8,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x00, -0xF4,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0xF3,0x00,0x0A,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04, -0xD7,0x00,0xF3,0xD4,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x00,0x00,0x00,0x00,0xDD,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00, -0x00,0x00,0xF6,0x04,0x00,0xF6,0xDE,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0xD2,0x00,0xF3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0xDD, -0x53,0x00,0xDE,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD4,0x54, -0xB3,0x04,0x04,0x57,0x00,0xF5,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD9, -0xF4,0x53,0x5D,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x00, -0xFA,0x04,0x04,0x53,0x53,0x04,0x04,0x04,0x04,0x04,0xDC,0x00,0xF7,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0xD6,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xDE,0x00,0x57,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x55,0x00,0x54,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x54,0x04,0x04,0x04,0x04, -0xDC,0x00,0xF4,0x04,0x04,0x04,0x04,0xF6,0x00,0xD2,0x04,0x04,0x04,0x04,0xD9,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x54,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xD8,0x53,0xF4,0x04,0x04,0x04,0x57,0x00,0xEF,0x04,0x04,0x04,0x04,0x04, -0xB8,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0xDF,0x04,0x04, -0x04,0x04,0x04,0x59,0x00,0xE1,0xDE,0x54,0x57,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF5, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD5,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x54,0x41,0x04,0x00,0xF6, -0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDF,0x00,0xDB,0x04,0x04,0xDA,0x00, -0x57,0x04,0x04,0x59,0x00,0xDE,0x04,0x04,0x04,0xD4,0x54,0xF5,0x04,0xF6,0x00,0xD7, -0x04,0x04,0xD7,0x00,0xF6,0x04,0x04,0x5B,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF5,0x00,0xD5,0x04,0x04,0xDD,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x00,0xF6,0x04,0x04,0x04,0xD0,0x00,0xF4,0xD9,0x04,0x04,0x04,0xDB,0x53,0x54,0xDB, -0x04,0x04,0x04,0x53,0x54,0x00,0x00,0x00,0x53,0x54,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDE,0x54,0xD6, -0x04,0x04,0xDD,0x00,0x53,0xD7,0x04,0x04,0x04,0x04,0x17,0x00,0x53,0xDA,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0xD2,0x00,0xF3,0xD9,0x04,0x04,0x04,0xD9,0xF4,0x00,0xDE, -0x04,0x04,0xB8,0x54,0xE1,0x04,0x04,0x04,0x58,0x00,0x58,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xF7,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x53,0xF5,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x5D,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD7,0x00,0xB8,0x04,0x04, -0x55,0x00,0xD6,0x04,0x04,0x04,0xE1,0x00,0x55,0x04,0x04,0xDA,0x53,0x54,0xDE,0x04, -0x04,0x04,0x04,0x56,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDF,0x04,0x04,0x04,0xDA,0xF6, -0x54,0xDF,0x04,0x04,0x04,0x59,0x00,0xF6,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0xE1, -0xF3,0x54,0xD2,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x54,0x5A,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xF7,0x00, -0x60,0x04,0x04,0x04,0x04,0x56,0x00,0x53,0xDF,0x04,0x04,0x04,0x04,0x04,0xDA,0x5A, -0x00,0x00,0xD7,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0xF4,0x00, -0x55,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x55,0x00,0x54,0x16,0xDA, -0x04,0x04,0x04,0x04,0x04,0xDF,0x53,0x00,0x5A,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x17,0x00,0xF6, -0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x53,0x00,0x00,0xF6,0x04, -0x00,0x00,0x00,0x54,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04, -0x04,0xE1,0x00,0x54,0x5B,0xD4,0xDA,0x04,0x04,0x04,0xDA,0x58,0x00,0x00,0x0A,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDA,0x55,0x00,0xB8,0x04,0x04,0x04, -0xF7,0x00,0x53,0xDF,0x04,0x04,0x04,0x04,0x04,0x04,0x17,0x53,0x00,0xB8,0x04,0x04, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xFA,0x00,0x53,0xDA,0x04,0x04,0x56, -0x00,0x56,0x04,0x04,0x04,0xDA,0xF6,0x54,0xD0,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0xF6,0x00,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB3, -0x53,0x04,0x04,0xDA,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x00,0x00,0xB8, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0x54,0xD7,0x04,0x04,0x04,0xF4,0x54,0xDC,0x04, -0x04,0x04,0x04,0xDB,0x00,0xF3,0xDA,0x04,0x04,0x04,0xF7,0x00,0xD2,0x04,0x04,0x04, -0x04,0x04,0x04,0x59,0x00,0x17,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5B, -0x54,0x5B,0x04,0x04,0xD8,0x54,0x54,0xD7,0x04,0x04,0x04,0xD4,0x54,0xF7,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x57,0xC6,0xF3,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x00,0x00,0x00,0x00,0xD8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x16,0x60,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDD,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54,0x55,0xDA,0x04,0x04,0x04, -0x54,0x55,0xDA,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF4,0x04,0x04,0x04,0x00,0xF6, -0x04,0x04,0xD9,0x00,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x59,0x04,0x00,0xF6,0xDA,0x00,0x00,0x00, -0x00,0x04,0x04,0x04,0x04,0xD5,0x00,0xD6,0x04,0x04,0x04,0xB3,0x55,0x04,0x04,0xDA, -0x53,0xB3,0xD2,0x04,0xD9,0x55,0x00,0xEF,0x04,0xDC,0x54,0x00,0xF7,0xF7,0x00,0x54, -0xDC,0x04,0x04,0xDA,0x54,0x56,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD2,0x00,0x54, -0xF7,0xF7,0x00,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04, -0x04,0x04,0x0A,0x00,0x53,0xD7,0x04,0xDE,0x54,0x54,0xD7,0x04,0x04,0x04,0x04,0xB8, -0xB8,0x54,0x00,0x00,0xB8,0xB8,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xF7,0x04,0x04,0x04,0x0A, -0x00,0x54,0xF5,0xF7,0xF7,0xF3,0x00,0x53,0xD3,0x04,0x04,0xB8,0xB8,0xB8,0x54,0xF6, -0xDA,0x04,0x5C,0x00,0x00,0x55,0xB8,0x55,0x00,0x00,0x5A,0x04,0x04,0x04,0xD9,0x53, -0x00,0xF6,0xB8,0xF5,0x53,0xF3,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x54,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x55,0x54,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, -0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDC,0x04,0x04,0x04,0x04,0x04, -0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x00,0x04,0x04,0xD9,0x53,0x54,0xF6, -0xB8,0xF6,0x54,0x53,0xD9,0x04,0x04,0x04,0xD3,0x53,0x00,0xF5,0xB8,0xF7,0x53,0x00, -0xF6,0xD4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD7,0x54,0x00,0xF4,0xB8,0xF7,0x54,0x00,0xB8,0x04,0x04,0x04, -0x04,0x04,0xE1,0x53,0x00,0x53,0x55,0xB8,0xF7,0xF6,0x54,0x00,0xF5,0xDD,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0x00,0x00,0xDB,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0x53,0xB8,0xB8,0xB8,0x55,0x53,0x00,0xF6,0x04,0x04,0x04,0x04, -0x04,0x04,0x17,0x54,0x00,0x54,0x55,0xB8,0xF7,0xF6,0x00,0x00,0xF4,0xDD,0x04,0x04, -0x04, -0x00,0x53,0xB8,0xB8,0xB8,0xF7,0xF5,0x54,0x00,0x00,0x58,0x04,0x04,0x04,0x04, -0x00,0x53,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xD0,0x04,0x00,0x53,0xB8,0xB8,0xB8, -0xB8,0xB8,0xB8,0xD0,0x04,0x04,0x04,0x04,0xB8,0x54,0x54,0x00,0xF6,0xB8,0xB8,0x55, -0x54,0x00,0xF3,0xDE,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0xF6,0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6, -0x00,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0x56,0x04,0x04,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0xE1,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x54,0x00,0xF6,0xDA,0x00,0x00,0x00,0xDF, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0xD3,0xF4, -0x00,0x00,0xF6,0xF7,0xF7,0xF6,0x00,0x00,0xF3,0xD7,0x04,0x04,0x04,0x04,0x00,0x53, -0xB8,0xB8,0xB8,0xF7,0xF6,0x00,0x00,0xF4,0xDA,0x04,0x04,0x04,0x04,0x5C,0x54,0x00, -0x54,0xF6,0xB8,0xF7,0xF6,0x00,0x00,0x54,0x17,0x04,0x04,0x04,0x04,0x00,0x53,0xB8, -0xB8,0xB8,0xF7,0xF6,0x00,0x00,0x53,0xDC,0x04,0x04,0x04,0xDA,0xF5,0x53,0xF3,0xF7, -0xF7,0x54,0x00,0xB8,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0x54,0x53,0xB8,0xB8,0xB8,0xB8, -0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0xDB,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x59,0x54,0xDF,0x04,0xD6, -0x00,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0xE1,0x04,0x04,0x04,0x04, -0x04,0x04,0xD7,0x00,0x57,0x04,0x04,0x58,0x00,0x57,0x04,0x04,0x04,0x04,0x04,0x04, -0x5D,0x54,0x56,0x04,0x04,0xDB,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x53,0xB3,0x04,0x04,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0x54,0x54,0x04,0x04, -0x04,0xDE,0x00,0x00,0xDF,0x04,0x04,0x5D,0x54,0xDC,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xF4,0x54,0xB3,0xDB,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF7,0x00,0x00,0xF7, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xE1,0xF3,0x54,0x55,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xD0,0x00,0x00,0xF6,0xB8,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04,0x04,0x00,0xF6,0xDA,0x00, -0xF6,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x55,0xDE,0x04,0x00,0xF6,0xDA,0xB8,0xF3,0x00, -0x5A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x81,0xFF,0x45,0x04,0x00,0xF6,0x04,0x00,0xF6,0xF6,0x00,0x04,0x04,0x04, -0x04,0x04,0x54,0x56,0x04,0x04,0x04,0x55,0x53,0x04,0x04,0x04,0xD9,0xF6,0x00,0x00, -0x00,0x00,0x58,0x04,0x04,0x04,0xD5,0x55,0x54,0x54,0xF6,0xDD,0x04,0x04,0x04,0x04, -0x57,0x54,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDC,0xF6,0x00,0x54,0xF6,0xD3, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0xDC, -0xF6,0x58,0x04,0x58,0x55,0xD9,0x04,0x04,0x04,0x04,0x04,0x04,0xD9,0x00,0x00,0x00, -0xD5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0x00,0xDA,0x04,0x04,0x04,0xD5,0xB8,0xF3,0x00, -0x00,0xF3,0x57,0xD8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xF6,0x04,0x04,0x04,0xD7, -0xF7,0x53,0x00,0x53,0x55,0xD7,0x04,0x04,0x04,0x04,0x04,0xD9,0xF7,0x53,0x00,0xB3, -0xB8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDF,0x00,0x00,0x04, -0x04,0x04,0x04,0x04,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xD9,0x54,0xF3,0xDA,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xD8,0xB8,0x53,0x00,0x53,0xB8,0xD9, -0x04,0x04,0x04,0x04,0x04,0xD8,0x56,0xF3,0x00,0x54,0xF5,0x17,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0xDB,0xF7,0x53,0x00,0x54,0xF6,0x0A,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x17,0x55,0xB3,0x00,0x00,0xF3,0xF7,0xD0,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0xF7,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0x00,0x00,0x00,0x00,0x53,0xF6,0x16,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA, -0x5D,0xF6,0x53,0x00,0x00,0xF3,0xF7,0xE1,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00, -0x00,0x00,0x54,0xF3,0x55,0x5C,0xD8,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x54,0x57,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x57, -0x04,0x04,0x04,0x04,0x04,0xDD,0xB8,0xF3,0x00,0x00,0x00,0xF3,0xF7,0xE1,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00, -0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0x04,0x00,0xF6, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x00,0xDF,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xB3,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD5,0x00,0x00,0xF6,0x04,0x00,0x00,0x55,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0xE1,0xF7,0xB3,0x00, -0x00,0xB3,0xF7,0xD6,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x53,0xF6,0x16,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x5A,0xF6,0x53,0x00,0x00, -0x53,0xF6,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xB3, -0x55,0xFA,0xDA,0x04,0x04,0x04,0x04,0x04,0xD4,0x59,0xF4,0x00,0x54,0xF5,0xDF,0x04, -0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xF6,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x56,0x00,0xD0,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8,0x00,0xF5,0x04,0xF7,0x00,0xD9,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xF3,0x00,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x54, -0xF4,0x04,0xDD,0x00,0xF4,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF5,0x00,0xD7, -0x04,0xF7,0x00,0xD7,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x5D,0x00,0x5C,0x04, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0xDC,0xF5, -0x58,0x04,0x04,0xF3,0xF5,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x53,0xB8,0xDA, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDD,0x00,0x00,0xD7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xD8, -0xF5,0x54,0xF3,0xE1,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, -0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0xD3,0xF7,0xB3,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x00,0xF6,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0xD5,0xF4,0x54,0x57,0x04,0x00,0xF6,0x04,0x00,0x53,0xF7,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B, -0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDB,0x00,0xF4,0xDA,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xB8,0xF4,0x04,0x55,0xF7,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xDA,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xF6,0x5D,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xEC,0xFF,0x3B,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0xF6,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0xD9,0x04,0xD8,0xDA,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x3B,0x3B,0x3B,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, -0x04, -0x04,0x3B,0x3B,0x3B,0x00,0x00, + 0x04, + 0x27, + 0x0A, + 0x00, + 0x00, + 0x6F, + 0x73, + 0x00, + 0x00, + 0xB7, + 0xDC, + 0x00, + 0x00, + 0xCB, + 0x50, + 0x01, + 0x00, + 0x0B, + 0x04, + 0x00, + 0x00, + 0x1A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3A, + 0x69, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDF, + 0x56, + 0xF7, + 0x56, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x04, + 0xDF, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0xDF, + 0xDA, + 0x04, + 0xDD, + 0xF7, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x04, + 0x57, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xC6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD5, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0x53, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xFA, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x54, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x09, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x54, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5E, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB3, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x09, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xF7, + 0x53, + 0x00, + 0x54, + 0x00, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xB3, + 0x00, + 0x54, + 0x00, + 0x53, + 0xF7, + 0xDB, + 0xDA, + 0x56, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF3, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x57, + 0x53, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x56, + 0x53, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0xC6, + 0x00, + 0x00, + 0x53, + 0x58, + 0xDA, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x53, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0x54, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xC6, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xC6, + 0x00, + 0x00, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0xF5, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF3, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xC6, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x55, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xDA, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0x53, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xB3, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x53, + 0x55, + 0xB8, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x55, + 0xB8, + 0xF4, + 0x54, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xC6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x54, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xB3, + 0xF7, + 0xB8, + 0xF4, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0xB8, + 0xF3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xDF, + 0xDA, + 0xDD, + 0xF3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xE1, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x53, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x17, + 0xD3, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x00, + 0xF3, + 0x17, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xF3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD4, + 0xF4, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0x21, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xDA, + 0xC6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x09, + 0xDA, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x59, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x60, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0xD3, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xDE, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0xB8, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF6, + 0x55, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x58, + 0xDA, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x57, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x16, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xDE, + 0xB8, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDB, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0xD7, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0xF7, + 0x54, + 0x59, + 0x17, + 0x17, + 0x55, + 0x00, + 0xFA, + 0x17, + 0x17, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xDC, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xF5, + 0xDD, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x54, + 0x54, + 0x5B, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD0, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x5D, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x5E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x58, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x55, + 0x00, + 0x00, + 0xD2, + 0xD8, + 0xC6, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB8, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD8, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD9, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0xD9, + 0x00, + 0x57, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xE1, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD9, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0x59, + 0x53, + 0x00, + 0x17, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0xF3, + 0x00, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDF, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0xDF, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0xE0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5B, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x5E, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x5B, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x5C, + 0x5E, + 0x56, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0xDD, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x5C, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0xDD, + 0x04, + 0x57, + 0x00, + 0xD9, + 0x59, + 0x00, + 0xDB, + 0x04, + 0x57, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xB8, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xDC, + 0x04, + 0xB3, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x87, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0x00, + 0x55, + 0xDD, + 0xDD, + 0xDC, + 0x00, + 0xF7, + 0xDC, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0xDF, + 0x54, + 0x00, + 0x00, + 0x54, + 0x50, + 0x04, + 0x04, + 0x55, + 0x00, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0xC6, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF6, + 0xDE, + 0xF1, + 0x5C, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x50, + 0xD0, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDF, + 0x00, + 0x54, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xB8, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDC, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x58, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0x55, + 0xD8, + 0x59, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0xF3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xF5, + 0x00, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xB8, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x53, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xC6, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD3, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x5C, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x60, + 0x5D, + 0x57, + 0xF6, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0xD5, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xD5, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xDB, + 0xDB, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0xEF, + 0x5D, + 0xF7, + 0x00, + 0xC6, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x57, + 0x53, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x00, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5E, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE0, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xC6, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x55, + 0xD3, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD9, + 0x04, + 0xD8, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xDF, + 0xD0, + 0xDA, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xFA, + 0xF7, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xC6, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF4, + 0x5A, + 0x5B, + 0xF5, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xD0, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDD, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xD3, + 0xDF, + 0xF6, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x54, + 0x00, + 0x54, + 0x57, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x55, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0xDB, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0xB8, + 0x04, + 0x56, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0xF5, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x60, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x53, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x56, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xDB, + 0xD9, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5C, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDA, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xD0, + 0x55, + 0x00, + 0xD0, + 0xD0, + 0xD0, + 0xF5, + 0x00, + 0xD0, + 0xD0, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0xD2, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x53, + 0x57, + 0x5D, + 0x55, + 0x54, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0x57, + 0xFA, + 0xF7, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xDB, + 0x04, + 0x54, + 0x53, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xD7, + 0x60, + 0xB3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xD8, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDB, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x0A, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x60, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xD6, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x5E, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDA, + 0xC6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x54, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF6, + 0xD7, + 0xD6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0xDB, + 0xF7, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xD9, + 0x17, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xDC, + 0xDB, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x5A, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0x5E, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0xDE, + 0xD7, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF5, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xB8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0xE0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0xDA, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD9, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x56, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x54, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x54, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x59, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDD, + 0x54, + 0x54, + 0xF4, + 0xF7, + 0xF7, + 0xF3, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x56, + 0x56, + 0x00, + 0x53, + 0x56, + 0x56, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xC6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x00, + 0xD6, + 0xF6, + 0x00, + 0xF3, + 0xB8, + 0xF7, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x54, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF4, + 0xF7, + 0xF7, + 0xB3, + 0x54, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x5C, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x09, + 0xF4, + 0x58, + 0x04, + 0xD3, + 0x00, + 0x54, + 0xB8, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x56, + 0x53, + 0x00, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x50, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0xD8, + 0xD9, + 0x00, + 0x58, + 0xD8, + 0xD8, + 0xD7, + 0x00, + 0x60, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0xD8, + 0xDB, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDB, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0xF1, + 0x00, + 0xF5, + 0x04, + 0xDB, + 0x54, + 0x54, + 0xB8, + 0x5A, + 0x00, + 0x53, + 0x00, + 0xD8, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDF, + 0xDB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xF1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x5C, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDD, + 0xF5, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x53, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD6, + 0xC6, + 0x00, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x59, + 0x04, + 0xB8, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF7, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x17, + 0x59, + 0x00, + 0x09, + 0x57, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x5A, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x53, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x5A, + 0x04, + 0x56, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x58, + 0x09, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5A, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x55, + 0xD8, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5D, + 0x04, + 0xD5, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5E, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0xD9, + 0xD8, + 0xF7, + 0x00, + 0x58, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xF7, + 0xF6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xC6, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x04, + 0x5C, + 0x54, + 0xB3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0xDF, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0xF7, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x17, + 0x56, + 0x56, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF5, + 0x54, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF4, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF3, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xF3, + 0xB8, + 0xF7, + 0x00, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x53, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xDF, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x54, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xB3, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x53, + 0x00, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF1, + 0x04, + 0x5B, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x50, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xB8, + 0x54, + 0x00, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF7, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD0, + 0xF3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF5, + 0x04, + 0x5A, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x50, + 0x04, + 0x04, + 0x04, + 0xFA, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF4, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF5, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x55, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD2, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x54, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF5, + 0x04, + 0xD8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x54, + 0x00, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xD5, + 0xD9, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x00, + 0x00, + 0x0B, + 0x04, + 0x00, + 0x00, + 0x1A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3A, + 0x69, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x59, + 0xF7, + 0xF7, + 0xB8, + 0xF9, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x04, + 0x59, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x59, + 0xDB, + 0x04, + 0xE1, + 0x55, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF5, + 0x53, + 0xB3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x53, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF5, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x04, + 0xB8, + 0x54, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xC6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x56, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xB3, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD6, + 0x53, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x58, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x09, + 0x57, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF6, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x55, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDE, + 0xDB, + 0xF7, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0xF3, + 0x00, + 0x00, + 0x54, + 0x55, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xF6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0xB8, + 0x53, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xB8, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0xB8, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x17, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xC6, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x55, + 0x55, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x53, + 0xF7, + 0x55, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0xC6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xC6, + 0x55, + 0x55, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0xF4, + 0x55, + 0xF7, + 0x55, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF6, + 0x53, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x60, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x00, + 0xB3, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x53, + 0x55, + 0xF7, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x11, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x11, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x55, + 0x55, + 0xF3, + 0x00, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xC6, + 0x00, + 0xB3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0xB3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB3, + 0xF7, + 0xF3, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xB3, + 0x55, + 0x55, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x09, + 0xC6, + 0x59, + 0xDB, + 0xE1, + 0xF3, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x5C, + 0x04, + 0x53, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0x58, + 0x0A, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDE, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x00, + 0xF3, + 0x58, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x17, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xD5, + 0xF6, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF5, + 0x54, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0xF6, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x57, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x53, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xF3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xD9, + 0x53, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0xC6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x09, + 0xC6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x53, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xD9, + 0x04, + 0xD8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF2, + 0xC6, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x60, + 0x04, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0x0A, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x09, + 0xB3, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x53, + 0x53, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x54, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xC6, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x56, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x56, + 0xDA, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0xF7, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDE, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x0D, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5A, + 0xDE, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x55, + 0x00, + 0x56, + 0x58, + 0x58, + 0xF6, + 0x09, + 0x57, + 0x58, + 0x58, + 0x04, + 0x55, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x54, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0xB3, + 0x54, + 0x16, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0xF4, + 0xE1, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x5B, + 0xF9, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x56, + 0x54, + 0x54, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x54, + 0x57, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0xDB, + 0x55, + 0x00, + 0x00, + 0xD8, + 0x59, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xF9, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x57, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD9, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xB8, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x0D, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0xDF, + 0xD5, + 0xE0, + 0x00, + 0x0A, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x09, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD3, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xD7, + 0x04, + 0xD7, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xE0, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0xF2, + 0x54, + 0xB8, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x09, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x60, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5D, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x04, + 0xD7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x56, + 0x56, + 0x53, + 0x00, + 0x58, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0xF3, + 0x00, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x59, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x59, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x55, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x57, + 0x09, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x59, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDC, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x55, + 0x57, + 0x57, + 0xB8, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x16, + 0x09, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x59, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xF5, + 0xDA, + 0xF5, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD5, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0xB8, + 0x54, + 0xD7, + 0x56, + 0x00, + 0xDE, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xF7, + 0x04, + 0x0D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0x13, + 0x04, + 0xB3, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xAD, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0x00, + 0xF6, + 0xE1, + 0xE1, + 0xD6, + 0x00, + 0x55, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x59, + 0x53, + 0x00, + 0x00, + 0x54, + 0x59, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x55, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xF5, + 0x16, + 0xD6, + 0x57, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x54, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x59, + 0xF9, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x59, + 0x54, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xE1, + 0x09, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x55, + 0x04, + 0x5B, + 0x53, + 0x55, + 0xB8, + 0x53, + 0x54, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x53, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF7, + 0x04, + 0x04, + 0xD3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0x55, + 0xDC, + 0x56, + 0x00, + 0xC6, + 0xF2, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xF4, + 0x00, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5A, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x54, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x0A, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x57, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x57, + 0xB8, + 0xF5, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0xD0, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xD0, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0xD8, + 0xDE, + 0xDE, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x17, + 0x5A, + 0x57, + 0x55, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB8, + 0x53, + 0x54, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x17, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x54, + 0x00, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0x09, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x09, + 0xC6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x58, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF3, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD7, + 0x04, + 0xD5, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x59, + 0x5E, + 0xD9, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x57, + 0xF7, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0xDA, + 0xDF, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF4, + 0x56, + 0x57, + 0xF5, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5E, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xF3, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x56, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0x0A, + 0x59, + 0xF6, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x03, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0xF7, + 0xC6, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0xF5, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x54, + 0xB8, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x54, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xDE, + 0xD2, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x57, + 0xD6, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xDD, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF9, + 0x55, + 0x00, + 0xF9, + 0xF9, + 0xF9, + 0xF5, + 0x00, + 0xF9, + 0xF9, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x55, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x09, + 0xC6, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0x57, + 0x55, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0xB8, + 0x57, + 0x55, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x5C, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0xDE, + 0x04, + 0x54, + 0x53, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xC6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0x0D, + 0x58, + 0xB3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xDC, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xDE, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5A, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x5B, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0xDC, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0x57, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x58, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD2, + 0xB3, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x58, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xDA, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xE1, + 0x04, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0x55, + 0x00, + 0xF7, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF9, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x58, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xC6, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0xDF, + 0x5B, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF3, + 0xDE, + 0x55, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xF2, + 0x58, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x55, + 0xE1, + 0xDE, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xD6, + 0x57, + 0x09, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0x60, + 0xDF, + 0xF6, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0xDA, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x60, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF4, + 0x04, + 0x5E, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x5B, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x53, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x0A, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0xDA, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x53, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x54, + 0xF2, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0xD8, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x54, + 0x53, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x59, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0xC6, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x56, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x54, + 0x0D, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x55, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x00, + 0x5B, + 0xF6, + 0x54, + 0xF3, + 0xF7, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0x55, + 0x53, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x55, + 0xF7, + 0xB3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x57, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x56, + 0x04, + 0x0A, + 0x00, + 0x09, + 0xF7, + 0xB3, + 0x00, + 0xF9, + 0x04, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x59, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x16, + 0x09, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0xDC, + 0xF2, + 0x00, + 0x56, + 0xDC, + 0xDC, + 0xDF, + 0xC6, + 0x57, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x57, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0xDC, + 0xDE, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0xDE, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB8, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0xF5, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xF7, + 0x56, + 0x00, + 0x53, + 0x00, + 0xD5, + 0xF5, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF3, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x59, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x55, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x0D, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x5D, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5E, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x5B, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0xDA, + 0x58, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x0D, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x57, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x0D, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0xF4, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xB8, + 0x00, + 0x09, + 0x04, + 0x04, + 0x5B, + 0xC6, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x54, + 0xB8, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x56, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x55, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x58, + 0x56, + 0x00, + 0x54, + 0xB8, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x57, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x60, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x58, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xC6, + 0x09, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x53, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF3, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x53, + 0x00, + 0xD2, + 0xDA, + 0x04, + 0x57, + 0x00, + 0x56, + 0x04, + 0xF7, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE0, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x56, + 0x54, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF5, + 0xD9, + 0xDA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0x55, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x57, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD3, + 0xDA, + 0xDA, + 0xD3, + 0x00, + 0x53, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xB3, + 0xDC, + 0xDA, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x55, + 0xD3, + 0x04, + 0xF1, + 0xF2, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x55, + 0xD3, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x16, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0xF4, + 0xE1, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0x5C, + 0x04, + 0x04, + 0xF2, + 0x54, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xDE, + 0xF5, + 0x54, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x17, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0xC6, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x09, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x55, + 0xD2, + 0xDC, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x5B, + 0x54, + 0x54, + 0x55, + 0xF6, + 0x00, + 0x53, + 0xDB, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0xC6, + 0xF7, + 0xF6, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x57, + 0x00, + 0xB3, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x5B, + 0x00, + 0x00, + 0x59, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x58, + 0xF7, + 0xF7, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF4, + 0x00, + 0x53, + 0x55, + 0x55, + 0x53, + 0x54, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF4, + 0xF7, + 0xF5, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF4, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x54, + 0x55, + 0x55, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0x09, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xF4, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x55, + 0xF4, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xC6, + 0x60, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x59, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0x54, + 0x54, + 0xB3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xC6, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF5, + 0x00, + 0x09, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB3, + 0x00, + 0xF4, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x54, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x53, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x55, + 0x0C, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF9, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0x00, + 0x00, + 0xF5, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x04, + 0x56, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x54, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x55, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF4, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x16, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xD8, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF4, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x5B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xD0, + 0xD7, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x00, + 0x00, + 0x49, + 0x04, + 0x00, + 0x00, + 0x1B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x74, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB8, + 0x5D, + 0x17, + 0x17, + 0x5D, + 0xF7, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDC, + 0xEF, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x5D, + 0x54, + 0x5D, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xD9, + 0xDF, + 0xB8, + 0x55, + 0xF7, + 0x5A, + 0xD2, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0x04, + 0xF2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDE, + 0xD9, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDC, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x5B, + 0x00, + 0x5B, + 0xDA, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC1, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD3, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xDE, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD3, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xD9, + 0x58, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xDA, + 0x60, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDE, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDD, + 0x5A, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD8, + 0x17, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xF2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD3, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0xDB, + 0xD8, + 0xD7, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xD0, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDD, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD6, + 0xD7, + 0xD8, + 0xD8, + 0xD7, + 0x12, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xE1, + 0xDD, + 0xD8, + 0xD3, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x16, + 0xF2, + 0xD9, + 0xD9, + 0xDE, + 0x5D, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0xD2, + 0xD9, + 0xD9, + 0xDE, + 0xFA, + 0xB3, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xD8, + 0xDC, + 0xD6, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0xD0, + 0xDC, + 0xD8, + 0xD9, + 0xD7, + 0xD6, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x03, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDB, + 0xD2, + 0xD6, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xFA, + 0xD0, + 0xDC, + 0xDA, + 0xD9, + 0xD3, + 0xE1, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD3, + 0xD0, + 0x5E, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xE1, + 0xD7, + 0xD9, + 0xDA, + 0xD5, + 0xDE, + 0x60, + 0xF6, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xD5, + 0xDA, + 0xDD, + 0xD6, + 0xF6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x5D, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xD0, + 0xDC, + 0xD8, + 0xD8, + 0xD3, + 0xE1, + 0x5A, + 0xF3, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x59, + 0xE1, + 0xF1, + 0xD8, + 0xD9, + 0xF1, + 0xE1, + 0x59, + 0x53, + 0xF5, + 0xDF, + 0xD7, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xEF, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD6, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDF, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDF, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD3, + 0xD8, + 0xD9, + 0xD7, + 0xDF, + 0xF5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x09, + 0xB8, + 0xE1, + 0xDC, + 0xD8, + 0xD5, + 0xD0, + 0x58, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD6, + 0xF1, + 0xD8, + 0xD9, + 0xF2, + 0x17, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x0A, + 0xD7, + 0xD9, + 0xD8, + 0xD2, + 0x17, + 0xF5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x57, + 0xD0, + 0xDD, + 0xD8, + 0xD5, + 0xE1, + 0xB8, + 0x00, + 0xF1, + 0xD7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD0, + 0xDD, + 0xDA, + 0xDB, + 0xDE, + 0x5A, + 0x00, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x56, + 0xD0, + 0xD5, + 0xDA, + 0xDD, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD0, + 0xD5, + 0xDA, + 0xD5, + 0xD0, + 0x56, + 0xC6, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD0, + 0xDB, + 0xD9, + 0xDE, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xDE, + 0xDB, + 0x04, + 0xD5, + 0xD6, + 0xF5, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xD9, + 0x55, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xD8, + 0xD0, + 0xE1, + 0xD9, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xDB, + 0xE1, + 0xD6, + 0xF1, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x54, + 0x58, + 0xD9, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x53, + 0x59, + 0xD8, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xD7, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0xD7, + 0xD6, + 0xD6, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDA, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x60, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x60, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x60, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDC, + 0x04, + 0xDC, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0xE1, + 0xD2, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD2, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xD6, + 0xDE, + 0xD5, + 0x04, + 0xD9, + 0x17, + 0x53, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD7, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDB, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xD5, + 0x04, + 0xDE, + 0xD6, + 0xDE, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDC, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD7, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD7, + 0x56, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD2, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xDE, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x16, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x59, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD5, + 0x04, + 0xD2, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0x04, + 0xF2, + 0xD6, + 0xD6, + 0xD3, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5A, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD4, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0xD2, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xEF, + 0x04, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x16, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xDA, + 0xDE, + 0xD6, + 0xE1, + 0xF1, + 0x04, + 0xDC, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDA, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0xD8, + 0x59, + 0xDE, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xF2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x60, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x16, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD8, + 0xD9, + 0xE1, + 0xD6, + 0xDB, + 0xD8, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0x54, + 0xEF, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0xE1, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x45, + 0x3E, + 0x54, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xF2, + 0xB8, + 0xF3, + 0xB8, + 0xD7, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD5, + 0xDF, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x59, + 0xD8, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD5, + 0xD7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD5, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xFC, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD4, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xD7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x12, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0xD8, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xD5, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x0A, + 0xD9, + 0x04, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0x04, + 0xDB, + 0xEF, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xD0, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xD5, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xD9, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD0, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDB, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xDC, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x60, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xDB, + 0x5E, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xDB, + 0xD8, + 0x59, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD9, + 0xDA, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD3, + 0xDA, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xD5, + 0x56, + 0x00, + 0x00, + 0x00, + 0x53, + 0x60, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0x04, + 0x04, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDC, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0xD9, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xDC, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xD6, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xDC, + 0x55, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x54, + 0x54, + 0xE1, + 0x04, + 0xE1, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x54, + 0x54, + 0xE1, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xF2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD5, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x7D, + 0x3B, + 0x45, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDB, + 0xF5, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0xEF, + 0xDA, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDD, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xD2, + 0xD8, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5A, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x59, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x54, + 0xDF, + 0x04, + 0x16, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD9, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x56, + 0xD0, + 0xDA, + 0x04, + 0xD2, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xD2, + 0x04, + 0xDA, + 0xE1, + 0x56, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0xDA, + 0xFA, + 0x00, + 0xF4, + 0xF7, + 0xF5, + 0x54, + 0x54, + 0xF3, + 0xF7, + 0x04, + 0x04, + 0x0A, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x60, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD9, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0xDA, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD7, + 0xD8, + 0x57, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD9, + 0xD9, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x56, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x5B, + 0x53, + 0xF5, + 0xD7, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x54, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDD, + 0xDE, + 0xF6, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0x00, + 0xD2, + 0xD2, + 0xB8, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x54, + 0x59, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x69, + 0xFF, + 0xAD, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDD, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x60, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0xC6, + 0xF2, + 0xDB, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDB, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0xDA, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD6, + 0x00, + 0xDB, + 0x04, + 0xD6, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0x04, + 0x0A, + 0x0A, + 0x00, + 0xE1, + 0xD4, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0xD7, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xF2, + 0x04, + 0x04, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xFA, + 0x00, + 0x60, + 0xD9, + 0x04, + 0xDA, + 0xD6, + 0xB8, + 0xDD, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF1, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0xDB, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD6, + 0x5A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0xF7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x09, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xD9, + 0xF5, + 0x57, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF4, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xDC, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD7, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x0D, + 0x04, + 0xFD, + 0xF7, + 0x57, + 0xDA, + 0xF1, + 0xF3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xDD, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0xB3, + 0xDC, + 0xF2, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xDF, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD4, + 0xB8, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0xDA, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF2, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0x5A, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x54, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDE, + 0x54, + 0xE1, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x5E, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xD0, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0x04, + 0x5A, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xF4, + 0x59, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x17, + 0x00, + 0xD2, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD9, + 0xB8, + 0xD5, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x60, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD7, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xD6, + 0x04, + 0xDE, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0xD5, + 0x0A, + 0x0A, + 0x0A, + 0x54, + 0x59, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDC, + 0xF3, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD0, + 0x00, + 0xDB, + 0xD2, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x60, + 0x0D, + 0x5E, + 0x04, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x60, + 0xF1, + 0x04, + 0xD9, + 0xD6, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xD8, + 0x04, + 0xD7, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDE, + 0x00, + 0x58, + 0x04, + 0xF1, + 0x60, + 0x17, + 0xF1, + 0x04, + 0x04, + 0x56, + 0x55, + 0xEF, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5B, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x17, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x0D, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5D, + 0x04, + 0xDF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x16, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD6, + 0x00, + 0xC6, + 0xD7, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x56, + 0xF5, + 0x53, + 0xF5, + 0x56, + 0xDF, + 0xD5, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF5, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0xDC, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xF6, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x53, + 0xDE, + 0xDA, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0xDC, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0xDD, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDE, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD5, + 0xF3, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0xD6, + 0x00, + 0xF4, + 0xD9, + 0xEF, + 0x00, + 0x5E, + 0x04, + 0xF7, + 0x00, + 0x60, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF6, + 0x00, + 0xD7, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD8, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0xF7, + 0xC6, + 0x00, + 0x0A, + 0xE1, + 0x00, + 0x54, + 0x53, + 0x53, + 0x57, + 0xDE, + 0xD9, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x56, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0xD6, + 0xD9, + 0xD5, + 0xF7, + 0x00, + 0xD0, + 0xDA, + 0xB8, + 0x53, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDD, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0x0A, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xF1, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x58, + 0x00, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x59, + 0x54, + 0x00, + 0xFA, + 0xD7, + 0xE0, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x5B, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x16, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xDF, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x59, + 0x54, + 0x00, + 0x55, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xDB, + 0xB3, + 0x00, + 0x03, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x54, + 0xDD, + 0xF2, + 0x00, + 0x00, + 0xF2, + 0xD5, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x56, + 0xDA, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD2, + 0x04, + 0xD8, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x57, + 0x00, + 0x00, + 0xD0, + 0xDC, + 0x00, + 0xDE, + 0xD7, + 0x00, + 0x00, + 0x55, + 0xD8, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xDA, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0xFA, + 0x00, + 0x5A, + 0x04, + 0xFA, + 0xF3, + 0x57, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x4D, + 0xF9, + 0x69, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD0, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x53, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x56, + 0xD4, + 0xDC, + 0xB8, + 0x54, + 0xB3, + 0xE1, + 0x04, + 0xD0, + 0xF3, + 0x17, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0xDE, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x00, + 0x53, + 0xD0, + 0x04, + 0xD0, + 0xB8, + 0xF3, + 0xF5, + 0x59, + 0xD3, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x56, + 0xC6, + 0x00, + 0x00, + 0xDB, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x16, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD0, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xD0, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xF7, + 0xF1, + 0xD9, + 0xF7, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDD, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF2, + 0x17, + 0xF4, + 0x00, + 0x00, + 0xDC, + 0xF1, + 0x55, + 0x5A, + 0x17, + 0xEF, + 0xDF, + 0x5D, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xD0, + 0xDE, + 0xD7, + 0xD8, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDF, + 0xD9, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x59, + 0x04, + 0x59, + 0x54, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0xD5, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0xD5, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x17, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0xD3, + 0x60, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x57, + 0xD4, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0x16, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0x56, + 0xF4, + 0x5A, + 0xD8, + 0xD6, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDA, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x0A, + 0xDB, + 0x04, + 0xFC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0xD8, + 0xEF, + 0xD0, + 0x04, + 0xD6, + 0x53, + 0x00, + 0xF4, + 0xDC, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5A, + 0xDA, + 0xF1, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD2, + 0xD8, + 0x17, + 0x55, + 0xB3, + 0xF7, + 0xE1, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x5B, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD7, + 0x04, + 0xDA, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD6, + 0xD8, + 0x04, + 0xD7, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDB, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x04, + 0x53, + 0x00, + 0x0A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x56, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xE1, + 0xF2, + 0xDA, + 0xDB, + 0x57, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x56, + 0xD8, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x60, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD2, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xDA, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x60, + 0xDE, + 0xDA, + 0x04, + 0xB6, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x58, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDC, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x03, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xF5, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xB8, + 0x00, + 0x04, + 0xF1, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD5, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD8, + 0x5A, + 0xD8, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x53, + 0x16, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0xDF, + 0x5D, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x56, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDE, + 0x04, + 0xDA, + 0xD9, + 0xD6, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xDF, + 0xDF, + 0x57, + 0x00, + 0x54, + 0xDE, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xD6, + 0xD2, + 0x04, + 0xF1, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD5, + 0xF6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDA, + 0x5E, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x53, + 0xD2, + 0xD8, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x59, + 0x04, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0x04, + 0x04, + 0xDE, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x58, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDB, + 0xD9, + 0xF7, + 0x00, + 0xD9, + 0xF6, + 0x00, + 0x58, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF4, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xE1, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x09, + 0xF5, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0xF2, + 0xD9, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xF1, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xDF, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xD8, + 0x04, + 0xD2, + 0xDF, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD3, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x12, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xF2, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x12, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xE1, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD8, + 0xF4, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xD0, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF4, + 0x5B, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0xDF, + 0x00, + 0x16, + 0x04, + 0x17, + 0x54, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x0A, + 0x54, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEC, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x58, + 0xFA, + 0x04, + 0xDF, + 0x58, + 0x58, + 0x58, + 0x04, + 0xF2, + 0x58, + 0x58, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0xD2, + 0xFA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x57, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDE, + 0xDB, + 0xDA, + 0xDF, + 0x53, + 0x00, + 0x53, + 0xD2, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD3, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0x04, + 0xD2, + 0xD6, + 0xD6, + 0xF1, + 0x04, + 0xF2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xD6, + 0xD0, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0xDB, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xE1, + 0xD8, + 0x04, + 0xD2, + 0x5C, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xD2, + 0x04, + 0xD4, + 0xE1, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xE1, + 0x00, + 0xD2, + 0x59, + 0x54, + 0x53, + 0xD7, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD3, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xB3, + 0x55, + 0x5A, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD9, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDA, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD0, + 0xD9, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDA, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0xD7, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD9, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD0, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDA, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDC, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0xF3, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x54, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xF1, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xD0, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDB, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD5, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xEF, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x12, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0xD4, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD7, + 0x04, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x59, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x57, + 0x53, + 0x00, + 0x5A, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x54, + 0xF2, + 0xDD, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x54, + 0x53, + 0xDC, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xDA, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x54, + 0xF2, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD0, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x41, + 0x74, + 0xEC, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x60, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD6, + 0xF6, + 0xF6, + 0xD6, + 0x04, + 0xDF, + 0x00, + 0xD2, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD4, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x56, + 0x58, + 0x00, + 0x57, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xEE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xD2, + 0xD8, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0xDE, + 0xDB, + 0xD9, + 0xF2, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDC, + 0xD9, + 0xD2, + 0x17, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDF, + 0xDB, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x04, + 0xDB, + 0x0D, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xEE, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0xDF, + 0xDE, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x57, + 0x00, + 0x57, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDD, + 0xF3, + 0x54, + 0x53, + 0xD3, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x0D, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x60, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0xD7, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x0A, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x55, + 0xD9, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xB6, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x60, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xDA, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xFA, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD8, + 0xDE, + 0xD6, + 0xD6, + 0xD7, + 0x04, + 0xDC, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDA, + 0xD8, + 0xDE, + 0xD6, + 0xE1, + 0xD7, + 0x04, + 0xD5, + 0x56, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0xDA, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0xD9, + 0x59, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x17, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x12, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD6, + 0xD6, + 0xDC, + 0x04, + 0x60, + 0xB8, + 0xDB, + 0xD9, + 0xD0, + 0xD6, + 0xF2, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD0, + 0xF4, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xFA, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0x60, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xD6, + 0x56, + 0x00, + 0xF7, + 0xDB, + 0xD9, + 0xE1, + 0xE1, + 0xD9, + 0xD5, + 0x55, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF5, + 0x00, + 0x57, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xF9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x17, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF3, + 0x00, + 0xB8, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xDD, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3B, + 0x56, + 0x94, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x53, + 0xF6, + 0x55, + 0x55, + 0xDE, + 0xDE, + 0x55, + 0x55, + 0x55, + 0x17, + 0x04, + 0xB8, + 0x55, + 0x00, + 0xD0, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x53, + 0xF1, + 0xDC, + 0x00, + 0x5A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDD, + 0x55, + 0xDC, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x00, + 0x00, + 0xF4, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xF1, + 0xD7, + 0xF4, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x16, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x16, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x55, + 0xD9, + 0x60, + 0x00, + 0x00, + 0x58, + 0xD9, + 0xD8, + 0xD0, + 0xD6, + 0xDD, + 0xDE, + 0xD7, + 0xE1, + 0x53, + 0xDE, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5B, + 0x00, + 0x58, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x56, + 0xD6, + 0x58, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD2, + 0xDA, + 0xF7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0x0D, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD3, + 0x53, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0A, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0xF1, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xDC, + 0xF3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD8, + 0x00, + 0xF7, + 0xDA, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xF1, + 0x53, + 0x00, + 0xD7, + 0xDD, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xF2, + 0x17, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD3, + 0xD9, + 0xD9, + 0xF2, + 0x17, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xD2, + 0xDF, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0xD0, + 0xDD, + 0xD8, + 0xDC, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD0, + 0xD5, + 0xD8, + 0xDC, + 0xD6, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0xF5, + 0xDF, + 0xD3, + 0xD9, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x55, + 0xD0, + 0xDB, + 0xD9, + 0xDE, + 0x59, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xD8, + 0xF1, + 0xEF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xF3, + 0x60, + 0xD2, + 0xD9, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xDC, + 0xD8, + 0xD5, + 0xD0, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xD0, + 0xDD, + 0xD8, + 0xD5, + 0xD0, + 0x56, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0xB8, + 0xD7, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xD9, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xFA, + 0x00, + 0xE1, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD7, + 0x00, + 0x00, + 0x60, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x0D, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x8C, + 0x3B, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xEF, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD7, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xD9, + 0x00, + 0xF3, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0xDD, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0xDE, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x5B, + 0xDA, + 0x5E, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xD5, + 0xD9, + 0xD0, + 0x55, + 0x00, + 0xF3, + 0x04, + 0xD5, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDD, + 0xD2, + 0x00, + 0xDE, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xB8, + 0xD5, + 0xDB, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x16, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x57, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x56, + 0xD8, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0xDA, + 0x57, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF1, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF2, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xF2, + 0x04, + 0x16, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x57, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3B, + 0xC8, + 0xE3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x17, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x00, + 0xDE, + 0xDA, + 0x56, + 0x54, + 0x00, + 0xB8, + 0xD4, + 0xDE, + 0x00, + 0x00, + 0x16, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xDD, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0xD4, + 0xDC, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x57, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0xDB, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD7, + 0xD8, + 0x5A, + 0x54, + 0x00, + 0x54, + 0xF5, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDE, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xD7, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x60, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD6, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDD, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x60, + 0xD9, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB3, + 0x58, + 0xD2, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0xDB, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xDC, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xDB, + 0x5E, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xD9, + 0xD8, + 0x59, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xDC, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0xDD, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD8, + 0xDC, + 0xF5, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x0D, + 0x53, + 0x00, + 0x54, + 0xF5, + 0xDE, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0xD5, + 0xF3, + 0x00, + 0xF5, + 0xD4, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x56, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5E, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xFA, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD2, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xC0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xD3, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xF1, + 0xD3, + 0x56, + 0xF3, + 0x55, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0xB8, + 0xDB, + 0xD9, + 0xE1, + 0xE1, + 0xD9, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0xF4, + 0xDB, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xDB, + 0xE1, + 0xE1, + 0xD9, + 0xD9, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xDC, + 0x56, + 0x00, + 0x57, + 0xDB, + 0xD5, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD7, + 0x04, + 0xD5, + 0xB8, + 0x54, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x5E, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xD4, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x55, + 0xF1, + 0x04, + 0xDE, + 0xD6, + 0xDE, + 0x04, + 0xDC, + 0x55, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD5, + 0x04, + 0xDE, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDB, + 0x04, + 0xD2, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDC, + 0x04, + 0xDD, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xD0, + 0xDD, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD2, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xE1, + 0xDE, + 0xDB, + 0x04, + 0xD9, + 0x17, + 0x53, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x54, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x54, + 0x00, + 0x00, + 0xB3, + 0xEF, + 0x04, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD7, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD2, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD7, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x12, + 0xD6, + 0xDE, + 0xDB, + 0x04, + 0xD2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0xDA, + 0xDB, + 0x5C, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x12, + 0xD6, + 0xDE, + 0xDB, + 0x04, + 0xDC, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0xD7, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x5A, + 0x54, + 0x59, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0xF1, + 0xF3, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD9, + 0xDA, + 0x5A, + 0x00, + 0x00, + 0x16, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xC1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xD7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD4, + 0xD8, + 0xD0, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xD0, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0A, + 0xD7, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x9D, + 0x3B, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDB, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x17, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD0, + 0xD9, + 0xDB, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0x17, + 0x00, + 0x17, + 0xD0, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xD2, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xDC, + 0xD8, + 0xDC, + 0xD0, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD6, + 0xD5, + 0xD8, + 0xF1, + 0xEF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x12, + 0xDC, + 0xD8, + 0xDC, + 0xD6, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDF, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x5D, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xDD, + 0x04, + 0xDB, + 0xDE, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0xD0, + 0xF1, + 0xD8, + 0xD9, + 0xD7, + 0xD6, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0xDE, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x16, + 0xD0, + 0xDD, + 0xD8, + 0xD9, + 0xD7, + 0xE1, + 0x58, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDB, + 0xD7, + 0xD0, + 0x5E, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x0A, + 0xD7, + 0xD9, + 0x04, + 0xD9, + 0xD7, + 0xD6, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x5A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x58, + 0xE1, + 0xD3, + 0xD8, + 0xD8, + 0xF1, + 0xE1, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0xD0, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x60, + 0xDE, + 0xDD, + 0xDA, + 0xD8, + 0xDC, + 0xD0, + 0xFA, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD9, + 0xD3, + 0xD0, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x60, + 0xD2, + 0xD9, + 0xDB, + 0xDE, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0D, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xD2, + 0x00, + 0xF7, + 0xD8, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0xE1, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5E, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDE, + 0x17, + 0x00, + 0x00, + 0xD7, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xEF, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xD7, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xF1, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF2, + 0xD8, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD8, + 0xDC, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xF2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD2, + 0x53, + 0xD0, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x16, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x3B, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x00, + 0xF6, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x49, + 0x04, + 0x00, + 0x00, + 0x1B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x74, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x60, + 0x58, + 0x58, + 0x60, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x60, + 0x04, + 0x60, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x56, + 0xD7, + 0xD9, + 0xDB, + 0xDF, + 0xF3, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB3, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF5, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x55, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x54, + 0x00, + 0xF3, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xF7, + 0x53, + 0x54, + 0xB3, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x57, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x54, + 0x53, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x17, + 0x55, + 0x53, + 0x54, + 0x53, + 0xF3, + 0xB8, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x54, + 0xF4, + 0xB8, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xFA, + 0xF6, + 0x53, + 0x54, + 0x00, + 0x53, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x00, + 0x53, + 0x55, + 0x5C, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xF6, + 0x5A, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x53, + 0x00, + 0x46, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x17, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x55, + 0x53, + 0x54, + 0x53, + 0xB3, + 0xF7, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF7, + 0xB3, + 0x00, + 0x54, + 0xB3, + 0xF7, + 0xD6, + 0x04, + 0xDA, + 0x57, + 0xF3, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xF3, + 0x54, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0xF3, + 0x54, + 0x53, + 0xF5, + 0x5C, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x57, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0xB3, + 0x54, + 0x54, + 0xF3, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0xF7, + 0x53, + 0x54, + 0x53, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x54, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x54, + 0x54, + 0xF3, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x53, + 0x54, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x53, + 0x54, + 0x53, + 0xF7, + 0xDC, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x53, + 0x54, + 0x54, + 0xF6, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0x55, + 0x54, + 0x54, + 0x53, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x54, + 0x54, + 0x53, + 0x55, + 0xD2, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF5, + 0x54, + 0x54, + 0x53, + 0xB8, + 0xD4, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x51, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x55, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x55, + 0xF7, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0xB3, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF7, + 0xF4, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x00, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF5, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x5A, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x53, + 0x55, + 0xB8, + 0xB8, + 0xF6, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0xC6, + 0x09, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x53, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x54, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xB8, + 0xF5, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0xF6, + 0x09, + 0x09, + 0xF3, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0xF5, + 0x5B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0xB3, + 0x54, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5D, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xF7, + 0xB3, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0xE1, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x5A, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x5B, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xF7, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFE, + 0xFF, + 0xF9, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x53, + 0x56, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x53, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x54, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x54, + 0x5A, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x54, + 0x5C, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xC6, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x53, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDD, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC8, + 0xFF, + 0xFE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD4, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xB8, + 0x54, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xEF, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0x00, + 0x54, + 0x53, + 0x04, + 0xD6, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x57, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0xF4, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xFA, + 0x04, + 0xDA, + 0xD5, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0xD5, + 0x00, + 0x00, + 0xB8, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x16, + 0x09, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x59, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDE, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0xD2, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x17, + 0x04, + 0xD4, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF4, + 0xD7, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xFA, + 0x04, + 0x0A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE3, + 0x3B, + 0x6E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x59, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF5, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x09, + 0x00, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x54, + 0xB8, + 0xB8, + 0x04, + 0xF7, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xFA, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0xDA, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF7, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD0, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDA, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x53, + 0xD4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x56, + 0x00, + 0xB3, + 0xDD, + 0xDE, + 0x54, + 0xB3, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x53, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDF, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5C, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x0A, + 0x00, + 0xDE, + 0x04, + 0xD9, + 0x00, + 0x58, + 0x04, + 0xF3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD3, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0x5A, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF3, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0xEF, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x53, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x55, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF6, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x16, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x59, + 0x56, + 0x5C, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0xF7, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xF6, + 0x04, + 0xD0, + 0x00, + 0xB3, + 0x5A, + 0x58, + 0xB3, + 0x00, + 0x00, + 0xD7, + 0xD9, + 0xB8, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x59, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x16, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xD2, + 0xDA, + 0x04, + 0xDA, + 0xD7, + 0x57, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x16, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD4, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD2, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0xDA, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0xDA, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0x00, + 0xB8, + 0x04, + 0x5C, + 0x00, + 0xDD, + 0x04, + 0x5A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD9, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xDB, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0xF7, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0x0A, + 0x04, + 0x04, + 0xFA, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0x00, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x57, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD2, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xF5, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x55, + 0x53, + 0x04, + 0xF5, + 0xF3, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x16, + 0x09, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDF, + 0x00, + 0x16, + 0xDA, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0xFC, + 0x3B, + 0xE3, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x55, + 0xD5, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x58, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x53, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x16, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0xD7, + 0x04, + 0xDA, + 0xD6, + 0xB3, + 0xC6, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x54, + 0xDA, + 0x04, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x54, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x53, + 0xB3, + 0xD9, + 0xDF, + 0x57, + 0xB8, + 0x57, + 0x17, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD5, + 0x55, + 0xF6, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x57, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x03, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x57, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x53, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x00, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF3, + 0x00, + 0xB3, + 0x59, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF2, + 0xDA, + 0xDF, + 0x09, + 0xF7, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x45, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xB8, + 0x54, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xB8, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0x58, + 0xD9, + 0x04, + 0xD5, + 0xF7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0xF4, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD2, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD2, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5A, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xE1, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0xDA, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xDA, + 0xF6, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0xDA, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xEF, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x56, + 0x17, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xD7, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD0, + 0x57, + 0x57, + 0xD0, + 0x04, + 0xDA, + 0xF6, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0B, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x00, + 0xD8, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xFA, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x00, + 0x00, + 0xF3, + 0x57, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xB3, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF4, + 0x04, + 0xD9, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD0, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x53, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xE1, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD0, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x17, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0x57, + 0x04, + 0x5D, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3C, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xD0, + 0x16, + 0x00, + 0x56, + 0xD0, + 0xD0, + 0xD0, + 0x00, + 0xF4, + 0xD0, + 0xD0, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xF3, + 0xFA, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x54, + 0x55, + 0xDA, + 0xD0, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xF6, + 0x54, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0xB3, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xF5, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xEF, + 0x53, + 0x54, + 0xD9, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF5, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDB, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD4, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xC6, + 0x55, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x54, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0xD4, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD0, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x09, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0xD8, + 0x3E, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x5A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0xD8, + 0xDA, + 0xB8, + 0x54, + 0x56, + 0x04, + 0xF4, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xB8, + 0x04, + 0xD8, + 0xF6, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB6, + 0xD0, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD2, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0x57, + 0xF6, + 0x54, + 0x00, + 0xF4, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x53, + 0x00, + 0xF3, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x54, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x54, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x57, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x57, + 0xF5, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xDE, + 0x04, + 0xDE, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x58, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xD4, + 0xF3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xFA, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x16, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0xB8, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x58, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDC, + 0xD9, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x59, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xB3, + 0xD5, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x0B, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD2, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x0A, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0x5A, + 0xDC, + 0x54, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x53, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x0B, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x59, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD7, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xD9, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDC, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0xF9, + 0x94, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0xD9, + 0xD9, + 0xD9, + 0xF5, + 0xF5, + 0xD9, + 0xD9, + 0xD9, + 0x58, + 0x00, + 0xD7, + 0xD9, + 0xDA, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDF, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD9, + 0x53, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x04, + 0xD4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0xF3, + 0xD4, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5B, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x5B, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xD9, + 0x00, + 0x5A, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x53, + 0xF5, + 0xF3, + 0xF7, + 0x04, + 0xF5, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0xE1, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0xD8, + 0x09, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD5, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0xB3, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xD5, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x57, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x00, + 0x54, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xD5, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0x55, + 0x54, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x00, + 0xB3, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x59, + 0xF3, + 0x00, + 0x54, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x53, + 0x00, + 0x54, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x00, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x53, + 0x55, + 0xD2, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD7, + 0xF3, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x54, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xB8, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x16, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x9E, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xD0, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0xF3, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF5, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x04, + 0x57, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5C, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0xF6, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x53, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xE1, + 0xDE, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x54, + 0x41, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x57, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xF5, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5B, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xD6, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x5A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF4, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0x5B, + 0xD4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x5B, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x59, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xB3, + 0xD2, + 0x04, + 0xD9, + 0x55, + 0x00, + 0xEF, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x53, + 0xD7, + 0x04, + 0xDE, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x54, + 0xF5, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD3, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x5C, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0xB8, + 0xF5, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x00, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xF6, + 0xB8, + 0xF6, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x53, + 0x55, + 0xB8, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x54, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF5, + 0x53, + 0xF3, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDF, + 0x04, + 0xD6, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x58, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x56, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xB8, + 0xF3, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x81, + 0xFF, + 0x45, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x55, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x55, + 0x54, + 0x54, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x54, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x58, + 0x04, + 0x58, + 0x55, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0x57, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x53, + 0x00, + 0x53, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF7, + 0x53, + 0x00, + 0xB3, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x53, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xF3, + 0x00, + 0x54, + 0xF5, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x53, + 0x00, + 0x54, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x17, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5D, + 0xF6, + 0x53, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x55, + 0x5C, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0xF6, + 0x53, + 0x00, + 0x00, + 0x53, + 0xF6, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0xF4, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x5C, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0x58, + 0x04, + 0x04, + 0xF3, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF4, + 0x54, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF4, + 0x04, + 0x55, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0xFF, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x04, + 0xD8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x00, + 0x00, }; \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h index 705e43b76f4..b35c3514e8d 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h +++ b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h @@ -14,8 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. * - ******************************************************************************/ - + ******************************************************************************/ #ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ #define EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ @@ -23,10 +22,9 @@ // bitmaps id // fonts id -#define urw_gothic_12_grey_bg_white 0 -#define urw_gothic_12_white_bg_grey 1 -#define urw_gothic_13_grey_bg_white 2 -#define urw_gothic_13_white_bg_grey 3 - +#define urw_gothic_12_grey_bg_white 0 +#define urw_gothic_12_white_bg_grey 1 +#define urw_gothic_13_grey_bg_white 2 +#define urw_gothic_13_white_bg_grey 3 #endif // EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c index 04137c4c0e9..d523bd172b9 100644 --- a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -16,7 +16,6 @@ * ******************************************************************************/ - /* **** Includes **** */ #include @@ -31,18 +30,21 @@ #include "cfs_logo.h" #include "end_game_text.h" - /* **** Definitions **** */ // Focus on top left corner of the top left block in the grid to help with visualize calculating the coordinates. -#define BLOCK_X_POSITION(col) (GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (col))) -#define BLOCK_Y_POSITION(row) (GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (row))) +#define BLOCK_X_POSITION(col) \ + (GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (col))) +#define BLOCK_Y_POSITION(row) \ + (GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (row))) // Math is to center the digits printed to the newly created block. -#define DIGIT_CENTER_X_POSITION(x, value) (x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2)) -#define DIGIT_CENTER_Y_POSITION(y, value) (y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2)) +#define DIGIT_CENTER_X_POSITION(x, value) \ + (x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2)) +#define DIGIT_CENTER_Y_POSITION(y, value) \ + (y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2)) // Test out delays so that it's not too slow and not too fast for human eye. -#define COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS (15) +#define COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS (15) /* **** Globals **** */ @@ -69,7 +71,8 @@ int Graphics_Init(void) MXC_TFT_DrawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, F_BACKGROUND_COLOR); // Draw CFS Logo. - MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, cfs_logo); + MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, + cfs_logo); // Draw Game Logo. // Forgive me for all the math who ever tries to read through the code. @@ -82,32 +85,65 @@ int Graphics_Init(void) int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_2048_DIGIT_PX_HEIGHT / 2); // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_BACKGROUND_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, + F_BACKGROUND_COLOR); // Draw digits. // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, + block_2048, RGB565_BLACK, RGB565_BLOCK_2048); // Draw move counter. - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(MOVES_TEXT_OFFSET_X, MOVES_TEXT_OFFSET_Y, GAME_TEXT_MOVES_WIDTH, GAME_TEXT_MOVES_HEIGHT, game_text_moves, RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_TEXT_OFFSET_X, MOVES_TEXT_OFFSET_Y, GAME_TEXT_MOVES_WIDTH, + GAME_TEXT_MOVES_HEIGHT, game_text_moves, RGB565_BLACK, + RGB565_WHITE); // Draw timer. - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_COLON_OFFSET_X, TIME_OFFSET_Y, GAME_TEXT_DIGIT_COLON_WIDTH, GAME_TEXT_DIGITS_HEIGHT, game_text_colon, RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_COLON_OFFSET_X, TIME_OFFSET_Y, GAME_TEXT_DIGIT_COLON_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, game_text_colon, RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); // Draw grid. - MXC_TFT_DrawRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, GRID_LENGTH, F_GRID_COLOR); + MXC_TFT_DrawRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, + GRID_LENGTH, F_GRID_COLOR); for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row), GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col), BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + + ((BLOCK_LENGTH + BLOCK_SPACING) * row), + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + + ((BLOCK_LENGTH + BLOCK_SPACING) * col), + BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, + RADIUS_FOR_CORNERS, F_GRID_COLOR); } } @@ -122,11 +158,17 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4) // The math calculates where each block needs to be drawn as its animated to grow from small to big. // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. - int x = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_X + GRID_SPACING + + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_Y + GRID_SPACING + + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); // Increase the block size by 10 pixels - MXC_TFT_DrawRoundedRect(x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); + MXC_TFT_DrawRoundedRect( + x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), + ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), + FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, + ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); // Don't delay when empty space is fully filled. if (frame_i < 5) { @@ -136,17 +178,21 @@ void Graphics_AddNewBlock(int row, int col, int block_2_4) } // Calculate the starting coordinate to write the digit at the center of the tile. - int x = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(block_2_4) / 2) + GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); - int y = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(block_2_4) / 2) + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + int x = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(block_2_4) / 2) + GRID_OFFSET_X + + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(block_2_4) / 2) + GRID_OFFSET_Y + + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); // Draw a 2 or 4 digit. // Blocks 2 and 4 are lighter color, so white text won't fit. Use black text instead (Inverted). if (block_2_4 == 2) { // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_2_DIGIT_PX_WIDTH, BLOCK_2_DIGIT_PX_HEIGHT, block_2, RGB565_BLACK, RGB565_BLOCK_2); + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_2_DIGIT_PX_WIDTH, BLOCK_2_DIGIT_PX_HEIGHT, + block_2, RGB565_BLACK, RGB565_BLOCK_2); } else { // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_4_DIGIT_PX_WIDTH, BLOCK_4_DIGIT_PX_HEIGHT, block_4, RGB565_BLACK, RGB565_BLOCK_4); + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_4_DIGIT_PX_WIDTH, BLOCK_4_DIGIT_PX_HEIGHT, + block_4, RGB565_BLACK, RGB565_BLOCK_4); } } @@ -161,107 +207,142 @@ inline void Graphics_AddBlock(int row, int col, int value) int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2); switch (value) { - case 2: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_2, RGB565_BLACK, RGB565_BLOCK_2); - break; - - case 4: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_4), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_4, RGB565_BLACK, RGB565_BLOCK_4); - break; - - case 8: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_8), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_8, RGB565_BLACK, RGB565_BLOCK_8); - break; - - case 16: - // Draw text. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_16), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_16, RGB565_BLACK, RGB565_BLOCK_16); - break; - - case 32: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_32), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_32, RGB565_BLACK, RGB565_BLOCK_32); - break; - - case 64: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_64), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_64, RGB565_BLACK, RGB565_BLOCK_64); - break; - - case 128: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_128), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_128, RGB565_BLACK, RGB565_BLOCK_128); - break; - - case 256: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_256, RGB565_BLACK, RGB565_BLOCK_256); - break; - - case 512: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_512, RGB565_BLACK, RGB565_BLOCK_512); - break; - - case 1024: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_1024, RGB565_BLACK, RGB565_BLOCK_1024); - break; - - case 2048: - // Draw block. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, F_GRID_COLOR); - - // Draw digits. - // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. - MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), block_2048, RGB565_BLACK, RGB565_BLOCK_2048); - break; - - default: - break; + case 2: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), + BLOCK_DIGIT_PX_HEIGHT(value), block_2, RGB565_BLACK, + RGB565_BLOCK_2); + break; + + case 4: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_4), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), + BLOCK_DIGIT_PX_HEIGHT(value), block_4, RGB565_BLACK, + RGB565_BLOCK_4); + break; + + case 8: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_8), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_8, RGB565_BLACK, RGB565_BLOCK_8); + break; + + case 16: + // Draw text. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_16), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_16, RGB565_BLACK, RGB565_BLOCK_16); + break; + + case 32: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_32), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_32, RGB565_BLACK, RGB565_BLOCK_32); + break; + + case 64: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_64), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_64, RGB565_BLACK, RGB565_BLOCK_64); + break; + + case 128: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_128), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_128, RGB565_BLACK, RGB565_BLOCK_128); + break; + + case 256: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_256, RGB565_BLACK, RGB565_BLOCK_256); + break; + + case 512: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_512, RGB565_BLACK, RGB565_BLOCK_512); + break; + + case 1024: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_1024, RGB565_BLACK, RGB565_BLOCK_1024); + break; + + case 2048: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + break; + + default: + break; } } @@ -270,12 +351,15 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) int x = BLOCK_X_POSITION(col); int y = BLOCK_Y_POSITION(row); - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), + RADIUS_FOR_CORNERS, F_GRID_COLOR); // Animate the blow up. // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. for (int i = 0; i < BLOCK_SPACING + 1; i++) { - MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2*i), BLOCK_LENGTH + (2*i), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2 * i), BLOCK_LENGTH + (2 * i), + FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, + F_GRID_COLOR); // Delay for animation. MXC_Delay(MXC_DELAY_MSEC(6)); @@ -284,16 +368,29 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) // Animate the shrink down. for (int i = 0; i < BLOCK_SPACING; i++) { // Redraw block to remove corners. - MXC_TFT_DrawRoundedRect(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, + F_GRID_COLOR); // Remove outer borders again. - MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Top line. + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Top line. - MXC_TFT_DrawVerticalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, BLOCK_LENGTH + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Left line. + MXC_TFT_DrawVerticalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Left line. - MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + 1 + i, BLOCK_LENGTH + y + BLOCK_SPACING - 1 - i, BLOCK_LENGTH + ((BLOCK_SPACING - 1 - i)*2), F_GRID_COLOR); // Bottom line. + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + 1 + i, + BLOCK_LENGTH + y + BLOCK_SPACING - 1 - i, + BLOCK_LENGTH + ((BLOCK_SPACING - 1 - i) * 2), + F_GRID_COLOR); // Bottom line. - MXC_TFT_DrawVerticalLine(BLOCK_LENGTH + x + BLOCK_SPACING - 1 - i, y - BLOCK_SPACING + i, BLOCK_LENGTH - 1 + ((BLOCK_SPACING - i)*2), F_GRID_COLOR); // Right line. + MXC_TFT_DrawVerticalLine(BLOCK_LENGTH + x + BLOCK_SPACING - 1 - i, y - BLOCK_SPACING + i, + BLOCK_LENGTH - 1 + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Right line. // Delay for animation. MXC_Delay(MXC_DELAY_MSEC(6)); @@ -310,7 +407,9 @@ void Graphics_CombineSingleBlock(int row, int col, int new_value) // @param current_length Length of block at current frame. // @param f_color Formatted color code of outer border. // @param radius Radius ofrounded cornewrs and width of block. -static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) +static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, + uint32_t current_length, uint32_t f_color, + uint32_t radius) { // Draw top horizontal lines. for (int p_y = 0; p_y < radius; p_y++) { @@ -327,7 +426,8 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u dx--; } - MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, current_length - (2 * (radius - dx)), f_color); + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, + current_length - (2 * (radius - dx)), f_color); } // Draw bottom horizontal lines. @@ -345,7 +445,8 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u dx--; } - MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, current_length - (2 * (radius - dx)), f_color); + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, + current_length - (2 * (radius - dx)), f_color); } // Draw left vertical lines. @@ -363,7 +464,8 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u dy--; } - MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, current_length - (2 * (radius - dy)), f_color); + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, + current_length - (2 * (radius - dy)), f_color); } // Draw right vertical lines. @@ -381,7 +483,8 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u dy--; } - MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, current_length - (2 * (radius - dy)), f_color); + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, + current_length - (2 * (radius - dy)), f_color); } } @@ -392,13 +495,18 @@ static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, u // @param current_length Length of block at current frame. // @param f_color Formatted color code of outer border. // @param radius Radius ofrounded cornewrs and width of block. -static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, uint32_t current_length, uint32_t f_color, uint32_t radius) +static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, + uint32_t current_length, uint32_t f_color, uint32_t radius) { for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { // Calculate distance from the corner. - int dx = (p_x < radius) ? radius - p_x : (p_x >= current_length - radius) ? p_x - (current_length - radius - 1) : 0; - int dy = (p_y < radius) ? radius - p_y : (p_y >= current_length - radius) ? p_y - (current_length - radius - 1) : 0; + int dx = (p_x < radius) ? radius - p_x : + (p_x >= current_length - radius) ? p_x - (current_length - radius - 1) : + 0; + int dy = (p_y < radius) ? radius - p_y : + (p_y >= current_length - radius) ? p_y - (current_length - radius - 1) : + 0; // Use pythagorean theorem to map coordinates, square not necessary when comparing with r. if (((dx * dx) + (dy * dy)) > (radius * radius)) { @@ -437,9 +545,13 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) if (frame_i == 0) { // Draw entire block for first frame. - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), + RADIUS_FOR_CORNERS, F_GRID_COLOR); } else { - graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS); + graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), + FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), + RADIUS_FOR_CORNERS); } } } @@ -468,14 +580,23 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) uint32_t y = BLOCK_Y_POSITION(row); // Erase outer edges. - MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - MXC_TFT_DrawVerticalLine(x - (frame_i + 1), y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - - MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); - MXC_TFT_DrawVerticalLine(x + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y - (frame_i + 1), + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine(x - (frame_i + 1), y - (frame_i + 1), + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), + y + BLOCK_LENGTH + (2 * (frame_i + 1)) - + (frame_i + 1) - 1, + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine( + x + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, + y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); // Erase corners. - graphics_helper_eraseCorners(x - frame_i, y - frame_i, frame_i, BLOCK_LENGTH + (2 * (frame_i)), F_GRID_COLOR, RADIUS_FOR_CORNERS); + graphics_helper_eraseCorners(x - frame_i, y - frame_i, frame_i, + BLOCK_LENGTH + (2 * (frame_i)), F_GRID_COLOR, + RADIUS_FOR_CORNERS); // Draw digit in last frame. if ((frame_i) == 0) { @@ -484,9 +605,20 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) // Blocks 2 and 4 are the only ones with inverted digit colors because of their block color. // However, Block 2 will nevber be a combined block. if (grid[row][col] == 4) { - MXC_TFT_DrawBitmapInvertedMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), DIGIT_CENTER_Y_POSITION(y, grid[row][col]), BLOCK_DIGIT_PX_WIDTH(grid[row][col]), BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, RGB_BLOCK_COLOR(grid[row][col])); + MXC_TFT_DrawBitmapInvertedMask( + DIGIT_CENTER_X_POSITION(x, grid[row][col]), + DIGIT_CENTER_Y_POSITION(y, grid[row][col]), + BLOCK_DIGIT_PX_WIDTH(grid[row][col]), + BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), + BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, + RGB_BLOCK_COLOR(grid[row][col])); } else { - MXC_TFT_DrawBitmapMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), DIGIT_CENTER_Y_POSITION(y, grid[row][col]), BLOCK_DIGIT_PX_WIDTH(grid[row][col]), BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, RGB_BLOCK_COLOR(grid[row][col])); + MXC_TFT_DrawBitmapMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), + DIGIT_CENTER_Y_POSITION(y, grid[row][col]), + BLOCK_DIGIT_PX_WIDTH(grid[row][col]), + BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), + BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, + RGB_BLOCK_COLOR(grid[row][col])); } } } @@ -504,183 +636,221 @@ void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_direction_t direction) { switch (direction) { - case GRAPHICS_SLIDE_DIR_UP: - // Start from bottom row to top row (column order doesn't matter). - // This for-loop keeps track of the localized y position of where the horizontal line is drawn. - // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { - // These two for-loops iterate through each block in the - // grid (bottom row to top row, columns direction - don't care) and - // erases a horizontal line (1-pixel wide) - for (int row = 3; row >= 0; row--) { - for (int col = 0; col < 4; col++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting x position using pythagorean theorem. - int dx = 0; - int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - - while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { - dx++; - } - - // No negative horizontal distance. - if (dx > 0) { - dx--; - } - - MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + case GRAPHICS_SLIDE_DIR_UP: + // Start from bottom row to top row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { + // These two for-loops iterate through each block in the + // grid (bottom row to top row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 3; row >= 0; row--) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_y : + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + + while ((dx * dx) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, + BLOCK_LENGTH - + (2 * (RADIUS_FOR_CORNERS - dx)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, + F_EMPTY_BLOCK_COLOR); } } } } - break; - - case GRAPHICS_SLIDE_DIR_DOWN: - // Start from top row to bottom row (column order doesn't matter). - // This for-loop keeps track of the localized y position of where the horizontal line is drawn. - // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { - // These two for-loops iterate through each block in the - // grid (top row to bottom row, columns direction - don't care) and - // erases a horizontal line (1-pixel wide) - for (int row = 0; row < 4; row++) { - for (int col = 0; col < 4; col++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_y < RADIUS_FOR_CORNERS) || (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting x position using pythagorean theorem. - int dx = 0; - int dy = (p_y < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_y : (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - - while ((dx * dx) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { - dx++; - } - - // No negative horizontal distance. - if (dx > 0) { - dx--; - } - - MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dx)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + break; + + case GRAPHICS_SLIDE_DIR_DOWN: + // Start from top row to bottom row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { + // These two for-loops iterate through each block in the + // grid (top row to bottom row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_y : + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + + while ((dx * dx) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, + BLOCK_LENGTH - + (2 * (RADIUS_FOR_CORNERS - dx)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, + F_EMPTY_BLOCK_COLOR); } } } } - break; - - case GRAPHICS_SLIDE_DIR_LEFT: - // Start from right column to left column (row order doesn't matter). - // This for-loop keeps track of the localized x position of where the vertical line is drawn. - // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { - // These two for-loops iterate through each block in the - // grid (right column to left column, rows direction - don't care) and - // erases a vertical line (1-pixel wide) - for (int col = 3; col >= 0; col--) { - for (int row = 0; row < 4; row++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem. - int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - int dy = 0; - - while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { - dy++; - } - - // No negative vertical distance. - if (dy > 0) { - dy--; - } - - MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + break; + + case GRAPHICS_SLIDE_DIR_LEFT: + // Start from right column to left column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 3; col >= 0; col--) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_x : + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + int dy = 0; + + while ((dy * dy) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, + BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } } - break; - - case GRAPHICS_SLIDE_DIR_RIGHT: - // Start from left column to right column (row order doesn't matter). - // This for-loop keeps track of the localized x position of where the vertical line is drawn. - // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent - // the block being erased, and this is done through the entire block. - for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { - // These two for-loops iterate through each block in the - // grid (right column to left column, rows direction - don't care) and - // erases a vertical line (1-pixel wide) - for (int col = 0; col < 4; col++) { - for (int row = 0; row < 4; row++) { - if (grid_state[row][col] == ERASE) { - int x = BLOCK_X_POSITION(col); - int y = BLOCK_Y_POSITION(row); - - // Account for rounded corners. - if ((p_x < RADIUS_FOR_CORNERS) || (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { - // Find the starting y position using pythagorean theorem. - int dx = (p_x < RADIUS_FOR_CORNERS) ? RADIUS_FOR_CORNERS - p_x : (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : 0; - int dy = 0; - - while ((dy * dy) < ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { - dy++; - } - - // No negative vertical distance. - if (dy > 0) { - dy--; - } - - MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), F_EMPTY_BLOCK_COLOR); - - } else { - MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + break; + + case GRAPHICS_SLIDE_DIR_RIGHT: + // Start from left column to right column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 0; col < 4; col++) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_x : + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + int dy = 0; + + while ((dy * dy) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, + BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); } } } } + } - break; + break; - default: - return; + default: + return; } } -void Graphics_EraseSingleBlock(int row, int col) { +void Graphics_EraseSingleBlock(int row, int col) +{ // Forgive me for all the math who ever tries to read through the code. // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); - MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, RADIUS_FOR_CORNERS, F_GRID_COLOR); + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, + RADIUS_FOR_CORNERS, F_GRID_COLOR); } void Graphics_SetTime(uint32_t total_seconds) @@ -703,28 +873,44 @@ void Graphics_SetTime(uint32_t total_seconds) } // Update timer on display. - MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), + RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. if (prev_timer_digit1 != digit1) { - MXC_TFT_DrawRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), + RGB565_BLACK, RGB565_WHITE); prev_timer_digit1 = digit1; } // Changes every 60 seconds. if (prev_timer_digit2 != digit2) { - MXC_TFT_DrawRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), + RGB565_BLACK, RGB565_WHITE); prev_timer_digit2 = digit2; } // Changes every 600 seoncds. if (prev_timer_digit3 != digit3) { - MXC_TFT_DrawRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), + RGB565_BLACK, RGB565_WHITE); prev_timer_digit3 = digit3; } } @@ -748,38 +934,56 @@ void Graphics_UpdateMovesCount(uint32_t moves_count) } // Update timer on display. - MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), + RGB565_BLACK, RGB565_WHITE); // Don't waste time on re-writing the same digits. // Changes every 10 seconds. if (prev_moves_digit1 != digit1) { - MXC_TFT_DrawRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), + RGB565_BLACK, RGB565_WHITE); prev_moves_digit1 = digit1; } // Changes every 60 seconds. if (prev_moves_digit2 != digit2) { - MXC_TFT_DrawRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), + RGB565_BLACK, RGB565_WHITE); prev_moves_digit2 = digit2; } // Changes every 600 seoncds. if (prev_moves_digit3 != digit3) { - MXC_TFT_DrawRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); - MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), + RGB565_BLACK, RGB565_WHITE); prev_moves_digit3 = digit3; } } void Graphics_DisplayGameOver(void) { - MXC_TFT_DrawBitmap(GAME_OVER_BOX_OFFSET_X, GAME_OVER_BOX_OFFSET_Y, GAME_OVER_BOX_WIDTH, GAME_OVER_BOX_HEIGHT, game_over); + MXC_TFT_DrawBitmap(GAME_OVER_BOX_OFFSET_X, GAME_OVER_BOX_OFFSET_Y, GAME_OVER_BOX_WIDTH, + GAME_OVER_BOX_HEIGHT, game_over); } void Graphics_DisplayYouWin(void) { - MXC_TFT_DrawBitmap(YOU_WIN_BOX_OFFSET_X, YOU_WIN_BOX_OFFSET_Y, YOU_WIN_BOX_WIDTH, YOU_WIN_BOX_HEIGHT, you_win); + MXC_TFT_DrawBitmap(YOU_WIN_BOX_OFFSET_X, YOU_WIN_BOX_OFFSET_Y, YOU_WIN_BOX_WIDTH, + YOU_WIN_BOX_HEIGHT, you_win); } diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h index 251f1a82573..45222b36eb4 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -42,12 +42,7 @@ typedef enum { * combined at new grid. * IMPORTANT: Sync these commands with the ARM core. */ -typedef enum { - EMPTY = 0, - ERASE = 1, - COMBINE = 2, - UNMOVED = 3 -} block_state_t; +typedef enum { EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; /** * These enums help track the state of the end game.. diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h index 5127400c7aa..3c8894d5e27 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h @@ -49,12 +49,13 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. -#define MAILBOX_MAIN_GRID_STATE_IDX (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. -#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) -#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) -#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) -#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX \ + (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) #endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c index 561a980abcc..931d232a49c 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/main.c +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -56,7 +56,7 @@ // UART speed up is set at the beginning of BOTH ARM and RISC-V main code // because SystemInit for both cores default the UART baud rate to // 115200. -#define CONTROLLER_UART_BAUD (115200) +#define CONTROLLER_UART_BAUD (115200) /* **** Globals **** */ // Defined in sema_reva.c @@ -72,8 +72,8 @@ uint8_t CONTROLLER_KEYPRESS; volatile bool KEYPRESS_READY = false; uint8_t KEYPRESS_INPUT_DIR; -uint32_t RISCV_GRID_COPY[4][4] = {0}; -uint8_t RISCV_GRID_COPY_STATE[4][4] = {0}; +uint32_t RISCV_GRID_COPY[4][4] = { 0 }; +uint8_t RISCV_GRID_COPY_STATE[4][4] = { 0 }; uint32_t MOVES_COUNT = 0; @@ -108,35 +108,36 @@ void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) // User can add additional directional key switches here. switch (CONTROLLER_KEYPRESS) { - case 'a': - KEYPRESS_INPUT_DIR = INPUT_LEFT; - KEYPRESS_READY = true; - break; - - case 'd': - KEYPRESS_INPUT_DIR = INPUT_RIGHT; - KEYPRESS_READY = true; - break; - - case 'w': - KEYPRESS_INPUT_DIR = INPUT_UP; - KEYPRESS_READY = true; - break; - - case 's': - KEYPRESS_INPUT_DIR = INPUT_DOWN; - KEYPRESS_READY = true; - break; - - default: - KEYPRESS_READY = false; - error = Controller_Start(&CONTROLLER_REQ); - if (error != E_NO_ERROR) { - PRINT("RISC-V: Invalid Keypress: %c\n", CONTROLLER_KEYPRESS); - } + case 'a': + KEYPRESS_INPUT_DIR = INPUT_LEFT; + KEYPRESS_READY = true; + break; + + case 'd': + KEYPRESS_INPUT_DIR = INPUT_RIGHT; + KEYPRESS_READY = true; + break; + + case 'w': + KEYPRESS_INPUT_DIR = INPUT_UP; + KEYPRESS_READY = true; + break; + + case 's': + KEYPRESS_INPUT_DIR = INPUT_DOWN; + KEYPRESS_READY = true; + break; + + default: + KEYPRESS_READY = false; + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Invalid Keypress: %c\n", CONTROLLER_KEYPRESS); + } } - PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, cb_error); + PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, + cb_error); } // Must grab grid space before calling this function to have the latest @@ -211,11 +212,11 @@ void SendGridToARMCore(void) for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; - SEMA_ARM_MAILBOX->payload[i+3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; - i+=4; + i += 4; } } @@ -235,7 +236,8 @@ inline void SendKeypressToARMCore(void) void SendNewBlockIndexToARMCore(uint8_t *new_block_idx, uint8_t did_block_move_or_is_init) { - SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX] = (did_block_move_or_is_init >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX] = (did_block_move_or_is_init >> (8 * 0)) & + 0xFF; SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] = (*new_block_idx >> (8 * 0)) & 0xFF; } @@ -247,9 +249,9 @@ void SendGameStateToARMCore(game_state_t state) void SendMovesCountToARMCore(uint32_t moves_count) { SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] = (moves_count >> (8 * 0)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+1] = (moves_count >> (8 * 1)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+2] = (moves_count >> (8 * 2)) & 0xFF; - SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX+3] = (moves_count >> (8 * 3)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 1] = (moves_count >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 2] = (moves_count >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 3] = (moves_count >> (8 * 3)) & 0xFF; } // ***************************************************************************** @@ -296,11 +298,13 @@ int main(void) error = MXC_SEMA_GetSema(SEMA_IDX_RISCV); if (error != E_NO_ERROR) { - PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_RISCV]); LED_On(LED_RED); while (1) {} } else { - PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_RISCV]); } // Initialize mailboxes between ARM and RISCV cores. @@ -355,7 +359,7 @@ int main(void) MXC_SEMA_GetSema(SEMA_IDX_RISCV); input_direction_t dir = KEYPRESS_INPUT_DIR; - + state = Game_2048_UpdateGrid(dir, &new_block_idx_location); if (state == true) { PRINT("RISC-V: Blocks moved.\n"); diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c index dc5dd747d30..8c4222c5b1d 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c @@ -16,7 +16,6 @@ * ******************************************************************************/ - /* **** Includes **** */ #include @@ -25,7 +24,6 @@ /* **** Definitions **** */ - /* **** Globals **** */ static mxc_uart_regs_t *Controller_UART; @@ -74,5 +72,3 @@ int Controller_Start(mxc_uart_req_t *req) return E_NO_ERROR; } - - diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index 4141092ddae..623eaf292d3 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -35,8 +35,12 @@ #define PRINT(...) #endif -#define COLUMN_SUM(col) ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + MAIN_2048_GRID[3][col])) -#define ROW_SUM(row) ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + MAIN_2048_GRID[row][3])) +#define COLUMN_SUM(col) \ + ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + \ + MAIN_2048_GRID[3][col])) +#define ROW_SUM(row) \ + ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + \ + MAIN_2048_GRID[row][3])) /* **** Globals **** */ @@ -87,7 +91,7 @@ static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) // Add more weight to 2. if (MXC_TRNG_RandomInt() % 3) { // 1 or 2 block_2_or_4 = 2; - } else { // 0 + } else { // 0 block_2_or_4 = 4; } } @@ -106,7 +110,7 @@ static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) // ---|---|---|--- ------|-------|-------|------ // c | d | e | f (3,0) | (3,1) | (3,2) | (3,3) for (int i = 0; i < 16; i++) { - if (MAIN_2048_GRID[i/4][i%4] == 0) { + if (MAIN_2048_GRID[i / 4][i % 4] == 0) { available_open_spaces += 1; } } @@ -186,8 +190,8 @@ inline static bool row_logic_left(void) continue; } - uint32_t prev_row[4] = {0}; - uint32_t temp_row[4] = {0}; + uint32_t prev_row[4] = { 0 }; + uint32_t temp_row[4] = { 0 }; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. // Get all valid blocks in column to help with same-value pair logic. @@ -290,8 +294,8 @@ inline static bool row_logic_right(void) continue; } - uint32_t prev_row[4] = {0}; - uint32_t temp_row[4] = {0}; + uint32_t prev_row[4] = { 0 }; + uint32_t temp_row[4] = { 0 }; int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. // Get all valid blocks to help with same-value pair logic. @@ -395,8 +399,8 @@ inline static bool column_logic_up(void) continue; } - uint32_t prev_col[4] = {0}; - uint32_t temp_column[4] = {0}; + uint32_t prev_col[4] = { 0 }; + uint32_t temp_column[4] = { 0 }; int temp_row_num = 0; // Also tracks how many valid blocks there are. // Get all valid blocks to help with same-value pair logic. @@ -498,8 +502,8 @@ static bool column_logic_down(void) continue; } - uint32_t prev_col[4] = {0}; - uint32_t temp_column[4] = {0}; + uint32_t prev_col[4] = { 0 }; + uint32_t temp_column[4] = { 0 }; int temp_row_num = 0; // Also tracks how many valid blocks there are in column. // Get all valid blocks to help with same-value pair logic. @@ -613,7 +617,7 @@ game_state_t Game_2048_CheckState(void) // Check if a row has same value pair. for (int r = 0; r < 4; r++) { for (int c = 0; c < 3; c++) { - if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r][c+1]) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r][c + 1]) { return IN_PROGRESS; } } @@ -622,7 +626,7 @@ game_state_t Game_2048_CheckState(void) // Check if a column has a same-value pair. for (int c = 0; c < 4; c++) { for (int r = 0; r < 3; r++) { - if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r+1][c]) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r + 1][c]) { return IN_PROGRESS; } } @@ -647,30 +651,30 @@ bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx } // Run main game logic. - switch(direction) { - case INPUT_UP: - printf("UP\n"); - blocks_moved = column_logic_up(); - break; - - case INPUT_DOWN: - printf("DOWN\n"); - blocks_moved = column_logic_down(); - break; - - case INPUT_LEFT: - printf("LEFT\n"); - blocks_moved = row_logic_left(); - break; - - case INPUT_RIGHT: - printf("RIGHT\n"); - blocks_moved = row_logic_right(); - break; - - // Should never reach here. - default: - return false; + switch (direction) { + case INPUT_UP: + printf("UP\n"); + blocks_moved = column_logic_up(); + break; + + case INPUT_DOWN: + printf("DOWN\n"); + blocks_moved = column_logic_down(); + break; + + case INPUT_LEFT: + printf("LEFT\n"); + blocks_moved = row_logic_left(); + break; + + case INPUT_RIGHT: + printf("RIGHT\n"); + blocks_moved = row_logic_right(); + break; + + // Should never reach here. + default: + return false; } // Once the main game logic is done, insert a new block. diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.c b/Libraries/MiscDrivers/Display/tft_ssd2119.c index b5ffab47f75..6011d06d210 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.c +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.c @@ -1261,11 +1261,12 @@ void MXC_TFT_DrawBitmap(int px_x, int px_y, int width, int height, uint16_t *ima displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { // g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); - g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | (uint32_t)((image[i] & 0xFF00) << 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | + (uint32_t)((image[i] & 0xFF00) << 8)); spi_transmit((uint16_t *)g_fifo, 2); i += 1; } @@ -1301,10 +1302,11 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { - g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | (uint32_t)((~image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | + (uint32_t)((~image[i] & 0xFF00) >> 8)); spi_transmit((uint16_t *)g_fifo, 2); i += 1; } @@ -1313,7 +1315,8 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 __enable_irq(); } -void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask) +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask) { area_t _area; area_t *area; @@ -1340,13 +1343,15 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (image[i] == original_color) { - g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | (uint32_t)((mask & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | + (uint32_t)((mask & 0xFF00) >> 8)); } else { - g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | + (uint32_t)((image[i] & 0xFF00) >> 8)); } spi_transmit((uint16_t *)g_fifo, 2); i += 1; @@ -1356,7 +1361,8 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t __enable_irq(); } -void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask) +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask) { area_t _area; area_t *area; @@ -1383,13 +1389,15 @@ void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, u displaySub(area->x, area->y, w, h); - int i = 0; + int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (image[i] == original_color) { - g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | (uint32_t)((mask & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | + (uint32_t)((mask & 0xFF00) >> 8)); } else { - g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | (uint32_t)((~image[i] & 0xFF00) >> 8)); + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | + (uint32_t)((~image[i] & 0xFF00) >> 8)); } spi_transmit((uint16_t *)g_fifo, 2); i += 1; @@ -1596,7 +1604,8 @@ void MXC_TFT_PrintPalette(void) } } -void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, int radius, uint32_t background_color) +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, + int radius, uint32_t background_color) { area_t _area; area_t *area; diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.h b/Libraries/MiscDrivers/Display/tft_ssd2119.h index aeed7ce1138..e947fe869b0 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.h +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.h @@ -113,7 +113,6 @@ void MXC_TFT_ClearScreen(void); */ void MXC_TFT_FillRect(area_t *area, int color); - /** * @brief Draws an image that's already been formatted for the * 9-bit SPI transactions. @@ -167,7 +166,8 @@ void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint1 * @param original_color 16-bit RGB565 color code to be replaced on bitmap. * @param mask New 16-bit RGB565 color code that replaces the original color. */ -void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask); +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask); /** * @brief Draws an inverted color, raw bitmap (RGB565 16-bit color codes) to display with a single RGB565 color replaced @@ -184,7 +184,8 @@ void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t * @param original_color 16-bit RGB565 color code to be replaced on bitmap. * @param mask New 16-bit RGB565 color code that replaces the original color. */ -void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, uint16_t original_color, uint16_t mask); +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask); /** * @brief Draws a single-pixel height, horizontal line. @@ -228,7 +229,6 @@ void MXC_TFT_DrawRect(int pixelX, int pixelY, int width, int height, uint32_t co */ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t color); - /** * @brief Draws a rectangle with rounded corners. * @@ -240,7 +240,8 @@ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t * @param radius Radius of corners (how much you want rounded off). * @param background_color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). */ -void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, int radius, uint32_t background_color); +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, + int radius, uint32_t background_color); /** * @brief Draw a bitmap From f6159896fdc2407b31b91feb76e338d2c9e93be9 Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 12:03:14 -0500 Subject: [PATCH 24/27] Fix more comments --- Examples/MAX32655/Demo_2048/RISCV/src/controller.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c index 8c4222c5b1d..c7ea6f3365c 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c @@ -50,7 +50,8 @@ int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud) NVIC_DisableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); NVIC_EnableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); - // Initialize UART to its highest speed. + // This will re-initialize the console UART since the controller + // and console share the same UART port. error = MXC_UART_Init(uart, baud, MXC_UART_APB_CLK); if (error != E_NO_ERROR) { return error; From 1a23015dd51a84bc7bba77618c8ab2be6d788897 Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 12:10:19 -0500 Subject: [PATCH 25/27] Fix linter erros that formatter didn't catch --- .../MAX32655/Demo_2048/ARM/resources/all_imgs.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c index b2091035ae7..d054ad552ca 100644 --- a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c +++ b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c @@ -18,10 +18,9 @@ __attribute__((section(".bin_storage_img"))) __attribute__((__used__)) const unsigned char imgs_arr[] = { - - /* - Header - */ + /** + * Header + */ 0x18, 0x00, 0x00, @@ -47,9 +46,9 @@ const unsigned char imgs_arr[] = { 0x00, 0x00, - /* - Palette - */ + /** + * Palette + */ 0x01, 0x1D, 0x00, @@ -115969,5 +115968,4 @@ const unsigned char imgs_arr[] = { 0x3B, 0x00, 0x00, - -}; \ No newline at end of file +}; From b51411a3419ffd00c9e9119771a21f2809bf149e Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 12:57:16 -0500 Subject: [PATCH 26/27] Fix mismatch pixel color for block 128 --- .../Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h index f074e776ee5..e4fb4d691de 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h @@ -218,7 +218,7 @@ __flash uint16_t block_128[] = { 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbef7, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6210, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, From 79c5ac28ea38c638f77ba81850c5a435fe08dded Mon Sep 17 00:00:00 2001 From: Woo Date: Tue, 17 Sep 2024 16:06:58 -0500 Subject: [PATCH 27/27] Fix typos and remove comments --- Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h | 6 +++--- Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h | 6 +++--- Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c | 4 ++-- Libraries/MiscDrivers/Display/tft_ssd2119.c | 1 - 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h index b32456265eb..b3b3ed1bb93 100644 --- a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h @@ -49,10 +49,10 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indices are from 0 to (16 blocks * 4 bytes) - 1. #define MAILBOX_MAIN_GRID_STATE_IDX \ - (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. + (4 * 16) // Indices are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indices before are for the main grids. #define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) #define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) #define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h index 3c8894d5e27..38447ce34df 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h @@ -49,10 +49,10 @@ typedef struct { #endif } mxcSemaBox_t; -#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indexes are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indices are from 0 to (16 blocks * 4 bytes) - 1. #define MAILBOX_MAIN_GRID_STATE_IDX \ - (4 * 16) // Indexes are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) -#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indexes before are for the main grids. + (4 * 16) // Indices are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indices before are for the main grids. #define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) #define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) #define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c index 623eaf292d3..e27a9424b99 100644 --- a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -48,7 +48,7 @@ // Did not choose to create defines for the size of the grid because // 2048 is played on 4x4 grid. // When using the grid as a single dimensional array, these are the -// the indexes assigned to each of the 16 squares. +// the indices assigned to each of the 16 squares. // 0 | 1 | 2 | 3 // ---|---|---|--- // 4 | 5 | 6 | 7 @@ -100,7 +100,7 @@ static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) // as a 1-D array. // Locations of main Locations of main // grid represented grid represented as - // as indexes for coordinates (row,col) + // as indices for coordinates (row,col) // 1-D array: for 2-D array: // 0 | 1 | 2 | 3 (0,0) | (0,1) | (0,2) | (0,3) // ---|---|---|--- ------|-------|-------|------ diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.c b/Libraries/MiscDrivers/Display/tft_ssd2119.c index 6011d06d210..3a11580ef0d 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.c +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.c @@ -1264,7 +1264,6 @@ void MXC_TFT_DrawBitmap(int px_x, int px_y, int width, int height, uint16_t *ima int i = 0; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { - // g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | (uint32_t)((image[i] & 0xFF00) >> 8)); g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | (uint32_t)((image[i] & 0xFF00) << 8)); spi_transmit((uint16_t *)g_fifo, 2);